From fb194a61dd83101d4ecf1ef42a7b891033655f1e Mon Sep 17 00:00:00 2001 From: lakshay Date: Wed, 17 Jul 2019 23:58:32 +0530 Subject: [PATCH] added database --- .../my_todo_app/todo_app/.todo_view.html.swp | Bin 0 -> 12288 bytes week-0/day-3/my_todo_app/todo_app/__init__.py | 140 +- .../__pycache__/__init__.cpython-36.pyc | Bin 2047 -> 2458 bytes .../todo_app/templates/todo_view.html | 2 +- .../day-3/my_todo_app/todo_app/todo_view.html | 0 .../yournewvirtualenv/bin/activate | 78 + .../yournewvirtualenv/bin/activate.csh | 36 + .../yournewvirtualenv/bin/activate.fish | 76 + .../yournewvirtualenv/bin/activate_this.py | 34 + .../yournewvirtualenv/bin/easy_install | 11 + .../yournewvirtualenv/bin/easy_install-3.6 | 11 + .../my_todo_app/yournewvirtualenv/bin/pip | 11 + .../my_todo_app/yournewvirtualenv/bin/pip3 | 11 + .../my_todo_app/yournewvirtualenv/bin/pip3.6 | 11 + .../my_todo_app/yournewvirtualenv/bin/python | 1 + .../yournewvirtualenv/bin/python-config | 78 + .../my_todo_app/yournewvirtualenv/bin/python3 | 1 + .../yournewvirtualenv/bin/python3.6 | Bin 0 -> 4571576 bytes .../my_todo_app/yournewvirtualenv/bin/wheel | 11 + .../yournewvirtualenv/include/python3.6m | 1 + .../lib/python3.6/__future__.py | 1 + .../__pycache__/__future__.cpython-36.pyc | Bin 0 -> 4232 bytes .../__pycache__/_bootlocale.cpython-36.pyc | Bin 0 -> 1045 bytes .../_collections_abc.cpython-36.pyc | Bin 0 -> 28862 bytes .../__pycache__/_weakrefset.cpython-36.pyc | Bin 0 -> 7893 bytes .../python3.6/__pycache__/abc.cpython-36.pyc | Bin 0 -> 7580 bytes .../__pycache__/base64.cpython-36.pyc | Bin 0 -> 17124 bytes .../__pycache__/bisect.cpython-36.pyc | Bin 0 -> 2741 bytes .../__pycache__/codecs.cpython-36.pyc | Bin 0 -> 33965 bytes .../python3.6/__pycache__/copy.cpython-36.pyc | Bin 0 -> 7144 bytes .../__pycache__/copyreg.cpython-36.pyc | Bin 0 -> 4309 bytes .../python3.6/__pycache__/enum.cpython-36.pyc | Bin 0 -> 23518 bytes .../__pycache__/fnmatch.cpython-36.pyc | Bin 0 -> 2939 bytes .../__pycache__/functools.cpython-36.pyc | Bin 0 -> 24127 bytes .../__pycache__/genericpath.cpython-36.pyc | Bin 0 -> 3791 bytes .../__pycache__/hashlib.cpython-36.pyc | Bin 0 -> 6757 bytes .../__pycache__/heapq.cpython-36.pyc | Bin 0 -> 14357 bytes .../python3.6/__pycache__/hmac.cpython-36.pyc | Bin 0 -> 4901 bytes .../python3.6/__pycache__/imp.cpython-36.pyc | Bin 0 -> 9761 bytes .../python3.6/__pycache__/io.cpython-36.pyc | Bin 0 -> 3452 bytes .../__pycache__/keyword.cpython-36.pyc | Bin 0 -> 1830 bytes .../__pycache__/linecache.cpython-36.pyc | Bin 0 -> 3843 bytes .../__pycache__/locale.cpython-36.pyc | Bin 0 -> 34095 bytes .../__pycache__/operator.cpython-36.pyc | Bin 0 -> 13978 bytes .../python3.6/__pycache__/os.cpython-36.pyc | Bin 0 -> 29693 bytes .../__pycache__/posixpath.cpython-36.pyc | Bin 0 -> 10488 bytes .../__pycache__/random.cpython-36.pyc | Bin 0 -> 19395 bytes .../python3.6/__pycache__/re.cpython-36.pyc | Bin 0 -> 14123 bytes .../__pycache__/reprlib.cpython-36.pyc | Bin 0 -> 5465 bytes .../__pycache__/shutil.cpython-36.pyc | Bin 0 -> 30769 bytes .../python3.6/__pycache__/site.cpython-36.pyc | Bin 0 -> 20735 bytes .../__pycache__/sre_compile.cpython-36.pyc | Bin 0 -> 10343 bytes .../__pycache__/sre_constants.cpython-36.pyc | Bin 0 -> 6037 bytes .../__pycache__/sre_parse.cpython-36.pyc | Bin 0 -> 20423 bytes .../python3.6/__pycache__/stat.cpython-36.pyc | Bin 0 -> 3916 bytes .../__pycache__/struct.cpython-36.pyc | Bin 0 -> 377 bytes .../__pycache__/tarfile.cpython-36.pyc | Bin 0 -> 62712 bytes .../__pycache__/tempfile.cpython-36.pyc | Bin 0 -> 25374 bytes .../__pycache__/token.cpython-36.pyc | Bin 0 -> 3385 bytes .../__pycache__/tokenize.cpython-36.pyc | Bin 0 -> 18712 bytes .../__pycache__/types.cpython-36.pyc | Bin 0 -> 8266 bytes .../__pycache__/warnings.cpython-36.pyc | Bin 0 -> 13323 bytes .../__pycache__/weakref.cpython-36.pyc | Bin 0 -> 19208 bytes .../lib/python3.6/_bootlocale.py | 1 + .../lib/python3.6/_collections_abc.py | 1 + .../lib/python3.6/_dummy_thread.py | 1 + .../lib/python3.6/_weakrefset.py | 1 + .../yournewvirtualenv/lib/python3.6/abc.py | 1 + .../yournewvirtualenv/lib/python3.6/base64.py | 1 + .../yournewvirtualenv/lib/python3.6/bisect.py | 1 + .../yournewvirtualenv/lib/python3.6/codecs.py | 1 + .../lib/python3.6/collections | 1 + .../python3.6/config-3.6m-x86_64-linux-gnu | 1 + .../yournewvirtualenv/lib/python3.6/copy.py | 1 + .../lib/python3.6/copyreg.py | 1 + .../lib/python3.6/distutils/__init__.py | 101 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 2874 bytes .../lib/python3.6/distutils/distutils.cfg | 6 + .../yournewvirtualenv/lib/python3.6/encodings | 1 + .../yournewvirtualenv/lib/python3.6/enum.py | 1 + .../lib/python3.6/fnmatch.py | 1 + .../lib/python3.6/functools.py | 1 + .../lib/python3.6/genericpath.py | 1 + .../lib/python3.6/hashlib.py | 1 + .../yournewvirtualenv/lib/python3.6/heapq.py | 1 + .../yournewvirtualenv/lib/python3.6/hmac.py | 1 + .../yournewvirtualenv/lib/python3.6/imp.py | 1 + .../yournewvirtualenv/lib/python3.6/importlib | 1 + .../yournewvirtualenv/lib/python3.6/io.py | 1 + .../lib/python3.6/keyword.py | 1 + .../lib/python3.6/lib-dynload | 1 + .../lib/python3.6/linecache.py | 1 + .../yournewvirtualenv/lib/python3.6/locale.py | 1 + .../lib/python3.6/no-global-site-packages.txt | 0 .../yournewvirtualenv/lib/python3.6/ntpath.py | 1 + .../lib/python3.6/operator.py | 1 + .../lib/python3.6/orig-prefix.txt | 1 + .../yournewvirtualenv/lib/python3.6/os.py | 1 + .../lib/python3.6/posixpath.py | 1 + .../yournewvirtualenv/lib/python3.6/random.py | 1 + .../yournewvirtualenv/lib/python3.6/re.py | 1 + .../lib/python3.6/reprlib.py | 1 + .../lib/python3.6/rlcompleter.py | 1 + .../yournewvirtualenv/lib/python3.6/shutil.py | 1 + .../__pycache__/easy_install.cpython-36.pyc | Bin 0 -> 275 bytes .../python3.6/site-packages/easy_install.py | 5 + .../pip-19.1.1.dist-info/INSTALLER | 1 + .../pip-19.1.1.dist-info/LICENSE.txt | 20 + .../pip-19.1.1.dist-info/METADATA | 75 + .../site-packages/pip-19.1.1.dist-info/RECORD | 618 ++ .../site-packages/pip-19.1.1.dist-info/WHEEL | 6 + .../pip-19.1.1.dist-info/entry_points.txt | 5 + .../pip-19.1.1.dist-info/top_level.txt | 1 + .../python3.6/site-packages/pip/__init__.py | 1 + .../python3.6/site-packages/pip/__main__.py | 19 + .../pip/__pycache__/__init__.cpython-36.pyc | Bin 0 -> 148 bytes .../pip/__pycache__/__main__.cpython-36.pyc | Bin 0 -> 400 bytes .../site-packages/pip/_internal/__init__.py | 78 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 1792 bytes .../__pycache__/build_env.cpython-36.pyc | Bin 0 -> 7438 bytes .../__pycache__/cache.cpython-36.pyc | Bin 0 -> 7000 bytes .../__pycache__/configuration.cpython-36.pyc | Bin 0 -> 9704 bytes .../__pycache__/download.cpython-36.pyc | Bin 0 -> 20918 bytes .../__pycache__/exceptions.cpython-36.pyc | Bin 0 -> 11692 bytes .../__pycache__/index.cpython-36.pyc | Bin 0 -> 28769 bytes .../__pycache__/locations.cpython-36.pyc | Bin 0 -> 4385 bytes .../__pycache__/pep425tags.cpython-36.pyc | Bin 0 -> 8284 bytes .../__pycache__/pyproject.cpython-36.pyc | Bin 0 -> 3134 bytes .../__pycache__/resolve.cpython-36.pyc | Bin 0 -> 9054 bytes .../__pycache__/wheel.cpython-36.pyc | Bin 0 -> 26065 bytes .../site-packages/pip/_internal/build_env.py | 215 + .../site-packages/pip/_internal/cache.py | 224 + .../pip/_internal/cli/__init__.py | 4 + .../cli/__pycache__/__init__.cpython-36.pyc | Bin 0 -> 223 bytes .../__pycache__/autocompletion.cpython-36.pyc | Bin 0 -> 5065 bytes .../__pycache__/base_command.cpython-36.pyc | Bin 0 -> 7752 bytes .../cli/__pycache__/cmdoptions.cpython-36.pyc | Bin 0 -> 16809 bytes .../__pycache__/main_parser.cpython-36.pyc | Bin 0 -> 2311 bytes .../cli/__pycache__/parser.cpython-36.pyc | Bin 0 -> 8907 bytes .../__pycache__/status_codes.cpython-36.pyc | Bin 0 -> 352 bytes .../pip/_internal/cli/autocompletion.py | 152 + .../pip/_internal/cli/base_command.py | 340 + .../pip/_internal/cli/cmdoptions.py | 809 ++ .../pip/_internal/cli/main_parser.py | 104 + .../site-packages/pip/_internal/cli/parser.py | 261 + .../pip/_internal/cli/status_codes.py | 8 + .../pip/_internal/commands/__init__.py | 79 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 2451 bytes .../commands/__pycache__/check.cpython-36.pyc | Bin 0 -> 1276 bytes .../__pycache__/completion.cpython-36.pyc | Bin 0 -> 3025 bytes .../__pycache__/configuration.cpython-36.pyc | Bin 0 -> 6873 bytes .../__pycache__/download.cpython-36.pyc | Bin 0 -> 4666 bytes .../__pycache__/freeze.cpython-36.pyc | Bin 0 -> 2813 bytes .../commands/__pycache__/hash.cpython-36.pyc | Bin 0 -> 2015 bytes .../commands/__pycache__/help.cpython-36.pyc | Bin 0 -> 1191 bytes .../__pycache__/install.cpython-36.pyc | Bin 0 -> 12850 bytes .../commands/__pycache__/list.cpython-36.pyc | Bin 0 -> 8692 bytes .../__pycache__/search.cpython-36.pyc | Bin 0 -> 4261 bytes .../commands/__pycache__/show.cpython-36.pyc | Bin 0 -> 5870 bytes .../__pycache__/uninstall.cpython-36.pyc | Bin 0 -> 2647 bytes .../commands/__pycache__/wheel.cpython-36.pyc | Bin 0 -> 4950 bytes .../pip/_internal/commands/check.py | 41 + .../pip/_internal/commands/completion.py | 94 + .../pip/_internal/commands/configuration.py | 253 + .../pip/_internal/commands/download.py | 176 + .../pip/_internal/commands/freeze.py | 96 + .../pip/_internal/commands/hash.py | 57 + .../pip/_internal/commands/help.py | 37 + .../pip/_internal/commands/install.py | 587 ++ .../pip/_internal/commands/list.py | 302 + .../pip/_internal/commands/search.py | 135 + .../pip/_internal/commands/show.py | 168 + .../pip/_internal/commands/uninstall.py | 78 + .../pip/_internal/commands/wheel.py | 186 + .../pip/_internal/configuration.py | 384 + .../site-packages/pip/_internal/download.py | 979 ++ .../site-packages/pip/_internal/exceptions.py | 274 + .../site-packages/pip/_internal/index.py | 1108 +++ .../site-packages/pip/_internal/locations.py | 211 + .../pip/_internal/models/__init__.py | 2 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 211 bytes .../__pycache__/candidate.cpython-36.pyc | Bin 0 -> 1244 bytes .../__pycache__/format_control.cpython-36.pyc | Bin 0 -> 2214 bytes .../models/__pycache__/index.cpython-36.pyc | Bin 0 -> 1115 bytes .../models/__pycache__/link.cpython-36.pyc | Bin 0 -> 4934 bytes .../pip/_internal/models/candidate.py | 31 + .../pip/_internal/models/format_control.py | 73 + .../pip/_internal/models/index.py | 31 + .../pip/_internal/models/link.py | 163 + .../pip/_internal/operations/__init__.py | 0 .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 147 bytes .../__pycache__/check.cpython-36.pyc | Bin 0 -> 3572 bytes .../__pycache__/freeze.cpython-36.pyc | Bin 0 -> 5619 bytes .../__pycache__/prepare.cpython-36.pyc | Bin 0 -> 10497 bytes .../pip/_internal/operations/check.py | 155 + .../pip/_internal/operations/freeze.py | 247 + .../pip/_internal/operations/prepare.py | 426 + .../site-packages/pip/_internal/pep425tags.py | 381 + .../site-packages/pip/_internal/pyproject.py | 171 + .../pip/_internal/req/__init__.py | 78 + .../req/__pycache__/__init__.cpython-36.pyc | Bin 0 -> 1648 bytes .../__pycache__/constructors.cpython-36.pyc | Bin 0 -> 7553 bytes .../req/__pycache__/req_file.cpython-36.pyc | Bin 0 -> 9191 bytes .../__pycache__/req_install.cpython-36.pyc | Bin 0 -> 24966 bytes .../req/__pycache__/req_set.cpython-36.pyc | Bin 0 -> 5629 bytes .../__pycache__/req_tracker.cpython-36.pyc | Bin 0 -> 3170 bytes .../__pycache__/req_uninstall.cpython-36.pyc | Bin 0 -> 17260 bytes .../pip/_internal/req/constructors.py | 340 + .../pip/_internal/req/req_file.py | 383 + .../pip/_internal/req/req_install.py | 1028 +++ .../pip/_internal/req/req_set.py | 193 + .../pip/_internal/req/req_tracker.py | 96 + .../pip/_internal/req/req_uninstall.py | 633 ++ .../site-packages/pip/_internal/resolve.py | 393 + .../pip/_internal/utils/__init__.py | 0 .../utils/__pycache__/__init__.cpython-36.pyc | Bin 0 -> 142 bytes .../utils/__pycache__/appdirs.cpython-36.pyc | Bin 0 -> 7983 bytes .../utils/__pycache__/compat.cpython-36.pyc | Bin 0 -> 6119 bytes .../__pycache__/deprecation.cpython-36.pyc | Bin 0 -> 2551 bytes .../utils/__pycache__/encoding.cpython-36.pyc | Bin 0 -> 1226 bytes .../__pycache__/filesystem.cpython-36.pyc | Bin 0 -> 611 bytes .../utils/__pycache__/glibc.cpython-36.pyc | Bin 0 -> 1635 bytes .../utils/__pycache__/hashes.cpython-36.pyc | Bin 0 -> 3549 bytes .../utils/__pycache__/logging.cpython-36.pyc | Bin 0 -> 8985 bytes .../utils/__pycache__/misc.cpython-36.pyc | Bin 0 -> 25037 bytes .../utils/__pycache__/models.cpython-36.pyc | Bin 0 -> 1891 bytes .../utils/__pycache__/outdated.cpython-36.pyc | Bin 0 -> 3927 bytes .../__pycache__/packaging.cpython-36.pyc | Bin 0 -> 2561 bytes .../setuptools_build.cpython-36.pyc | Bin 0 -> 337 bytes .../utils/__pycache__/temp_dir.cpython-36.pyc | Bin 0 -> 4864 bytes .../utils/__pycache__/typing.cpython-36.pyc | Bin 0 -> 1272 bytes .../utils/__pycache__/ui.cpython-36.pyc | Bin 0 -> 11723 bytes .../pip/_internal/utils/appdirs.py | 268 + .../pip/_internal/utils/compat.py | 264 + .../pip/_internal/utils/deprecation.py | 93 + .../pip/_internal/utils/encoding.py | 39 + .../pip/_internal/utils/filesystem.py | 30 + .../pip/_internal/utils/glibc.py | 93 + .../pip/_internal/utils/hashes.py | 115 + .../pip/_internal/utils/logging.py | 371 + .../site-packages/pip/_internal/utils/misc.py | 1011 ++ .../pip/_internal/utils/models.py | 40 + .../pip/_internal/utils/outdated.py | 162 + .../pip/_internal/utils/packaging.py | 85 + .../pip/_internal/utils/setuptools_build.py | 8 + .../pip/_internal/utils/temp_dir.py | 155 + .../pip/_internal/utils/typing.py | 29 + .../site-packages/pip/_internal/utils/ui.py | 424 + .../pip/_internal/vcs/__init__.py | 604 ++ .../vcs/__pycache__/__init__.cpython-36.pyc | Bin 0 -> 17007 bytes .../vcs/__pycache__/bazaar.cpython-36.pyc | Bin 0 -> 3432 bytes .../vcs/__pycache__/git.cpython-36.pyc | Bin 0 -> 9067 bytes .../vcs/__pycache__/mercurial.cpython-36.pyc | Bin 0 -> 3665 bytes .../vcs/__pycache__/subversion.cpython-36.pyc | Bin 0 -> 6698 bytes .../site-packages/pip/_internal/vcs/bazaar.py | 103 + .../site-packages/pip/_internal/vcs/git.py | 362 + .../pip/_internal/vcs/mercurial.py | 105 + .../pip/_internal/vcs/subversion.py | 234 + .../site-packages/pip/_internal/wheel.py | 1098 +++ .../site-packages/pip/_vendor/__init__.py | 109 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 2809 bytes .../__pycache__/appdirs.cpython-36.pyc | Bin 0 -> 20609 bytes .../_vendor/__pycache__/distro.cpython-36.pyc | Bin 0 -> 36307 bytes .../__pycache__/ipaddress.cpython-36.pyc | Bin 0 -> 66498 bytes .../__pycache__/pyparsing.cpython-36.pyc | Bin 0 -> 222459 bytes .../__pycache__/retrying.cpython-36.pyc | Bin 0 -> 8042 bytes .../_vendor/__pycache__/six.cpython-36.pyc | Bin 0 -> 26460 bytes .../site-packages/pip/_vendor/appdirs.py | 604 ++ .../pip/_vendor/cachecontrol/__init__.py | 11 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 500 bytes .../__pycache__/_cmd.cpython-36.pyc | Bin 0 -> 1503 bytes .../__pycache__/adapter.cpython-36.pyc | Bin 0 -> 2991 bytes .../__pycache__/cache.cpython-36.pyc | Bin 0 -> 1716 bytes .../__pycache__/compat.cpython-36.pyc | Bin 0 -> 707 bytes .../__pycache__/controller.cpython-36.pyc | Bin 0 -> 7648 bytes .../__pycache__/filewrapper.cpython-36.pyc | Bin 0 -> 2104 bytes .../__pycache__/heuristics.cpython-36.pyc | Bin 0 -> 4634 bytes .../__pycache__/serialize.cpython-36.pyc | Bin 0 -> 4188 bytes .../__pycache__/wrapper.cpython-36.pyc | Bin 0 -> 608 bytes .../pip/_vendor/cachecontrol/_cmd.py | 57 + .../pip/_vendor/cachecontrol/adapter.py | 133 + .../pip/_vendor/cachecontrol/cache.py | 39 + .../_vendor/cachecontrol/caches/__init__.py | 2 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 244 bytes .../__pycache__/file_cache.cpython-36.pyc | Bin 0 -> 3178 bytes .../__pycache__/redis_cache.cpython-36.pyc | Bin 0 -> 1500 bytes .../_vendor/cachecontrol/caches/file_cache.py | 146 + .../cachecontrol/caches/redis_cache.py | 33 + .../pip/_vendor/cachecontrol/compat.py | 29 + .../pip/_vendor/cachecontrol/controller.py | 367 + .../pip/_vendor/cachecontrol/filewrapper.py | 80 + .../pip/_vendor/cachecontrol/heuristics.py | 135 + .../pip/_vendor/cachecontrol/serialize.py | 186 + .../pip/_vendor/cachecontrol/wrapper.py | 29 + .../pip/_vendor/certifi/__init__.py | 3 + .../pip/_vendor/certifi/__main__.py | 2 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 207 bytes .../__pycache__/__main__.cpython-36.pyc | Bin 0 -> 210 bytes .../certifi/__pycache__/core.cpython-36.pyc | Bin 0 -> 419 bytes .../pip/_vendor/certifi/cacert.pem | 4658 ++++++++++ .../site-packages/pip/_vendor/certifi/core.py | 15 + .../pip/_vendor/chardet/__init__.py | 39 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 794 bytes .../__pycache__/big5freq.cpython-36.pyc | Bin 0 -> 54681 bytes .../__pycache__/big5prober.cpython-36.pyc | Bin 0 -> 1070 bytes .../chardistribution.cpython-36.pyc | Bin 0 -> 6266 bytes .../charsetgroupprober.cpython-36.pyc | Bin 0 -> 2177 bytes .../__pycache__/charsetprober.cpython-36.pyc | Bin 0 -> 3403 bytes .../codingstatemachine.cpython-36.pyc | Bin 0 -> 2834 bytes .../chardet/__pycache__/compat.cpython-36.pyc | Bin 0 -> 310 bytes .../__pycache__/cp949prober.cpython-36.pyc | Bin 0 -> 1077 bytes .../chardet/__pycache__/enums.cpython-36.pyc | Bin 0 -> 2568 bytes .../__pycache__/escprober.cpython-36.pyc | Bin 0 -> 2559 bytes .../chardet/__pycache__/escsm.cpython-36.pyc | Bin 0 -> 7316 bytes .../__pycache__/eucjpprober.cpython-36.pyc | Bin 0 -> 2363 bytes .../__pycache__/euckrfreq.cpython-36.pyc | Bin 0 -> 24067 bytes .../__pycache__/euckrprober.cpython-36.pyc | Bin 0 -> 1078 bytes .../__pycache__/euctwfreq.cpython-36.pyc | Bin 0 -> 54690 bytes .../__pycache__/euctwprober.cpython-36.pyc | Bin 0 -> 1078 bytes .../__pycache__/gb2312freq.cpython-36.pyc | Bin 0 -> 38332 bytes .../__pycache__/gb2312prober.cpython-36.pyc | Bin 0 -> 1086 bytes .../__pycache__/hebrewprober.cpython-36.pyc | Bin 0 -> 2920 bytes .../__pycache__/jisfreq.cpython-36.pyc | Bin 0 -> 44476 bytes .../chardet/__pycache__/jpcntx.cpython-36.pyc | Bin 0 -> 38615 bytes .../langbulgarianmodel.cpython-36.pyc | Bin 0 -> 24830 bytes .../langcyrillicmodel.cpython-36.pyc | Bin 0 -> 30381 bytes .../__pycache__/langgreekmodel.cpython-36.pyc | Bin 0 -> 24508 bytes .../langhebrewmodel.cpython-36.pyc | Bin 0 -> 23362 bytes .../langhungarianmodel.cpython-36.pyc | Bin 0 -> 24804 bytes .../__pycache__/langthaimodel.cpython-36.pyc | Bin 0 -> 23341 bytes .../langturkishmodel.cpython-36.pyc | Bin 0 -> 23359 bytes .../__pycache__/latin1prober.cpython-36.pyc | Bin 0 -> 2891 bytes .../mbcharsetprober.cpython-36.pyc | Bin 0 -> 2182 bytes .../mbcsgroupprober.cpython-36.pyc | Bin 0 -> 1073 bytes .../chardet/__pycache__/mbcssm.cpython-36.pyc | Bin 0 -> 17526 bytes .../sbcharsetprober.cpython-36.pyc | Bin 0 -> 2935 bytes .../sbcsgroupprober.cpython-36.pyc | Bin 0 -> 1563 bytes .../__pycache__/sjisprober.cpython-36.pyc | Bin 0 -> 2389 bytes .../universaldetector.cpython-36.pyc | Bin 0 -> 5784 bytes .../__pycache__/utf8prober.cpython-36.pyc | Bin 0 -> 1920 bytes .../__pycache__/version.cpython-36.pyc | Bin 0 -> 389 bytes .../pip/_vendor/chardet/big5freq.py | 386 + .../pip/_vendor/chardet/big5prober.py | 47 + .../pip/_vendor/chardet/chardistribution.py | 233 + .../pip/_vendor/chardet/charsetgroupprober.py | 106 + .../pip/_vendor/chardet/charsetprober.py | 145 + .../pip/_vendor/chardet/cli/__init__.py | 1 + .../cli/__pycache__/__init__.cpython-36.pyc | Bin 0 -> 146 bytes .../cli/__pycache__/chardetect.cpython-36.pyc | Bin 0 -> 3070 bytes .../pip/_vendor/chardet/cli/chardetect.py | 85 + .../pip/_vendor/chardet/codingstatemachine.py | 88 + .../pip/_vendor/chardet/compat.py | 34 + .../pip/_vendor/chardet/cp949prober.py | 49 + .../pip/_vendor/chardet/enums.py | 76 + .../pip/_vendor/chardet/escprober.py | 101 + .../pip/_vendor/chardet/escsm.py | 246 + .../pip/_vendor/chardet/eucjpprober.py | 92 + .../pip/_vendor/chardet/euckrfreq.py | 195 + .../pip/_vendor/chardet/euckrprober.py | 47 + .../pip/_vendor/chardet/euctwfreq.py | 387 + .../pip/_vendor/chardet/euctwprober.py | 46 + .../pip/_vendor/chardet/gb2312freq.py | 283 + .../pip/_vendor/chardet/gb2312prober.py | 46 + .../pip/_vendor/chardet/hebrewprober.py | 292 + .../pip/_vendor/chardet/jisfreq.py | 325 + .../pip/_vendor/chardet/jpcntx.py | 233 + .../pip/_vendor/chardet/langbulgarianmodel.py | 228 + .../pip/_vendor/chardet/langcyrillicmodel.py | 333 + .../pip/_vendor/chardet/langgreekmodel.py | 225 + .../pip/_vendor/chardet/langhebrewmodel.py | 200 + .../pip/_vendor/chardet/langhungarianmodel.py | 225 + .../pip/_vendor/chardet/langthaimodel.py | 199 + .../pip/_vendor/chardet/langturkishmodel.py | 193 + .../pip/_vendor/chardet/latin1prober.py | 145 + .../pip/_vendor/chardet/mbcharsetprober.py | 91 + .../pip/_vendor/chardet/mbcsgroupprober.py | 54 + .../pip/_vendor/chardet/mbcssm.py | 572 ++ .../pip/_vendor/chardet/sbcharsetprober.py | 132 + .../pip/_vendor/chardet/sbcsgroupprober.py | 73 + .../pip/_vendor/chardet/sjisprober.py | 92 + .../pip/_vendor/chardet/universaldetector.py | 286 + .../pip/_vendor/chardet/utf8prober.py | 82 + .../pip/_vendor/chardet/version.py | 9 + .../pip/_vendor/colorama/__init__.py | 6 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 394 bytes .../colorama/__pycache__/ansi.cpython-36.pyc | Bin 0 -> 3292 bytes .../__pycache__/ansitowin32.cpython-36.pyc | Bin 0 -> 7567 bytes .../__pycache__/initialise.cpython-36.pyc | Bin 0 -> 1615 bytes .../colorama/__pycache__/win32.cpython-36.pyc | Bin 0 -> 3817 bytes .../__pycache__/winterm.cpython-36.pyc | Bin 0 -> 4555 bytes .../pip/_vendor/colorama/ansi.py | 102 + .../pip/_vendor/colorama/ansitowin32.py | 257 + .../pip/_vendor/colorama/initialise.py | 80 + .../pip/_vendor/colorama/win32.py | 152 + .../pip/_vendor/colorama/winterm.py | 169 + .../pip/_vendor/distlib/__init__.py | 23 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 992 bytes .../distlib/__pycache__/compat.cpython-36.pyc | Bin 0 -> 32018 bytes .../__pycache__/database.cpython-36.pyc | Bin 0 -> 42595 bytes .../distlib/__pycache__/index.cpython-36.pyc | Bin 0 -> 17323 bytes .../__pycache__/locators.cpython-36.pyc | Bin 0 -> 38803 bytes .../__pycache__/manifest.cpython-36.pyc | Bin 0 -> 10311 bytes .../__pycache__/markers.cpython-36.pyc | Bin 0 -> 4430 bytes .../__pycache__/metadata.cpython-36.pyc | Bin 0 -> 27670 bytes .../__pycache__/resources.cpython-36.pyc | Bin 0 -> 10859 bytes .../__pycache__/scripts.cpython-36.pyc | Bin 0 -> 11046 bytes .../distlib/__pycache__/util.cpython-36.pyc | Bin 0 -> 48029 bytes .../__pycache__/version.cpython-36.pyc | Bin 0 -> 20638 bytes .../distlib/__pycache__/wheel.cpython-36.pyc | Bin 0 -> 25402 bytes .../pip/_vendor/distlib/_backport/__init__.py | 6 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 434 bytes .../_backport/__pycache__/misc.cpython-36.pyc | Bin 0 -> 1031 bytes .../__pycache__/shutil.cpython-36.pyc | Bin 0 -> 21387 bytes .../__pycache__/sysconfig.cpython-36.pyc | Bin 0 -> 15988 bytes .../__pycache__/tarfile.cpython-36.pyc | Bin 0 -> 62998 bytes .../pip/_vendor/distlib/_backport/misc.py | 41 + .../pip/_vendor/distlib/_backport/shutil.py | 761 ++ .../_vendor/distlib/_backport/sysconfig.cfg | 84 + .../_vendor/distlib/_backport/sysconfig.py | 788 ++ .../pip/_vendor/distlib/_backport/tarfile.py | 2607 ++++++ .../pip/_vendor/distlib/compat.py | 1120 +++ .../pip/_vendor/distlib/database.py | 1339 +++ .../pip/_vendor/distlib/index.py | 516 ++ .../pip/_vendor/distlib/locators.py | 1295 +++ .../pip/_vendor/distlib/manifest.py | 393 + .../pip/_vendor/distlib/markers.py | 131 + .../pip/_vendor/distlib/metadata.py | 1094 +++ .../pip/_vendor/distlib/resources.py | 355 + .../pip/_vendor/distlib/scripts.py | 417 + .../site-packages/pip/_vendor/distlib/t32.exe | Bin 0 -> 92672 bytes .../site-packages/pip/_vendor/distlib/t64.exe | Bin 0 -> 102400 bytes .../site-packages/pip/_vendor/distlib/util.py | 1756 ++++ .../pip/_vendor/distlib/version.py | 736 ++ .../site-packages/pip/_vendor/distlib/w32.exe | Bin 0 -> 89088 bytes .../site-packages/pip/_vendor/distlib/w64.exe | Bin 0 -> 99328 bytes .../pip/_vendor/distlib/wheel.py | 988 ++ .../site-packages/pip/_vendor/distro.py | 1216 +++ .../pip/_vendor/html5lib/__init__.py | 35 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 1263 bytes .../__pycache__/_ihatexml.cpython-36.pyc | Bin 0 -> 13807 bytes .../__pycache__/_inputstream.cpython-36.pyc | Bin 0 -> 22675 bytes .../__pycache__/_tokenizer.cpython-36.pyc | Bin 0 -> 42111 bytes .../__pycache__/_utils.cpython-36.pyc | Bin 0 -> 3233 bytes .../__pycache__/constants.cpython-36.pyc | Bin 0 -> 66379 bytes .../__pycache__/html5parser.cpython-36.pyc | Bin 0 -> 99712 bytes .../__pycache__/serializer.cpython-36.pyc | Bin 0 -> 10881 bytes .../pip/_vendor/html5lib/_ihatexml.py | 288 + .../pip/_vendor/html5lib/_inputstream.py | 923 ++ .../pip/_vendor/html5lib/_tokenizer.py | 1721 ++++ .../pip/_vendor/html5lib/_trie/__init__.py | 14 + .../_trie/__pycache__/__init__.cpython-36.pyc | Bin 0 -> 376 bytes .../_trie/__pycache__/_base.cpython-36.pyc | Bin 0 -> 1459 bytes .../_trie/__pycache__/datrie.cpython-36.pyc | Bin 0 -> 1978 bytes .../_trie/__pycache__/py.cpython-36.pyc | Bin 0 -> 2183 bytes .../pip/_vendor/html5lib/_trie/_base.py | 37 + .../pip/_vendor/html5lib/_trie/datrie.py | 44 + .../pip/_vendor/html5lib/_trie/py.py | 67 + .../pip/_vendor/html5lib/_utils.py | 124 + .../pip/_vendor/html5lib/constants.py | 2947 ++++++ .../pip/_vendor/html5lib/filters/__init__.py | 0 .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 151 bytes .../alphabeticalattributes.cpython-36.pyc | Bin 0 -> 1277 bytes .../filters/__pycache__/base.cpython-36.pyc | Bin 0 -> 801 bytes .../inject_meta_charset.cpython-36.pyc | Bin 0 -> 1848 bytes .../filters/__pycache__/lint.cpython-36.pyc | Bin 0 -> 2594 bytes .../__pycache__/optionaltags.cpython-36.pyc | Bin 0 -> 3055 bytes .../__pycache__/sanitizer.cpython-36.pyc | Bin 0 -> 19113 bytes .../__pycache__/whitespace.cpython-36.pyc | Bin 0 -> 1309 bytes .../filters/alphabeticalattributes.py | 29 + .../pip/_vendor/html5lib/filters/base.py | 12 + .../html5lib/filters/inject_meta_charset.py | 73 + .../pip/_vendor/html5lib/filters/lint.py | 93 + .../_vendor/html5lib/filters/optionaltags.py | 207 + .../pip/_vendor/html5lib/filters/sanitizer.py | 896 ++ .../_vendor/html5lib/filters/whitespace.py | 38 + .../pip/_vendor/html5lib/html5parser.py | 2791 ++++++ .../pip/_vendor/html5lib/serializer.py | 409 + .../_vendor/html5lib/treeadapters/__init__.py | 30 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 890 bytes .../__pycache__/genshi.cpython-36.pyc | Bin 0 -> 1634 bytes .../__pycache__/sax.cpython-36.pyc | Bin 0 -> 1452 bytes .../_vendor/html5lib/treeadapters/genshi.py | 54 + .../pip/_vendor/html5lib/treeadapters/sax.py | 50 + .../_vendor/html5lib/treebuilders/__init__.py | 88 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 3271 bytes .../__pycache__/base.cpython-36.pyc | Bin 0 -> 11278 bytes .../__pycache__/dom.cpython-36.pyc | Bin 0 -> 9224 bytes .../__pycache__/etree.cpython-36.pyc | Bin 0 -> 11818 bytes .../__pycache__/etree_lxml.cpython-36.pyc | Bin 0 -> 11744 bytes .../pip/_vendor/html5lib/treebuilders/base.py | 417 + .../pip/_vendor/html5lib/treebuilders/dom.py | 236 + .../_vendor/html5lib/treebuilders/etree.py | 340 + .../html5lib/treebuilders/etree_lxml.py | 366 + .../_vendor/html5lib/treewalkers/__init__.py | 154 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 3958 bytes .../__pycache__/base.cpython-36.pyc | Bin 0 -> 6946 bytes .../__pycache__/dom.cpython-36.pyc | Bin 0 -> 1673 bytes .../__pycache__/etree.cpython-36.pyc | Bin 0 -> 3515 bytes .../__pycache__/etree_lxml.cpython-36.pyc | Bin 0 -> 6608 bytes .../__pycache__/genshi.cpython-36.pyc | Bin 0 -> 1847 bytes .../pip/_vendor/html5lib/treewalkers/base.py | 252 + .../pip/_vendor/html5lib/treewalkers/dom.py | 43 + .../pip/_vendor/html5lib/treewalkers/etree.py | 130 + .../html5lib/treewalkers/etree_lxml.py | 213 + .../_vendor/html5lib/treewalkers/genshi.py | 69 + .../pip/_vendor/idna/__init__.py | 2 + .../idna/__pycache__/__init__.cpython-36.pyc | Bin 0 -> 208 bytes .../idna/__pycache__/codec.cpython-36.pyc | Bin 0 -> 3055 bytes .../idna/__pycache__/compat.cpython-36.pyc | Bin 0 -> 568 bytes .../idna/__pycache__/core.cpython-36.pyc | Bin 0 -> 9108 bytes .../idna/__pycache__/idnadata.cpython-36.pyc | Bin 0 -> 29747 bytes .../idna/__pycache__/intranges.cpython-36.pyc | Bin 0 -> 1769 bytes .../__pycache__/package_data.cpython-36.pyc | Bin 0 -> 162 bytes .../idna/__pycache__/uts46data.cpython-36.pyc | Bin 0 -> 241757 bytes .../site-packages/pip/_vendor/idna/codec.py | 118 + .../site-packages/pip/_vendor/idna/compat.py | 12 + .../site-packages/pip/_vendor/idna/core.py | 396 + .../pip/_vendor/idna/idnadata.py | 1979 ++++ .../pip/_vendor/idna/intranges.py | 53 + .../pip/_vendor/idna/package_data.py | 2 + .../pip/_vendor/idna/uts46data.py | 8205 +++++++++++++++++ .../site-packages/pip/_vendor/ipaddress.py | 2419 +++++ .../pip/_vendor/lockfile/__init__.py | 347 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 9860 bytes .../__pycache__/linklockfile.cpython-36.pyc | Bin 0 -> 2239 bytes .../__pycache__/mkdirlockfile.cpython-36.pyc | Bin 0 -> 2601 bytes .../__pycache__/pidlockfile.cpython-36.pyc | Bin 0 -> 4801 bytes .../__pycache__/sqlitelockfile.cpython-36.pyc | Bin 0 -> 3700 bytes .../symlinklockfile.cpython-36.pyc | Bin 0 -> 2124 bytes .../pip/_vendor/lockfile/linklockfile.py | 73 + .../pip/_vendor/lockfile/mkdirlockfile.py | 84 + .../pip/_vendor/lockfile/pidlockfile.py | 190 + .../pip/_vendor/lockfile/sqlitelockfile.py | 156 + .../pip/_vendor/lockfile/symlinklockfile.py | 70 + .../pip/_vendor/msgpack/__init__.py | 66 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 2022 bytes .../__pycache__/_version.cpython-36.pyc | Bin 0 -> 184 bytes .../__pycache__/exceptions.cpython-36.pyc | Bin 0 -> 2125 bytes .../__pycache__/fallback.cpython-36.pyc | Bin 0 -> 24648 bytes .../pip/_vendor/msgpack/_version.py | 1 + .../pip/_vendor/msgpack/exceptions.py | 41 + .../pip/_vendor/msgpack/fallback.py | 977 ++ .../pip/_vendor/packaging/__about__.py | 27 + .../pip/_vendor/packaging/__init__.py | 26 + .../__pycache__/__about__.cpython-36.pyc | Bin 0 -> 682 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 520 bytes .../__pycache__/_compat.cpython-36.pyc | Bin 0 -> 955 bytes .../__pycache__/_structures.cpython-36.pyc | Bin 0 -> 2812 bytes .../__pycache__/markers.cpython-36.pyc | Bin 0 -> 8830 bytes .../__pycache__/requirements.cpython-36.pyc | Bin 0 -> 3941 bytes .../__pycache__/specifiers.cpython-36.pyc | Bin 0 -> 19746 bytes .../__pycache__/utils.cpython-36.pyc | Bin 0 -> 1398 bytes .../__pycache__/version.cpython-36.pyc | Bin 0 -> 11951 bytes .../pip/_vendor/packaging/_compat.py | 31 + .../pip/_vendor/packaging/_structures.py | 68 + .../pip/_vendor/packaging/markers.py | 296 + .../pip/_vendor/packaging/requirements.py | 138 + .../pip/_vendor/packaging/specifiers.py | 749 ++ .../pip/_vendor/packaging/utils.py | 57 + .../pip/_vendor/packaging/version.py | 420 + .../pip/_vendor/pep517/__init__.py | 4 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 233 bytes .../__pycache__/_in_process.cpython-36.pyc | Bin 0 -> 5576 bytes .../pep517/__pycache__/build.cpython-36.pyc | Bin 0 -> 2715 bytes .../pep517/__pycache__/check.cpython-36.pyc | Bin 0 -> 4759 bytes .../__pycache__/colorlog.cpython-36.pyc | Bin 0 -> 2880 bytes .../pep517/__pycache__/compat.cpython-36.pyc | Bin 0 -> 969 bytes .../__pycache__/envbuild.cpython-36.pyc | Bin 0 -> 4153 bytes .../__pycache__/wrappers.cpython-36.pyc | Bin 0 -> 5434 bytes .../pip/_vendor/pep517/_in_process.py | 207 + .../site-packages/pip/_vendor/pep517/build.py | 108 + .../site-packages/pip/_vendor/pep517/check.py | 202 + .../pip/_vendor/pep517/colorlog.py | 115 + .../pip/_vendor/pep517/compat.py | 23 + .../pip/_vendor/pep517/envbuild.py | 158 + .../pip/_vendor/pep517/wrappers.py | 163 + .../pip/_vendor/pkg_resources/__init__.py | 3286 +++++++ .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 99563 bytes .../__pycache__/py31compat.cpython-36.pyc | Bin 0 -> 610 bytes .../pip/_vendor/pkg_resources/py31compat.py | 23 + .../pip/_vendor/progress/__init__.py | 177 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 5509 bytes .../progress/__pycache__/bar.cpython-36.pyc | Bin 0 -> 2710 bytes .../__pycache__/counter.cpython-36.pyc | Bin 0 -> 1483 bytes .../__pycache__/spinner.cpython-36.pyc | Bin 0 -> 1398 bytes .../site-packages/pip/_vendor/progress/bar.py | 91 + .../pip/_vendor/progress/counter.py | 41 + .../pip/_vendor/progress/spinner.py | 43 + .../site-packages/pip/_vendor/pyparsing.py | 6493 +++++++++++++ .../pip/_vendor/pytoml/__init__.py | 4 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 327 bytes .../pytoml/__pycache__/core.cpython-36.pyc | Bin 0 -> 890 bytes .../pytoml/__pycache__/parser.cpython-36.pyc | Bin 0 -> 10032 bytes .../pytoml/__pycache__/test.cpython-36.pyc | Bin 0 -> 1190 bytes .../pytoml/__pycache__/utils.cpython-36.pyc | Bin 0 -> 2091 bytes .../pytoml/__pycache__/writer.cpython-36.pyc | Bin 0 -> 3519 bytes .../site-packages/pip/_vendor/pytoml/core.py | 13 + .../pip/_vendor/pytoml/parser.py | 341 + .../site-packages/pip/_vendor/pytoml/test.py | 30 + .../site-packages/pip/_vendor/pytoml/utils.py | 67 + .../pip/_vendor/pytoml/writer.py | 106 + .../pip/_vendor/requests/__init__.py | 133 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 3438 bytes .../__pycache__/__version__.cpython-36.pyc | Bin 0 -> 501 bytes .../_internal_utils.cpython-36.pyc | Bin 0 -> 1259 bytes .../__pycache__/adapters.cpython-36.pyc | Bin 0 -> 16850 bytes .../requests/__pycache__/api.cpython-36.pyc | Bin 0 -> 6442 bytes .../requests/__pycache__/auth.cpython-36.pyc | Bin 0 -> 8293 bytes .../requests/__pycache__/certs.cpython-36.pyc | Bin 0 -> 584 bytes .../__pycache__/compat.cpython-36.pyc | Bin 0 -> 1563 bytes .../__pycache__/cookies.cpython-36.pyc | Bin 0 -> 18738 bytes .../__pycache__/exceptions.cpython-36.pyc | Bin 0 -> 5458 bytes .../requests/__pycache__/help.cpython-36.pyc | Bin 0 -> 2637 bytes .../requests/__pycache__/hooks.cpython-36.pyc | Bin 0 -> 931 bytes .../__pycache__/models.cpython-36.pyc | Bin 0 -> 24113 bytes .../__pycache__/packages.cpython-36.pyc | Bin 0 -> 476 bytes .../__pycache__/sessions.cpython-36.pyc | Bin 0 -> 19377 bytes .../__pycache__/status_codes.cpython-36.pyc | Bin 0 -> 4729 bytes .../__pycache__/structures.cpython-36.pyc | Bin 0 -> 4330 bytes .../requests/__pycache__/utils.cpython-36.pyc | Bin 0 -> 22111 bytes .../pip/_vendor/requests/__version__.py | 14 + .../pip/_vendor/requests/_internal_utils.py | 42 + .../pip/_vendor/requests/adapters.py | 533 ++ .../site-packages/pip/_vendor/requests/api.py | 158 + .../pip/_vendor/requests/auth.py | 305 + .../pip/_vendor/requests/certs.py | 18 + .../pip/_vendor/requests/compat.py | 74 + .../pip/_vendor/requests/cookies.py | 549 ++ .../pip/_vendor/requests/exceptions.py | 126 + .../pip/_vendor/requests/help.py | 119 + .../pip/_vendor/requests/hooks.py | 34 + .../pip/_vendor/requests/models.py | 953 ++ .../pip/_vendor/requests/packages.py | 16 + .../pip/_vendor/requests/sessions.py | 770 ++ .../pip/_vendor/requests/status_codes.py | 120 + .../pip/_vendor/requests/structures.py | 103 + .../pip/_vendor/requests/utils.py | 977 ++ .../site-packages/pip/_vendor/retrying.py | 267 + .../site-packages/pip/_vendor/six.py | 952 ++ .../pip/_vendor/urllib3/__init__.py | 92 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 2152 bytes .../__pycache__/_collections.cpython-36.pyc | Bin 0 -> 10639 bytes .../__pycache__/connection.cpython-36.pyc | Bin 0 -> 10092 bytes .../__pycache__/connectionpool.cpython-36.pyc | Bin 0 -> 23614 bytes .../__pycache__/exceptions.cpython-36.pyc | Bin 0 -> 10351 bytes .../urllib3/__pycache__/fields.cpython-36.pyc | Bin 0 -> 5821 bytes .../__pycache__/filepost.cpython-36.pyc | Bin 0 -> 2711 bytes .../__pycache__/poolmanager.cpython-36.pyc | Bin 0 -> 12918 bytes .../__pycache__/request.cpython-36.pyc | Bin 0 -> 5533 bytes .../__pycache__/response.cpython-36.pyc | Bin 0 -> 18733 bytes .../pip/_vendor/urllib3/_collections.py | 329 + .../pip/_vendor/urllib3/connection.py | 391 + .../pip/_vendor/urllib3/connectionpool.py | 896 ++ .../pip/_vendor/urllib3/contrib/__init__.py | 0 .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 150 bytes .../_appengine_environ.cpython-36.pyc | Bin 0 -> 1046 bytes .../__pycache__/appengine.cpython-36.pyc | Bin 0 -> 8265 bytes .../__pycache__/ntlmpool.cpython-36.pyc | Bin 0 -> 3192 bytes .../__pycache__/pyopenssl.cpython-36.pyc | Bin 0 -> 14481 bytes .../securetransport.cpython-36.pyc | Bin 0 -> 17845 bytes .../contrib/__pycache__/socks.cpython-36.pyc | Bin 0 -> 4856 bytes .../urllib3/contrib/_appengine_environ.py | 30 + .../contrib/_securetransport/__init__.py | 0 .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 167 bytes .../__pycache__/bindings.cpython-36.pyc | Bin 0 -> 10382 bytes .../__pycache__/low_level.cpython-36.pyc | Bin 0 -> 7443 bytes .../contrib/_securetransport/bindings.py | 593 ++ .../contrib/_securetransport/low_level.py | 346 + .../pip/_vendor/urllib3/contrib/appengine.py | 289 + .../pip/_vendor/urllib3/contrib/ntlmpool.py | 111 + .../pip/_vendor/urllib3/contrib/pyopenssl.py | 466 + .../urllib3/contrib/securetransport.py | 804 ++ .../pip/_vendor/urllib3/contrib/socks.py | 192 + .../pip/_vendor/urllib3/exceptions.py | 246 + .../pip/_vendor/urllib3/fields.py | 178 + .../pip/_vendor/urllib3/filepost.py | 98 + .../pip/_vendor/urllib3/packages/__init__.py | 5 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 276 bytes .../packages/__pycache__/six.cpython-36.pyc | Bin 0 -> 24448 bytes .../urllib3/packages/backports/__init__.py | 0 .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 161 bytes .../__pycache__/makefile.cpython-36.pyc | Bin 0 -> 1255 bytes .../urllib3/packages/backports/makefile.py | 53 + .../pip/_vendor/urllib3/packages/six.py | 868 ++ .../packages/ssl_match_hostname/__init__.py | 19 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 537 bytes .../_implementation.cpython-36.pyc | Bin 0 -> 3264 bytes .../ssl_match_hostname/_implementation.py | 156 + .../pip/_vendor/urllib3/poolmanager.py | 450 + .../pip/_vendor/urllib3/request.py | 150 + .../pip/_vendor/urllib3/response.py | 705 ++ .../pip/_vendor/urllib3/util/__init__.py | 54 + .../util/__pycache__/__init__.cpython-36.pyc | Bin 0 -> 1080 bytes .../__pycache__/connection.cpython-36.pyc | Bin 0 -> 3117 bytes .../util/__pycache__/queue.cpython-36.pyc | Bin 0 -> 991 bytes .../util/__pycache__/request.cpython-36.pyc | Bin 0 -> 3172 bytes .../util/__pycache__/response.cpython-36.pyc | Bin 0 -> 1920 bytes .../util/__pycache__/retry.cpython-36.pyc | Bin 0 -> 12606 bytes .../util/__pycache__/ssl_.cpython-36.pyc | Bin 0 -> 9510 bytes .../util/__pycache__/timeout.cpython-36.pyc | Bin 0 -> 8721 bytes .../util/__pycache__/url.cpython-36.pyc | Bin 0 -> 5140 bytes .../util/__pycache__/wait.cpython-36.pyc | Bin 0 -> 3101 bytes .../pip/_vendor/urllib3/util/connection.py | 134 + .../pip/_vendor/urllib3/util/queue.py | 21 + .../pip/_vendor/urllib3/util/request.py | 118 + .../pip/_vendor/urllib3/util/response.py | 87 + .../pip/_vendor/urllib3/util/retry.py | 411 + .../pip/_vendor/urllib3/util/ssl_.py | 381 + .../pip/_vendor/urllib3/util/timeout.py | 242 + .../pip/_vendor/urllib3/util/url.py | 230 + .../pip/_vendor/urllib3/util/wait.py | 150 + .../pip/_vendor/webencodings/__init__.py | 342 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 9628 bytes .../__pycache__/labels.cpython-36.pyc | Bin 0 -> 4040 bytes .../__pycache__/mklabels.cpython-36.pyc | Bin 0 -> 1862 bytes .../__pycache__/tests.cpython-36.pyc | Bin 0 -> 5018 bytes .../__pycache__/x_user_defined.cpython-36.pyc | Bin 0 -> 2615 bytes .../pip/_vendor/webencodings/labels.py | 231 + .../pip/_vendor/webencodings/mklabels.py | 59 + .../pip/_vendor/webencodings/tests.py | 153 + .../_vendor/webencodings/x_user_defined.py | 325 + .../DESCRIPTION.rst | 3 + .../pkg_resources-0.0.0.dist-info/INSTALLER | 1 + .../pkg_resources-0.0.0.dist-info/METADATA | 13 + .../pkg_resources-0.0.0.dist-info/RECORD | 38 + .../pkg_resources-0.0.0.dist-info/WHEEL | 6 + .../metadata.json | 1 + .../site-packages/pkg_resources/__init__.py | 3125 +++++++ .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 95310 bytes .../__pycache__/py31compat.cpython-36.pyc | Bin 0 -> 657 bytes .../pkg_resources/_vendor/__init__.py | 0 .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 154 bytes .../__pycache__/appdirs.cpython-36.pyc | Bin 0 -> 18580 bytes .../__pycache__/pyparsing.cpython-36.pyc | Bin 0 -> 201076 bytes .../_vendor/__pycache__/six.cpython-36.pyc | Bin 0 -> 24451 bytes .../pkg_resources/_vendor/appdirs.py | 552 ++ .../_vendor/packaging/__about__.py | 21 + .../_vendor/packaging/__init__.py | 14 + .../__pycache__/__about__.cpython-36.pyc | Bin 0 -> 690 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 528 bytes .../__pycache__/_compat.cpython-36.pyc | Bin 0 -> 975 bytes .../__pycache__/_structures.cpython-36.pyc | Bin 0 -> 2832 bytes .../__pycache__/markers.cpython-36.pyc | Bin 0 -> 8855 bytes .../__pycache__/requirements.cpython-36.pyc | Bin 0 -> 3851 bytes .../__pycache__/specifiers.cpython-36.pyc | Bin 0 -> 19794 bytes .../__pycache__/utils.cpython-36.pyc | Bin 0 -> 459 bytes .../__pycache__/version.cpython-36.pyc | Bin 0 -> 10569 bytes .../_vendor/packaging/_compat.py | 30 + .../_vendor/packaging/_structures.py | 68 + .../_vendor/packaging/markers.py | 301 + .../_vendor/packaging/requirements.py | 127 + .../_vendor/packaging/specifiers.py | 774 ++ .../pkg_resources/_vendor/packaging/utils.py | 14 + .../_vendor/packaging/version.py | 393 + .../pkg_resources/_vendor/pyparsing.py | 5696 ++++++++++++ .../pkg_resources/_vendor/six.py | 868 ++ .../pkg_resources/extern/__init__.py | 73 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 2385 bytes .../site-packages/pkg_resources/py31compat.py | 22 + .../setuptools-41.0.1.dist-info/INSTALLER | 1 + .../setuptools-41.0.1.dist-info/LICENSE | 19 + .../setuptools-41.0.1.dist-info/METADATA | 77 + .../setuptools-41.0.1.dist-info/RECORD | 186 + .../setuptools-41.0.1.dist-info/WHEEL | 6 + .../dependency_links.txt | 2 + .../entry_points.txt | 65 + .../setuptools-41.0.1.dist-info/top_level.txt | 3 + .../setuptools-41.0.1.dist-info/zip-safe | 1 + .../site-packages/setuptools/__init__.py | 228 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 7655 bytes .../_deprecation_warning.cpython-36.pyc | Bin 0 -> 506 bytes .../__pycache__/archive_util.cpython-36.pyc | Bin 0 -> 5094 bytes .../__pycache__/build_meta.cpython-36.pyc | Bin 0 -> 8247 bytes .../__pycache__/config.cpython-36.pyc | Bin 0 -> 17670 bytes .../__pycache__/dep_util.cpython-36.pyc | Bin 0 -> 813 bytes .../__pycache__/depends.cpython-36.pyc | Bin 0 -> 5239 bytes .../__pycache__/dist.cpython-36.pyc | Bin 0 -> 42139 bytes .../__pycache__/extension.cpython-36.pyc | Bin 0 -> 1933 bytes .../__pycache__/glibc.cpython-36.pyc | Bin 0 -> 1503 bytes .../__pycache__/glob.cpython-36.pyc | Bin 0 -> 3710 bytes .../__pycache__/launch.cpython-36.pyc | Bin 0 -> 812 bytes .../__pycache__/lib2to3_ex.cpython-36.pyc | Bin 0 -> 2391 bytes .../__pycache__/monkey.cpython-36.pyc | Bin 0 -> 4659 bytes .../__pycache__/msvc.cpython-36.pyc | Bin 0 -> 34486 bytes .../__pycache__/namespaces.cpython-36.pyc | Bin 0 -> 3636 bytes .../__pycache__/package_index.cpython-36.pyc | Bin 0 -> 32789 bytes .../__pycache__/pep425tags.cpython-36.pyc | Bin 0 -> 7301 bytes .../__pycache__/py27compat.cpython-36.pyc | Bin 0 -> 769 bytes .../__pycache__/py31compat.cpython-36.pyc | Bin 0 -> 1167 bytes .../__pycache__/py33compat.cpython-36.pyc | Bin 0 -> 1378 bytes .../__pycache__/sandbox.cpython-36.pyc | Bin 0 -> 15681 bytes .../__pycache__/site-patch.cpython-36.pyc | Bin 0 -> 1464 bytes .../__pycache__/ssl_support.cpython-36.pyc | Bin 0 -> 6745 bytes .../__pycache__/unicode_utils.cpython-36.pyc | Bin 0 -> 1127 bytes .../__pycache__/version.cpython-36.pyc | Bin 0 -> 286 bytes .../__pycache__/wheel.cpython-36.pyc | Bin 0 -> 6963 bytes .../windows_support.cpython-36.pyc | Bin 0 -> 969 bytes .../setuptools/_deprecation_warning.py | 7 + .../setuptools/_vendor/__init__.py | 0 .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 148 bytes .../__pycache__/pyparsing.cpython-36.pyc | Bin 0 -> 203157 bytes .../_vendor/__pycache__/six.cpython-36.pyc | Bin 0 -> 24445 bytes .../setuptools/_vendor/packaging/__about__.py | 21 + .../setuptools/_vendor/packaging/__init__.py | 14 + .../__pycache__/__about__.cpython-36.pyc | Bin 0 -> 684 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 522 bytes .../__pycache__/_compat.cpython-36.pyc | Bin 0 -> 969 bytes .../__pycache__/_structures.cpython-36.pyc | Bin 0 -> 2826 bytes .../__pycache__/markers.cpython-36.pyc | Bin 0 -> 8846 bytes .../__pycache__/requirements.cpython-36.pyc | Bin 0 -> 3839 bytes .../__pycache__/specifiers.cpython-36.pyc | Bin 0 -> 19788 bytes .../__pycache__/utils.cpython-36.pyc | Bin 0 -> 453 bytes .../__pycache__/version.cpython-36.pyc | Bin 0 -> 10563 bytes .../setuptools/_vendor/packaging/_compat.py | 30 + .../_vendor/packaging/_structures.py | 68 + .../setuptools/_vendor/packaging/markers.py | 301 + .../_vendor/packaging/requirements.py | 127 + .../_vendor/packaging/specifiers.py | 774 ++ .../setuptools/_vendor/packaging/utils.py | 14 + .../setuptools/_vendor/packaging/version.py | 393 + .../setuptools/_vendor/pyparsing.py | 5742 ++++++++++++ .../site-packages/setuptools/_vendor/six.py | 868 ++ .../site-packages/setuptools/archive_util.py | 173 + .../site-packages/setuptools/build_meta.py | 254 + .../site-packages/setuptools/cli-32.exe | Bin 0 -> 65536 bytes .../site-packages/setuptools/cli-64.exe | Bin 0 -> 74752 bytes .../site-packages/setuptools/cli.exe | Bin 0 -> 65536 bytes .../setuptools/command/__init__.py | 18 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 699 bytes .../command/__pycache__/alias.cpython-36.pyc | Bin 0 -> 2392 bytes .../__pycache__/bdist_egg.cpython-36.pyc | Bin 0 -> 14367 bytes .../__pycache__/bdist_rpm.cpython-36.pyc | Bin 0 -> 1735 bytes .../__pycache__/bdist_wininst.cpython-36.pyc | Bin 0 -> 936 bytes .../__pycache__/build_clib.cpython-36.pyc | Bin 0 -> 2407 bytes .../__pycache__/build_ext.cpython-36.pyc | Bin 0 -> 9680 bytes .../__pycache__/build_py.cpython-36.pyc | Bin 0 -> 8531 bytes .../__pycache__/develop.cpython-36.pyc | Bin 0 -> 6442 bytes .../__pycache__/dist_info.cpython-36.pyc | Bin 0 -> 1352 bytes .../__pycache__/easy_install.cpython-36.pyc | Bin 0 -> 65181 bytes .../__pycache__/egg_info.cpython-36.pyc | Bin 0 -> 21552 bytes .../__pycache__/install.cpython-36.pyc | Bin 0 -> 3932 bytes .../install_egg_info.cpython-36.pyc | Bin 0 -> 2397 bytes .../__pycache__/install_lib.cpython-36.pyc | Bin 0 -> 4042 bytes .../install_scripts.cpython-36.pyc | Bin 0 -> 2237 bytes .../__pycache__/py36compat.cpython-36.pyc | Bin 0 -> 4582 bytes .../__pycache__/register.cpython-36.pyc | Bin 0 -> 733 bytes .../command/__pycache__/rotate.cpython-36.pyc | Bin 0 -> 2538 bytes .../__pycache__/saveopts.cpython-36.pyc | Bin 0 -> 883 bytes .../command/__pycache__/sdist.cpython-36.pyc | Bin 0 -> 6909 bytes .../command/__pycache__/setopt.cpython-36.pyc | Bin 0 -> 4561 bytes .../command/__pycache__/test.cpython-36.pyc | Bin 0 -> 8198 bytes .../command/__pycache__/upload.cpython-36.pyc | Bin 0 -> 5096 bytes .../__pycache__/upload_docs.cpython-36.pyc | Bin 0 -> 6059 bytes .../site-packages/setuptools/command/alias.py | 80 + .../setuptools/command/bdist_egg.py | 502 + .../setuptools/command/bdist_rpm.py | 43 + .../setuptools/command/bdist_wininst.py | 21 + .../setuptools/command/build_clib.py | 98 + .../setuptools/command/build_ext.py | 321 + .../setuptools/command/build_py.py | 270 + .../setuptools/command/develop.py | 221 + .../setuptools/command/dist_info.py | 36 + .../setuptools/command/easy_install.py | 2342 +++++ .../setuptools/command/egg_info.py | 717 ++ .../setuptools/command/install.py | 125 + .../setuptools/command/install_egg_info.py | 62 + .../setuptools/command/install_lib.py | 121 + .../setuptools/command/install_scripts.py | 65 + .../setuptools/command/launcher manifest.xml | 15 + .../setuptools/command/py36compat.py | 136 + .../setuptools/command/register.py | 18 + .../setuptools/command/rotate.py | 66 + .../setuptools/command/saveopts.py | 22 + .../site-packages/setuptools/command/sdist.py | 221 + .../setuptools/command/setopt.py | 149 + .../site-packages/setuptools/command/test.py | 271 + .../setuptools/command/upload.py | 196 + .../setuptools/command/upload_docs.py | 206 + .../site-packages/setuptools/config.py | 656 ++ .../site-packages/setuptools/dep_util.py | 23 + .../site-packages/setuptools/depends.py | 186 + .../site-packages/setuptools/dist.py | 1278 +++ .../site-packages/setuptools/extension.py | 57 + .../setuptools/extern/__init__.py | 73 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 2382 bytes .../site-packages/setuptools/glibc.py | 86 + .../site-packages/setuptools/glob.py | 174 + .../site-packages/setuptools/gui-32.exe | Bin 0 -> 65536 bytes .../site-packages/setuptools/gui-64.exe | Bin 0 -> 75264 bytes .../site-packages/setuptools/gui.exe | Bin 0 -> 65536 bytes .../site-packages/setuptools/launch.py | 35 + .../site-packages/setuptools/lib2to3_ex.py | 62 + .../site-packages/setuptools/monkey.py | 179 + .../site-packages/setuptools/msvc.py | 1301 +++ .../site-packages/setuptools/namespaces.py | 107 + .../site-packages/setuptools/package_index.py | 1136 +++ .../site-packages/setuptools/pep425tags.py | 319 + .../site-packages/setuptools/py27compat.py | 28 + .../site-packages/setuptools/py31compat.py | 32 + .../site-packages/setuptools/py33compat.py | 55 + .../site-packages/setuptools/sandbox.py | 491 + .../setuptools/script (dev).tmpl | 6 + .../site-packages/setuptools/script.tmpl | 3 + .../site-packages/setuptools/site-patch.py | 74 + .../site-packages/setuptools/ssl_support.py | 260 + .../site-packages/setuptools/unicode_utils.py | 44 + .../site-packages/setuptools/version.py | 6 + .../site-packages/setuptools/wheel.py | 211 + .../setuptools/windows_support.py | 29 + .../wheel-0.33.4.dist-info/INSTALLER | 1 + .../wheel-0.33.4.dist-info/LICENSE.txt | 22 + .../wheel-0.33.4.dist-info/METADATA | 60 + .../wheel-0.33.4.dist-info/RECORD | 32 + .../wheel-0.33.4.dist-info/WHEEL | 6 + .../wheel-0.33.4.dist-info/entry_points.txt | 6 + .../wheel-0.33.4.dist-info/top_level.txt | 1 + .../python3.6/site-packages/wheel/__init__.py | 2 + .../python3.6/site-packages/wheel/__main__.py | 19 + .../wheel/__pycache__/__init__.cpython-36.pyc | Bin 0 -> 152 bytes .../wheel/__pycache__/__main__.cpython-36.pyc | Bin 0 -> 545 bytes .../__pycache__/bdist_wheel.cpython-36.pyc | Bin 0 -> 10347 bytes .../wheel/__pycache__/metadata.cpython-36.pyc | Bin 0 -> 3728 bytes .../__pycache__/pep425tags.cpython-36.pyc | Bin 0 -> 4714 bytes .../wheel/__pycache__/pkginfo.cpython-36.pyc | Bin 0 -> 1523 bytes .../wheel/__pycache__/util.cpython-36.pyc | Bin 0 -> 1268 bytes .../__pycache__/wheelfile.cpython-36.pyc | Bin 0 -> 5459 bytes .../site-packages/wheel/bdist_wheel.py | 372 + .../site-packages/wheel/cli/__init__.py | 88 + .../cli/__pycache__/__init__.cpython-36.pyc | Bin 0 -> 2994 bytes .../cli/__pycache__/convert.cpython-36.pyc | Bin 0 -> 6168 bytes .../wheel/cli/__pycache__/pack.cpython-36.pyc | Bin 0 -> 2452 bytes .../cli/__pycache__/unpack.cpython-36.pyc | Bin 0 -> 897 bytes .../site-packages/wheel/cli/convert.py | 269 + .../python3.6/site-packages/wheel/cli/pack.py | 58 + .../site-packages/wheel/cli/unpack.py | 25 + .../python3.6/site-packages/wheel/metadata.py | 141 + .../site-packages/wheel/pep425tags.py | 185 + .../python3.6/site-packages/wheel/pkginfo.py | 43 + .../lib/python3.6/site-packages/wheel/util.py | 46 + .../site-packages/wheel/wheelfile.py | 169 + .../yournewvirtualenv/lib/python3.6/site.py | 758 ++ .../lib/python3.6/sre_compile.py | 1 + .../lib/python3.6/sre_constants.py | 1 + .../lib/python3.6/sre_parse.py | 1 + .../yournewvirtualenv/lib/python3.6/stat.py | 1 + .../yournewvirtualenv/lib/python3.6/struct.py | 1 + .../lib/python3.6/tarfile.py | 1 + .../lib/python3.6/tempfile.py | 1 + .../yournewvirtualenv/lib/python3.6/token.py | 1 + .../lib/python3.6/tokenize.py | 1 + .../yournewvirtualenv/lib/python3.6/types.py | 1 + .../lib/python3.6/warnings.py | 1 + .../lib/python3.6/weakref.py | 1 + .../CacheControl-0.11.7-py2.py3-none-any.whl | Bin 0 -> 18720 bytes .../appdirs-1.4.3-py2.py3-none-any.whl | Bin 0 -> 12139 bytes .../certifi-2018.1.18-py2.py3-none-any.whl | Bin 0 -> 150807 bytes .../chardet-3.0.4-py2.py3-none-any.whl | Bin 0 -> 133328 bytes .../colorama-0.3.7-py2.py3-none-any.whl | Bin 0 -> 19915 bytes .../distlib-0.2.6-py2.py3-none-any.whl | Bin 0 -> 141707 bytes .../distro-1.0.1-py2.py3-none-any.whl | Bin 0 -> 11733 bytes .../html5lib-0.999999999-py2.py3-none-any.whl | Bin 0 -> 112620 bytes .../idna-2.6-py2.py3-none-any.whl | Bin 0 -> 56485 bytes .../ipaddress-0.0.0-py2.py3-none-any.whl | Bin 0 -> 17503 bytes .../lockfile-0.12.2-py2.py3-none-any.whl | Bin 0 -> 13506 bytes .../packaging-17.1-py2.py3-none-any.whl | Bin 0 -> 24058 bytes .../pip-9.0.1-py2.py3-none-any.whl | Bin 0 -> 159152 bytes .../pkg_resources-0.0.0-py2.py3-none-any.whl | Bin 0 -> 115663 bytes .../progress-1.2-py2.py3-none-any.whl | Bin 0 -> 9606 bytes .../pyparsing-2.2.0-py2.py3-none-any.whl | Bin 0 -> 56411 bytes .../requests-2.18.4-py2.py3-none-any.whl | Bin 0 -> 88788 bytes .../retrying-1.3.3-py2.py3-none-any.whl | Bin 0 -> 9480 bytes .../setuptools-39.0.1-py2.py3-none-any.whl | Bin 0 -> 455758 bytes .../six-1.11.0-py2.py3-none-any.whl | Bin 0 -> 10720 bytes .../urllib3-1.22-py2.py3-none-any.whl | Bin 0 -> 124700 bytes .../webencodings-0.5-py2.py3-none-any.whl | Bin 0 -> 11646 bytes .../wheel-0.30.0-py2.py3-none-any.whl | Bin 0 -> 48886 bytes 976 files changed, 144731 insertions(+), 64 deletions(-) create mode 100644 week-0/day-3/my_todo_app/todo_app/.todo_view.html.swp create mode 100644 week-0/day-3/my_todo_app/todo_app/todo_view.html create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/bin/activate create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/bin/activate.csh create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/bin/activate.fish create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/bin/activate_this.py create mode 100755 week-0/day-3/my_todo_app/yournewvirtualenv/bin/easy_install create mode 100755 week-0/day-3/my_todo_app/yournewvirtualenv/bin/easy_install-3.6 create mode 100755 week-0/day-3/my_todo_app/yournewvirtualenv/bin/pip create mode 100755 week-0/day-3/my_todo_app/yournewvirtualenv/bin/pip3 create mode 100755 week-0/day-3/my_todo_app/yournewvirtualenv/bin/pip3.6 create mode 120000 week-0/day-3/my_todo_app/yournewvirtualenv/bin/python create mode 100755 week-0/day-3/my_todo_app/yournewvirtualenv/bin/python-config create mode 120000 week-0/day-3/my_todo_app/yournewvirtualenv/bin/python3 create mode 100755 week-0/day-3/my_todo_app/yournewvirtualenv/bin/python3.6 create mode 100755 week-0/day-3/my_todo_app/yournewvirtualenv/bin/wheel create mode 120000 week-0/day-3/my_todo_app/yournewvirtualenv/include/python3.6m create mode 120000 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__future__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/__future__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/_bootlocale.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/_collections_abc.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/_weakrefset.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/abc.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/base64.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/bisect.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/codecs.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/copy.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/copyreg.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/enum.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/fnmatch.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/functools.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/genericpath.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/hashlib.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/heapq.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/hmac.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/imp.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/io.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/keyword.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/linecache.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/locale.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/operator.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/os.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/posixpath.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/random.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/re.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/reprlib.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/shutil.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/site.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/sre_compile.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/sre_constants.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/sre_parse.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/stat.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/struct.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/tarfile.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/tempfile.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/token.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/tokenize.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/types.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/warnings.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/weakref.cpython-36.pyc create mode 120000 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/_bootlocale.py create mode 120000 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/_collections_abc.py create mode 120000 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/_dummy_thread.py create mode 120000 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/_weakrefset.py create mode 120000 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/abc.py create mode 120000 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/base64.py create mode 120000 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/bisect.py create mode 120000 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/codecs.py create mode 120000 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/collections create mode 120000 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/config-3.6m-x86_64-linux-gnu create mode 120000 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/copy.py create mode 120000 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/copyreg.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/distutils/__init__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/distutils/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/distutils/distutils.cfg create mode 120000 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/encodings create mode 120000 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/enum.py create mode 120000 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/fnmatch.py create mode 120000 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/functools.py create mode 120000 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/genericpath.py create mode 120000 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/hashlib.py create mode 120000 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/heapq.py create mode 120000 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/hmac.py create mode 120000 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/imp.py create mode 120000 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/importlib create mode 120000 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/io.py create mode 120000 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/keyword.py create mode 120000 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/lib-dynload create mode 120000 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/linecache.py create mode 120000 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/locale.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/no-global-site-packages.txt create mode 120000 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/ntpath.py create mode 120000 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/operator.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/orig-prefix.txt create mode 120000 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/os.py create mode 120000 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/posixpath.py create mode 120000 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/random.py create mode 120000 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/re.py create mode 120000 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/reprlib.py create mode 120000 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/rlcompleter.py create mode 120000 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/shutil.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/__pycache__/easy_install.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/easy_install.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip-19.1.1.dist-info/INSTALLER create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip-19.1.1.dist-info/LICENSE.txt create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip-19.1.1.dist-info/METADATA create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip-19.1.1.dist-info/RECORD create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip-19.1.1.dist-info/WHEEL create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip-19.1.1.dist-info/entry_points.txt create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip-19.1.1.dist-info/top_level.txt create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/__init__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/__main__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/__pycache__/__main__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/__init__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/__pycache__/build_env.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/__pycache__/cache.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/__pycache__/configuration.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/__pycache__/download.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/__pycache__/exceptions.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/__pycache__/index.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/__pycache__/locations.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/__pycache__/pep425tags.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/__pycache__/pyproject.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/__pycache__/resolve.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/__pycache__/wheel.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/build_env.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/cache.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/cli/__init__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/cli/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/cli/__pycache__/autocompletion.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/cli/__pycache__/base_command.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/cli/__pycache__/cmdoptions.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/cli/__pycache__/main_parser.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/cli/__pycache__/parser.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/cli/__pycache__/status_codes.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/cli/autocompletion.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/cli/base_command.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/cli/cmdoptions.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/cli/main_parser.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/cli/parser.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/cli/status_codes.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/__init__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/__pycache__/check.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/__pycache__/completion.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/__pycache__/configuration.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/__pycache__/download.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/__pycache__/freeze.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/__pycache__/hash.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/__pycache__/help.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/__pycache__/install.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/__pycache__/list.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/__pycache__/search.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/__pycache__/show.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/__pycache__/uninstall.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/__pycache__/wheel.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/check.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/completion.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/configuration.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/download.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/freeze.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/hash.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/help.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/install.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/list.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/search.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/show.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/uninstall.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/wheel.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/configuration.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/download.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/exceptions.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/index.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/locations.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/models/__init__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/models/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/models/__pycache__/candidate.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/models/__pycache__/format_control.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/models/__pycache__/index.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/models/__pycache__/link.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/models/candidate.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/models/format_control.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/models/index.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/models/link.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/operations/__init__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/operations/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/operations/__pycache__/check.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/operations/__pycache__/freeze.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/operations/__pycache__/prepare.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/operations/check.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/operations/freeze.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/operations/prepare.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/pep425tags.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/pyproject.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/req/__init__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/req/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/req/__pycache__/constructors.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/req/__pycache__/req_file.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/req/__pycache__/req_install.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/req/__pycache__/req_set.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/req/__pycache__/req_tracker.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/req/__pycache__/req_uninstall.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/req/constructors.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/req/req_file.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/req/req_install.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/req/req_set.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/req/req_tracker.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/req/req_uninstall.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/resolve.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/__init__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/__pycache__/appdirs.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/__pycache__/compat.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/__pycache__/deprecation.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/__pycache__/encoding.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/__pycache__/filesystem.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/__pycache__/glibc.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/__pycache__/hashes.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/__pycache__/logging.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/__pycache__/misc.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/__pycache__/models.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/__pycache__/outdated.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/__pycache__/packaging.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/__pycache__/setuptools_build.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/__pycache__/temp_dir.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/__pycache__/typing.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/__pycache__/ui.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/appdirs.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/compat.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/deprecation.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/encoding.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/filesystem.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/glibc.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/hashes.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/logging.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/misc.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/models.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/outdated.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/packaging.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/setuptools_build.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/temp_dir.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/typing.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/ui.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/vcs/__init__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/vcs/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/vcs/__pycache__/bazaar.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/vcs/__pycache__/git.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/vcs/__pycache__/mercurial.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/vcs/__pycache__/subversion.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/vcs/bazaar.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/vcs/git.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/vcs/mercurial.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/vcs/subversion.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/wheel.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/__init__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/__pycache__/appdirs.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/__pycache__/distro.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/__pycache__/ipaddress.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/__pycache__/pyparsing.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/__pycache__/retrying.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/__pycache__/six.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/appdirs.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/__init__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/__pycache__/_cmd.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/__pycache__/adapter.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/__pycache__/cache.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/__pycache__/compat.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/__pycache__/controller.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/__pycache__/serialize.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/_cmd.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/adapter.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/cache.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/caches/__init__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/compat.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/controller.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/filewrapper.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/heuristics.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/serialize.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/wrapper.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/certifi/__init__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/certifi/__main__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/certifi/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/certifi/__pycache__/__main__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/certifi/__pycache__/core.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/certifi/cacert.pem create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/certifi/core.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__init__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/big5freq.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/big5prober.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/chardistribution.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/charsetgroupprober.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/charsetprober.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachine.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/compat.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/cp949prober.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/enums.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/escprober.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/escsm.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/eucjpprober.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/euckrfreq.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/euckrprober.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/euctwfreq.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/euctwprober.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/gb2312freq.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/gb2312prober.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/hebrewprober.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/jisfreq.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/jpcntx.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/langbulgarianmodel.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/langcyrillicmodel.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/langgreekmodel.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/langhebrewmodel.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/langhungarianmodel.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/langthaimodel.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/langturkishmodel.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/latin1prober.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/mbcharsetprober.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/mbcsgroupprober.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/mbcssm.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/sbcharsetprober.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/sbcsgroupprober.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/sjisprober.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/universaldetector.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/utf8prober.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/version.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/big5freq.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/big5prober.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/chardistribution.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/charsetgroupprober.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/charsetprober.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/cli/__init__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/cli/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/cli/__pycache__/chardetect.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/cli/chardetect.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/codingstatemachine.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/compat.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/cp949prober.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/enums.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/escprober.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/escsm.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/eucjpprober.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/euckrfreq.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/euckrprober.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/euctwfreq.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/euctwprober.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/gb2312freq.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/gb2312prober.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/hebrewprober.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/jisfreq.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/jpcntx.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/langbulgarianmodel.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/langcyrillicmodel.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/langgreekmodel.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/langhebrewmodel.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/langhungarianmodel.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/langthaimodel.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/langturkishmodel.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/latin1prober.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/mbcharsetprober.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/mbcsgroupprober.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/mbcssm.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/sbcharsetprober.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/sbcsgroupprober.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/sjisprober.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/universaldetector.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/utf8prober.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/version.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/colorama/__init__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/colorama/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/colorama/__pycache__/ansi.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/colorama/__pycache__/ansitowin32.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/colorama/__pycache__/initialise.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/colorama/__pycache__/win32.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/colorama/__pycache__/winterm.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/colorama/ansi.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/colorama/ansitowin32.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/colorama/initialise.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/colorama/win32.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/colorama/winterm.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/__init__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/__pycache__/compat.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/__pycache__/database.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/__pycache__/index.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/__pycache__/locators.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/__pycache__/manifest.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/__pycache__/markers.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/__pycache__/metadata.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/__pycache__/resources.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/__pycache__/scripts.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/__pycache__/util.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/__pycache__/version.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/__pycache__/wheel.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/_backport/__init__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/_backport/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/_backport/__pycache__/misc.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/_backport/__pycache__/shutil.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/_backport/__pycache__/sysconfig.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/_backport/__pycache__/tarfile.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/_backport/misc.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/_backport/shutil.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/_backport/sysconfig.cfg create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/_backport/sysconfig.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/_backport/tarfile.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/compat.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/database.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/index.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/locators.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/manifest.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/markers.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/metadata.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/resources.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/scripts.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/t32.exe create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/t64.exe create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/util.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/version.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/w32.exe create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/w64.exe create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/wheel.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distro.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/__init__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/__pycache__/_ihatexml.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/__pycache__/_inputstream.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/__pycache__/_tokenizer.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/__pycache__/_utils.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/__pycache__/constants.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/__pycache__/html5parser.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/__pycache__/serializer.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/_ihatexml.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/_inputstream.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/_tokenizer.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/_trie/__init__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/_trie/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/_trie/__pycache__/_base.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/_trie/__pycache__/datrie.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/_trie/__pycache__/py.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/_trie/_base.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/_trie/datrie.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/_trie/py.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/_utils.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/constants.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/__init__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/__pycache__/alphabeticalattributes.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/__pycache__/base.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/__pycache__/inject_meta_charset.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/__pycache__/lint.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/__pycache__/optionaltags.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/__pycache__/sanitizer.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/__pycache__/whitespace.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/alphabeticalattributes.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/base.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/inject_meta_charset.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/lint.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/optionaltags.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/sanitizer.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/whitespace.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/html5parser.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/serializer.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treeadapters/__init__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treeadapters/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treeadapters/__pycache__/genshi.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treeadapters/__pycache__/sax.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treeadapters/genshi.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treeadapters/sax.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treebuilders/__init__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treebuilders/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treebuilders/__pycache__/base.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treebuilders/__pycache__/dom.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treebuilders/__pycache__/etree.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treebuilders/__pycache__/etree_lxml.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treebuilders/base.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treebuilders/dom.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treebuilders/etree.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treebuilders/etree_lxml.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treewalkers/__init__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treewalkers/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treewalkers/__pycache__/base.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treewalkers/__pycache__/dom.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treewalkers/__pycache__/etree.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treewalkers/__pycache__/etree_lxml.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treewalkers/__pycache__/genshi.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treewalkers/base.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treewalkers/dom.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treewalkers/etree.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treewalkers/etree_lxml.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treewalkers/genshi.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/__init__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/__pycache__/codec.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/__pycache__/compat.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/__pycache__/core.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/__pycache__/idnadata.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/__pycache__/intranges.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/__pycache__/package_data.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/__pycache__/uts46data.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/codec.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/compat.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/core.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/idnadata.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/intranges.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/package_data.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/uts46data.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/ipaddress.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/lockfile/__init__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/lockfile/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/lockfile/__pycache__/linklockfile.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/lockfile/__pycache__/mkdirlockfile.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/lockfile/__pycache__/pidlockfile.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/lockfile/__pycache__/sqlitelockfile.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/lockfile/__pycache__/symlinklockfile.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/lockfile/linklockfile.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/lockfile/mkdirlockfile.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/lockfile/pidlockfile.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/lockfile/sqlitelockfile.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/lockfile/symlinklockfile.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/msgpack/__init__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/msgpack/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/msgpack/__pycache__/_version.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/msgpack/__pycache__/exceptions.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/msgpack/__pycache__/fallback.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/msgpack/_version.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/msgpack/exceptions.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/msgpack/fallback.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/__about__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/__init__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/__pycache__/__about__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/__pycache__/_compat.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/__pycache__/_structures.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/__pycache__/markers.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/__pycache__/requirements.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/__pycache__/specifiers.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/__pycache__/utils.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/__pycache__/version.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/_compat.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/_structures.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/markers.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/requirements.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/specifiers.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/utils.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/version.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/__init__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/__pycache__/_in_process.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/__pycache__/build.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/__pycache__/check.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/__pycache__/colorlog.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/__pycache__/compat.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/__pycache__/envbuild.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/__pycache__/wrappers.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/_in_process.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/build.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/check.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/colorlog.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/compat.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/envbuild.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/wrappers.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pkg_resources/__init__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pkg_resources/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pkg_resources/__pycache__/py31compat.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pkg_resources/py31compat.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/progress/__init__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/progress/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/progress/__pycache__/bar.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/progress/__pycache__/counter.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/progress/__pycache__/spinner.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/progress/bar.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/progress/counter.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/progress/spinner.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pyparsing.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pytoml/__init__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pytoml/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pytoml/__pycache__/core.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pytoml/__pycache__/parser.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pytoml/__pycache__/test.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pytoml/__pycache__/utils.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pytoml/__pycache__/writer.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pytoml/core.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pytoml/parser.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pytoml/test.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pytoml/utils.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pytoml/writer.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__init__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__pycache__/__version__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__pycache__/_internal_utils.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__pycache__/adapters.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__pycache__/api.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__pycache__/auth.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__pycache__/certs.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__pycache__/compat.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__pycache__/cookies.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__pycache__/exceptions.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__pycache__/help.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__pycache__/hooks.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__pycache__/models.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__pycache__/packages.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__pycache__/sessions.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__pycache__/status_codes.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__pycache__/structures.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__pycache__/utils.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__version__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/_internal_utils.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/adapters.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/api.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/auth.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/certs.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/compat.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/cookies.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/exceptions.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/help.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/hooks.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/models.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/packages.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/sessions.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/status_codes.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/structures.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/utils.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/retrying.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/six.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/__init__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/__pycache__/_collections.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/__pycache__/connection.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/__pycache__/connectionpool.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/__pycache__/exceptions.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/__pycache__/fields.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/__pycache__/filepost.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/__pycache__/poolmanager.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/__pycache__/request.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/__pycache__/response.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/_collections.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/connection.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/connectionpool.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/__init__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/__pycache__/_appengine_environ.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/__pycache__/appengine.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/__pycache__/ntlmpool.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/__pycache__/pyopenssl.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/__pycache__/securetransport.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/__pycache__/socks.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/bindings.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/low_level.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/appengine.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/securetransport.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/socks.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/exceptions.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/fields.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/filepost.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/packages/__init__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/packages/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/packages/__pycache__/six.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/makefile.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/packages/six.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/__init__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/__pycache__/_implementation.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/_implementation.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/poolmanager.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/request.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/response.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/__init__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/__pycache__/connection.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/__pycache__/queue.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/__pycache__/request.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/__pycache__/response.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/__pycache__/retry.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/__pycache__/timeout.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/__pycache__/url.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/__pycache__/wait.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/connection.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/queue.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/request.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/response.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/retry.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/ssl_.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/timeout.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/url.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/wait.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/webencodings/__init__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/webencodings/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/webencodings/__pycache__/labels.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/webencodings/__pycache__/mklabels.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/webencodings/__pycache__/tests.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/webencodings/__pycache__/x_user_defined.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/webencodings/labels.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/webencodings/mklabels.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/webencodings/tests.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/webencodings/x_user_defined.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/DESCRIPTION.rst create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/INSTALLER create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/METADATA create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/RECORD create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/WHEEL create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/metadata.json create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/__init__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/__pycache__/py31compat.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/__init__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/__pycache__/appdirs.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/__pycache__/pyparsing.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/__pycache__/six.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/appdirs.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__about__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__init__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/__about__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/_compat.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/_structures.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/markers.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/requirements.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/specifiers.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/utils.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/version.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/_compat.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/_structures.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/markers.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/requirements.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/specifiers.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/utils.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/version.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/pyparsing.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/six.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/extern/__init__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/extern/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/py31compat.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools-41.0.1.dist-info/INSTALLER create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools-41.0.1.dist-info/LICENSE create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools-41.0.1.dist-info/METADATA create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools-41.0.1.dist-info/RECORD create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools-41.0.1.dist-info/WHEEL create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools-41.0.1.dist-info/dependency_links.txt create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools-41.0.1.dist-info/entry_points.txt create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools-41.0.1.dist-info/top_level.txt create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools-41.0.1.dist-info/zip-safe create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__init__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/_deprecation_warning.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/archive_util.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/build_meta.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/config.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/dep_util.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/depends.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/dist.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/extension.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/glibc.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/glob.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/launch.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/lib2to3_ex.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/monkey.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/msvc.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/namespaces.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/package_index.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/pep425tags.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/py27compat.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/py31compat.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/py33compat.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/sandbox.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/site-patch.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/ssl_support.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/unicode_utils.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/version.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/wheel.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/windows_support.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_deprecation_warning.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/__init__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/__pycache__/pyparsing.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/__pycache__/six.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__about__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__init__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/__about__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/_compat.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/_structures.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/markers.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/requirements.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/specifiers.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/utils.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/version.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/_compat.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/_structures.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/markers.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/requirements.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/specifiers.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/utils.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/version.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/pyparsing.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/six.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/archive_util.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/build_meta.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/cli-32.exe create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/cli-64.exe create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/cli.exe create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__init__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/alias.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/bdist_egg.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/bdist_rpm.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/bdist_wininst.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/build_clib.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/build_ext.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/build_py.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/develop.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/dist_info.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/easy_install.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/egg_info.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/install.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/install_egg_info.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/install_lib.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/install_scripts.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/py36compat.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/register.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/rotate.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/saveopts.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/sdist.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/setopt.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/test.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/upload.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/upload_docs.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/alias.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/bdist_egg.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/bdist_rpm.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/bdist_wininst.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/build_clib.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/build_ext.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/build_py.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/develop.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/dist_info.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/easy_install.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/egg_info.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/install.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/install_egg_info.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/install_lib.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/install_scripts.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/launcher manifest.xml create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/py36compat.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/register.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/rotate.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/saveopts.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/sdist.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/setopt.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/test.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/upload.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/upload_docs.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/config.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/dep_util.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/depends.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/dist.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/extension.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/extern/__init__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/extern/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/glibc.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/glob.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/gui-32.exe create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/gui-64.exe create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/gui.exe create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/launch.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/lib2to3_ex.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/monkey.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/msvc.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/namespaces.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/package_index.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/pep425tags.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/py27compat.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/py31compat.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/py33compat.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/sandbox.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/script (dev).tmpl create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/script.tmpl create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/site-patch.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/ssl_support.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/unicode_utils.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/version.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/wheel.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/windows_support.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel-0.33.4.dist-info/INSTALLER create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel-0.33.4.dist-info/LICENSE.txt create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel-0.33.4.dist-info/METADATA create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel-0.33.4.dist-info/RECORD create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel-0.33.4.dist-info/WHEEL create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel-0.33.4.dist-info/entry_points.txt create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel-0.33.4.dist-info/top_level.txt create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/__init__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/__main__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/__pycache__/__main__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/__pycache__/bdist_wheel.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/__pycache__/metadata.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/__pycache__/pep425tags.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/__pycache__/pkginfo.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/__pycache__/util.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/__pycache__/wheelfile.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/bdist_wheel.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/cli/__init__.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/cli/__pycache__/__init__.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/cli/__pycache__/convert.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/cli/__pycache__/pack.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/cli/__pycache__/unpack.cpython-36.pyc create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/cli/convert.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/cli/pack.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/cli/unpack.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/metadata.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/pep425tags.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/pkginfo.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/util.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/wheelfile.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site.py create mode 120000 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/sre_compile.py create mode 120000 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/sre_constants.py create mode 120000 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/sre_parse.py create mode 120000 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/stat.py create mode 120000 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/struct.py create mode 120000 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/tarfile.py create mode 120000 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/tempfile.py create mode 120000 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/token.py create mode 120000 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/tokenize.py create mode 120000 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/types.py create mode 120000 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/warnings.py create mode 120000 week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/weakref.py create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/share/python-wheels/CacheControl-0.11.7-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/share/python-wheels/appdirs-1.4.3-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/share/python-wheels/certifi-2018.1.18-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/share/python-wheels/chardet-3.0.4-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/share/python-wheels/colorama-0.3.7-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/share/python-wheels/distlib-0.2.6-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/share/python-wheels/distro-1.0.1-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/share/python-wheels/html5lib-0.999999999-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/share/python-wheels/idna-2.6-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/share/python-wheels/ipaddress-0.0.0-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/share/python-wheels/lockfile-0.12.2-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/share/python-wheels/packaging-17.1-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/share/python-wheels/pip-9.0.1-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/share/python-wheels/progress-1.2-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/share/python-wheels/pyparsing-2.2.0-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/share/python-wheels/requests-2.18.4-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/share/python-wheels/retrying-1.3.3-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/share/python-wheels/setuptools-39.0.1-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/share/python-wheels/six-1.11.0-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/share/python-wheels/urllib3-1.22-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/share/python-wheels/webencodings-0.5-py2.py3-none-any.whl create mode 100644 week-0/day-3/my_todo_app/yournewvirtualenv/share/python-wheels/wheel-0.30.0-py2.py3-none-any.whl diff --git a/week-0/day-3/my_todo_app/todo_app/.todo_view.html.swp b/week-0/day-3/my_todo_app/todo_app/.todo_view.html.swp new file mode 100644 index 0000000000000000000000000000000000000000..ef9a78729d63401ec498b0e7e773ce164a8a2a03 GIT binary patch literal 12288 zcmeI%&q~8E9Ki9+lNa&d3q-xzrMk-w;$c#>pcC3n@E{{wE0wmkNObg~Pv*_1*b~e* z@MtINL3Zf9`vyXiUw#mNAIKqOY~Q&zvfH*r*>;5RXU7kpyFX&HoG0-jSl=%0dyY5o zZu>Qf)4zAvvF&yi>27j-Uv0iCWhp8x;= literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/todo_app/__init__.py b/week-0/day-3/my_todo_app/todo_app/__init__.py index 86fb09d8..397593d9 100644 --- a/week-0/day-3/my_todo_app/todo_app/__init__.py +++ b/week-0/day-3/my_todo_app/todo_app/__init__.py @@ -2,71 +2,85 @@ from flask import Flask from flask import request - from flask import render_template +from flaskext.mysql import MySQL -# our fake db -todo_store = {} -todo_store['depo'] = ['Go for run', 'Listen Rock Music'] -todo_store['shivang'] = ['Read book', 'Play Fifa', 'Drink Coffee'] -todo_store['raj'] = ['Study', 'Brush'] -todo_store['sanket'] = ['Sleep', 'Code'] -todo_store['aagam'] = ['play cricket', 'have tea'] def create_app(test_config=None): - # create and configure the app - app = Flask(__name__, instance_relative_config=True) - - # ensure the instance folder exists - try: - os.makedirs(app.instance_path) - except OSError: - pass - - def select_todos(name): - global todo_store - return todo_store[name] - - def insert_todo(name, todo): - global todo_store - current_todos = todo_store[name] - current_todos.append(todo) - todo_store[name] = current_todos - return - - def add_todo_by_name(name, todo): - # call DB function - insert_todo(name, todo) - return - - def get_todos_by_name(name): - try: - return select_todos(name) - except: - return None - - - # http://127.0.0.1:5000/todos?name=duster - @app.route('/todos') - def todos(): - name = request.args.get('name') - print('---------') - print(name) - print('---------') - - person_todo_list = get_todos_by_name(name) - if person_todo_list == None: - return render_template('404.html'), 404 - else: - return render_template('todo_view.html',todos=person_todo_list) - - - @app.route('/add_todos') - def add_todos(): - name = request.args.get('name') - todo = request.args.get('todo') - add_todo_by_name(name, todo) - return 'Added Successfully' - - return app + # create and configure the app + app = Flask(__name__, instance_relative_config=True) + app.config['MYSQL_DATABASE_HOST'] = 'localhost' + app.config['MYSQL_DATABASE_USER'] = 'administrator' + app.config['MYSQL_DATABASE_PASSWORD'] = '12345678!@#QWEqwe' + app.config['MYSQL_DATABASE_DB'] = 'tododb' + mysql = MySQL(app) + mysql.init_app(app) + + # ensure the instance folder exists + try: + os.makedirs(app.instance_path) + except OSError: + pass + + + #MODEL STRATS HERE + + def get_from_db(name): + conn=mysql.connect() + cur=conn.cursor() + cur.execute("SELECT work FROM todolisttable WHERE name = %s",(name)) + data=cur.fetchall() + data1=[A[0] for A in data] + conn.commit() + if len(data1) == 0 : + return None + return data1 + + + def get_todos_by_name(name): + try: + return get_from_db(name) + except: + return None + + def add_in_list(name,work): + conn=mysql.connect() + cur = conn.cursor() + cur.execute("INSERT INTO todolisttable(name, work) VALUES (%s, %s)", (name, work)) + conn.commit() + #mysql.connection.commit() + #cur.close() + return + + def verify_before_add(name,work): + return add_in_list(name,work) + + #MODELS ENDS HERE + + #...............................................................................................................# + + + #CONTROLLER STARTS HERE + + + @app.route('/add_todo') + def add_todo(): + name=request.args.get('name') + work=request.args.get('work') + verify_before_add(name,work) + return 'ADDED SUCCESFULLY' + + + # a simple page that list my todos + @app.route('/todos') + def todos(): + name = request.args.get('name') + dolist = get_todos_by_name(name) + if dolist!=None : + return render_template('todo_view.html',worklist = dolist) + else : + return render_template('404.html'),404 + #...................................................................................................................# + + return app diff --git a/week-0/day-3/my_todo_app/todo_app/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/todo_app/__pycache__/__init__.cpython-36.pyc index 7f86b4e6006f81666b1b72b7af94a9502166c1bf..f4be77ed54a8bed4daac1e254d0b32bb31e47275 100644 GIT binary patch literal 2458 zcmai0-Ez}b5I#qLmK`S~Km%!MF>UEYGhjmlg^M(UAoDwBX(F~(ebdD3-l9e1O z1bdt-XC`pLMQ8dFeV0CgF59cV0$1HVN*srusXSVJUY#R+ukUBX=ZDQsB zg=dkvMN@q#@ZvUroZ!2AJWc?f6THK?a1$Qx1YW{%+0(B5Y}u!{4Gs;?BAm!A{tHY( z63Qr3-YN%_seRf~m^M$CE|CE!Cy@y#FHvEhB(QEk->9$EmWGIu?qs6347i`eZyTg@ zQ6q`jE{GN-_<2q`%5UUIZBRDGiihSKdPD(_vkAb8^q*ssfXNX7{}ek97@pnAvkL=y zq=D}u`|Qvh&;vz!r@^a$_Y%7-y}$^vGgDuKkS{koapHA+?g|cBXujmGA9Whdtu!A* zz87pqapGKf`W*7&E>_p7536>~eY|3?IpZD+o1JEy2rr4m2W!^t+G=m=_V;sl?*4G^ z{5~^l zq{he$`CZw?AD{xY^(V2ER4Ly|X;ql;U7B}~E89`XD?z*B`5xn8_vW_ex4mRL>QweQ zZ{NICVP5yQx=@S6b;~>5cZGT6>qp_v!ZoCW+zis2^92W;Wo=Z+k%ix1um? zCaD_mj-{s>CMnf$W2(ZgRAXM^IXc?g*lb}p-VL$@i~+-RY=p}dDTJ=dd)7)UXO2pUM))#;)QsJO1ybwe6UF#oM=xJNZdf26Hp}A-vG2f@ zkQNSl7~KaaSOH8=2t!3wAg$F;+4iQYi;K0zlD+=uQO#ajUtWH0sRF}IHBW5CsS0|s z&W85|+#LzeJR$ZF{F%^{BJ@Fl_O5(PXeY~ihMWoUnRtdeyZ>H1SvzDys;!FI1g0en zEcGpv0WeNTy#ZKi&d4I{O~|41vdQ<$+esK$)G<*uD2bkV=hhwRZT2eQJT1$MLe z5)Cpr4%{)axeBGl-W-WtmmTvnI5T-c;Bp8ky_t`NE>~Lxft5>5SGK3?;yA+hn825Y zW6J3WlP^`GI5k7B%~?~#>G<&Vw*!+l&8^rqAz-}eB7)&&Y0g*z{}xVOi7Grme1&AM zqQSPX^h}s?V8}RR$H;2Rjwzf{##t193x+^Mh2xJ&3#vjVVZ0f7u~;;U`Qq4ge!3uV z!oXm%Oz}0KRBzy47#U=iR7|BaA-()nQqHC+1}k@F>6DFo+P&s{7_q&8FW_X9xizJz HKv?R3gP}lU literal 2047 zcmZuy&u`l{6ecOjmL1!1(kx4d{qSKO<^hR=wa1{y)~&m2S<$RmCtwg*k+x;al1I`B zEF`A{$U306{S*6-1|4?UY5&4bdyjG)r;7|yA1R9Z-uJ#oKWsMZfBpIC&&?_!f0LEV z0elEepFt;xpa}`^&JsFd0i%c=z)s*;>;iTJmy(!pPk5p-V8#>G10sA;6ZL@uqcs>c zMAJTL0bUnvi#GsoihCAs0e)A!BepMTP!aT)ba(y%2IQzq3-4*d^%y`^$zNtt8-VLd zrb4RF$jLO}M&|WzvQ9r!9W_hyjc;RZWZHS2MdQwQGaW~PE95lGYtJPYomW{l&TG#S zKJPq@`#f)arQ&qld6M<}QU+B$j8Awv2)tu66Z63PQqA-*a1|D+e$r4w%9|6|r_f zuPDrc@|XSvJ!f{d1+xTZAqRFAz6n}y9Q^>A?!>7!JdI?iBxo9+$S}&%emq#lfUz)W z#~6ceV>l!CVc4aZsJh8S7HX3z2_rY<6Zr>GxbEMVy%$<4-CKy;JI&NsPkAJJJmNx5 z=DR~4jky_SY423Z@$P<4@cHh;-eexyUHNp{TY@l*)7XUJ-gI6xv`l1V>?-{p5<`ZB z<&Y8y&IsYny@Mo+c%mQgtuBu2LRgC_!Dhqy5P%^V7D&cMASR~djNu%ZbP+656r79odx2%qY`Ls@bntyZ`>6JH@oRK?n zzK2`1p!*g00ash1HX-(#U1pgnbY7RLCfruIw7C$ayszdVrt1OjhE64{PVKt;GhHj*5Ub$eyR<_&!K4qgf&1h_<_ZI+F<$p zyOgs8@_O$&ySEiv8toI<@0MbvdZ5}lT``~o26Rgutn>2CFNBbyb3BV8sdayrBy*@4 z+*WO1w+Y=_Rz*+W#8lLl%nsqfqG%el0cDeaa92dj_1&t%tQUT0Egpsi%XHyS_*jZq z>7uzj_NH+D6xHvKzg8+!g{QKakzF@fGw`3YI0_2~D&7jLwyp_wU1iDIEZ7ROezw(K zzoCZ7&{!9c5r@$>ZP5zzUBBA!8vb@`yQ*N2PC0|N~Hn8W8U0I5Q gr|XJL{=p;@vqV0|qgo?HAM)RTFS?*r3mT6811jU(rT_o{ diff --git a/week-0/day-3/my_todo_app/todo_app/templates/todo_view.html b/week-0/day-3/my_todo_app/todo_app/templates/todo_view.html index 24236a13..a35dec47 100644 --- a/week-0/day-3/my_todo_app/todo_app/templates/todo_view.html +++ b/week-0/day-3/my_todo_app/todo_app/templates/todo_view.html @@ -1,6 +1,6 @@ List of my todos:
-{% for todo in todos %} +{% for todo in worklist %} {{todo}}
{% endfor %} diff --git a/week-0/day-3/my_todo_app/todo_app/todo_view.html b/week-0/day-3/my_todo_app/todo_app/todo_view.html new file mode 100644 index 00000000..e69de29b diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/bin/activate b/week-0/day-3/my_todo_app/yournewvirtualenv/bin/activate new file mode 100644 index 00000000..f6bfe411 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/bin/activate @@ -0,0 +1,78 @@ +# This file must be used with "source bin/activate" *from bash* +# you cannot run it directly + +deactivate () { + unset -f pydoc >/dev/null 2>&1 + + # reset old environment variables + # ! [ -z ${VAR+_} ] returns true if VAR is declared at all + if ! [ -z "${_OLD_VIRTUAL_PATH+_}" ] ; then + PATH="$_OLD_VIRTUAL_PATH" + export PATH + unset _OLD_VIRTUAL_PATH + fi + if ! [ -z "${_OLD_VIRTUAL_PYTHONHOME+_}" ] ; then + PYTHONHOME="$_OLD_VIRTUAL_PYTHONHOME" + export PYTHONHOME + unset _OLD_VIRTUAL_PYTHONHOME + fi + + # This should detect bash and zsh, which have a hash command that must + # be called to get it to forget past commands. Without forgetting + # past commands the $PATH changes we made may not be respected + if [ -n "${BASH-}" ] || [ -n "${ZSH_VERSION-}" ] ; then + hash -r 2>/dev/null + fi + + if ! [ -z "${_OLD_VIRTUAL_PS1+_}" ] ; then + PS1="$_OLD_VIRTUAL_PS1" + export PS1 + unset _OLD_VIRTUAL_PS1 + fi + + unset VIRTUAL_ENV + if [ ! "${1-}" = "nondestructive" ] ; then + # Self destruct! + unset -f deactivate + fi +} + +# unset irrelevant variables +deactivate nondestructive + +VIRTUAL_ENV="/home/lk/academy-hackathon/week-0/day-3/my_todo_app/yournewvirtualenv" +export VIRTUAL_ENV + +_OLD_VIRTUAL_PATH="$PATH" +PATH="$VIRTUAL_ENV/bin:$PATH" +export PATH + +# unset PYTHONHOME if set +if ! [ -z "${PYTHONHOME+_}" ] ; then + _OLD_VIRTUAL_PYTHONHOME="$PYTHONHOME" + unset PYTHONHOME +fi + +if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT-}" ] ; then + _OLD_VIRTUAL_PS1="$PS1" + if [ "x" != x ] ; then + PS1="$PS1" + else + PS1="(`basename \"$VIRTUAL_ENV\"`) $PS1" + fi + export PS1 +fi + +# Make sure to unalias pydoc if it's already there +alias pydoc 2>/dev/null >/dev/null && unalias pydoc + +pydoc () { + python -m pydoc "$@" +} + +# This should detect bash and zsh, which have a hash command that must +# be called to get it to forget past commands. Without forgetting +# past commands the $PATH changes we made may not be respected +if [ -n "${BASH-}" ] || [ -n "${ZSH_VERSION-}" ] ; then + hash -r 2>/dev/null +fi diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/bin/activate.csh b/week-0/day-3/my_todo_app/yournewvirtualenv/bin/activate.csh new file mode 100644 index 00000000..06890785 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/bin/activate.csh @@ -0,0 +1,36 @@ +# This file must be used with "source bin/activate.csh" *from csh*. +# You cannot run it directly. +# Created by Davide Di Blasi . + +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; test "\!:*" != "nondestructive" && unalias deactivate && unalias pydoc' + +# Unset irrelevant variables. +deactivate nondestructive + +setenv VIRTUAL_ENV "/home/lk/academy-hackathon/week-0/day-3/my_todo_app/yournewvirtualenv" + +set _OLD_VIRTUAL_PATH="$PATH" +setenv PATH "$VIRTUAL_ENV/bin:$PATH" + + + +if ("" != "") then + set env_name = "" +else + set env_name = `basename "$VIRTUAL_ENV"` +endif + +# Could be in a non-interactive environment, +# in which case, $prompt is undefined and we wouldn't +# care about the prompt anyway. +if ( $?prompt ) then + set _OLD_VIRTUAL_PROMPT="$prompt" + set prompt = "[$env_name] $prompt" +endif + +unset env_name + +alias pydoc python -m pydoc + +rehash + diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/bin/activate.fish b/week-0/day-3/my_todo_app/yournewvirtualenv/bin/activate.fish new file mode 100644 index 00000000..a068acf6 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/bin/activate.fish @@ -0,0 +1,76 @@ +# This file must be used using `. bin/activate.fish` *within a running fish ( http://fishshell.com ) session*. +# Do not run it directly. + +function deactivate -d 'Exit virtualenv mode and return to the normal 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 an empty local `$fish_function_path` to allow the removal of `fish_prompt` using `functions -e`. + set -l fish_function_path + + # Erase virtualenv's `fish_prompt` and restore the original. + functions -e fish_prompt + functions -c _old_fish_prompt fish_prompt + functions -e _old_fish_prompt + set -e _OLD_FISH_PROMPT_OVERRIDE + end + + set -e VIRTUAL_ENV + + if test "$argv[1]" != 'nondestructive' + # Self-destruct! + functions -e pydoc + functions -e deactivate + end +end + +# Unset irrelevant variables. +deactivate nondestructive + +set -gx VIRTUAL_ENV "/home/lk/academy-hackathon/week-0/day-3/my_todo_app/yournewvirtualenv" + +set -gx _OLD_VIRTUAL_PATH $PATH +set -gx PATH "$VIRTUAL_ENV/bin" $PATH + +# Unset `$PYTHONHOME` if set. +if set -q PYTHONHOME + set -gx _OLD_VIRTUAL_PYTHONHOME $PYTHONHOME + set -e PYTHONHOME +end + +function pydoc + python -m pydoc $argv +end + +if test -z "$VIRTUAL_ENV_DISABLE_PROMPT" + # Copy the current `fish_prompt` function as `_old_fish_prompt`. + functions -c fish_prompt _old_fish_prompt + + function fish_prompt + # Save the current $status, for fish_prompts that display it. + set -l old_status $status + + # Prompt override provided? + # If not, just prepend the environment name. + if test -n "" + printf '%s%s' "" (set_color normal) + else + printf '%s(%s) ' (set_color normal) (basename "$VIRTUAL_ENV") + end + + # Restore the original $status + echo "exit $old_status" | source + _old_fish_prompt + end + + set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV" +end diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/bin/activate_this.py b/week-0/day-3/my_todo_app/yournewvirtualenv/bin/activate_this.py new file mode 100644 index 00000000..f18193bf --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/bin/activate_this.py @@ -0,0 +1,34 @@ +"""By using execfile(this_file, dict(__file__=this_file)) you will +activate this virtualenv environment. + +This can be used when you must use an existing Python interpreter, not +the virtualenv bin/python +""" + +try: + __file__ +except NameError: + raise AssertionError( + "You must run this like execfile('path/to/activate_this.py', dict(__file__='path/to/activate_this.py'))") +import sys +import os + +old_os_path = os.environ.get('PATH', '') +os.environ['PATH'] = os.path.dirname(os.path.abspath(__file__)) + os.pathsep + old_os_path +base = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +if sys.platform == 'win32': + site_packages = os.path.join(base, 'Lib', 'site-packages') +else: + site_packages = os.path.join(base, 'lib', 'python%s' % sys.version[:3], 'site-packages') +prev_sys_path = list(sys.path) +import site +site.addsitedir(site_packages) +sys.real_prefix = sys.prefix +sys.prefix = base +# Move the added items to the front of the path: +new_sys_path = [] +for item in list(sys.path): + if item not in prev_sys_path: + new_sys_path.append(item) + sys.path.remove(item) +sys.path[:0] = new_sys_path diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/bin/easy_install b/week-0/day-3/my_todo_app/yournewvirtualenv/bin/easy_install new file mode 100755 index 00000000..128fa91e --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/bin/easy_install @@ -0,0 +1,11 @@ +#!/home/lk/academy-hackathon/week-0/day-3/my_todo_app/yournewvirtualenv/bin/python3.6 + +# -*- coding: utf-8 -*- +import re +import sys + +from setuptools.command.easy_install import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/bin/easy_install-3.6 b/week-0/day-3/my_todo_app/yournewvirtualenv/bin/easy_install-3.6 new file mode 100755 index 00000000..128fa91e --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/bin/easy_install-3.6 @@ -0,0 +1,11 @@ +#!/home/lk/academy-hackathon/week-0/day-3/my_todo_app/yournewvirtualenv/bin/python3.6 + +# -*- coding: utf-8 -*- +import re +import sys + +from setuptools.command.easy_install import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/bin/pip b/week-0/day-3/my_todo_app/yournewvirtualenv/bin/pip new file mode 100755 index 00000000..4fc234e0 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/bin/pip @@ -0,0 +1,11 @@ +#!/home/lk/academy-hackathon/week-0/day-3/my_todo_app/yournewvirtualenv/bin/python3.6 + +# -*- coding: utf-8 -*- +import re +import sys + +from pip._internal import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/bin/pip3 b/week-0/day-3/my_todo_app/yournewvirtualenv/bin/pip3 new file mode 100755 index 00000000..4fc234e0 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/bin/pip3 @@ -0,0 +1,11 @@ +#!/home/lk/academy-hackathon/week-0/day-3/my_todo_app/yournewvirtualenv/bin/python3.6 + +# -*- coding: utf-8 -*- +import re +import sys + +from pip._internal import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/bin/pip3.6 b/week-0/day-3/my_todo_app/yournewvirtualenv/bin/pip3.6 new file mode 100755 index 00000000..4fc234e0 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/bin/pip3.6 @@ -0,0 +1,11 @@ +#!/home/lk/academy-hackathon/week-0/day-3/my_todo_app/yournewvirtualenv/bin/python3.6 + +# -*- coding: utf-8 -*- +import re +import sys + +from pip._internal import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/bin/python b/week-0/day-3/my_todo_app/yournewvirtualenv/bin/python new file mode 120000 index 00000000..039b719b --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/bin/python @@ -0,0 +1 @@ +python3.6 \ No newline at end of file diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/bin/python-config b/week-0/day-3/my_todo_app/yournewvirtualenv/bin/python-config new file mode 100755 index 00000000..982872ae --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/bin/python-config @@ -0,0 +1,78 @@ +#!/home/lk/academy-hackathon/week-0/day-3/my_todo_app/yournewvirtualenv/bin/python + +import sys +import getopt +import sysconfig + +valid_opts = ['prefix', 'exec-prefix', 'includes', 'libs', 'cflags', + 'ldflags', 'help'] + +if sys.version_info >= (3, 2): + valid_opts.insert(-1, 'extension-suffix') + valid_opts.append('abiflags') +if sys.version_info >= (3, 3): + valid_opts.append('configdir') + + +def exit_with_usage(code=1): + sys.stderr.write("Usage: {0} [{1}]\n".format( + sys.argv[0], '|'.join('--'+opt for opt in valid_opts))) + sys.exit(code) + +try: + opts, args = getopt.getopt(sys.argv[1:], '', valid_opts) +except getopt.error: + exit_with_usage() + +if not opts: + exit_with_usage() + +pyver = sysconfig.get_config_var('VERSION') +getvar = sysconfig.get_config_var + +opt_flags = [flag for (flag, val) in opts] + +if '--help' in opt_flags: + exit_with_usage(code=0) + +for opt in opt_flags: + if opt == '--prefix': + print(sysconfig.get_config_var('prefix')) + + elif opt == '--exec-prefix': + print(sysconfig.get_config_var('exec_prefix')) + + elif opt in ('--includes', '--cflags'): + flags = ['-I' + sysconfig.get_path('include'), + '-I' + sysconfig.get_path('platinclude')] + if opt == '--cflags': + flags.extend(getvar('CFLAGS').split()) + print(' '.join(flags)) + + elif opt in ('--libs', '--ldflags'): + abiflags = getattr(sys, 'abiflags', '') + libs = ['-lpython' + pyver + abiflags] + libs += getvar('LIBS').split() + libs += getvar('SYSLIBS').split() + # add the prefix/lib/pythonX.Y/config dir, but only if there is no + # shared library in prefix/lib/. + if opt == '--ldflags': + if not getvar('Py_ENABLE_SHARED'): + libs.insert(0, '-L' + getvar('LIBPL')) + if not getvar('PYTHONFRAMEWORK'): + libs.extend(getvar('LINKFORSHARED').split()) + print(' '.join(libs)) + + elif opt == '--extension-suffix': + ext_suffix = sysconfig.get_config_var('EXT_SUFFIX') + if ext_suffix is None: + ext_suffix = sysconfig.get_config_var('SO') + print(ext_suffix) + + elif opt == '--abiflags': + if not getattr(sys, 'abiflags', None): + exit_with_usage() + print(sys.abiflags) + + elif opt == '--configdir': + print(sysconfig.get_config_var('LIBPL')) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/bin/python3 b/week-0/day-3/my_todo_app/yournewvirtualenv/bin/python3 new file mode 120000 index 00000000..039b719b --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/bin/python3 @@ -0,0 +1 @@ +python3.6 \ No newline at end of file diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/bin/python3.6 b/week-0/day-3/my_todo_app/yournewvirtualenv/bin/python3.6 new file mode 100755 index 0000000000000000000000000000000000000000..2871802449d2608bfb546990ca73f2eebcc2e9fa GIT binary patch literal 4571576 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

Iqn`H<=qRlcU5W7KwI-(lm+7 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

P}^7b(7%KYEZ$bX{6wjF%2Z60-6KsjIG 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%0D)CjufW==7}R=NlPnf5bFv0q#6YN9bSXGvEKSDR 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

-^Kr%$h85E4XNzk__jYSM07jIky6Un2(K9&u*RJXv^rR7oJee*YB z6RvE=FiYZ`1H`_g)r7z36E(A&nn}Zvm6cB8>wL6-5~46K(jYnXlHS3g7ScROG0+FK z-a9P&DvxEq|5#%RKaU!|;I6(UgjNFsc#2v_&4-Kc7g*#i6v7I3gxz_-Na-|1p+_`=h2h6?hqB5H_&^PK z!*CmLdvFJyb@X8Olb{s}=FA)wifFC)i;C;|Lc>v0c~57yDN=yv)?9gQW*OpP)-y@KO(c1rA_-dl0QbN0!{J8t=}k%(O9wqZZy=M zJ5i_AfUGW68Jqi49Z-`xvzwaP4E-tbHwJx7FB97uG`i?|_>m(MCTlA+1!mg{vu{lb;MX%5PywK}y*Xuq{0_OZRUfzTG>-`7(cE{I(%3ZI!y^*!U z`H}R;OD8ge(D7vJG=V_+L{tf->51`{sqQ|1jMG`%r8Zlpy6gObPCa4lbjwtCn=eXc zflFHYiV-c-o{B=KIgaNCoM>@7GkK}W8`7WJp$l%4;yx06-uAvwv;q3Qw!HfxYJNJF zYgM_^lHqmh8pM<Vmq}~jhg=1aQ*J=EMSi}>wqd5>qnDM(ZCAe~Pn4(^ogDaQo zinElq+@p2Rqidpwxh%`yx0JzdGl9dF3~s(o1&70hgWFn_{O*8pufGTFo~J%g)4M84 z(H71BTeavy3EoD<{QPaBqxsKKd4U!DkNLM4zm?hAVX+hqj(JkON#Jv$62|p&sPd1) z1y%EGtg+@`oI_>o%5Hqp4WGypDp|Q@fQU?AEmef{hOnA)6#Q@K-~{R#lwuBwPUbsO zfpTOowbB_xx(>9CdDnvkKy8%XNnI|XR_&UOgA4p%(!Ub%6}fdh1Yd|!J`Fyb%Npsb zbXflQWtZAnKdwqXv6jPB!Q8{xb zkY%sav3T3X#C@4j-qB{9F1346yGpf*T|cg>M`N$@x;L)}={07|<3KmA9j?$TGk-Im zLCZe6VH)0Hd+K8%Kf96K*s*$iPb#YlYxcC`pCQkCgXuSVKNjzUk9ZR>2Wsvm`)bi-iLcl2xI928NYp zHljIy1W*(TIbkH{8i5V*fHHu<`?~xmdS@Ux%;GewcNFrmq8zpF124(8s{n(s;QJq9 z*EtMm(Igc+u~QR8sp_h+|6?ILRNJ1$lKyd3P8WvXrd5;CDy;zrVJsrFN@wT02=wJ0K7+2?>F_f|*i^t&C@ z{f*La>APC{Eu8t@7MZPGw1@S`2!d<&g)tEj?#reE!>fz#hXxsI*vjw%L8##uAaw9C z4s7GaU^^fxJj6z^HW+}_lT>@Ka65+g(?9ty(T|!D@X_gsz;Uqc{;J}%Ii~@kQcE2^ z6o%K`I=Q3q8Auru4kjNw=|@wpRIymeznJF$u>WZ=`7XO;|1R9PQW7004Nw-56ZfX@ zVyfHu*M0xL%Qxx_vaYDCeHB4qv5X@KE_aOnzqCCLa#7{mUR}s_RaXpC$q_!;(HenY z?KcShe-kj^b-Bc;a>?h5qN8JBG`!&ZFIZ4U=av1zDlE#ZLK<<0 zq*Wk=Rl&RNea9TEIU-Ar%=^d#^|E%Q1!PcsRvDUzB6aq*k1plgNV97_Cn(QjI7tC1Lve=pat4 zk@fGKx7p1C{gRQEWb;jemKK*rJ9`)pW`y@SvhI-MiNgL6RUnrqO=Om-tz_H8hGZSr zuv_#-0WExI_SN#;q|xJ8I7QhZSJ%7G=F`_N*wqm9)HbUSuW$TZdb?E6$?2Em3$6+n<-W(Ei6z6#K;hpofHD)2Hj(@0a5c7R$*DMwV>nU+@KLbtjwWQ$KdwqKcVnogZFzFNt zT)*w^ZtlU2v4O`R;~I_M->8aE5rYB3DF^oe!Z}wt`2j6NQRKtl%pyNr8Qv`ONI| zyq{BRqWC5Pt*H&~f|}6fqpSbRY3BJBuGN(Mi2==h8OIdH<7yn8!tg-7LpJ?t_?*?M zfBY(a^m_P&y{Nym_N0>VO547&bNS7OHH;2PN;8CdQJORy=hwu&14gLc)qF!>3bauZ zMa45`B)$H%yb$?SJoEnieuC7POzwc~)tE1XkNT@;j-;fys;l31`qkd74uHi2J{kl( zg@bG)2y5%#d+RtGTT;pjZ)8o!11x@(dh7UIH!z2PnvM_x@^sW)-*<&e5VI8UMV>#x z3lPxD%X8&rcFZJWiT)q}YqdaG(C-^~3WA?$ypCeL_70cCuHc;YB8j4;cxJs_WNo_i)`UZ8Znb|aM%_L|> zS*VN5Uw;U`*vctSBlB0G1sl?9d?oR)ETpl642JL7heLt+DvwyO0-Yt9b0U?f!hXS4 zTl)G~?f|-xl2rDq@{MuqiGs{-p?MUUB>lnWB{AEVMeGSZaEiO{H^@zCL;gA$+IUKf zTQIB5EDB$EQ*0?lqc99>gX6C?{sbGMbh`~-T-CKWzH7NMcVX;D^I;RPC~rOt3}U%z zn<=iE1;tO5)FkGq-K}0i4`kXC1Ki;J*?mih+QiPW{_3Ynu~r(J`xDNAHl`E(t ztdiSQ#;{;O4e_v1+Kf~9fUa`eW6JABaYa${udt|3upHoj?xO313(B-Fk)1aICbTdb z=#TRCOykxb46}Mm^Bxz^3Ak17kE$2Yo(V|WgWai@uQVm!*l(%i+R;i>1()wiB@P@% zW06Ym4E~mVj=P|8#Cw8&U}iG;&)fSG(wmZ^VAt6g^TRG#C(&$@<$8%-DyL#CM{_!- zqQTk(K7vPwvxpk*u8iB(9JM-1@ua-DVmtFI&u_qW#I_$*5!;!xDY5O5XW$E2gde5Y zwDw~LQ_>8^1FSbB^Fh~xc}hb5ara4psH_)8}!4@&}#qXrjX>2B7> zU}-<<7%UwDlkQX}EF|Dz#BN)@U=q2bAaQOOKPhVen%5&>GTGDmU{5T!i-74LG-Rv( z)@y}&T+-Tub-h%t08A(6>z$(Z1WW*@>b*q0JTOhoS2}@8#lSR>_^O)$(*yLE^mlNy za)(&WhM+rTMF)0g~T?s%BEZ%vJ!;Pl0-0#Sj}xl&YUZ`1KRJi z3t)FdQFp(IR-in>AnSttOMC42S0Gb!75U_q?j4s5qL0-p?6~aubs5Z#RJ~}&C3AS! zc+02qn+~k8(5RMARnH#g>A(f2H5lB_ZF+e(26>F8lK$52#s~&^i7E8l^j}kgRSIh? zA0oVfvTLj)FG7iBC-H2IR>Wn2unU`h$uZHUzhPr>n|^k64ZF-<$96s&-TKb36S3_l z@&EaoZ?!aIKD*8f|bm0Q#QSHw&gvfWWcYYlwa*xjrRvpL?kHCOQMz3gk!1 zFwGN_E-?n6w96{ch_#ReCTlEI3KhbOT}wr(wj>E#@-CvZlQKCKg4QzF<*zW%ilZGHB$Kmxf=eWyFg>-=rB4q1^YklDU4*w5JoX$ zP`qsz9wYC=r4z?#{W>=WGe7PzhVTmZPU|O^9Gw7fb&v7oIh-ZI^A*wHmTTx*$Xkfd z9W7*Lhv0$y`-gd-Xnhfgm|hiRtd1=!KB4sGrgc<(erfUZi>711Z_COrNTOTTpYRP6 zinZ+}AS+&4Q&MSZy<>Pq%sp5_0To#wc`OPyIs_1k3m> zQhmWo_#Irt(l2b-hh6{Uk%ghfnF5j@lKn}1<6X%$uz~X%$F_XSQu4H6SgSyO!5}1x zT0JykVC8+lCSf^^*1pQZho>;Oa7!M0+V7YtxqrYL1CW(Su-)H?)ZMeRxZXx1f$~JP zAUvXfrw$P;J9c14UN9_xhlTwD*phvKwj|!R?YI2IXMB(KkWhmcnU}w8Wv9k45kJ%w zVqT88hKi@gzKmrRH$Gvuvv)^@K`gtiD^-Gvbb}Az;p@pac4X6Zk7Hb)IoT)Sty&dg3Azrh?L%BD5aU> z7p2+BJ**v@OmQ$4@raJRmz%|KY&)mw<zECy1lf2veElhS9Jss|$?XT#?Fo4yDq)nM$v zf*M}NnL#DtKQx0qX;ijhbAGC7;P`>Tz1;ca6VG)WKmOYXIm9RM{tD2O@xH$QgZutf z6?IE|a(Ad1Sq8`!8AC}9jarwnp50y+{Oi)QZ2;HIw+1}zRd_S4bjyPzrku0We|#~< zeKA|G%-G(o40;!hZA|yrrrqhrb|^(j#p#rIpUj$l_)ytPqp>NEh7ImMhR}0xpFQDP zkV~suhMN!SUWU(JEG)zJQCH8as35dLUqF+Q#wFf1k(GE)k`QH5&h5z|*7g9m#Pd9A z!N6!ouD-|hc^yp&#&-TYNQ%Gj|L%Ll2utG*eJ&A$U4lgU=)BudKp}U63JqJqGhpP#k@97TJ$HMEMEsH4kv0C&tj zp)X&1Yg45Jy_`o$!aqo3(1`%8?`=)pP(99WQrwVspg>0^JJ9Z6xR2eyM~K#0j*F@q z*R@8mttwcLB%@BWvY6Qfo#4&ZOEM8OCLBo8cfoBEPzh<4$tB_SU_oS)-vFQxg9chD zo&+`)_khk#@CLDLnXTsZPW(Ody0&Zy^C7uoO-U>_hEZ~+nCzqF8q`HqI1E=ZrRMV3 zoGZ7{xHQM>m3}og_utH}adxu4CSJN+pT|qT)F&is=Z+51 z9!G>JTA!fl`1O~gvyzWq(!-9WwYdUxi&=mN<@D;u^Nw3rrTEe+#h$@3cRMyTMG!!@ zm@LaCt!~}gSndxD*LG{~tu^l62v$X;k_!Lu)iO>p_xYwC67-(*Uk3qCQ*By9EVssH zI-`8uHLf809>+iK&y8!P1QT~{%Ma9`3NnyYpl8TE3d}KqA|d8OFJHjE7M$ItqrvUJ zBI&&QUgB?2KwV?7QhW=a-1o1%i+d-Ohd-syf{PN>3=2oPd<;n*?mzxb0JH2oJl zzHR^AvB61tVSN2si}f^cnJm1oxnFbl%la)m4g$8nm;s1yQWA8zY(zPAS7VN1)SQ)?)aP*!Kj!M_Fc zDnt;<{?;y793QkR<(w&nf_I1Pl^;^2&m~J=3jV%_LVV?qnYe*J+K?`)3McY)VgJM* z%r^NMYuXU^>r80)m=-2zEs_&SZ+4*I6E0zadzIN^k!0Jw;e z?YC4Kkh5!+`K^A|5lIlkpB;=7u%Z!*v-VhSo2`TlF5!lP_k{~27rg0rvi(4FBY7|V zIth4FUR^AE=W{)oh>Ka7Z~{Gd(>sNgC{kgGoMeA%hb+o?xp{u6Z1ugs2gg%jc{GD* z_J5a0^i8#^9Hs|B%@l%)Vic0OL^wX_UE3X`5Z}8fNTD1Hx#IQ(f!KP5oIf2q;j0}e zlygzi|5X9|4`z78n_yM**#AeA6l4GN{vsC<=1&h0*3ZeJGpuC+dg338HwaPqyAYZt zKawfg+RBVvN31+}c3;67zjBLM;MnZa{LWr%`(21ooQuieedE)`>znfbTs@ABH6Mn1 z483Ilnr7U#W-xD#cmh$pImMo#W)<#Dq3>K&z5}O=4_|By_!yx=p#v^534Y^3R%JQ` z_~(3%q#u-!nZsb0FRR?k$WY7@WI_<21gM!^T)kKFl{;A)tK2)P{22wv0S8%SH$J|>Z zEU4L>Y|T7_gCN)0%+hcK&v|=}`Ys4yZ0;j~!@1tJGZJlm8lZif)4j9UUJ*ND%1+&1 zw9jZBPU@}CunQRw69g~m4VlQx0^Q5(R&=`4ecj21=KY2JV+Sj0QYw*i=V&46TQEF%!ZO8^@!< zr)ei%@64C~BxLNpj2RM4)JbBhbm-3da;yBIi)CA>LWq{?`1L7&pvzA-kkAX9g7C?u zJ@lU`e|Tr&mCl6awONILGQ1U=aN|mj=5F{9U=qh}&Pg;kJtYRk7_bkRw){$=TX!5P z$@d4mGxF2&-Q*)xFq{Hn;9?WGJ~2Pf2_(HmNFNgGJK~FfI66M?Yj_jKkF}}k$CnI{N@U+C`-7*TAy0FhF6~UTJL9uN-K&{@X;UevxZ`AG`d)L5=`~Uw7)k7= zY;)JZyQcjSy>n8V8AgzJ5q9C}(6 zX*Zc=f#;riR(^b{qdZBD7C0_sMBCtT!697oyU#B3p8X@imc$1L{0g@N-3o&CZ4|}h zB099eGe9x+|BI#H3u^-$gcCk_X(nRUkCVTE- z4?{wvxtA;av<_*MrFTcVUqAkMosVMAzs&5nH~WyfMnjP=b?>N=_7dNet4~W zu1WudXD%yK-SeRIZZ21nQYR=@RQ3#Bj2PPVc4g-C&H1j=f6>i%g=bQakkBuOHw(O4 zHcUGF4EVR7a)uiHtHm?zqg+%vAmv|c;xo#_gP97q!_5P(t^;F{_wDf-<$b$~gmsR= z^6KxQ#1huMKuZZO*a{U&Ms3Y_#v#qMYe?zz1=OZHv2HB8vsM+MNvbX&$A$0Mw>;10 z0#VOmTwRHvhL);b2v}Z!}|5HM~*9TN1)PhnqBF_8deCw z+*8o%Bvvo{Ge}eb*38smGUej2BDmAU6I2n*d%JlONBC}E#IsK`6oW^dFv`V=H?ix_mSkHFXnkMa*UqFxF0BabHIq?S&V;^$#3 zu|tE%F~Eeo1_NVSan{1nn=oOe9p3+j37^Eu&SAoQ{qP#PapRbLru=Zh7qpSPo3jyq zt^-0=4WmSYP<%1rU7ErER5LZ^C>Dd?;Yg~gl(CUalGeLkvGLf*!W`H~hJYN7`um0v z@kYXgy);bk?FHArPh`bKnscxTNB?ktjzM0M1Z9|PEq@w(03)W^9raI{h;_5|xq({F z5!5nPwkxPPzZ(R@E2CxZX8BeWjq6WEB6yCN)Tu064<_}eT1N<>wn>tw>{a3ke#};->fT7d9wvAn zZ?*deX!j1y&(R@B7VLy+h=VbG|uw zvv&(l-@`w-wSL@>P83^bdN043u^u=|SO8algg(vUH_jFZ=as zZ2jQ-#@6Rbn`V!!3U{I!EC|3^n3CckF`t|+C*i^Kxl`MF^w{AiAlTq<`*2P4%C6h% zM7KI$Q3bz`>w0Sn@6gQ*W>i1j9^ZfF*nJRhwui{oyTXrwvI4(@zpIJa8T2#Z@ig3c zl9S6Pyw{}*sC{)b1eUkoAfew(Oh0I67CjQvA8ca!pWkR=`hVz(SrF6Trzg}1u?b1< zLk>1Ny6|J5bpj%L>Fc_gQ`xJumW>-}{=Tq5=npKOA#0rXUoc;y!bK`QD(GNJxN|}c zMpqFXrOL#l&kJT+uasn2fR^-Im-7cMA#+^P_njo=xy*%eg}%F%Hxp<+%U`}KG&SUs z8W?zN+^5A`>o4SYN#@L`p?SKv(OMdH%sjPRlDRk0hNETOo0;3A4%W3IBP!{Yh&3+< z*`{xxrur=*SVh|j<+`4ORH@;jHMi=8 z9eiPjaGLl_#D|_%l$bjgCaPD|lDN%4aTfS}+9$GXzz% z-&~5o)dZ&HI$ir!eBf6ElpRT)Yaxxr7$1Jn883a7?g>3$U8lD$bbEiHTQYxYL82~y zMVIL|b(!~6T#ExzP;hDOT5Z@q!Y{rhAgo>2wc6nu|5)9}(*$iexgtJvRK@iEuwgE1 zXxyVnXR~Ph@%CdYSqrwVrZnBVb`e%Lp95fVFi5*1?<`^*(XZ@WJ`X)=|7B? zch|q<-PPz1tEwv-PD$+QR?XM%Tg!u#^$G7w#2kI%{vO*W$Wz_|>(RU9iZkT9d}<2E zbMj6G3GXr#QqQF)HyY7;%vMZs6&cNjpA-$@m}m$exFNi|spk-emMx(q_KWGD4)i=f z9IH<^I`^yb`m}W^;Iw{1_|cFrAVdw^#V*60YQNI9BM(jbJ8hCTRf32G#xa@-gpEQd zoA;(7<*qlLx8o|pQ|aQ|>$^VexgX7}LxN~@#5JoV_*X+>@drefBUGI?zG6h%9$SeD z_#-P3GbZFdK}*ufSF6D?5!7a0kTa=?~OP zcvPWU(mTC|8giAo3XCsTDf>3_8MXm632!{LhS3-o28-h3jjIV2F9=H5IuLBmYD{SC zA{s@%Y2UM1?Zawl9C``q$i13o;Nxr1D^KEGc#)0a*dXqo{w3PH1R6wO8}SfaI7uhe z-PIak)uK}BO7|uqGojyH5 zBw6?e4#Q-b>83Ah1Zj}m#^$cWAb!B_8}3^)3O_mz@4HdF@LkVQ4DI(fN@Bm5YTHou zMU&1$r#lbt6rYFJ56+*5ah!*m(zd}^HSA>Gg-}4i7ZQ>`53s%Y^UweY>$Eghm_gUM z*EbW=AmLw$zu>6Kk!^cSus~qm$@mLCpYWzu5UHJAtK^c(2J-E&O8BLr!vOzIW@&<% zc3bqzfIze_eHi!9;T(aD27bdh0>HB3X0b>BH<>QH;WgCI5x9&aa5+c7zLmG&XrNa| z0Ac}l%PK=k+&iVla(?9H@dei;!l+vxWcAZsS)xRa7(m2BK4ExvHJ}Ge8*se7OnJMd zJS=e9hq+U*)SZH#{5U!VT^|6+)fl^srIge!BzG3}Q=qIv^wY)qOzjqDE=>k{ikDW1^8XcCC(kLvG<+ z_#)jg>Y9$bKxCYt2~{087V}T=xOxBda`Bq(W-=?5y~nm?Y-A@w!A(~1n3J}#Rc_yA zz)E$^_-TCTX_e_=2&fhB1$ip=YzV8~DNc#CTnL0GU| zvp7)O9_KJ3VU_jf6zE1_>;Ae=_vln4U0M!6|Ywm zyF`d!$btj4B;Lm03Jwzom^{CwaHtrsuML(SM3Du#kn^~=B-nAkFVuf5vUJV!^U2bG z#U9&n)^|1O%8rjX?_7^cXMMM|)^AB^_PO+OZ`rKx24;eVuXmhRVu>}G*f)QQ{btb~ zC8W*XHTKwO)`F_9X5Q@h z-wy_+ZA6(I2U<3iamudPsqL6D3Nq2NYsW*2PZ@qpW^2i2_G?S#-HA3K{lKw*y zW#Vu`Sl5rI?H=#Wb7W0AK(Iiv@XTu}gB*B*)g%+o)1@6RgohG;4PJ|2TyGfHRs=8p zH4b7yBcEuyH0|80GtP?-om`o|grH-k>8to%1$@Gb$)0m^O)Q&JRd}!{(!$WmgV3f^ zX0A=LoI#_Lz6^cjvjDG~wc{V7-vxagqv~=0{a^3@|EaH>4q5L(-H7u#w@inC`Ug|F z-Jn6`?|a?*m+7^{#XlJBnAV4oV?pxPWGdtPbakx@tX0Uh4+xH~9L07~8^{*8) zw0yun!olftod9t-CK0PIKLtAu{8-0=)RDd!nL`R5smx}clel1MWxTXAS-Lz`w{$wO z(5@72Nh_`biNcox=0}&zxS#3@s-504kRG$cqwb{-#asTUel^H&BE_!yqDo$-|79LS z>Ce?($KU2b#i8lcDJhxRk3fd)i3?t*+vTp?X~-aNi- zj}J7en-VS_L+-q&7t{ph9UphYn_t#zd&Kr9HU3klXH47qU8ColR4l*VPdsqH{l~rK zgZMzwGK9o93VSn>WrC~L4}dvCt*skM(`kY-^a2+U>Mi1lB=@^r+kziJ`>=8b2b@NU z2X($E#0W=)OOSQ;_)NQrXKwzpgqdmK$d&m2{;bwMi*eTo2fS}K zhL0E;4!+%u$ys|B+|5+pHUURfH+=Fva!**j(_yLKQxX(ZG#cKnZ}Mj;rb@O`oTpDG12mm zTvNs0_CEHge&g+ZtVq9`OFwV6l!WO4J==p_uMFNqUycxt8&`(-Jx_CTHtm$Tdwf&g z$)f1~IR>oYZL$o{VB+<0@3jSw-iJ4i9TNm83GV~xGRuR}gPfay6B{;*VI_~v{oiys zxzAu2yT+{is=8pI+K+Me(eef#78 z_;xVg9-wda**xI{QF7(`_3M93`4fLWUSjVV^HL6{_*~{C`W2_J!(D`V*Rw z2FLgv!vtiwXc%p`6DJY zh8CUIb;F;{$LgdtHX)>K$S=K4*yNdgv~mt}n@*IBW&X4kEC(U7#17x_XGAgnDJTn9 z&KMXUI;AoL`6OC8IpE2bj8uZ8gNkC9s(UTH)rg_w)=RJIK#kR{U_I1YIDsUsD^qpv z%-CT>9ct0^7E+Z`(d+DZh@swpC|)LqXIS*>|7~N0E9pKT{{!A24^rU(ah1Ubzl!Fk ze9Ii(dwq$f&a$!IowKoLT#=oXKJwDMgFFzG>%FqJ^`RNcEm;!ti)H95| zb6Cg@v=;0@7w^C9LOE%fxfT}cch@t2q%oN{!VM2-xW|>d++Pg$6%{Zz5dClL9r+Mj zKV{@=OBD^4v1JI#w?VC?|H|;6N*9Ko6KfE)Sijrg`~sGIZ421Z7T!gJj$bqXBaV2> z=gS$rvpYs?xx&`Ua@lf0LKgs;h-E)lskfr*4Fnq_KR&{@Y3od=xi;ibG?+$LPI6ccJs=7_|yJ}m=KGS{4?pX+C71Nm=@%w-EFeFP~R_buc?=zOAmOJ)&i29;Sv zDMgA5s}JFQ!LZu0h)f^gvWR5(`+sE-IfZxKSww{JK3%qz3sCYo`{2g#`oC=q>C@GB zvTdB}+aK47GAI7ZcktpE82pXut^WeyKTj}6Uip1D?dc4=zvXY-pHeQ{Dufl1Sdh3S z=?y?7^fvF3-f89LpBYY}jiU3~c(Oc_BCp9vm;}oFpTeX_6c+an*ex8bQ^Fl4MGAZU zojwUO>PcGSxVzURy*_9W7!=GjIzPQ=olemDIS=p?26}`)?PF9HgywgLbyh5^G~`MD zAL7}}$l*dspIEwW=gY^=d3If+vX(2OAlJS0gcOFQ0#wa&%6mo;EKb3JiQUbeKn2A4 z9MKM>F%v=|>q#Y0Jkp+B zl3(gYXN{au_gVXevv|9E*2>x0yx;a={=@tUj#{-PYc#(B5rmE;RK;xI;xd{v#VN-% zdWS5=5+=c(W=14&?UtuC-^Shh%;g$``yI=@Vto>H%D<*T{lby3G#?!5^Z$`{ z=J8Qh*Z)rhG%h%CLF0mrnzmTCq>3etXaWIeUxP}HK%D2hU2W|YUr0Iqcx zt##k478f=J<5Cs0Dryzn=P|Ol6cNSz-k)=yXELGv{`KSaV)ER5JNMjk&OP^>n%K;T zVA&ctrH6PH*}Cs>uE>L~2DZQK)E6K-AB z{lC)XkooR~EBc8pS3O34U2KQ!SzUpJSHEI~ff?Lss&Ud-tsS59K zV_8`f>~dQg%SuJ9uuT5G%SuPHO1I6Xg2uKZS-=i-ujkoG)adnjMyZ~q%6cD9D4%71 z8d}38^Y*=w4BAy)TPm{GTv(m67){aYFtJ*oqRG$Vl90tXZXHIvIU1Hpty5}+*<0vp zaO>T+|1_&~RIao4SUa?$G_xyoU^zG3asQ7( zd%ffBjF^=aW4xP0v8Z(7<)S_FYT!|_8@&c8Yw~do$VBAuF-gB?RYyBBjBKB|nZgKP zNi1ETutR!#TlkOBw^*KNeHp{CWbyls-q8^XN&dPQSehUHZ!?&+7{HCx?@38|7nS9A zT5spoblqMf%V&0{cJN!~TZm%&{d$-9eIF-{ozd~0z%=Ep zcSC6q&7;|TmDxOw`RKFh4vy^krH{xS9JF!y@4VFwXEq@)`+r7C60b!#|BbiSL23;6 zD+*1r5WxI}_-qnUN&jySIenHHimPMr%r8Pl>1y6=Q7wLd-YIemnwzZY*p+g{_`&(& zba=DlnP6{{^F8;~cs}8Bmhl9e(r!>kJpOig8g6C@>m@3|nc^5DJ@;3g1IxcV3Os8j zDq5#OAladuUpAj!kI##E%KedDE=4|jNIvg4fe6;`qX*?Y{2ys=$qO&byFV(22J4r9 z?+o`?`2$-tbn#23_3OAWl8^JGc<1gg=fI9jtx2pr*T6Zgk*Z?G7q2??^c2TogS zb&B*g?R7%i*(f=m#gW7Et+Y8jfsK}_gqwG7B@R?I-2TnDoz!G$N5_s`_|1v0UZ_ac z{^ydxV1nw9ZsWc6S8NJIhhJ&>{3+5yNiXd(kCItzR?1EK^+JW_n<_4zi;904&jUVJ zq4E2^F8JJVcx7-*RDz&jK1I4+|%94-nK>@h`{p6wU%%F}TCSUo9;&)r|fiqRS zlj6D?Yiv7A#WuKNz0MId4aes!R*IrK7#HMS1;PQ!E!StT8$pF;sVlsPn z7@*@s_5u%Q^O6=beI-KaP8k*Px9a1^B6f9Y5KV2kebqUGMk-fJeT%nl(s|&8h0gTK zufI_8F3x?`mf_uIk#RMs^=p=1K$9ZAokW+TN4 zQmWl=(;*}6)VB~^7L6?0GsezK(KwdfjYMgk zBj{Y6e`&6n@y`h_$NiiTzRW0=8Q5ep{=k`tG({X;$&gSEJuH?I2eccZBoFwi8|Kvi zFk4T?8iA48G1aKdv@RHszWr z+=HH62nm9JiUpYuG#hjY$?1_AH}f!#J08Vyw5*jX=<584Fs5GloO5D-uHj3Ko16Lk zKZhd~;n^M%ey*r;1L#<=ErW^RRq$9z;~@g2cWBcXL{{b(piv4=8)*)=lKzR@dLCQ_ zQv2d&N&HUc`FzXIhDGtU>7db8B>hB+r$BCY=+$i+S~twyaZR|2!Hd9Fyshaa_vF@ZLnVUMefeu!vgov_kbI?z=)Hp_}^UootVGdxJFoGBNQ7@FmgN(LC`*Kl!(8t2-(M$xJ(`f{TBzi)Jb!h$DS4##iSM-x!WdR7KmR@E3d9xGkbcqa ztqG@T3fV9nPtLC#NlSm&i)T1p`Iw4ZqW%>mk7lfGe;py&7t{~T^x-Tg6ma9NMKFMR z1n(8iDAp+J>m^vd&27!TOVoZJ%j$g@R?y*!K8kE%WOuM~L-H{FYnQ=W> zJUc8+KSgtu>8s2y*ZoEk6VWf-te0^K+=pGCs5^ckpre;n9bZW)rKx6Ra0wwaR_KP< z2yS(u-~efFbyQM(qeW>D< z^WqP~Uj6+I2<#n6+-N^(8Cp7R7Jn6?qw2#!5|@4fIs)}=9!I5I<9uPh#jmddc@Q6C z=d9XFt-P2Y`l{Wmz8Cr{31zLEIl9YB##^4%%czNdF zxZhf>MY3sKUbEIMN9T&ddgzuFu4+)I7+8s7on21e-0>_XO%Pn{t?`E!5*$Y*`9B{2 zlltr42h1x0|3Tj6@A}-0ZVCZ04y&*e+Wct`pj)1r(kIVfA(XszI9A=2snnl7`9%+8 zm4m|ot!jVZaKvbc;^wXSM7R6-A=kK8)SWNrHQ3I9MWAj%^DfmNBU%%w}H_|&C8}U_~re+eAb?RZU5IrITxPLEnxWW z37xy*nNogoY^J0J2o#O$iDhq9$iJ?cImd@b&5~d1@f=c%`uM_+d(>VfO(EXfv@Fy| zyzZE?%%9`_>Bd-Ouhu$YawqOzUan6~u}o4!*xY?oN#-{paeyr>t$3^X2L+xZEQaf@ zH9Kz#%?_6NU#a1Hhm`-M+tkoO4^n%|-z~)(QTvFr@F3O~vQ)e<}aLN4;QDMo^WKVV|21+u*3hGX5Bqo{5*WNczE0Bvq}=O zq~$-;k0~GG-Km*Rv|pE87db<0+-RyCJ6n`QB&P=c=JjqSrasNGq{{^_1 z!>E@*Hx^H`*Wk^v+4Js=%>3X^BH`VjG~GGH<)>&0i(rhhoSp=8AqTtl57aCIvPgwA zmb-yWH7gtaf%gPQ@FM{YX6aMhm9Zo)nRBETN><1_Mf?- zX}hF6pTX!9qLz8z>l8gfR2UcM`#z$e$b@$oYc$P_2O+A%6EpYz7^-q{fVSTztk9-97v=->qMB1Uw=fX;55c^z{X0$jx=8 zL!|(T`MZw+sPsyk4*z;nvT~N~VV2uDY&H#D;>B{8QMk)3o#-Z5Y^i z+=O?lA{%~KAooJtH!_X1r*D^C}wFUZ#Tvw6X?j4Jn1B45`}XvFu$$5A#R= zRI&EbFvsg60BhetECm%6n=xPHUG1pK^gl&O#j=mMaKH3(gpm;3PIx{Dmt%=q(s#>Z zV6t|3W=)VIr9dxO|IjtbeMeStD!B_)k?6PUpx@?bT*8=L$5MBFzl1+mu*KbgcG%QM zxe~4@3~De{*?9lRhu)Q#Ly|=8H|a4pi0mF}tM3I zdDZDXoVwflj^rIyn|=!;9~;qYwJ*i8zXf#wfNym5=L8jB0l3}p-MmTAegf5Nc+M^!Q6MvfWtX8+QCRKy`(Ek6d~9jvp@c-S z273S*%+!oosnw~R{f@?D|KiyV5LH}WQ5B?4!aEcvD3CNo?g|lAegs&g;iRxJtAz zD~+kUM#qbLhx`as31-T~C?IQ$*>t4B7pKx&dqWABNy@2xQ+a9OgOd?B;6`((=CXDu zwkY2xqXX-8?tTcQ{?kUi)v-onCDdSz9mN86b*}ecI&hIFrgN1tv<{p>7?AzRl~Nbo zvt!Mx>Ai%noMX9RRFrHxocGI1W4VC@!XaQjRK)Kl@z{`e%|vO9Kqh?h%w@jXZ^M5; z?K`pD4g{k7Jdb`e=tV>%56}}D8dXnfhgM>>)avPEL*i1Sq`?$*N#TjYIzUN}dy}3uDcw3mEY5Kj(1xK z@bu!%38sFzmSPB|D!T+z_r2}}Q`U#z3^fxv8iQ^C%yjfhtrFtgxDug?Q;3rV-;dV| zP)CZ9mPVrC0zDKKr$2sC0Rw7Q~&HVXBGlFVbc)x0s^_iU*gA*{=G{sJ`R&U@NVtyWm^92-}!@{|bmZy7`}#-B}O35F?Anxii|2Taw+nxD!Nr{)QW?dTQOKjQEzl)wt_-9s)i?^)4*8w>yU8Nh+TcTd4 z4Ly^i7gPcAKeQx$WJ29euTG3dAG)P;IXfnH`Mx@wTRJ6_j$K~w0{2kW1@|OTuW#v` z$@lpWs*xrdndKVE+#FS!c|dm31`thaC+?!rJXe(`B$S++X2W}~YK@CXZGR{W5X;_K5@N)46Ct7HM3Rd7Y|Y$JQX<5jnp{oBe>L5bE2Y_)UO}C^y zFd3mQy=LCQDp@JAqV_sP#&RokW|R3PWsYU@VQ`s(8I4yZhF3Avc`y0zElqE}_Iaf8swH0YeDfFe z$hHMmOhmn_aocSb6k+~DEO!BiPgKX+MQn&y;PQT5(n#rn`pxVn5LQXUkTZnATQ;na zgV}70q4Vbqf6glzjR0-nno9s~KI63ntCvhSE^vkH3f47MdA%wa#9i z&|pB84+z+N-z7p?@S+KG6#N_IFbfmE-P3V`dr^&aN>B!g<@?yohRTCsB*Dr;YOp9W$u8o9XG5LAf0%?&-)ZfldMG%-U;#dJ;|L-$7R(u( zq@#%7a_JF8#vM#4c zjwND*dKC(`ClKk6`Ml`&(GqDw8pqaq5cFlZV%ZKF#}xtVUZWqrR7OmR2#9s5&=Q1M*9~0T_(-6St5YwgWU@R`}nX znl>AcQE$@U#Eyr*RfO~Puo|Nso5h#h_|?usHqK$RL;JV5_BCJUb6lA@3&qz{3;n7j zzPF37wEVj$;F#3AM4UhrS^VP)v`((pI9&c}i+|F^YkozqlArmd{-4}B)f2y^i?6r% z16_X2@y%Kqe;9L2{`1^AH4$Iq#?@r;qg{W-5Wl0#&nZp*)h>P<@h`jnjI;R5Ts+7) zH_pXRuz1hKPa-~Scap`AbnQ+i{x`1v$rgX4#m{MG2awciNmnRjsUO-X=7{bf^$M4& zkfq+~%HH5ocdpbhuTaQRryG>bne9@KSIECYAxrJ&QgwP#^AEcz^%;c>4wmoEN9&wN zU25%>LTFbjWE*I}6+-88=D5_I2qpcS6f$7_$g|W1E_J>_{^JVSemKgd3aQZU-j;fW zLe{J7bSt~WrJnBktdOOCQfa+f=2G8tsR~(YiyP4jmpam=DrBjbyVNxMQmEUOh%l7anUgM#%=s!#+NX&bC3VmOAK4|?cHz|p=*uL&K?62d_(tI|zgrk7S> z2>&YC+f3Sx*$fKRN*y)c6 zxQcEgW7(}4C`Wg{RNDn$ADG{NW1&{93=dlwmhg{8P3DXF)=ZzGW{$FECh6oy%r1%` z|Kb78$5(=Oz_6VEdX*_h*ei%3V^gASEZBy2(qTKFJ`s)vm)M179zMNmG^=y;8G}-i zL%3GPg{^$b%5zT8N(Zg*uq<0A@M(R)@~V*-jp*UE<`+On`a9eHoPtvv+s2FeaQ-y| zTenA{*X;Q!FSoKyu8k&Z<8oIP#!78~vVp&u zE^eG_W1O{dtE+E<#f_X`ZS-^XO|rOQldO$u7dP4B22Hj$23VX!(c*<3Zw4@}r9Zlq zS%i(Zx=CNw-XNE9LzHs0zO2=q?7(tpS^SuxWNW+5rQ92pxl~`)gM(bkqb`LW=*xO= zf#4%V#j33f4X?;r$^usg^sO)J!Cfxpr6|SFuk~O}tCd+2rCh2n>%lrZ_U9~fDfB>J z)`KZ_@XuM{Qs{xcY!1$MDQlvXtMz3)I0i~KLbo;tc}wBA-DYb`F;uIROZ8A8 zovV!==*xPr@1@pjL$Njo`m!E;j>w00481DlYJFJ`d?U*u)OyS6?x^)j!ohf^DWoqc zBHGL0x#bXJ*6x$^HR+EmOL%#!^EcL-kzli|!jJ@OC7>Z>(`$u!$4pApjY80ODxu&s z(oUU4XSF}KutgZ_h`m^DxccZ{ME&efNY#(aH5%$SSO=>E>xbA(hWm36Bq}KPLYqVE zkQVL5&D~zqzAKPUe}mGbzHa-j+L5awo1R>yNeM~QdkI+Y<_RHqP4VD*Vj_C78-6)i z!0Kqzk!3b9|8z)1XF!5dg)`t_RazHkF7_oyurEQ!-&lPqpVENDzcoaSb&Rq{2iI^_ zRCfeN)<99ss;XE%c^1sTCA=v!CrQoe9o=KPP4LkIu$V|H+Z%(52^slE5yicKZ%+3v za-vQSFcRd@!}*6oDxpXFy>h& zXLytWC;bE5i(cNuOsA?~3AGpLtBVP%WNUDUT#ISjctOax-5(OnJuvlGqJvwh%I+s3 zqotxCc4p>-D?l7Y^{rjZOn-uPWRVt?EPDyXlm5AtDP2eh-;&aez6eFM*|SNAMAJG^ z7d_Pduy0<$VL$VvuH$jZ)Qu1OhJD;2yr>zZ5I(z&+acVGJ|X}z!T|8RJt(0y9u3qp zaJ!xRXeD9Ct=_80SoWX9NXDvAL3UK9sc2W;mJOy+Hj3xqmG+g8bTxe<;eHmz9}9M5 zk04xaVZ5kp=*er1mdOJwywiMye(XVA>aI@j6>qtCU4;@5uEw4TeieyUg9qtpv3yl6 zKaECUqqVFr$#FNCdbG8yu;jQs(uY~g3h&%7578Kdkj}-b^nSxyE?!fiIwCnPmzGYB z8ysq@gAlB1KhfTb`=a*jtEfE-7qw^Mot^DmU6rM318eW43Z+Etfz`tH-UtK@8@DHe z+-`jKRn(q^i`ujB&hCQQT`hlQ?JcQLO4J@Arm(%S|GPaslo_n~T%a$l+$K{sfBh`1 zmFs~`C|1(KJ4txS%DuqKb)GLUfa6!sZH8lA$yU7s_0?<0F0isIn- z{@P-otR2HlP0Dn(GWkuYT}jfJKvLBNC15C{ew-pFa2dk=KrB~AWZWM!L6MWld3@D` zSgsR*6$YElif~{~n3TZ%)1+8#E%8a;D6JGCCnX1lltSUL1i!h>tT0y;xedStcpiLQ zI1do(=y3VeAf|Xf2umbub0UIJ{bLd&l~O2pfB@($!eTlI&j`+BfW`Y)$J#PZ>5zw+ z{Q+og&Iw&;?Z*o@Mr&tq*Boy>3(fQFpo?WwF*bb*j&#x=ob5i;h7t|LBFruc)^*L5UW!NqVpI!yYi4+Zn}$gZd- z$XuesCCePLhz_&Hvj5>`Hbi!)eM@HPFcB97E}$)r8+Sz z_r1(eP>WbKS%)Iy4bWdWlMQC^cccB2sM|7@tsp*5dij5+=O1`c@Xq_G)(HTxLG+Nx zn%FP%E6(o{pVtuQ#OKc->$GgUGo75##p3gi=7^4r#OJw%Kv3|>Mey|ndxqSJx*Nxf zjoj9usm-s|M_V74?^l|k_h6-J<}tZQw2N%h zIijal?4P~!O9HA<@aIQZ6b1`!DvMS2tx9Y2ePjshBG_Us-V!AAgd}2 zJJhu`Gh+yK0qzuMk3zvg1PYtUB=4nj!p-zEz!@dE>mp0P>M=*geUV{d(Uh31`-J+?a&y2l6VSao1M_Z^(6s$}$UODEoo#g4bD9 zi1BbgN>H1bB+i~P#>+fH84C9cFv{R24U}d&7H-nAPelzh)dv`n>4yJObuy!|1ji)7 zN4oY<^;&@NuG<(A_Ja@?eI2iL#y zfa2YtK=7k-UrH6N2Zu($x5{NsbSo+@#=%D9zP5bTaBYR<3?>@L-t6uoB}Eb&m-;V%bL( z>piMKa939j4g7{#mg8Qlzyg7|)@mnEmwQ1j9n&JiooGYstX=r z5^YNF)`x$@gjC%ibjNNW6if_PY3pzj>toqntr5UuyRg?x{)J5b*m1FJlk32^;4r00 z*u(-Fd4RDmS!+on|LMK7hl`_R0eDL z2%#lGT0=kHJz5%jWfdQ(x}7jIWib^&n!ool6$f%T6CTs}ZX}?i`YEKW#T3HzBt&d)B#QP_P} z=yZ;j;5ee_dc8nnfb?n%^JEU9*9%1_>V_>dI1(Rb6-Uxuq6kdt@ot3Rvsb$$-N;%g zDy%m}ojA~ud4*D0S0S=Y>qTJ>Lrr9^3MM+xfy3tRiDpksot-^=ML0gD%o(n6BWf!_q()S~&5(Fn- zkPN#rL~tjQA<*@**7H-~*FgSIrXEf52}yxyu7*(X0cln{8@*qVpy>Os>>EmVhuf`j z!?J0EfLp2*3QiLccqW(1-ps4S;GTb5ePc9`CKFmY0qqiCmadGk!MMw$!W7HOVYJ;n;uV43*!s~Cg@lc2<#D+B58sxrb^mk?&6Xr zlwna?l3dh)rjnj(lLegAv&=z9lZ<%{VqiE+!jRYS^1;Ea25zt#c zVyXb%_sf`uz0U@$TPHWE&bX~-6Gy1k+2HDIvN{JTI+oqn)w#gnG?Y3gi=@ukD_n-R zbhFz!d9tdVWYtbqwFlGH5mv1$OX_3^FC(dSW)T?bqg zE&-~L=|)SE?dLLG=rY~FN|j{l5UlFU=5cq+z-gnHU^{DPj^$&CRgDClQTEK+^kp^l zuC{otiFu-+WVFFJw?raI>OtPyzHbm+Zjjqc0gj^J=l8;rJ#~NWJ-SRyPEwPqu9wIi z?}inM%n*qfHJD4aDS$pvcSIcgMfqTVHX@j?J~#uN@wjKg;@~pqH0D;6>0ihcQB&C~ z2z0cj>bNS){*HpdQ1GyIYI{@&6aIy4r=!8=Pt#6ND&=y=DYog>jtBPiT(qD|d;Bpb2jWB-WxHHpk_k zq5Ap4e?|%XMSz1=7ZJfrUlbbcS={Ik?~=GuMbym}>*n;?>gJ;=;Yddvdv=|I&v9ZI zi0)Q`d#%psn)`couMne!!3}BeGsFU4F`HV2m8MWjDS3sV?}p3Z&rJq`(WUbe?TxP6knFeW+Y^RZ z+^sb=uc0y_&?`hE3n+8gpcDdq!1Yg!m1M5#YL?fc@DXHqMXTKEZg)`SpcM0<-DJGj zZZ?SEW`~f}N=ar6n^<4A=WASs8^xEkx|<-nqw<=n=t3x?!F^4Gk; zo=;pJrIln}?W!P_eb{yPH?Akz6Iv4^_;WMQ(hS)RkIp?%`mUOz2SlocS3t4ctgcL! z+m|+e$GND%okxTEJBW?X zpGB}x{Q1I7i+FVHAT<)p?RHwX^~?ol$`nYjiyOM8P9s~wAG>jk)*_eI?s_@!#Z=Zo zj$WfNu0I_u^Tk%<5l~mQa;dXi2eqoc`gTtQ{A+*gV{)xp-I#L$cZcPuvnkSqfK z+`AL3OSi%Q2NSGvaX;qME|&X-84Ef{GCW`ucJ^q-5KQ=&8dOeywl#P*ixvEuoJIEo zk$oRCN!G7mEqa1%rd-HV$f@NgPdjey<@ZxTS$d@ZmuBY9AG-0&-8%Pj_xI7u-P&`? zGQXAu53~rmv|rKfwNqoUJUbb_CBsdSx4|?#GvEzb*pR+tylpCI=@MWYy~zfMVtk+K z-EH(*cIyoi{^$jD=ssB*&e@mfY|2knT1NLo^z)y)G9JSaxOd_{>2}L_Bw7R1=w9+Z zSCp~ZW$cl@2rGltmdVum^M5JIw57|`GkqkM74(WVk{smEDa!RZEzxGL^!^R=ISfmN z`=e34?s`Bxq$uyxmep_WC^IP}aM&-qq!=IUQV=<QUs7UO6Ai4X@{sZsdXHSq_31xd^$;e&NrdA#U-ZJee?`01~BUu!R4 zZ1!aw9uF;Vc5CZP_F<#n>%E6~PudojomMRl&ga?{gHAkek7u~1K7i4}R0mENYj>@h z);rNM<6fXc>)LTQR+HZYhUC;2?RIhJ%JB=be?9%1qz<5C3$JF!liNV0dT@z0=mrokCVkps+rFS!>>(uEs8K zurpwge>5=Lf4M^l1e=hDnK#o67-2r}(@^UADfkP@3M&rB1=B!X8_9b|;lvEe3!ej+ zS2by>$!gzb%<sITh zgbKC(q@+Tv=`me3YI_!HTx!{(8q+mheY~!?wuh7rA$4IynRg2MvR&qCkz|)lJ}6%L zQ!LwGv*h<+?9iOp!;mkuW|B*ssCbi1L;i6Xo4BVenGa>EXE<*di~L4nLkvC69>XfT z{6@af@z=Pwj(!AputF#qhW4A&e~;r(JYTvuPL8}D9S@OXUbC(d4pla~&_5|pZ4z0x zhI$&=S5DQN%IP}zjp)9Gu<)7Jj)T3AgABpoZhpF*FJok^OQr(~rn>%xu#4x!q8kz( zmU+H|%8q3_%7_gOcu83740wH`)zg6#n~A9qj7r#BU&#Mug!~Z|4gU4oM>R_wdW*Lm zn20a@qDSrZ?y>meD&F#<0(jzrlevS4q<=P?3{8H|+?ub?)*&UODgRkFu+B8r7M>N4 zzIwgL*ERb5nDsfs!LkYi6&W^0{1jF}-0bn@9(1 ztcYHJwP%(@_W|9t8&ldi1rSva9f)2v9=LETy(N3P_=E!VnLTXy+FDO!tyemi=9seE z$TrCRw#?magCzY!L-QaBo?9n*Zk=7kcsL|^C>^|J2SqWxnPNM*^8~iwdjpnDQaJRD zw@sonL&fluWG^$W(P;fM+?-%BA+n;f%XgX+MVPUVSZ=-6LHBH|?<&5rW$4z|&0)v4 zUHMUbrB=(#GA|@^%9qE_0@Tdwmbo&@%xYh2HIH3Eo(LROixTmCB6$R zCUndAN|dozdeA&AeacUM%P@K1YwOQ(oe1G+e+tU*1DvD|aRGrdIrt*}*V0vGnMJb_ z{w9t*+(gOQZ?xk=0LYxF#lP@WTli^XqeoUDRhXq4L;PF1w)pah(%K42>tiUbr$uQs zdN&%z^zQ2-wRVhqH!3ZG(7?P`y{L&2fp8=Tx^`stuf!z1Z@G|$K#-|)Z*fOL`mfk= zuir0OlKF&Dv)KNS@&s?FbA8w!m?1)bPf|4#0CNxl3-ED?3hqB?p(foo`cB z3WG;#JOu)X<=VvnT~2=09|GQWkaI>^fCGxRh@DlxEt(|ASwe1?j8vO$m%IaS)_s@! zotOsyDcdDjE?VpGxagkYf6o{s*Is zXw3o|0*)Kqb^)os!=&ITDjF48HDA3t2ixVTELuUs5ZKG((d!_2#j z1DNk~aoii|QMX$=lkNJe_g@a* z2S-s_=9Zv72lih$3~N;w3-aEZHx3U@`D^jd5cFnFiw~&WKd7nE?=$~SQO1LyjNRGU z==FL~Q4%G{Hbg3XN?r3NSJ9l`3#M(8XmL74B8>y=rOq*D(~6GQ zy0wg}rcS^2P+Dm_r?kPFp>_89A4C}GO;#FPAx$po|3ca{>pBH$JouOR4=LAyW zE;IU2CZ=mw%eqbooj)+{@bhav^OrAl^tK)bMY}haD+N9rVE&+Z2bf>;*+u!_E(@TX z7ozT(4I$>9xELEbbKD92ELjqDW`hXv9f6c@=81yu5RDk=Glq3adMkrzBw}u)O!WMI zfMw(gA=sZj%6|p+n1ex#v)jbg*pl_y>JDcur_sCArf%R*vyGSGk-Ijoe?=32y6z+y4ex?YDN9aT-~_) z;!+e=D740dGGN#G^rUXA@i>MFl%FhE<2fE{JO^FrxTceB*u;oy0vRb6KUm{=p)?rA zw&a+`_c^$FfDS8OGV*v_EEp#awwj%3pTKvONxtJwDo{8typ*5Hcx?WBsp_wkJ&}sw zaH>uDW&Ow0Kk&Afhn38WC*-lMW@Uah5Ekr2 zYUHTCGM0NCAeXLAcAnb;7auFWqKihz{Tnb1?j;vc&!#G&%8VQK&s0+KQ`i53Xbun(gyCi5NOFU-aObA zY$9O`51(x7%MTdMF?1-@sjdyW@i!NA@i%s?;f1Ea*__Bh;P$uE7%_8sNg})U_aO>7 zwx)=G5NA`n{eRs4-i0hU+O|;KNbt>xN&2UOqdtpekEg+uY_TR&cmC) zb*@{p_zKZZj?XUZTo))5TJbxtqUN2JFWh0c)%o4n8o3hc#?~CFh={G(hF1TZt)a_e zw^IIrRgSGWu!@)SW0-ugH9M0OYyb-Kqn~r|VuW>p;+6e<*Y}=$g?;~#{9RMpp^&3? z8!^&HLP}E+$u^&Zrz`Z#m`PAp*!OIz0$3iRkaJjVz1bH9y~> zE-=K|+e3!cSo7t^+|xa-m6@Dn-MFX4re_dxPxonA{x9z7E3Bs!xF_S6{}=a!{g)#C z=?Xe2-pSZ8W1N0rn3ysZksS#@pZ$_Pg(B5Xt(P%QlE3i8NrZL8VO?F6(I^ufUSl)S zGM?gy>gP=JG(Vvz=Yy`w0{=9`QPhqXJG3ZctIOCEf77xpi;eYc_ z*RqN@VA9dl$SxgHvoN$(Hyit52KMW}}3urN=y4FoFi=|ORtIYVFARm1oF(8~w9A$2DKlxnoMU0cI_C}1; ze{9(Xx%GAVAKy6tTbf}pS}gNo%RkaBvs;%-H_rdpC_jsRoxc4u++sU(m?OLA&s-34 zPiJu*>ekyaaKGCq-{F?8S9*vsPslhO^Hdmb1fSo2)@{6aS>PDPc2C4REjG$lsn4xe^HcXN>Yfn$gGw`$F8hyQ;tPpgE$#XPOH0~Y2<26&8l zTE)p2GEWWB`iK0}a&AJfK+K_?!a|!_n@fnefH+09lS;N3tpn?v$^!qD^7jFyu7qjY zrz)0PB8p()sPGj@mwsyqcLn~b`@6=`KxQ;QvD{q+0`&wQ6{(o^!gPAEqz-x`5B`Kr0Rx4%6tK` zHgBIJLmkfn_!CJ>2e!%Yo*3@O)^V@ytm#!gec)Hu}BZy-s{i6MRn2u!q-Yv0_BAU7=3+ zq#@8WE(bTY-R*f^0y+0Tn4ITr*I_*Jb!(CJ#Ewci787$vFl&DQ@wCu30v5+uS+Dmf z!cz0qOeFlLtU>m~RQPf(IEpSDf&rQ#fAp%2SRBd2Wl==jjp3|g0Il$I1fN9%Pd5i* zMYN7W%)~fXT&d z0QQt=-mx-|(R{adW)s1xG*~;6VK+inrrO$JQ5G@O|C5zDt(cYRpq(yWL3kKm0pn^S zy^DE;xzil4@Dro&;uVCZ;T6a)UO}XJrQ;QT2d_}f#iYA&F_Xf|mN8#uLr(R;#V8kb zI4(x)hBGT#x3bgA@n6QE3@jz(8TOYk zC-dZ2I{yo{W`ZXzSx&{?l_~VE>1Y1!*B$pz#!e1K@RNTbjM;;32B-3)MTWI%)J+^` zasEy+Xxd>2h(lP(VxWRMjyVptqJ}Phrkvi2pJ{%~%~aip?)*%g4h05D6Byyy>Dt(Ca}tn7Er-H-92o3ObOkjv9-)+`%vL6||nF>$Fu3-#3 z@rKZ9rafk89XN(CX!SvL&<%z$n0-Z4XxUF2tzbB_FClZyBEy;G1jrj1!Ne}BBHZYc z-kYZC(Y=Oq1mXLaDa#W%4|c^9h8LF38a=#D?H{3vpSq zE2Z_I)VYKbZ5JYyS?vrxc4ZH=O4(z{5b;w9?*jljvvXmw_SM9Rl!b>4MyO41S&{xq z%D>xD05Fd44i{L7BoZCmM&lR&u0x=KvuX~gIBTEN$!oqzf`9RK>a3*q3ec6=T6Q|` z1OGSJW1VE}S7~k{J_rD5w0p)wADqfpa1$-)jcB6w$8>d~w(;kR^xryGg*G+cO^;Gl zFC<#0^kdi!UlSZ%#dNL|ytF^CZu~y-FL@ zhC7rtWuh|~Yh0$g+vP>OZPY^=NVMBP;nPbsIo-E%uD`I&G#U#|(@#b}pYv0Y-^#S5 zS$CEKkP+M z3P7Y-R@@AC$I$28RLBD2%V8PLw5~F`U&+U!GEZ2U;go4Wm@G4i?*4@nv8zyeeEy?5 z!$w-Iz)=(RQG;258`i{N+QIJ0wCAa zk7UQeB{&<&f4g-h&>-gXWg`6Tze$Ym`9!>KP_{OQ3a6ZABaEL?Uy$AJ+GC= zFDyyMZ;02n$7UX6m;h3v_N&Z?Ne{EjtMh~Uy64*~;{w&;6{+!C;UlJo4U?=LQ68J| zywy9jVnp46Fd)1qEP+;O@Ngz(t9-6@&iK()J<%U6Ggl%Cf8dqF{GNCK`xaxI%-U#cadJhn?m&zbN_&&h4feLbGJHp!c`cYl z=~*d^)u!qWd_Fxi*;dc|wZ~@so%j)LyNX3FIlPvny>Z2|NxXJltW5~?@Y?jwWoi63 zGW*J&B~CSDRtlb+>w;BS>mi!+o+sO}+}Oi}O1{j$ap7jn9@a3w=H6}3%oI*%s1$4# zA6b1I*XEJGo^JSFkZo3ysq<4%QO85w^r39Aa-(Q0SU~D5lklz{%95iWJl5LV(y_-| zX13(@iED4v|Jk0cqN64!sXkku+&I;*cMpW^89ElU6qO=MqweBAZDDe9P#DNT0=BK+ zSvSl-_?<-UPw5efwxgKGCDVYXcY=FBZIIaSa3=ngJ|NXLq6e`_nBf_1VG1nFPwAbk z#W3YOOF8&;5;9-r&)-wSbldI<4cQ;K@^SHR&(9nCwQcoP6L{y-%}&v9@+EwBg82~N zY9kLTNq-k-1ZWqo>#at!Q_TA(IGmRm)U3dV^eZ~QBGba(9~t-F=Emad6+n&XDMbEQ zS`{fdCc7a0M|pJ}7uzezYwEqOt!gGyY_D6)@M&zXyQ*ee_(8LH8QbfLss$EyHf^~& z$RBhQheh}v_yp}|5J>h85J>YSRFsu{PLcN2@wTjKw6p)A8_O%GMr3WJOhA{{yh+^l z)fNZF&u?>h7uMQ|O6AsugKK$y&P1@Xy^zkGXxm7>vd)3D|E0P@9(YEA;+WNS&YxGo zOH{T=7|lN+k3@0}-lFgog+|aN_yOKI>7Rv*hUy-_d&?COb3 zE?PS6gKcuLfvigXDV(I5pEeh=A#dTLOr^Ac#ne#@tdk~UGj)L<_xIg!2_9jQuz7vI zl&+&18uTN(!Wvp_(Te-%@u+bLR}$Xa!4V+6 zLXolW;Yv#DU^An|$epLMrXops@yk}@2~mw=qTg|GUr^Jjvx2(oyWyKq!7=j(6fKLK z`#m`u`TJUOnTgud^GHsJY7%}6# zlYC`xx86TXdenQT9;Z@E$rOzx|JXbYBQv#l2p?V@4dFSmhDdfGn*zIl1;BN_zJQNl zPg0x<#wY%vUYn~%H^s+V`I1so{dJZRRv7Hrd1$7AgC68D8g~9;?mYYx%?B4#sVksY z#^C{)JDAwuwL$O~C6p@c?{Lx6P-d5Fr3`R_^97qGe|PeXWZT)Lk!N&tKwH0t<$2`K z{gOTYT#5elW{K9%*SU)7nMkeboXFK;qIPlYa*c(Je(y{e+qO$^6Z%W_LOEBIO&>5j zv{tXbo-_(@YFXb&>Dc9>Cx^6M(AltXRgb}K`y7Nv^Odu=xE-iGygV*{5+*M|PKaKt zIWO>V)h=e{Lzb=4?|n5b;g9KZ{%|CfLsj7ab|DhO-jj(MQu||U<|sQo79)X{k^&9@ zMW|!X_C>6o7$9(~B9?KvfTkS~=5NwFrEKks_30xxCGn?t0x0_P#L^8M zGPrjf%RD!{=Du=7fC0`xUg!Qc~jH zSQsh^2tv<;=CG@X9%=N)_G_#gyUzs&4e{PTtgZ38vP9|nM(;2rmq(X{&TE79pquDE zLf6WHsCKuWNTlFy&Z$UvBgzBG**DT3!aG!XP(k(xKQkv4XW(8^bQqT)5@qE7@qw8` z2}WAJ#^U!PoH3;jFpicDkIDpiE&)vGdE26Eg|l28#|ay@?)&ICmOMYv)zxuF)W6;> z#G9DnLgu*vHY4FTR5Z37B?QP@b=D1a=kg)m5#=ebp~94o?j*9&Z>ma$aH7d&vLOS# zp8D9n>eSeoFZ2J+*f#NU400S@-fpWn1cxW)oTSm4RMnu9v28;2(#g(K0X@# z{^xSk4nY=Zgh0OPa41*Clk-)J-zQ0Gd#_>q3b@c9i?tsViDevW4*9`{2tRx~=-wdMJRV|vmO za%M?7%a!%hKBtuApCM~|uO%0cqFq{UU0e}t%L26ytj`Q9fy^2}o2>&6Ai#2F4h5_E z{onbM9EWi$F_q?VNmgkR>$rz!Lw{iHL-68q0+sZ7Jw(RNKKm1s^mnbY1uUnEq(9In z#l)`(bmUum9dPjxC8Y^`r^V~~RPr77`kYRV^LaMXr<}0Yo@gH|dKX4}a9Kn9;PQID z-MxJ*chwGd5bLJ67|}W-`LFY%w}*CKRlGeK8%C;vd9q+ovZoG$ek(y=jFo@0Xb0V4M)B6&MYTx9q_oEzy`~B-lh)-M! z4KnZ)mFaT$SaFnz*n!>AgOrZ8#FW=R2x~wf9uDB|P$K ztbP5w z9_DQ~zkM#^`_;F&6Fc|w!LTC>yj~xjJIu{%&6^$fbA_}s^VnG1H^!e!c4?TWEoRDs zZ3l0Qtoc$Mm%(+EMF;T>Pg(mc;!o_#^-M&g-|J?J>ov>bz9ufvymg~T3-bB6JeG5o zwR~+a2H~ROaZJeHpaJs_J3?k&?vSK^sws5l>bD2>T7NFh?2cft0uz0Zo11cEEmHZU zwKS_TE)(3M}FO_WTMu3tF>bn=(Xk}M6b2y(fa1J%2rjf&#~f!DyOl% zv1{$_tKgL7H|XccmQugcAv>X1{&EB2To-PLUA?doCK*#Y*yVf?c#1v6rB}^LCY+t5 zp?IrksdHAfHQ^pWZ$Tg8SkjuUscmbPKq=WaT|NzxZL`dELE8=0My+uEx7!Ql(oK7^ zxt}m!2}y5GT<1>PoLQ7?`J$v=1DxXs<6n@?Om5OjOsDqvPBQE>F5dES$pY=>IL;Fm zmJSv2YMR8m(tDN1yJ0qe@(V`dTihG!=(DTXLYko|R|C^^7}_UCEH}AM_|dsBF)!Z5 zFqQD;HPIirU$1xSUf$h8_j=t!npCCoyZ%|vz}sylehqZ*N`h zTqf|;$;Q1xt`?J3DSyTinoVNeuHcG-i`3W-l;vRHyz)m@CQH9fcxLyaZJ}9GJA&g3R_}3iUbt9Z> z?iJ}{ozGXOZ!(e3F73V(2>p+@EO2ONv0ZoFASIK=x_#_#EVnR=Qy`XnQ4Lfq@+r}OM35Px?QJwEE*auM{!{r#1Y?Gy{;_pE9J{F|hqz)MKIM#f*fcI3mt|B=GfX{IoB zqEnbUw!0Eg6%!e1vNqyev7zRzhL%sIb~(K5;N#+LJ#9t2?d=ao47}_F#7{lozOWrX z2A*XVsNfH=>^ZU?u8xVw=j1g7$(EnwDFzQB04eNJzZ77TLchG4`#we0^?iGy-jKW~ z1n=+rlAi>^`Yt5S6yUGhlD<7B&uULszI#te$4*83Py%0_!VlHtOz)AZ?Z~W5db<~5 z?N#>p^AT_T;vnK$mYRTrh@NzSfP;wlO$Y54 z2NA~zX?Sarr7yyhDnT9rv#%P^^__EusAR+j`_pE8Jfh~7^{)00nQa2D_WsmCz}3Ew zwY%QcelM6P<$aed#RKTS`U7gMf28(nRJ#}nm5BSjj~obc9;$;-lh0 zoM{~h2cbuvC?CX2U*{fA5N(49tQkm3ho1VbKix)?KBZyq09GMBehLkRZt6Cmxk|u| z=My2OmQFXGo2(1wr!IDRo)nv{_Vl)K`Mlf8#$jx=$jQYZc03JXMd%J&l^0p5q&T#> zd;l~R0vdEQwt%z?FP4!!bDhlP^5X~T%;3J&lq~a*=Bc_ft13`Wl}32>T}9M#j^KX2 z^+&{0FNQh#rR#`5t?bD#2cF%C;P&Y*BFyTr$_+?wuZ!h4qJymOa{kN{9H~-3#+(KC zEy$b|*Lf41Niy*DI0A4R-d)h3I7fhumG}(IS&^tcj8QbI8h1Tj7{%ADa@Q!NyQ0R) zd=RLuxUuv#iQ4?Lg5_A_@l};vM^^^ladlCA-~J!Y58(zq^05be2@eL14nRKgLg`>o zhe)#~)bNGS#~kh_zvgY*eIi68uWE3jy~+z{nkPQ zA8pczJLTSRS`*v-6Z*q_L8TC%Cp(@I+5;Kl6q%J;5cBqSvz4YSY#VPxrZ&a>v&Y1? zISO=k)VO&2&~Xe>_3|QEB%e-z?P<_7Q@-W=*9-onmIy5=W=VRKUD&XoQJKAitPv`N zI7e&9=?*{6S9n(4!)JH2I2XJd>JD?o+E}wNdb_+&BH328(vB;yr~Q@5N%pIz935QY z#-zW$?C!!Rtc2#=KbAX;`ZeP`HaQ#t5XO5s0IJnlVh9DlAw&23HnS1H4U3&!xkh!c zb)LwblJu{29F^pEhQW%+`rf~1_qNxU&pw)$x8B`)KMozG^%Nbtfb9C0-)uotB-0oy zt?6bzmGecX(7ah9MQ)o$dyewUeMmk86|auaBEP9czDSFF7tvZ^PBfL{8Z_c$bRg1D zNq+iXA~`d62^OQ%DYK<$I40pso-@gNDz*qAl9;V$I0Wo4RoVH?i*Exi&ip{PX^P0# zaXS?eqn`rc^F%s|+#Gp0gr)qs^GZ431dL_2OxZMdYLe|BIjCAg;O3Rv>IgX_ zzQigtZ^W0BWVXPvG5uQ2rL8IIPNk8QkBl>qYVKy(d1j82qSjJ!f(94kUOMg=%dL@Z zrc#oN&Zm?=bOQ93SQinO*%O5VOP3{~zjDpe8~bqoZuxPuR=G^(cuo7eWy5SU)O)bV z9DiE5=rgUo7`%$02P$U?|NKeR@7%eqO;;yNQN{T-ma9_TE!4e{e2@H1^_T zPUzk~{T&x?StSz7h~YheI2^~X9B;@UPh)J?nzg}xMDx_}T6z%Yu2&j&G#i{vbdohN zcP=sK06y4*7K-T6L6eO#xl~667QB`i3dzl--u%pgXm0Eaa__otM)R;d-f~e{`H@Ee zY*O2lEBAglZxmtXUnb&J6jxdBAJh=RTA+i-m)!e?T2i*t#({GH18uW$!9pc4mt|)R zI;i}vz?h>QOR+1}7EMG<#M<_HuoQ7~<>M}Rn=fGo z!4vBvcnU;f;bWfl`pT^rs&-3Qk>EJ`63TB`DuLaEofU$1 zbIxnfev-zY=BF_Jl>e~A2Ec`w>xAyFg2h@i=|!(K@8j4GKaMm>xj$+)tyh_14{twD+AM$js6)C zp_Slj!jdvT^ESUDw&3{RX+Z7hHRW%8>4(nw#s&ZN7L#7ck1cyml8bWyi2RwgpolM7 z0MP+6)?o7#V?UK~e;PI`^1o{MxieMzL&Dq4P|VhhKIQ$H73dJ)H?$vCrr9+uw_F8` zhlC5xzHrOrvT=V_U(TY&nzi%mPr=T7iA;=zS{cW)nzs63cb+!`?@73z{7y$ZyVKi~ zrPyov9#j?VLuCFhcXBP)q)s!Icz$w1kn}UR#c#>9DRZ5BMITTYN&g%ZD+YHF!K5}Z z-NMzupTV#p0$Rbz99+cov-eq!uWUIw3A39E%OfmGxKO^Yk<6kx>^KbWXAx4Iz-SJ` zNo?pRvh&Y0e?md3ls+SZ#+nZz2$c--nS<^2Hhbb;+=a>vjUxYchr7}p!A6+3`^wWS zvLuXrjsZkFxH6qUWpR18mNNH-KEGpJ&ebeHA#YxJz$HdG+;7kc8-hS7g3=^vp+J0a zBjbsW7rBoP8x%N{eZqS!Ub>Xt#P@n5|3p>S9@`Q460xC?w$qm(A|a3B14E=-hBz@} z{_&I6Q?t`HTFKbZ)qq-mG2v~Rq;S0iF^4|NK(t(q0FP6a6m3N{KwwzS#G-2MrW&m( z)lgi@lKGz>39Be|RltdGSE4HV6{_f0RK<9!LfVDzb zhr)Ooz5nEwpV&2|SCpBzP>J!}bN2k9u&X9UwM`;}iEUqmn&wGD=F#~0mBG2d6?{v1 zGp9c>*i*Q`9;Kl6tQ0|OCRKi+2d<5N4*mSF}P z!H!V9)UhK~&vlA;inC=O9GVGX%hRHCRMITtFT$*JqSYP;QvYv$4aj?3F+m{ZuWxn| z$1^zEMKF(x`wd36kzhY^bs1H`+A2ghR$@SG@4{17 z2dfBoJ>7U4G|JYq3381;J55(bMU79tc~6a|pr)RC8AKi2Lcwm2kM!1zE3-vo^~mW$ zwAij_X8yf_e{nywm?^j?tSBZjObj-DVj0q^U$_aD(S z6Jj$TB0s_x-p+`q!HqE9;=Oy>PoiXmdBz04Fy~4CUPtP-<6XPtWFE9xRy^6W)u#*_>GUonBk-I*WRG3|;n}Hpzf96Pz<=JZDDq?IGppduA|;UI zDdpcL*?Y~}gg>P+|8lLw|A!$cgD5z44?9x_B-=6S3D~Lq4=~>|f zSm6(JFkfa>xKnvoYS3w*leycmT>D`xi`z(GvK>&YTjf}2w70nPt<;&uJ?Xy{ibwJE(Pvo%bdcf!t#2I5)XN3)OZQiEWq?_c@4dq zw}i@Z^l@D~9IebiXy0TW5VvJK#&A&t{>2|wC;yLDcKDP-yx?$QYlK?GY)JZo9odKhOE*9TW`=OYrix=VtdWDGpPfj{uAi*)9re=~1^&iq|r0pmUz*(;GJ z?;Xo2SJD}KrZ>`@3RY5mFr4^csD2vs^PqmNuH>gpKhybvgl|M{e6-Wx4eh6*h3JG@ z$oEEq#o~VNSEeVRRyM?+0s8fCTAU|9m+x(fegAU?nhR~GqaXQ`Q(5|#L|v^5rLweU zps6hV=v0;lGqNG*9X2fd8kHsP)cu1$l*&>P=R#6D&wfINq*GZkDW^1jBpjCZ8tNg- zY02;XHou92#?p&uEcJhpsD|3tV>4w=H0kA0Os_~!LTXV?#>xd-;JT)Lh|O!lgG3zC zkNQdyOMzy1m4tUzH5LL;NooSiA-*}28+UYf5w-L^kxz7Z*JIY4w=|c4p4dgP9T35A zH+2Fm4-`rNgUOWi&Nii_q8si4f7Iw7jy}@i`&{swA>ONpwT=E5eWafnJ-LD%i$0R* zgOZ>x(;Dd$`KR#!U>yJ13_(vzDAq4Wp1trg`Zdt056S484)xq5-6bxT6esrv>mP63 z_nd>JKD5t2P(>1AI*zIkeU)iKl5G?IA7$?XA4PTd|7S^}!GaSMY_uq`MVlyIQlSz7 zVPOL^u!|_5c&EiuE7)4y1ynBLCc<=FpigVnwkl6=wzaM8V{1he5jh*Zkj~GrOAv?eqNpzFv~qGiT2Ad%ov;|EBH0z(>+BjUlk%b8m${y0w`s5cc|m zNO@V8zCcd$1MDPUJ%mo98Os#s$Hr3YoG^c508DmWZeek{jK|DN%W@9yv@E`Sz1rII zW9HV-PkIZCV}we>-jq_VM(meHB1vGoWlj^rRHX(3teAT>_Dh_Yrzi}2_sV`L027bsN9?l6WcQ)Fk%WfN=yWJ9I5%Q9hrNSNyFt*fX)flJ04&Ld6m9 zoZpU2CIu@_4!DsYjCE%ZA(;UMOu?|tchEBu`|_B3%os9( zrfvZ#V~X@{wd|R0)(@@83+BTMmQpIFGg&RXUQRiY2Z!JA z6OF^lm>2bji6bo?#B&gzg><|$SA&UT)EzLLud-%L!!TpI0y8F`D|3JJ{BA$s6(Ch& z=gpX$hC@XdWUg~ko;DrpC}YQj^%G3dNDP@qV#u^Qe*02m$Mmpa{U)JSk8#LHl$iW2 z5Z%o3*!NhRjT|&zfq=2HshMc3YzFhkntz87@00u!^QM#=aCQ5<-Zu;EVLm`ZZm^Hv z+jKFd+;kXq`}{3e>ubEoApKNl>+h$tb?WRKu1v4^Q7VO(=(Mu5b!+(>K`DiOIOSCT z4b^3T)Y9$mdeZWDKT8Vn@94c-e3d@ul-XDxOlm(_acc`oAF@5evK$!}$a`x%!Rc!?;y!CiJAp6@^`YLgP1x-$g`Qh@=El?xc#NrH z7GI?nF*%QV#pO&z^dOe>vZHTrMxS0|OKw(NXy(go9-@<_n2;w{#F^(uijn`naa`EPQvmMqu>5%loX&YXexcb5be@r3#|#CujYvEggX z7+o4Fk3$!J#zKxQKt_d;qpfI*wO25U8@K--+5k!)f5?taZC($-@% zR8{Z4Y!38z_NTVzQ;hw-_!%_MJk#R`LdU_pXr&WR`NOH7U8_1d=lYjY5FUeL6qaa~ zRNCjXwCrucS=u#kFo`Y=T&9V$3{}^DK8USUD zKC@8r`JBJl5zeTwl!td6iCX*0@zS~0N>XBbKN0ILfqU&=`3=di^}En`K_X;y)lVTR zu(2&{EsuQif6~XCI%qF3wSH!OA%> zo_JaX@jAoL(-Z^QV9njbp|A07c&IBb(RM@nEUWG`DBZ9(`5|tjw+J|Tmfi7H$<`Y7 zo)xX$X4N(E0WHD!{X}iJAM5K*1av;j>G)~P-R#f^DrzFg1r^b-zra(}eK+hyA1Wd4 z5-s|+yGp%9t2bM9zc&?k72EDwC#hX#qw9THdH<-}Xn!49#s2L^4 zt*?e7mANKmB9~@0U@?=A;FolVLCsgGZWN$DG~Le-eYP6NGtT2A`;orRn)_|qidMgh zR~`=xjuXw`{O7oYTF)DvYxR}{C#r7Q#vKfmmXq zYZUFZL!Ud0Qpp+ZzUyy(D-Q5C!ZEZ;OQx(6@N z+PmW}<^>Gm5?&}mc`Vg)clbp>iOYjII-$>G`8(2$rwQ32+k;HvL;t6$>=nOoq2LF+ z_6-9U#gnJO-m*}4KplSAoW5}o)T*X4T=UEECMg?s1=a{;nl`&H#L5Tl9d;%iKPIExFNq~FB_ps?6 z(FY;@BQ%1k{M{b}2&G}iK$z&no1_Rq(UA*&?lEN}A`a|P8a^24|BqR;K8>)r=^a(( zTB?2hG&Cl4J(^*c4v;Vl=5OagGxRp=S*PGlzST_=9guo&1Y5hls{Z*3 zrfd8`((4~N$=tAqyGp(pEAj8*T>HKFz`tMrJjFlw|LOi_3TVJ}i~MOK@TU z(i!;1vPI=w+s|KsZYMo;QLt6_n9g+^g)zIbzv*`-$hSD_t|$9HR5t>r^v{H;vdXl< zd>8e`W2e3s@8_0>F4ketsi@?IaSWD_&jh6~q4P#@&QO=t&NrnaIM5-EgIDZYD0g)HymlhAW;gfR_wry>0~QWU=y5mMhQp5X71;`p$rH)4=OJ0J-D9yvit z6h_+){ec$7bd;xpU2Qy8jQ}QhLtXFbKXQ(&MGai9;y%SXM9Hk5V=HaqFcVRH>|9UKd!mF zg+1C_-Y4V-nl#)SZAFj-s^(wTj5+8qz&b9IjP;&3~v~8dRTpH&u@YRiF5hs;j){!=18KM^Y8n=3_1K zX$-&{^DtyUn?bCyL+cp8)NdMVQdPUsRQoqXz!$4cdCS-_@AtpXO!M+6k{pBCoW^CE zesTi-l_y?JF~YJphgILca-<*Q%{MN{4W*< zTI4ByL{nX-*s!7vJBqIGx_60IZng)s5X^Jxk0E~JlMOZPVBl}NJseVdA|{M~HJq#n z#eXb9`1-c+6ZWPd@u>)9x-fsj>k|R+ULdS9;2qYzX&04-!4uYB+S{8M~rI~*Q z@auK^!Cjiip><|%zh@r)HQ(8jlh=j4LFF-T6f&%FWp=9jAiLrHqL_Ofw{Z8v3@%81um8cxZ|z={KaSRlAothm*}5-G2)-ywT+b{fW|uDEP?(y|fSB zz33KzG~=W0UQ=%Bx%X5=s;QC;P{Ez$wtE*}ABaaH{f3rKxg2tsqHKeQX+3E06Vne_ zRb0>nB;RR~e&Nz7V45{Hj#b&x1U|>3D{S|=a?X6Yi3assw%>8Dt1ymQEjuJc@CNK1 zgM{L}sCVYa-{eYe9AbnUQTKX2*%B{u-0NxM%niKrZ{c%>U6J`S3xa@f2vt@m65Qs` z=u@oUCcsEO!877sNC5ZDpQ+rtgkCywrLcVEE!`}h>_BD;Al*uhkbja|cDqeh^~S-0 zctsNMV1y|cI*oR}uh4VgvWm>ZjvHnPhm>dL3jZc|6LhBD_=+3e=3eB`#*AczrJF+l zl3Y;+tk<$~1wlR_T?2}&Ovd=c4f1v}^!Qbrg>qx+hqSF_6x3n!Q4%ex85&GfcGuC@D!? zYfl*P^`V4TXt`omEOj$iNUx&>Tc0d&&+J4g6D|q3u;mM6`6+wE%p=CTO(SKfv!bK} z+8PZJo@=KyKX9uJ_5+gAy$YxpAT*P}YI+3{;k`j?zBQ+bJ(n!4hC0^;r7hc^0~Cl$ zwcL7Qnf2@%qERagOhM+?8n2NY}TXtxhA||D_Qp(~WV?xwm?q?8y?Vi9n*F8Ly{WJMO>LeC1 zEbrr;*l zL?6@s`Lu5ur<3c6fnZY=y15bK@io>wNjM0!f!Pa)HtMd*JYy>bL}_Muc(Il(R{fSW ze}5*c&3{x80)AHoG_5a++) z8>091%(`#oj-=4Jc+q+Ld5DJI&z#ZDKQnj8qSbq5fa9U#g7cX>ifzuPO-?y%J#F{I z#A*|ABYU(lf8gus%Vdqo*}T!7(D{MEoXvw*%(^o51I}j8SIybH;0{VTP-WS(Y3@TE zbRF=_BjH7?9v7oIpw|4QnvV4}!1%s~KYu*?!^pwv{z!CovzyHU?WOjRBV`Zh50gz) zYD<5>z~QL$18wdK(d~R2eDY!NNw{UZad*QcpB4B9TEvW2psW0B8jCUvg8IhSCVr0A zDzjN!^3@j+fXqYbXf(V86{s^J=EzCHrCEfte)$r51uuL$$aHp)zp6leyVx$bI25*W9z z+XrS2u|uDlIHHrlt$X6kD^_w~HUhtbLAqh?MM}oHA4r-K^0`ZTfF4VjI#&Hzq7nA5 z86GAL^R_Sf9_6c#I4(uVCcUxf@RGxDRRQQaHHc3nH|#(21|-aXqg|eTqKjMFwm`v*eH(3PiIDuyK=ax6sw4l zWfQC(Kh;F}Z=K?3otfk@^3p*5M*%NgYHe$#2cBNt@zXS z{-pVu6S%$2d`(PCxS-Z(PGjjd8!4i#Jk|T3;CpQ4Bua!Z45R_;M00reHrvuHqfj=( z@SiuRr_J{|2z|c;_|)@pAQ(NTfZY^#*Hul-o{<$V%;FdE9oblC{Xs{%*xFB#-S~C zse{Zm*-= zAD!w>T;6!^w)6oA-z{!J0}7Ak^?zy5mM8HqdAhK`E8amNboN%S+arAIu7d#SIdOrh zKZk;#z7T(U^Qk9N|4s^3AH71G^Ka}-{S)2~$%Qr|3^)wesZn5@Lmj4`0U>{PM|;Ao zGJhvzbo?C5jwPIJ$?Vm-q;KA9Y^>0ME8An!TgWKj)~Z@E>+<}mxr*WFV0UISZzFp- zY&Yz|D(6A-yBS`$f4stkHBXZ#1sd(YIf%g8X;fIzk6Q1(7mpRErKM4@**+wqU^_+ygV{^X_g}WtL)oX zaR*f!G|$N{aL1Kpo(FRCXX*icEH~4s#fT#X{Fc>q=5=-{vTH7pli(j)2JZe2Q%@7v>%#Q?ZRT*)YRUlcF61o|RLzWt&UW8S z|Dbg+5Z4@ppi0Az4muBZYWkm%B=qiQhZ@r-k7GZ)yErRb9r(b~%>B6uo7qnN>leWy znAkPIq8VR6jeMR9PNmZ-J(*_c-BfBfGz0aA2HI6G*;O0u%9rfQjW%|M57ux*Fj?eZ za9sM|ubJax)t*K{5KTvrI`0a8)^Kl>)tp~L9G%86swzUxa16r9?ICv>jIC4-g6}Z+ ztb3$#S=e1irAXs_tm5ItsGya8bNZc(H(eh&SffWx)r-&W}9CuubEwZ4Y*%j~F4QQ@tgzUaK+h zBfi6+v&c@}72^B9lmy?qZ)PXU;0C+X|5&1l*pMKpXUzvAitW^h4#T`L50=zaE~{~I z84reqqHd@=W-j&Lr@n8c9x(NXoInSKL%iv=bg<1m6tv#3OO4-GB85iv$1`q%<~y;* zi~hPKT)7^bvKn_yn`R^Km`6;r4%G1_L%bXQ!d$nwZ-w10*%{I|GyEend?}>Z}Cq#>h6SMePy2FN}106T*RIPF<(@=^tPZ{dP@9P>%-HK8JCEEb-Q=U{bP}kaC zcnKS!8#I0AD*+CE1KMk5U)qbh@7eCV81!NRjBkSfKitF%B#YT1>TJH^b1Ng7VKVdg zgMm9ickrpH?khZNjy_iqy}hAncWEh6x&E`H#*6=}q^A1QMBGkILS{<{%&VhjUv7A? zWSAFEnU`d5$q;7=DI-SBh0e8{})W2c62{F__i-D$G6j3(>K)a2Qc*k|7* zc3xlAk_}<&f3Stgx*6mt?z>d9?iZ%Ph%-1m#>V+|-=y|%4`+xNz9;_Gq24X`l{%?u z$FLfUpAkbfTq|25c=o#sL9ueB@qa;q@^-=TeB`8Nv?QlLhi-6VCX-(uMZ@N_OS=wJ zFOg5{i8rBoT2H)F^*SfsseBz_jrAZpB#_yRP|y^EB}Un>iia9*q(~t$%(kbT z6OJMv6u+m&i*=6_j_6(!TGjppM%+=|snQ{SO%0CDk;3cCYeJhN!66L}gFC963Wf1+ z8?zcz+NrX_xK|bq?Q7rF^toV@29$~KCEjjB-)Zdgu>K%I$K;+xF=(mK(89=5*mSkU z8AE}1;_U9SQorV;#Zou)EOro@b)f36a0)OuBN)zL9U#u+j42M{z!PHBDvT6Ho}pG7 z^yW_gJI(nsu7n9Ykw$(?e{B&Dr+Xn4_RP3ggDI=QDbOIWox(~(-CKg=r=z#+xbqTm zBY#8^!9|TajdQ2Vp=!TfxeI~O%ue173%U~c47-*1)d7hTz9D>LyZadJZzz4j>fo#e zCuxOzxBKt5z&v2?8mq*GPf(Hy&UoS1ks5IS#cf3 z-t@Vc8eMw~2<#cfOcYz-+BN_n%y)g?FurBdO;RXc6yZjFi?{8;6D$`V1-)J_D`wGDBe+RtL3jfzQ z?!LT9vpECfbOw}APV~6VS|BJUn3H+XY2Zg+{cx&Q==oyvT#597Q0$K?twU9VQ@K7? z{faeD$sFwJCaYHA)8Wa6TJvw>NitfrQm}Ageu&cS?~jW;*Jwj=Apv)&|C&VjrY3b3a`=l#Zed z?!kSO2|`TH_yEu_2MM69%S)}$cJo0_91ak`R379Y)bgab9OU^7$Dat=g>POi2t*Vq zFvJ>vOMILTMBn*?dUMB?`X(~4c$i;P z!tE)m#A6~6c59{Fw=+aY1HAv6xsFUt_R6BE1Z3ax?!dXOGgdC*jYe|y4hGM+l?2(5 z>Rj3)CO($pM+hUw_AiTtHV{z;* zwnLl3?mpGe?YcV%aQI;ATE{)&RKDXh?Cvlk75PIEry)Tw2?GykG?oW2F_D@2AF&z{ zuQVFk8I+|;4Km0AEgVa5PBsH)xLL{WB zcAvc@sgd^b@b5bzbRCn$Cg7yGnFC;+>Wxi>e=KW-uZMXf8>7AgGCTc%tTVC^&~DKykeougu)k%)Q$>;;86;VPsSreN zS1CIvFrZ8RiLrZ-4_#5}O#1woT?nsgpiq28wDPrh`S4VKmv8>1Zxoh7Uxk{|clHy| z@X@kHSQas}Qr4->`O?1Oeo=WVl z@lGDiWO-IkgUs@qSLqITQ01&_wtuGWVP~|Ioa%wu+>G*yx+Vy_O?j|pd2gr$@?7bo zc!Nu!`Lgw*q_MvG72KcIFI%+|bC{)1&oyxbg7|lTX3f=Z-)ImL1eIZe0R&0X^a4qC zk08fD4|oi;F|q~8UAssS6dW&iBd0HvyPNVC$bxq--a0}2k+Cd6&p0@yxar|@QFZ5Mo?qj5>#!F5UEBsgoPyUk2CR_eHGorV_heKU+stg<;u zG600#oua9U*&`~nw-3KUfL&zL+=W_YH&N<0192GYWY!uF_?WxbKc+*T>RKl#b5i~1 z;i6UAoZQ`ZK8;l7e68?8sh@<$^{fpP>o5HRoh=rf@Y&4Fdq0J6Lm$up11|nu|OYiOdXDn1Giw zvpMyx#zrp_~CuJPRS~a~(+<-7a1Kqcy6J8>k z%F3+3#zBICzy@#`gyHJF>`qo-A$hA9#2`79JFeWniI?r=e# z_7(DMcwrRIiN0Jl+tG8_qt&%c8y3I9o^X2^MhP!*udw9D0!i)PsQ#tP?kh`<;dh$0 z1R-wxhbi%HENj|gPsn8c_1r?nop}W}|EA6MBbi@fbTh3YegWc!o@L>tEzX3)>7Qal z82+av4}{6xT+k8#NZ4#HFJylJzr3w& zw>N>FmK*V3<#MO$4Vx78P9=epK_lrESgM-C`w{(sZSkH?|6OHSJI?1Rw!PjxW4Lq< z_M(65nmpLUdSE2%5Avu*Coq|YT_+?D^_X&@es?mzJL&gX`hAM|eTsgcOucZjL3O8o zHgUnCvv`H_^_TUZDfaJJ#8;~$m2bg+&g?JNwLa`NwAFVE_NG5jW^eo`+HtLWNXGYB z5u1AuPQDKDL_NlcFC{iRsVPb>RU=Ob<}K;vm0ar!hIo-D;Llgv8@D?h8*1ED4ltjk z5r?^v$BiTqia4>!I3ki$3Mazo;~+1Q%L1}!Wyau1L|pSp#bPdFvvRZcYKe%kp6VY^ z8v;;lHmdFFw}j!W02hOr>Hcg5wCdk z(NXY#^_WKR@nEl0zoA~F-x1^7T`r$#_VqPmw%D=3aS!XI(NH%vMXaYcyUW~0R?~4e zx~m|h@mtt_RL~YKksimU=LMqBol}M>dFc`CG82T@t|84t!xOhSPchr z(%6X0I~JKd28oTKPmlpXWJ0*WIA)5%?q!JKitK8Vpx-};v&i^*8Z#0I{*CW9ZJfAZ zm^b+ktpA~~yA5-{vtk{0)tvpNvvC&^l;5-VyFr6TS`u%?ymR#<=AN7ALF5EhzA5I} z$`f<(FOUiJ)DX{}Sii z|2&ID+RAG-#7`Gz7B!riRr_^1wX2s|wP&*4hD;fxPQ;ykg%S;>BE9JiU12;4kp8)Q zKS#JzKaP?BNimShvv6Y|$?kZNSg@EmI8C1dM61xNgx%%tA)QPC951Y=*JnYA^j3HE zZX=&7WJZzH%`MnR!D~-FJ>tH7e0}SF;cT7o-n@;t+x(eKIxEiw70ebYFnA#f=@6-G zFzc}wyA%Ih=p#PR{kV@d+QHquz#S-Ib9L{qnkF8r%lH_56qJF;^<7R=R} zBhNBMXXbk_zdnuD1EsuB>{ho$~2jN9n!qcZly zzSygoW{`W})YTM(=ZllcF0jbV4bOboYLOYg&dlQL`Jp0z!X8uxWGlcTZS?EHE#(-j zqJz_I_BdxKy|`POwwgmWCG_-Lx)z z1pXye2ddh`XTO5@skYYzClUla9Uz9f?o-l1MW2m^w(v=rU41n1Cf1(I!$GV}9kGIf zne+V7j3~UggwbT4$idt5SC0+;vs0Z0hOagbcLxWC$J$N1a!S+6HPKYBtH^KXG<;Bq zcO#8qEArn$w8<8hyM!mNc<|R`FER5b_?3y)kBZ;F=v1T?Zt?jPLxy|gQ^d9cyK0oX zm~(+h$k8!AHWp#@ka8N--wM{h#p+U+{>6Flimf?t+rUS7iH1KSHReK$Q1MF?WkGa- z+rNpOTrLKOq$|e71!DJx11Hd_+{xmJs5`!7i3ShnS3&B{TnGq7eZXuX7|ft@Diox< znh~rdh+#0>pHqk+2Ih-IK*u7wfZYbtQsyjlQM7c@7t823E zP09SYALq?rL~`6JH-a7R!9YGA^+*#Wm#c3IoQZT2^-kwHtiaBd)U}B8Qg`5cZhDxv zP~8nMYdOEanuEMb^)HB>ZQL_-CTvP44o>zTf@!1dS8eZ3@N4fWB!g{oLa1$&UA2L; z+E6x;+<-&O!FBIsOo?*qw4$Cd_bjC!Ak{MQT)xA$$tn#Y++d@Cs#9(wA)8D0o?sl# zbEc^#2~;p2#>99A-#5KO1!E9Dt1&RlDU1WHLc1{xp4+=HCWLDz2bUA7JwFJ-&*sN5 zZyMvsEmNIR;^n5`RDVKPQh|?b1%v)c_3Si!Tzo}p`o*CuQblu|v-gd(mi8Y)keQam z9mlOlb}{Geq>ZIC0gyCX^FR3jdd%&e)M~X|AQne!WCrGIP~s=Qq`$%U^)Cct7f~ZS zloN7833hVU@R8P%{$zt>NZbwWwkWsPZ)jRKm`>W=rzWPdKLRKX=9`0u65z~CH1o%$ z<*d42K^0*Y*}eIqJrwqtt(;coSJQTI*yK(%|FfL{d8&UMUkRkxKL0P&4=<&61lO#{ z39QJ-3B8lpgEFyy^ZD`94l1+Qrv5_UWaNbYN&f+=8tDHGZ3nW}#=*u~n{$aAM#d&N zuMtY*EY~=A5QRFoh4CNpYh3nM5n&-32j7wXRU98}H{L&2zxa>JC&UL+u+aQ81t-R< zD3CBs|52kPUcN}UJ347~z&%QxJ-jjUm0pCpKNHC8k%CfJHp@G2*gU}k|mx^iv8 zhNmCwa3Y}Z7ie{LtnXJPJT`^kiEK53=$P{T8v>c82?mki#}c7nL!2uUqA!N&vE++5 zCsj}fi<=Ljq+^6jBD9N4dW~TC%D%c=qwd{AaV_nyg}}Gi%!5m65Mk z;O|9yv}3*rURm>Rpve)bPGrF7{TjC~k*EzB5uYZJKb{c+c=qKC)?PuE zRPDs~B*UvQLuI$JGomfMS7CJt^a!t@y`?c1?Q8Df;&01F%1mg_MwFN=>j-*@x} z<=hMMFtQj&mzw)#-sLpTi&p-bOB_dLd4Fi(TAujs!r);$V1jWi@(E}{ z(^)=cF*@`-p8{u+c)e;%rlS<5sDFS|^WkQQQNBnYd#br5v%4KVVe;3%AyV@dJdFVY zSSQ&J%VAdlpyQmJrR<776$*e^fnAj>9SYKD@C-<-3_#+0$luUvAo2Mm7r-mX{wX*> zwJl^J99pMn0rF^alJ}H>Kdyp=xt}73%OJ+>AL!LmMN{Bfp?I?thU{jC%#C;8HJ}h$ zhF(=4*zRqdxJhi>d9o|1>&8_Ob-#<+?Sj`%0@RX2N}0mS5Xs_G-vhwTd5+SkI{|pR ztqj~i3(3GCI(%bRD&4w2j(~@|BXJvyLf{Yal6f)KK#sHi5W%1LcD23@BvWntIXE1F=fml=@&(Ta1z<1$ z>wllGNfz~af&YQZa$X<;In4xQqx3sBc$>KIFYulKjx%*pO!wKXz$1fF3hj4FpQ9kkWBj3UBT-5 z!wk+d?hdlPZ0Af>JN;eVRx=8ctLX6>=1F!9oyMLF!7t|}OdBo}yJ*Az4nO@%`6r97 z-BsZ$1%H8`LphN@)R?vv;8_@Tb@qVU$!TSL zF$#=YAl?fP_h@RI!Kh{OYe&jmNW9xTQbie6FnDgfpd!k)AmWj+3f~-$RO|Cd^~}4A zvq+UFhM?06eqeqRm0Eeqled;}uI~T`v_qg~M;frv@KRWlcn_gG;mcu%GbZB(t8ycNYct zFxrX_C#nc+hLr{v+{Y|Mg6pnX@K(2Fe_MPDTB~mJy}_Y9z==Igp?oBIBo<*Th?66s zZP6Fgp0d;2PJ1%Y@%tRtULOCkItKSSsjgRR6OX$UTbNUDE1vUQVSWQAlYCh0P=0@6 z-Vdi4nn>yx$PE*?n2aqV^Db49A(McUtPhBwu(odwWgw%pYK0+$bj?MCIduLm8brW- zA=A6eMsgR4i#Sf+XKsMAvx{GRvPRnG25_|kEBJ>aQ6Bg%?6dog1hK!VEz5!atfBe& zNNFp4?rs~N>ODODBEhyb1lh6WF;0NbgF~3U{zJVPLhEEe_`eR%Oon0(PjGUKr5E4$ z#&^!ltUdl$0$D#CAkY85`2Tc$`x@W2!$*1iFHGC3bDUk+z^{QvG3 z@&6=hw&H(J-?i}pthFXJkE!^9bo{u zja|iM6y$FRDZQoVPK|)pBc<7#0v*9rP1dr)$fxLW?rIj!sy&sLM3NB&JGYUNc;Wd3 z0-3N6#c@u*KlST*-M(Echa?;RH&1E>`w??LGbrqJn&5#IwjM&qzV|E?SsC(i8n`cB z(nTQ)f{4jaP*m0OJPBvBaf$x49g!`Er1lZs@Y&0VQH zqNT^>59w8ZRxi1{gN^yaw|<$`FvwCCJ!FPFJ4|d~;Jc?r+*`ZHCSa*E4p9a=Ud4!G zoyz@dd1#&go@wW#H@(Ig(-L3KE4yi2sV^T@Y(JtGC_slyKbEH()}YjT%VAJUv^nqz zEtVp(`WMk{dgG0Vwd;+KY}@r|2cH9vhtCV!!6!aggh2F00-^~(6j{uiqjVHag|i^4 z@Gu4-&jk|V5d)ssorw>N55*ZHI$@QQy1O`r#(#E;G5Q(uzd@)dZP~BTgk($cLes=P zblWuX2|m1PV#b+z_*kdAQEX1`3ZAK?F{cW~Il zXEcD&c%4qw{{*kj1ng~y9wc}jqk4kZ z5j^DKHCg=Jd3l&*VbW(HK{Bx0lWGQbzsAG)L(2S%`P&v;M|C#fda=N@=k*3$_krBo z-CvS_9LA)OnIZ&9Ux2BaY5eI8qQbYKYQf?seJ-C#VIx5!`Yqc8PaLl*pp)999+Lf# zSBxmdh*W;PT>7no54Q5G_}9s;Vtj$qtN%bBMCP<=i%loXGaE^kS(f<_`=uS6AC5!T zpZH9MGVM&ev7Q;U#81@Tu0xkb;Nd#j@Qp>uurdwkk&GYgx8cAMcr_dxC{yBMjFdE!BuYnP>_HMCFNgEYs z>fXNY+o(XhZ9fGSXuX~MsF`19?%-EW$60xZr;GW%AoUZizSZT_2EUN9tP(Q0Q1AH9 z>T-SAr}k4`anHk7pligLc4L00%r4D580?a+ zF|$jzQ}Dm+(m8)U5bTni?eg1XyL}!qeqkDqfmR$n`1eZk zdr3+l-sHA&%$xbGtX)buxeScj8I5zG5)aZL;AQzmU3ke?r0vE8ayii?j4E{g7B!LT zkIZui>gJD5+SB3{&jz&Ev${gIE7-=R9|YT2cM?T@?Q3wN#`@qz0Vz_YQfs~d$$9aq zKL`I2Jq{=E%}&z?_IiX|J+E?Pbg;9~aX%iO8gq_O`Mcd{EInqd!RPPj4lr8v2`9Dz z#qIxprdP@6+f8rg$(knFN{aN2YEBkE>2F|VU%P9`O$Uo@(uy?!T zRZv>PM;$V=!-mH(D&bEk`Dp{8KF@*YA)cTj2ixzsG}$FB#*&}HwDczR>td*aoCI8xxs(f70L{u={>ulWuQ}q z1JMz?0h32G3GTX)sUn1|ZzvF;U5VXk@1auE)qYHq#yls`vXITMsAu{nB=T7VQ~Ouu zMzpk2I-Z8?yoh8MsIsiNiZjHh&YbxzXrmxi1VdTHx##dCK_lTD6LL7WQV8V{_|tJXQnUXqtMD^&dzEsizQ396@0S4@jqDdpa9; z#MG4OG3)U=<|(WIj-WBrK@58}6~_2>WyEb#TY=ZRJN>B&Dxos`rD-YF%h~u|tmA86 z9D6USoe-bOxG(3bMIixWKA&rm?1Ob-c%@wf7?#=dMa!*w0P{N%Bb|k zp<`2=VyzmmDSj`pS?~tW8ZRE|#*@!) zk^woXE3)k9944l88go}b&s(+PM~M(w7KVfmXK(KB69F*>58CiyaS+w&601(;xro6_ zfKTjSj|BFwKcg_}Jvm4n%svu?;hbg4&b+Nq;kOP4VL0dLV}!q{$Hl*=~vM^M2oM zW@4F%I=P@jo0%CO3wPV%dd=%JGq2*0@4AWzkv#xSF8f+K)Cy0*o_=d=!hv9Be^T?B z)Za`$--8rqqjpf!S=#=%J53+`KOT2bh?Cq5T0*_;cR~8nM&Ba^`d2ZkUW~!+&GM}# z0lTsveE`BGC5Jp0>RKGjK7<)Rs`XO;6<)OY-f7wvb*Gj3yAYFP;g3i;)EV3uNp{r? z{k!;;pRX}=9lu)s-0{Uw)>AQbJrF+wADYY@?Rr&9j)e-}>|cb-zd=?Ne1OAMp*MMP z8L0;q*sUe7|C0L>&f z&Arge!P z_w($^qjtk#E{IR<%6G-$&-*itJMQN25;;JG1C9)uqhUMT!sb}0K34e>4u{~b2w>GI zyz!$j*1t9G!SHMn`U&-R>Y29OEcaHVu@K%*m&v$NYp(VauUG<~xPHXlyKz_K>_aYY zScL6Cb3uos9SEX)?2T1zb1L@&gfqKf5dIvN@5Au;CEvD=Gae$CJR+yKk8cE8b7l8K z4q^@u0dOO!>p@+I4b$iKow3`E@^|rwQ z=ltuKBSaP;Eu%+q8`Fa>X~IqTft=*6l{IQ({}oI1`n48G_h)K!DC{M=Z~Tx|I(uKF z<1(hKNEP9Ye$CkjBd(3_u`=_uKtqg3b^STtdH9APZ;E(VQEP{LFmm>$a7UKh?jG?5 zQ@?^WqCC|>kKkfzr5Iib>4>=5vu#>i%b8FZWn$rt$le1YDe2)x$cA*B(`RfZxjghX8urcVqF^iLr-$=Cf_|}r^ zPa=szGtbfZ7v9NSBw15R9&-aV@IZuX4oyqEgrN6L8|(>((!JFeLW#twQSMe7;>_T# zYc7Vv#9ath?C*T1)8rqZ`!Ar*&mIaDgcpl9iJU*KEPDv72c)R=N9PfdTqj7k(+b1> zrM#o3bR5Nqu~|vq##46Ieldg0Vat`^yP1a_u;uHS7l|sZtQixI`h)XTGEY+DcQCUC zBc?aJ-X!y+O^l$;{m~BN6~acfqlovP7+^@8KeK_$j5UfaM@7e*iM;X?3}i6UM6ftYw*x-q>5qf%INLG##b6<{CW@6RvTk|`1 z^&rcR^qA5`ei-4ULebPV{D$>xZBNNzhIsM6b&Z6Y?MI@ab;)CN@@t0g?hoAHtOx#@ z{Us+j>j9-E);qbtSr5FH{Z(duAuca~4mOekcfXNRw8~$sXP;MZp|whR0+Bg@XxT^s zni#G<;8hU?4?bp|3)y$4v0i_oRt(dd@vBAJ%pbr^pSzR^yr@|?GGEnyv!a#t_M-nn3RQ|Q|}|Q_3&L5qv)yFs#-k6}qj%Y_hLVOy8gm|A77+B-p5Y%z18?4&@W_-}6L5odz9))Pt=?L~;W+HcF zd8d_OwLH|j;b-VCM|E&EzE66e8m0FEP_h9=+--OgKFr|8{HzS7!s&R3SYT42goBuY z5qA@PKdc6Dcdjp@PgSJ1eS{TKZ+TX2WsN)LVT=+Rth(0xA4B(jBS`lx z2gxUKo1;~mqmq2e?~RZpl6&e5KCD|@$E-F9++^cG;5oiGz5FFL7h_W~FI3oq7^K~p z264zW;6oJA_~{F^j;Boan0>RRiX{M)?P2$>jHDM?b#e2}EWUX++#>vW7u@V<+&b9S z0+B&Z)qbaPKfD8hjBuCx87Y<4!s&Bl*J39hPPX)zGB)Bi2OoqR_Ht%hI3%+nA;Jp6 zw3johg4%omXI2F>@&%k$6?hb|dI3qrr`EG`jL5XH!5oXq_d@%k6VguTs3Eta)xKjz zUyXd_#bAwZg_qDqL3rbbVay6@>bAxU!=b~9>I#XyclE{{k+a`+$Fl!p z9_qT^vCdlq1kaqb-zx3)+oPux02ZmP%2K%Bx^|6TFW+yCTP4&NA2yhGr7GwBmi@MM z-WJ}yOs1g@@$*%zoI||Yi6>sFOy6$j{VR!`$KeBX!)&O}@zj3JTdMt%(=hm)gC8xdyD2pd}hQsvrO+dy+lvwh$DTm z4vzm~qIFI2SEgA7nFl4qf-eD1uf}OjK6iU;#abAZBP%*GGZSm!a$TlNC6@Q^!#Kzr z-MwMgSA+DX8sE&*$;u2>m*^7qMs{!TznUoF%BdTn!}4P8Dgof4m3zqrXw6rYdFQ#@ zRiZ?+58gcsNP^`}O@bki6!dZu$$_9B>BM4k8yG$egZ=cAn2K$qgt;PJgDX zAWY(B0vE-1_-lFN?#CJOFU$y{Zwz|etlpE#{<)MICvN{ip2ADHkqZ1SJnG&m@SovQ zF+Sb??J6^y@dRZ{q#E%b(p&R%h56V#zTV7h-KG8%y*5u5^IGviYv9S1OnDD->{Ku< z(ouvCP5VaJ>-s!SSENjPL#YMRPSXKgPs47}^LQ`gq5E!Tz3sjXCpAzi!>ZTp%B?m| zDPTRqb_^1|SqCWHVpp#u2DS8_J6;eN)sXIUPk>))tjIQv0n>Xt;}3$I);N`GKuZt7 z`H)d@5}wZBk}2N$rVYE~74d=MJk;+ZN(sM6>w*VA$MC*Y?|%t5(C zA^1e0_%gCr?s{xwmq`-IZMBos~PSgLqTSEcOF_hPy$EZKm z-HMOy2 zG@ksZFn%wmI7B8xq|1fwn{L;6>VXs!OJkuevC3_{ ztns>Ls}h)cUAAgCUl*^qrCh2`=v%wXu=@!d}s$D^mS` z6$`b*Di6s+|BIED@a-{GQsw`vBAJlURr?Pp6(@N)5k+po>hKo)wW^aX>(#Q|}3kFmG_T6_w4 zn_~~;*wqKEx)0gZN1KkxO&(rz6^0Q8km{ZjHiG6`QPFC%O)!Br{F>uk9z;I6+^W4# zXCw#8b$!$)f%uL2cMsCF1Fc_x>jg%mV7YrZxxRde%(#ff8H{VL#uaWlEN=T-j4F57 zcK@4!F^x-=Mm;|jr<&;4{$Cph@O;;GGiMUtZ1Aeh-l>5CUrDSP~{V?_B4bKHZ5*KF_y*7RME;23&L$Ybuw ztPtTLVEdhUSB7Pn{U^PC!9PY;DP^2`v+IPe{~AoZxuQ z#W*VmqN?S5?Rc(aDU=1Gs;4Qly>2J%b|^a(h^js@K-ZLhsJscu&_8=hRwZw%tbYyb zS75oRFZyii#8Q(W#H8a880HmnJyCDA*M9yP9|i9@Y_G1-QNICQVf2yko&sw#^c#otPBMy@#J-u`@z2z&cuxg*xw2~Kre>+gskx@q7{lJlf znK&O}iAAUW-;EJ=Ei0)vKa`+_E3= z+TO_4kI9F}D$Z-SvR9b0Zhzm^W@Qz;P7i?j1e!vS z@*4n^_^DoZ7db-?CwHCau1Cn=qSZM@RKi&0Mqc{;S+Jnl@icpcW=$l;TSf0k`p$`3 zK#ZrWj_Jru6ig{V!xg}SAySU~lf58TyFY-Em2aB6q`SFGRBgGL!a zTZ;y{uMbli+#(4B6NB6jMIm(zV3^SEF-Wrls|kXRNS=A z|DnLg{m}1AE(jx2eTK~roce0KnW(R}ITPqu_+o}y*3~9FnY@sLJoFjjLh1h7O*g@X z^&ahoUsy;Z93Vo4OkkWQWE9Xgt=Jf41+85~Yca1Ax?^3ILh52IV{WIOR_#WO8kK@3 z{wNLlcWSA!tsZ~~-SMGQfRo1wG|qb8$l5y-W|sM5cnGTb89t-?YPLe^bJ{OSM^mkL zv!aQqQ>$)+I@t6Ndh`aIG74(@k0Ndh>YI!q^B{#=o5WlHLjI8yu9cn%Ut=s1h!cfl zT`msx?A^ve4Ao*bM&9(EgRoaIa_3yE!2@+qu|O=~Q;=_t`(``2=);u7&=m!`Qe~dL zFQ{Gj8!kg9NO+BE)~wM?aQxg}T!b{;i#Ca<7GUZ0+F7kcm z?3{ue;U>g2>(1fJ2r&VA!K+wx@9AO%jiL5E-Nft+Vkn-DuF||A_yHM^1QXfxM>v2p z8tIqoHkqy@vC*%qHOScn;T1UKJ;h82qlj?IIHnO%fpi*JD$(Owd<*!YbRUIT)Be7-=I~ zD6&?T#=8b-N)!bz?B3BmPPi=0)v`+!96XllDNU~3QvEx-RJHQaH-|s!f_6DL>6uUK zg6Anq>Grj1?|52q;#M+Lb|JR`bzh@ZbF)C>>OK#GBWjD9J&5rp3`A71DUSu+ zoVY*RjR-4C9iYdCI%b0vq?2C9Fh&iewLSlvv_(E6(ISoMvA+{(XQ*+Yl3Q@6TJcT` zLY|%mX`{VpHZg^r5f$UtgP`Z1BpxKEMGMLqovy6y1lx041jf17DKfs_5YJTe)B zqpi7X>5WjKEd629tcR1c%0NI;YzrBpSxv}Fds@dB*&I?Aa6btlmOyf4PljaZdr{p9 z46kMefh-;RQfJOc(`zp@#o0i*eKk9C9r@dIA!a)PC&z_)b4kI!!8cK_e^1B5^CsJx z<62hjp{LZx1(RQK3Z7TsDya;GbxK;sR&cWX(-|Vmkj}sqv^!~K0J1}bVIa(Lk(~CS zAyLV#N7WF?a-4$Mlh%{$Gcorgt(3OiB%<**sFmb2#VTlIBiNHHb|_6>i-Ed87K%GK z;N(L4vuF`Q4eX)M3Ni_pKHH%O*|6Y1R$7pF#y{22Z0Uv5%+URbdgWco&Z<#&ExT{p z_lv0q1Mo0f(cA&}x{BDR0r9~mGflW@vjcNGmZn76z!tTVH0LoYT|Tv89&*$3o9QhG zsJR+J>PvoaUi#PZ546b8Jr3q5`=CYQ|89cTtM}IcztIj%#p!TUwxV6d>02Br8GDLU^j=7%EqPJ;(U;=Ee`0^FH%W7VF(G%)li z=Y6@fd3A(GfT&nek+-+*JiA%l^tqEiRjfpOBxx!?Y)*d{7gsZL-A#D^VKlzCUbvN0 zDotXV=Mwp6;~bou`uc-b7li>MIbPjPPKt8mB-b$KQJV9@oo3FRAK`DCIYUHYea)Qv zGUw^MbKJY(Nx85O6n~#VG38Ipsmsq&p`s=E!Bq~RCzwSv>g6V#hMnxMgAMG4toa4P zU?CRC@v4K{u-d9S!eJp6iXo|4`L$sax|j{{cksp#!pB9aFut4W^S}eyUD#}nOhG1P zM%o%(+p0Ut8-E}F2vdK->h&#+t*zDTDl@lX&~oHoI5?1;1JSC6Xys~FF%&Nk5L!vP z=dJ*i{l$FFP-XEzKC~#=ql}f`VZPiPty-t#++?s$ti*0Z*0R;>5?$ea!q(I4Bp!Mv z4uhgk#TCsoT+y32!@TM6uAX<9C)?jId9ppZ8|iVIb9CPE^EllUD6lPIOb-rJo}#LE z?aEgJqbB8VjpAArBl;qu=a{=JR<$NpNz&6pY}ki@R50FX^~;HGGhQTMQMqHd$Fd$7 zQ)|A&m5P~^=Cop(5g#_K!$~lfx~Ui{3NuUDK23S4^?t>f%1EYU#fsUmaRy9hovGdz zV0*>?c#HFpbq2hE&)Ydu{rZntXDYqd|IIvYTn=C535S`h?u5^j7CmLiy~WRH7o|(zh1amWvduEM9$>-1aw4 zeTddi-;!KjD4)KYz6*2++x?ch|H(%xHsMt~HUb~1dsR<9Qg`yu*4OEl&2XRV{O@!8 zz{+x^N>`n0Oym` z$-_OSTpo7)oI{ZHz;0dz1?Zp;QnxSsU{HV#S_O|&17F6#t}j!9Qrzg!*vc2Bi*^>} z{CR3ZO|c0d#j014JC`A#Ho-y^)!%lk1XsmUT_b?*rPh3@(HF^nBU-thBYUPb{~l^{ zn2FJyx`7l(Ea$wl=#&N=cWsS#z8%UqFXT)S72@7$f*)Q(;Ad3s*qLs^Ob;W&O|j5{ zXeCz9AB5dkBIw!}wXyvs7(|Wxu}i$L=FrTkHQpo`l}%KOb;KO8t%-Oqq9!$Wh>xiu z>2r;&Fy4=K+**TQfUyw&fUUtyadI!r-I@#I7fM+SgFF3cj1u27)jx`LJl3woqNkL? z*Qrh?-o(WEK^aE$EYh_QahE6GKQU5R^w>hyFv49{gvR#4BB`QR=-M%vdZdQ$zV#H$ z7O#Y0u2^NhB(YbK^y@iwd;_Y3c%NA62gfK~MwKmW{$GluxqcU=*K!1{@zaKS(FdEe z?|16U_jt8J+Ol`vJq2aJg~c!M*YawZQ`9{zu#A}7nVU<~!xbIszen7J8NQhk3m&jiI%Pb$rQGPdgj;40V;5 zdV@7@wt4|+pcL7D7WR~p-Gec2+l9cN^RNOPOmlMKYpmCTN`9qoRo{z8?Cz5dMXn$8E@dv_? zmc*OdX@$A2eS^^?SB132m@o(14@`xVACP#f_g{nkryN_0VE@@MOc4q=_5StzbDaDX z`J8_rG#lp955l`Cykih>w8nb&r{+Mu*m@w}j!oF1L~QeZBr0$89}svgma;puL0kXc zmSF1}_-p;7Sbf#Ch~~XlLECJm+z9m!(hK#;Gm;v8lqABYK2pv1g7OmTPdY-R3R52q!D`A0 z0&o~j_!E-cDFeL`bSjEbG&SK6FP_9C^B!aN{wq^>??DQ&drN%J5XXw4hZv=q!Z{R< z5`5PFm_i)uo08M#Q`TQ%>)IPl*^mQ4y$XX&70nn8)mKdSiLPeOfva^UWXj^ZlhK|< zA-|l8;l;*OK&aiS`xi^@EM*z=->g{mA*)W8g#YUA+Q;({y)7F45asO%h6b&TbkM0Q zAqvS(J4WKp9`OM}1N*J>@bwp2dK`RsQ$=yt>s8ZMYOSO~Tlr${CB^sA0s9a~?(zq? z4q<_nZ=F(bFBwLmC1Hc5y`R-1{ijX4TQWaO_-OUHchkdv-Xsmau3)4l8{sO_+u~iCqrNf^pE1^B*sEDvP6ek;v-nseCT1qjRmpB z1`9^)bN6_d(p7+@9SzdJ{3c%FYEtG(|>%NYzL7GB7vn}!eP}D-}pB`q9S$3Wit_G#6}la zRiAFe6FYG0GENMeUx&a${xs?_DXq9i)39;qa3;`z(bxuy#C(^Gy5_$N()LDuF5AlZ zCDQ4j!r4lzUC8=wCvQhaZBBxT1S>9%@ACYFVk3x8{f)Rtw&wdl3AfRx0;~209*O3# zpglZih2-sg<;tzvGZ-34V#{$3cU*G8yrD2j^z>c}>T(l(aNmDZ!)*Us+8P8$wrAqM z)ykg$SMYKZe9-pp#>nLY-GpABr7z%oYlPUTu7lA0R45pd-6#eR#5ELnQ7A%p6F~@n zuBt@mfqv&C$u8WQSI@ut!7ppROh9q2yJsmgZi$Ar5__lr2z&P3##z;>g|(nZ0+%!n zE#Whstw0ci=%g?2u$Dv&l%Y38PE)>CvlBUA>%4r8v_83A{e%SSIis%q3$;E2j%^5b zcFM0Xop0wH|B@wu#{2AilvG*Sg9 zzE)LzH1#83`gU+QqVgzB3kss%aIF3h{{5S5bKTFV%jBAs%V2#oq}H+cHwhD$Mjo}# zT0?pCdpA|fV$peV|ss8Ge-d5wUAvXlHj-+SMgOhEhV^Y?iS@4WB5 z=iYnnx#ymH?pa1{4Y`Dgug`>B!g4RJ%TNm%-H?gwwF4R@#;_LOAIzQZr-r-u{!?PH zk<bR|agB%_sL63IWsNbg;a0 zMm4`O)5K#ihj_%&0c{%^Yw~$j;QC$q4;zoZp2%rFj~*;y10jT`eC#Rh2HE+__V1Eh z(R161wxAnr&kvyDF(w6=xX%cBu1hlbw9zi2IWf!9kkfu02~L^U#ALS^0Iq zTsu*)*~P$7^%M#-7p|VfAjz$NVO)@2aEiFeIM6RckPO?qHleRJb8 z{0kh*-S;wG7|2JNqbS@;51Df(Fm?BsYembn1y5eKBrro*$G@4R93vq5&=qyXo#%~H zWxZQeTYd&=+gg&_{jOq%**`8669aIG09#iz&)%ct-9MU$^YcEvo&*C1bZK8(x!iC- z6grtDNaI`pH*!3dJxCwaW#Q3IK5Jm`k@)E!{MN4&G}$9B8Shd=j3 z3x6TsBzF{LF3*E6r^X!okIVAlpJ?EpV&R`=;ZOEqptxo0(6Y`UG@lz?`e)H0O_^d3 z3ZYqax8-&t#R~QPdF7IPWXeWMH+BJX5N7Gn?w1b0lX{L=l zt?TQ-*a0wJ?_||rA>4B;G;2s={kMCYu9{}xbU7>g#Qu5EW5s#uz=ZclU#hswo;w%J zn~)uvh`Jzi?~%g8m^;{3H3dz9krqkple>~+>lf}S7Y{sE+0Xzj_v<4E)lOXC#Ix`DV!R` zMGd~`Q+61BKI3|ogqWuv$U`KceB7yVJvC<_^Mu?@Igxrm^Elm)3zv>Hs7F$OKH%1` zK$i<}y4WzO3A3#tuT0KQs5p}L!G+R!w=|#IS89DBN(2WSFydc zGNu~~*7(ArJf%YZ{kw^~?Dtq|=1BD}=hiOlWVYvtK|FerC$jrjd`D6J*vRO853VlYdNQdzN4rEW5bF>(EjjiCgW?54RcVI$C+JeQ}^94?4BddA=nyi-k?yqM&nC5!lm`v0`yA4%ul-{7TV z4G!zCVt>d~Y~2jEvXOwpl4p}=f-GUNm|j_V z%A7}22cB}Ljy@}5%9R&>cDp~uP`TR zwD||L33B9@@t>m9t>Zc&9v43yS z>QD-Hqsho)YsOsK+j3WXeF>{Xej{#QTo1HzO;$~03~tmb_?A~_I~0`J zKZ$?60@+kG;&+=nWj_skowDQ0t@M@!Q2(+wlTX?G!o*{#KxbGgTqdrD05sJ^Imo3G zI-7Sm63CJ#p+tfRtiII`q;LrPL1@YxDZ+-9o(ZYR49KL(mKhIZ!TkVogT$U{7y zsW_ZV?W4R1(ZFlC#p%W?yyYunG0v2BrZ}5WDTIX6!Q0LZscfUEQDtG-ig6{)dm?wy zR9L4Bmt=m@r^*{Dn!f1h3bcu#6y^q%-#m)3z)V3&jpDR%B?ftj4`$nnnA+z`R6yaU zyeT$@E71@zrz_<&ucNG7BotpB!{^q_mk+YmOoX&FD70t(#N|9n?Qjn8*!{{PTxUnC zLuJgPS|GrB80k7n=9I)?0L-n=-TO1wpeWm)C)KtMy`SrktUKEEXGE?)yY9^OXEl%N zk2WN%=s`KQBh{zVpGQp#vIjAn=C$d# z?M)UPvbYmU-hLp9lCf=F7~yw8X=ex;LKkoruVy(BdYV@2%(u_K}cl%ux2hPk=U9EA^*&`%%az!Kt@v72~SA zA+ux%_wYWLV|fkJG+$aXlV!AJj7$sl-Vo?#e=t36c-R2=GIM331B+NLJM|BlC1Caj zD?YO-Bq$8;nHe<6AO_>QMw~Jmv7NmN)N8>RxnT@ILxFWlRTAO&Db4qcTiK<&I!c|K zDkX&yOX*ux*^P7!m@MsxZvK29)$X9=yyx&3!e<<@_WW1Z8#~f%G{;7D;p-?^N3Tc0 zdjFl)!1NoV4%S)PM0wG*Ew1Yc06#(=S$~EX5P6Na zM#B|eoP0oE`HxSdY>>RxCv5n&E}B@BjHyo1$4)OW>DN%3xSiJWUD4Qjn3#DAM1|_7 zfWk~TiMJ7^Xk8%r*PNpxZXM1Tow@)eb1Vi$qD|R}+4FzK?%h}gmk# zdfOkjVc2%iKsKJ<@%M zqF-d>uP6+>CJ06YlEnaWX4#8yVPb@7^7zjQr#QR^ok_H=2io1j#{9p94s!RHEp-@I0;@U7wHJGpObA!s<*LhpwW#8o7` zSQ%cv13Nfwo*tYjgZNL_TbAHLHk>nDr*M-ot2r{rzoFDfS~^#zL>I}d=Hg7mJsKJH zNWMjgfbOjjhq?zK+4Ynkf2YElW4l|B3%X^x{~lfieiMJBI4G;D`pjDdrrOyv&U^kb z{Q2N)1Do2o-SbpX7IE&w@t_;cFJh>bgfJbni)XT|Ii7o~{XHs((s4J)+=4(;e zlmq4<25UW)kX$|)CVN37ncs}f^1(&$!9}Z1*>_MPPsX_GBc-A=GDI{rnhoPhvm2!-E~DI6)uYOmG^_P=NT;zvqpTvN++=ZwkhdF&T0ya(&Tl* z{$k&N!pKFsf1hpWNh;D%DViI#@si&L-ae9WO*{Q)hYa=ArL?n@?~%U0b`lRUR;U6)~#x}4wTClOxeyp25KCBoKOa%6wvX$?txv9wfoV#Z^pOvx3ktuKj z5a=mmiW;|LI|MI7g=A7L$Sf3Utg#6npyw&uAE1bHM`H-vJ0~%6220ZjAB8+Yzzs(U z5;R&8slEhR=}vw|s?SGHqW}=%*fQfaG(mD~Z-_RAEIpZYY1#f8Cw^n-UQ6x=22r8@ zGZKzrnctEwSdHl5X!`$kQ2^1$ef@Vpd(0&Lye4WU3Tw0rmJa*>r z6zw~jjw^jlsPA=j{8&Bt<4)=rY*sn^oNa)pjtps&2qeA`;(xF02)$sQ=u?psX8e)f zg-4e@4Si2Dw3jRc=1l6w2q(&BAeHOl1*W{cfopz7`j!4x1nWN?Bs(vcUSsQqsB0u+ z)h7^2%)A1aq-gXn}VzKy&zYx0&vCqnx>#A$lT4c~N_TjXutAZyf}56^)hGh_;}zcJn3XSe!Y1?JhVwr|doE25U~$Gy*ZtnySRo zRCYR!zSRe&S2!)pw0y7&aC|ijRHTj#tyZ{} zuaI5ljbvoeR4>B?IE@)Y_FnZVZ`SX%0SiB8%DHPh9npEFoqixBB{Ei<9G>f7-=hro z1|xLQnK7TW98Ht9a>_QF*QX1ncChxayCT&69WnD`D#EU3XeTjTYg5O{sC>!@TGfpm zV!R>RmRP0uZZuu^E^b6cAsv{vXt6AA(j103w}-2thylEdD*W!cPGO?pim~T&;7?Tr z#(uPI@H;gqi7D}wm{Ge1zV)3v1-UPfr9Z-dd2gUc(`OtN2&a2Ip2yp(0gwk-3)w=R zX(0Dj*SFZN1G%eNfE>O17RP?8&PLO<#|Y%3c_5E(57HzSGo9_v2mDvhIW->}a-OlL z`QrMgb~_JGo>+zl^Y56w$v5k%n5PJS@{zu0;Vp0>;4m+Wjdf-XDsyJtT;|TN!e6!2 zNlvAlJHPR(4)IUApbTDFvw1OEod84;|FQYLg9-i!wcEJv|gR0@>3YK*~6kp@MO7*K^~qnztnQ* zZ})>BeH8z?!jOA%KZBTBTRr)2s#~AYELZ9*+<0FY#zv_;`Ok-UC7+mtfw@Vjrh&Fe zP)oU4=p|+;^8oEn^xRBu#0{AAuDj7^w!e>QL~Z?jQ6Ppg9`W0t0hLe}k=M78Z%<=4 zY%xOYk}ONCpqRfuO^W5gnlD&|z_R+7ZNyirT^e=2^4^5;%URa@hMHLx=Cc*=Sw04h zBHSds{Z|9~0i@xE?l2H|! z-)P~lXIC1>e)$b9G}%1XGsc+3Q`#9z54)4RMhj>sBTzxK``1d2{EMjjvGOD1Xis6D zT4G0@n(j6UKDja~AGGR~L_%W&@~1aiT|tCMHH&{}s<51(ZOQ>%M&jl2N5b9T$ZleX z!g~yS3;b976mXhh#SnvZ65`KF<>L&g0U0qx`yORozkRTK{}9;D)XoF@uHR=Tam){a zRT3h=#)kb^FW+TgdEgpy;6CKT9=&{%WfZMGs{UE6hsk5LE0n?CCXdt89GDYXV~ay3 zgWGeODCzfg@8ZlF#~v}Dtfrw~dDY_hm+TTJLT&Ein#K(s;$L>bp|Hi7rK24jy=Lg#1;!pg^#z|HMjlem{-9Qh5T70Ic7 zMnRmLI}Q75xS+;KPNt5sH2oO*8O$ZJs&d;Wh%W1_iXI> zP#>b9Rr*&ly++&tWg)lI9LnPfvj>(EKn0-R$wLhZf&_!;y8&&`Ve* zTA>nP!|AbfopXTJ7RyvewMTG*G#k4)AZRnXfEwD26q&^?Mb+__;;`)0J4sg%4WB;Y z7WKQvTj zX367oJqH>wGwnJw99V!C1;S_DR=#*DY82bgoFv};^|F+w(voNL{tRPkl)&Tr70THtjm2b;W*azU5hK~)Up>M03J)#(3EjSW|vI-aVx(Fm1mNGbB(Q(faExS zGm{x_b*73erVZJYGH8TcLMipJDjhF>{@1b_{1xa@u0`BjeEA>c|`rvzOzIGnsW3%&XmuL1{Ql=ff7z7%0sFz zD*f|hXif%}c%}MQ?~p_!9nFZBW>x4d6qhAb{8g@a`J6hi%j4EDwe>NaPnA;L!f81E8vhP3B8_)9z0Et&?3iSd%s=ccV=D9BS7qOS z(Y|~MG&TezdxwHt)?>&sIVaOMguEe;Qb=$9t;yCKJL}j~aqAUI-&Em!LXX0!AtY7a zW*l!5Ra$Hv!J3fkJ`NFxQc1rf5OiJL#tMSN&Tq>QbZEhQ*c6&u?px~LIg!wayb=-71H5Su>&mg<-a;|}U|1z`vW=ri$&CL7| z>D_Z(9_ifyNqIwn==~0AnJNACHmkq>UP<5IHii)>JV$^hg~rkpk8P*;aLsb**M*!p zR$ToLEQOs1!5?pj{|g5CdmOyOibd4eR?-)c)C+C!-NdN#mPZ55JO|3>H8 z1Sjk+vi7Iue-l|>W7f@v_?o65U2jCz23~4I)a?M%ofTP8Uuah>GeKk}t}LtBZ9b zUs1pQl=iv}ZwZv1g`eF&zJO~1O`@|IEXq-52wLd6U!R9mHTR^zLa*iTeTBH z$}(qGVY!aAy?L(*!2g&@sq1OgQNQG^QAh0~u$*|Y1(t+@*s4hx_yBx|aX}8oMSUoR1%DF!E_Ec z6K!^KTR+QJ8H}3%LQwR3nC<3mUQ2{0UN`?SI9EGbr1~SG9s4hh<|MaMOuCGjoaWDD z{gk#@6x6@Mzs#{;N)59$oJxNo&33!ci+@oc42QgX zsqfuGXT81Yh1ZWil0V^xTP#1^Wla5u9~=KV6q+*DN*&3eh8dsDIYRem1I(|%P(Cq0 zr);|*s^fk}t4ONccq5GSMta$m_<}7~ZLDNPVfQ~__x))1?>N*JvXx3I?!|lfWDOCQ z-;buw=0yKN{joauX|DTFhBIFWWM~327@0Ehl5iK#*ROE2!)okjI4J-NW{FOhLw{{I z9r_=jwOk(_ft>Q1mi$Lx)*4v#wy^B)#3qM{68j#4+7m`&fpOH27+??P13Q_<@_-SH z$R9`P`#E5pEwI?2AMMiH?V%iLpmYTrrLX0nG}4oB^&$0hERVba1Xvb%r8Xc1O|Cwf zHFzYyF#^D` z${znt7YwL7_EQtkCoDCG=|*{*dID0I-s1{$8*!)4!iIICF7ao7h=i{ zmo;ZYbN9;3W~M%+`R1KJ-%j#kAdA^rjkY(?@L4eHk7v?Rb}Wa9MWx4unjb|U3sbU8 z!e}mOJmgIT2QTwK+Se9m#^v;5$mqfcye|P~c%71{b1o><=w4L02&v6xymPZ(PKILU zVu1jjlg?xMo@tvt;8@bROA_Ehb%ZWNao)=I;x#^GYdbSO1F@#@a??1SQ!l(4UVE$c z=L-H9`SG>jnZzlP3B>LqB-Yrz2zfo6a7<3)c^70)@7gq;&+;Nd+QU6W$nlVYL`YJ2 zydQxrMys3ak2XSuPEABN!(gKPy{OxLPchQcXZ6pW#6<$awH*8qn~0-)32hg9ALQc9 zFjv<|Xuq;NeJ{UBcn=&5ZEf|gSUTDlIaCo2ES$Xw4WGRz%fTtpsM_E(i55*-U9nXI zhtN*U8L(n?>dX%T*+lDkK*sL|Btnvago)o%eMJ3>CR8swyb;h0rG_LAWM-Wuha{eI z{3s&IG_rskRK3HPyR7K+dq`K?|JC*?B|s1J_!aWk5#e@sOWtij$jU>K5pLwS{236-HJSK8iAH9?R)++N4#Bip0NI1m2k}p0@F3k@7Zgq0p>8 zlr&6A1kV9ymqC>$At^$rA|nnFYDY6rlv%$tm8WbwbD-o>zmaT3Z(+=7H z(f516M)rH1%4#yaoqS?oA@Ao*NH}#P++q+S#i9yN2V5iYd}k)29sfQp#KC;F0$t8w zHMa)cR|yrfr93qvw!6!lt0D zdY8~zl_3P4#xf#FI1Q_)jHT>+=5C1zOmCf=$!Zlt{LTV>nSlfeB;p6-2{!Ejw6X0Z z>8Dz&T7@-ZZ6$Frvw%rbQ9yW0XVzwc&MO%4V8P3c zpFUEM`N?;?TDL4~${c?70`J3{SU2$h7d|@k!2&-_mT`RLH0`dMGZQO6lv)VSHIh-R zEi3A!|73FMm~I) zx1=%N$0kD!@XMLCcX;u9)(s(oH3ta-#?8^z6j(vfTy&9`NA;$is?B}&uCL`SuSg7b zKCk+aP2odZl$Wfr8eZDO!<0P?3xELS38z&5O>=P@zX?kCM!tSCTDb^ci5vE+N#GJt zLfx?Li1nYN^rh35GoX{xh2I}a@zA_%(4G*v7+4-n8wxXjJ=l+3HJg$qILq6NNO??N zt6EXD*~FE$_W)ahWO>MPPBJ~5h{n1@tk{`#z&!3T3ru{0NZ?b<13HqqFnwl`$zL@; z7~g)VGp(F4k|2u172{EvzA7__GG9ja+8&H=rHnKuwHV#oGLh;n_1Ah!fXw+sb=;<4 zT7nNsxmgF0BiH>lve#-d3OmzGMmFd7=+U&nT&6U$|9>i>UuUr~LW={dZ!sL=7yjryCjcDa} zm@!P;pPWh$5Vk8;-YWk9S;mB|U&V<$;$2`C?V4{jur0 z2D!Cc@1J~!Z0Vl&G^^V1L%W#DmevtiAjh^@ zYI{~Lj3o+tSRM4uVK;>rF9dF@w}J1$*-U?d7XchC$JZZZJGNWH9Zknp=01OF`*p70 z??$m07?Vw~G?4&8vz1^eQvC(tovEtD+3*U)i@kfXr;tHJxjo`Yf^Q0YMD5}9WlXYU za7-33^%+<+gsSs@mX*XmW@(=<`cnMFi)4ZxJCapumNs;} z;akt?MS>C}yBCL|g>1^Kn=RvJ+R=;Hq zy|%0ZEP>#%K-&P4*~l^li4;@{rf+~F`2ApOw{^Bhi9^=bcXx~7GD=ZSmAdo@!)1b7 zR%$bi1e(I`tIjO4t8Rm_sN;sYtWw`^I=_v%I0@Y;(3mh|2EI)LU(CSY1)a*MCv3X! zNA_AF#^g+u;S!7`J;Yz9yD^?3^Lb@3eUtya{d#Fmu+-|(<9>LN%WmIYRhvG`e6}IH z2e>hRsVSbPw8ig0A~}BLDMD^I{swn5Ag{pd%}+$NA6u?bU}Wwj4LkI`^CgyN0zCfQ}Ct_ zok}i*^`}gK@C6=Ftgn;!n)$A4A%{PzNd2)-=E&9C5os0^sXzQY*Dar>g&aXXb|08i!1BJM}} zt<6BcZz2_k+=g0!r{BL-N;8%BzoQeTeB1W{+3&m$ljSM7qP|n}0eYg+R$~0?4F(Vk zBkrei7Y`q9LbB#7rHJv={BhLX*-RMFEt##qVb+;c$$W<}k@BPa%)B!^J+Xr+HJb4) znRV;-k!aZPhFBwJpkWflhWscyBy^JzGJ3n1;%A?UG`PKkGyNutqFuNXq;j~toRd}I zK{`bjSFK2m=@t~9AWVE9f(08*OpF91aZ1WLN}pOSg^D85=rVkO<(*Z;+{vU(PB91 z3J_&d9pnQm%KQUhs*j$7st^baz<|ObN<^UxDj85m(?d$YWO^`{CRcK45?FFdy6_%Y zI=@ls8KnvK-6dq2ad9h)VRA)|XWSOzO<*>dst%^;&wS!RF5v%0{%KCzt)EW^F!n}tMuHrp!ue4hgli&NLUs*y|y0~bjR)tx&wDM-)Fk!l8~}h z*P;;8uV8Ia++%SCh`ReY$;0^VZN5q*kD4_~FkrXUD;Jj}^a>+kpEOxc>zfppLSrL1 zf+GE&iwo9M5qD^@vF8-SM(ZpyP4{h%U!bK-_OW0bQ?_WjFrY+})2?OiLa9<>Bw>6d z{vA#ILJ=^d?k}9gKj}p@b%HgZKfy^fs8=amzEjr$b&KM-qQHw(eIKbLA@c_A-Y2pM zPF40A7u%=Ahai&RAF=&(G-;SXZMo@0TuNa{5q8&v$(o3`5w3bKN`iS3Um-#7tGJ&6 zp$weIMY%Fc?5|FOtA^GqWtnm@^D9%j4N*Ks4M3a{D3g6=6~5J(l9C#Mr_Hv zH^bhT7to1tis-0{Jbw_&7>K@>97F=sg6_vf=P<5eI9kG5o9|Lke}RV$DX6~+dH-T- zA-b(`1yQmt``zaM*7x7@9m!M)3#0CE;{sA-l2Zj!y=iDbN^|=B~j#^ zaMdf}%6G)98~$QWHl5j|*E_fVfsP3K+cC1p`g0G`94cVSFxEFJE%r!qqffoCa{BAVsQgacUQod>5P zcN7ik6}hu$kQ=!jkBv{lvV(jF#bxp(Mij07-nmuxRpv-7M~i&Na_m0Et5O%kFqAvz zVrc)j!b9p5u(&j2_T_cqs-@&2XXq36CzkIMvZ#IbHJS^Y@DL|?xGJLP zCNND~tJV(m-|bp`6`F~pj=UhhRZd}Q^+l6T?TcsCW~X`UPeX{roUZNu2fh+Jg!INw zV98bAQYU4yEGnW>i!X%u4Ytk#RyaKv?2m)(VHUI%qI!w1Ci@9mh&KHTN2w|zc(!WtK#r{GGV(23Tg-sGNIR488WHg=o4CF;}3E;}`TA6}?8%qbfw9 zBG`*8!G@*jf?VHl_B#ceass|5x|z}9es*R~yv*vkrc2|Snou$Y ztFqRUIFbh4txX%UY_isPppz8SxH;9PqNTwpr07x8Z=pms1&#UwJ#r~YQBmjV#=DlF zE4e9?hY)YP{-KSso~{V+5ji;uDcB=b_DJz<$NxTotmnzn1W+6pIh85#2dFV zfIALW)zT@}GdP>ILRRNUvLx4?H-qj*6PY}#O^HJ+7%x{Zs$V6)J`)+fjlGVkGx=sA zp}H!hu>Tk)i};V`ZHJQlcCD=<+0%|lU`u9N$3TGy7^V#JoMbig=dHX%Qu7XIJ98=D zv*8Gud2LAiemYpkMnnhARH1xRH8VXS@?oCEWeNPI`haVi=NEI@5-;2ErNhP{(k z=Yy56>fdA3Hfyri3h_qT62p7b*>4A@&LAh4ouonT8Bb6TW9RDc$A94+4+5&B(ygmn z;jQ3MT8q%jDuL^{AGpiCX7n{?hK?Rs(!Ucpb*A2-!{b(M^IO)!Q^Z=lVf=jQ0Xhuh zYF*_sOz}$Zt+p=;QFZ2+up*B(|HqVWeuw4gJw>y)6ww27we*H}GB3=vJv`w%uNS}I zRPFp%+V9u5T`X~>{eC^cyvyy^q87Vfzr)09yZ##d=5N>9(b>(-cCGzWXG*ideX5-S z+BhZ9w&J#4WLMmbgT!*#w`X)@r*6kj^CLnziQkyb5nm>gXr~9B+HZ*Q=|a$bJKVJM zq^SF8xN2pz@>9g$iTe#mjsFu{;kZ_5xBf{Rq4eeKJG;oKW_Q9BPQw%0WW@G=&i8gZ zp#rX%ozUhvc_pNnQcr6b?1a(Oh1nRfPVx?3MpF-JPh!`zJKm@||m6o5VdW>gs&abYjGB{Y~O;Kfumd?_w=J@@l!~ z)P%*xX$DK}E)fj8UhBT6QkMM>FndI7q?qYCxSImjuT`0ZR*T|M; zMarWKK}FiO25_S#+@LBxK891;uy+|fkPg}o0YzH=E+stdV#j=oGPS8Xc1**!YXggd z?zd)(GTSw5+i-X54_1qXvd?X61FM4WCR5O;GHXdBDE>~|3InmeJZRgk4UqU%+hf}l zuzwP)aAc~k!fXJ6Z`?(a55CZD;9k%6Nvy&XUuI#_v)Y$Htlzc9pb;c;J4$2@SHg=4 zH?ymLRi3@4Vxhr&xB=P@^MU)VkBa*d&2|>pGCQhaf72i?!txbw4+0UfQik z<8Y6Vf)P!d%=-r_x7s+=#q1>c@*P&+$XCx>`D&x&t59IQk*_|P{&lPOA;sIl$J8bE zt3jzN|I{@~hJ~oRSm9)oPazJG?JCv{;q6aFNTTC*#yIo6>)pWzwlz;N6eW-)Zq-Ac zly`%EyIYz+@%8N?ccaQH37`-4wu_F`E;={6i=t{_7d@Dt!R$85F6pyd zvya}!HCjaX>yv*^B|FYkXJ#Wwb_7d|hx8LTSkNy3&R9nc89FNPyQq6wL-f#o! zR*QAbHZ4{gWO&UeyI5x^Co`O|K-w4OGRG;M;)){PwzGC%E7lXedrQ>Q80jN~(InF_FtjP^oJ zpLfdbCMFiG@^YsJv72nQXH1ui>qu&<-A%UIoweS)+xPlww3}?RJL`42;6_g!Kj!QK z%9cIl^8(g!9WnE2`yN@tD<^&_-N85IXnvfUF1$$lFu8|LO?B-MseB9Dg;sVEXIhX_ z<}$yJ9*9H~aStKpC^1P;r_BKQL3;sk5})$~v>!UmPG+32&J9(snGEws)RhqLpR4ge z?7$$>bLkPoOWk3tidMom-3gX-=Df9lrJ+quk=i*B{=kl2%NK3tL(*41QEG2o^7v6* ziX&cA_Bd1*SY7A78`R}<{)X<=zvt~TE0nRW(fK#>9Q*4ae}9FHlm#*&2k{6<-SPqR z8Ns~82`vq|rxbgR*;UQ>LaAOh%y2I!*#deZsnN(r++O6Su!*-(yo%b*;ghE5zW=x? zZw?>jot?wGYTD*7i04z^{u6lP#P6qPOyOnxz=m&9n3#)ApE8C0eip4HuNl446yB`< zi&tICLzr0qJ}=W)O5lOjh%sR$d>=(_a!# zmlar~a(g~s-`oAVRrNgG!Og@+Px1`;1lcaO+ePDmNPoMigtu`LLw%RM4}~SX`aOM- zFtfMm2^5KajGB?ZBHgcEMW?NTHe9TK8F-k+5kUSUP>z!G;A%hi`puC>SeACgbV zRJGi!YhQGV%=YDzmj5E3yc@3C5Uu1^4*BGB$j6sYTAW*ze$Nm}3xw+p;G4Zq%qmSn z`2zDJ;NF*)S8KD&<3Exw`l3&J4*BA0Wbsv-({~Q+t=k4U!5<4X7 zHhX{IQ(k?w-e5|@Zzu5(P7lMN<92D3YnS2ll|S3Z~;Rc@AYZMxebLsI?Td0_AR zVK+B%5yMpk89}k-&}B!Fa}ZBKr?L*Y<{A`hR~LKzBsaKUnOjWp{e+4UcaxFlxI$SNcGs%kU8!z)O={n6Q^ROQw=MhkIdnW} zkh?b1dIM6-A|RMjLCmEIhsS-z@RHCK?_n8!8VXT7^8+huQ=_?uxB)A@g=q8ZQ9541 zZQbbN+Pdz1FC#*U;c7pVHE4;(_N4J@&{v#7a;au+Zrzm$D70q`u4Ca z8SaBf-L2B;V8;Qe+G#~>xKoRQ)lE*~KfJE3d^L2B1dN6%!DlYrB(LM!J2}(tJOe|_ z6|Lp(G;X?7ni2M@*}qdP!pYwdRW81;Xt($aoHy%F%3B|^6J_y(}~>o>W%{tW}Wd5Ph-1b|L9);RYsG8Mb1H}AHV?<(WM+I%-TS{F*>2E$EzEV^az4)*)3pqo_6&nQq3ORE!xRN8h>B;1|fby9DIiRZ@#1 zbyAsmnm=fFelhJCEy&L)Z)}-~D(NkzB&fOS7NKS+EC94j28UUFS1y?1Ww0YmjX91g z>_)M3Ut?lEaXE&Akoc~0XGTw+*keu#li$(ZT9=?>;hzG=nf2D@!gRqG7Znsa$&Dqv zncR9bo&X1$r(>`-?Iv9e>uoMc-uT$lNi0J~#DGI~dU|udlQ>)z)5BY9llW+Mry#jM zQMJEz$pGh9U6)S&Bch0OafoOUR zvO5t(p0>rd*H*7{(zpEtvtZNKLlne>XlMuWe0JdBk17^%SJnyIlctl~fmd_7DK@5K zIDKtL08g{UfR=I6Bz^RIE|LMr1>Av!3VFDr+?M;Y4tLWuNhm3|6L71CS#aEkjqKD0 zZkGY~aSq%A6ys~CGp%+8-w)a`EUByh+DQ+f*yL>hTY4I*h;*n6NCa^-F&8nvpt*Y< zeNWy&x!DIH=)o$9eyEVJ?rLXNB|z`AK%42}_;+h2@1o>%O17h?$-=>=gK=3R54AF1 zzP)jPb5=Jq7v#V^aN*^O&-?2GKjU9#+Hg8V=FA=(G-Yw@BIn900FH*$aOPTaMQ7FC z{U|B53d~J~d?O^;^7o0b?x!a9#T_ZtZ)wfPkD#{imVV%)N0=Pe&iL{Qx_$`0>4Bgb z+{Jc+{-(iTIu>xI-;P0(3G4Q>!)Rs=3z$KC&(NaI(;qvtZZT7n9@ilpSV#>-mPxc0 zu6_%T6H{Yc2TLMNkeaH{;LEnoIUS>cozy{k`Q?79^Ex>ei5^5`jE*&vTfo)h(7A2q zE`#3mxWaJYZK@PHi7Kju)XbNrnSq5O*baUL8ky}k(#bZ`$w{1ne* z%ChEGr<9UdH~xovy0SVKvqqIPcNMkngwhB>ucnSMB?;h=gIT@@%rXOWh=p0+2D4%h znB@j$xrJHL2D8T=Fe?nq?JODk*`p0+&plxFFfes6XY4)OVD{bvCJ9#l z&mJ&)8<_Gp0%o5!nEm#E$%@!|K2rZtk$p}?`6$)VOkm0t!b}Ct8KO;iv-l8EEt}}g0l+}uMuhuOKxlja@b<2%N zbFAGGw&Ud6aHI%ZeBwLAK|;!RZDmctX|aQ?VT(wf!1{_nN<<`**-6A*9jU@%XEmqI ziN&edo!uho-x|Bg4QppoBmJ+Ya07=wCDyZ+F&ypLe0uz5~uP5~W6F>DZM2pKv(3@{VZua-weiq+FB#8?8&AwTL84c@(CsY~RIUK;+#{}YE zu7%AEAk7JlS>rM|oV*8`56S7r#39Ne!hRD-Sr8yZAV{UY+10QVWLF!%+U}lPPr*r3 z{Q3(XLbG*&$A6QeqyHo0vmGJ$>WnY>gyGcd#-lboJLlIBZ#q;7qqk&m1>alw)G;tB z3|GD-+rQag2pKkddV>0q^ibp6Ci4WWyxir+1~gK+$oM+xN>oa#aCM_I?F4=}v-*gg z#@5jD`^9^(Dy|KDEFT1=ul@=SW!;*z5@nDQ`-SQ|vwDiz#U65I;ZMazzw%3Jh4$KR zYW>U9%9SD|CY8N<#;aSHHvNP%>o=B{pUtNq?!fPIpiDoV#IJv}=x+=+o!AmW7i7V9 z{L!-e3v7DOE@#$_yDZm!7a@!;+_xtVz7VS=QZ<&GVXWY$$~9M7t{JSGpu1l<9p+$w zn}hD~Ft_>AnK4IuTxvMl#}!hoM=({YS{A9q`jbno>sXp()=qX))H`D}b3SjRbWEH} zOMHQ;U)#dUN$yfaxZh*8BjO7M@_ zvVzcd#9fXv*1|fef@HeGw~#6(X>c z|8t2LMh5#(A_+;E0d8bY^zBB1%}~}X-xGbfs1)h(K*l$WvPL-ITB%lj*g{#chAuu- zqP58Q$~yuZh%8o3A3p?^BsMEOYt@$_w(Yy`g+^@K_Za?lrrkH#if!96OFv;g{iS{{ zZS4R@#IFgeB7|`cJi%EbCNwM?j6OSOJ>f~ zaTy5+ISAc9oN~EtC@bwlhgeyBeTVGJZfynXzsu^^_7IqM!0!Jyf$2KV+y9%uG}x5< zUj!yacmn4CATVv>_)kCo2Z8A|Q}TZinC`bQ{|AAo-opGJ1g29g%>Pqha;A2-F#o&I zBq40tVpff}kw3~0I03@i0AVSg*({biatkuV;5HfJZz%twscG$Gh#9;?hG-d{Cqvu^ z4}|ReT! zW7tA1>cZ?XtW*C{W<7Tr#lOz9HwW7Fyw#q&wqgsMT~!PD)c(kYZH>-hQRLQJ2-~^a z{#i@BakPO=CM)Mb>>_wnIti~94{2KH#*6Q+OFCkJ#Kg&I!5f^{Kq+Ftvykc)?zHmiNap) zyTdtoaGt0DTxxhJ>lFL?w?p`s?IBW^hKK|`wUzj|KrL$nSiT!TjvWAemvY#jwE^VR zvD=xa+yMNC1(?^v9=ieL%mKiu24IgifE+n?1K7g=9AyFaZ0lj~-2ign0N`;3VDC17 zoHup@*xLZ?Y613X1K4jjfSfh}_!%~6sp0*6fDw259`O2cqN`EaX$_S1p5sr|Ycq9! z)UbL06YWNey$mng%VX}lx_*-vW8Cv?)`A$(crP+%DrwK3UILRrBTpN$fFFBTz@8P! z9f#gOc{71)_3zQq@7VZ8R=33HkVg?3!pl7;@f1I8{0PqYe>6W<1(p9yVaPbbr_HN( zgL4hj$EnvzjO7&qRj1%wF1|Q(T+Z(x+je;Q_WCW}x%^^@W;Ismu*Og|_!6tr*8`1W zZD$v;SI*j=Cpg~Y=!l)Ua;mM7Zn)&Ad85d zb#viMR;!lShXai>>l8$XfdM&6Kg>Y1(Ei2}$~I|7CrQak2G=t!QtsyKFXz#}0`CyI zWBAIEzyzz9;}OKE4G3=wya4s>!9vSAr_zMElC5}?-qmJ zi+nVjYQ$aR9nQM8Ae9IO!b2k!oU1M&>tri>4OFqrk(759ff!DDpK!e))+MK}t_aA| zw~awL+DOV^^omy^T?4zPlYFL`ffEyh%Zv9yTSgU&J%K23sKkvBmiH({4IJq z*-v^niH4a`SK2^3JvTb%bt)RMKiu3%jK$h^FnG2*jwJcc97g3DR-t*MH=tY@v~0>{Bqd1B@wx5>G6o2kg^;*l~7gin26Z?{@K{L<7)N&!;OeYv~}3 zz8l4z^Z@LC+9{_mMZh!79ZVJPH~e9VT6yA4YQAJBbCw!#zqPtx-de&A*=7r^$g5^s zSva)QS4%W@qFQC?7|o~OD%lX#>WmSrKJRoj?Y`bN7{lofw@?G7oKDi-vlcb>%}~9$ zpEtpm45PbC)9{iZ?i7zKDbi`XZ@z5$y%IbdRyGL4GXU;~tOWHGjd0rV{?5O0rT^Yv zmod_wylF?bj=B-IsrhxYgM`V-ERVcX7~UaT?Xh3`!@FHayWH^JHr?JpPrMu8oCrS9 zomZScCfV_Of9fkQg(Xr}pay!~dz&R@)}UcW@Edb8G8wu7gKIYz{>9LC{l{RITajU~ z!R$Ka%`sfCz=S;6cG-n2e)cyeDqG0=5_>#LOooo`qC@H!QIdJRsBH=il^+N;ENOck zDM+H>4w33@O3Gms+p$YDcK<2^V(Ms7;KLna1sNSzA z__D$w&1-Ef#zLg7MaPm`jyJBm$vkeGPlFlMq>cYpk2WW?ET@DjCnwjzf(oZF3izGVY=ZAAk@&Kx5k(v~# zdEfFUIBycQ;#(&<(>{V=>WDFt;OdPktk(>Ks3OKjit&%8ENn`&N z7qd+Kgn$BbZKnBHkzZ^Aq8;ojx&mMv$1j@Nly0 z?ck~#Z)cxe4Y6gOMC)n>51GaGr;D6^(p`@ZRWBiBv1XdEtRkod?3l08;ynFfDnrhY z?=#oLbeAt%#8^*A>%B95)yF4U)yH8!mFgpFVXpZh$)v0fhW5n8{cmVCj8D69u$Q-Z z{OdCH&s+}bL420U-eCiwH1fj+2P#o;pyC&15?N@@yUK+6{KGai;G1B;u-;D;_gI&v^AjXSxl>cCLlVa)5eI zP$;L5R}iOv-&at7lC7rWe8d3ZT$&-{n7U;w^t1N9zLjnmR-`~sC7BaPe%;!9&pbh~ z!Q*~do%y^O_ zTomG{5qq+mB6eU`8m-()J{8PCmc?5Rccv;nH74wHw8LQh-`T_f=%qL4FZHIYdDC5Q zxNFjz{mmOkr4=iHpaC~+B0iS%!1N`31I!Q(GkR5ESv0ULGI}Kmcms`?QWT=5rZtE# zlpfhJZt#O)et+R-5t*ddlutuqmOrj#cHw?aQSoiWMiHTfRcnKy>^g~YPVuMdU0 zs7eFxIgFI)M!U>yAuvsc_!nKwE$WBIZ)~;EO&9TGqMJU=1KgtISc9-XA~wA!(MeWk z(+5MHb?GQ4YLVOcxX>L_MmO50F=`&k{-B%*b?B&dm6D;at z0`pa_4XymDw&6VE`jJrlYRZPw*SD1o=|DkA_x-wtvs+Dhvnf79Cw7P1!!HZW%C$MD zi);_(jiAO0J^7RE$Ek0sB}xX~4>p|KicRdwufz#Q0{2Hsw`5DVg(8sn{GMiP2VszmJ=7Za^_h~lBGs=rNr`1rR&_O+syZ$5^wlz2Ar2yux(XHz zY8?|vU){23P)pCr{mN19oyO42^!5S!CRcda?M!$QqAurc`9?}al$!&Dnt^)nrStPbOQj;ty&@BPdt ztE%HfRznS0Rk*A2$?DeL8(TNeFLM(0Jj6e#!6KRmY4XZWPREKYX(=AOsA|UJ>QxpU zCUJIFU#;88;LE?&6uxkc=HIE^R@*SKbx~bwPcHsj4XP6FfLsuGjQ0i)?eyo&YjBPz z;04iwC4;?#PGm{tTG1zT&@jZ30Uk-WPNz(*`Z;4+Ei#U6)YuG zuN{Bke+R$Il-_0NhSI(Md+D8~^iIFDlRgWon90S7Hyi9^@nP1`h};_DvsoH=_njqsl1Da&v9om(q@?c{R4d#3{e{uG}-!aKn^3T4-LZ%#wT{W$(eQ! z1x+$e1voouj@UC+&PG#i+4N<%Z*PT7km0vVn;T2SXuRu)S7Q+T7B$#Ez}ZZm!l~nx zv`u;MaJr)n?|BhnLXFPU0IOz?P>Wba!T^g(Y^B%~dOchGV0>ZLQO$ zJV&cARJ~!ssrU@fB^FM65u43Nk-g?OJJlZsoxe2JapX$eMkyk7)w#>ED;5bZ6R7+! z7h)ksL|%teAEb+T)4 z_Zr{6cfF%66t|2ec;-F4gdrlV2VKm^qwcGhb7#ph0flB}4F_Ev^cGlsGNnr5Eqli* zhniSj3jJ2qcsY9sKBk$cDSP%=kW%bWO$gCosArln!hh9@On(|`{t#IlzlX_StY8=d z7IqRln4x;CbBUXcVRyGs>R>E?i&enhVjdi0=Q#)aQ)I8A*3%@-e`|Igl9-RAZfs%e zGXBmx2l2X=tDsyyAC4kK5F%*4IgQ9+nT6em!Io{xNt7GfT}U6+pEIiUW8e)HJOpFT z#;walGe!J<%i9H3;ZG(fN%nk`ngq1g*ioD%THgU|58wJZcEmXm9RxF+WLiJU*DtF8 ztAq2w2j-aL%sOcD_L^AV^nj**$KG_LGwapX@})z+zf}5F6R%+M#6Us)z6}Rs+P7%7 z&i&2n$duD+ezGlsO=s4b=)4C7($_bkOFj0ckI><~iEZxE%w`J){#elb@9g|t(=(7C z&(XwRAwW&uz?2D{=2QQ{hS%cupfs4D9eWqB5k`87R9yWos1X*KjGIC=i7I#y4>ihj$K75fkXh>M8uj>*=9s z)U>aj$>BNsagdfKAxtoElWk;rR8Q0SKjsxV!e&=Zj|yq8QsA=+#nKJ@f4ZNqV0U7{lL}KwWY{l965kKczeFq7fGVtneY+^4$ z^Xct=MB>SWT*6T;9-ILsFn~#BbX_B@zD3){)_?ewu@LS)90AXV&4 zzfa5&^G!l3rB6j=K=_S87@xyJ`975RVWHIA@>k86|5ZL)|4Ph}h9i_yk>Tiv7)1@# z8hYm6KK{Qo=HFQPNWEmw#~KJp==Gx|c+D+u1Rg(stv;Z}s?g5}?LEW4CZGp<1_Blm z+!7U`hI#_}hZQ-AI=w>aJN+yk@S}kR>y6)C6QgWn=Ix;hTYszVIa;+yM+HSiLpA+u zn25yhGQZ^GrldbcQxYndXYX{QS)wGDjl@0Mn3-%!&dq~4NhP6dTeyA zS0C&@>esLFzrUCN9h^4^fx@}{4tmJ;ctYmc{9>IZUTn~&2BP?{-jV;Yvr;aL1OT9q zH|e7h7y}uNq07XImxR4+p~Wh6I)y?+%n5gtWLbSh(WH-9nb`>m#d#Zu>Y9R{F@MK~ z0{=4fAFA%_%y=Efi!?eWZ{zjlq12OR^$@Iw=CIQvOxzSRe!n)$pi#eb%c^5%yZR!8 z>m~kylXwu=-qjVxZW!&WE)P%_ABYe1VrObUrY>`LR5R``p1h7CT1Hd*MFMx&j`rQh zx%KA)b~-Fp<<&5q%C6*GAEN2gioByJ*_x#T4`c>UZ;h2-7963&TSy0-%R~fygpX@8 zwK{vDh4y09!r4&Z4IPMF2_~n^xt9^Yh#UWQ{0_50n8W5VgToz9pbed_xLwV>63Jf+ zO=j|h~sbtoYOru?{kq<)7!xlwvi#(SVrb^ouULa{xfy?OpO3CXLp;R^dnA7mkFJO-yx!q83 zPy!ilGV5$mhv%Eb0>=YRR1QPK0f&7x5|IM|50{0b; zC!Nfd{JcT_`&qo_ZO8c1Le>)?4s@@mXny%6BY&-{TG#BE$N1;l;!BI0KYa-^{DNj2 zq-*G3Bz=Cx@L}5iATz|JWuflNh?8KC0J36GAlGcF#ijfvJ4~!g#Y@l?6xPzJL(qt_ z2$fuph5b$srAv22)3t|itwTAXWN~A9lbX55w7-}8Sj_Fnnw4IduOQ&db7;F zd5#^)3-dBx{!Mj}rXl2Zsqf^iMGoKXzDno+mx~xz<`Zs|v^ync0!=2+4~!VjE+tJt z9=yD(K$!B4NPC-OXGRo}G<5~ZvW;UbI+CZwXIa^BoQ=|9)b8Wig)(6ic!152)Gt+2qaG)B2nz%c zc;a};6KmzBLJa84*Trg`EA(>AIwt_)+Pax3Q2xbZH^#*gN7Fk8Ul z3oB@xYs2R6+RMMip%gr4ZKkGOQ|EY-X$ySsq8ok}i!!B@v3*&q?u=4*=*H2ePaE{= z@k_OCNfYY6B8zl$VX7&b?T~O7?a299YJJXJ{-t!76(r$fa)eu=Em-$Ez z86n_9oU6oPRdk-+I>V1-jYT1Uj>kD(Xdw3D$N^r z*B>d}BC~uA|JRKX>X5P)7Kz?M@s~_~UU<2a9B+EIA@k>Io1!v#W7Ay5_Sb0EWY{SZH|2I}1&SK^8AIFN-ul@)=VpIMn zTs-(gxai{J;#zJ1+T+42`$1g%&fsD)eJ%(N_p=f}@l48hrotvM>_mp=$mmaC>6dOj z4SeiM4Jc#j^zGE=h;V^BpbS^K4kDKkEagF*wU#-_^K`IEH5fq{i>9lwxFuI)e+2*_ zBVOvz!vIv9I%dny!v*MVYt!d*2XhWl<&0^HGyPLq493?TTUY(T#C>RY!iYjq2!WvB2^BHkFm0oPMGe+VQb^56kTWs?6i^fdDoSZlL77ohWPQsu5dPF(0B~UE&?r0xrEfirx)Fb5qVOMkw(nDlTf+!7d#gbe0^$ zCVdu9A6a|ws>_e2WSsL5VmJ$6G`;yu?} zU`Gy%q<8GZnq;t zOFDRD17Fr!n`|w7yr#0P{gV=el^SGPlWEuyCz{sIr8N^CPs+RC5dLt+srOO^1|jIR z|4D)9!hPlMa3@&f_rYwvcWdsuuX7eb5}8TUeFRvk59o{k+O>xi1jV$J<5x|3qr;xQcI><;YD2A)-wnWLD)O8m#k<_yKL1 zRXK`PIf6;MPq=dy|BcT^8s249KI1GN46a@8lyOv9H;k1jhV>+gP`Eg+iS^_pf56+I zCRUx6mvaXuFkI?{Bd7|AYhf#hTo#!W>c5Om#;nQ_?;>qyZ4JQ7m-yyg8iRXj(Ej6D2D?fg0;- zD@2=|#=Z1Zch^~b4FcG&;w!mPbNu~d?XKRzuUh)>j7C8n6lA8CfcJhd(a?2v*^csB z>&g3=cJPYg5Ax}USvTGcl+qXiaSK&QKWuDJu}qeJ@DBY@JW)$Oc!z$xY2TqACZsdB z*WiK8z0w<$UOjg6LG)uZJ^3pA=$MO1oyLeUG-QZKh@v2#IfzHXRZvkRB(f5Kn0iYr zNy3)kLTW5EJ{^W}*p%1Uc+*&~J%iO)Kx4h$;?Zf0A0rCFVWh9H`v7P;h=QC*fgA-H z0y?AKPjVmBJzT_H&3K|9H6aE0)zycf1YR4+OAq>NQ=uP9lb4>Q8b|!bP>pfoL|PFv zL0B#TqQZdl7u_BPg`E90G-NUCKQt@qxn*31Tjnp`(~75ws&Kq{Y!E?L>^NxlC zZ03*nVI87snoieJETA{Mb5h9Bo9ua@!=BV0BAv#02EEy6OXUOrGPSQM!E#h=qs}9i zcZ(lQ+du3U&AkF%qL_cO=Yzqd&$+Ni7RO0|9s&5 zxQh-Y=D>-JP%Y`uIq+6<=u8~d>Cib%ubhl;QE2G!R7{VSf+E+;^~gy|Rsr(@M=D!U zDfSIitAl>Z2+t!`qfS>J-{&yhe7l@n_^W{T`>-(r)*oi0%h;H`gQvb;+$pL4xr3~g$$0k4B1reBN>>#z@Fb81^ z$I7EzZ#pm!gJWsvU#L^2)FLhI7goxQ6({jcla8#huao@sQNq>;THb-u2z{My%B1!le>n0O2{I#WC590rVrjC0 zOpTz~%SQtV)@nGmMpHv75p~MpSQGxOmvR_ib^ixH zEC_D@4SX5Ehq6GUSei?aN4A(FP=U#Z`s4L6U6&bhqut-rsgeQJ1l1h&0yaPfj8 zqp$$OVcdHuUuUE-<6~a0MHKUDE+>}`MZ62jWxScXwtQi`WdK$li9Oez)48!c{dY6S zM_fdWh~dm(g~~Pk?2R%=p5CMIf;r^{PU^2_ws5!}^h##0zqz?5ASXClAU?2h@+M@# zy@xvN#|47p+H#y@2A}z2Ul^Nf0rhg_Sx^nSi??S4?IYxSE<5k==Wy*$%?g2?R~M=N za31QI-YQa6-mxvv?Nhxt;_q!W3hXWQP*^{gp=NzAK-!Yz1^)=J|Q!u*ZV ztVjd+O&?Qdn~!c)$mI!ZqTXmt#M8eUWe%<^IdXb|e^$^+%jRCHSn5y=(J0TTJr-;g zN-B8s4{y@=IgR_-Im!BU*8Xs;nHpxm3uM zK=xwjt`0Qt`-SvNL9fvn-!!@)aW&2$S>b?@2^gUsQ2#H|Bu|+spLO@KmKxCExy0Sp#3VIzRVaR*iM{e-B)`DPkl2ILv2;AI7gj1^Dq5v>?o zQ5g(Sfz&4*^rAzkVV7f8)RUC=oBt5t(yV+FiJBNnd%2zB>jb{neeosSl6s_RuoV2s zU7*ze%S~nn{-pPX97b_%h^G2*b=C=Q@~$oT#|p~P+MxN#OsE3BJfVw|9A$dM4lEHc zn{e_IF*J%tlPB!ydxRDCEIGjn&FYjL3gn#RNxTK0^kI(f*a~}eBAw~zzmbN)Z=Ayp z^{iHbB#)R=*o(kjFZlp~Jx~}w+4b(!-FBR%r>pD=AHQqWv0#}-s{Xmo!)L0zhg@4ycy-t;QmhU(QaL8`gn;g8poS;GQxFJ zqo=qjxSG_W1$;haZibb?;pCqgm+D?~wsZ)>#r)%W}Z-UwBlyWJY^Wasp9#nbGPda zTwCz^{Sad~+N#tCPVXz}|L!)oWmxHy`f&vV4miE9E=yZ8f|g7S?_r}uaT?CF52HiT-yedOxDK~2CFL!!_D z*Gko759$YKIx02s`FIWAEI!tLvsZ<_nVw@JH3|vYPdwg_noe*2cQNSwgm#CP2Zw?Y z|6h|zSR%(T2IUlC0%th)9pfagfieWM_+$3-PWDD@gOkg(Wi5Jye2(eADCNM2!l%X} zOY%)lYInU!Bo(u>nFInL%McA>;oPqMBt4_O`Te50^cANNL9*-H3V0m#W|bfJMyI)d8FjWQCiNNs-AM6xg*p=vTxW-#;>V{Juj&Pvhx6r!#1Mw{KaZOXXO(8|k$rD*;VF!N%|A@!<8##`i9m3c_DeSJ~eisGB7s_Y#bktXvfES3sgr_Bg-PGNicwo zWQ_DG3?2+|fLcgVfSr}%KeLBUbFO-te=j(_@%wUmbBCv0#DizzY%10uHM0W46gNGb zd$bBl!Em4V)zjv;yK>=b`szw<;7rZz4=XzmG5{Xv6x~vH{s{38c7Fqwsit?ETL2;0 zPkRkDU3p>l|C^kcS9AXx>JgcBWJY0-xp|ZGs*Kxf4y_a?R@_LD_9MFKMJwY6R7CVP zjnrrg+FX2i`=|n}gwHLE4K6O=898y3%mf?o(MpMH}B51*Dfsruc zj^G$ia}f|nfaPyfOF^D=xQX@*G}L?7mm@`4vojpM>7+$l&g(B+1rvC&n!rj? z$>1t>U9mP^jn|7MxiNUi6ewPMa(3<{4lxlNf|V-i)%;Nzsn;p_C<#apXYifKN`NBj zE+%i{uZFRwduN_c1{G#gAv$AoW&05eRaHp+vQz=TY6hu5s`y)KAU&_We#Y}0HnC=U zI&&gd`<4h^E*mebJ}`SSmnYQE*ijiR#9Vt~NqL=IPMa(1s#~wy5-VI^mpb$99j2{y z{NOGel+%lbn#T?sQ&5mNd{xVnR}}bP93Rg7Yxp|m_I0UV{%3AMu$69L$CLSA_U&&B zBj~`bH7t!_Jf-s2m*@u;XrbD~=&i>a^#^=K&VhWhs0kN;M6(iv#tA)`p!Teg{83lf z@_FT)kS6owHq0x%!dWtw$4G1PFLV|Y!t;3ZSWw=b3z(sUHgSy_^Tth|5p|p2DXRWO z`RjjT7L}{|!gYFa2T#IL!BK*D4QvJy3B^M-=TXTCV%~~U-p!=HL>`k3E6RAMk?#~~ z2|QV@(pnOK7Ez5&2JRB-sAnjeqHJwGYF|aS86Oc zWyQRc+|)hFv$uqv1dk!)2A=(~l0 z9NH0H|1-pA<6oN1_%S^$JJF^eWdnsm0R z&z`O7z0sY|RwsiUsiTtD3UICcS|EsmbRBe}ARVoBZ*#*2_hOpI_HAp)`bf_GrIuM=QEcE(ayS-~DVW2mj9y1zpJ=9G(PUGM8#L=tV>=w&S$>l1^U?i8= zVrUB%nPNH~Yg1Waiv28GY`QIm65$7?Sd4|PVvn0*Kh745*kWCs#_yS8#`bch%23)L znk{y;Er$QZ;XK)kH%EALpW-M1QK^IT@K%|Ids9PZoN!>k`X&aPQRHG+l_oX@TaC$m z9kf;pA&N}g*oS}UHn-u+zs?=7j^kOPf3zr3o;{q!yo$3$8|lKk7e!t{j*4-{e{rd~e8Q_a6L}El0jA>C2`C+Z@v;OF-?p^m z+fH&9Jq^A|W0W`Yf~f97e4Ke2l^z@;c>e4#H-+;U82yhrCf4t!SNWVdYEK3}|G}p@ zGwUWfJ3k3&5Lx(EL1|YsRA1`HNe&0TI`6nkTSwt3KBjP3$`ZuX5w23SDnB*T=gHCh zM7gp0!w1gcysiFb4TrB59 zEX_W|Nxn;O>%DX7(#u97x}Eo!Hy>Yviz|aaQ}_e{>eg6r?f)=TcaR?D_8mne%I7@yZTC~s{Z3L4MxuEj%s5_cwbGn3jZD&$o1lYrGnAmiVUpNoj$ZzyE~ z`bbn|B~vn9Hdpo-$4{%ls2ZdoC2{%TIgLM}PH-i&7w$t+j&dhCUClr-%llYy%a%iB zqm-i~$>o~Lx_HI^fcU9eOfMt24~{3rEFa0zT*=aEbF#E5|4o8kio}?0-wM&#-pxcs zD}YdsXID_w%D}qH)btNqC!FZ?z`mUdh>#S#W+n$op*A5nT}lI>y$%l{U|DqCA^Cgb zmlU@$(2sdCyF5XudF)`ew&~4#QnSRHQ8sA*!nd`>$7ZZ8iws_FIjvA}GaJms)(T;X8z2Z3-D7;<)ETRe>=c)hZZ__ZpKg0gDPCbb@sv#Y^ z;`wepXOUP=V&ZJC=B|%N6)e!m62TWq-bbN7Qk_@)LeZG82ZL}! z^4-)ZPG(j}GE8$srpMsFe}U9ZBM5ZybmBtkyuywhZx8Ip$FC=`(j>}j)x_LAG7gVz zufa(!G9NdB(Frko6I}$C(Cq$P?_DrO+~%L?NTmIR%x?}lPm2Op4d2%u%weOHyvX{$ zX71H#2!fee*ih4*o)kEZRx~*qSl}YgrTD7lc1`+E^ePAjk>FqRMsY!KjketE_aoy5 zH9fw7^(_S-ZdxcnUmCY!9Tg>W>W`su1=2g2Rw_=;eI@ro6IjA}@c%K{+IhZOA|_{| zB(1Pj%XsrY`&4Qvdu!m6B*?s;C36*PTNFS7MRWfR;b&G(G1O&;-CTBO=Wi_i3y3Q>=wj%R@v%#H(W-X_n`GsyVf~;f-S(c9k#q zoM0_&d|y!lxAQA!{QKzGf_asb6L;W&Hi!s`@;1jsJ>J+*^IE|eY+IH@ARPviLdY|3 z+izb^mx9qW!Yu26H?JQH)Sa(~|D6YI8%Bwq4?m1shi0WT4*bIphJQsj3;%yY`2WT4 zg87w`<7YI~oFaJVUyJ@Z2ktQ;xDo^fa}Bup^lIg|oGT0bbte}~`4j5P0ivO1S3B1` z&Bu02@AdZr?i8$7j5iv9~>7e|? zcd{hu%$4^s!~J6w$&D=?kH?&nlZb(c^CqlWsTTcbwrTTCv;;SqmTOk@K*8JR2()TV zX73i&?HK<~^2a%{o|Rw>BeBqDNhSuk&NVSLLPtmmsiW!f@{Ph7lKT(RmvH;#)6sOI z#98TQz4&5I-8K=+2#%4k2<6fAg_LTlPjk)@%RoMU`}pxi8s0lcY(N$3vJUx5g=S$a zWj|k!SC1DuYK1P5f7cOPghpPD5)kt?5k@H~rca(*<#<6#XeVB(;g*tud6V<|YtA=r z_IxA%bt1Q(?%ckF0Ve3?v+}E7(5B0)8r3$~kR^b#tXoxgBIZypS~RmHS~Q6Ruz2-h zCG-Cl^-ha=T!_Je*p-n%p@1s{rs!Z|X#aF5v(H$SG4;O2Kh3o7dS|)SXGfennu*`k zjC_7`r_T%?R^t3r6hHIx96ZjlBdb;~s;ihurA1>auAyFL9rD$%y`NTWG^n{Fbfc=P z7%w(_G;*p6*YEba7&D$?a51LXQSTdSg_Cn?9&K3s%q&Ji2!23M**>lW z%i#yb1$UZJ4PUjb6c2x(Y!fe{nFv0UV=Lz1xn@2yMcmVL@m2E$Sas z@q!uVE`CD&b?fl{io?>?5RS6e+EU(bKw0Hki<=+~O zo=*Fv?e7!%2%$S{fB$CQ=8tyM7Z;=1&^=US)JOuoHy^{@sH=Mmy<8Jp_TL+Dc)?I>7D9aYU)gcbL$C9#*CHXuVjr`$oc*{ zs_%{J-`dPL)rKv2wWYA3PO_4BG>yZnoZj8|9pyT`N0#z%@pz~AMddt9p6>LXRLR2+ zQFWe&#E=Qtds=PlYAUbcrFAv?|Mx_rh&&yN$|DWCs<=(7%4xjUWNan?@OYy45CHhE zCShY_;m*6M99h_=9}JvL@}|hbHzZ<>Ec{$Q+`6L=G$Wip)#SfG!%U8SWhli-Xn5lg zYbVjL3%2>ZDhd}k$zSoevn8fka~ zjD21ezm_`|!O9I-xB=+Y+$47|_=k%W8)=Mx@ zKXqb71-kSpvDD8O&_^T4Sp!yW9Ie~Hg@g;0Mo6q>SnmyvrK+Rs1XYq97!kAX!6s&n z34?%M0b`Tbp{^WK=TLzrIYZrIn%oaP*h~@zIMdyR?<4jc1}B0A(=2Xr9bI2Nu!1Xe z$!{5I{D{%H!yR$f;g2y`KuTk*ie%@GA|jt3(&vGJGn<0sx}KFM{pox2@$LicpDTj>{ovblcoLS^ml(+hBS%NbEE>e!$nHB>~w^QeG@f z1`vLWyc(Xly=6%;JYNS(?zF_t-vA)pt<^QuIo9` z6b5+v3gh36ad50hH!t_7IL?eWV4Z>N8r%N(kv35NNU!JaQK_E0CA5xKzc_afBqHvZ z@oy}k`QTp&qL<6pzhUR+4eLvT-Mn|Kkr4DIF|RJu?yh$`dNK zR;Tyu>A?a@*#f^c$>QA1ev*30u%jkQn*5|Cu6C!+t8kll7x};3RBSoUd-iDr-r0}m z0XBDK-Z1)oWo2Xm*N`QvMK-2>NN79v?r3V_XKh+PsgKR9tuKq}{(vJ`7Z_jH#?r@r zreQS-sShbJqI%+SZ3ze4?y6CPV`XjJb3$uKqmOOVL9*0!{{DsE2PmRM@71y_0+3MD zLUUX;iK#r(l`u`oS7|TWFobZZi**}?4iL!$dXU@Ib`9VYJ!G?fMg`vZ{h~#unQAtE zjVS`Z@86v*QgoVvToiKfRfwlI06N>w^ZxAoLaU>N+bKjWmVf6Jdf6YDUuaFV@D&OX zkmattLOc8c`GuOIgXfa`CFEXomi~+vO1GP`M_CgeR@bg z&P4tK)hoK%AegW<^7ymiQz#ZK+~H5j%LiYZ4$iO5%Li2w*mkO4o|g}nes*wvL0*3G zyo9MsxAy4UZ*_kU@qc|mv@p>4cbmsy71$3%(*uuJ*r2D#kET}F7bzV4kc#f}&dLV- zA=J;yLQmmq{=F)MWIHTaKX^#R+}AswN0>r{rhaKdF`)19pW~NvME_3PF?3~Z3Eb7( zrwA)GcP#~o&tMFZKV;cuc8+M6dvqJt8Ar1mgLaalSlXKCjI1CR%aHVXC3>+fZL|`5 zu`Qa4ZK0Lbg_$=-V^LC{g3Z}|AuwZ=d+|7(!2A1s9))*A7N#j)6+&0ZZ*Un@B9{7S zPO{U=hFAGyfl zp!5-ogFx=09roiAjF-FB7jZOtlZ!PtZq(Aq{=^jvJ|BvGiX{^SQS+u%8GWnb=t_XY z_%1FcZb6gqYK^#4dr^uJ{=vwCk)-***?TBuc@n}(lTD1pv5D1r{FQf61yzt7QzqT@ zLXN!YA#2Aov;A|QW$uI`_bUXKnu(>ykEV^%*wm2~!_$3wj7oRifU{%;k)@(jVS&e2 zM$>)1h^1=bdq#_$JPn{s5>?wBB1Zeur?l2jr=&Bt~ zPteLM=sBH+r$u*v1~2sP6Y;b8vEhuo?kjimmC?%tIcHljXQ%6 znEc^WcqOdFHbP23}2sZ z;g_nrg1?1iC~A|wR=s2X&fp{^Fi6??=&!o`&;rdiJM}cknhJO*wYyWVuP|GIu!O%* ztrXcqo{FZ1fcYk_p80U@o?yS)^Uf=E?{W9eWB5igDTkVw)3}Z-Iv%X%7pu4W>J7IX z9`i1$9N`Vwetv51E2Fv8xiI5Xy9!0V+0~`bsIPv*Su9Nfe$G2br26a>Ym^BVd=85t zX2>9YiXOaqu;`4muAZr5k!b=AOP>p=+Yp`Fgj}geQi?@qkj=`d#L%oLill5_H@EuO z?ula{tgmVkLYqr6TV#af^d4Fnw9(r^O_A!=&f)uGRATW+12AoA>#b6ncS(HTzmRs^lydO~R7q0;DI3J4SvMTJgVwtP z)=~R?~jw zy-xcBTrBIJPyR)8L)R`CeHmLtE!SobFLRPDRK|g{9JinTXn)IX6jJ!E7e!gU3rgH{ zq$4Knuj$PQ*%_vLe(V;mk5+%qb_XtE-V{S$!fR--UiOCe*XhY^m{EzLwXC~20b3`+ zhAMEpO9V)fQN8iy3gRc@U#N~T3FZ*O#|yG<1MFm{afo^bNUa&zcg<6Hb4jQE=0bo@ zrO1f%Knx<^E{dhcjw>KAzJd1Wd}s%17`^{1vQQ~9zoIcwb)(bA6C70-iwTRe?xJ^ zNxI&T&6soSv}4XG@GE2f0Zkl?Nk+c&n3Lf2mj5bap6p4DVABU5W$8C3-A!Lga&+8k zeg^5@irLl|=3iXNV9c!|D*QD>3e}Yb@Y0hSfrpv-p0Kd%0O4$<4edQn=96RAR0OulHPV&?4to@ceCPF5dW79*|qV zyMaTCw`1XM13VlFSh#L~g@A*mmK#}CBSj%@Fe4-Bj0q+^Z@3=lma}9t)i}dl7;S#D zXhgc}m}p_MTfOg=$!3>=bX_M-)vQ`KHHHy1bS$TDXWd^|pYHQaec>k68j!6uEv>FAg3Kjkz2Eq_8 zZKj5B&84>MMamhsu>W%yNVL$$Qq=Wk(SH!bbzd~&EPhyx>FzJ#;0Fc=eZax4B6!>D z>cu7RbJ7n{DB5siDFTBvJjT+Oa@q9-+~T^!SuFWHdDy3nAiWFeTy?r*-aOK33ldmu zuBNFAT>3EY$E1xfAc%;99yDkYygU!nwwp=|;_qcjJJBod2ajU9_BGfG#~-Hi{PY>? zqJ>;F3MwZt^YZzz98Nuy&T{%YD&AWt&C08g<79pt^P;Tz=k5H;?5a=q+^E4@6Ggoo zKL?5f{%X;Z+iCA-!f79yv7J@OWMJyYIFx#IRWzeH0ZF$LgP{s`Q$An+Smw9vWC4ic z?R`%a8x30Hr#uI<;6!YsZ2wHWrO&dv5{5xpO?*OjJ`6oP!g-9R)wVyhHf-43 z(A1%EcN)K?F>gT9)A1$0>4ANm&FsBgz071m)IftNO)X>&t}(aPn42?#y$8!G?T=Vt zE#{t92eNR;+QPzdVipdWiR5Yixz$w(29B$;J@%{e;7FPV4IFb$!rZC6AW`n`U8SSM zP*yKEi<%PSstmULV|Qc#z<`Q}XOp?GfnzeP%Euf6;@@oeyi4L-n8NmPC7Sv%D*JPO zD<@Ol%GFfE+S0^-sCl%=BKCs;M>S)95P8(%yFeayixjX^($$m~#g?(S@8y zjRn%_jB2IfMq;U{mCOnSB;4VrXG&HYy8PxsGZOiQ%F4f*{LJfl_|W0B)PLunq4~;W zQ_e))GrDjSUGM@WHYgyUjYp>{@C7|KV0I_W{K-rrcn3DC@~s4*%er8udcFOOO!MYI zIt!TKggM3|zsf+z=@~L`Muk7? zF*E#eLVzK6-~dhXct8yuNOA5ZC|wS~M3o#=`Et1cgDxRcwxZ$l0ZgLdJTKA&-;EMF zDfodVXG5353?7F@-ig`Vr&*WsQvb474MB(_*udpymywk1@o$&{a}4Se-;hr~hgvQf zQzQsZwLMKw)F=MQfgufx zw7#Pa^UByOPB)x#uLm~DC+nL2(Uxu+ES#yrc!F@jsa`)(E?#gbGo0ivC_rWSvE)Fl z3-5$i{wf!Sx13}zHHPfsfBr7&WlabQ1QC)=-9ygh547`?yab{t0&6s0txV0M?E*AB zSS?A?Ow^lHYfKYFLE*cywAD#IY9MA_iM}c>lBH`Sn`l4$=8tWWtSy|=c!?5V2i%6i z1@Ws}hn7~xj|p`5SN?vaWG8t8shAWJ6GV%qWIuxxwpygMKuC+!Y9v7ZyuVo*u!9+Z zJ3lCqQ|4uK>Kalw{FduuiNA0=0-p}(a6NfHwf)qp#o+)<`_mp`{e@qs)E82#S1!Oj zOW*i0!gUeDLr6zP%{LUaZ5Zv0A*CL{P8pYn>@RW#b=z9xV{RyXT&4^p|5`= z1FjzgHvtp))pz5A{g40F@y&k=+PrVJa_yGBd8NTS0g;hLxGAiU8r4(t&CE|URqWT| z#Y~FC&%z0D3`Lj_&-}$qh2hT`O|XKLmu+drgY2?#j8+?CP;j$og9N!W+zAdf*5;mBn*}j zADW#NpcJf`DbOh4La@PSJ38udiT;g#riqQ(KyXpGz13_*E~pUMP@~^Lf$Yw7|3k6` zABb1h`*c9s)OH#Q&Y-H@p0EFx#qTB5462nkki1}`o-XE3hdrI~?}v-QzrXQz${;vg zHKhi#yodiKN^dP@|3U@_2KtN-9ZK;IEqH&E#?ee?^z3o$T8eWTLu{v6xgKgd6l!{A z^Q%^q^*F!q;w9R^!D&vH<))6rY3f(XP3@4UFA8s2os26*#VxCo%g}XCkWlc-O7vKx zdAPb(0t&%^rhAINYKMrS9Eo0}lj5X^P}BMR79oC+?V)z+Psiyh9zqEFPyN%-YNv6n zYNpoYy6gUz?&i$7laEk??#9w%xQJx}@}8&FX z#lKdrx-b7^+qD=j>Dq*mld8M2c3}$~>PjxtGE^?O%>FUhr%f17@)TZ`Jzc;4-(JsR zp&Pc_QD4KaREEZ-C@Z+&;7#PNUiXt1O~HekU9=Pb-vQr0%%?lU_ixfx-4|iH zcFjU~_x}aL`Cox>KnUSC{|^urcY-jFzX{h*Hd^cm0aSZF0L{kmGrN8+6HF5C7(Q+l z^MWj{JN1Sc$vSRFRV!9n;Y9&oLzD8KM+4?SeYT|NbK z_yAre8gq@kt`%VD;hj=QJ3@|%=gJ&=V|c2&1>$C*AebqBVylJmVSeqoK9-{a zwZPZ|;muv-MN{X0-F%2#98K+2kPvKn4X+KaW0r80G|-;(1S3my(W2R7QyXL64P^~G zm*{Q|vyVGVe$0Z=MIlL9ou@W6ywL^g|9FYc(6vT{h|%M(0o!S8(gJSSf4H+`sxrJ| z-!ET6;Nz#ZV@N&i9f^``5gXVe1;fP|B3& zxg6`c`|S=6k3$#YKn>^8mkp|VE#lYsA?1y!kcK^wSwBbokOIP&WZmxaKxw+G~Pm5E|s)>e|3Aoq&oR#i0c zJj7Gfq5WIv?9X669;oT=F9lFyF)t7ZW!CvmG>Ldq3bs6T8K zDm(7A7WPa0ftzK0<1BjgEtm#w{xXUi@KmmghS5m%SKL%K^8T@EEOUOYZ}L_yikOtg zH-fZ3-zV@G^f|Oan0O1`FJK!~_*rSGplV{%4sox?Z zbBA`SsKn>+^Hz>P;K;@2f?Q%Oz-?=qK@&{)$bqD;1Tjg8)G!;V<2yW=XsMbu5ru0L zUIX11h}zf~-W%*s`Wm#}&V5sn-6@tTYojkJDU^bBU$C$NA_D@?xnuCBae} z*H;?J7*&S3_GXeseW+^0Z|0!_5Nl`O+Yt}JKWAZEcR+^c!{9T)%MUmMRwqBgP> zfL%ZG*J7X*o-a{aJ~?{HjK|O%If|va=98nK1f1f|w&&Lu6f_hs`i;V|v=lLc3j&2B z}|> zZ0lC!mV59Z#e>2(j7Y3b%iw9`Hctl?jJzw!;=GS#t0Uj9^pKYbb~hznp+A zmYpXwpq6>Fp=P`N-Dqb`m|V^{i9@(j4laX8=#`gt75B;Z9c@1k zXr~~H)rxSf%#gFKAjZ&@_ytCApm(!@$PF5T7Qe~tALDrwA@z>99lRRV-JYE~np|or zgzQ6%`-VLHjZ2OCO9T>^dp{c1vHLQ+cK9btwd|ca)U<)z;z85KB-=*Xwh?a%rjZQ% zt~U}&AoccrWO0K<86dD_cBQ(p;=hV=C_Gd>exdpNKvE>|TtEc@oY|PizqsD{VTi?Y zLOxT{9_o|l@kpQJV5B7e6Z)IDN>%Tq#rRMolLipBIRtIHqaG8a=38$;{arJQ{S$ww zxvNll$|+HfrVKNyXP86srY)LI+p}}-<9lqKVD1hr`HPhQ3wSlb;q9csAqot0^`0oXj>i zO!%e}!sp^j^PKrNZPqTDTY=3RwI|05RU)&>byl5|xzBm*oXjJ5TA*Jcb9K7NM0@ze zxwL!ceL8UMryPG$AG2Kiepo?&!}L!@^W*!ApJ}&2&$yF~`Tiedy`R8*A#(n{3^A}b zm;)>#7Ds{@HWnTESqAfdVDO=Bi2W}>u4eKnqJ8HlX5nOFN-+PXAoB@C-XAD z;UFCEzkXd|LFUh4&Oh|4fp|nk7>j%P)o}P{|Fozeb1QF>xtj4H7JI#bV7}gXG^jeG zqTz#c%e@O|S;|18AxAb$}X@1`{}u3r3VIKG=1-|^N8(fghbMCJaA*E1kIA*y7g&!lY) zvkfaPqF-)&d7|l&X!H`O;j}-C+euH+Mk4c@%BVApD;wndEst1`PJ?|a4uZ#coB@3W z)L(a~!)(C(Ku&fu5s>+o_~!!&v40F4BPk{O1@1sAm^aC;KN%k;Kcscs&o0B%CUXuq z+Orm0?Ic_SD(4hTXVxtc2=F$VZ^=pFe0#^txA|qUqJ*ZKu?>w?Pc51Mzk-HoI1z7L zZ(7-?)R0$YLxK4tZIBo%L{<zJM5-%y;t^tD@YE6~{bRFzslSb-=9>!4xYzX#VHVBl7A-nV zIwNOUq9B}0&g~!5o|>PekS~>0VaRqG7=WBGEIZbe+mRLcn#l^ z-{JkT+YRHe*mOPVn(rykHcpI`qGdBSO0bEo9xMbaS9WlmfF^QX$ zZ?|SoKm-NtdL8sdnlS(V(T5fwMeCBVcXN*K&neZr+4YbALvg`D_8qJ^8?6x024|{^ zeH5l0Aqj`KdBgjgsDzV!H#Gv0%Wz-ceSifqk$FLdO2Y!kg$PYRS;P9m6g3o2z=$kw zE=!E`hL%21m>7-~5uD-}pCT+za5myYR6C(r!k5I^YpYN7#-jkyzCL6<`~A7sYD>9{ zWzPXa?n;V|*)q)Z-Ud27)P{zZq~7(et3*fp;mH?)vJDirpPm3be0qdF4HWvUJ#*tf ze=}#zn~7`&=RJlmqe;zvxeH%5NURkX(&r>_*zn{c^*&xM;pv6liC@t7fi5_nlmF?7 z9r=l!tUTz?9xlLoRq4Y0AASe!w>XPeZxiX-SGe-6r9Uiq{Lw#SIO)~&-N;t&40~>6 z>2$+icKaX2rLetD>cElt10QLBDf8>>c$FDZRE;8YB9k+CS$dy-WR|v14-MZVM|8-_ zD~o;$Afdd{6%0r$azeaWeokh|edAdLOjeLmPH_;n!sx|2Bo)2ai$B>TnO!#?zfM>& z2+r%>79GB?gC@@^_kYu%RB-`BKpSD3v?RN^}bG7XwiJmxu) zE02QVSa`QdY-G+cSezRG$y_hXk}e5E+*n!QdoRb1)JtO?FGV4+VmOZ1;yz4_1%FaM z8&P400YZMl3Q+!EMx`}3D(~e+j$O|tYG$PBx5h+Ks zmK~9bB?kGwVMLmr&5p>PUzo&2Uq2%9o9ocGA%3%do>PQ2jMBnML&#qe2&aap*=O7+ zP@-^wjfDoc=T0%Z_H$++Ol&EZNR!^YGe@j4c=I=Ggy2Bpjlp(5$Xe@AZU2X{({mIq zYaJ#JUL(5pW=~-+I}v~CTBq?WN)BtpdQ!oubq73Fnmox>#5jI|VdF-Hivmwjq3KLo zTu|Unh=r%4l3V?}la@0+pP9wAFLOA^qxmU>(;!O64a$(d>U2Fw4jd|+fZ> z!g8(2(X9+Wrv#cae^U$N7_Rs))kz|+BKq;S&FXGMKF_`c;-(Ir7%{fzTz^-+dhRzd zQyMdxg@DA|_1k}{neY?`GNaKp*Q&@142#k}L`K9QeS|8{4jZ{VR8aCQZ4p)zW7PkTF?(_8uZG_^1iI@H9y6Q{2Zo?TljotGeM}o zt7rTNUt+eEiY&b1&u1GBj@lLxQn({R@rYHqjY(5S#1|$)?Hh42)>%rVYK=){1m*opTXDREabUU zU?1X#MH@_{GKTUYit6syiLaGK6^_r0@9#;JU2nAdwZvO|ZGgVEyxjEYZ$Ia2x*{^T zgHq71$i?Y%57_e)qWFdHEeDx8o!@?E34>&u(=Y0wIX9}zyQCDSOL)nFPV!vRI9&B- z4WSQm7tS*=pq=ELVrreI1yN23nKwtQk9Tjqrl(c8Q!k!aebGcGIYzUK0Nzu?a+k3N zjXwv9*y+Y|55L3M;1VbKBw(o1H^^t|x)|o7v1&A1$v>I&7vhuUJ#}de*kaY=F?~*( z^jG4;-t z`Sur_?WQ=(x({IqJM=9*t68TW=l0=UJ2=$`io~wV=trFY=aB_BYI&bP2}RNA?<_lX z!ROTfh=lZysK1~3XCZs6b(VeBUh!FNF^q1uzNWX6EF*WwWNVDS;By|jlTfuDJtbrY ztK*8OcXgHM*3EcviQ5Bu`(Vy39INJ_qn%X`Q(CKli&gdB)ziVCla$Xm2G?>MB&zA? z=6MsuRd?`*#=&w2J(c7-`F%deDg@q#Uqr(0EPDY_!Pahh@P;P-%lcLwnYcDuM1;Dd zbnK|FzN}#W!#WyqnbBB)j19h`0#nal(hqyxGJOf3OX%<}^IY6(ty@s|glNzMr_$BytZFUsZCEX^&tYIVh5n!3QQ3 zWH?%pm6Q2c#2L2EERJla&T*EVCF#Ya+N!;^i{cfNxlYPi)&vb(d^IS_>+WDqv_Eaq zy0W4|3#6o!^82V;G*(xi<2I_JSfxa<<^FZQ6zSkeXEu}u&1q?{UCJMs5s{LW>jnekiAXfHq<&j5b>!bj~K(_foaGQA+bee0q@ zKda7WcF=ORSMqipS1|vf;4Bie7-5(@a4=}zqvUxb4m@kO4# zae$pmKLnI;E|nYtyA%#7ruW?mZlb^@zjKQYMP`|KUd!R}a~PXM3F{&Gxe=%)M*Cap zvA_YLrDnsvk_Hv~pMwzt?k^8B&2H29J!MWEH&IJQOGnE_e%H%21HFOgrj=wCOfM4 z9SR-^JvGHL;r6beGJoV8tG($(G2uX-S7n3msA#0?_NFwjvE+7S$HC!z->y7xSmsw; z0h`0}DJ@7$)^ABc;yiQ4nks}z334e9gnwdd9#tqxV#oG0P=#P)yQW%IFX-a35$FNd z6b4=L+b{9oI^)oS%tN^kmin8OaOVZi%JmitM35=vU-<>GRKWgpL4E3T|D4CLnW?Lo z2+vVzS9wZq7~*W|oDp=0VgV#f?~a=~NX%?%!=RGs%~!=6CBB zO{|zStm>0G(c8=u4EMmGl+|M%y7OQLI=GRqn|tws{%YncTcG4KmiStP`9*hzZLFbY zo%2}Hw7TkH1%bjHfT_d5)MX~rPp$K-wUNg)jlS9_8$*kILxd8-9Xs*Cy=hI-E5L9`;-4elKqAv z+8Tb%D(^ot!cc2`<9hvCZ~rq8(}wkxc}&hc=zz>k+3Bdr19)Px;d;(^rK%s*Ei#g4q{$tSKTX!uXNzv7Aa+cUp0KFd4&Utkp+ zCC-yRB(uBr`0t}Fjpo&iOwMvP@e}`$i3i#<4NVi{ky;%UIK0&k@=_*UcCUO<+%F$uderR`I7G zy24_&-QhHdPu@o7b|k6==i|95JZV!b@f&`IwpBPX^5Mb*FrCJYFhgv{dFAJ)hTzM| z8KvdCa@9d)LKJ{c=Dw*JMWVfYJ|!2gZkXsjVun77{=kYvxp_#UPXDk=)o(jb=;BQ* zZGZbrYn|SxI|Z0o!4>>!Zd%0UVXg9w185-n>Z-T;RNpwFQ6`4}?!NB1iNLhMo0Fl) zEL$an+7erTBAJ~gku(RCIGhsVa*PG(Vex*5YW>Y=-$ z%vPIqkCgo3IXnhtCDAoSgRZ9C>m_*dXWypahKZwvpx{Ey4zK2UL}x3Pzm6_>OR`m} ztzeUCXo3FoXC+SAfhF{WV9yTSyI7a6AF$MEi=j?=7uT2iQy(KI|_&8lP6=`j((0RYyY1{};gHYEHDyLBbW;lhA*#9C8 zN{u07v6{*ghuEl#9p@dlp{DIuqqOawL<{Jmzqo~!oO&HHe;q+Ndc9{}w}b2#D7G$g zLZRQIKulio3*=w~J8aRc6HG@g1)do4n(8%i{Bs}`k{KTpUIUYu*&%~OaNBVql{hmU z)3}@LfN>nS#@wE0sP9E|$e1|q@z?%T6J3`NBu{1Ffm{StI@4&cY9A-2Gh2l^cEZSaWwG{)6? z{1F{reuP;OJVsOgJHOSGEnfA@(8FLgiO9%S%@yvp1Jm{3uI3-+_4RebPr&e|B~X04 zXoCr$&RVUdidMp4>j|@{Kkp$hIAW`h{YY6#I9m+VjF;RPL{MfjuKacHD}eKM6~o%qKGNZy6)_zQ9j~$&=b^>a2X=-&Y7c z;<>zG08^Ap1%UNeJz*~mxbJzPs}BMQ3y;4HGZHh2Zc~o2ftNc6`#tTH_-BtlfOwi| zT!Jeb?4+>2I&3sLUvSggW_H(V-SI1}$;4u3Dq>E~9DF6B-j z4=)w3D^kaInQUZ%M1wzWz7eTIGgYPz%Udj7gj*T0pD_{U(o*?EUP4iwi9`Wx`)8W= z2ahhj<+zTfaaHSRIxL^x?l)-nAbP0r%KwrXsr>UXVre(^p;(+^v%x%@CPxEI}hcx z&^@s$7oZ!t0+ij@ds|cQ&`^}_OfJpz%h8Wv;C;wewQ~p)BhvmNyA+IGrtro$?VPnc zZs>0c_>4_k;e2+>;(pE93C#V6JwtvB-FEtdHk@dWbgNrtZ;NuFT54Z(@5X3hQ;a}0 z%^!5d@3hdJ(b_gLee8eKt61Sn@D35@x2xf9`B^ipWV_RND>(#rIR5&%^{MrkHaZ_h zH~9z^qRl(IMhn|Q_%VX-!M`p@tAQ)v-v_1BoOMqZI=#>TkcTE7&O^4iI$G8cDc(7S?xRX zLeay3PNwvj%FH%1|NsB~{@3BtY5eWeY!i0Ooa8ztde}FPcH}T>8coD`HfOxXxK}Rq z7dEw=RMeyP#b`^6VuqHgl+*Yda>6=^X{6Sg)O+$$N0aKBR>CGL&5KT=#_Tzes%?z`4F}j-xiG0GGEGiogVHr3+O5xA6}dP9vWk!TVW$u zce~j%V%|)b{m8ZD=WBSJWEZ|B@ufwZAHEq#l8=OMqfN;f=FP;|{&fWcKE8RKiyh)< zcj~#&V(cS}aA8khRRv4&{+zQr_g4ZJut2aChf}H`uou)jgrL*a)(vYQRQuZ#FB?Pa zH(SJxJjKPVArW6Ht7RE1XEufYlH5n8Jpztj?m&jBh%>WWi_=&FXT(f3+XBID47Bzp zg+?h!xg|WzLanM<)8C-JjhBurBfzl3hs8pttY6w%X2vFW+82wZKhrtdv&hAaM=ut) zYt^Z6kduEhFJtf-ed52NGM0{4;oU}jRM`o-o-L>u@@Xen6kI%-z6Pz<&ljj5XmlE- z%BPA+_-d6`g#Yw42l)D;TonnQsA3XS<=swSdB9fL@1`GKnyYe~tzr@mu9CQsFJKMq z-5nN>WAE~Wc~Q}i^IA`gr05p_b6>V7MAN>gXg=x_-=^q3iawA9BKamytcRg4{F#&7 zVbVKYEeX=gHTmEZ?1V^QA7Dm2en@t-6B|e}3$-I@IY}Dfcu(1bg)GJ&NVFp@nFKF( zr0=yacBG%QFLn_o<7B^itQ-Tj4 zmi?@g>`x9|=bs!6G{ilWqQC+agqItucq0PRcq|JQpJ|_GamCU%g;iv4?s~j+Zu{A= zU^IP0SnzM8Oy&&2_XFJ=y0oFEn zmxLTHjW=iTa;K#4(oXOcNx`8{;cR&ne>&;6bo-&P23;E&J2G8i_`h*(dZ3)skwBgC zO*U)=el6VNrjNB8B>@oMLHH2G9vHZLSW1Q`t{k0JF13BaWwF9{joV1rP4R&!;@9n{kg6 zrNpOwdX(cp!zsVN8ZU$B!kq;l>UN;f<<&=|NO5k{R*M^2oEI$oFT_lOD4bo1?Nwbr zU~_aKs)V9~8{)cxW~MHF#p4Cn3^-1{-zYI=1SZjGEY@O>SmZ0`6|dKTe5e+xAW*$v zq3U@MRD+NB8^dpK3Y`%2`BR30tOfM!QG0>9j&2M&%rLbl# z+z?IOREmM1>{F1~)~8(R4lTntaPZJRuwdYlb4>hNf;2fH7R1N2a0 z7lHF_lw$zORg5UW{V8!hFMz#4t*>CUB)1)89>9N+|+aNkl)HHr&)D{ez42 z;MK(MW~ykw+TY;qni-6KOK9nqvQ)LJo0?1;$6ZLCxp)+u^#^z5%!S1CSn9ZHGH^dg zT*UM_foCkDyRtVQca$2#W!|e<^0>TMMwGW7aVJk9f52S);K$6x;8|8Bg-(7ngoJC4 z+|-$Gl4p)Qj7|T{AM5FaKAO4H@&~Ts_}6H<{g;sbHy0h+NgvIz-fCY`8+G}etU=LH z)-{LcM|&?qWVG8bpV$eDuWf>BN_~ov>Y!J!A}9DwavDj-lB4>v(s?Iga91WzIQsRD z&Z+*P355ih_p&Z8$QGNw?GmKPmN1wL*E;w|Yk$sttFiRJ=fvYYD;{SvqA2(|Q4oIx z?&YzmZBo21>dv>FM(wT9^hB-)AvT<2?#-rTn=ZBA>w6S;r~0sF&Z4cWRD87-zM?iP zp1~6(eOvMeDtWgS?xMe&f}3o??#^NYV-%R18ElZ!^V5Cy(?$B|OW-_UBj90JLMg* z)EBYp{Z88OL<2IWm+q!7+`>#WwY7f0&JkXGE%Eg`YA>fY!R$mws$X-`x~9{7n2+SX zjb6BZz#CNkPl110N7Y+QRe28a)l5_FJRTeHrX7{b)C(_BVsZW1bvclSs%G+YzGVkR zPZTV(1)uFGcr*p$XIhnr84R!k#$FqdzUrjHSmB#O){@OyzHrc;4OwWJQ8Wyrm#DHW zU)Rxc(~|;WwFSYkk#y}yKj|1~;_nyON;MsoJX1;6in-~!Qve<UV9JT2Eb!8T#~Mklw1{aaj4Art@7 zHl~QWsXfN3eYqORY>2EK9Gfhf{u(v7L)3(S^euF2|v&brSjVRXp%}}=b*L75S z^$Edz^1-Y1UnJYr>MTZ+!;tLFtTd<64*cZNoiz0UzRd!Ect`WMsQKgo3p`|JtSxBB zPOJYe!uPP3V@<&_TaXERr7gJLw%FWJ@H?hpBX|XG^fE@lyj~*A3+Yo}s=5Q3U9Z|- z(9yuVD+JO=8W@r81ARi$3e{h{o@CSG&CcSpHEOAsGylq?QQ7JEdUiU>`ZXjGtvM2r zB~PH*@7eLq>-EjXZ>R8Snr{uIdv%hHNSD$92?PrJBzOiT0!ssG`t3*~hAPjV0mIZdDRzz@usi^`h43Rh|m%qZ~ zpT>K~d`Hm;$3L@7`)T8DDoHw>6ZRwgCkZBJD@o<%5jnTBXqgfT!;ML5g*_y2@`1HrwQ%6yDe!ua*#9`H7t!{grBD&dlP134@v>p+)px zf@m{POv;>S#zS{eA{os}PA%qANikzqUoplzF7*?P7hZ{7$H!;C_&y1;Tp6CN@~SEEO8l&Bl?`DP6qxqYE5Z`U zlx?GbCLxx}&`jbzF4TSKmQlcjHEn8VOYuG7%cWU)nbrRc4|UrZ==@-rq)$?Upv{}M z)ZDKyP7aW{*trPLW|j`(4jM%h6PtL42rxQC#<)GA%}dcJ8nrhmd+{S=$I@4#|8E-f z^q?l<=j5GV&-3D58N-wOHuZ+3K8|kQ73+cG;tj$vkb+{vx$Q4Bu&A5c?3Zv|ADqkU zb?Fc|L~yF!U4vlbd-Af+^yO|jfM)(B76A9#5l6Bl@`t!o*r`Qu+)KJ zsr`|K?aa=67N}J_L91?>01BfMoabH2^uc&7e|!YF#AtJctbbC7QPPWm*iI z8>R!}aLNoz?X62+P#D>?CqC9bcZoFb=@K7qUy67sihs|(bmgUM{1p3A%u8{++`e?< zrCa>)hUV^(<`25Zdx4F}rVkQrnW8!(v@lS&kK|i9B<+@bMKY+pJL=QZ3%Q`FU+tpr z$Ex3TZp)Agy1GObRTH$-Af33+N-FF~YE(GdOvc^&TEuJslE86)5wfLm_Keu=9vP;b zgqOsSsW!}`?#+xgJlh`K{8p^T&ft1pb@eEl{GDr1JNGnJ+_jAvr*Vo(GCs+Rd61Ue zS$Rg^<`0g?9Imn6B-Px{VR+?r6*T|a<+k~=l#!12MbFz+rXURY2JUJ$Hgjk(^XRA4 z##(;O`v{1=k+YIvl8rnhJ*)i!FLrw$chw^MA9}h2&XNxvh6$Omu3seebYxQyP1mw1 z=ys+E`oMH8!}Tu9dbLT|KmtRSA*RbeNiYSvHouEg$M5y}9NERqA8=K?)a^`-bZs{V z&S}&#qIupKz@U5l2HSQCZI{G<93f_Ty0!=H_K06*+B~HB-9zFRn)VKD{@~E~aMM=L z<~=>*Lu@;}Xs1{FG~3Q$v~yVeTg`z(J5Kzl7-n4!O{IyRnZtEV;36ZsxG6|{eCZkm zT;2aK7^85%Ac6z5{dn@VmskrODttPNS09wEsB8OK z(=)H`E({{pqkZic>(QipQ(7kxreHpXX@^PvzLIN|9M2^m zq)(B4Unn}&U?dMkMfoUtnLfrr_P)Zzak4NF@i&~iRgp`$VfW`wczZ&K{I7VEf{qru z#Q*u<@rL8%yU4S)8q}r!E9%B&QOEuyLh)bGH&6vZq1sDq4bGr2*gNu0&@@YEs-JAJ zmyHIy{|<8QQ_gp@Iap8S@o#2-6#lyX^Pnjd>4CFWtSgY2yRHP=KDVyBnxT}(@p}SMg@#kKgk`1N_1}$7Up68VLi1CgPBV_l^DdQ4wRCgoc5X6YLaVc;(5{Y;#V^TfQK>4(t| z>oxY4Ab2SV`nB52)w)#2%o~E|=xs_qX!Z|>;YhRoH#Qpq_BRiPmii%HCza}~s2*(| z(vgQL4jC(Z@w<5oLFot0T5L8FX$;8o_axKIy&UZO=SX>uj#!3$k~~3w%5W>s7hgJZ z2M!p%303y|=P^eau`H1oMfi&y{`jP~&5dQ>IaADV%qDPo_$sIv+^`RbmlsW|9s~b6U&$nK?1UH!W?icQ++OM)o zm+a4){Z&189_;7p%G#`$eX@}s1pYE}?)m1=m`t%IlNfPWaXPY>WSyOnoO3EYYGxzz zW7)6HxGCeH)gB?Zp#L)n663d`3!&zz0m)Kl8P;#BvEP@N{IzKXZCKQEyWr<^U%{D- zq^#g9K0^g<`5au(u13E`7M#uJ*a8c#!47;}T5}bjWw4O?JllMpS60)B{|jybFn)3z zAD%78*YPaIr&Yb|A11u>s)N?>l~y5|qZ6dFx?T>1*CSbVo@e}_yd9*KI z7M7$4dyQm>R`u`L(QxS~iwwsjvciSY{e(xg9^Qetpe=7j5UUSoAwnOs3yJLSWp8Hp zEUuMuN0fuihvG~UZw%C>gat87M_p;otTz;sIYTey3mjd*mykO;SDqeQefHC?-G4E0 zm?P)R-p%IkW!ENqxRX0YGF@_8aF(QQ8^%8F%9|L1J^MR#Tsfmln7 z#^17Meww>-@>R66?43+n!5|c*zvHx$%0idj@Hw;8Aa&D=-prspgs7V74oS4LoHoNdxe^iJaBrD|P=^5ZB>$eIp-UkJ&EJ!clk+507$VIk03Z2lM`8Ii$ zeG`dgiR8`ZW#!Jqi|?J0Asf-%E$#UTXvCme+YKAY=r`%p)SyiASRmp})PU9{7qMCV z`PmEggnu(-XQAB_irt;-l)P(Izs#0KBx91o9H{BxY$5(9~xYsh>hK0KVp;<*oQXD z7rDHC8YE9nngk@jIAS3AZ3>dF^V5f<6`iLFK=Z~lH2)Oxq1g*nCF30rL~#L7w9f%< z=WS;2BStao12Fvo|DM)D9+8-OlMnCOM3*%Ni4-)g1;6i-?`;L}UhkB=FL;}wdk%$U zFJB?hwuE;Y%BP%xlb|-zGU?Jbp6?j&u=kJKX+MaW4&nBy$MJ?^k@dJAY2w}i7j6Q{uY17PF03BenK$8br#^{CMiw19VmiWuX425yB*-nZr^ z1<_dcy$z?pybnLqFjry$!Mt}G=0EOlfM%KK)~CXq>(cr z|A%UxGy*N*FZ2QaLZ3-}(x|hTLi)$vJ2~k}HeCu;vVV7&VG|EWf6U$^E42!)OFq_R z11pyNG~ui=`^q@Yr{pKv7wq5`Y|A$sn%F^Om}CTkI%V36A#YkTWTL1A%+Wd!n~(|Y zpl?BunFCoh{!Z%~QZ`PBU)BhECFrOyswBHz$QtlzlBBpx#Y;Y&&NM;U zE=vZwowuZuc6z5JjM9V4dX|bZ(P_Uudb@|!Q3#(N;jPR6S})?ctDdP5w>dk4ZbCGqdhUxfEQ?@<1o_t!4HTc(gi$(Q)z9aGVkQAo<3Eq!ZVKSPk`&B4tOB&|$iz$1H zViOerP7N`h;wR2-REL!_Xki5RcdT37LsZ1OKK06q9ygul-omi2>Nx6nJB)}$oHDO=pYuC4C7K~nFCM2OmMzjC61U#s2M5m) zH;d10p~4vCC3bYrl#xfx?pH+yh`5DKk_mXOf#1Qv`{&YBs34#5wR`7Sy9_HP;>imQ zhy6>J4D*xJv{>npKFn=1Hn*c=#*_km6YNeM+dBwg5ZeAsnuv`<1tR;xQ^w|R3 z3STkHAP}$c@u^K}v{SV?o7e40a^^A+5C*Jr@6k&vn{rKVD4zEbHkB0=de`u#1-)H} zU#b3G;!BndzpXo1Nu4$SZTiM6>K*M*h@)7cnlsoPcI?Vd6PuVuE9xsivoCQJ=v4et zmSoNGL5<3OMtN(l?#c1-jkS9-%i{N4NjmGSy)wNaT@<`Yy&rK(=0`#Kvcz&6g<~g* zM;F5}p2m2x_0#8}iSba@QeIacvkS|++np!ItMT#jecEtfK*H`xPJC>8Vm;qMGDB{VA5)~U<3jxq z-Fx!S+5i{j@zim-{bes7D|C)e4cOg#{+;i(+w=I1H)Tx3N4)26`5i=DmvVG*T$Enu z)k+y}aQ5~_baGboF&Ye_cni5bH&Rb|=9t#d{GfY#2cQ*p4~4F{sFpW?FUMZ^=Rf)X zoZ91AxR7oR#UIV!@=@0t6$enjgh<)A1y+Gn!kq!J&M9!-XTZt!NrQ8&0q3WH^GmD! zaDnsA6gb^`3uLnr?_In|&6mY{?4_xU+Fe;?MJMC;7dwGE_ufMH;m#rQ)j2*c2|iH> zyl>P1{%{G4^*sEr?k`Ca(PaPVi8MA28zJ==3 z``Q8 zVC>q6dWrS?4edGO*A+K*{Igot;y(Q{p`x!HsrPPnSk>b*kY9gXjJZJAU7x(HUtLy? z##A1^JrFEuoG_}~-K;k3z|wy1;2cy6ThSC0mzOj={2@sV%iL=%zp?r<;Y*$OEJLsA zxqZUTgylGQaosxzm@bW`_S0qb-erlK-C=~C;oVHZE*p|Bm&LoDQ-(6B>gY?@barQA zP4}Bqs8l!qut%mMA7ajEp!ocsgsXiaA&pJa=g0hKY`Tx_H_rO-*wd~4Ipg;@EW_+| zS&nY1myLp(7IKhMY{PutcF|RMcJ1+Ac3=;Z|JHWV77oYD1BtcAB<);c0QVh(3&rg` zDdXO%>d*dpYtZmtFSvSPS%$1&t(w2Fzk;!8ujWZ-IZytg7@WR>jsa=hs)6wiFC*>7 zk!VGr>Z?q2kR%)@Z;(=hNB;o*jCHZAYO{Q?HU8-JjI)j1uoFqbS@$f>SpBQ+?xvy@ z?n5X3x8)>g^wkQDrV1(zNyJZY`j}~YUC~MRq59ZE-}r@AoYsGfLf^z5I`V%lbR_oB ziGN?H!Llvn+#yER8P zDM5E|mn`h`TE%*Xdk)MHHcWsRn(#S7ki5jn^V??lYo%B#M9K0`%jyutydi(Yf7Ga# z&&Y-_#zzr$<=sG^Smfms;W1xgJj-qHMAgYQ6Z@MRbk)f*)|^pUDtTW)tJx=avu4(u zkRBjKn0?Z^EF)uLe(=p){*rq6NyRxW4{QjQ9GqC+eEw)3M}I&in=Il`#{O)zMJ3D? zk4ZCTKlsnCzQ-Wl3>nPBD9fsj`~jWIYo*vuG6lDGiPx%X`xz!q^$c1d%67HObY3b& z62;$s@zABkI+^F601G)I^MY@#eeb>ZNH2-rcxA9*2cNZjGUHvJ3>+@154y{PRm+RZ zYVK)t*OT12jWy>N42gnos8%RG6z$}8e!3f_yy_G0`fF8lmsKq*uDQLD3KQ=xb0O0t zT2?t)E{k`5vOKW2yeL^7pGwO!PcFVBn!KrjNp5mKM#oikbj-wS-Fi9Kt4_T})Aq^0 zsv>$>7Np_wn(qntXS*LKH#ftN>V&pYNT^<|5yi)HeeZniI)|IzHet|iDkj-v@iT)d zG@gehv*pi90fYfQOdbXXa7uE7ErfCJ)`Gj>zP&cqv+;T#n=WPVdappFn)?sN+Sn+K z>^4Vjyaror(SxZidLZbwapF#v*O|)7>v`py{_=js<*vmF@2oxQudq>2eEWMH)hw++ zi(u@5)P($e4nofu(T9ThTIlJ&^B4M29*1MMP^Gpw9N5uiZ-|_jtogjQ;=fb!p&)** zi?xVueZy`8WsbQgS;+E0V_6YUTG`Xo_~qi;f2uZw&t=H`uT{Rr0&qJ*`!8LsQ94pu?x-MO%Vz-Fp7(>)F|<9#7Qn zX_qP~6v%oqu!OC?aQX0QXQoOV54s0YP-cU*P=kL{w(5%u`!sx&Dt)YW&pH35%=p!} zk8dh-w06&V|E7%F{i`8OWsV3-FA&rWNIEe54P`|iSFI>6t$B!y5Sac%EpQ5Mu{_q6 zU>I9N@eW7XR!-5Dw*>Hpo%#`fge_I;X+OB^hq9tXkVLChb)fen&>Obe+^2eV_aMU2lZaVOka{M&?08}fO%0ETk?J-|^{V3Rs|KY%0Al$p%n&m(6 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%0A$9kSQ)K7ihioe>X z65FR!pO+Gw3q!AVU)`c?dyY5}<3-f0k89?4YJN}CvFtVdWZ3ha#w5OA zvJc3AKb3tzn<)AlAx&K$8T{$5?1=O?Uw@Tw6PquxTGl$)JXalM_(SO;qDLMi)~gOnvgtYwT4vND$3sm85WPa0zM zsR)95C~-dsX}XpUf}F^?esE}|%TP}7BL=MG$T-U=kgLB`DHo4FK$eb1cFSn{D@VyK2`-#W1Qqs9Cw4 z_Hhfjz;S=1Mb-+pZ*9kK$@Pe*)kx$mk`t|(@g+KP6Os=>q~D(%yWVzh2$3aSynKjQ zy-rnt?ZMquuBDmLL}XbrYs7rCQnL^`4;BguUabgc^Ybp}ouUL|a*A_t&lCvU^;4Bf{Yrljk- z7x$$ybNJ)LJ2Be}y>=8jZ9l?tryUhJB9_O5v)D0%MnWEZkkSqsGwq`F%G)@9vC0HC zC9af2NT@qS=Ze7}Qnud_L9-X~Q?)mNzTghMNgTv--%DadMg8| zX%_MA+HO+sj@y>dWStu*i_)-vYcpiW?R=05n`jV@W*Hb_Dp9cO2k8b01h8M7Ic|qN z8c9^1QdrotUvUVCemdg{4DeQ?(=b$}dA$b2I(;CF80dB)dUq|ik59N1a2SBWFi?It z4Zp)y#-rr4`lp=_`6&mcSj9NQP|Y?=^a%3kM|5T^7!9#|Ln(dXho&io?!TTF80fV) zFBZC-7rQ~v4>&I-LvORURQU9E1AqTrcGfn~nWrlyk5ZV-}O5v*hqVofjBFr_Pbm zM93xfc*iez9%`D`VvWR@`6lkX6qq8K;O4s|vYibhz?#vSkun%=6B>_0Jh{}6oT}rT zXtQc`qU|7v>1s|ioyZqWR`0R?Ii3_0N&#y?at8$gNwV00B=Tqo#-j-wZuUk!PlI4B zKLUpGDVq)n7_4fU<{IVVpZJpUir{p}{Dgq~eto01r#~X1bw;}~q85t|GPk2M zA#o~Qa%o0v?kwOy0LDCVF6IZE%lLI|?RfS1HN09@vACflH;b9^Z-l=@dK_a)RUJ9k zn*aG6%;?6iY+DvD4V3w{LxB(6*HzJ-FZr4Ki^usK*2I4Vhoaq`7>b7`W@14cyagUU zb3nYq2SI|yhR!Ip8h|htecHpbM+&P3kgJ*RU!8v<_1A`Ce~a8qFeNePws0fD3DHZ z-~`^&W{h5rtk5Z1VO2lHOTv7812-0ipV>oz+(d`}qNXoLo41?I>XfVq<8qI{B;+2l z=69xU$Q@gd$8N$W%{q^*5n_m1c^1qn8eC9pormX?RYVF?_21>uEr zp_GX7LItJ7IwN@s`Nv<{DwIs_h!3&s1P{3+s@ z9lM5f!E_lasF17HXxl9g-WnWkEHEcwa$+o|t5-*vwuz#Z(6>0H)f?$ZuQS`TkLKNki+;(#qiySh8=%BL;AC=!{RWr1jg%YK$ zV2JDt+Q7l>VS*(lX8l1ZGOb`7!3%Z)JrZw(3P#_0n}KjArmnGe(?j3`g7?*iZO#IVWq+1Y>GZhO;srNajGXiKThm= zY%Sb9iM?zvUl)}^3)QIk=ushCS4qSmbq570NHH5B@yZ|s=msk!XZKM<17pl)D7L

>Qy*D1N)y0@#s_1hd`qbpS*$A2Mj+qr?e*VfNA5 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�CMlLc_WB#Y<7(UQ2zauBX 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%0A3abqu~dVe{KD)jL55+2C% zjEi{iY;G1;wN!U1Dvyp1KGB>0zcrfIj=L+r$qZJ?0sa13?kESyAc(@r;l)Z|v9;L;ez-p#l%_4C~i2K z`-<5S)aF1Jemsy_L*7qhv|s5_bN-QK;$0x6IRrETe! zD7=d(x3RyQ=^SQV*3-;y`7l&0nt5ONwBzG4!|pqTMAUzwn!a_BoP&C_D!)2tcRUyg z)Yc}`_gb$eMRmgN(y&*uS6w9Yu*xOn=_l+i8%|30QQi|`U{wRQG`v+ow!DPZb=PIh)eW_*ZfWd$?xr&HT+*ZX0aHuE|Vo8>)L1igrwUj>;s( zRc#P0sr(Vr%1S-ChvYsTh0&J8oehT?%(9qC2A&!6@xcG3%6Ot?r~FvoLGF%t&+Sx| zR=eY@^oItx4-E)D{G7^^{&GF37&OL92fJeiX{SvrX25e~5}}p6r_B3riYmNI{Gp*p z27;X9jv0)%+0HoG8s7;x9_|x&&P#JTZm|qBUvghHpF%h`Y~|{6WyYm9Kz9ulhEfgo zCdYW1_u_(e4r1`Z~@McJ&9;NNcPd~|q;drPOI^{<3yRZz~3_iRfy z!W~yeOLsZl_c_6SDE#+09rr~8`x4*Yu%#iA{#P|0am}Cbofel8U`fv8ek^wBv5O@|#JMHd>X7Dx_7e-FkvOa(+cL zesjRC{rrR|x=q2Put z7}B_(fDuWUBX9t&r_2JE>_-E;_Ue zLLEs<8>qodo|IY9=OqeXg(tLmdQ5zA0Sr+b^I?)Au}U+2v6v_UAw32}VnYT++zM|} zrHe%XITU^qs z?ELPD4qM~%(sng8#0KQ{X!i#1!OHpM547T~uQLW!pSA=A*vy?ZjZ7=n^CYMgKJOYD z(%Ef`SxQ{2(k@srl^ypK%N>oskfmiORTc!wu3~v*4_Oc!ozGh&-uCi-u@38=JMmez z@≫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�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%0Dyk6rJ7 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�W3yzMQ3? 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�K^VZja(;TnE@Yqd-?t#|z^!4F#;?3=}{%DfF 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 QM?EK?LCe7!*6D`(7Za}pHUIzs literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/_collections_abc.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/_collections_abc.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..053bae388761bd98169b13291a0090fe88673ee6 GIT binary patch literal 28862 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 X`tf}~ml=FHcr!WBi&S#pYR>+DrQ*5I literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/_weakrefset.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/_weakrefset.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..79e4710be3d80e97b151b99a56665c924b9c31f4 GIT binary patch literal 7893 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 DJ~hVw literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/base64.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/base64.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..139ab9797a3beb95f182944ce8b6571596b59bfc GIT binary patch literal 17124 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/copyreg.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/copyreg.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f84360a3c343f150962619e07f073752d5677d54 GIT binary patch literal 4309 zcmZu!&u`qu6()yVE=8?mS(ardc3UQ}TQ6WqZfyiT$gSPPtx>e9;W(AEXiZa`S&3RM zxt^Jov;u_yQ4T%j&})Mnf*#sSPCges^wd9rr=mR>=wHx_`@P}rN>;Mc42Lss=Dm48 zzV~>0ZZ7y`w*I^5ie>%BI`wN|d=E{1jgDI#i`$%Whr7J7-RRh<)nWW?-sJXYcE{m9 zXP;RecjSwPZEafll4}XC7swB6i~c^g^5v%%pWy+hn!*tc(G-ni$F}$^Z(+{oS2{EN z9ACgV;OF@wp0oS{U&6D+FY;wP=fHCw?Ht+yzr-EPo#&Uii{~PLi#PDRz`YNx_SM5b zKNQ(O$WRyIKo)x`7oj-NB3J2Fnx%Rab_*E}(xjJ()gXAXld2H^MV^hqp%UF;MmuB9 z$26fD4hDtPX509nA`kUwAXLajH_ZhP(>!?pW|$W>Rhlau=Lyz}E}bb?CUi*_D<#xw zP{Xr%UDp!g)tK767Z-bqkoZ(c>kJUe>f0vljH7#4x z=~E{nL8g4y@dBr@dcIuJhWoL7;gG-M9xg zk;{*)7t5QL_KsM|vkMM}CEK8gzo8ZXJ1`zC5P>M@g0rRPew^tw*0QixEhXE(tI0B+d>-yMiGD_CoBYH)Go){^VR%)AfF^;slfuw z3)>=wrBog`IgZq!3eEjHv@gEaMCxdy@;37tV;H|P0S8I`A8w5 zZH*@WVf2&~S$O9r(wx#F=9JbE? zx&gR&iXcb8AMBJw{rt!+T|NWa{Kc~u&q{aKsPKnO*r3E0&z+!S?@u^(r>kQe*8IfLkbEdVq; zd@NLv4NYD08_7}K5o2V81Q{boGa{XwjjIY&MzthH&~7or4xA_j_}wtK#0B7yYU;PV zAYAMhJnfo0rqUd6a_m%Oa^Zfeq!>t{;L~()D#wb7yPC?+sg6=*jv3d0t8MdE!FkCV z#u!nwA+N$Q<@eE5vr)7!;+_;;pd3T9qr*mYU0qi|0HTmTMAvTB)D93!hBW&hhC@iZ0pe(hbn5=w}b2F0f60MhkARSa5>L;v7LbJAK;;w2K!Q?qibs8osR4z?* ze6wdD_}OR-PVVy@yVQ@+SuNn7?K*^e%xM7;1K^{F9xhu(5z<{ZzF*1++`@+)D6_Rj>*9YgDy%F&32s!ck?MZ;Oq?Ho!7OGRC(^oS~BA z6gKr?z+*C>IR+$$*Ua`eY15p(G)z?22eliOljgb#ej8`QaZdT=%T#n=&h*d43 zBHKfH791IlxXKZVGY_#aL?KT_VC53m%E9SpEH5dke1)dIi_U^+FT?0QlHWYc3q#ur z)BX+1l68$`A7g-GvbGo%nYG0nbq)4|9gM{sc}F|2J1jV{5WK;;Yr$&lF8sn+YlG}@ z*Wy$jJBPPE$|p($Vw|-|82%ief?6m|6$~Y*)x+y2W}p&gvipn)Hrfq&4?-K|$@?_= zDY|Oml!6obG;6!^XS7Nhlyq150ddt%vkRo29Day*Ez*==JiU_DKq1nlgvYJsE z)xT7cAH(rYsfR*=$p@IN8s;Ta literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/enum.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/enum.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5eff7ca558502636836bd55ea22f17f788cff925 GIT binary patch literal 23518 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/fnmatch.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/fnmatch.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..76ef0d9e622902f08824475edba11f1dd9742b44 GIT binary patch literal 2939 zcma)8Pj4H?72nxiF3FWFt4^xamts=DiD+143ZsP^7;&A(L2R^Y5UVgi%O=JL}8ta(qqw_gWh`TR|wFr&=0WJp8OSb>hH}iY1Qx{EA7m1-k*8%=J$R(x364@ zA7yv7Gc8-+2S@x2r7zsiIvm#%nsWC%5+Yc?51@@g6 zb{P#%ZNC@41}?naDjKI5PNQl!M^UXc14>lYUFJX~KI!A3KEV42yyjPEtar!`{Swf4 zwHz~ynGH&>Wak75CjJdj>?vdU$wVPBnlDd$b1l%4hb0ZlmWE@8>W}Z3>(MPH7>@%WB7IeHu9W1R8y3@p*yrSZRn{E(^gWV4P~C zj!tAJFZ5Jo>6wzwE*(3Z)u<()nuW1y3cMZ9Q-Ffb+9^I9^F=WS7V?jA2qL$zOU*4l zM>$+N@psfuZQlzkzc5vZBA8Siih{z?L^D0V3aQwu0K$KHdJS_I&j*uYss`E7KqNw{ z>0)Ohk|P)w`QSvUqn%F%QY?0E52lNeEo3ngv)KR<>Rg??Otqa0Fv!b6mcAIwaHvIo zyZ_rk6KH?7&;-Hv@R|sXcXgeuv)3Mh4AHcw;?y8TRm(1BN+y_g4+Xn|?p^$_Ug=pt zRBu}VSYqU0OYrqAE5VVN3Gxm>8FPUR4_jq$&JH7h+TT5kA3px`&Ye5I`Q6U1d+jPt z0WV`ko?zt{3#&{O7^`&)D^X`sm1)ziR%aL-c-UB7uge;xKA<@p9(D8= zr(c!c7v8h2S78~H;W^XWrH@Tx#JuC}CtkjN`jON4C22IiAcf|mOPY_Kc%`fSv)kV| z>T)nO^A|>0Ueut?Qh=IR|1pHZ)`d#A@Ao22$Ew@Zbf}?iRoz)((o=`P2yjuk?6s;E zLC?5MRuS?x&#eAAnRKZkEWSyiCi40Ouh~N5`5{o#VKMU8VVh_-*#=uBkB~z8E_v@` z0JJz{l#c8qJL(b&&i?+BcabOzP~KO#`3mJD z8I{U8^SxIn4T+-oo}Jz-Q6fj)_e_6AOn==2BA5(5fKD08@W|Jnmw{~IcW}IgnFup` zm}#$OI!8XN`z3qTDqG}Be+y5o>z?dF_uI1Nye(xvG_n}7AC|IH-dO&)k_P(6rS$k8 zz#(~V>HlEmHCj1;PSKXFzxvmKdbuvIpva@ff|ZfPPH25Z7RwF%4&+tRg>95?HS!H7 z=W@M_XkKojTB5PPRqr*h{-LX$dZ$l3`LiXXCx*TA^_0^@XVU^w9-JyyK>@ zf{Mbo(0x2W;JBU?{CHmAsxnnp?5sXm4GJ`oUgf=Z9lLqv_itXXdllY8E1m_1};R?Jo%S56y5pESJlZct>wdVu!<)vGeix?aCu6dW6^9LE}XmEJUq!+#gjRF<8jn$B5porY>o`!LB*Y z4gVVJtyk^QNEXRxR1?H6;H!?R>#lG`kr`4ESq7B=(yE*3`N-YK9EmszaGx#5%a_7* h)#0eNb9Y+Ed8R(2DMO_nA`tiIgJj>^iaVQ~_ literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/functools.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/functools.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2359d0d7cb5a575080aa040b263a93f5511ab906 GIT binary patch literal 24127 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/genericpath.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/genericpath.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..07513e150e929e8ebf445b28fe3cfb0e3b6aae98 GIT binary patch literal 3791 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%0Dj@Skz-lETPguA#9mvuZTTavamZ=aIY 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/imp.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/imp.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cc5f48175423cfc58413a8795145ee70c9c8bf6b GIT binary patch literal 9761 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 I8T>K+-vZ-|PXGV_ literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/io.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/io.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1b329c448e5f7e78bac04f8ae38e9e35e117e624 GIT binary patch literal 3452 zcmbtX&2Ae<5}x6|M*p_#SpID*0b&6%xqyKjvO*xqma^I;k|WvCW;TmSbGj+EI5W-k z3`Nt|>~(>>#y-Rz_BD9jld*5Gr~RsDNJ@ZxFd~A*>FVz4ud2SPX+2w9^!^-e|Mag# z$N7(QR02MUyJL0J#P4oc+Q`TJ>QGx{rPyoUx*j|#dyhIikJQ6 zc*S3dSN&Djk>!hqe?xpC>%mR2=C6r6{w=ZY-~QSWcSYszj;LV8C$e&JN8I~I#b1a1 zzNkW9h5oKw|Fz=ZgYJQtgKiGG`&Rb=x`$#3x+UlyTHPag?}Ev>UtQOEvmrgXAQ$Db zT}R{g8{ESP*J85ru#Bsok0?2iZ-T9$c{>+fDKs0 zI6tQ8dApfCBGY}QJNEIgb>;RtgDCeQkpH8=JtF8-&2-oFO_|6xJBKT*-*j_xGCTugQIL{ z6x=(X`Jeugskk4>SSFd>mNIUn$D;^G2wG>j0%D%9KAXeqWmm z7|+!ujzj2j00_?hn@lG5@Z47ddBTUqVAxe*7m?*r%2GlxVnda6ZM?34_9mbaU&Dv2 zJ<9S7&Z2UlB6)ZWC~X^AOwUe%3k4ZGI5Fh_xpsWYI@p;4>E58zkw%IFS`NyhY1`@SiJrk#k%^lQ(MF;oI`GBg3B|HWJDQ8q3D93El87N7r zqe5F~dG>Vz*4qYAY){F1YCliV*Ql(~v=Wh*Vq3C7ibtNZo*WIe!Q*5b5+HcSzx2Ep z`v<$PzkL<#y*@bDKM76`{e914jO|+XvrwbbRbsmU8WTDXA4KR&mgdOw+v1RRjw^3; zpQlsqkSS_$MWr<-V1X>}UsO`GKI&OxPk>gp=|~`lQJpqZw3D&I@)aLxFE%u%2N%n&@LMM`K#~3xy3Td=+9&;5nLmksH zZhGuwkft(V?w(98c#PM?ONkOo(KEK&h3cvwM-r$a@ zk*JfHBjJ&lC$RuAUO!AilfS8=BRRxdTfU%{A&ptWykAoK9a()x219(Of27^PH(i5} z4(?@Gjay9R0yiw-;to+VWlSAy*2aw>pb8Fxu@?k6`|-RG1iuV;RLqnErN{N4$W=WE zgbst?pN@G5BUb$H$5vOzvK94OJVdjPM^C#v>~Xq?wD4N)J^e#V@X^y}t#}k~2?N(0zXU#8KN;mr>i}X+A4f)w{H(lHcWyWnmeze<_+--A* zkgt=tOX3~`0x)Hvc|h8!d->BN(vg90@Ga1MG=K*7BJS@6upC?`_=izgE58E;Zu1{R zF(1sz;=>5Y!uK--o9=iuI8%7D4%6p4L0`cQW%Dz;-v_h!08}tw7TAM#O%T|S`(@q^ z4YBm&>%-ilZMG8TQK3okrp%MNLUXGm=>HURAHuKi?mhnw#Ib}jjP#UD^Oyt$)NGI- z$HomK&sB!v7J}YS7a&OhNzS)bl-KOXD|xQxu9TMC6}MC>L9V#9(*FTlhTk0k literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/keyword.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/keyword.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2c0bfbd9694179757e53a449ae64598e7001428c GIT binary patch literal 1830 zcmbtU&2Jk;6rY*>u)T2{rv*a!>Lx99T;jN>QjwslkSH9Wil9`qEVR~U-`HMzcW0Ry zC$U+dLM1L$`4>3SKWVO<`Y*tRx9f<8GrO8MGjHD4y!pL%bA8?WGP(WZ?{z}{B1;3B*RufrR#1#iM7cnjW! zci>%k4=#fb+pq&yM%w}77H6k)Vh0Xfh4+6Ufy--fZOWwN?kS-JI^UA+?&9yS`21K% zQ2y>viqzj3$uNzxSno$WUC(5D1xC}LiPy9ULq2fM> ztfT#O7ES$F`?Gu-^##s=QobH@U(M4)ktjdTaC>HW&+kOg@wKQVw8(vkC6Ba_b6*U- zQZ1kBvB-QSW->xUl5;;CYA*f5S)4$ejVjeRLsl+%c@Spc%USlZ=lS^U_s=Zcix2zL z)qVH#xn~-&I@=m|dYr^c8|RBKQQX)EB18H>&Uj#9tP})3EJ+gBJc)-TRUGqv67gIIwPBo@2!nbivP59c11l4FTq@_KV@HNDhU(ïcE$4xAJjTZg?BiIE17{xd z1R{i2^|g>*#_<^rRZs*S1(J~EYNktCkO>0@8`dd({s8sq1c84_m-P`@Hcsvo&Rz2O*3yGU;Z0rnqNq>mg@@;B#TxD!6D*Np zZQ=n&w?$xWixjmjv`)!SFCLO}Q8XrNCGh7r3U|_k=1L0K7Fjkc&iab8TrV1hTQrOH zr|dTBXL~l$>r?MHD(_R&rv&rVnruL;^nvSk>6w!6NyZ+LDi<4N`98Crx2tSy7H)a| zDiR=AdhLUk<*U5JcOZ++uPcc6Ulre?^Dw-B~z4 zf4JxGEE@jV*IBU6-s0kwUQg*zYX1!5s@Gd=B9miroMUxRX2dmCFIPSy%rEgAVu>P5 zvD*DKlv6I1XXtVFg0a+G878qdQ0vH83D1lza-#|P;HL+S4Hq4E?xS>#!?G3ik2#+jy(z==_rzF0kDU29lLB4eU1yo+++Pb1*o2VuhzA s{{A(Sg(*i~dH-`{w{mhj6);Qqoi*I4dq`|nw;BC^ziWG}eyvXb0U03!$^ZZW literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/linecache.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/linecache.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2666c6bafa51649af1b984509606b0984467739b GIT binary patch literal 3843 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/locale.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/locale.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6886fad43d900d82aaebb2581c383518ce6d1cf9 GIT binary patch literal 34095 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

JAlPK5>Jicm<3=il8aLUnt7eGqLAbO!M|)Rfij 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/posixpath.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/posixpath.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2b9a716bc4e08ce465f5cdc5f494dd80a6277c05 GIT binary patch literal 10488 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/random.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/random.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..11951bd7606c05ce4461b5c5231a6c1a474dce3f GIT binary patch literal 19395 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/reprlib.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/reprlib.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b02537940c7d7344eff673c1bc63814d7e4ac955 GIT binary patch literal 5465 zcmbtY-*X#R6~1?WOO_NjNt4tqWubB7rHR~rywWOn zuaa0 z^x9{CKg-xZ*rDGN>hI#pcOeApFu{c(%m-$N3rpCk(J@dusoA$W7H2!lXt}A~cRCJd zci6zUSnO`stPpXJKWlX0B4OY0WqmloYswq)EL$vk-!ht%G~1PHoTlJs;4)`dzKqHo55vGM z%{*463%`w&k`iZ|$rnkSBXOR@1&F|qKSKvE>WZhP1DInS}1B6w%O1a=ZqvoLrunjdNWp4}LWIF0TC75HSNYF|ZOH zK-MvZDJ+!WD&e5C#n*)=YTz3OY_o(OS2RQur6*eA6v~=d7B8Tzi__u^$|Z4Dyoj

$RuUY6x*>2n zLZ}I8=^k54M@v^&==X#TS=05p!08H{jXgRqdo~FIW$#rIYY@Rw>Gh*0Y5XWobxn+-s zF~kYlXqC|Z0xwMliGmwqFeis&+&SStZr;LqY9Gw*5?b`5k_@YnBiATcj}<_yhwxDG zhEdvd7T=QJz%ZPc)F}CrW12`>>1|xOUYd_LSU?ddvW*?)Xu+^0J_ykN^ zm>{)_h1oNvY+?xm1ZIKGOa;@xZ0313HRJ~hCOT+AO@ow#vf$9FuFYm`>~p{5VMi-Y zC)83q;17bQwDVz_sM6|X$)I$%qFf)^6&h-iw!kx2(Ezc?t`KkQyJm)_b%+Q`dl*TT z9|z$I=6)AfPEa!NlZSsDY<1Qc*XMw|RkE&26Y#6!B1{OQ{5KF4CKI>7+1loErEukn zFecvME_%!hh(2VT&$*63loi;!os0H_siVQ*XVqoUR`g+W0;I6bSVVazLB zVQw2z77ks7b)K+x3$ySFYtuYOPVa3KvbzmYeA3&FTtqB4Wf)ecW z2jii2`;d1>1dyS(coEBcZU%y6YrknML*FVIFb|Ht2FKNUyqlbx# zWpqD{7wo;bXKY;d$Ifa_|G+LyM3ZUI++!~egB+p6XD32YtJPy05}J%i;N+%Y_y#ue_dI{cu) zJU%{i!c)zU2)O~dhF*pso}EWcv}Aas84ip@F21(UgMEG(D&4?D`AvwxJobFY9JH)! z7uQ_%bIdIs8Z9akl}A1(xkP} zMEe8*LO*iJxgwX*D0toiYw#W;uLZs9+5`mOLvLXen(Vz6_ zX+J!aCy>j|NI>&2Jq*1J;KAk(VHk|`}wbQ2WPDs01XguT(dTg!{g;wG$ zecJwt%FGWC{tyfdc~(%k0~a7L_`=k6>jEg8oPJ_IU=!!bd&*Ec_eURILvFBpZ3Gh= zK>;lU02}_~zQlB^RyaKyS&vuLHjQ%#9-KYAafcxs;9i7~FZ8&hLx_tYi`t|vyrRCz zb*QM#LWS{kGPa*0UQFaW(3-gT9e*{~Aw-k2^>j6#1g`u(Minhx^ZqFBA~f_{)~pwWFv?bjo%tCQTR21zB#3nYXHGNDV=ThaDp!&aalo- zoLGnZ3fK>Q_IxFa)+zYRhBoeE)PwW~Yr_v~z3%jo>j64z=5&YpPJqtV?o_Sv zW$2uZ@!4yuxqpxw`;qcjUwd+0XNt!Gtt|j8Ywthl#zXq@Qr5z-n?^ZanX4CL3Xv5d zyg{}90dV;p-1s|OIb~uD9|Kxu3uk$b_~~0u1I_WVNm7O$yijSO-`4dz`epQ1 zUZAtn8`S&}iJy@8DG5rMKJ%ERGs^)e zpqCb9QFvy0i#ep6){ElpUvO1X-!edkEv`u!H&7NDwDgAz`Y3|0VlW(?l(I%CvdXeF zmpZ|AL$xK56;IN*m3{_7X^_N?@S9AD30TQg2*#H0l literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/shutil.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/shutil.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c3ea08816709be0f2b64edecd3904c0cfd90dece GIT binary patch literal 30769 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 Wt|x0b3CD7FIs2S~^OR#ao&OJNg$aHD literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/sre_constants.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/sre_constants.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c6900e9abca35fb4590c52ebc1ac04029cd3b4b5 GIT binary patch literal 6037 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/sre_parse.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/sre_parse.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..73aeecfef88f523b7f0dff53737eca63422aa3c1 GIT binary patch literal 20423 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 XnmU=vWKh}~1^v*u5akW9gSe~{> z;ym)+yf=H>%l-*_-OK(BbKJi{*Ew;U^IUeTB$G8JAqmF6uIj38{i?cE<%N-v*bnuk zAOC$pl75rA{zgz<#&7GUB1s@I31lXN!W8IZeV{TG`dL3jSOf;x07O|72H7CQSPX_> z_-_&$f)N>Nz6^Kg+}fJwN7J`->muHbkPuEG?KlQ0d} zaJ&T9;RcSEL4z-FyaG4j7LHfpHk*POHqEEmHTaTUhgo(5=9mU?_66KwH&MTZ`fb!_ z;4b?T?y*^zXLHCgj$H2`_q!O!J&b1_zX_C+ICmfIU!mUv^j|=(UqgaDgd}?e_t`h_ z6|1^w7HSF~hp!RG;347&JVG3WZxGMHVoj+<_$~MrN15M-$H6$mr&c6*f*w<_ zgg67=;d~#T?fA`g{NjAN<2N1n#XEj?JAU^%e)Ie~`aQ*+uEY0;^PyiY#va2mq%ccQ zFp4G2)OVPLrx?}ucoNGPX$m7-!R(~*R5BQyjwh1EEUaQi*D#v~X5t6T;4_SVy*&&v ztkiRsv>`PnRf*^KV*gOYv@FqQOKK>a5~NKjo_XV@-A2o+G`v=_cF?GL4yszs6`IrV zxM&LQIgK4n@YX@yYiVvxb6W}Y_vYeSr2(YXLp2eLnFl*NyybDw4qBBR{#dICcV8p3 z=Il3J;c0hbM|4|{WCFaR(or9QO3+UbAs8Tt5)2|#$(jCWq%~>$w#a;l*LzvQFqAjB z688>7L-TgIMo+>ph%Bi!r_N_v+P(`Mb>vd5G_-B5wYaBkw__UqVHDL}beM}L0^RxV zm?Zs6ip#!A%ft{qEPy}$oZNNyd9uEjtW+z&_uKQkmFix_+jSesSDf$7-%moNJ-?9L zZ`+;=u3c$1lWiBN@mDV$;T=@!yzw$wceazwHmzDnJW5iA63w}>gDf~YLf@+K(L8{rDHHGpq zQ%srUNXrBo!Cwh}CKxC9C&8~D3WlEH;eq}ld-9%wM=HOW>jY$p1Fku>@BkgWoOG!w z8aRSiJy*07aYfLxgY;!HM(G2TDZ3_`6X+XqR>V1!-=E$05L!B$P<6K=Dph=Gv{sW> zol0E;{?e(27w{y>^xByu(fpu`Bo_HkC%Jew$?dvZ-TOGfmGx(5Wf9Gfx(L#J{p2j( zJ)5B5I|ucO2;SP0Nh|5AXK_OF<1S8@K8Mr&vpHprY(blARQ9p5HJv7ppCpFX4-kve zm7~>9yO>@19A@{7 zkTnbG577ydMD}bKpKB;P5*B$!!sg&m-9MrRaP%`8j+V*#E2)d5Y6Mth&<}kO6atlC zoIsO&x&DVd@5|f148C0T<)$wSUw-AwEnhZ$`L!>5zHGhA0QDkjNqm0vG= zQbzjA;#=kQgF^)+?MLNp-&^%iI_z7<@17zi4&@i}q56v~OGW9Yi4BQ#kV*e3wjqJ? zLODbY>s#NOC)jyka%_r~lP$`{iIyj*?H+e9SL|!E^WxR(@P9TTW{{JQyZB=^m2T=% zwpZD%b3cL|hd01iU${;q-XBzNrZ&0QXZ?W(>)Uobrc$};t?JR^z5b5dw229JQ&cz}q82LglX7uMQih6$C$Uh5a%0?y_ zS8=2zror^UC1n}8P|CfN(j*1_FDUPV=!o+K69kh4mkF*COcPK!7gR0@c?TPTIQvMW9FT|6%KnDCAmX`Nl} zoi<8(+A5T`PFeJPy0lfakb3V{o$zk-Y-QvveHG7e%Qh`M)ZD3c`9dj|T4y(V*5wNp zCJ-0r=|*Sp@H1@sl#gwuOXU?ild@8$(ox7}@#gF7QqL;7T7~@j)~W4EdNEZpb-P$V z((G!_GBY&N?5P;cEz{C-r;>$p#X>2CY3x0!=SImYW7PdN{rL2UjNtdVE`-}%6oTKq z!SB835|)^QI)6%4vGpGWRaNCvA2k|@4xX4*qurm#3ES!Q;mrGXCW{)8k3Uf*Do3d% U$?ubf`=a9?eUhqRRU4Q82d(alqW}N^ literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/struct.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/struct.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6eec730678618d17d070bc94596f0c24e54fd7f7 GIT binary patch literal 377 zcmYk1u};G<5QgnIP12-&kRr84s)QIS#LU1_CJSU4pCM75IC7j;;f;8utW3ND6PK0& zOaAV&tzUQEE|>X(-91xE$QSvyGW2`g-7NwLP>6s*3^Pa|ea{4e4Ca?2MlmUb@nl{L+g+v=6K!<5=? fZuq6+rX9v?S3BsfxntO|TOe{8v4|xsqYL^AXWwaA literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/tarfile.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/tarfile.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8879e7a1896ce18af120e0ca96e7bf4f97561f3b GIT binary patch literal 62712 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

leprATo1 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%0DRcKcj54Gc163UqKBGP`qNby&0v3& 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 H)yRl!mkOda<)R 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 d^B07sMhy-3@c;cE2r6+ku7(5n*TQ!Vj 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 R?~Nag|C+Id)|V6J{{qOf_gVk| literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/types.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/types.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d3a19b646a38d2c893e42694f77e810765f1fb6d GIT binary patch literal 8266 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/weakref.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/__pycache__/weakref.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e2e6e033d5edfd00d91ce77f9461e802e86522b2 GIT binary patch literal 19208 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/_bootlocale.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/_bootlocale.py new file mode 120000 index 00000000..a5370e57 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/_bootlocale.py @@ -0,0 +1 @@ +/usr/lib/python3.6/_bootlocale.py \ No newline at end of file diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/_collections_abc.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/_collections_abc.py new file mode 120000 index 00000000..0de5ea02 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/_collections_abc.py @@ -0,0 +1 @@ +/usr/lib/python3.6/_collections_abc.py \ No newline at end of file diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/_dummy_thread.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/_dummy_thread.py new file mode 120000 index 00000000..cfb202b9 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/_dummy_thread.py @@ -0,0 +1 @@ +/usr/lib/python3.6/_dummy_thread.py \ No newline at end of file diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/_weakrefset.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/_weakrefset.py new file mode 120000 index 00000000..028d5b0d --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/_weakrefset.py @@ -0,0 +1 @@ +/usr/lib/python3.6/_weakrefset.py \ No newline at end of file diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/abc.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/abc.py new file mode 120000 index 00000000..60273846 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/abc.py @@ -0,0 +1 @@ +/usr/lib/python3.6/abc.py \ No newline at end of file diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/base64.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/base64.py new file mode 120000 index 00000000..3071a9d8 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/base64.py @@ -0,0 +1 @@ +/usr/lib/python3.6/base64.py \ No newline at end of file diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/bisect.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/bisect.py new file mode 120000 index 00000000..bc79a0f9 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/bisect.py @@ -0,0 +1 @@ +/usr/lib/python3.6/bisect.py \ No newline at end of file diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/codecs.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/codecs.py new file mode 120000 index 00000000..fd7a2231 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/codecs.py @@ -0,0 +1 @@ +/usr/lib/python3.6/codecs.py \ No newline at end of file diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/collections b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/collections new file mode 120000 index 00000000..c29d5e2d --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/collections @@ -0,0 +1 @@ +/usr/lib/python3.6/collections \ No newline at end of file diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/config-3.6m-x86_64-linux-gnu b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/config-3.6m-x86_64-linux-gnu new file mode 120000 index 00000000..4f26ccfd --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/config-3.6m-x86_64-linux-gnu @@ -0,0 +1 @@ +/usr/lib/python3.6/config-3.6m-x86_64-linux-gnu \ No newline at end of file diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/copy.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/copy.py new file mode 120000 index 00000000..55335c7e --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/copy.py @@ -0,0 +1 @@ +/usr/lib/python3.6/copy.py \ No newline at end of file diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/copyreg.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/copyreg.py new file mode 120000 index 00000000..f204ea6b --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/copyreg.py @@ -0,0 +1 @@ +/usr/lib/python3.6/copyreg.py \ No newline at end of file diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/distutils/__init__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/distutils/__init__.py new file mode 100644 index 00000000..29fc1da4 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/distutils/__init__.py @@ -0,0 +1,101 @@ +import os +import sys +import warnings +import imp +import opcode # opcode is not a virtualenv module, so we can use it to find the stdlib + # Important! To work on pypy, this must be a module that resides in the + # lib-python/modified-x.y.z directory + +dirname = os.path.dirname + +distutils_path = os.path.join(os.path.dirname(opcode.__file__), 'distutils') +if os.path.normpath(distutils_path) == os.path.dirname(os.path.normpath(__file__)): + warnings.warn( + "The virtualenv distutils package at %s appears to be in the same location as the system distutils?") +else: + __path__.insert(0, distutils_path) + real_distutils = imp.load_module("_virtualenv_distutils", None, distutils_path, ('', '', imp.PKG_DIRECTORY)) + # Copy the relevant attributes + try: + __revision__ = real_distutils.__revision__ + except AttributeError: + pass + __version__ = real_distutils.__version__ + +from distutils import dist, sysconfig + +try: + basestring +except NameError: + basestring = str + +## patch build_ext (distutils doesn't know how to get the libs directory +## path on windows - it hardcodes the paths around the patched sys.prefix) + +if sys.platform == 'win32': + from distutils.command.build_ext import build_ext as old_build_ext + class build_ext(old_build_ext): + def finalize_options (self): + if self.library_dirs is None: + self.library_dirs = [] + elif isinstance(self.library_dirs, basestring): + self.library_dirs = self.library_dirs.split(os.pathsep) + + self.library_dirs.insert(0, os.path.join(sys.real_prefix, "Libs")) + old_build_ext.finalize_options(self) + + from distutils.command import build_ext as build_ext_module + build_ext_module.build_ext = build_ext + +## distutils.dist patches: + +old_find_config_files = dist.Distribution.find_config_files +def find_config_files(self): + found = old_find_config_files(self) + system_distutils = os.path.join(distutils_path, 'distutils.cfg') + #if os.path.exists(system_distutils): + # found.insert(0, system_distutils) + # What to call the per-user config file + if os.name == 'posix': + user_filename = ".pydistutils.cfg" + else: + user_filename = "pydistutils.cfg" + user_filename = os.path.join(sys.prefix, user_filename) + if os.path.isfile(user_filename): + for item in list(found): + if item.endswith('pydistutils.cfg'): + found.remove(item) + found.append(user_filename) + return found +dist.Distribution.find_config_files = find_config_files + +## distutils.sysconfig patches: + +old_get_python_inc = sysconfig.get_python_inc +def sysconfig_get_python_inc(plat_specific=0, prefix=None): + if prefix is None: + prefix = sys.real_prefix + return old_get_python_inc(plat_specific, prefix) +sysconfig_get_python_inc.__doc__ = old_get_python_inc.__doc__ +sysconfig.get_python_inc = sysconfig_get_python_inc + +old_get_python_lib = sysconfig.get_python_lib +def sysconfig_get_python_lib(plat_specific=0, standard_lib=0, prefix=None): + if standard_lib and prefix is None: + prefix = sys.real_prefix + return old_get_python_lib(plat_specific, standard_lib, prefix) +sysconfig_get_python_lib.__doc__ = old_get_python_lib.__doc__ +sysconfig.get_python_lib = sysconfig_get_python_lib + +old_get_config_vars = sysconfig.get_config_vars +def sysconfig_get_config_vars(*args): + real_vars = old_get_config_vars(*args) + if sys.platform == 'win32': + lib_dir = os.path.join(sys.real_prefix, "libs") + if isinstance(real_vars, dict) and 'LIBDIR' not in real_vars: + real_vars['LIBDIR'] = lib_dir # asked for all + elif isinstance(real_vars, list) and 'LIBDIR' in args: + real_vars = real_vars + [lib_dir] # asked for list + return real_vars +sysconfig_get_config_vars.__doc__ = old_get_config_vars.__doc__ +sysconfig.get_config_vars = sysconfig_get_config_vars diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/distutils/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/distutils/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1ddae7140bb66a638d2e6fb767b61729de57ddb4 GIT binary patch literal 2874 zcma)7&2!tv72gFw5QIpIk}O%Vm4t5mMcWcH^|Ysqn>NmP@-eE%$u!M&(jADqlmLPN zvw$R1L!Ibz+rOaqUV7{wv)7(_=^xNje-D%?Svj=8?B{!L_wByl@9oo8D}46%y&wL( z%Gf{ImG1`npQ03h<%}t&c*?}0<$_mZM>tjM3b$%K;c1rC5?}aLTVIT{mjrXJoVgWmoZmA@H^c_K^V1vSO|d!N5?h>21AUV-*lfdQ8#e!5 z*y#7f%?mr8+*0+C^A~O&!8%B9k9WlToV{SGp~5#zh5G%uD|RZ`2atUTA9wVJaz}3_ z-QPot<=-lI|oLjG{x`jmqx5q8m*nIx>Cb!IHV%&CR7w519FWs*KL?#p zQ3}GHW&|<73$VeFUFG7Co~c7L02-^0+8WAdD8=tk%~%3_jsmlOh`wamPRVJm1oF%t z^%A%AlG+@zveHg`#W7P)g0hi>giyj-xso(zj4-GewsrRnZ6&;~DWQ zPj`(RBA|e>|0Cu5yWp_ow->$@J-E`1&|ie=;Sjr+dHbFN4{a zGS1>s%Du_dY+%3pC`A($;~@`tlXsk3{Os1!;l1nr?)N+!NSOgrQrb|;ajuS2>NlnQ z5$IeQ1lU8%OPO%?Tfv@1a*;P0Y<5a6OzC^$o>L}cguoR>UtDBgvmH$_zcueth{I z!>CF696cbVwtv=IUfkYb2oy~6B7S|=!R5UpI9t6o(QDaFiaRb($pvH3Pjz8da3<5H z3JIFo_HrG$KoQ-Z>5$030FWOSWNN*XC>ZEW6{j%(=NmoFPqg)k@|o(@3{lP2hWT-( zL}x+oOB##TG0<9hL3>y)2K%qY#;*Ou;a_0QVjC3$I@(^yeaGV+;G_+_P%(s{0mYI& zYM1dNvl)mF4!28|P!ydRX66oVm+$x7>Y!!~YIdEj>rj_+0a~DRfV9(^q){o0i5|qm zcwjz&=5?31mpSR0`BzXbd{pGQ&rJ`#0r^HBwH``^Gg@}W&H4=QALX0MS7+ht%$ZZN z`XAncZ8*(CtRtF~Jyc|rq{Q<7dkpPwV1MCplRSQm@c^az$YUxmP>MgIB4+%FEtsL` zwH2kCARmGUKIJ~Jq(0+ifNc3pxidbhn`biz@o+z(TuL&$#YRBJM!pd=IID1`s@7r%M_#j9RuH{J&70@f#ZZ5DtHC|JYXjIV*b3a|;V7(F9{(sa@7 zxz>x!VIdk-vZPf+9a~Wvz8>QD-VO1UjsJj^3StYzI0P=&QByG=(;iNh>IrC+@-GIv z3->CH1*eh8klzdI#$#mkd@{(DuJ~!|@T6j6MO36bVxg2~2TR!?!#Nj>r6njM(g@-f ziC5A*QWu%gwqAbqLgMm1|Loh}zWQFYs{=22FOW8kKEb<_XGo&$Uzd1s4vtIxxiPu1 zD^i|lvk)3$mm%01%9Ex+TQ&B<=7p|{$I9$tQruoHzcT zyAphQ4-LH;Huz-m$~>bu7OzkR2zd2-fwRrK+~a}MiR)km>SQuc7Kqt3nsS*Anc7`&r@H8wuP*x^h zfvFB4%1QtGkWRm|>Ga_Ky?S^7fRB{F;%U1~38$$MG@uxhtYLyl-)JcbWVrr7pPQ1vHejyk&HL!_S5)oUyC{#U;Eb2mVK*fHh)?#-F!jyPOAS4mER2c SxpCBMb-@x7Ml0hvJ7imR#!Qm{ literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/easy_install.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/easy_install.py new file mode 100644 index 00000000..d87e9840 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/easy_install.py @@ -0,0 +1,5 @@ +"""Run the EasyInstall command""" + +if __name__ == '__main__': + from setuptools.command.easy_install import main + main() diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip-19.1.1.dist-info/INSTALLER b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip-19.1.1.dist-info/INSTALLER new file mode 100644 index 00000000..a1b589e3 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip-19.1.1.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip-19.1.1.dist-info/LICENSE.txt b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip-19.1.1.dist-info/LICENSE.txt new file mode 100644 index 00000000..737fec5c --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip-19.1.1.dist-info/LICENSE.txt @@ -0,0 +1,20 @@ +Copyright (c) 2008-2019 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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip-19.1.1.dist-info/METADATA b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip-19.1.1.dist-info/METADATA new file mode 100644 index 00000000..d7aa9a4e --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip-19.1.1.dist-info/METADATA @@ -0,0 +1,75 @@ +Metadata-Version: 2.1 +Name: pip +Version: 19.1.1 +Summary: The PyPA recommended tool for installing Python packages. +Home-page: https://pip.pypa.io/ +Author: The pip developers +Author-email: pypa-dev@groups.google.com +License: MIT +Keywords: distutils easy_install egg setuptools wheel virtualenv +Platform: UNKNOWN +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: MIT License +Classifier: Topic :: Software Development :: Build Tools +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 2 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.4 +Classifier: Programming Language :: Python :: 3.5 +Classifier: Programming Language :: Python :: 3.6 +Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: PyPy +Requires-Python: >=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.* + +pip - The Python Package Installer +================================== + +.. image:: https://img.shields.io/pypi/v/pip.svg + :target: https://pypi.org/project/pip/ + +.. image:: https://readthedocs.org/projects/pip/badge/?version=latest + :target: https://pip.pypa.io/en/latest + +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`_ +* `Release notes`_ + +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 and feel free to jump on the developer mailing lists and chat rooms: + +* `GitHub page`_ +* `Dev mailing list`_ +* `Dev IRC`_ + +Code of Conduct +--------------- + +Everyone interacting in the pip project's codebases, issue trackers, chat +rooms, and mailing lists is expected to follow the `PyPA Code of Conduct`_. + +.. _package installer: https://packaging.python.org/en/latest/current/ +.. _Python Package Index: https://pypi.org +.. _Installation: https://pip.pypa.io/en/stable/installing.html +.. _Usage: https://pip.pypa.io/en/stable/ +.. _Release notes: https://pip.pypa.io/en/stable/news.html +.. _GitHub page: https://github.com/pypa/pip +.. _Issue tracking: https://github.com/pypa/pip/issues +.. _Discourse channel: https://discuss.python.org/c/packaging +.. _Dev mailing list: https://groups.google.com/forum/#!forum/pypa-dev +.. _User IRC: https://webchat.freenode.net/?channels=%23pypa +.. _Dev IRC: https://webchat.freenode.net/?channels=%23pypa-dev +.. _PyPA Code of Conduct: https://www.pypa.io/en/latest/code-of-conduct/ + + diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip-19.1.1.dist-info/RECORD b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip-19.1.1.dist-info/RECORD new file mode 100644 index 00000000..10d6aa5b --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip-19.1.1.dist-info/RECORD @@ -0,0 +1,618 @@ +pip/__init__.py,sha256=A9ZYTNji94NmcmoIbn-XLsEni4ac8BoiAt7guiAW27g,23 +pip/__main__.py,sha256=L3IHqBeasELUHvwy5CT_izVEMhM12tve289qut49DvU,623 +pip/_internal/__init__.py,sha256=Di4rpoQhA2Kx0Dm0THczf61CDOXcPokR2FIpyKkRm1Y,2870 +pip/_internal/build_env.py,sha256=ZUpR-00pxQc-Mw750jyBVA-oWb4WHtpK63pfiTHd8qU,7392 +pip/_internal/cache.py,sha256=PQesJm1JrjgAya3VyV6qkbnfACG23c1wQ7PaSw_0F-Y,7656 +pip/_internal/configuration.py,sha256=xit1f8ZdnHz-AHzWAKTUa_gZzlIIM-5AgK30glB71ik,13115 +pip/_internal/download.py,sha256=0_8jUtL4SLZe4qo8Fe66qkbO69gUG-IPbp932WOHyFs,35147 +pip/_internal/exceptions.py,sha256=ryXWmEJpSHr3yXXk1efWHSzQwAjBdBJiKR5kCQvjgPA,9117 +pip/_internal/index.py,sha256=BO6jpJRvb_6HaS4meE8Lj_lyAX7IRP6pRof-zG-_hYw,42268 +pip/_internal/locations.py,sha256=-N3f1I24gcPTdW52onPnySDoQUIn_TtPYV99WwsjxRE,6932 +pip/_internal/pep425tags.py,sha256=jyBorYxepVJeHNo69TE-3UxJXsGO2XvGxveSWQDi_Wo,13128 +pip/_internal/pyproject.py,sha256=OlCw7pSqST68hUF_eV-YVaqJ4I7z_ROJwvgra-2C_5I,6464 +pip/_internal/resolve.py,sha256=rZDMkyhUIbaytY9KsYQVez8nl21xLXgaDt8xuHvyGMI,15128 +pip/_internal/wheel.py,sha256=-MijhN1BIuaQkb3909smA63wkbvdRrdtr1CUDxnQTqA,41189 +pip/_internal/cli/__init__.py,sha256=FkHBgpxxb-_gd6r1FjnNhfMOzAUYyXoXKJ6abijfcFU,132 +pip/_internal/cli/autocompletion.py,sha256=ptvsMdGjq42pzoY4skABVF43u2xAtLJlXAulPi-A10Y,6083 +pip/_internal/cli/base_command.py,sha256=2SbVZ2o3KmVdeJlK4l1lP6y_ZMFZ8VkDp9ns1ByZ-xM,12629 +pip/_internal/cli/cmdoptions.py,sha256=IA1XAgTJ1oWXp1oF3CkE8mpUx8vqIysyd7hlEZk7wWE,23813 +pip/_internal/cli/main_parser.py,sha256=YH_w_hApq2pyS_G5tZlbIe7g_HUIcKE820jhnv0piVA,3002 +pip/_internal/cli/parser.py,sha256=VZKUKJPbU6I2cHPLDOikin-aCx7OvLcZ3fzYp3xytd8,9378 +pip/_internal/cli/status_codes.py,sha256=F6uDG6Gj7RNKQJUDnd87QKqI16Us-t-B0wPF_4QMpWc,156 +pip/_internal/commands/__init__.py,sha256=7fscm9bUGJInZwWY7VjH2pPC7HUWQWyjYMEIB33L9CY,2223 +pip/_internal/commands/check.py,sha256=liigNVif0iz2mBfhvsajrLZT5zM5KIvgmKvhAW91EzA,1430 +pip/_internal/commands/completion.py,sha256=hqvCvoxsIHjysiD7olHKTqK2lzE1_lS6LWn69kN5qyI,2929 +pip/_internal/commands/configuration.py,sha256=Il76e-ERfEHtW2GbV1aTR6o-xurh-LVv2NCea7erP4s,8020 +pip/_internal/commands/download.py,sha256=XPe3Kuj9iZfXwOiJq70mYVYNZD5lJCLnGT_C61cOsKw,6623 +pip/_internal/commands/freeze.py,sha256=VvS3G0wrm_9BH3B7Ex5msLL_1UQTtCq5G8dDI63Iemo,3259 +pip/_internal/commands/hash.py,sha256=K1JycsD-rpjqrRcL_ijacY9UKmI82pQcLYq4kCM4Pv0,1681 +pip/_internal/commands/help.py,sha256=MwBhPJpW1Dt3GfJV3V8V6kgAy_pXT0jGrZJB1wCTW-E,1090 +pip/_internal/commands/install.py,sha256=vSb8TfUHwz3HJ5cA-JnPP3X84ONQ0wkCztw0pHFbmsc,22841 +pip/_internal/commands/list.py,sha256=EtKEUotPbLCzzcWrZqEiEXi4ic00dgUOKUeNU0y7Pfg,10166 +pip/_internal/commands/search.py,sha256=sLZ9icKMEEGekHvzRRZMiTd1zCFIZeDptyyU1mQCYzk,4728 +pip/_internal/commands/show.py,sha256=bE-ucu8fAjTTENpRRKhwD3QSWR8Rss7YgKAbMJoxock,6273 +pip/_internal/commands/uninstall.py,sha256=h0gfPF5jylDESx_IHgF6bZME7QAEOHzQHdn65GP-jrE,2963 +pip/_internal/commands/wheel.py,sha256=7MNPZqK9WWxZC3TgzvMBH-RPRlOFLpwq927lkzUiUjI,7167 +pip/_internal/models/__init__.py,sha256=3DHUd_qxpPozfzouoqa9g9ts1Czr5qaHfFxbnxriepM,63 +pip/_internal/models/candidate.py,sha256=_IzS-yw0h2UHfZALsZ2mxkeGNSNuNGspjSn2JfZ-ZHM,1045 +pip/_internal/models/format_control.py,sha256=ap8Swa26ocSXBxIuCvaDBRZjxdKUFuwC-bfqXQHWtKw,2250 +pip/_internal/models/index.py,sha256=K59A8-hVhBM20Xkahr4dTwP7OjkJyEqXH11UwHFVgqM,1060 +pip/_internal/models/link.py,sha256=Hqu72UgH266njr2z2kTnIG-sQiPtjENDbPqXFzT-84s,4783 +pip/_internal/operations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/_internal/operations/check.py,sha256=CZHaksHKUMo58wGHGhhKlPrpcRMHObouzzyd9pMRFt8,5109 +pip/_internal/operations/freeze.py,sha256=_Ffl2HpoWLLHaiB1XyTjKIA3QWC8H-E1ib6xJgX_mRE,9279 +pip/_internal/operations/prepare.py,sha256=jQ6FaxA2u_MYnDQxcu6YCfmJ9sfhqrKN9vdd4-5N6lU,16931 +pip/_internal/req/__init__.py,sha256=Y2SjAuMFsSt3dkiK8kkiQAfv8sHrjl0PAT63FKFT0tM,2364 +pip/_internal/req/constructors.py,sha256=4KlO_-G89XYZW1VnzHwV34oCvR6ilmxFqSSGLgv4PEw,11399 +pip/_internal/req/req_file.py,sha256=mZoQvhHZJwgljrXDH8CLXaNoUK4sM8_bRfK9Po2fM80,13714 +pip/_internal/req/req_install.py,sha256=SGJLNpyZwzOL_EqfviIvAoZgxAoivxmFBN1cOU7DX9s,40061 +pip/_internal/req/req_set.py,sha256=PaDc5EswLQhxBMFbuKbJ0frZbMNKocmA8OGqIWT-9EY,7860 +pip/_internal/req/req_tracker.py,sha256=wBpDzSDSYwpUfW4K43NrEOCCp1r6stuubfLc65Y95EM,3129 +pip/_internal/req/req_uninstall.py,sha256=rVOk8BRM_L9rsUUr9lmkV6Lm9N1Os7TEIDir6tT1Q7U,23105 +pip/_internal/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/_internal/utils/appdirs.py,sha256=r9i0BZLK9KcvrzI5tqlw8ehRTtSehWGERFLy7YppG3g,9398 +pip/_internal/utils/compat.py,sha256=Q0cmYGBaKB4tV5E0CG11339YLxuCaqdUCSJd9vinMc8,8551 +pip/_internal/utils/deprecation.py,sha256=HYUvfCZUxwLIFlYHeZM3VmuFhXTdlw0rk4-cC14bKw4,3080 +pip/_internal/utils/encoding.py,sha256=tudXCoAPe9fZvNK4cmWQs2frREZ-QuGCwF_SlTyz6cI,1218 +pip/_internal/utils/filesystem.py,sha256=ojaIDvOFOtkpKme5se6X2N8ARmQxu8cxvaaI-NFqVtk,990 +pip/_internal/utils/glibc.py,sha256=9_1wY9Lmca4xzOQDF1A6ITW_N80j_BXwN7Sx7vBqP4k,3282 +pip/_internal/utils/hashes.py,sha256=_6l8M_nqmLZjs-o2lP2rB7ZleAT05WOuqgwBa8uFYR8,3527 +pip/_internal/utils/logging.py,sha256=qSYK7Wf_oiCr1VR4qvAq_TtpY3SIKSlVDgnAeQqSjHc,11671 +pip/_internal/utils/misc.py,sha256=QsYl2j5rU5Mh_CEsSf1W8GB6HvPOfioj30Emqz7mg7s,32434 +pip/_internal/utils/models.py,sha256=DQYZSRhjvSdDTAaJLLCpDtxAn1S_-v_8nlNjv4T2jwY,1042 +pip/_internal/utils/outdated.py,sha256=sEe1l902jiOl3tArf6omqVd44s4BT9DOk3a3CXtJNNI,5868 +pip/_internal/utils/packaging.py,sha256=frr5M-ORe30rRKbH6pwqp_jkX1T8rx-UGDlj8vG5HII,2743 +pip/_internal/utils/setuptools_build.py,sha256=0blfscmNJW_iZ5DcswJeDB_PbtTEjfK9RL1R1WEDW2E,278 +pip/_internal/utils/temp_dir.py,sha256=0Xq5ZlOd2OOeHwKM6hGy66gnMGAbyhio7DtjLHd7DFg,5339 +pip/_internal/utils/typing.py,sha256=bF73ImJzIaxLLEVwfEaSJzFGqV9LaxkQBvDULIyr1jI,1125 +pip/_internal/utils/ui.py,sha256=yRqmi2V4OeTYP9SnXhuXKlyRx8xJ79AjLRgvLCZ4E1E,13812 +pip/_internal/vcs/__init__.py,sha256=kgwOhkt6ddbKosZytktLydMUb_e-JpXMstJF9YpSOwM,19205 +pip/_internal/vcs/bazaar.py,sha256=3lA6CKyrYpoJuxjTa8oTozszNcqdYILqEhKLJ41RMug,3231 +pip/_internal/vcs/git.py,sha256=x0PQDgzWho544gfqtE9CXoUkN34zE4YkpgrbTcWEte4,12960 +pip/_internal/vcs/mercurial.py,sha256=AbH4IWdLCsjUxFnIHRvijV-7SNhfjDZJJFzQ1e_b48Q,3355 +pip/_internal/vcs/subversion.py,sha256=cMH4MEobSj68gaSiBD53KXVJnEbhtuUJjL8U1Kk_v70,8167 +pip/_vendor/__init__.py,sha256=iip2nWwH_riYqnDnM0q4BJFrWE-XWjYfxCejJKct0WM,4654 +pip/_vendor/appdirs.py,sha256=BENKsvcA08IpccD9345-rMrg3aXWFA1q6BFEglnHg6I,24547 +pip/_vendor/distro.py,sha256=X2So5kjrRKyMbQJ90Xgy93HU5eFtujCzKaYNeoy1k1c,43251 +pip/_vendor/ipaddress.py,sha256=2OgbkeAD2rLkcXqbcvof3J5R7lRwjNLoBySyTkBtKnc,79852 +pip/_vendor/pyparsing.py,sha256=sxGUe_YcWBB5ZoHec0m1iJtgcj4iKv_SGfdA_zVCYII,245385 +pip/_vendor/retrying.py,sha256=k3fflf5_Mm0XcIJYhB7Tj34bqCCPhUDkYbx1NvW2FPE,9972 +pip/_vendor/six.py,sha256=h9jch2pS86y4R36pKRS3LOYUCVFNIJMRwjZ4fJDtJ44,32452 +pip/_vendor/cachecontrol/__init__.py,sha256=6cRPchVqkAkeUtYTSW8qCetjSqJo-GxP-n4VMVDbvmc,302 +pip/_vendor/cachecontrol/_cmd.py,sha256=URGE0KrA87QekCG3SGPatlSPT571dZTDjNa-ZXX3pDc,1295 +pip/_vendor/cachecontrol/adapter.py,sha256=eBGAtVNRZgtl_Kj5JV54miqL9YND-D0JZPahwY8kFtY,4863 +pip/_vendor/cachecontrol/cache.py,sha256=1fc4wJP8HYt1ycnJXeEw5pCpeBL2Cqxx6g9Fb0AYDWQ,805 +pip/_vendor/cachecontrol/compat.py,sha256=kHNvMRdt6s_Xwqq_9qJmr9ou3wYMOMUMxPPcwNxT8Mc,695 +pip/_vendor/cachecontrol/controller.py,sha256=U7g-YwizQ2O5NRgK_MZreF1ntM4E49C3PuF3od-Vwz4,13698 +pip/_vendor/cachecontrol/filewrapper.py,sha256=vACKO8Llzu_ZWyjV1Fxn1MA4TGU60N5N3GSrAFdAY2Q,2533 +pip/_vendor/cachecontrol/heuristics.py,sha256=BFGHJ3yQcxvZizfo90LLZ04T_Z5XSCXvFotrp7Us0sc,4070 +pip/_vendor/cachecontrol/serialize.py,sha256=GebE34fgToyWwAsRPguh8hEPN6CqoG-5hRMXRsjVABQ,6954 +pip/_vendor/cachecontrol/wrapper.py,sha256=sfr9YHWx-5TwNz1H5rT6QOo8ggII6v3vbEDjQFwR6wc,671 +pip/_vendor/cachecontrol/caches/__init__.py,sha256=-gHNKYvaeD0kOk5M74eOrsSgIKUtC6i6GfbmugGweEo,86 +pip/_vendor/cachecontrol/caches/file_cache.py,sha256=8vrSzzGcdfEfICago1uSFbkumNJMGLbCdEkXsmUIExw,4177 +pip/_vendor/cachecontrol/caches/redis_cache.py,sha256=HxelMpNCo-dYr2fiJDwM3hhhRmxUYtB5tXm1GpAAT4Y,856 +pip/_vendor/certifi/__init__.py,sha256=-M1moep9D6jZnOAT0qnM1dpoEHMPage7Osv5xLRLyFg,52 +pip/_vendor/certifi/__main__.py,sha256=NaCn6WtWME-zzVWQ2j4zFyl8cY4knDa9CwtHNIeFPhM,53 +pip/_vendor/certifi/cacert.pem,sha256=OXuDPlrPiaJwm5ZEAamspo0ktiNJtyu-OGhOWGqgeic,284518 +pip/_vendor/certifi/core.py,sha256=EuFc2BsToG5O1-qsx4BSjQ1r1-7WRtH87b1WflZOWhI,218 +pip/_vendor/chardet/__init__.py,sha256=YsP5wQlsHJ2auF1RZJfypiSrCA7_bQiRm3ES_NI76-Y,1559 +pip/_vendor/chardet/big5freq.py,sha256=D_zK5GyzoVsRes0HkLJziltFQX0bKCLOrFe9_xDvO_8,31254 +pip/_vendor/chardet/big5prober.py,sha256=kBxHbdetBpPe7xrlb-e990iot64g_eGSLd32lB7_h3M,1757 +pip/_vendor/chardet/chardistribution.py,sha256=3woWS62KrGooKyqz4zQSnjFbJpa6V7g02daAibTwcl8,9411 +pip/_vendor/chardet/charsetgroupprober.py,sha256=6bDu8YIiRuScX4ca9Igb0U69TA2PGXXDej6Cc4_9kO4,3787 +pip/_vendor/chardet/charsetprober.py,sha256=KSmwJErjypyj0bRZmC5F5eM7c8YQgLYIjZXintZNstg,5110 +pip/_vendor/chardet/codingstatemachine.py,sha256=VYp_6cyyki5sHgXDSZnXW4q1oelHc3cu9AyQTX7uug8,3590 +pip/_vendor/chardet/compat.py,sha256=PKTzHkSbtbHDqS9PyujMbX74q1a8mMpeQTDVsQhZMRw,1134 +pip/_vendor/chardet/cp949prober.py,sha256=TZ434QX8zzBsnUvL_8wm4AQVTZ2ZkqEEQL_lNw9f9ow,1855 +pip/_vendor/chardet/enums.py,sha256=Aimwdb9as1dJKZaFNUH2OhWIVBVd6ZkJJ_WK5sNY8cU,1661 +pip/_vendor/chardet/escprober.py,sha256=kkyqVg1Yw3DIOAMJ2bdlyQgUFQhuHAW8dUGskToNWSc,3950 +pip/_vendor/chardet/escsm.py,sha256=RuXlgNvTIDarndvllNCk5WZBIpdCxQ0kcd9EAuxUh84,10510 +pip/_vendor/chardet/eucjpprober.py,sha256=iD8Jdp0ISRjgjiVN7f0e8xGeQJ5GM2oeZ1dA8nbSeUw,3749 +pip/_vendor/chardet/euckrfreq.py,sha256=-7GdmvgWez4-eO4SuXpa7tBiDi5vRXQ8WvdFAzVaSfo,13546 +pip/_vendor/chardet/euckrprober.py,sha256=MqFMTQXxW4HbzIpZ9lKDHB3GN8SP4yiHenTmf8g_PxY,1748 +pip/_vendor/chardet/euctwfreq.py,sha256=No1WyduFOgB5VITUA7PLyC5oJRNzRyMbBxaKI1l16MA,31621 +pip/_vendor/chardet/euctwprober.py,sha256=13p6EP4yRaxqnP4iHtxHOJ6R2zxHq1_m8hTRjzVZ95c,1747 +pip/_vendor/chardet/gb2312freq.py,sha256=JX8lsweKLmnCwmk8UHEQsLgkr_rP_kEbvivC4qPOrlc,20715 +pip/_vendor/chardet/gb2312prober.py,sha256=gGvIWi9WhDjE-xQXHvNIyrnLvEbMAYgyUSZ65HUfylw,1754 +pip/_vendor/chardet/hebrewprober.py,sha256=c3SZ-K7hvyzGY6JRAZxJgwJ_sUS9k0WYkvMY00YBYFo,13838 +pip/_vendor/chardet/jisfreq.py,sha256=vpmJv2Bu0J8gnMVRPHMFefTRvo_ha1mryLig8CBwgOg,25777 +pip/_vendor/chardet/jpcntx.py,sha256=PYlNqRUQT8LM3cT5FmHGP0iiscFlTWED92MALvBungo,19643 +pip/_vendor/chardet/langbulgarianmodel.py,sha256=1HqQS9Pbtnj1xQgxitJMvw8X6kKr5OockNCZWfEQrPE,12839 +pip/_vendor/chardet/langcyrillicmodel.py,sha256=LODajvsetH87yYDDQKA2CULXUH87tI223dhfjh9Zx9c,17948 +pip/_vendor/chardet/langgreekmodel.py,sha256=8YAW7bU8YwSJap0kIJSbPMw1BEqzGjWzqcqf0WgUKAA,12688 +pip/_vendor/chardet/langhebrewmodel.py,sha256=JSnqmE5E62tDLTPTvLpQsg5gOMO4PbdWRvV7Avkc0HA,11345 +pip/_vendor/chardet/langhungarianmodel.py,sha256=RhapYSG5l0ZaO-VV4Fan5sW0WRGQqhwBM61yx3yxyOA,12592 +pip/_vendor/chardet/langthaimodel.py,sha256=8l0173Gu_W6G8mxmQOTEF4ls2YdE7FxWf3QkSxEGXJQ,11290 +pip/_vendor/chardet/langturkishmodel.py,sha256=W22eRNJsqI6uWAfwXSKVWWnCerYqrI8dZQTm_M0lRFk,11102 +pip/_vendor/chardet/latin1prober.py,sha256=S2IoORhFk39FEFOlSFWtgVybRiP6h7BlLldHVclNkU8,5370 +pip/_vendor/chardet/mbcharsetprober.py,sha256=AR95eFH9vuqSfvLQZN-L5ijea25NOBCoXqw8s5O9xLQ,3413 +pip/_vendor/chardet/mbcsgroupprober.py,sha256=h6TRnnYq2OxG1WdD5JOyxcdVpn7dG0q-vB8nWr5mbh4,2012 +pip/_vendor/chardet/mbcssm.py,sha256=SY32wVIF3HzcjY3BaEspy9metbNSKxIIB0RKPn7tjpI,25481 +pip/_vendor/chardet/sbcharsetprober.py,sha256=LDSpCldDCFlYwUkGkwD2oFxLlPWIWXT09akH_2PiY74,5657 +pip/_vendor/chardet/sbcsgroupprober.py,sha256=1IprcCB_k1qfmnxGC6MBbxELlKqD3scW6S8YIwdeyXA,3546 +pip/_vendor/chardet/sjisprober.py,sha256=IIt-lZj0WJqK4rmUZzKZP4GJlE8KUEtFYVuY96ek5MQ,3774 +pip/_vendor/chardet/universaldetector.py,sha256=qL0174lSZE442eB21nnktT9_VcAye07laFWUeUrjttY,12485 +pip/_vendor/chardet/utf8prober.py,sha256=IdD8v3zWOsB8OLiyPi-y_fqwipRFxV9Nc1eKBLSuIEw,2766 +pip/_vendor/chardet/version.py,sha256=sp3B08mrDXB-pf3K9fqJ_zeDHOCLC8RrngQyDFap_7g,242 +pip/_vendor/chardet/cli/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1 +pip/_vendor/chardet/cli/chardetect.py,sha256=DI8dlV3FBD0c0XA_y3sQ78z754DUv1J8n34RtDjOXNw,2774 +pip/_vendor/colorama/__init__.py,sha256=lJdY6COz9uM_pXwuk9oLr0fp8H8q2RrUqN16GKabvq4,239 +pip/_vendor/colorama/ansi.py,sha256=Fi0un-QLqRm-v7o_nKiOqyC8PapBJK7DLV_q9LKtTO0,2524 +pip/_vendor/colorama/ansitowin32.py,sha256=u8QaqdqS_xYSfNkPM1eRJLHz6JMWPodaJaP0mxgHCDc,10462 +pip/_vendor/colorama/initialise.py,sha256=PprovDNxMTrvoNHFcL2NZjpH2XzDc8BLxLxiErfUl4k,1915 +pip/_vendor/colorama/win32.py,sha256=bJ8Il9jwaBN5BJ8bmN6FoYZ1QYuMKv2j8fGrXh7TJjw,5404 +pip/_vendor/colorama/winterm.py,sha256=2y_2b7Zsv34feAsP67mLOVc-Bgq51mdYGo571VprlrM,6438 +pip/_vendor/distlib/__init__.py,sha256=7uthK6m96pTekk8hjlT-MybcwYmmxwP8gEOxXVg1f2s,581 +pip/_vendor/distlib/compat.py,sha256=xdNZmqFN5HwF30HjRn5M415pcC2kgXRBXn767xS8v-M,41404 +pip/_vendor/distlib/database.py,sha256=-KJH63AJ7hqjLtGCwOTrionhKr2Vsytdwkjyo8UdEco,51029 +pip/_vendor/distlib/index.py,sha256=Dd1kIV06XIdynNpKxHMMRRIKsXuoUsG7QIzntfVtZCI,21073 +pip/_vendor/distlib/locators.py,sha256=S9G2IsZp0RnMMbXGrT-gu7892pNpy1XMlUEuUHX3OI8,51828 +pip/_vendor/distlib/manifest.py,sha256=nQEhYmgoreaBZzyFzwYsXxJARu3fo4EkunU163U16iE,14811 +pip/_vendor/distlib/markers.py,sha256=6Ac3cCfFBERexiESWIOXmg-apIP8l2esafNSX3KMy-8,4387 +pip/_vendor/distlib/metadata.py,sha256=BNCnpRfFVslyZcosr4vnE_YbkRb3TNxXtk7TrDszJdc,40172 +pip/_vendor/distlib/resources.py,sha256=2FGv0ZHF14KXjLIlL0R991lyQQGcewOS4mJ-5n-JVnc,10766 +pip/_vendor/distlib/scripts.py,sha256=NYqRJ2uuEuJwr_NNLzWH0m_s_YsobDFQb6HqxuQ2Sew,16638 +pip/_vendor/distlib/t32.exe,sha256=ftub1bsSPUCOnBn-eCtcarKTk0N0CBEP53BumkIxWJE,92672 +pip/_vendor/distlib/t64.exe,sha256=iChOG627LWTHY8-jzSwlo9SYU5a-0JHwQu4AqDz8I68,102400 +pip/_vendor/distlib/util.py,sha256=gwKL5geJKmtR4GeIUnoMAWjsPPG3tVP_mFxw_Sx-isc,59681 +pip/_vendor/distlib/version.py,sha256=_n7F6juvQGAcn769E_SHa7fOcf5ERlEVymJ_EjPRwGw,23391 +pip/_vendor/distlib/w32.exe,sha256=NPYPpt7PIjVqABEu1CzabbDyHHkJpuw-_qZq_48H0j0,89088 +pip/_vendor/distlib/w64.exe,sha256=Yb-qr1OQEzL8KRGTk-XHUZDwMSljfQeZnVoTk-K4e7E,99328 +pip/_vendor/distlib/wheel.py,sha256=gV53KDG7BgbxsdeKjnATbP47gTEJRNylcIeE1TFin1o,39880 +pip/_vendor/distlib/_backport/__init__.py,sha256=bqS_dTOH6uW9iGgd0uzfpPjo6vZ4xpPZ7kyfZJ2vNaw,274 +pip/_vendor/distlib/_backport/misc.py,sha256=KWecINdbFNOxSOP1fGF680CJnaC6S4fBRgEtaYTw0ig,971 +pip/_vendor/distlib/_backport/shutil.py,sha256=VW1t3uYqUjWZH7jV-6QiimLhnldoV5uIpH4EuiT1jfw,25647 +pip/_vendor/distlib/_backport/sysconfig.cfg,sha256=swZKxq9RY5e9r3PXCrlvQPMsvOdiWZBTHLEbqS8LJLU,2617 +pip/_vendor/distlib/_backport/sysconfig.py,sha256=JdJ9ztRy4Hc-b5-VS74x3nUtdEIVr_OBvMsIb8O2sjc,26964 +pip/_vendor/distlib/_backport/tarfile.py,sha256=Ihp7rXRcjbIKw8COm9wSePV9ARGXbSF9gGXAMn2Q-KU,92628 +pip/_vendor/html5lib/__init__.py,sha256=Ztrn7UvF-wIFAgRBBa0ML-Gu5AffH3BPX_INJx4SaBI,1162 +pip/_vendor/html5lib/_ihatexml.py,sha256=3LBtJMlzgwM8vpQiU1TvGmEEmNH72sV0yD8yS53y07A,16705 +pip/_vendor/html5lib/_inputstream.py,sha256=bPUWcAfJScK4xkjQQaG_HsI2BvEVbFvI0AsodDYPQj0,32552 +pip/_vendor/html5lib/_tokenizer.py,sha256=YAaOEBD6qc5ISq9Xt9Nif1OFgcybTTfMdwqBkZhpAq4,76580 +pip/_vendor/html5lib/_utils.py,sha256=ismpASeqa2jqEPQjHUj8vReAf7yIoKnvLN5fuOw6nv0,4015 +pip/_vendor/html5lib/constants.py,sha256=4lmZWLtEPRLnl8NzftOoYTJdo6jpeMtP6dqQC0g_bWQ,83518 +pip/_vendor/html5lib/html5parser.py,sha256=g5g2ezkusHxhi7b23vK_-d6K6BfIJRbqIQmvQ9z4EgI,118963 +pip/_vendor/html5lib/serializer.py,sha256=yfcfBHse2wDs6ojxn-kieJjLT5s1ipilQJ0gL3-rJis,15758 +pip/_vendor/html5lib/_trie/__init__.py,sha256=8VR1bcgD2OpeS2XExpu5yBhP_Q1K-lwKbBKICBPf1kU,289 +pip/_vendor/html5lib/_trie/_base.py,sha256=uJHVhzif9S0MJXgy9F98iEev5evi_rgUk5BmEbUSp8c,930 +pip/_vendor/html5lib/_trie/datrie.py,sha256=EQpqSfkZRuTbE-DuhW7xMdVDxdZNZ0CfmnYfHA_3zxM,1178 +pip/_vendor/html5lib/_trie/py.py,sha256=wXmQLrZRf4MyWNyg0m3h81m9InhLR7GJ002mIIZh-8o,1775 +pip/_vendor/html5lib/filters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/_vendor/html5lib/filters/alphabeticalattributes.py,sha256=lViZc2JMCclXi_5gduvmdzrRxtO5Xo9ONnbHBVCsykU,919 +pip/_vendor/html5lib/filters/base.py,sha256=z-IU9ZAYjpsVsqmVt7kuWC63jR11hDMr6CVrvuao8W0,286 +pip/_vendor/html5lib/filters/inject_meta_charset.py,sha256=egDXUEHXmAG9504xz0K6ALDgYkvUrC2q15YUVeNlVQg,2945 +pip/_vendor/html5lib/filters/lint.py,sha256=jk6q56xY0ojiYfvpdP-OZSm9eTqcAdRqhCoPItemPYA,3643 +pip/_vendor/html5lib/filters/optionaltags.py,sha256=8lWT75J0aBOHmPgfmqTHSfPpPMp01T84NKu0CRedxcE,10588 +pip/_vendor/html5lib/filters/sanitizer.py,sha256=4ON02KNjuqda1lCw5_JCUZxb0BzWR5M7ON84dtJ7dm0,26248 +pip/_vendor/html5lib/filters/whitespace.py,sha256=8eWqZxd4UC4zlFGW6iyY6f-2uuT8pOCSALc3IZt7_t4,1214 +pip/_vendor/html5lib/treeadapters/__init__.py,sha256=A0rY5gXIe4bJOiSGRO_j_tFhngRBO8QZPzPtPw5dFzo,679 +pip/_vendor/html5lib/treeadapters/genshi.py,sha256=CH27pAsDKmu4ZGkAUrwty7u0KauGLCZRLPMzaO3M5vo,1715 +pip/_vendor/html5lib/treeadapters/sax.py,sha256=BKS8woQTnKiqeffHsxChUqL4q2ZR_wb5fc9MJ3zQC8s,1776 +pip/_vendor/html5lib/treebuilders/__init__.py,sha256=AysSJyvPfikCMMsTVvaxwkgDieELD5dfR8FJIAuq7hY,3592 +pip/_vendor/html5lib/treebuilders/base.py,sha256=wQGp5yy22TNG8tJ6aREe4UUeTR7A99dEz0BXVaedWb4,14579 +pip/_vendor/html5lib/treebuilders/dom.py,sha256=SY3MsijXyzdNPc8aK5IQsupBoM8J67y56DgNtGvsb9g,8835 +pip/_vendor/html5lib/treebuilders/etree.py,sha256=aqIBOGj_dFYqBURIcTegGNBhAIJOw5iFDHb4jrkYH-8,12764 +pip/_vendor/html5lib/treebuilders/etree_lxml.py,sha256=9V0dXxbJYYq-Skgb5-_OL2NkVYpjioEb4CHajo0e9yI,14122 +pip/_vendor/html5lib/treewalkers/__init__.py,sha256=yhXxHpjlSqfQyUag3v8-vWjMPriFBU8YRAPNpDgBTn8,5714 +pip/_vendor/html5lib/treewalkers/base.py,sha256=ouiOsuSzvI0KgzdWP8PlxIaSNs9falhbiinAEc_UIJY,7476 +pip/_vendor/html5lib/treewalkers/dom.py,sha256=EHyFR8D8lYNnyDU9lx_IKigVJRyecUGua0mOi7HBukc,1413 +pip/_vendor/html5lib/treewalkers/etree.py,sha256=sz1o6mmE93NQ53qJFDO7HKyDtuwgK-Ay3qSFZPC6u00,4550 +pip/_vendor/html5lib/treewalkers/etree_lxml.py,sha256=sY6wfRshWTllu6n48TPWpKsQRPp-0CQrT0hj_AdzHSU,6309 +pip/_vendor/html5lib/treewalkers/genshi.py,sha256=4D2PECZ5n3ZN3qu3jMl9yY7B81jnQApBQSVlfaIuYbA,2309 +pip/_vendor/idna/__init__.py,sha256=9Nt7xpyet3DmOrPUGooDdAwmHZZu1qUAy2EaJ93kGiQ,58 +pip/_vendor/idna/codec.py,sha256=lvYb7yu7PhAqFaAIAdWcwgaWI2UmgseUua-1c0AsG0A,3299 +pip/_vendor/idna/compat.py,sha256=R-h29D-6mrnJzbXxymrWUW7iZUvy-26TQwZ0ij57i4U,232 +pip/_vendor/idna/core.py,sha256=JDCZZ_PLESqIgEbU8mPyoEufWwoOiIqygA17-QZIe3s,11733 +pip/_vendor/idna/idnadata.py,sha256=HXaPFw6_YAJ0qppACPu0YLAULtRs3QovRM_CCZHGdY0,40899 +pip/_vendor/idna/intranges.py,sha256=TY1lpxZIQWEP6tNqjZkFA5hgoMWOj1OBmnUG8ihT87E,1749 +pip/_vendor/idna/package_data.py,sha256=kIzeKKXEouXLR4srqwf9Q3zv-NffKSOz5aSDOJARPB0,21 +pip/_vendor/idna/uts46data.py,sha256=oLyNZ1pBaiBlj9zFzLFRd_P7J8MkRcgDisjExZR_4MY,198292 +pip/_vendor/lockfile/__init__.py,sha256=Tqpz90DwKYfhPsfzVOJl84TL87pdFE5ePNHdXAxs4Tk,9371 +pip/_vendor/lockfile/linklockfile.py,sha256=C7OH3H4GdK68u4FQgp8fkP2kO4fyUTSyj3X6blgfobc,2652 +pip/_vendor/lockfile/mkdirlockfile.py,sha256=e3qgIL-etZMLsS-3ft19iW_8IQ360HNkGOqE3yBKsUw,3096 +pip/_vendor/lockfile/pidlockfile.py,sha256=ukH9uk6NFuxyVmG5QiWw4iKq3fT7MjqUguX95avYPIY,6090 +pip/_vendor/lockfile/sqlitelockfile.py,sha256=o2TMkMRY0iwn-iL1XMRRIFStMUkS4i3ajceeYNntKFg,5506 +pip/_vendor/lockfile/symlinklockfile.py,sha256=ABwXXmvTHvCl5viPblShL3PG-gGsLiT1roAMfDRwhi8,2616 +pip/_vendor/msgpack/__init__.py,sha256=y0bk2YbzK6J2e0J_dyreN6nD7yM2IezT6m_tU2h-Mdg,1677 +pip/_vendor/msgpack/_version.py,sha256=dN7wVIjbyuQIJ35B2o6gymQNDLPlj_7-uTfgCv7KErM,20 +pip/_vendor/msgpack/exceptions.py,sha256=lPkAi_u12NlFajDz4FELSHEdfU8hrR3zeTvKX8aQuz4,1056 +pip/_vendor/msgpack/fallback.py,sha256=h0ll8xnq12mI9PuQ9Qd_Ihtt08Sp8L0JqhG9KY8Vyjk,36411 +pip/_vendor/packaging/__about__.py,sha256=Wg0-hNgTU2_lBZcGBh5pm1R9yroQ3rv-X0rig8KjA6o,744 +pip/_vendor/packaging/__init__.py,sha256=6enbp5XgRfjBjsI9-bn00HjHf5TH21PDMOKkJW8xw-w,562 +pip/_vendor/packaging/_compat.py,sha256=Ugdm-qcneSchW25JrtMIKgUxfEEBcCAz6WrEeXeqz9o,865 +pip/_vendor/packaging/_structures.py,sha256=pVd90XcXRGwpZRB_qdFuVEibhCHpX_bL5zYr9-N0mc8,1416 +pip/_vendor/packaging/markers.py,sha256=-QjvJkhSJBxBogO9J_EpPQudHaaLV3rgVYsBDqn-ZLc,8234 +pip/_vendor/packaging/requirements.py,sha256=grcnFU8x7KD230JaFLXtWl3VClLuOmsOy4c-m55tOWs,4700 +pip/_vendor/packaging/specifiers.py,sha256=0ZzQpcUnvrQ6LjR-mQRLzMr8G6hdRv-mY0VSf_amFtI,27778 +pip/_vendor/packaging/utils.py,sha256=VaTC0Ei7zO2xl9ARiWmz2YFLFt89PuuhLbAlXMyAGms,1520 +pip/_vendor/packaging/version.py,sha256=Npdwnb8OHedj_2L86yiUqscujb7w_i5gmSK1PhOAFzg,11978 +pip/_vendor/pep517/__init__.py,sha256=nOY747zTld3oTdEetBG6DWxEcZXTeOQk0aHvbR-sa5w,84 +pip/_vendor/pep517/_in_process.py,sha256=xMY2kLutkjCti5WqTmKOLRRL3o8Ds_k-fObFyuMv1tk,6061 +pip/_vendor/pep517/build.py,sha256=-n8PT-ugS1TdqoTUY1vatDQjrLtx48K_-Quu2MuQBiA,2699 +pip/_vendor/pep517/check.py,sha256=Lu7nMdYu1JVV58fE3hv-d_avTy5h0yO9LsIzAt82Clk,5885 +pip/_vendor/pep517/colorlog.py,sha256=Tk9AuYm_cLF3BKTBoSTJt9bRryn0aFojIQOwbfVUTxQ,4098 +pip/_vendor/pep517/compat.py,sha256=4SFG4QN-cNj8ebSa0wV0HUtEEQWwmbok2a0uk1gYEOM,631 +pip/_vendor/pep517/envbuild.py,sha256=9-u4KffexPMEm52rTaIjEOxsCAd2DMByxzv5H566QLw,5763 +pip/_vendor/pep517/wrappers.py,sha256=9dZn-q7F5KyQKUJMie2uKwur2FG0CLXz_kLZzkJOhZc,5912 +pip/_vendor/pkg_resources/__init__.py,sha256=ZVHzk7ZiFIIgE2RTJj8F7wwjdMGrAngMWtQo-rGNsm4,107910 +pip/_vendor/pkg_resources/py31compat.py,sha256=CRk8fkiPRDLsbi5pZcKsHI__Pbmh_94L8mr9Qy9Ab2U,562 +pip/_vendor/progress/__init__.py,sha256=fcbQQXo5np2CoQyhSH5XprkicwLZNLePR3uIahznSO0,4857 +pip/_vendor/progress/bar.py,sha256=QuDuVNcmXgpxtNtxO0Fq72xKigxABaVmxYGBw4J3Z_E,2854 +pip/_vendor/progress/counter.py,sha256=MznyBrvPWrOlGe4MZAlGUb9q3aODe6_aNYeAE_VNoYA,1372 +pip/_vendor/progress/spinner.py,sha256=k8JbDW94T0-WXuXfxZIFhdoNPYp3jfnpXqBnfRv5fGs,1380 +pip/_vendor/pytoml/__init__.py,sha256=W_SKx36Hsew-Fty36BOpreLm4uF4V_Tgkm_z9rIoOE8,127 +pip/_vendor/pytoml/core.py,sha256=9CrLLTs1PdWjEwRnYzt_i4dhHcZvGxs_GsMlYAX3iY4,509 +pip/_vendor/pytoml/parser.py,sha256=2tDXkldqPQJhyadXzL2rGhVbjUyBNeXXhaEfncHl2iQ,10326 +pip/_vendor/pytoml/test.py,sha256=2nQs4aX3XQEaaQCx6x_OJTS2Hb0_IiTZRqNOeDmLCzo,1021 +pip/_vendor/pytoml/utils.py,sha256=JCLHx77Hu1R3F-bRgiROIiKyCzLwyebnp5P35cRJxWs,1665 +pip/_vendor/pytoml/writer.py,sha256=WbNNQg3sh_V-s3kt88LkNNbxEq6pPDdhRE-daJzArcI,3198 +pip/_vendor/requests/__init__.py,sha256=ZI8kbaEzLAxsqex3MmMPr-v24d1RfZbNAOY8fUxg2Xw,4074 +pip/_vendor/requests/__version__.py,sha256=8KG3anaNCi-PEclPPOHJ_cv1udY_L1_njVr84gRZ9HM,436 +pip/_vendor/requests/_internal_utils.py,sha256=Zx3PnEUccyfsB-ie11nZVAW8qClJy0gx1qNME7rgT18,1096 +pip/_vendor/requests/adapters.py,sha256=e-bmKEApNVqFdylxuMJJfiaHdlmS_zhWhIMEzlHvGuc,21548 +pip/_vendor/requests/api.py,sha256=hWZgfD7OriCZFOnpeq0bv2pbXDl8YXfxDwAcU036qDs,6253 +pip/_vendor/requests/auth.py,sha256=QB2-cSUj1jrvWZfPXttsZpyAacQgtKLVk14vQW9TpSE,10206 +pip/_vendor/requests/certs.py,sha256=nXRVq9DtGmv_1AYbwjTu9UrgAcdJv05ZvkNeaoLOZxY,465 +pip/_vendor/requests/compat.py,sha256=FZX4Q_EMKiMnhZpZ3g_gOsT-j2ca9ij2gehDx1cwYeo,1941 +pip/_vendor/requests/cookies.py,sha256=Y-bKX6TvW3FnYlE6Au0SXtVVWcaNdFvuAwQxw-G0iTI,18430 +pip/_vendor/requests/exceptions.py,sha256=-mLam3TAx80V09EaH3H-ZxR61eAVuLRZ8zgBBSLjK44,3197 +pip/_vendor/requests/help.py,sha256=SJPVcoXeo7KfK4AxJN5eFVQCjr0im87tU2n7ubLsksU,3578 +pip/_vendor/requests/hooks.py,sha256=QReGyy0bRcr5rkwCuObNakbYsc7EkiKeBwG4qHekr2Q,757 +pip/_vendor/requests/models.py,sha256=6s-37iAqXVptq8z7U_LoH_pbIPrCQUm_Z8QuIGE29Q0,34275 +pip/_vendor/requests/packages.py,sha256=njJmVifY4aSctuW3PP5EFRCxjEwMRDO6J_feG2dKWsI,695 +pip/_vendor/requests/sessions.py,sha256=DjbCotDW6xSAaBsjbW-L8l4N0UcwmrxVNgSrZgIjGWM,29332 +pip/_vendor/requests/status_codes.py,sha256=XWlcpBjbCtq9sSqpH9_KKxgnLTf9Z__wCWolq21ySlg,4129 +pip/_vendor/requests/structures.py,sha256=zoP8qly2Jak5e89HwpqjN1z2diztI-_gaqts1raJJBc,2981 +pip/_vendor/requests/utils.py,sha256=LtPJ1db6mJff2TJSJWKi7rBpzjPS3mSOrjC9zRhoD3A,30049 +pip/_vendor/urllib3/__init__.py,sha256=EZviRQA_iuL_94EeJHY4JAArRXbRCkAzA0HH9iXZ15s,2722 +pip/_vendor/urllib3/_collections.py,sha256=-CAKsDE-WdubAjlBSZLx7b0e7WKenaNGwWvGLDEF1TM,10746 +pip/_vendor/urllib3/connection.py,sha256=KLFvknLgllcMkgJ-zUsFjCzOt9P03fDoIpTPz_vqXCw,13839 +pip/_vendor/urllib3/connectionpool.py,sha256=rgc_3D0VsD5VDxr4KzzA8Plee0Rmerm5WKb71FcxWu8,35097 +pip/_vendor/urllib3/exceptions.py,sha256=rFeIfBNKC8KJ61ux-MtJyJlEC9G9ggkmCeF751JwVR4,6604 +pip/_vendor/urllib3/fields.py,sha256=D_TE_SK15YatdbhWDMN0OE3X6UCJn1RTkANINCYOobE,5943 +pip/_vendor/urllib3/filepost.py,sha256=40CROlpRKVBpFUkD0R6wJf_PpvbcRQRFUu0OOQlFkKM,2436 +pip/_vendor/urllib3/poolmanager.py,sha256=csE6Bh6L0FJ3iNOHk2z8KhMT8Eiq976b6pk8I6vrOC8,16853 +pip/_vendor/urllib3/request.py,sha256=OfelFYzPnxGlU3amEz9uBLjCBOriwgJh4QC_aW9SF3U,5991 +pip/_vendor/urllib3/response.py,sha256=ta1jp4B5PGBWzoAV1s48WLuHCRICQnK7F9m_kyK4Z8g,25609 +pip/_vendor/urllib3/contrib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/_vendor/urllib3/contrib/_appengine_environ.py,sha256=lhYXvB5_oGKSeurX7za3XhcGyERvNjXRQ3eJp2GmQ3M,717 +pip/_vendor/urllib3/contrib/appengine.py,sha256=VvDpkc5gf9dTXNxXmyG1mPdON_3DrYG_eW4uOqN98oQ,10938 +pip/_vendor/urllib3/contrib/ntlmpool.py,sha256=5ZpMF7N9B6NEjVU-r-xjDOV_-hkNvsDoNc84J2yqauI,4459 +pip/_vendor/urllib3/contrib/pyopenssl.py,sha256=-kI_9y99Iwybv6Wy8IF8PugVl61BeMBEEqGwrDYNCuc,15823 +pip/_vendor/urllib3/contrib/securetransport.py,sha256=BqXSlChN9_hjCWgyN6JdcgvBUdc37QCCX4u3_8zE_9o,30309 +pip/_vendor/urllib3/contrib/socks.py,sha256=Iom0snbHkCuZbZ7Sle2Kueha1W0jYAJ0SyCOtePLaio,6391 +pip/_vendor/urllib3/contrib/_securetransport/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/_vendor/urllib3/contrib/_securetransport/bindings.py,sha256=x2kLSh-ASZKsun0FxtraBuLVe3oHuth4YW6yZ5Vof-w,17560 +pip/_vendor/urllib3/contrib/_securetransport/low_level.py,sha256=Umy5u-3Z957GirdapnicXVOpHaM4xdOZABJuJxfaeJA,12162 +pip/_vendor/urllib3/packages/__init__.py,sha256=nlChrGzkjCkmhCX9HrF_qHPUgosfsPQkVIJxiiLhk9g,109 +pip/_vendor/urllib3/packages/six.py,sha256=A6hdJZVjI3t_geebZ9BzUvwRrIXo0lfwzQlM2LcKyas,30098 +pip/_vendor/urllib3/packages/backports/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/_vendor/urllib3/packages/backports/makefile.py,sha256=so2z9BiNM8kh38Ve5tomQP_mp2_ubEqzdlCpLZKzzCI,1456 +pip/_vendor/urllib3/packages/ssl_match_hostname/__init__.py,sha256=WBVbxQBojNAxfZwNavkox3BgJiMA9BJmm-_fwd0jD_o,688 +pip/_vendor/urllib3/packages/ssl_match_hostname/_implementation.py,sha256=E-9J-kAaUn76WMZ4PpzKUxM4C3yjY7mopOpbPIy3Dso,5700 +pip/_vendor/urllib3/util/__init__.py,sha256=6Ran4oAVIy40Cu_oEPWnNV9bwF5rXx6G1DUZ7oehjPY,1044 +pip/_vendor/urllib3/util/connection.py,sha256=-AyqcRTuNUHuo5ndtsU0Og_nMyCGATC-kYqOUdBHwIQ,4639 +pip/_vendor/urllib3/util/queue.py,sha256=myTX3JDHntglKQNBf3b6dasHH-uF-W59vzGSQiFdAfI,497 +pip/_vendor/urllib3/util/request.py,sha256=H5_lrHvtwl2U2BbT1UYN9HpruNc1gsNFlz2njQmhPrQ,3705 +pip/_vendor/urllib3/util/response.py,sha256=028PNXDZhwBtnm2uXvnAHi_l9_AAGrAMH2Igh2AbgWg,2586 +pip/_vendor/urllib3/util/retry.py,sha256=kFQTesNiwPp6ZeQo9VHeUO7b8qA-_l3BnErCAOEPo4Q,15105 +pip/_vendor/urllib3/util/ssl_.py,sha256=4qqBDM82bufhqqEd0b-99sObz95XmEVEXDVi5iAyCeE,13172 +pip/_vendor/urllib3/util/timeout.py,sha256=7lHNrgL5YH2cI1j-yZnzV_J8jBlRVdmFhQaNyM1_2b8,9757 +pip/_vendor/urllib3/util/url.py,sha256=qCY_HHUXvo05wAsEERALgExtlgxLnAHSQ7ce1b-g3SM,6487 +pip/_vendor/urllib3/util/wait.py,sha256=p4BZo_Ukp5JF0Dn6jro7cUfqIjnU6WFtuoA6poaV5Jk,5403 +pip/_vendor/webencodings/__init__.py,sha256=qOBJIuPy_4ByYH6W_bNgJF-qYQ2DoU-dKsDu5yRWCXg,10579 +pip/_vendor/webencodings/labels.py,sha256=4AO_KxTddqGtrL9ns7kAPjb0CcN6xsCIxbK37HY9r3E,8979 +pip/_vendor/webencodings/mklabels.py,sha256=GYIeywnpaLnP0GSic8LFWgd0UVvO_l1Nc6YoF-87R_4,1305 +pip/_vendor/webencodings/tests.py,sha256=OtGLyjhNY1fvkW1GvLJ_FV9ZoqC9Anyjr7q3kxTbzNs,6563 +pip/_vendor/webencodings/x_user_defined.py,sha256=yOqWSdmpytGfUgh_Z6JYgDNhoc-BAHyyeeT15Fr42tM,4307 +pip-19.1.1.dist-info/LICENSE.txt,sha256=W6Ifuwlk-TatfRU2LR7W1JMcyMj5_y1NkRkOEJvnRDE,1090 +pip-19.1.1.dist-info/METADATA,sha256=bLFqR8At4rsCvM1hJTM98bOrT26dNZLeTLo_0PYIZCs,2892 +pip-19.1.1.dist-info/WHEEL,sha256=HX-v9-noUkyUoxyZ1PMSuS7auUxDAR4VBdoYLqD0xws,110 +pip-19.1.1.dist-info/entry_points.txt,sha256=S_zfxY25QtQDVY1BiLAmOKSkkI5llzCKPLiYOSEupsY,98 +pip-19.1.1.dist-info/top_level.txt,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +pip-19.1.1.dist-info/RECORD,, +../../../bin/pip,sha256=qQE-7cj4d-jfcxWGN0RunzQLbQSHijgaHJn9jb5Ty2A,283 +../../../bin/pip3,sha256=qQE-7cj4d-jfcxWGN0RunzQLbQSHijgaHJn9jb5Ty2A,283 +../../../bin/pip3.6,sha256=qQE-7cj4d-jfcxWGN0RunzQLbQSHijgaHJn9jb5Ty2A,283 +pip-19.1.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +pip/_internal/commands/__pycache__/show.cpython-36.pyc,, +pip/_internal/commands/__pycache__/hash.cpython-36.pyc,, +pip/_internal/commands/__pycache__/install.cpython-36.pyc,, +pip/_internal/commands/__pycache__/download.cpython-36.pyc,, +pip/_internal/commands/__pycache__/configuration.cpython-36.pyc,, +pip/_internal/commands/__pycache__/check.cpython-36.pyc,, +pip/_internal/commands/__pycache__/search.cpython-36.pyc,, +pip/_internal/commands/__pycache__/uninstall.cpython-36.pyc,, +pip/_internal/commands/__pycache__/help.cpython-36.pyc,, +pip/_internal/commands/__pycache__/wheel.cpython-36.pyc,, +pip/_internal/commands/__pycache__/completion.cpython-36.pyc,, +pip/_internal/commands/__pycache__/list.cpython-36.pyc,, +pip/_internal/commands/__pycache__/__init__.cpython-36.pyc,, +pip/_internal/commands/__pycache__/freeze.cpython-36.pyc,, +pip/_internal/__pycache__/exceptions.cpython-36.pyc,, +pip/_internal/__pycache__/download.cpython-36.pyc,, +pip/_internal/__pycache__/build_env.cpython-36.pyc,, +pip/_internal/__pycache__/resolve.cpython-36.pyc,, +pip/_internal/__pycache__/configuration.cpython-36.pyc,, +pip/_internal/__pycache__/index.cpython-36.pyc,, +pip/_internal/__pycache__/locations.cpython-36.pyc,, +pip/_internal/__pycache__/pyproject.cpython-36.pyc,, +pip/_internal/__pycache__/cache.cpython-36.pyc,, +pip/_internal/__pycache__/pep425tags.cpython-36.pyc,, +pip/_internal/__pycache__/wheel.cpython-36.pyc,, +pip/_internal/__pycache__/__init__.cpython-36.pyc,, +pip/_internal/req/__pycache__/constructors.cpython-36.pyc,, +pip/_internal/req/__pycache__/req_install.cpython-36.pyc,, +pip/_internal/req/__pycache__/req_set.cpython-36.pyc,, +pip/_internal/req/__pycache__/req_uninstall.cpython-36.pyc,, +pip/_internal/req/__pycache__/req_file.cpython-36.pyc,, +pip/_internal/req/__pycache__/req_tracker.cpython-36.pyc,, +pip/_internal/req/__pycache__/__init__.cpython-36.pyc,, +pip/_internal/cli/__pycache__/base_command.cpython-36.pyc,, +pip/_internal/cli/__pycache__/autocompletion.cpython-36.pyc,, +pip/_internal/cli/__pycache__/parser.cpython-36.pyc,, +pip/_internal/cli/__pycache__/main_parser.cpython-36.pyc,, +pip/_internal/cli/__pycache__/status_codes.cpython-36.pyc,, +pip/_internal/cli/__pycache__/cmdoptions.cpython-36.pyc,, +pip/_internal/cli/__pycache__/__init__.cpython-36.pyc,, +pip/_internal/utils/__pycache__/logging.cpython-36.pyc,, +pip/_internal/utils/__pycache__/models.cpython-36.pyc,, +pip/_internal/utils/__pycache__/ui.cpython-36.pyc,, +pip/_internal/utils/__pycache__/glibc.cpython-36.pyc,, +pip/_internal/utils/__pycache__/filesystem.cpython-36.pyc,, +pip/_internal/utils/__pycache__/packaging.cpython-36.pyc,, +pip/_internal/utils/__pycache__/compat.cpython-36.pyc,, +pip/_internal/utils/__pycache__/encoding.cpython-36.pyc,, +pip/_internal/utils/__pycache__/temp_dir.cpython-36.pyc,, +pip/_internal/utils/__pycache__/outdated.cpython-36.pyc,, +pip/_internal/utils/__pycache__/typing.cpython-36.pyc,, +pip/_internal/utils/__pycache__/misc.cpython-36.pyc,, +pip/_internal/utils/__pycache__/appdirs.cpython-36.pyc,, +pip/_internal/utils/__pycache__/hashes.cpython-36.pyc,, +pip/_internal/utils/__pycache__/setuptools_build.cpython-36.pyc,, +pip/_internal/utils/__pycache__/__init__.cpython-36.pyc,, +pip/_internal/utils/__pycache__/deprecation.cpython-36.pyc,, +pip/_internal/operations/__pycache__/prepare.cpython-36.pyc,, +pip/_internal/operations/__pycache__/check.cpython-36.pyc,, +pip/_internal/operations/__pycache__/__init__.cpython-36.pyc,, +pip/_internal/operations/__pycache__/freeze.cpython-36.pyc,, +pip/_internal/models/__pycache__/link.cpython-36.pyc,, +pip/_internal/models/__pycache__/candidate.cpython-36.pyc,, +pip/_internal/models/__pycache__/index.cpython-36.pyc,, +pip/_internal/models/__pycache__/format_control.cpython-36.pyc,, +pip/_internal/models/__pycache__/__init__.cpython-36.pyc,, +pip/_internal/vcs/__pycache__/mercurial.cpython-36.pyc,, +pip/_internal/vcs/__pycache__/subversion.cpython-36.pyc,, +pip/_internal/vcs/__pycache__/bazaar.cpython-36.pyc,, +pip/_internal/vcs/__pycache__/__init__.cpython-36.pyc,, +pip/_internal/vcs/__pycache__/git.cpython-36.pyc,, +pip/__pycache__/__main__.cpython-36.pyc,, +pip/__pycache__/__init__.cpython-36.pyc,, +pip/_vendor/urllib3/__pycache__/response.cpython-36.pyc,, +pip/_vendor/urllib3/__pycache__/exceptions.cpython-36.pyc,, +pip/_vendor/urllib3/__pycache__/connectionpool.cpython-36.pyc,, +pip/_vendor/urllib3/__pycache__/poolmanager.cpython-36.pyc,, +pip/_vendor/urllib3/__pycache__/fields.cpython-36.pyc,, +pip/_vendor/urllib3/__pycache__/connection.cpython-36.pyc,, +pip/_vendor/urllib3/__pycache__/filepost.cpython-36.pyc,, +pip/_vendor/urllib3/__pycache__/_collections.cpython-36.pyc,, +pip/_vendor/urllib3/__pycache__/request.cpython-36.pyc,, +pip/_vendor/urllib3/__pycache__/__init__.cpython-36.pyc,, +pip/_vendor/urllib3/util/__pycache__/wait.cpython-36.pyc,, +pip/_vendor/urllib3/util/__pycache__/response.cpython-36.pyc,, +pip/_vendor/urllib3/util/__pycache__/ssl_.cpython-36.pyc,, +pip/_vendor/urllib3/util/__pycache__/retry.cpython-36.pyc,, +pip/_vendor/urllib3/util/__pycache__/queue.cpython-36.pyc,, +pip/_vendor/urllib3/util/__pycache__/url.cpython-36.pyc,, +pip/_vendor/urllib3/util/__pycache__/timeout.cpython-36.pyc,, +pip/_vendor/urllib3/util/__pycache__/connection.cpython-36.pyc,, +pip/_vendor/urllib3/util/__pycache__/request.cpython-36.pyc,, +pip/_vendor/urllib3/util/__pycache__/__init__.cpython-36.pyc,, +pip/_vendor/urllib3/contrib/__pycache__/_appengine_environ.cpython-36.pyc,, +pip/_vendor/urllib3/contrib/__pycache__/ntlmpool.cpython-36.pyc,, +pip/_vendor/urllib3/contrib/__pycache__/socks.cpython-36.pyc,, +pip/_vendor/urllib3/contrib/__pycache__/appengine.cpython-36.pyc,, +pip/_vendor/urllib3/contrib/__pycache__/securetransport.cpython-36.pyc,, +pip/_vendor/urllib3/contrib/__pycache__/pyopenssl.cpython-36.pyc,, +pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-36.pyc,, +pip/_vendor/urllib3/contrib/_securetransport/__pycache__/low_level.cpython-36.pyc,, +pip/_vendor/urllib3/contrib/_securetransport/__pycache__/bindings.cpython-36.pyc,, +pip/_vendor/urllib3/contrib/_securetransport/__pycache__/__init__.cpython-36.pyc,, +pip/_vendor/urllib3/packages/__pycache__/six.cpython-36.pyc,, +pip/_vendor/urllib3/packages/__pycache__/__init__.cpython-36.pyc,, +pip/_vendor/urllib3/packages/backports/__pycache__/makefile.cpython-36.pyc,, +pip/_vendor/urllib3/packages/backports/__pycache__/__init__.cpython-36.pyc,, +pip/_vendor/urllib3/packages/ssl_match_hostname/__pycache__/_implementation.cpython-36.pyc,, +pip/_vendor/urllib3/packages/ssl_match_hostname/__pycache__/__init__.cpython-36.pyc,, +pip/_vendor/idna/__pycache__/idnadata.cpython-36.pyc,, +pip/_vendor/idna/__pycache__/core.cpython-36.pyc,, +pip/_vendor/idna/__pycache__/compat.cpython-36.pyc,, +pip/_vendor/idna/__pycache__/uts46data.cpython-36.pyc,, +pip/_vendor/idna/__pycache__/codec.cpython-36.pyc,, +pip/_vendor/idna/__pycache__/package_data.cpython-36.pyc,, +pip/_vendor/idna/__pycache__/intranges.cpython-36.pyc,, +pip/_vendor/idna/__pycache__/__init__.cpython-36.pyc,, +pip/_vendor/pytoml/__pycache__/utils.cpython-36.pyc,, +pip/_vendor/pytoml/__pycache__/parser.cpython-36.pyc,, +pip/_vendor/pytoml/__pycache__/core.cpython-36.pyc,, +pip/_vendor/pytoml/__pycache__/writer.cpython-36.pyc,, +pip/_vendor/pytoml/__pycache__/test.cpython-36.pyc,, +pip/_vendor/pytoml/__pycache__/__init__.cpython-36.pyc,, +pip/_vendor/__pycache__/ipaddress.cpython-36.pyc,, +pip/_vendor/__pycache__/retrying.cpython-36.pyc,, +pip/_vendor/__pycache__/pyparsing.cpython-36.pyc,, +pip/_vendor/__pycache__/six.cpython-36.pyc,, +pip/_vendor/__pycache__/distro.cpython-36.pyc,, +pip/_vendor/__pycache__/appdirs.cpython-36.pyc,, +pip/_vendor/__pycache__/__init__.cpython-36.pyc,, +pip/_vendor/html5lib/filters/__pycache__/base.cpython-36.pyc,, +pip/_vendor/html5lib/filters/__pycache__/sanitizer.cpython-36.pyc,, +pip/_vendor/html5lib/filters/__pycache__/optionaltags.cpython-36.pyc,, +pip/_vendor/html5lib/filters/__pycache__/inject_meta_charset.cpython-36.pyc,, +pip/_vendor/html5lib/filters/__pycache__/lint.cpython-36.pyc,, +pip/_vendor/html5lib/filters/__pycache__/whitespace.cpython-36.pyc,, +pip/_vendor/html5lib/filters/__pycache__/__init__.cpython-36.pyc,, +pip/_vendor/html5lib/filters/__pycache__/alphabeticalattributes.cpython-36.pyc,, +pip/_vendor/html5lib/_trie/__pycache__/_base.cpython-36.pyc,, +pip/_vendor/html5lib/_trie/__pycache__/py.cpython-36.pyc,, +pip/_vendor/html5lib/_trie/__pycache__/__init__.cpython-36.pyc,, +pip/_vendor/html5lib/_trie/__pycache__/datrie.cpython-36.pyc,, +pip/_vendor/html5lib/__pycache__/_tokenizer.cpython-36.pyc,, +pip/_vendor/html5lib/__pycache__/constants.cpython-36.pyc,, +pip/_vendor/html5lib/__pycache__/_utils.cpython-36.pyc,, +pip/_vendor/html5lib/__pycache__/html5parser.cpython-36.pyc,, +pip/_vendor/html5lib/__pycache__/serializer.cpython-36.pyc,, +pip/_vendor/html5lib/__pycache__/_ihatexml.cpython-36.pyc,, +pip/_vendor/html5lib/__pycache__/_inputstream.cpython-36.pyc,, +pip/_vendor/html5lib/__pycache__/__init__.cpython-36.pyc,, +pip/_vendor/html5lib/treebuilders/__pycache__/etree_lxml.cpython-36.pyc,, +pip/_vendor/html5lib/treebuilders/__pycache__/etree.cpython-36.pyc,, +pip/_vendor/html5lib/treebuilders/__pycache__/base.cpython-36.pyc,, +pip/_vendor/html5lib/treebuilders/__pycache__/dom.cpython-36.pyc,, +pip/_vendor/html5lib/treebuilders/__pycache__/__init__.cpython-36.pyc,, +pip/_vendor/html5lib/treeadapters/__pycache__/sax.cpython-36.pyc,, +pip/_vendor/html5lib/treeadapters/__pycache__/genshi.cpython-36.pyc,, +pip/_vendor/html5lib/treeadapters/__pycache__/__init__.cpython-36.pyc,, +pip/_vendor/html5lib/treewalkers/__pycache__/etree_lxml.cpython-36.pyc,, +pip/_vendor/html5lib/treewalkers/__pycache__/etree.cpython-36.pyc,, +pip/_vendor/html5lib/treewalkers/__pycache__/base.cpython-36.pyc,, +pip/_vendor/html5lib/treewalkers/__pycache__/dom.cpython-36.pyc,, +pip/_vendor/html5lib/treewalkers/__pycache__/genshi.cpython-36.pyc,, +pip/_vendor/html5lib/treewalkers/__pycache__/__init__.cpython-36.pyc,, +pip/_vendor/chardet/__pycache__/jpcntx.cpython-36.pyc,, +pip/_vendor/chardet/__pycache__/jisfreq.cpython-36.pyc,, +pip/_vendor/chardet/__pycache__/mbcharsetprober.cpython-36.pyc,, +pip/_vendor/chardet/__pycache__/big5freq.cpython-36.pyc,, +pip/_vendor/chardet/__pycache__/langcyrillicmodel.cpython-36.pyc,, +pip/_vendor/chardet/__pycache__/chardistribution.cpython-36.pyc,, +pip/_vendor/chardet/__pycache__/langgreekmodel.cpython-36.pyc,, +pip/_vendor/chardet/__pycache__/gb2312freq.cpython-36.pyc,, +pip/_vendor/chardet/__pycache__/latin1prober.cpython-36.pyc,, +pip/_vendor/chardet/__pycache__/mbcsgroupprober.cpython-36.pyc,, +pip/_vendor/chardet/__pycache__/escsm.cpython-36.pyc,, +pip/_vendor/chardet/__pycache__/euctwprober.cpython-36.pyc,, +pip/_vendor/chardet/__pycache__/utf8prober.cpython-36.pyc,, +pip/_vendor/chardet/__pycache__/hebrewprober.cpython-36.pyc,, +pip/_vendor/chardet/__pycache__/version.cpython-36.pyc,, +pip/_vendor/chardet/__pycache__/compat.cpython-36.pyc,, +pip/_vendor/chardet/__pycache__/langbulgarianmodel.cpython-36.pyc,, +pip/_vendor/chardet/__pycache__/mbcssm.cpython-36.pyc,, +pip/_vendor/chardet/__pycache__/cp949prober.cpython-36.pyc,, +pip/_vendor/chardet/__pycache__/sbcsgroupprober.cpython-36.pyc,, +pip/_vendor/chardet/__pycache__/langhebrewmodel.cpython-36.pyc,, +pip/_vendor/chardet/__pycache__/langturkishmodel.cpython-36.pyc,, +pip/_vendor/chardet/__pycache__/langthaimodel.cpython-36.pyc,, +pip/_vendor/chardet/__pycache__/euckrfreq.cpython-36.pyc,, +pip/_vendor/chardet/__pycache__/eucjpprober.cpython-36.pyc,, +pip/_vendor/chardet/__pycache__/universaldetector.cpython-36.pyc,, +pip/_vendor/chardet/__pycache__/gb2312prober.cpython-36.pyc,, +pip/_vendor/chardet/__pycache__/sbcharsetprober.cpython-36.pyc,, +pip/_vendor/chardet/__pycache__/big5prober.cpython-36.pyc,, +pip/_vendor/chardet/__pycache__/euckrprober.cpython-36.pyc,, +pip/_vendor/chardet/__pycache__/euctwfreq.cpython-36.pyc,, +pip/_vendor/chardet/__pycache__/escprober.cpython-36.pyc,, +pip/_vendor/chardet/__pycache__/charsetgroupprober.cpython-36.pyc,, +pip/_vendor/chardet/__pycache__/langhungarianmodel.cpython-36.pyc,, +pip/_vendor/chardet/__pycache__/__init__.cpython-36.pyc,, +pip/_vendor/chardet/__pycache__/codingstatemachine.cpython-36.pyc,, +pip/_vendor/chardet/__pycache__/sjisprober.cpython-36.pyc,, +pip/_vendor/chardet/__pycache__/enums.cpython-36.pyc,, +pip/_vendor/chardet/__pycache__/charsetprober.cpython-36.pyc,, +pip/_vendor/chardet/cli/__pycache__/chardetect.cpython-36.pyc,, +pip/_vendor/chardet/cli/__pycache__/__init__.cpython-36.pyc,, +pip/_vendor/msgpack/__pycache__/exceptions.cpython-36.pyc,, +pip/_vendor/msgpack/__pycache__/_version.cpython-36.pyc,, +pip/_vendor/msgpack/__pycache__/fallback.cpython-36.pyc,, +pip/_vendor/msgpack/__pycache__/__init__.cpython-36.pyc,, +pip/_vendor/lockfile/__pycache__/mkdirlockfile.cpython-36.pyc,, +pip/_vendor/lockfile/__pycache__/pidlockfile.cpython-36.pyc,, +pip/_vendor/lockfile/__pycache__/linklockfile.cpython-36.pyc,, +pip/_vendor/lockfile/__pycache__/symlinklockfile.cpython-36.pyc,, +pip/_vendor/lockfile/__pycache__/__init__.cpython-36.pyc,, +pip/_vendor/lockfile/__pycache__/sqlitelockfile.cpython-36.pyc,, +pip/_vendor/cachecontrol/__pycache__/controller.cpython-36.pyc,, +pip/_vendor/cachecontrol/__pycache__/_cmd.cpython-36.pyc,, +pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-36.pyc,, +pip/_vendor/cachecontrol/__pycache__/compat.cpython-36.pyc,, +pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-36.pyc,, +pip/_vendor/cachecontrol/__pycache__/serialize.cpython-36.pyc,, +pip/_vendor/cachecontrol/__pycache__/adapter.cpython-36.pyc,, +pip/_vendor/cachecontrol/__pycache__/cache.cpython-36.pyc,, +pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-36.pyc,, +pip/_vendor/cachecontrol/__pycache__/__init__.cpython-36.pyc,, +pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-36.pyc,, +pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-36.pyc,, +pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-36.pyc,, +pip/_vendor/colorama/__pycache__/winterm.cpython-36.pyc,, +pip/_vendor/colorama/__pycache__/initialise.cpython-36.pyc,, +pip/_vendor/colorama/__pycache__/win32.cpython-36.pyc,, +pip/_vendor/colorama/__pycache__/ansi.cpython-36.pyc,, +pip/_vendor/colorama/__pycache__/ansitowin32.cpython-36.pyc,, +pip/_vendor/colorama/__pycache__/__init__.cpython-36.pyc,, +pip/_vendor/requests/__pycache__/adapters.cpython-36.pyc,, +pip/_vendor/requests/__pycache__/utils.cpython-36.pyc,, +pip/_vendor/requests/__pycache__/exceptions.cpython-36.pyc,, +pip/_vendor/requests/__pycache__/certs.cpython-36.pyc,, +pip/_vendor/requests/__pycache__/models.cpython-36.pyc,, +pip/_vendor/requests/__pycache__/auth.cpython-36.pyc,, +pip/_vendor/requests/__pycache__/structures.cpython-36.pyc,, +pip/_vendor/requests/__pycache__/sessions.cpython-36.pyc,, +pip/_vendor/requests/__pycache__/packages.cpython-36.pyc,, +pip/_vendor/requests/__pycache__/__version__.cpython-36.pyc,, +pip/_vendor/requests/__pycache__/compat.cpython-36.pyc,, +pip/_vendor/requests/__pycache__/_internal_utils.cpython-36.pyc,, +pip/_vendor/requests/__pycache__/status_codes.cpython-36.pyc,, +pip/_vendor/requests/__pycache__/hooks.cpython-36.pyc,, +pip/_vendor/requests/__pycache__/api.cpython-36.pyc,, +pip/_vendor/requests/__pycache__/help.cpython-36.pyc,, +pip/_vendor/requests/__pycache__/cookies.cpython-36.pyc,, +pip/_vendor/requests/__pycache__/__init__.cpython-36.pyc,, +pip/_vendor/certifi/__pycache__/__main__.cpython-36.pyc,, +pip/_vendor/certifi/__pycache__/core.cpython-36.pyc,, +pip/_vendor/certifi/__pycache__/__init__.cpython-36.pyc,, +pip/_vendor/webencodings/__pycache__/labels.cpython-36.pyc,, +pip/_vendor/webencodings/__pycache__/tests.cpython-36.pyc,, +pip/_vendor/webencodings/__pycache__/x_user_defined.cpython-36.pyc,, +pip/_vendor/webencodings/__pycache__/__init__.cpython-36.pyc,, +pip/_vendor/webencodings/__pycache__/mklabels.cpython-36.pyc,, +pip/_vendor/progress/__pycache__/counter.cpython-36.pyc,, +pip/_vendor/progress/__pycache__/spinner.cpython-36.pyc,, +pip/_vendor/progress/__pycache__/bar.cpython-36.pyc,, +pip/_vendor/progress/__pycache__/__init__.cpython-36.pyc,, +pip/_vendor/pep517/__pycache__/_in_process.cpython-36.pyc,, +pip/_vendor/pep517/__pycache__/envbuild.cpython-36.pyc,, +pip/_vendor/pep517/__pycache__/colorlog.cpython-36.pyc,, +pip/_vendor/pep517/__pycache__/check.cpython-36.pyc,, +pip/_vendor/pep517/__pycache__/compat.cpython-36.pyc,, +pip/_vendor/pep517/__pycache__/wrappers.cpython-36.pyc,, +pip/_vendor/pep517/__pycache__/build.cpython-36.pyc,, +pip/_vendor/pep517/__pycache__/__init__.cpython-36.pyc,, +pip/_vendor/distlib/__pycache__/util.cpython-36.pyc,, +pip/_vendor/distlib/__pycache__/scripts.cpython-36.pyc,, +pip/_vendor/distlib/__pycache__/resources.cpython-36.pyc,, +pip/_vendor/distlib/__pycache__/locators.cpython-36.pyc,, +pip/_vendor/distlib/__pycache__/manifest.cpython-36.pyc,, +pip/_vendor/distlib/__pycache__/index.cpython-36.pyc,, +pip/_vendor/distlib/__pycache__/version.cpython-36.pyc,, +pip/_vendor/distlib/__pycache__/compat.cpython-36.pyc,, +pip/_vendor/distlib/__pycache__/metadata.cpython-36.pyc,, +pip/_vendor/distlib/__pycache__/markers.cpython-36.pyc,, +pip/_vendor/distlib/__pycache__/wheel.cpython-36.pyc,, +pip/_vendor/distlib/__pycache__/database.cpython-36.pyc,, +pip/_vendor/distlib/__pycache__/__init__.cpython-36.pyc,, +pip/_vendor/distlib/_backport/__pycache__/sysconfig.cpython-36.pyc,, +pip/_vendor/distlib/_backport/__pycache__/tarfile.cpython-36.pyc,, +pip/_vendor/distlib/_backport/__pycache__/misc.cpython-36.pyc,, +pip/_vendor/distlib/_backport/__pycache__/shutil.cpython-36.pyc,, +pip/_vendor/distlib/_backport/__pycache__/__init__.cpython-36.pyc,, +pip/_vendor/pkg_resources/__pycache__/py31compat.cpython-36.pyc,, +pip/_vendor/pkg_resources/__pycache__/__init__.cpython-36.pyc,, +pip/_vendor/packaging/__pycache__/_structures.cpython-36.pyc,, +pip/_vendor/packaging/__pycache__/utils.cpython-36.pyc,, +pip/_vendor/packaging/__pycache__/specifiers.cpython-36.pyc,, +pip/_vendor/packaging/__pycache__/version.cpython-36.pyc,, +pip/_vendor/packaging/__pycache__/requirements.cpython-36.pyc,, +pip/_vendor/packaging/__pycache__/__about__.cpython-36.pyc,, +pip/_vendor/packaging/__pycache__/markers.cpython-36.pyc,, +pip/_vendor/packaging/__pycache__/_compat.cpython-36.pyc,, +pip/_vendor/packaging/__pycache__/__init__.cpython-36.pyc,, diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip-19.1.1.dist-info/WHEEL b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip-19.1.1.dist-info/WHEEL new file mode 100644 index 00000000..c8240f03 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip-19.1.1.dist-info/WHEEL @@ -0,0 +1,6 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.33.1) +Root-Is-Purelib: true +Tag: py2-none-any +Tag: py3-none-any + diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip-19.1.1.dist-info/entry_points.txt b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip-19.1.1.dist-info/entry_points.txt new file mode 100644 index 00000000..f5809cb4 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip-19.1.1.dist-info/entry_points.txt @@ -0,0 +1,5 @@ +[console_scripts] +pip = pip._internal:main +pip3 = pip._internal:main +pip3.7 = pip._internal:main + diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip-19.1.1.dist-info/top_level.txt b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip-19.1.1.dist-info/top_level.txt new file mode 100644 index 00000000..a1b589e3 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip-19.1.1.dist-info/top_level.txt @@ -0,0 +1 @@ +pip diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/__init__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/__init__.py new file mode 100644 index 00000000..5d05da31 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/__init__.py @@ -0,0 +1 @@ +__version__ = "19.1.1" diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/__main__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/__main__.py new file mode 100644 index 00000000..0c223f8c --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/__main__.py @@ -0,0 +1,19 @@ +from __future__ import absolute_import + +import os +import sys + +# 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) + +from pip._internal import main as _main # isort:skip # noqa + +if __name__ == '__main__': + sys.exit(_main()) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3cedb864286e0507542837f80de2923ea32eae56 GIT binary patch literal 148 zcmXr!<>iW5rxz>Ez`*brh~a<{$Z`PUVh$jY!Vtxf!Whh;$yCK=XsKtYXXvNNc#Ate zzAUwED literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/__pycache__/__main__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/__pycache__/__main__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8b8eb590d81ebc316de48e11ff14adbd1d285403 GIT binary patch literal 400 zcmYjMJx{|h5Vf784Q*3E;!jklAA%JjCdMvo5y(pMmAbVPV>=R^^J`f6L0*~o3rw6N zkg#;`PIvFUJ6{*Y=<#Fm)G$Im$-kFieTU)p2!aTzh^8f_v1W>utj|fAKq`_0v-iOE z*?#bg!;W^e%pk#DE(l~D>y@cG(W7!q2~0$Wsx2}K7g!kBYYJs+wU9EH?Weiw#9 z+PcyZ9kx=%!9dmytS<{A&4SC?12U9NqgB?giR37XF7PJ(JF(|D?cw`!>9tv+cD`w) r67$vTZqux;L~Ql(ck03%Lw=(h(JHv5sCQ=w6PD9F&9e(SWwHJN38`&4 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/__init__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/__init__.py new file mode 100644 index 00000000..9c1637cf --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/__init__.py @@ -0,0 +1,78 @@ +#!/usr/bin/env python +from __future__ import absolute_import + +import locale +import logging +import os +import warnings + +import sys + +# 2016-06-17 barry@debian.org: urllib3 1.14 added optional support for socks, +# but if invoked (i.e. imported), it will issue a warning to stderr if socks +# isn't available. requests unconditionally imports urllib3's socks contrib +# module, triggering this warning. The warning breaks DEP-8 tests (because of +# the stderr output) and is just plain annoying in normal usage. I don't want +# to add socks as yet another dependency for pip, nor do I want to allow-stderr +# in the DEP-8 tests, so just suppress the warning. pdb tells me this has to +# be done before the import of pip.vcs. +from pip._vendor.urllib3.exceptions import DependencyWarning +warnings.filterwarnings("ignore", category=DependencyWarning) # noqa + +# We want to inject the use of SecureTransport as early as possible so that any +# references or sessions or what have you are ensured to have it, however we +# only want to do this in the case that we're running on macOS and the linked +# OpenSSL is too old to handle TLSv1.2 +try: + import ssl +except ImportError: + pass +else: + # Checks for OpenSSL 1.0.1 on MacOS + if sys.platform == "darwin" and ssl.OPENSSL_VERSION_NUMBER < 0x1000100f: + try: + from pip._vendor.urllib3.contrib import securetransport + except (ImportError, OSError): + pass + else: + securetransport.inject_into_urllib3() + +from pip._internal.cli.autocompletion import autocomplete +from pip._internal.cli.main_parser import parse_command +from pip._internal.commands import commands_dict +from pip._internal.exceptions import PipError +from pip._internal.utils import deprecation +from pip._internal.vcs import git, mercurial, subversion, bazaar # noqa +from pip._vendor.urllib3.exceptions import InsecureRequestWarning + +logger = logging.getLogger(__name__) + +# Hide the InsecureRequestWarning from urllib3 +warnings.filterwarnings("ignore", category=InsecureRequestWarning) + + +def main(args=None): + if args is None: + args = sys.argv[1:] + + # 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("ERROR: %s" % 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 = commands_dict[cmd_name](isolated=("--isolated" in cmd_args)) + return command.main(cmd_args) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a62ca0c4584bf4ab774bec2eeee1d59734fb5b41 GIT binary patch literal 1792 zcmZux-EJH;6t+FHv$K=^%O>3>ZIf;&MG7d}ii%#K3IQb&K_RIUL5o#1nq52FnRtF` zdy{Uo=}q9W4}yfa>;v!^bA`keufP?@-ffivWBK^_*x&K-IiKfVqY*s)t^ecw1%&=Y zm%e4tKZmX!V1yWASfCVBjEznNp~Q|3b?oR;*Nzohv7<*l7#&efed=SxD@l#H+-H?n z1fxma?g?n{7-h>Y;tR)t%rG+T2b6vN1aU8^Gw+zl*E~oXta^;(>q#3>zG$W`+QJBs zD+bBiM+DHnzC{OsZY7Hs;0yNGL?>OMOI8oWa(abcvHF7OrdR1ztJlR!x=L5A-VoQ) z>-4(So8m^gM%U7Hx}M&oH`5;NS$hj^wLv%FR!;IBzjcA>`}6y4%OHV6e#Hx(F`f-4k0Y7I*{Jm5QI<;%i~caue3Z*c z>9I(j##!8Iqqgy+_;4(_mQkjRCot8cvCfBiS_rNUwoyb<@enL&lrdwNt14vi&>;Lr zaj`9BEP320B7gAmIU+J0>ego3}gZd0P3al1ZCt2nsjtM zX+Uo>=K_cb-tU6_zk`1l{C9LaS!C|io$Z+Wa9_GJAG$NetB6&mfT@G@@KW}gMAC17b4~w#91UzO`dP*~} zmX%W(YhIFEl~oaET=AlG`3tD9H#@qlK`3+8+kF^*vAbJVEHlgwFN(f+`se#fLJXX=-Pj` znd*i1=O8UvX!l=xW`7K2i%nPFUA&YE!!f$_?($g2LRpg1#dlXuhDtU7A)7|DjA$FN z2%@ZwxZa%+%?~Y^pkfP=3&c=d&W(uneJL<#-YCt1?P{&P=V362z Xma!p92YbXPb+FCa3a*pDX*&M^*%a%} literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/__pycache__/build_env.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/__pycache__/build_env.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..58c1f711dbdb52ef48c841e210db5e7f43f3c764 GIT binary patch literal 7438 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/__pycache__/configuration.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/__pycache__/configuration.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ce560421282e4faed83391f1c0e219f5998c6f5d GIT binary patch literal 9704 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 bRbST;dl4=!8AWhK%P=josDVFb|EBRj?XuF0 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/__pycache__/download.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/__pycache__/download.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..664ea30cb4412f4b6fb8da9a065af730d1678e72 GIT binary patch literal 20918 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/__pycache__/exceptions.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/__pycache__/exceptions.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f170ba1825bf066246bb7d560d0265d6b25f1ea8 GIT binary patch literal 11692 zcmd5?%X8dDdI#pkAw^OY^_DCfl1xkEB}cMk?{2uVOB6*tVr!&O567%^O@RXp2?_&@ zx-q0UCNH5=n>{3_ROOUYE=ektzaZEA2RY4Q56MY~%`F#Kr7FK)H-N#Al&$e8!)g#8 z(CGg9>+k*b&54Pz-~Ma$+rPhT82@Eteg)j$Mw9?=We6y8X$(g**`}tO3 zrO+y_6kDa0l6qF~M_T2Tvbrz&qph)(G1G9z#Gj*o$v@H>Ul~{LM*NA^2W&YP0bf+`dw?%FmjPc^@CCphIx~Q0+zY_(eZU_%R{&p8@CSgeIu*bb z1zUhWc76f)7Ye=zc-EN%Jg4AGfUC|mz}M9HmjPdQJ^}oRdko`$=-hZ}RBm=JExm5I z?Z^uQX?3LQSkbx&J8SDYxb-Py*ZrimZbRP90SD>{dfayoyJo%=+_+V-A%lh*3TJ2%&KAx5zt9fmoJst)! zvVDKqebw=V+j4`b!D*8p7)!I*6mDE&#RQw>9CIb_nn3 zTW+$lTBXn{*Xx1Za_jZpSiRl~osQ4@@p}DL$M)klBlWryHtO|%GQ?3#qb@)E>RQxl zU&DBFs~yjG=B~e5Uk$I{aQH~Ix))%nf$d*QCzRFpwiv?@97g7FDVqu&YE9FNVbJu} zI>P4m=+#}i?*^{0{r=)CFR&Wfj##ZYLiERZnc!uTmvl+`j)WA)a5;{a;7E8V9FN8O zmO*jmAc{^$c)=PlReP-Z4uj=1usWT=lJHPi9)BKW=hmdW@>V=M1HFgAl(amb!Ibb& zn4Y-n$w+vs9d3CojP8Y3(-`F>47!Q+lni(dY;X%_Af^W?%)< zYGNeI_X4*%%xX>o`^%Zt5FTnZ=kK^Odf@`4Fj(+~YdhO9+q+J;mR(M??pm!-Mpmai z7lm_<9l6$~{?H1WSWc``El*mu9%;^pst7U`7 zu4mV=>4^w>(G4~&Y>Ev9qdF07GMnPGVYYzMJDXx^3c^ESIv%5`S?E_;TtRc;DuM=< ztC&b>M1}AinZ>fjT89=z4ukR;pm;rlGU1_6KKVqrn_k$FcW5{6dP3tqe*pI@;03E4 zcUHRG_Zkt|Us)W8yKoy(D7J?||18k`G=o0jq0m3^Fxa$x&-r@Yb$yC3jb!(9{FJK5 z^_4*K`A}?o4ygP(gBszXP@8%l$WEIsh^x`-PG_EI)P}-{D*ILjBfjg^8^aEka}bV|+${+G0`x-z1D)RnR`4mV|@H}=4m>xvI#cm7ewkGwWCTKZ7y zfuP|^ON71;jSt@AN}6o@PCiw^eddt)bm*Vt3|zq-C0jOIfd1OmP`=?88EQh-Y7+DFo6n zlP%>_NgJ|bd^-uknj6NR@dC?zl}k1jY_u9W+m&1|SG|7N6hDmKqCtP%7GKmj9LFvg z-I*UtPd=ko%V3gMY8c{178b`oxA=FsIFP=D2wVciriOSf)feAZZb|UhxPeEl0wHzCs?v zCt~|&KY|D(47#oe>-A+~K-z%ePYukPb{UwNvn#GIa-NA(~(%6mQ}Pj)*DSpX8$e5QZCej)wDgo16KeV6F!%x9N@&? zveyu&!Y_Lngj>PfS{ORkI#jVM$JEF3jZGWQC&hQ(S_r6iEpi}@F#Bb~EhS-4(5u@p z%+03PfEM3|bEn3ED+evz2r>V*b=42ITmjEqkD_$LEQUph?K0LDmJ_-%xB}-rq!VK` zg&T3obSQh3VR$EKdqDtW5HCjRH~@nHHOp}katruBvg68Gc*ieY>&4>JbPNZt1IG;- z9$$ktj*IYd%Zt{l)`AagUSa?ldrsQINUYzoGb13rZNW~+$ZKdKRn<#PHA*IkW=S|H zaF8v+Trn*cB9*ppBNAB!Nvw7V>5V*u`P&wJ&h2!De&9?mIa-IC`O*s-ToZiqn$u$+eB@_M&_|!y*w8F7JAXU{w}50NcVhypAK&I;U?=( z@Ogh9G|POg)O*Tu%wv@Wz~9+~(_vF>dW(FT)dFtzKp1Lw+dFgQXJ?UUg% zjF0Wx4m--9N$MOrt%-3%l>`C_tjKP`rvv?}*42kiet}JQRO$_B7&;pVXC8TGya(JxI?7|ML5wZ)~61_@IdF&Ld zg%SL_ItS6d8t-Bc!@3GJA-z@Q`60cQM%$Jop7=A6P#u6@fXl1dxJW?s1qrJB;izc;LROq9 zlrf82vh6m!rU%)j>Y-U?Ry&TeAcuC+qoH^&&fr(ykWISw!?&s+2!D1;XeM&9GSpgY z#3R8C&=H-|EuVkRK!w`D35m$hG^0yE?%zlxrln#t%4Y+VOqKd|ym>dJ&Z0XKm}5}x zM|z6F5F@CP#(MX^6?w8HD_x=?XIjV}BO;BR71clXK<8CN7qg&p+qJr2A~{hPiC#Jo z+i5kNss!kHJ+yUC<)ekGbnF&O&(x?Y7<@~tCsZAmzVzR`NQR< zM@zM5c>3_GrK%Mxb;TK-Hp@heTM;40>Nw$(SqqUI>)E=K>Z8TJYCXmWVhc-{MRvkQ zd`_+3AA$}VYaR%ogxl=EEd53qLMD@2aOgBwDnoBEHpt}s@juyR5ltxst^IeP z3+rZV1OAxOF17)X03brC}>cw^U zHO$@`YH$4jzHe$Ia}Mt^ho;wl8Y{NW8*c z0Uydlt1_b~{*;%#gR4{=72to6fMgwGq-1taQb#2cbkGt})sgaw>Wl-ETmfu~xt9q- z6;?19V=5A5h|`-=wzrOA9intkhQV9HEGpzbplPI_+;!4DMQR`>E}|nFk&+v@&@_IJ z#5%3zWo&{-cfFsg(4;d0h*n{l+i$$xOWM1 z0)d*J?}w>mH2jv559PXj>V#Df_kjMD?+VLZruFzvv<85I@oayh z5){-!@kfqK&0*xbHwU?0b?fh5zuuAkK1G#d5Y?M#k|}i*CQj|*=uc$)6pze#p1*#Ge7Q|>qRW9(XgsN-Pd#zWaK zJ-X);6x9FB#vy5x&{celDNyR5r4~we%<<0Rg<1rZc3*4NC#rxeMeV#jVux$Ie5HCN z?5-;vkoL!XrxwCG(|@8#>JZ~dxmYkyK+-48F|&l42W0-jk1p+PC4oyAO^5P*-;Q%- zIHK?1-N%c6N7MP0vdXU%%VXt&;F|_o`b%9rVn67ZfF<+2Gns_SlWk-;f*1N+MfXwW zjn!7K(kzADXdtN{8=GZ)7)H+N?-OII1P)mg8)n!Zs%*RrRR0%EF-tio2oEeuDSdX} zeh)0FtTZF59HXds=%R7)ci{Gw5|%sKySSJ=(#7)oV%YJWS{U7Nzfxgm_j6R{1Dbq< zy9{}C=?k?1bVl}0C*f^%o*+F$rVN}~@DIlu98fvFI6I_6*;*sPnExsIZ1N*qB7>>O zJ?M05ca~4#2B4UVEA%+7#iT}9>J?F)2R76&Dh}hZKpW<$S8UP+5EtZvI>SwZOAJ$>jql}y>IcJI)CuMaE zWk9+obCZzrZe;+C!x$(@LBof6hCymID5S&A4JtY3G`)$qzT9wq6cziJK=G(uQwVX_ zaqPDrhD??eC)6r4>Kr1^Up70)OW^#a;GXECq7e#}Qd=AHo-#QrM^)IniTYJ2suGHt z3iI$_m=&2|O^k5BQVft~RxS*N&PW4Q(GW|kvxs7pAB-*~M@7{sO?50%Oyi9>&I?tj z;Hfcn!b%-p5{yIz57h`BUlBYpqUxL~bF9*rf*Cax%Zer5QROKWp#`JwD5m-nrv&uL q)Gt6keb%I4j^|Dw5N9YpZjR@t3YouR=Kk!|?9?d!X3%~;Rs26~yeE_Z literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/__pycache__/index.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/__pycache__/index.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fee504bd6190da6f3b0a487a567ea785272060fa GIT binary patch literal 28769 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/__pycache__/locations.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/__pycache__/locations.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3b5125b7c373082c6a3276976234437d9326a4f8 GIT binary patch literal 4385 zcmai1OLH7o74Fyc^o&NM(bJOcB%POIC6;9DV28wUFqRw~TXL|Ja@>_v)0%rF^{A)2 zbGygV3@sK+SWziLv0+8AV8e!D%a%32;4We14L=|&zH@sd%LWQf^?jam?z!JRFI^oU zuYd99Y1%)vQ-8A<{}5mHdqdNh=4ni4Mx=KQ&(LXXMy6+~-Wv54ucGF*XRE&I zRaNhJ4tgu9bsev+cq`FZx8XI^*p9}#O|PlO)o7yI@><gvkBHh{|cLA zQ|Mj(%1{&k;AZF5&TG8dd7VuU4eyQkz5d*2&Fs86)XLRITI^aHzp!8bRu}WSMnCYp z#b$=Ou07Ub<8w`MUF2`z>^Hd6S!A;qz0E6~cZOQ$5+u#-8{qzg*E>r?&3n7w;C5#j zqZLR$59ybcbTN`{cfRMXj3iI8Gmv$Kx4{3eQyR}h&E92ay=x{ah7dyT#RHND;s==D}L-1q%wrz?Fv7|olV8$_elK4fpPH`#@+b?+uK zH?_r!gX{N`c94fjoVf>kTyXb*yHS$tyE}<++ey3=?q-+VFwXKIirg&k?d)7~dES0X z7Qd*=iC{ZRqF&DZu$v|#-@sZe>t`h^CS#kof4sK7=HFX;yoqTwNK+PyY|)U_M|U?? zA3WNWb$*xzG3#YqfMRO>@u!b{Fx|fAKm2TC+oNn#qb_k&#}H0!n7Jj-@^QPe*M28SrJk+gQgATk7C+q}+r#B&f_ z?8OoI+|(N^Xj6sOb=HWsVWNHS@qLB1!gP7=oQ?5B4>^;g&KuWhaQ>$e`> zTYKo=xqE+YY_4#3(a{;?piH;3?Iql1Nb-Z6*)jt-Cb6zJn zZ8Tb?sW)_S9-}r*kN+wdD9qo+AlGt*vS<>XIq=U-tl;YyLv!C07igVXz`8P6SBO32 zc~8XdmgvEXcHm}j!P!JFj>CAD%qWD(1n!eix`@smsLogm7%o4`uNL6~vaBfXg% z6Fi9gRPdefa7&JD2N@sD?krlex))?Yo(pNh38h_<$?7i8X;p!DszL73o6AZ-@F;NqtQ(xA1nseoR&A8w04^j8MWm0l*4S4Arj zb`qG#7*3pooOD+!v@fR+lF9(3Q-J!7@fDmxA+%^cdj9Z$yax?WCLD{1uMM=x|#X*U;T*D>ufdiO<2O%<~BXC@LW%(z^PQt!trnR4pvw zBI8=SdZ-^cv4u5F*Nb|`9HNpzZ!w!yne&ZtG**nU+I}tj zXLEKb;cRI+ptnp+4K#q zFzI$D9A^~YJnb!@<{0X1W-iW69qZuvI^sldT_xDv}~vSd@qTg znu=zR2iVA-DqR<3^W;X$G!oYpM=xbiLQbWDK#U$4H${+4P9Pv-rQ1a`^ONn4Y~ISC zDP46j$ptgTI5o8!>U)Nz-5?<8Y3HAO*j~}7J70W$2>i=t&5Om>rJfAn411? DVzSfI literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/__pycache__/pep425tags.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/__pycache__/pep425tags.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b8934accec8356cad27ddf9993cb71eae01c1a66 GIT binary patch literal 8284 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/__pycache__/pyproject.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/__pycache__/pyproject.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9cc70a1dca49c99165acc7e3965a3f39bbc424ee GIT binary patch literal 3134 zcmb7GOOG4J5uTnI4u`|XuGVrQ2?5e@fUF64skQPF1VynS3$YM|-pGn=4J-_1+0Er} z=cVrEu1F0prmjZ(19I}ox#W}|kYg_S19Qm5C;KP(l&T)?aCc)LLZTnjU0q%E)uZbd z-LCiP-v`g$xo#L=8|Qu|%-?|~UqQzVMq(o&J|Q?aW79YFX!({NZQq8`iW`aJJ4w@T zYC1c1la}Ao^G56?ZNE(n-WC&}b>dFa^}9*W?AY+_ndLDr-4Aj+5XPnbD3WSK@J9II zXhFLVP5uNrWfX=YD>J*HOh%ab3clYnR%As$P-|EpL=N#Hn9WNNO= zkAU}cz!Hv;Vc#mfNJc1nI^qHkmK~`?lpY0Yo^uI`nuGn)jucP+W{52y`0m#?Rg&M# zqkQjh7R79D|M}!F+rPzdNw*+M6&Ik?&3vAVY|2M!kk7ws-96$df02uOS5df1(#0D= zB!d`q53+FpR}b#S*(i+Vy+KXhw?rEyvyrT{0A;||$_}Smo~qkMf~`xua8aUChUF3Q zI*b=^ssX+QJIa^>J_Y#Q$^^WusVxSo0jOD1XJv{(L8eXRPFpJgeMt(0-5f4@8x7GL z`d(>fvb6J1O-g&3MQMepb@237r9(^c7fNGWIy@a^jDrWwW%>FMSK}z=FbAmh4j2L8 z??|p@d63To776iVko2k}PK<%)k4_7XfBIm>@4?=w;u@?XsQ(0~)xu`B+A@qA=rH2>8EX>heAzeP&c zUA9;c?reTRgs0r11@~BNi*0`n8UrVn^{yLBPqhngMZO?%P}5x5(15m0(6)VKEIUOT z?*wj-S$o;8ZiZE_XcwI^$kg8n{|(OmC<_@?6HaSO4bWvMT7BSo6n+Px2onymBk$;M zT$@R-Ezf`T_HXDOeLs|%1uP0G`12VDZ(;P{!2v}A@PHAQ5YI=yqr)uaH4|i1{}LXi z=h#d_neHkIff+}mNX2t1b3Tg35od#%K`nEjW!|HYAV@KD(QI5PRmJ(P{66(+HfO#J zs{AkmO#}%;BU2v*ZG#lhfum0VL_J;KjX*>KqejtFzAFIY8VLI4I1@FK8Uso>=4ikW z^EpOZWr4>KY$81eKf*|(G4Q2wlFed<2GJVF{3smFDTXk`kb8?}U|n$uAD9$20^)bdHZ>aF%ck4n_fF zRQtkBh|Vn6%IVBbd3q9wEJa{z!oHp@8Z$NCyA65RJ^?dS+W4%W1d-M%yN~>3R-vo1KQ;@Q{vpj!QfkP2xdWV-v4y6W0{`z`1|5^nzeK zgCxd-Kwya_evX|69_z@m4OQA8IDrh335~g~Q2c9p`K)jo@E0SlD^scM;NQ5oJyTH( z592(C=oSvLb=DtEybTKv(ZbHd4ht_`e`p!cVTI+S(3P8eH_6y6=J&Ahl_+h;bP4>; NZL>n_n&rA~`@ivCbZ-Cv literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/__pycache__/resolve.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/__pycache__/resolve.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..57071d0c6c27d82fd87aad426b1d48a3173de8b3 GIT binary patch literal 9054 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/__pycache__/wheel.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/__pycache__/wheel.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2b0d114c54d6778a794db9f874466353d4f6414e GIT binary patch literal 26065 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 DQbyzN literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/build_env.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/build_env.py new file mode 100644 index 00000000..89830e72 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/build_env.py @@ -0,0 +1,215 @@ +"""Build Environment used for isolation during sdist building +""" + +import logging +import os +import sys +import textwrap +from collections import OrderedDict +from distutils.sysconfig import get_python_lib +from sysconfig import get_paths + +from pip._vendor.pkg_resources import Requirement, VersionConflict, WorkingSet + +from pip import __file__ as pip_location +from pip._internal.utils.misc import call_subprocess +from pip._internal.utils.temp_dir import TempDirectory +from pip._internal.utils.typing import MYPY_CHECK_RUNNING +from pip._internal.utils.ui import open_spinner + +if MYPY_CHECK_RUNNING: + from typing import Tuple, Set, Iterable, Optional, List + from pip._internal.index import PackageFinder + +logger = logging.getLogger(__name__) + + +class _Prefix: + + def __init__(self, path): + # type: (str) -> None + self.path = path + self.setup = False + self.bin_dir = get_paths( + 'nt' if os.name == 'nt' else 'posix_prefix', + vars={'base': path, 'platbase': path} + )['scripts'] + # Note: prefer distutils' sysconfig to get the + # library paths so PyPy is correctly supported. + purelib = get_python_lib(plat_specific=False, prefix=path) + platlib = get_python_lib(plat_specific=True, prefix=path) + if purelib == platlib: + self.lib_dirs = [purelib] + else: + self.lib_dirs = [purelib, platlib] + + +class BuildEnvironment(object): + """Creates and manages an isolated environment to install build deps + """ + + def __init__(self): + # type: () -> None + self._temp_dir = TempDirectory(kind="build-env") + self._temp_dir.create() + + self._prefixes = OrderedDict(( + (name, _Prefix(os.path.join(self._temp_dir.path, name))) + for name in ('normal', 'overlay') + )) + + self._bin_dirs = [] # type: List[str] + self._lib_dirs = [] # type: 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 = { + os.path.normcase(site) for site in ( + get_python_lib(plat_specific=False), + get_python_lib(plat_specific=True), + ) + } + self._site_dir = os.path.join(self._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') 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): + 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, exc_val, exc_tb): + 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 cleanup(self): + # type: () -> None + self._temp_dir.cleanup() + + def check_requirements(self, reqs): + # type: (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: + ws = WorkingSet(self._lib_dirs) + for req in reqs: + try: + if ws.find(Requirement.parse(req)) is None: + missing.add(req) + except VersionConflict as e: + conflicting.add((str(e.args[0].as_requirement()), + str(e.args[1]))) + return conflicting, missing + + def install_requirements( + self, + finder, # type: PackageFinder + requirements, # type: Iterable[str] + prefix_as_string, # type: str + message # type: Optional[str] + ): + # type: (...) -> None + prefix = self._prefixes[prefix_as_string] + assert not prefix.setup + prefix.setup = True + if not requirements: + return + args = [ + sys.executable, os.path.dirname(pip_location), 'install', + '--ignore-installed', '--no-user', '--prefix', prefix.path, + '--no-warn-script-location', + ] # type: List[str] + if logger.getEffectiveLevel() <= logging.DEBUG: + 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.index_urls: + args.extend(['-i', finder.index_urls[0]]) + for extra_index in finder.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]) + for _, host, _ in finder.secure_origins: + args.extend(['--trusted-host', host]) + if finder.allow_all_prereleases: + args.append('--pre') + args.append('--') + args.extend(requirements) + with open_spinner(message) as spinner: + call_subprocess(args, spinner=spinner) + + +class NoOpBuildEnvironment(BuildEnvironment): + """A no-op drop-in replacement for BuildEnvironment + """ + + def __init__(self): + pass + + def __enter__(self): + pass + + def __exit__(self, exc_type, exc_val, exc_tb): + pass + + def cleanup(self): + pass + + def install_requirements(self, finder, requirements, prefix, message): + raise NotImplementedError() diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/cache.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/cache.py new file mode 100644 index 00000000..9379343c --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/cache.py @@ -0,0 +1,224 @@ +"""Cache Management +""" + +import errno +import hashlib +import logging +import os + +from pip._vendor.packaging.utils import canonicalize_name + +from pip._internal.download import path_to_url +from pip._internal.models.link import Link +from pip._internal.utils.compat import expanduser +from pip._internal.utils.temp_dir import TempDirectory +from pip._internal.utils.typing import MYPY_CHECK_RUNNING +from pip._internal.wheel import InvalidWheelFilename, Wheel + +if MYPY_CHECK_RUNNING: + from typing import Optional, Set, List, Any + from pip._internal.index import FormatControl + +logger = logging.getLogger(__name__) + + +class Cache(object): + """An abstract class - provides cache directories for data from links + + + :param cache_dir: The root of the cache. + :param format_control: An object of FormatControl class to limit + binaries being read from the cache. + :param allowed_formats: which formats of files the cache should store. + ('binary' and 'source' are the only allowed values) + """ + + def __init__(self, cache_dir, format_control, allowed_formats): + # type: (str, FormatControl, Set[str]) -> None + super(Cache, self).__init__() + self.cache_dir = expanduser(cache_dir) if cache_dir else None + self.format_control = format_control + self.allowed_formats = allowed_formats + + _valid_formats = {"source", "binary"} + assert self.allowed_formats.union(_valid_formats) == _valid_formats + + def _get_cache_path_parts(self, link): + # type: (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 re-use the URL because it might have other items in the fragment + # and we don't care about those. + key_parts = [link.url_without_fragment] + if link.hash_name is not None and link.hash is not None: + key_parts.append("=".join([link.hash_name, link.hash])) + key_url = "#".join(key_parts) + + # 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 = hashlib.sha224(key_url.encode()).hexdigest() + + # 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, package_name): + # type: (Link, Optional[str]) -> List[Any] + can_not_cache = ( + not self.cache_dir or + not package_name or + not link + ) + if can_not_cache: + return [] + + canonical_name = canonicalize_name(package_name) + formats = self.format_control.get_allowed_formats( + canonical_name + ) + if not self.allowed_formats.intersection(formats): + return [] + + root = self.get_path_for_link(link) + try: + return os.listdir(root) + except OSError as err: + if err.errno in {errno.ENOENT, errno.ENOTDIR}: + return [] + raise + + def get_path_for_link(self, link): + # type: (Link) -> str + """Return a directory to store cached items in for link. + """ + raise NotImplementedError() + + def get(self, link, package_name): + # type: (Link, Optional[str]) -> Link + """Returns a link to a cached item if it exists, otherwise returns the + passed link. + """ + raise NotImplementedError() + + def _link_for_candidate(self, link, candidate): + # type: (Link, str) -> Link + root = self.get_path_for_link(link) + path = os.path.join(root, candidate) + + return Link(path_to_url(path)) + + def cleanup(self): + # type: () -> None + pass + + +class SimpleWheelCache(Cache): + """A cache of wheels for future installs. + """ + + def __init__(self, cache_dir, format_control): + # type: (str, FormatControl) -> None + super(SimpleWheelCache, self).__init__( + cache_dir, format_control, {"binary"} + ) + + def get_path_for_link(self, link): + # type: (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) + + # Store wheels within the root cache_dir + return os.path.join(self.cache_dir, "wheels", *parts) + + def get(self, link, package_name): + # type: (Link, Optional[str]) -> Link + candidates = [] + + for wheel_name in self._get_candidates(link, package_name): + try: + wheel = Wheel(wheel_name) + except InvalidWheelFilename: + continue + if not wheel.supported(): + # Built for a different python/arch/etc + continue + candidates.append((wheel.support_index_min(), wheel_name)) + + if not candidates: + return link + + return self._link_for_candidate(link, min(candidates)[1]) + + +class EphemWheelCache(SimpleWheelCache): + """A SimpleWheelCache that creates it's own temporary cache directory + """ + + def __init__(self, format_control): + # type: (FormatControl) -> None + self._temp_dir = TempDirectory(kind="ephem-wheel-cache") + self._temp_dir.create() + + super(EphemWheelCache, self).__init__( + self._temp_dir.path, format_control + ) + + def cleanup(self): + # type: () -> None + self._temp_dir.cleanup() + + +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, format_control): + # type: (str, FormatControl) -> None + super(WheelCache, self).__init__( + cache_dir, format_control, {'binary'} + ) + self._wheel_cache = SimpleWheelCache(cache_dir, format_control) + self._ephem_cache = EphemWheelCache(format_control) + + def get_path_for_link(self, link): + # type: (Link) -> str + return self._wheel_cache.get_path_for_link(link) + + def get_ephem_path_for_link(self, link): + # type: (Link) -> str + return self._ephem_cache.get_path_for_link(link) + + def get(self, link, package_name): + # type: (Link, Optional[str]) -> Link + retval = self._wheel_cache.get(link, package_name) + if retval is link: + retval = self._ephem_cache.get(link, package_name) + return retval + + def cleanup(self): + # type: () -> None + self._wheel_cache.cleanup() + self._ephem_cache.cleanup() diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/cli/__init__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/cli/__init__.py new file mode 100644 index 00000000..e589bb91 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/cli/__init__.py @@ -0,0 +1,4 @@ +"""Subpackage containing all of pip's command line interface related code +""" + +# This file intentionally does not import submodules diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/cli/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/cli/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..786e7aaf39e6f1ab8bf215e608613590882ee74b GIT binary patch literal 223 zcmX|)y$ZrG6ope4OQG+OO*-@kodgj#Ha?vOTaV8XqN>2lrgY^u@`A3_+^yuGWWI1u_&!Nr6DbD km&z7%7@`q2HX5#Tp;gXsRi3fT-TQD=Tj;c04{a?%evh9(K>z>% literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/cli/__pycache__/autocompletion.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/cli/__pycache__/autocompletion.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..52e44023f182bb2d84833f0812cea09eb111dca3 GIT binary patch literal 5065 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/cli/__pycache__/base_command.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/cli/__pycache__/base_command.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f8c3428f51c8924cf92858858bc1168513b7f22c GIT binary patch literal 7752 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 BU=RQR literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/cli/__pycache__/cmdoptions.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/cli/__pycache__/cmdoptions.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ff231ebc0593215a6ab293cab613d3b41e2732c8 GIT binary patch literal 16809 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 I2<*lG0h`Qx;{X5v literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/cli/__pycache__/parser.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/cli/__pycache__/parser.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6d92bb1a7c61f244df85184c54f24288b6581296 GIT binary patch literal 8907 zcmbVR&2Jk?cJD8eEsCOO*_J=XJLx#KgY=WBN(PwdQi!(DGL#cEP5 zHM^;*rX_L64Ki{tngm$vCOPaSL9n-67D4`u9P$VBEeH_6x14gAT=ILbniM57lVB-z zb#--hRrRa)e((2Qzq7Pd{>g6}&wle=!}xb&=I5Y(ABXxE6vAj4!W33y_N=C5Qr(X1 zrp;%k>F~MGEbzJ5EaL1$rJmb#xo;s_=#`sgt{0=lUZq*#dMR4!Rh!k`a&wul-Kf?( z*F0w$fxWX5oIf&~7d|q?f+)W*L^*JFE*{yJw%poM zNi;|UKkW4rnQo$OL8UTHwvr^mMFkgO-1XDLexPu@^x5VQHXl9R^gnp~_|fCKl`TC; z;!fBd$QDhKt(?02K*~hosdL>R_0vH1!nhUrDjWuFTEOIIqjDdIdW<44nkF{E5+;Oh z2^+8D2uBofE{Kc56$>v+h`lTp(NYo>v4pcLs$v=E1yK{{a4w4#aUSPIaRGu@&CY)+ zgET$-IEeZmCbHK`v6$hz?|Xe}4g+~R3Y7Am2XZTcz_!uN>rDDljbzC3YqU+Qk$$vj zIv(Lr8z_W1vV?Wl5H`-vT_ZJ)3{kjZh~i}fEhV&=JJyapGCJnS{CjI;{lbJU7+9dY z`SNv)ke%zb4t$#3?=K2^VOntv@XO0S@PUf^^S7pWBeLDZ6Ay+ZZH}Bm}d;Qz}u)n@F2qUq6 zXK#Bex%0N5CO$9fF)Y_~%@uQaZI1jKla;jTJ?KYg zGR6luR29X@*fB;XOw2kWg|;_`1@G<+b#G{`c~GlWUvHAHHQd*_s_K?JkB76OZsr%# z#U*OKIQOCN(44#wb6B6Z+PP1Cqu28d*3+hy)31nw6ocPlgi6;KJ0o+)kXJ{}4z_*= zs&d6R!serH$vb%~G+wu+_Q*NHJMTL3W88CuHL{NYMd)2PGNi=0*#9ZY(vEv%j0^m{ zH7d~6DvvAdodp^LGILr08KdmwzsInC8G9|So%DLGbroReT4^A>C{(GJbS7Yti_&Yw z!s`WT>p8%qQJxO7L67zF&KsTwNQnS69q*Rf28_^+H7`oyF4gL5UeM@nc(-n@cW$nE zH`mv-EN|A&j@QF9onE>znKCy*Pp`&X_k!oGXu#`jDKGEs-I#PgI~?Z53u1ZsYbJ8q zgAGVlusfMiFK3HBubUJJrqJs5gIHu`pWZ;X*-;Q@#V`hfrrBcJ+6|OXYYDPaE}qO0 zfl9MNlSsj} z5Q^7r4NnDLLuU8XE0V0_V&NWl@%oCvrLbxay>F2scRwXVk|Xc-=ctTKxtS8CV%Lu> zxhkx&6+6O)93fW$yciQY*}xQ%wv!fiiY)EIku^3&afE&yk~?}mF+>T6c3zp&YlU&< zJ|Ikqg~}Emp2#XQSuVrU4Yg5*kXWbcrL45wQt-nvD{AMF6(cfphzWavvut3=@-`KB zP)ww@II|5fw$@e<*U_qX`i&wV4+yr?|;kE^b>8`WBQSb zP@N8S9mQ858ss})U~TX@_L2Dz-eGLRJDBh&>>W0ze1=|%h9K9;qUu6bo>j)?F<$SI z@hfZ3c`}1kpng{4PUeu3!xaM>Nw@V@kemIce3x7b+)V%8PiaURzi15Ko%ces2Gh73 zCGA$E?x8XnKoXW<#)9fcVJdIZm7}f5A@h>76WIcc+-IZHayPkI(rQ?lo}r=*$-Ml( z7}D%QHi37q(X-c3)GNfC;#M#4eK-ccmxw_`^@{KB4O&rtr{w!0Y5P9YAW6W*U@q6G z_6`;IsJKrB>o+0%8U2+DXyaWVE(Pec+>&dTFS!NRbywUH-*4mA^hct-k3*5;n9rY~ zlZEU%pY;W3dfa^&bXtQbRi~)o@V5^JDouLx=27b$YejICxMVD)CNE7qxZ!<_0(v54&`yEgn3hIk zPEHDeCp7$?GDlK+QUY}g1-S}g>@I+Cp$28A(jvl@+B?opVFZmnBG+MV!bSffp2%vx zUb;V7b>>cLk}O=Fqh3}04wFu~LuCJcb`vQq2yx^duney~T>Dn}H%PRs4szv4w+G+$}hkq?S{PLQ=X3X&UNN@Xb${NWuSl zdhCy6f=zFwUd!u-&*7gZ@lT`fWVMzM6N=xZj@eSeZrJB5mD&BIFRx=Q5E(OnI}`_! z;9g!tkrlY#jL=A4*?G<8PK~^W8+qhXvC3u@zTs67H0C@wg;5d-9S>+EGI3Hqps@KD z))jcp15!!g@Uxosx+80c8T;PqQz#{bV-4?q6p$PygdAp)^K7*SV`xW%+=eJpg>h(6 zcv=*VP4JJ!Tsky@q>wr*0wcj_CqC4c;3Z~wRv^nW&-s{kNUy+QoLz;ZtXaeBbA)l` zA+o45YD+#XbNe#sgFGL~ALDXn>JtV26gLu@liZMNxeJn7+Bl{^3$^<=6cr~5JSS67 z6eTEik@E$VC(!u{gJV{qPVs+ApHdHwb>KB`&P4>6L_VyIt!c@)R+o9Lq z4%)jpv@xEwXR{*Um&h+L+YI98p-f_m;aic1a3^eS;oekzCQh8K>LFf|6a;h)80I6t zfI3nlpksDQK_RswpRi-9wbc32B*L~+nv-7urFY0fWp0Rc55-R()?N7o!%Onbl303H z)N9VF?<6pOFc7{}%rXpX_}Uy- zGR+5&5a>q`L*UD{L|}GUAtpm0L-6fzJg{4qADW1;O=Ea1MVfBp=omN!&?8O&=sz|7 z6z)Kv&(ED78L{;v)Uo@>CcOE6>;;sg@{)FY0FNU)F`#@G{Lf5Qi^%;;8}kDa7kR67 z?59Oj)1vvDqCu8eR_J4lG_%#A%ADXJOmke)fuOw`9A-9x$IK26+GhloE$Q)d=kqH} znv2eY2@+o&&hx^j9-1ms2~U$O$%NEDpwLm2u(~$*JcIqnWKL)uJZ7Ksla+so^^ACG(jBLmhmUU#IM`2tX6-MT6QNDp4L81%MLUH7DSmt|gJT(s1X!K{_ z9TyH>*FA8xf+vd@n|po^2eJ3%Q)4fEs`td*%!=J8*=j|@!Uk+*WBM*+`SdQNw2HJU zBzjsNo1m%Y-@HOj<@@NOmHV_tf|rW0t$FF+(O5Jvca!j zizJG2Rs}u(|9J0T;~_F)c(@mQ_QnziO8$=l9OGc?8})XpE9)Z^Idz+jLuE>Xrfu3}XejwvpqHQFPvEA*}2HTFCh z9ZU^ow)(Y^UPM3p*f>Jier()@g!URRGmGTMRAX`Y8z!VVU)RKI!g{^^Fx}QVs=SUw zSU@aX8^MV`o9032X71Y>-ou2v9T-fSA}gr+K|6%A+Xnkbbk^m3dK(@FIRlTsDk!dK3!8np# zK_mlCb;q5JS{&HOU&Q| zy%opAnTsGd+G@3TG23&RXrGD$6!lf@Sc>dYl-xvHR%EyU*Twf6IiQv@TPZUaq%7Iq zC7DZB=I694x)#QGFr2`b&)&}O;cEwyR#|~B8Ba1BEL+~7=d1a^c|IL3DT#qEX`b+0 znk?Ms4+qQBOZ^2w5^ZFGW+eZS8^d~stGHWA z-E@IcYZMbPJwbplHh*qvdV(Hh9QMxQ5hZM_gZsDw*1)dcg}nnyfIYyHv6C*3oV12y zUW}G=geo|%05cG65lv!Lh@a}jDX^0RjK6xMy#@2t#OooMt%+?;U{9EBtAlSm2r^XK ziqnw4@XgvP8NIgG2}?%Ura}GuHw5ucDRs1PXfY&}?+lzK*;x6ct#{v~xhO(wDxnkes(FZ$T&=r+6xe0=E%&0Nd()IB!5tklf)NFH_zOsJ zQkcM59^stS>&4+8>rY_hpztw(^qW_YZ%B-Z-u^by4>@X{4g+#sXIBN<2CaP#$|V{n z@I6evxHBe77bg_LGxFv<4=FJ3i?_!47;7HBm(jO*c8;AxS`0q82S|wEA<)7ogi#&_ z>UNy0dF1wPv%m8&%3HVZuu0-0Ok?=t-+jV(&IokdkhmKopPGDjWCAHVDaT1F%sGR}6L?VMKNxQQWFu#WCzz=#z*Lek2H};WJ84qY{<>mxpnecx`EHq4d7NfP@wL};xkk< zUpv!jHq7HNn6agK^>jDA0P@?dRDWk*fVuvVNx9Z}N*r;Hkh8O#d6QezMkx$dT7Lf- sSxwbFbMNYG@;wuMm4^b~DEP}ceLY9WjG!6c{;aaS@~F17aS5XX0u^n=n+4}v~|IkYKyRk1b^gLNbM5*B4>yAcCPlO~&k@8S!1@qza0 zDX-wkO{>oE|1mTCnPJX!eem=-d45L-eM$X?BC9K@>O_JehEtSbim|Mz!W619m1<0* z9oC^;)}=kx^O4bSq#GGnjFzh^Pir1Sk`;N$8!YEdyR=bTXf2K;h|w1VfR~!rWeiZZ z7SZ#=`P}w>(Xl``, ```` or ```` + if completion_type: + options = auto_complete_paths(current, completion_type) + options = ((opt, 0) for opt in options) + 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) + else: + # show main parser options only when necessary + + opts = [i.option_list for i in parser.option_groups] + opts.append(parser.option_list) + opts = (o for it in opts for o in it) + if current.startswith('-'): + for opt in 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, opts) + if completion_type: + subcommands = 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, cword, opts): + """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 + 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 + + +def auto_complete_paths(current, completion_type): + """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`)i + :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 ```` after option + # complete directories when there is ````, ```` or + # ````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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/cli/base_command.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/cli/base_command.py new file mode 100644 index 00000000..f6108c96 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/cli/base_command.py @@ -0,0 +1,340 @@ +"""Base Command class, and related routines""" +from __future__ import absolute_import, print_function + +import logging +import logging.config +import optparse +import os +import platform +import sys +import traceback + +from pip._internal.cli import cmdoptions +from pip._internal.cli.parser import ( + ConfigOptionParser, UpdatingDefaultsHelpFormatter, +) +from pip._internal.cli.status_codes import ( + ERROR, PREVIOUS_BUILD_DIR_ERROR, SUCCESS, UNKNOWN_ERROR, + VIRTUALENV_NOT_FOUND, +) +from pip._internal.download import PipSession +from pip._internal.exceptions import ( + BadCommand, CommandError, InstallationError, PreviousBuildDirError, + UninstallationError, +) +from pip._internal.index import PackageFinder +from pip._internal.locations import running_under_virtualenv +from pip._internal.req.constructors import ( + install_req_from_editable, install_req_from_line, +) +from pip._internal.req.req_file import parse_requirements +from pip._internal.utils.deprecation import deprecated +from pip._internal.utils.logging import BrokenStdoutLoggingError, setup_logging +from pip._internal.utils.misc import ( + get_prog, normalize_path, redact_password_from_url, +) +from pip._internal.utils.outdated import pip_version_check +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from typing import Optional, List, Tuple, Any + from optparse import Values + from pip._internal.cache import WheelCache + from pip._internal.req.req_set import RequirementSet + +__all__ = ['Command'] + +logger = logging.getLogger(__name__) + + +class Command(object): + name = None # type: Optional[str] + usage = None # type: Optional[str] + ignore_require_venv = False # type: bool + + def __init__(self, isolated=False): + # type: (bool) -> None + parser_kw = { + 'usage': self.usage, + 'prog': '%s %s' % (get_prog(), self.name), + 'formatter': UpdatingDefaultsHelpFormatter(), + 'add_help_option': False, + 'name': self.name, + 'description': self.__doc__, + 'isolated': isolated, + } + + self.parser = ConfigOptionParser(**parser_kw) + + # Commands should add options to this option group + optgroup_name = '%s Options' % self.name.capitalize() + 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) + + def run(self, options, args): + # type: (Values, List[Any]) -> Any + raise NotImplementedError + + def _build_session(self, options, retries=None, timeout=None): + # type: (Values, Optional[int], Optional[int]) -> PipSession + session = PipSession( + cache=( + normalize_path(os.path.join(options.cache_dir, "http")) + if options.cache_dir else None + ), + retries=retries if retries is not None else options.retries, + insecure_hosts=options.trusted_hosts, + ) + + # 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, + } + + # Determine if we can prompt the user for authentication or not + session.auth.prompting = not options.no_input + + return session + + def parse_args(self, args): + # type: (List[str]) -> Tuple + # factored out for testability + return self.parser.parse_args(args) + + def main(self, args): + # type: (List[str]) -> int + options, args = self.parse_args(args) + + # Set verbosity so that it can be used elsewhere. + self.verbosity = options.verbose - options.quiet + + level_number = setup_logging( + verbosity=self.verbosity, + no_color=options.no_color, + user_log_file=options.log, + ) + + if sys.version_info[:2] == (3, 4): + deprecated( + "Python 3.4 support has been deprecated. pip 19.1 will be the " + "last one supporting it. Please upgrade your Python as Python " + "3.4 won't be maintained after March 2019 (cf PEP 429).", + replacement=None, + gone_in='19.2', + ) + elif sys.version_info[:2] == (2, 7): + message = ( + "A future version of pip will drop support for Python 2.7." + ) + if platform.python_implementation() == "CPython": + message = ( + "Python 2.7 will reach the end of its life on January " + "1st, 2020. Please upgrade your Python as Python 2.7 " + "won't be maintained after that date. " + ) + message + deprecated(message, replacement=None, gone_in=None) + + # 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) + + try: + status = self.run(options, args) + # FIXME: all commands should return an exit status + # and when it is done, isinstance is not needed anymore + if isinstance(status, int): + return status + except PreviousBuildDirError as exc: + logger.critical(str(exc)) + logger.debug('Exception information:', exc_info=True) + + return PREVIOUS_BUILD_DIR_ERROR + except (InstallationError, UninstallationError, BadCommand) 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 + finally: + allow_version_check = ( + # Does this command have the index_group options? + hasattr(options, "no_index") and + # Is this command allowed to perform this check? + not (options.disable_pip_version_check or options.no_index) + ) + # Check if we're using the latest version of pip available + if allow_version_check: + session = self._build_session( + options, + retries=0, + timeout=min(5, options.timeout) + ) + with session: + pip_version_check(session, options) + + # Shutdown the logging module + logging.shutdown() + + return SUCCESS + + +class RequirementCommand(Command): + + @staticmethod + def populate_requirement_set(requirement_set, # type: RequirementSet + args, # type: List[str] + options, # type: Values + finder, # type: PackageFinder + session, # type: PipSession + name, # type: str + wheel_cache # type: Optional[WheelCache] + ): + # type: (...) -> None + """ + Marshal cmd line args into a requirement set. + """ + # NOTE: As a side-effect, options.require_hashes and + # requirement_set.require_hashes may be updated + + for filename in options.constraints: + for req_to_add in parse_requirements( + filename, + constraint=True, finder=finder, options=options, + session=session, wheel_cache=wheel_cache): + req_to_add.is_direct = True + requirement_set.add_requirement(req_to_add) + + for req in args: + req_to_add = install_req_from_line( + req, None, isolated=options.isolated_mode, + use_pep517=options.use_pep517, + wheel_cache=wheel_cache + ) + req_to_add.is_direct = True + requirement_set.add_requirement(req_to_add) + + for req in options.editables: + req_to_add = install_req_from_editable( + req, + isolated=options.isolated_mode, + use_pep517=options.use_pep517, + wheel_cache=wheel_cache + ) + req_to_add.is_direct = True + requirement_set.add_requirement(req_to_add) + + for filename in options.requirements: + for req_to_add in parse_requirements( + filename, + finder=finder, options=options, session=session, + wheel_cache=wheel_cache, + use_pep517=options.use_pep517): + req_to_add.is_direct = True + requirement_set.add_requirement(req_to_add) + # If --require-hashes was a line in a requirements file, tell + # RequirementSet about it: + requirement_set.require_hashes = options.require_hashes + + if not (args or options.editables or options.requirements): + opts = {'name': name} + if options.find_links: + raise CommandError( + 'You must give at least one requirement to %(name)s ' + '(maybe you meant "pip %(name)s %(links)s"?)' % + dict(opts, links=' '.join(options.find_links))) + else: + raise CommandError( + 'You must give at least one requirement to %(name)s ' + '(see "pip help %(name)s")' % opts) + + def _build_package_finder( + self, + options, # type: Values + session, # type: PipSession + platform=None, # type: Optional[str] + python_versions=None, # type: Optional[List[str]] + abi=None, # type: Optional[str] + implementation=None # type: Optional[str] + ): + # type: (...) -> PackageFinder + """ + Create a package finder appropriate to this requirement command. + """ + index_urls = [options.index_url] + options.extra_index_urls + if options.no_index: + logger.debug( + 'Ignoring indexes: %s', + ','.join(redact_password_from_url(url) for url in index_urls), + ) + index_urls = [] + + return PackageFinder( + find_links=options.find_links, + format_control=options.format_control, + index_urls=index_urls, + trusted_hosts=options.trusted_hosts, + allow_all_prereleases=options.pre, + session=session, + platform=platform, + versions=python_versions, + abi=abi, + implementation=implementation, + prefer_binary=options.prefer_binary, + ) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/cli/cmdoptions.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/cli/cmdoptions.py new file mode 100644 index 00000000..a09e38f7 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/cli/cmdoptions.py @@ -0,0 +1,809 @@ +""" +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. + +""" +from __future__ import absolute_import + +import textwrap +import warnings +from distutils.util import strtobool +from functools import partial +from optparse import SUPPRESS_HELP, Option, OptionGroup + +from pip._internal.exceptions import CommandError +from pip._internal.locations import USER_CACHE_DIR, src_prefix +from pip._internal.models.format_control import FormatControl +from pip._internal.models.index import PyPI +from pip._internal.utils.hashes import STRONG_HASHES +from pip._internal.utils.typing import MYPY_CHECK_RUNNING +from pip._internal.utils.ui import BAR_TYPES + +if MYPY_CHECK_RUNNING: + from typing import Any, Callable, Dict, Optional + from optparse import OptionParser, Values + from pip._internal.cli.parser import ConfigOptionParser + + +def raise_option_error(parser, option, msg): + """ + Raise an option parsing error using parser.error(). + + Args: + parser: an OptionParser instance. + option: an Option instance. + msg: the error text. + """ + msg = '{} error: {}'.format(option, msg) + msg = textwrap.fill(' '.join(msg.split())) + parser.error(msg) + + +def make_option_group(group, parser): + # type: (Dict[str, Any], 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_install_build_global(options, check_options=None): + # type: (Values, Optional[Values]) -> None + """Disable wheels if per-setup.py call options are set. + + :param options: The OptionParser options to update. + :param check_options: The options to check, if not supplied defaults to + options. + """ + if check_options is None: + check_options = options + + def getname(n): + return getattr(check_options, n, None) + names = ["build_options", "global_options", "install_options"] + if any(map(getname, names)): + control = options.format_control + control.disallow_binaries() + warnings.warn( + 'Disabling all use of wheels due to the use of --build-options ' + '/ --global-options / --install-options.', stacklevel=2, + ) + + +def check_dist_restriction(options, check_target=False): + # type: (Values, bool) -> 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.platform, + options.abi, + 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 dist_restriction_set and not options.target_dir: + raise CommandError( + "Can not use any platform or abi specific options unless " + "installing via '--target'" + ) + + +########### +# options # +########### + +help_ = partial( + Option, + '-h', '--help', + dest='help', + action='help', + help='Show help.', +) # type: Callable[..., Option] + +isolated_mode = partial( + Option, + "--isolated", + dest="isolated_mode", + action="store_true", + default=False, + help=( + "Run pip in an isolated mode, ignoring environment variables and user " + "configuration." + ), +) # type: Callable[..., Option] + +require_virtualenv = partial( + Option, + # Run only if inside a virtualenv, bail if not. + '--require-virtualenv', '--require-venv', + dest='require_venv', + action='store_true', + default=False, + help=SUPPRESS_HELP +) # type: Callable[..., Option] + +verbose = 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.' +) # type: Callable[..., Option] + +no_color = partial( + Option, + '--no-color', + dest='no_color', + action='store_true', + default=False, + help="Suppress colored output", +) # type: Callable[..., Option] + +version = partial( + Option, + '-V', '--version', + dest='version', + action='store_true', + help='Show version and exit.', +) # type: Callable[..., Option] + +quiet = 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).' + ), +) # type: Callable[..., Option] + +progress_bar = partial( + Option, + '--progress-bar', + dest='progress_bar', + type='choice', + choices=list(BAR_TYPES.keys()), + default='on', + help=( + 'Specify type of progress to be displayed [' + + '|'.join(BAR_TYPES.keys()) + '] (default: %default)' + ), +) # type: Callable[..., Option] + +log = partial( + Option, + "--log", "--log-file", "--local-log", + dest="log", + metavar="path", + help="Path to a verbose appending log." +) # type: Callable[..., Option] + +no_input = partial( + Option, + # Don't ask for input + '--no-input', + dest='no_input', + action='store_true', + default=False, + help=SUPPRESS_HELP +) # type: Callable[..., Option] + +proxy = partial( + Option, + '--proxy', + dest='proxy', + type='str', + default='', + help="Specify a proxy in the form [user:passwd@]proxy.server:port." +) # type: Callable[..., Option] + +retries = partial( + Option, + '--retries', + dest='retries', + type='int', + default=5, + help="Maximum number of retries each connection should attempt " + "(default %default times).", +) # type: Callable[..., Option] + +timeout = partial( + Option, + '--timeout', '--default-timeout', + metavar='sec', + dest='timeout', + type='float', + default=15, + help='Set the socket timeout (default %default seconds).', +) # type: Callable[..., Option] + +skip_requirements_regex = partial( + Option, + # A regex to be used to skip requirements + '--skip-requirements-regex', + dest='skip_requirements_regex', + type='str', + default='', + help=SUPPRESS_HELP, +) # type: Callable[..., Option] + + +def exists_action(): + # type: () -> 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 = partial( + Option, + '--cert', + dest='cert', + type='str', + metavar='path', + help="Path to alternate CA bundle.", +) # type: Callable[..., Option] + +client_cert = partial( + Option, + '--client-cert', + dest='client_cert', + type='str', + default=None, + metavar='path', + help="Path to SSL client certificate, a single file containing the " + "private key and the certificate in PEM format.", +) # type: Callable[..., Option] + +index_url = partial( + Option, + '-i', '--index-url', '--pypi-url', + dest='index_url', + metavar='URL', + default=PyPI.simple_url, + help="Base URL of 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.", +) # type: Callable[..., Option] + + +def extra_index_url(): + 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 = partial( + Option, + '--no-index', + dest='no_index', + action='store_true', + default=False, + help='Ignore package index (only looking at --find-links URLs instead).', +) # type: Callable[..., Option] + + +def find_links(): + # type: () -> 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. If a local path or file:// url that's a directory, " + "then look for archives in the directory listing.", + ) + + +def trusted_host(): + # type: () -> Option + return Option( + "--trusted-host", + dest="trusted_hosts", + action="append", + metavar="HOSTNAME", + default=[], + help="Mark this host as trusted, even though it does not have valid " + "or any HTTPS.", + ) + + +def constraints(): + # type: () -> 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 requirements(): + # type: () -> 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 editable(): + # type: () -> 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.'), + ) + + +src = partial( + Option, + '--src', '--source', '--source-dir', '--source-directory', + dest='src_dir', + metavar='dir', + default=src_prefix, + help='Directory to check out editable projects into. ' + 'The default in a virtualenv is "/src". ' + 'The default for global installs is "/src".' +) # type: Callable[..., Option] + + +def _get_format_control(values, option): + # type: (Values, Option) -> Any + """Get a format_control object.""" + return getattr(values, option.dest) + + +def _handle_no_binary(option, opt_str, value, parser): + # type: (Option, str, str, 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, opt_str, value, parser): + # type: (Option, str, str, OptionParser) -> None + existing = _get_format_control(parser.values, option) + FormatControl.handle_mutual_excludes( + value, existing.only_binary, existing.no_binary, + ) + + +def no_binary(): + # type: () -> 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, or one or " + "more package names with commas between them. Note that some " + "packages are tricky to compile and may fail to install when " + "this option is used on them.", + ) + + +def only_binary(): + # type: () -> 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.", + ) + + +platform = partial( + Option, + '--platform', + dest='platform', + metavar='platform', + default=None, + help=("Only use wheels compatible with . " + "Defaults to the platform of the running system."), +) # type: Callable[..., Option] + + +python_version = partial( + Option, + '--python-version', + dest='python_version', + metavar='python_version', + default=None, + help=("Only use wheels compatible with Python " + "interpreter version . If not specified, then the " + "current system interpreter minor version is used. A major " + "version (e.g. '2') can be specified to match all " + "minor revs of that major version. A minor version " + "(e.g. '34') can also be specified."), +) # type: Callable[..., Option] + + +implementation = partial( + Option, + '--implementation', + dest='implementation', + metavar='implementation', + default=None, + help=("Only use wheels compatible with Python " + "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."), +) # type: Callable[..., Option] + + +abi = partial( + Option, + '--abi', + dest='abi', + metavar='abi', + default=None, + help=("Only use wheels compatible with Python " + "abi , e.g. 'pypy_41'. If not specified, then the " + "current interpreter abi tag is used. Generally " + "you will need to specify --implementation, " + "--platform, and --python-version when using " + "this option."), +) # type: Callable[..., Option] + + +def prefer_binary(): + # type: () -> Option + return Option( + "--prefer-binary", + dest="prefer_binary", + action="store_true", + default=False, + help="Prefer older binary packages over newer source packages." + ) + + +cache_dir = partial( + Option, + "--cache-dir", + dest="cache_dir", + default=USER_CACHE_DIR, + metavar="dir", + help="Store the cache data in ." +) # type: Callable[..., Option] + + +def no_cache_dir_callback(option, opt, value, parser): + """ + 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 = partial( + Option, + "--no-cache-dir", + dest="cache_dir", + action="callback", + callback=no_cache_dir_callback, + help="Disable the cache.", +) # type: Callable[..., Option] + +no_deps = partial( + Option, + '--no-deps', '--no-dependencies', + dest='ignore_dependencies', + action='store_true', + default=False, + help="Don't install package dependencies.", +) # type: Callable[..., Option] + +build_dir = partial( + Option, + '-b', '--build', '--build-dir', '--build-directory', + dest='build_dir', + metavar='dir', + help='Directory to unpack packages into and build in. Note that ' + 'an initial build still takes place in a temporary directory. ' + 'The location of temporary directories can be controlled by setting ' + 'the TMPDIR environment variable (TEMP on Windows) appropriately. ' + 'When passed, build directories are not cleaned in case of failures.' +) # type: Callable[..., Option] + +ignore_requires_python = partial( + Option, + '--ignore-requires-python', + dest='ignore_requires_python', + action='store_true', + help='Ignore the Requires-Python information.' +) # type: Callable[..., Option] + +no_build_isolation = 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.' +) # type: Callable[..., Option] + + +def no_use_pep517_callback(option, opt, value, parser): + """ + Process a value provided for the --no-use-pep517 option. + + This is an optparse.Option callback for the no_use_pep517 option. + """ + # Since --no-use-pep517 doesn't accept arguments, the value argument + # will be None if --no-use-pep517 is passed via the command-line. + # However, the value can be non-None if the option is triggered e.g. + # by an environment variable, for example "PIP_NO_USE_PEP517=true". + if value is not None: + msg = """A value was passed for --no-use-pep517, + probably using either the PIP_NO_USE_PEP517 environment variable + or the "no-use-pep517" config file option. Use an appropriate value + of the PIP_USE_PEP517 environment variable or the "use-pep517" + config file option instead. + """ + raise_option_error(parser, option=option, msg=msg) + + # Otherwise, --no-use-pep517 was passed via the command-line. + parser.values.use_pep517 = False + + +use_pep517 = partial( + Option, + '--use-pep517', + dest='use_pep517', + action='store_true', + default=None, + help='Use PEP 517 for building source distributions ' + '(use --no-use-pep517 to force legacy behaviour).' +) # type: Any + +no_use_pep517 = partial( + Option, + '--no-use-pep517', + dest='use_pep517', + action='callback', + callback=no_use_pep517_callback, + default=None, + help=SUPPRESS_HELP +) # type: Any + +install_options = partial( + Option, + '--install-option', + dest='install_options', + action='append', + metavar='options', + help="Extra arguments to be supplied to the setup.py install " + "command (use like --install-option=\"--install-scripts=/usr/local/" + "bin\"). Use multiple --install-option options to pass multiple " + "options to setup.py install. If you are using an option with a " + "directory path, be sure to use absolute path.", +) # type: Callable[..., Option] + +global_options = partial( + Option, + '--global-option', + dest='global_options', + action='append', + metavar='options', + help="Extra global options to be supplied to the setup.py " + "call before the install command.", +) # type: Callable[..., Option] + +no_clean = partial( + Option, + '--no-clean', + action='store_true', + default=False, + help="Don't clean up build directories." +) # type: Callable[..., Option] + +pre = partial( + Option, + '--pre', + action='store_true', + default=False, + help="Include pre-release and development versions. By default, " + "pip only finds stable versions.", +) # type: Callable[..., Option] + +disable_pip_version_check = 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.", +) # type: Callable[..., Option] + + +# Deprecated, Remove later +always_unzip = partial( + Option, + '-Z', '--always-unzip', + dest='always_unzip', + action='store_true', + help=SUPPRESS_HELP, +) # type: Callable[..., Option] + + +def _merge_hash(option, opt_str, value, parser): + # type: (Option, str, str, 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('Arguments to %s must be a hash name ' + 'followed by a value, like --hash=sha256:abcde...' % + opt_str) + if algo not in STRONG_HASHES: + parser.error('Allowed hash algorithms for %s are %s.' % + (opt_str, ', '.join(STRONG_HASHES))) + parser.values.hashes.setdefault(algo, []).append(digest) + + +hash = partial( + Option, + '--hash', + # Hash values eventually end up in InstallRequirement.hashes due to + # __dict__ copying in process_line(). + dest='hashes', + action='callback', + callback=_merge_hash, + type='string', + help="Verify that the package's archive matches this " + 'hash before installing. Example: --hash=sha256:abcdef...', +) # type: Callable[..., Option] + + +require_hashes = 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.', +) # type: Callable[..., Option] + + +########## +# groups # +########## + +general_group = { + 'name': 'General Options', + 'options': [ + help_, + isolated_mode, + require_virtualenv, + verbose, + version, + quiet, + log, + no_input, + proxy, + retries, + timeout, + skip_requirements_regex, + exists_action, + trusted_host, + cert, + client_cert, + cache_dir, + no_cache, + disable_pip_version_check, + no_color, + ] +} # type: Dict[str, Any] + +index_group = { + 'name': 'Package Index Options', + 'options': [ + index_url, + extra_index_url, + no_index, + find_links, + ] +} # type: Dict[str, Any] diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/cli/main_parser.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/cli/main_parser.py new file mode 100644 index 00000000..767f35d5 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/cli/main_parser.py @@ -0,0 +1,104 @@ +"""A single place for constructing and exposing the main parser +""" + +import os +import sys + +from pip import __version__ +from pip._internal.cli import cmdoptions +from pip._internal.cli.parser import ( + ConfigOptionParser, UpdatingDefaultsHelpFormatter, +) +from pip._internal.commands import ( + commands_dict, get_similar_commands, get_summaries, +) +from pip._internal.exceptions import CommandError +from pip._internal.utils.misc import get_prog +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from typing import Tuple, List + + +__all__ = ["create_main_parser", "parse_command"] + + +def create_main_parser(): + # type: () -> ConfigOptionParser + """Creates and returns the main parser for pip's CLI + """ + + parser_kw = { + 'usage': '\n%prog [options]', + 'add_help_option': False, + 'formatter': UpdatingDefaultsHelpFormatter(), + 'name': 'global', + 'prog': get_prog(), + } + + parser = ConfigOptionParser(**parser_kw) + parser.disable_interspersed_args() + + pip_pkg_dir = os.path.abspath(os.path.join( + os.path.dirname(__file__), "..", "..", + )) + parser.version = 'pip %s from %s (python %s)' % ( + __version__, pip_pkg_dir, sys.version[:3], + ) + + # 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 + command_summaries = get_summaries() + description = [''] + ['%-27s %s' % (i, j) for i, j in command_summaries] + parser.description = '\n'.join(description) + + return parser + + +def parse_command(args): + # type: (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) + + # --version + if general_options.version: + sys.stdout.write(parser.version) # type: ignore + 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 = ['unknown command "%s"' % cmd_name] + if guess: + msg.append('maybe you meant "%s"' % 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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/cli/parser.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/cli/parser.py new file mode 100644 index 00000000..e1eaac42 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/cli/parser.py @@ -0,0 +1,261 @@ +"""Base option parser setup""" +from __future__ import absolute_import + +import logging +import optparse +import sys +import textwrap +from distutils.util import strtobool + +from pip._vendor.six import string_types + +from pip._internal.cli.status_codes import UNKNOWN_ERROR +from pip._internal.configuration import Configuration, ConfigurationError +from pip._internal.utils.compat import get_terminal_size + +logger = logging.getLogger(__name__) + + +class PrettyHelpFormatter(optparse.IndentedHelpFormatter): + """A prettier/less verbose help formatter for optparse.""" + + def __init__(self, *args, **kwargs): + # help position must be aligned with __init__.parseopts.description + kwargs['max_help_position'] = 30 + kwargs['indent_increment'] = 1 + kwargs['width'] = get_terminal_size()[0] - 2 + optparse.IndentedHelpFormatter.__init__(self, *args, **kwargs) + + def format_option_strings(self, option): + return self._format_option_strings(option, ' <%s>', ', ') + + def _format_option_strings(self, option, mvarfmt=' <%s>', optsep=', '): + """ + Return a comma-separated list of option strings and metavars. + + :param option: tuple of (short opt, long opt), e.g: ('-f', '--format') + :param mvarfmt: metavar format string - evaluated as mvarfmt % metavar + :param optsep: separator + """ + opts = [] + + if option._short_opts: + opts.append(option._short_opts[0]) + if option._long_opts: + opts.append(option._long_opts[0]) + if len(opts) > 1: + opts.insert(1, optsep) + + if option.takes_value(): + metavar = option.metavar or option.dest.lower() + opts.append(mvarfmt % metavar.lower()) + + return ''.join(opts) + + def format_heading(self, heading): + if heading == 'Options': + return '' + return heading + ':\n' + + def format_usage(self, usage): + """ + Ensure there is only one newline between usage and the first heading + if there is no description. + """ + msg = '\nUsage: %s\n' % self.indent_lines(textwrap.dedent(usage), " ") + return msg + + def format_description(self, description): + # leave full control over description to us + if description: + if hasattr(self.parser, 'main'): + label = 'Commands' + else: + label = '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 = '%s:\n%s\n' % (label, description) + return description + else: + return '' + + def format_epilog(self, epilog): + # leave full control over epilog to us + if epilog: + return epilog + else: + return '' + + def indent_lines(self, text, indent): + 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. + """ + + def expand_default(self, option): + if self.parser is not None: + self.parser._update_defaults(self.parser.defaults) + return optparse.IndentedHelpFormatter.expand_default(self, option) + + +class CustomOptionParser(optparse.OptionParser): + + def insert_option_group(self, idx, *args, **kwargs): + """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): + """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, **kwargs): + self.name = kwargs.pop('name') + + isolated = kwargs.pop("isolated", False) + self.config = Configuration(isolated) + + assert self.name + optparse.OptionParser.__init__(self, *args, **kwargs) + + def check_default(self, option, key, val): + try: + return option.check_value(key, val) + except optparse.OptionValueError as exc: + print("An error occurred during configuration: %s" % exc) + sys.exit(3) + + def _get_ordered_configuration_items(self): + # Configuration gives keys in an unordered manner. Order them. + override_order = ["global", self.name, ":env:"] + + # Pool the options into different groups + section_items = {name: [] for name in override_order} + for section_key, val in self.config.items(): + # ignore empty values + if not val: + logger.debug( + "Ignoring configuration key '%s' as it's value is empty.", + section_key + ) + continue + + section, key = section_key.split(".", 1) + if section in override_order: + section_items[section].append((key, val)) + + # Yield each group in their override order + for section in override_order: + for key, val in section_items[section]: + yield key, val + + def _update_defaults(self, defaults): + """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 + + if option.action in ('store_true', 'store_false', 'count'): + try: + val = strtobool(val) + except ValueError: + error_msg = invalid_config_error_message( + option.action, key, val + ) + self.error(error_msg) + + elif option.action == 'append': + val = val.split() + val = [self.check_default(option, key, v) for v in val] + elif option.action == 'callback': + 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): + """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(): + default = defaults.get(option.dest) + if isinstance(default, string_types): + opt_str = option.get_opt_string() + defaults[option.dest] = option.check_value(opt_str, default) + return optparse.Values(defaults) + + def error(self, msg): + self.print_usage(sys.stderr) + self.exit(UNKNOWN_ERROR, "%s\n" % msg) + + +def invalid_config_error_message(action, key, val): + """Returns a better error message when invalid configuration option + is provided.""" + if action in ('store_true', 'store_false'): + return ("{0} is not a valid value for {1} option, " + "please specify a boolean value like yes/no, " + "true/false or 1/0 instead.").format(val, key) + + return ("{0} is not a valid value for {1} option, " + "please specify a numerical value like 1/0 " + "instead.").format(val, key) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/cli/status_codes.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/cli/status_codes.py new file mode 100644 index 00000000..275360a3 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/cli/status_codes.py @@ -0,0 +1,8 @@ +from __future__ import absolute_import + +SUCCESS = 0 +ERROR = 1 +UNKNOWN_ERROR = 2 +VIRTUALENV_NOT_FOUND = 3 +PREVIOUS_BUILD_DIR_ERROR = 4 +NO_MATCHES_FOUND = 23 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/__init__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/__init__.py new file mode 100644 index 00000000..2e90db34 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/__init__.py @@ -0,0 +1,79 @@ +""" +Package containing all pip commands +""" +from __future__ import absolute_import + +from pip._internal.commands.completion import CompletionCommand +from pip._internal.commands.configuration import ConfigurationCommand +from pip._internal.commands.download import DownloadCommand +from pip._internal.commands.freeze import FreezeCommand +from pip._internal.commands.hash import HashCommand +from pip._internal.commands.help import HelpCommand +from pip._internal.commands.list import ListCommand +from pip._internal.commands.check import CheckCommand +from pip._internal.commands.search import SearchCommand +from pip._internal.commands.show import ShowCommand +from pip._internal.commands.install import InstallCommand +from pip._internal.commands.uninstall import UninstallCommand +from pip._internal.commands.wheel import WheelCommand + +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from typing import List, Type + from pip._internal.cli.base_command import Command + +commands_order = [ + InstallCommand, + DownloadCommand, + UninstallCommand, + FreezeCommand, + ListCommand, + ShowCommand, + CheckCommand, + ConfigurationCommand, + SearchCommand, + WheelCommand, + HashCommand, + CompletionCommand, + HelpCommand, +] # type: List[Type[Command]] + +commands_dict = {c.name: c for c in commands_order} + + +def get_summaries(ordered=True): + """Yields sorted (command name, command summary) tuples.""" + + if ordered: + cmditems = _sort_commands(commands_dict, commands_order) + else: + cmditems = commands_dict.items() + + for name, command_class in cmditems: + yield (name, command_class.summary) + + +def get_similar_commands(name): + """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 False + + +def _sort_commands(cmddict, order): + def keyfn(key): + try: + return order.index(key[1]) + except ValueError: + # unordered items should come last + return 0xff + + return sorted(cmddict.items(), key=keyfn) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..255d9ae31a7321676b792a26a9465324e0b197e8 GIT binary patch literal 2451 zcmaJ@OK;mo5Z)!JM`VeX9mVlOc9d5e6}23+Xn_`iQ9ya3tq|0CG(-Y|=B_N-yQH#9 z!LcEqY@ogL)L+p{`*#Xnd&*zPrJY$zmJ>uJG0U0R*~ff4Gs`b4mD0;UTd)2q67ml@ z_f&xY4oF|4gfQX}Mwun3v^t5aPRk149yfsSrn)(~|Iw!8khS!i+y{o2wUR;ycz3b4w$cucLmw1&g@Ohr+ zHD2ds?r?Xf;@w~uS?z@I8+XYu^=`6Nw!ki*Q127A$d*os_bFRuEAYL=>RY6_c6hV& zI0*NG9o`6&I1QpWigy};5RHD+2bGjT%yj83V%((JY_P2pF-W-|$$p|zP|dXy*%v&G zk{CEN2W73D#NB9Tpn~`Hvv-sISR?_Pm{#s9&JX!SG4n9cz4Ia${d3|EkxnOKx!vR8 z-bAi!@j!*=hi~nQR@4x z{=vJ_9TtTtboDns!(HH(@uB`HmK_pb|kBeIUk+K+%qvzjH@gcrCjQ)FrLcE3Z{dztQbmW zdetRx=WHTB6oJ+gc-5lm-QlT!I!VO!I)YGwhS&}*TSd#I>KaIAXdzNaZ6N(MG^WB3 zNslN6{xSxzMTT&Wf0ojrb_o3`=$wAVcyJ_heY z?`y{UNJb)1XV8BGQ|U4^#4-?A4lP>h7RVt+5IzXOIB;|wgkMOPA`~aZBP&H9=rIAO z?cXeL*6Ez#hn~#$ zq}j|0zR!}-_p_4kcL(V}ao<;nt#=htyLFbT}v)WXD zg#k8oAq^LT!szzarYtnN4;21Qcz6+h>_7(NYeTtcHf_`Uc$27EG+BOsra>AB-AWJo zaO0{f7-ad8Fb9H~#~~l?P(-cm0II<#EEHyu!t^ugZz`3^Qxj|Fa@|}hCKHNxWWol5 iZ( literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/__pycache__/check.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/__pycache__/check.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1383a629cb1820e75439ab95975280c4e77267f4 GIT binary patch literal 1276 zcmZ8hPmkL~6rZujf8r#lK&hw%l|k(x73-~_5)xFX>LPJLd#S`q!>%mHGfBK_dz=}& zY$E#EX0uCRl=t%U^Sn2|_hWi^{Q`rUlR^Q*MU@~dpgQ^i~TNiKQT@;2O@!%8D9(Viv0eGtWVJ!zy^#y^UtEkvy@au*1hH3b=goPel5LA7Xy z&Yi&>NQ--ShXH$ofBmBOzC{<$hoE=+;32wnhVc4v?->mC4~J3fUJ{1;pbz^Ia~`4{ z!D#*b46Q#pL)Wi*A9j89AMdBVzxRH0?her~9ws&h#D^G@KI+FiA7V&|LC;X{sb6~^ zgvj3*d5!E|Z--5*O#@H2PoJn5ev+@dLUMyYi+@@b`6@0{T#NSK8YU7$rrV<%hgEjx zRPnmCe)F!4H=?_#vE7!uwLTx8ig+%?6|Zj(GCnF^h^}VI%#&s^rKzqC-f*d)+S)J0 za>=D8MZFNSsV0h-3mxoxp-Co}ijEJ)j82;jT#RJ6IWxCH9ow-=nvHg4SDPs6Q&0#;c;ZB$-@ybs_{XNsr$l%=`E|KB7UF5%k2 zRZ46@Y{zZy^=Qf4?`^~72jD5q?XqVc@H2IjhNKQ(++_WYnJ#6T7&;Stk3{Z2dg5Ik literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/__pycache__/completion.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/__pycache__/completion.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c19b2cce44091d063129cd483047c3c6a4831a40 GIT binary patch literal 3025 zcmai0-ESL35a0W><2d~SN+};&LXdn&=Qey*SPWxpc)P2y^mWzHr$r*_CZLZ={ z6x)OE8=ufJE$OE%xx=$8khD|u%Z#hE$f;C`P+;kZv{Zq7!%UvDMsmR-q(R5O7^240 zSgqjD^6R05QFyt{Io=JYVL=)1CRL_r_$_^H zrvN1)8%X1q+&&6Qx5_&P+1GuJVv-e|B%^zUU~m|CJ4}F5!4pQqTb+^lgrSq4;!$SL zPr=s22UO1lbqe9qLaQ~38v-=JS%{vBrgCROGmfYp z!Gu!D;e@hhM_5H$aEe$3S(@WP26TS@Y!|~O+B#*&{Y33xtXw5&E@_z3Fnlex3h0Q3 zhRy+CcbvXciXnj~sh&WQE*{TMi8SA)vdmINA5*g|e+q;-veu);&1rBf%}J$98Qe|i zd@DW)UocO@&T$F{j&`>axucx{3@#$x!8SAbIb%V72?8gP#R#-B3tE{Sxy*??=0^TY z(zTe!{1^48hE41RiRv$jOQIQQTQmCN@?qBj3D0Nn#VraQspJAX5^AU_=oY7y{Fc z&t(>~nZsP%8>{{1gAKLNq(R#N?d%b4lg)wl9B9vvwWR0ue0E{z9N5_I0gH?G2YwhL z-UB<_(z8+(f&;^Ise}i~XwNk2!G|k-Ai#9HATn-nLEpgDeqvgU_KdG~8J9}C26tk0WQmk< z{3rSMn`^3HUV{b@ZdGZISr_HEa4E!+I-Ae}1PgR9GjVL(ErwkO-|OlkvR#?xDdO9~hi=~)M4-$DMoAj$>? zSa-;QweJqC9x&^PFMd&O&x3hBY8WttxvF+RQtL9#^Hg2U3_WA>UfHO#NPby0db7PI za{P-iXC8VNub3B^51!81z%w7`POA#r@!% zzBGQv-(9^QZ!E9hU3;*h-6#CHgh=p-#F>et>xw^9dm<^d&p6|`(hhtr2?RiUB?73= z-@di6GWleHaN3b3ief-`?d^$FaqaesG!J}n869gQMoaN7KKTY;sprgn%yua#*j@un zJAlI)=p}NV*mdiY)c_(kt#i(0+qVYqoQhn~z>>?8K8KQP#Bsl1Rfcjij(4jh8(V5| z%!&@ET~z3rtbo4adGuDgonzM#e78#B4wQIm%0pa-B=p?4?m9q{IG$!4SmHgf3p{C4 z_c&WNVHi~pRFK`gYAnGlrq!)f1>s|XG!Ov}3ot|$Tm<(l#_T?1HAe1Xfja z<@lsZrI~E^Qy>K%m1yDcF%H;)rb$l8sOvXIxZK2!WdLphz;(N6HC=bshJW4t4+$+E ARsaA1 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/__pycache__/configuration.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/__pycache__/configuration.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..eec33a47654f43f3a2e50afe67e23365f3a97e51 GIT binary patch literal 6873 zcmb7JO>^7E8O8!2_#x`Ul43i~G)5EKH4}?=?4;v(9Jh(AI(Ah#wd^K=qrpI2kOBn) z^a7MEgvuduCntB>ODEH5Z@u)=OHV!Z)KmY#9@|rXKrcD+hq5f(a@ zV|9v7Q9YYssZ(~!or+UY&xLTRQ+2AUZ-vvH8E2+5>&&X>VmQ}1<{VS~QaImPa2A;6 zYwbn`hy%FATZ__Tz5=v zI0bGx))!in@dCG=mYgCl^3qeyDdmhhWj@8Lc&_kiK7;!dpXGD7SNSnMkNY%V;ETA= z@E7=T+-La-eiHXN{vtnx`>`)HQ*-7arkCX6m;?s0^4``p?H69;wR}5_8(wHbfOad4 zH_^@c9f+)6sn~0Hy<`6rq7v7NATVA*8M8Yw790$|lo??#Goo zc^YYwG;NP-dh%qY{{yPox#x3}1{?T1`F;`CEUx4aXi_a@eQjTF>wVVOf5Rxu^)=V% zYi+Y#;Ee0sKmav);aP#x*!$@`l?(=%hlqUC+R9X}-5SWVt1C!>KA9iV1x%bGa z{H~&}tf;NIsp$DX%U;I@)OM2HB=tK>k3o5o-^5Y4n_0PA$}(BEB9@&QuBV}ITS%@e z%PJL+d1qIK3mZKl$XO5bJRxiiH?Tt~rA%$UfsY^F^oOZrgT$%0c}}7f3x^S8Yyzr^ogvON|b9;j)RWcwF^JAy(HDkc(Uh5C}y|6EN(y zMBMAv3~45Q*p#LxT8Xr_AJZM#u9FTbuEv z%bbSPh5e+yh`jLPFs-0-C|lRNyW$kKzJx1z4~@p=bxXIHp8xbxVbo_O<2(D9pZ#F@ z@D~Qzus#$`W0<(ffnUb8j4QDqO}GtRaAdf#)>h8T*&hpgMqjUL$%Veo^%u3iv0W5* z(n8zf2As`om(p_I*k}2VX=!C$%V+MHyT?Ii3L(Md)oqKHpXqyr54Gr$sioEJiujUg zd-!m+NYwgPdz$F)BX|%Ej(49~A8C>Pk(SQ%S$no$;FV|CnL7unbM0gM8q;=9^^LxX zT_NlMP-wp<3UGaV<#PU&-!g%D&-opK6Vq$8f;1_tOOwKZG!TNNfdDHDDsU>x%TBNP zNL0wxxp&*=Ki#WQ1c5O&W6`N+`UP8@hipZSn%AiL5gLM55th0tPy?Ekf+P+pk;`%z zdoWHI_gBie&57$5

c#U!TaC80igW<_D{A*@L|S3oYQgji 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 AYXATM literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/__pycache__/freeze.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/__pycache__/freeze.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..920b163bb5849eb4ad57e7d507f3b384bd4133e7 GIT binary patch literal 2813 zcmb7G&5qkf66T*oijro=Gxpf)Bo2{<7f~?OIN8f4FoF&2BnWol1j%~6;Km>*c1xnB z`Qz@UXNJ(6WFRN!khj>&KEUpq@S0OzA*XyzN;4YYBB5Kws%CZld{w1C4~Ope{~bU7 z|3K4z*0w$t=)Yo#0vpkY&a_kybY0N~GXev@CNonjuo|AlI%zlPHgt#CsS`L2-DSPh z4cvydSw9^F1JDlX5tsDmRxtchBLgygrI8`+uFPPE7~g55onLUPHqz_eXd-e}N*X3< zk#qS3Jonk0QuZi{=M+!&qdZNcjDQ?|k@GZ?kMd0NoPp7ua!M<8sxKsA$s{aJW}-HW zq^Mm%Wm(8PXQFmVA|y{HxTo%%D($hlfAcZdg!l^xss%dH;J+T2#0V^61|4DrUE&7z z586~GU1Gn2_sYjtTG0DJv$Vj4Pkq?en6oyxI&(dIzAj}^N-xQTj2NTDE28)$no$9k z$LWhQ;WVY06yCJ)ZtOO%U7m_K^%%^@n|LAe;z&>*+Gr*cnY^T)K-eJ6IiY;qyvw`r zqdIJ8&%0mneCGW-FJzKu;(7Jq@3!dIJ$fcTIX)KWVvIOb&SQNYG8MWW)-IO#A2z8; zeW|UCg|XC^#*YBhQd^h{i|E84Cb4E3>8KFCwl5_uSd^p>sBBAyWQXjMJ#vHWlY`d) z-&)sAa;xDUg4?;|-X?dz{R6qX=*aF$Kh(%uuL0imJ8zSBAia0Vvlk9|SIJg}0xuHi zJ*fM%t&D7$w2M~J+@*D%u zO~Qf1%$w1S@<=Ax%*z|7jJN#SG|7n1lI#Qpq3E!s&8Oe~y?TgE0nk$dWy=PC zN8af?iRa#F!k987A_SJmymh-Z7#Fb0_I;Me5vx1xk1J%(X()L~zo?#mHEq%RGU2j} z7|mWnK_tC-B)l2RClT|aIHp1zc_jC;T&{z$7P4~%`8Nt^JhJ!=K#uRL?Lcj}uvJ~( zN4Vg;+N-0lGj_hww($zaY_uV1>YR^iqT{OL`>0aHr>W!+banK&HAtK!h4LCH-%_&` zhflowqB4%Wk-247W6{3v)3cbBg!+^uGMX@2qox{8xZzayKW{nShO@cHoANx}po6Q@ z8};grC<{~~`npy-VVGoz48z)qQxXC?NHH>{C%(K27RTtZ{-jJ8@gKaH zPx1#J5yfg2jFFUQ5j$2;2kgah8_#iZ&hNqCyIA50Hcj6*y1Jzs>#t*8d)ksYpf6A9 zSM=T`?HJYJwFW%iL?zxdcn3H3u^wTGpRlQJwQAPNxG*Jp*1}w(BV1Tgm)1(Z=z!A^ zA1ynJuC!O^X3_zthvj1Ru?AQ}tevH`RHt`|{O-Pwq{%W%oz@vG)Atg)MI^ z_7?|Bn;5q>rRl}|nf45wXK5{Nt~6cySKEcmCrEC8tLgAV7+SkcRfRdgT=x`UThdji z3^|?Av)V~8N+ZmIy5G#WFjgZJ*~Ah4wo;tFY9)=2S=$&TTyNw-mEm z76h93d+Na=Ni6w}5-L;p9kroAHr zimtX}MxzYKbNGFw)n1P({wMXc(~iY3Zl^wfpmcqxB*S%)o}4yFwb0HeA1QIOeW1>m zyv)7=A(Spn-_ZxU1H`z70n}Z66|!8@(D(E^Ms?#lilAX+@F8ArHq3dHTNb4h<>rRU z!ICL@5QZ<%+SU>~3`rh?Z7D|GDFtSJZHp2G!O!bH%V#0}lh7y?O-b<2a6vs>*I7&% z3&SgCMmm3A8K8V>N?v6{sLkoX3#0MG7#ugU(XO&J@^bOrBTKbfOZVZ!0x$GA;dgN5Mk t^;4xxpbj?{k!+!;(ARi$6^O0WIuF~>f2tay*uyq39AkhCH(z65{s!x?Cz${M literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/__pycache__/hash.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/__pycache__/hash.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8762cb006b2016a033f0a973306f00ef54c339a3 GIT binary patch literal 2015 zcmZ`(TaOzx6t+FrOp@KDt*Wxzrk4dGHQ7R6P*p0bwsb*gE3zw!1}bYZc9Kcwwzj92 zD9cMK^@$>W1~2>|zw*Ri;ECf&c3Tj5A(W7wd7 z0aN}2f+2=8l;a3vqmzt8r1@Ks)%@+qhQF0Lxf{8Sjh%V9ANh^$WUV}ig1jBIo3)#D z@@~|{h+DG_zPZHF)_uf0=D$G9=kC&q-eN5lyg<1zc%n(G1AxZ)fT9L!-$YoCCy+mWoT;{!i7@5yn;A`t8vQZR( zzkzP=#d5lKZ2l?;VZf>a&%-#J!dY03LCeY{&cZ5A9>)_n5y>=t!UsWPe>mlmhe=$7 zBOcb0v+!xEreVL|Tu%$QF8EQM3ZC;q$#9%zJXB@KO4zS>tm09|o0rl;syNH!`eALG z7v|eLl_)3S4`rp&vXGC$o92aE;b1VBUp{fxSaNBc{g;z+aG2mVSO&BJ<|a(}H3)?i zUZ5qJkp*6mSCBLdG_z(l!;COX0f-7fWbVvU&Jv#o>VNhc8-LbfzOh{rlPCaXYkyAq z@x0yd$JwM5fIzNWuT@8?Qt5+i~P`eS91vmch$T_(h_8e_9E|vC@X_+Qm zYBx?y{MuuD9M_owba++?6C3d8$hzV}_^{GGrD>5WO0}Qli~?>_2Qh0jctJn~A>kNH zdse1}cB@!OF7#Qzp9^I!fEk^LvaWiTwk6NT+K$CUYV!CgWMzxeB#Wh_^f&a^ja`*j zyH#5CM|GO9{; zw}t2D_P}(VpM#UQ5<{dJCI}Pq9hmYihy{`7ffh8wiU2u4sIm{x0?(Xd>)E9Rxr-ic z9|Nf~kKu*Au#|7)k}PeEjxIf1QAzgaTRZYbu*%@iLEVwPmN*aZ>vkm|99m1L18vFY zz>8E2kQb&836ovg&C1CH@U+unTueTppI)=8SWSh2V(yq4cPZv-OEbDJv7$ zw#|liRi4_|Q1iU2~uCETi^0vTSCU#=b#g-u;9F;KUytOZ$Opl{24n(}9>+rZrpoUBOp)=f~fjIqxCs;q1Bmzpg!WAKq{T#h0ITSIsG`AX1r3rc9gJeh>AIAJ^*=_? zNL4Mt44O!jn$h+@U#e9Kjn;$>28M>FEkqao%PLQ0vI3Aq_3woSCT zkp3Ai{2*UB@fSET-XtiXdNs4-u|57gW53+ka6kX(e0gmk^b@T#=%Z5*@dgw{6vrsR zKE}${VlB~qy|(q(NKD_XZ6mf4+qW@#i>OJh2ShEV&vf6Rb|1B!Ul0kkvD^vxv%L$!L@G%!v<#B)##`IsVKquAG}<{MP^ zO=|cSHGP{})P6uf-~hpzTt8=VzKA+$^{=u!?+QHLWyZbX96?A!xh5^wtJ^`&v(P(U zjGjz(9$(dYKh%LmwKb4+kRFJ507WsR4AM8%6K!f>G;UM?yN9OcN0c@VROr_(Kf*|T zh0#Z!P-Ry7waw$osLUCjT2!yh77Fpyt}OnwvPW>h%4(q*6r_NIj_k^w;TishE10>5 zW@zeE&d3?9%@#4+)&jsXE3ei&AOj0T+x*H|G$Fs9Heb48h_{X=iy6Whs;>;GtLv>Vxu%o%yz?<48{9SFbbq-5<^UKtMRTqHokeZGV=@OD;w2T?p4MJ|p zAXePavk9Tu5Da5}kWvI8leQ?~W$>~8Bns1vGs4+T8NvUSrMG++Sn9K_s2%0AK&iZo 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/__pycache__/uninstall.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/__pycache__/uninstall.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6b1b663150596cda877428d5bf5dda731bf64918 GIT binary patch literal 2647 zcmZuz-ESL35a0Xo-Py6zCV{A^sH_Tw8sSS6c⪚Xb~V#1(XsvT3s%;>v)~}%I;o1 zEawGR>QmqW{t2XtzlG;}g%|z>o|s*q9XIss9nH<`&d$#KX7=9ibXt%9@Sps;gwS7T z;jw}L2!UrGH>I)HSLr(VobYQqqv6Mb0INR^lkjGZse) z8__U}QVK%%UY@2=MwI^ZOvornBFXaX6V7uE!qp<;f`*(PmWSFkRW_ZfUN-h!7^d*MY?j*4JLDqDqnG`w&dss_sey-0ZiC;;HF zOpEu~5zX+TDSdh$<8KFmziAvXlqVz`mjV{1Wg=OjV98Q|YqwF^gbE2B#0qznOK3lW zIhCtGaTM{&9?+zKBb<&Jz1}Gmm8D2a$ehzq@{*3W?&sM%5=Y_y_j8WpJnJ)_>cYf% ze*yi3CRC%_?^=8rLe5q2`Klr+EnT;2h!U{GRbnbH3|Yox7*<}Kk`PV<`$j}_%2!9X z5MHeTGAWm8g6akPJTHr`RoQ|j{mPE`zNpNDV`w7HFpQH(h%o#e{rlmDOp6Vu)ZSjn z64Ki|9PH(rTSSTUfX$&4vMAYzr>#tE%n=L4#n-{d*I@`nkg;kwhHaSj&$DK4o;iAL zp3u65__LG6vks*W+<|cqhWHx@U@1rMgpEUrbjj=I=K6Y-N zIb&yN@%6DYwxzB3iLs3i*LTp#9hlRA6`N=7$-B}SyMSuwd*>F&uGQ-vUt0Hg2OWO4 zgT}V_O}fOAo+lQhQmfkT{gsE(7Zu{~@}koHRXu>?D|VMT|y2R8A* zJ8$gq=VNcUJV6FJe7=KrpeDXX-=OcOwb6V4S@9TLC=sB#YgTSu`jsoF5RlE$mp|ks zpcdMu0y~D51lyT_egw{!N?oY26fPk-WSDm}yhMqBN0Dhb>e=ma1mAVsf^$`|advVgm z<*gGQth}g(1Zgx}wheM0uqL3D#?VuRM%888+BH9ABGw4fN4to}LR!7;Y0U4cekxRt MZJY3eOzNNYAIB~K-v9sr literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/__pycache__/wheel.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/__pycache__/wheel.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..67ab55467983951e462546355002f0ca483a112e GIT binary patch literal 4950 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 hB`>b&lD9VQ7q0MtE] list + %prog [] [--editor ] edit + + %prog [] get name + %prog [] set name value + %prog [] unset name + """ + + summary = "Manage local and global configuration." + + def __init__(self, *args, **kwargs): + super(ConfigurationCommand, self).__init__(*args, **kwargs) + + self.configuration = 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.cmd_opts.add_option( + '--venv', + dest='venv_file', + action='store_true', + default=False, + help=( + '[Deprecated] Use the current environment configuration ' + 'file in a virtual environment only' + ) + ) + + self.parser.insert_option_group(0, self.cmd_opts) + + def run(self, options, args): + handlers = { + "list": self.list_values, + "edit": self.open_in_editor, + "get": self.get_name, + "set": self.set_name_value, + "unset": self.unset_name + } + + # Determine action + if not args or args[0] not in handlers: + logger.error("Need an action ({}) to perform.".format( + ", ".join(sorted(handlers))) + ) + 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: + handlers[action](options, args[1:]) + except PipError as e: + logger.error(e.args[0]) + return ERROR + + return SUCCESS + + def _determine_file(self, options, need_value): + # Convert legacy venv_file option to site_file or error + if options.venv_file and not options.site_file: + if running_under_virtualenv(): + options.site_file = True + deprecated( + "The --venv option has been deprecated.", + replacement="--site", + gone_in="19.3", + ) + else: + raise PipError( + "Legacy --venv option requires a virtual environment. " + "Use --site instead." + ) + + 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 os.path.exists(site_config_file): + 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, args): + self._get_n_args(args, "list", n=0) + + for key, value in sorted(self.configuration.items()): + logger.info("%s=%r", key, value) + + def get_name(self, options, args): + key = self._get_n_args(args, "get [name]", n=1) + value = self.configuration.get_value(key) + + logger.info("%s", value) + + def set_name_value(self, options, args): + 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, args): + key = self._get_n_args(args, "unset [name]", n=1) + self.configuration.unset_value(key) + + self._save_configuration() + + def open_in_editor(self, options, args): + editor = self._determine_editor(options) + + fname = self.configuration.get_file_to_edit() + if fname is None: + raise PipError("Could not determine appropriate file.") + + try: + subprocess.check_call([editor, fname]) + except subprocess.CalledProcessError as e: + raise PipError( + "Editor Subprocess exited with exit code {}" + .format(e.returncode) + ) + + def _get_n_args(self, args, example, n): + """Helper to make sure the command got the right number of arguments + """ + if len(args) != n: + msg = ( + 'Got unexpected number of arguments, expected {}. ' + '(example: "{} config {}")' + ).format(n, get_prog(), example) + raise PipError(msg) + + if n == 1: + return args[0] + else: + return args + + def _save_configuration(self): + # We successfully ran a modifying command. Need to save the + # configuration. + try: + self.configuration.save() + except Exception: + logger.error( + "Unable to save configuration. Please report this as a bug.", + exc_info=1 + ) + raise PipError("Internal Error.") + + def _determine_editor(self, options): + 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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/download.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/download.py new file mode 100644 index 00000000..a57e4bc4 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/download.py @@ -0,0 +1,176 @@ +from __future__ import absolute_import + +import logging +import os + +from pip._internal.cli import cmdoptions +from pip._internal.cli.base_command import RequirementCommand +from pip._internal.operations.prepare import RequirementPreparer +from pip._internal.req import RequirementSet +from pip._internal.req.req_tracker import RequirementTracker +from pip._internal.resolve import Resolver +from pip._internal.utils.filesystem import check_path_owner +from pip._internal.utils.misc import ensure_dir, normalize_path +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. + """ + name = 'download' + + usage = """ + %prog [options] [package-index-options] ... + %prog [options] -r [package-index-options] ... + %prog [options] ... + %prog [options] ... + %prog [options] ...""" + + summary = 'Download packages.' + + def __init__(self, *args, **kw): + super(DownloadCommand, self).__init__(*args, **kw) + + cmd_opts = self.cmd_opts + + cmd_opts.add_option(cmdoptions.constraints()) + cmd_opts.add_option(cmdoptions.requirements()) + cmd_opts.add_option(cmdoptions.build_dir()) + cmd_opts.add_option(cmdoptions.no_deps()) + cmd_opts.add_option(cmdoptions.global_options()) + cmd_opts.add_option(cmdoptions.no_binary()) + cmd_opts.add_option(cmdoptions.only_binary()) + cmd_opts.add_option(cmdoptions.prefer_binary()) + cmd_opts.add_option(cmdoptions.src()) + cmd_opts.add_option(cmdoptions.pre()) + cmd_opts.add_option(cmdoptions.no_clean()) + cmd_opts.add_option(cmdoptions.require_hashes()) + cmd_opts.add_option(cmdoptions.progress_bar()) + cmd_opts.add_option(cmdoptions.no_build_isolation()) + cmd_opts.add_option(cmdoptions.use_pep517()) + cmd_opts.add_option(cmdoptions.no_use_pep517()) + + cmd_opts.add_option( + '-d', '--dest', '--destination-dir', '--destination-directory', + dest='download_dir', + metavar='dir', + default=os.curdir, + help=("Download packages into

."), + ) + + cmd_opts.add_option(cmdoptions.platform()) + cmd_opts.add_option(cmdoptions.python_version()) + cmd_opts.add_option(cmdoptions.implementation()) + cmd_opts.add_option(cmdoptions.abi()) + + index_opts = cmdoptions.make_option_group( + cmdoptions.index_group, + self.parser, + ) + + self.parser.insert_option_group(0, index_opts) + self.parser.insert_option_group(0, cmd_opts) + + def run(self, options, args): + 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 = [] + + if options.python_version: + python_versions = [options.python_version] + else: + python_versions = None + + cmdoptions.check_dist_restriction(options) + + options.src_dir = os.path.abspath(options.src_dir) + options.download_dir = normalize_path(options.download_dir) + + ensure_dir(options.download_dir) + + with self._build_session(options) as session: + finder = self._build_package_finder( + options=options, + session=session, + platform=options.platform, + python_versions=python_versions, + abi=options.abi, + implementation=options.implementation, + ) + build_delete = (not (options.no_clean or options.build_dir)) + if options.cache_dir and not check_path_owner(options.cache_dir): + logger.warning( + "The directory '%s' or its parent directory is not owned " + "by the current user and caching wheels has been " + "disabled. check the permissions and owner of that " + "directory. If executing pip with sudo, you may want " + "sudo's -H flag.", + options.cache_dir, + ) + options.cache_dir = None + + with RequirementTracker() as req_tracker, TempDirectory( + options.build_dir, delete=build_delete, kind="download" + ) as directory: + + requirement_set = RequirementSet( + require_hashes=options.require_hashes, + ) + self.populate_requirement_set( + requirement_set, + args, + options, + finder, + session, + self.name, + None + ) + + preparer = RequirementPreparer( + build_dir=directory.path, + src_dir=options.src_dir, + download_dir=options.download_dir, + wheel_download_dir=None, + progress_bar=options.progress_bar, + build_isolation=options.build_isolation, + req_tracker=req_tracker, + ) + + resolver = Resolver( + preparer=preparer, + finder=finder, + session=session, + wheel_cache=None, + use_user_site=False, + upgrade_strategy="to-satisfy-only", + force_reinstall=False, + ignore_dependencies=options.ignore_dependencies, + ignore_requires_python=False, + ignore_installed=True, + isolated=options.isolated_mode, + ) + resolver.resolve(requirement_set) + + downloaded = ' '.join([ + req.name for req in requirement_set.successfully_downloaded + ]) + if downloaded: + logger.info('Successfully downloaded %s', downloaded) + + # Clean up + if not options.no_clean: + requirement_set.cleanup_files() + + return requirement_set diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/freeze.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/freeze.py new file mode 100644 index 00000000..dc9c53a6 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/freeze.py @@ -0,0 +1,96 @@ +from __future__ import absolute_import + +import sys + +from pip._internal.cache import WheelCache +from pip._internal.cli.base_command import Command +from pip._internal.models.format_control import FormatControl +from pip._internal.operations.freeze import freeze +from pip._internal.utils.compat import stdlib_pkgs + +DEV_PKGS = {'pip', 'setuptools', 'distribute', 'wheel'} + + +class FreezeCommand(Command): + """ + Output installed packages in requirements format. + + packages are listed in a case-insensitive sorted order. + """ + name = 'freeze' + usage = """ + %prog [options]""" + summary = 'Output installed packages in requirements format.' + log_streams = ("ext://sys.stderr", "ext://sys.stderr") + + def __init__(self, *args, **kw): + super(FreezeCommand, self).__init__(*args, **kw) + + 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( + '-f', '--find-links', + dest='find_links', + action='append', + default=[], + metavar='URL', + help='URL for finding packages, which will be added to the ' + 'output.') + 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( + '--all', + dest='freeze_all', + action='store_true', + help='Do not skip these packages in the output:' + ' %s' % ', '.join(DEV_PKGS)) + self.cmd_opts.add_option( + '--exclude-editable', + dest='exclude_editable', + action='store_true', + help='Exclude editable package from output.') + + self.parser.insert_option_group(0, self.cmd_opts) + + def run(self, options, args): + format_control = FormatControl(set(), set()) + wheel_cache = WheelCache(options.cache_dir, format_control) + skip = set(stdlib_pkgs) + if not options.freeze_all: + skip.update(DEV_PKGS) + + freeze_kwargs = dict( + requirement=options.requirements, + find_links=options.find_links, + local_only=options.local, + user_only=options.user, + skip_regex=options.skip_requirements_regex, + isolated=options.isolated_mode, + wheel_cache=wheel_cache, + skip=skip, + exclude_editable=options.exclude_editable, + ) + + try: + for line in freeze(**freeze_kwargs): + sys.stdout.write(line + '\n') + finally: + wheel_cache.cleanup() diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/hash.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/hash.py new file mode 100644 index 00000000..423440e9 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/hash.py @@ -0,0 +1,57 @@ +from __future__ import absolute_import + +import hashlib +import logging +import sys + +from pip._internal.cli.base_command import Command +from pip._internal.cli.status_codes import ERROR +from pip._internal.utils.hashes import FAVORITE_HASH, STRONG_HASHES +from pip._internal.utils.misc import read_chunks + +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. + + """ + name = 'hash' + usage = '%prog [options] ...' + summary = 'Compute hashes of package archives.' + ignore_require_venv = True + + def __init__(self, *args, **kw): + super(HashCommand, self).__init__(*args, **kw) + 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 %s' % + ', '.join(STRONG_HASHES)) + self.parser.insert_option_group(0, self.cmd_opts) + + def run(self, options, args): + if not args: + self.parser.print_usage(sys.stderr) + return ERROR + + algorithm = options.algorithm + for path in args: + logger.info('%s:\n--hash=%s:%s', + path, algorithm, _hash_of_file(path, algorithm)) + + +def _hash_of_file(path, algorithm): + """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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/help.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/help.py new file mode 100644 index 00000000..49a81cbb --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/help.py @@ -0,0 +1,37 @@ +from __future__ import absolute_import + +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""" + name = 'help' + usage = """ + %prog """ + summary = 'Show help for commands.' + ignore_require_venv = True + + def run(self, options, args): + from pip._internal.commands import commands_dict, 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 = ['unknown command "%s"' % cmd_name] + if guess: + msg.append('maybe you meant "%s"' % guess) + + raise CommandError(' - '.join(msg)) + + command = commands_dict[cmd_name]() + command.parser.print_help() + + return SUCCESS diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/install.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/install.py new file mode 100644 index 00000000..c13da44c --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/install.py @@ -0,0 +1,587 @@ +from __future__ import absolute_import + +import errno +import logging +import operator +import os +import shutil +from optparse import SUPPRESS_HELP + +from pip._vendor import pkg_resources + +from pip._internal.cache import WheelCache +from pip._internal.cli import cmdoptions +from pip._internal.cli.base_command import RequirementCommand +from pip._internal.cli.status_codes import ERROR +from pip._internal.exceptions import ( + CommandError, InstallationError, PreviousBuildDirError, +) +from pip._internal.locations import distutils_scheme, virtualenv_no_global +from pip._internal.operations.check import check_install_conflicts +from pip._internal.operations.prepare import RequirementPreparer +from pip._internal.req import RequirementSet, install_given_reqs +from pip._internal.req.req_tracker import RequirementTracker +from pip._internal.resolve import Resolver +from pip._internal.utils.filesystem import check_path_owner +from pip._internal.utils.misc import ( + ensure_dir, get_installed_version, + protect_pip_from_modification_on_windows, +) +from pip._internal.utils.temp_dir import TempDirectory +from pip._internal.wheel import WheelBuilder + +logger = logging.getLogger(__name__) + + +def is_wheel_installed(): + """ + Return whether the wheel package is installed. + """ + try: + import wheel # noqa: F401 + except ImportError: + return False + + return True + + +def build_wheels(builder, pep517_requirements, legacy_requirements, session): + """ + Build wheels for requirements, depending on whether wheel is installed. + """ + # We don't build wheels for legacy requirements if wheel is not installed. + should_build_legacy = is_wheel_installed() + + # Always build PEP 517 requirements + build_failures = builder.build( + pep517_requirements, + session=session, autobuilding=True + ) + + if should_build_legacy: + # We don't care about failures building legacy + # requirements, as we'll fall through to a direct + # install for those. + builder.build( + legacy_requirements, + session=session, autobuilding=True + ) + + return build_failures + + +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. + """ + name = 'install' + + usage = """ + %prog [options] [package-index-options] ... + %prog [options] -r [package-index-options] ... + %prog [options] [-e] ... + %prog [options] [-e] ... + %prog [options] ...""" + + summary = 'Install packages.' + + def __init__(self, *args, **kw): + super(InstallCommand, self).__init__(*args, **kw) + + cmd_opts = self.cmd_opts + + cmd_opts.add_option(cmdoptions.requirements()) + cmd_opts.add_option(cmdoptions.constraints()) + cmd_opts.add_option(cmdoptions.no_deps()) + cmd_opts.add_option(cmdoptions.pre()) + + cmd_opts.add_option(cmdoptions.editable()) + cmd_opts.add_option( + '-t', '--target', + dest='target_dir', + metavar='dir', + default=None, + help='Install packages into . ' + 'By default this will not replace existing files/folders in ' + '. Use --upgrade to replace existing packages in ' + 'with new versions.' + ) + cmd_opts.add_option(cmdoptions.platform()) + cmd_opts.add_option(cmdoptions.python_version()) + cmd_opts.add_option(cmdoptions.implementation()) + cmd_opts.add_option(cmdoptions.abi()) + + 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.)") + cmd_opts.add_option( + '--no-user', + dest='use_user_site', + action='store_false', + help=SUPPRESS_HELP) + cmd_opts.add_option( + '--root', + dest='root_path', + metavar='dir', + default=None, + help="Install everything relative to this alternate root " + "directory.") + 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") + + cmd_opts.add_option(cmdoptions.build_dir()) + + cmd_opts.add_option(cmdoptions.src()) + + 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.' + ) + + 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).' + ) + + cmd_opts.add_option( + '--force-reinstall', + dest='force_reinstall', + action='store_true', + help='Reinstall all packages even if they are already ' + 'up-to-date.') + + cmd_opts.add_option( + '-I', '--ignore-installed', + dest='ignore_installed', + action='store_true', + help='Ignore the installed packages (reinstalling instead).') + + cmd_opts.add_option(cmdoptions.ignore_requires_python()) + cmd_opts.add_option(cmdoptions.no_build_isolation()) + cmd_opts.add_option(cmdoptions.use_pep517()) + cmd_opts.add_option(cmdoptions.no_use_pep517()) + + cmd_opts.add_option(cmdoptions.install_options()) + cmd_opts.add_option(cmdoptions.global_options()) + + cmd_opts.add_option( + "--compile", + action="store_true", + dest="compile", + default=True, + help="Compile Python source files to bytecode", + ) + + cmd_opts.add_option( + "--no-compile", + action="store_false", + dest="compile", + help="Do not compile Python source files to bytecode", + ) + + 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", + ) + cmd_opts.add_option( + "--no-warn-conflicts", + action="store_false", + dest="warn_about_conflicts", + default=True, + help="Do not warn about broken dependencies", + ) + + cmd_opts.add_option(cmdoptions.no_binary()) + cmd_opts.add_option(cmdoptions.only_binary()) + cmd_opts.add_option(cmdoptions.prefer_binary()) + cmd_opts.add_option(cmdoptions.no_clean()) + cmd_opts.add_option(cmdoptions.require_hashes()) + cmd_opts.add_option(cmdoptions.progress_bar()) + + index_opts = cmdoptions.make_option_group( + cmdoptions.index_group, + self.parser, + ) + + self.parser.insert_option_group(0, index_opts) + self.parser.insert_option_group(0, cmd_opts) + + def run(self, options, args): + cmdoptions.check_install_build_global(options) + upgrade_strategy = "to-satisfy-only" + if options.upgrade: + upgrade_strategy = options.upgrade_strategy + + if options.build_dir: + options.build_dir = os.path.abspath(options.build_dir) + + cmdoptions.check_dist_restriction(options, check_target=True) + + if options.python_version: + python_versions = [options.python_version] + else: + python_versions = None + + options.src_dir = os.path.abspath(options.src_dir) + install_options = options.install_options or [] + if options.use_user_site: + if options.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." + ) + install_options.append('--user') + install_options.append('--prefix=') + + target_temp_dir = TempDirectory(kind="target") + if options.target_dir: + options.ignore_installed = True + options.target_dir = os.path.abspath(options.target_dir) + if (os.path.exists(options.target_dir) and not + os.path.isdir(options.target_dir)): + 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.create() + install_options.append('--home=' + target_temp_dir.path) + + global_options = options.global_options or [] + + with self._build_session(options) as session: + finder = self._build_package_finder( + options=options, + session=session, + platform=options.platform, + python_versions=python_versions, + abi=options.abi, + implementation=options.implementation, + ) + build_delete = (not (options.no_clean or options.build_dir)) + wheel_cache = WheelCache(options.cache_dir, options.format_control) + + if options.cache_dir and not check_path_owner(options.cache_dir): + logger.warning( + "The directory '%s' or its parent directory is not owned " + "by the current user and caching wheels has been " + "disabled. check the permissions and owner of that " + "directory. If executing pip with sudo, you may want " + "sudo's -H flag.", + options.cache_dir, + ) + options.cache_dir = None + + with RequirementTracker() as req_tracker, TempDirectory( + options.build_dir, delete=build_delete, kind="install" + ) as directory: + requirement_set = RequirementSet( + require_hashes=options.require_hashes, + check_supported_wheels=not options.target_dir, + ) + + try: + self.populate_requirement_set( + requirement_set, args, options, finder, session, + self.name, wheel_cache + ) + preparer = RequirementPreparer( + build_dir=directory.path, + src_dir=options.src_dir, + download_dir=None, + wheel_download_dir=None, + progress_bar=options.progress_bar, + build_isolation=options.build_isolation, + req_tracker=req_tracker, + ) + + resolver = Resolver( + preparer=preparer, + finder=finder, + session=session, + wheel_cache=wheel_cache, + use_user_site=options.use_user_site, + upgrade_strategy=upgrade_strategy, + force_reinstall=options.force_reinstall, + ignore_dependencies=options.ignore_dependencies, + ignore_requires_python=options.ignore_requires_python, + ignore_installed=options.ignore_installed, + isolated=options.isolated_mode, + use_pep517=options.use_pep517 + ) + resolver.resolve(requirement_set) + + protect_pip_from_modification_on_windows( + modifying_pip=requirement_set.has_requirement("pip") + ) + + # Consider legacy and PEP517-using requirements separately + legacy_requirements = [] + pep517_requirements = [] + for req in requirement_set.requirements.values(): + if req.use_pep517: + pep517_requirements.append(req) + else: + legacy_requirements.append(req) + + wheel_builder = WheelBuilder( + finder, preparer, wheel_cache, + build_options=[], global_options=[], + ) + + build_failures = build_wheels( + builder=wheel_builder, + pep517_requirements=pep517_requirements, + legacy_requirements=legacy_requirements, + session=session, + ) + + # If we're using PEP 517, we cannot do a direct install + # so we fail here. + if build_failures: + raise InstallationError( + "Could not build wheels for {} which use" + " PEP 517 and cannot be installed directly".format( + ", ".join(r.name for r in build_failures))) + + to_install = resolver.get_installation_order( + requirement_set + ) + + # Consistency Checking of the package set we're installing. + should_warn_about_conflicts = ( + not options.ignore_dependencies and + options.warn_about_conflicts + ) + if should_warn_about_conflicts: + self._warn_about_conflicts(to_install) + + # Don't warn about script install locations if + # --target has been specified + warn_script_location = options.warn_script_location + if options.target_dir: + warn_script_location = False + + installed = install_given_reqs( + to_install, + install_options, + global_options, + root=options.root_path, + home=target_temp_dir.path, + prefix=options.prefix_path, + pycompile=options.compile, + warn_script_location=warn_script_location, + use_user_site=options.use_user_site, + ) + + 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, + ) + working_set = pkg_resources.WorkingSet(lib_locations) + + reqs = sorted(installed, key=operator.attrgetter('name')) + items = [] + for req in reqs: + item = req.name + try: + installed_version = get_installed_version( + req.name, working_set=working_set + ) + if installed_version: + item += '-' + installed_version + except Exception: + pass + items.append(item) + installed = ' '.join(items) + if installed: + logger.info('Successfully installed %s', installed) + except EnvironmentError as error: + show_traceback = (self.verbosity >= 1) + + message = create_env_error_message( + error, show_traceback, options.use_user_site, + ) + logger.error(message, exc_info=show_traceback) + + return ERROR + except PreviousBuildDirError: + options.no_clean = True + raise + finally: + # Clean up + if not options.no_clean: + requirement_set.cleanup_files() + wheel_cache.cleanup() + + if options.target_dir: + self._handle_target_dir( + options.target_dir, target_temp_dir, options.upgrade + ) + return requirement_set + + def _handle_target_dir(self, target_dir, target_temp_dir, upgrade): + ensure_dir(target_dir) + + # Checking both purelib and platlib directories for installed + # packages to be moved to target directory + lib_dir_list = [] + + with target_temp_dir: + # Checking both purelib and platlib directories for installed + # packages to be moved to target directory + scheme = distutils_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 _warn_about_conflicts(self, to_install): + try: + package_set, _dep_info = check_install_conflicts(to_install) + except Exception: + logger.error("Error checking for conflicts.", exc_info=True) + return + missing, conflicting = _dep_info + + # NOTE: There is some duplication here from pip check + for project_name in missing: + version = package_set[project_name][0] + for dependency in missing[project_name]: + logger.critical( + "%s %s requires %s, which is not installed.", + project_name, version, dependency[1], + ) + + for project_name in conflicting: + version = package_set[project_name][0] + for dep_name, dep_version, req in conflicting[project_name]: + logger.critical( + "%s %s has requirement %s, but you'll have %s %s which is " + "incompatible.", + project_name, version, req, dep_name, dep_version, + ) + + +def get_lib_location_guesses(*args, **kwargs): + scheme = distutils_scheme('', *args, **kwargs) + return [scheme['purelib'], scheme['platlib']] + + +def create_env_error_message(error, show_traceback, using_user_site): + """Format an error message for an EnvironmentError + + 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 EnvironmentError") + 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 using_user_site: + parts.extend([ + user_option_part, " or ", + permissions_part.lower(), + ]) + else: + parts.append(permissions_part) + parts.append(".\n") + + return "".join(parts).strip() + "\n" diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/list.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/list.py new file mode 100644 index 00000000..d70782d4 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/list.py @@ -0,0 +1,302 @@ +from __future__ import absolute_import + +import json +import logging + +from pip._vendor import six +from pip._vendor.six.moves import zip_longest + +from pip._internal.cli import cmdoptions +from pip._internal.cli.base_command import Command +from pip._internal.exceptions import CommandError +from pip._internal.index import PackageFinder +from pip._internal.utils.misc import ( + dist_is_editable, get_installed_distributions, +) +from pip._internal.utils.packaging import get_installer + +logger = logging.getLogger(__name__) + + +class ListCommand(Command): + """ + List installed packages, including editables. + + Packages are listed in a case-insensitive sorted order. + """ + name = 'list' + usage = """ + %prog [options]""" + summary = 'List installed packages.' + + def __init__(self, *args, **kw): + super(ListCommand, self).__init__(*args, **kw) + + cmd_opts = self.cmd_opts + + cmd_opts.add_option( + '-o', '--outdated', + action='store_true', + default=False, + help='List outdated packages') + cmd_opts.add_option( + '-u', '--uptodate', + action='store_true', + default=False, + help='List uptodate packages') + cmd_opts.add_option( + '-e', '--editable', + action='store_true', + default=False, + help='List editable projects.') + 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.') + + cmd_opts.add_option( + '--pre', + action='store_true', + default=False, + help=("Include pre-release and development versions. By default, " + "pip only finds stable versions."), + ) + + 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", + ) + + cmd_opts.add_option( + '--not-required', + action='store_true', + dest='not_required', + help="List packages that are not dependencies of " + "installed packages.", + ) + + cmd_opts.add_option( + '--exclude-editable', + action='store_false', + dest='include_editable', + help='Exclude editable package from output.', + ) + cmd_opts.add_option( + '--include-editable', + action='store_true', + dest='include_editable', + help='Include editable package from output.', + default=True, + ) + index_opts = cmdoptions.make_option_group( + cmdoptions.index_group, self.parser + ) + + self.parser.insert_option_group(0, index_opts) + self.parser.insert_option_group(0, cmd_opts) + + def _build_package_finder(self, options, index_urls, session): + """ + Create a package finder appropriate to this list command. + """ + return PackageFinder( + find_links=options.find_links, + index_urls=index_urls, + allow_all_prereleases=options.pre, + trusted_hosts=options.trusted_hosts, + session=session, + ) + + def run(self, options, args): + if options.outdated and options.uptodate: + raise CommandError( + "Options --outdated and --uptodate cannot be combined.") + + packages = get_installed_distributions( + local_only=options.local, + user_only=options.user, + editables_only=options.editable, + include_editables=options.include_editable, + ) + + # 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) + + def get_outdated(self, packages, options): + return [ + dist for dist in self.iter_packages_latest_infos(packages, options) + if dist.latest_version > dist.parsed_version + ] + + def get_uptodate(self, packages, options): + return [ + dist for dist in self.iter_packages_latest_infos(packages, options) + if dist.latest_version == dist.parsed_version + ] + + def get_not_required(self, packages, options): + dep_keys = set() + for dist in packages: + dep_keys.update(requirement.key for requirement in dist.requires()) + return {pkg for pkg in packages if pkg.key not in dep_keys} + + def iter_packages_latest_infos(self, packages, options): + index_urls = [options.index_url] + options.extra_index_urls + if options.no_index: + logger.debug('Ignoring indexes: %s', ','.join(index_urls)) + index_urls = [] + + with self._build_session(options) as session: + finder = self._build_package_finder(options, index_urls, session) + + for dist in packages: + typ = 'unknown' + all_candidates = finder.find_all_candidates(dist.key) + if not options.pre: + # Remove prereleases + all_candidates = [candidate for candidate in all_candidates + if not candidate.version.is_prerelease] + + evaluator = finder.candidate_evaluator + best_candidate = evaluator.get_best_candidate(all_candidates) + if best_candidate is None: + continue + + remote_version = best_candidate.version + if best_candidate.location.is_wheel: + typ = 'wheel' + else: + typ = 'sdist' + # This is dirty but makes the rest of the code much cleaner + dist.latest_version = remote_version + dist.latest_filetype = typ + yield dist + + def output_package_listing(self, packages, options): + packages = sorted( + packages, + key=lambda dist: dist.project_name.lower(), + ) + 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: + if options.verbose >= 1: + logger.info("%s==%s (%s)", dist.project_name, + dist.version, dist.location) + else: + logger.info("%s==%s", dist.project_name, dist.version) + elif options.list_format == 'json': + logger.info(format_for_json(packages, options)) + + def output_package_listing_columns(self, data, header): + # 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(map(lambda x: '-' * x, sizes))) + + for val in pkg_strings: + logger.info(val) + + +def tabulate(vals): + # From pfmoore on GitHub: + # https://github.com/pypa/pip/issues/3651#issuecomment-216932564 + assert len(vals) > 0 + + sizes = [0] * max(len(x) for x in vals) + for row in vals: + sizes = [max(s, len(str(c))) for s, c in zip_longest(sizes, row)] + + result = [] + for row in vals: + display = " ".join([str(c).ljust(s) if c is not None else '' + for s, c in zip_longest(sizes, row)]) + result.append(display) + + return result, sizes + + +def format_for_columns(pkgs, options): + """ + Convert the package data into something usable + by output_package_listing_columns. + """ + running_outdated = options.outdated + # Adjust the header for the `pip list --outdated` case. + if running_outdated: + header = ["Package", "Version", "Latest", "Type"] + else: + header = ["Package", "Version"] + + data = [] + if options.verbose >= 1 or any(dist_is_editable(x) for x in pkgs): + header.append("Location") + if options.verbose >= 1: + header.append("Installer") + + for proj in pkgs: + # if we're working on the 'outdated' list, separate out the + # latest_version and type + row = [proj.project_name, proj.version] + + if running_outdated: + row.append(proj.latest_version) + row.append(proj.latest_filetype) + + if options.verbose >= 1 or dist_is_editable(proj): + row.append(proj.location) + if options.verbose >= 1: + row.append(get_installer(proj)) + + data.append(row) + + return data, header + + +def format_for_json(packages, options): + data = [] + for dist in packages: + info = { + 'name': dist.project_name, + 'version': six.text_type(dist.version), + } + if options.verbose >= 1: + info['location'] = dist.location + info['installer'] = get_installer(dist) + if options.outdated: + info['latest_version'] = six.text_type(dist.latest_version) + info['latest_filetype'] = dist.latest_filetype + data.append(info) + return json.dumps(data) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/search.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/search.py new file mode 100644 index 00000000..c157a312 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/search.py @@ -0,0 +1,135 @@ +from __future__ import absolute_import + +import logging +import sys +import textwrap +from collections import OrderedDict + +from pip._vendor import pkg_resources +from pip._vendor.packaging.version import parse as parse_version +# NOTE: XMLRPC Client is not annotated in typeshed as on 2017-07-17, which is +# why we ignore the type on this import +from pip._vendor.six.moves import xmlrpc_client # type: ignore + +from pip._internal.cli.base_command import Command +from pip._internal.cli.status_codes import NO_MATCHES_FOUND, SUCCESS +from pip._internal.download import PipXmlrpcTransport +from pip._internal.exceptions import CommandError +from pip._internal.models.index import PyPI +from pip._internal.utils.compat import get_terminal_size +from pip._internal.utils.logging import indent_log + +logger = logging.getLogger(__name__) + + +class SearchCommand(Command): + """Search for PyPI packages whose name or summary contains .""" + name = 'search' + usage = """ + %prog [options] """ + summary = 'Search PyPI for packages.' + ignore_require_venv = True + + def __init__(self, *args, **kw): + super(SearchCommand, self).__init__(*args, **kw) + 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, args): + 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 = get_terminal_size()[0] + + print_results(hits, terminal_width=terminal_width) + if pypi_hits: + return SUCCESS + return NO_MATCHES_FOUND + + def search(self, query, options): + index_url = options.index + with self._build_session(options) as session: + transport = PipXmlrpcTransport(index_url, session) + pypi = xmlrpc_client.ServerProxy(index_url, transport) + hits = pypi.search({'name': query, 'summary': query}, 'or') + return hits + + +def transform_hits(hits): + """ + 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 = 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_results(hits, name_column_width=None, terminal_width=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 + + installed_packages = [p.project_name for p in pkg_resources.working_set] + 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 = textwrap.wrap(summary, target_width) + summary = ('\n' + ' ' * (name_column_width + 3)).join(summary) + + line = '%-*s - %s' % (name_column_width, + '%s (%s)' % (name, latest), summary) + try: + logger.info(line) + if name in installed_packages: + dist = pkg_resources.get_distribution(name) + with indent_log(): + if dist.version == latest: + logger.info('INSTALLED: %s (latest)', dist.version) + else: + logger.info('INSTALLED: %s', dist.version) + logger.info('LATEST: %s', latest) + except UnicodeEncodeError: + pass + + +def highest_version(versions): + return max(versions, key=parse_version) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/show.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/show.py new file mode 100644 index 00000000..a18a9020 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/show.py @@ -0,0 +1,168 @@ +from __future__ import absolute_import + +import logging +import os +from email.parser import FeedParser + +from pip._vendor import pkg_resources +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 + +logger = logging.getLogger(__name__) + + +class ShowCommand(Command): + """ + Show information about one or more installed packages. + + The output is in RFC-compliant mail header format. + """ + name = 'show' + usage = """ + %prog [options] ...""" + summary = 'Show information about installed packages.' + ignore_require_venv = True + + def __init__(self, *args, **kw): + super(ShowCommand, self).__init__(*args, **kw) + 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, args): + 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 + + +def search_packages_info(query): + """ + 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. + """ + installed = {} + for p in pkg_resources.working_set: + installed[canonicalize_name(p.project_name)] = p + + query_names = [canonicalize_name(name) for name in query] + + for dist in [installed[pkg] for pkg in query_names if pkg in installed]: + package = { + 'name': dist.project_name, + 'version': dist.version, + 'location': dist.location, + 'requires': [dep.project_name for dep in dist.requires()], + } + file_list = None + metadata = None + if isinstance(dist, pkg_resources.DistInfoDistribution): + # RECORDs should be part of .dist-info metadatas + if dist.has_metadata('RECORD'): + lines = dist.get_metadata_lines('RECORD') + paths = [l.split(',')[0] for l in lines] + paths = [os.path.join(dist.location, p) for p in paths] + file_list = [os.path.relpath(p, dist.location) for p in paths] + + if dist.has_metadata('METADATA'): + metadata = dist.get_metadata('METADATA') + else: + # Otherwise use pip's log for .egg-info's + if dist.has_metadata('installed-files.txt'): + paths = dist.get_metadata_lines('installed-files.txt') + paths = [os.path.join(dist.egg_info, p) for p in paths] + file_list = [os.path.relpath(p, dist.location) for p in paths] + + if dist.has_metadata('PKG-INFO'): + metadata = dist.get_metadata('PKG-INFO') + + if dist.has_metadata('entry_points.txt'): + entry_points = dist.get_metadata_lines('entry_points.txt') + package['entry_points'] = entry_points + + if dist.has_metadata('INSTALLER'): + for line in dist.get_metadata_lines('INSTALLER'): + if line.strip(): + package['installer'] = line.strip() + break + + # @todo: Should pkg_resources.Distribution have a + # `get_pkg_info` method? + feed_parser = FeedParser() + feed_parser.feed(metadata) + pkg_info_dict = feed_parser.close() + for key in ('metadata-version', 'summary', + 'home-page', 'author', 'author-email', 'license'): + package[key] = pkg_info_dict.get(key) + + # It looks like FeedParser cannot deal with repeated headers + classifiers = [] + for line in metadata.splitlines(): + if line.startswith('Classifier: '): + classifiers.append(line[len('Classifier: '):]) + package['classifiers'] = classifiers + + if file_list: + package['files'] = sorted(file_list) + yield package + + +def print_results(distributions, list_files=False, verbose=False): + """ + Print the informations from installed distributions found. + """ + results_printed = False + for i, dist in enumerate(distributions): + results_printed = True + if i > 0: + logger.info("---") + + name = dist.get('name', '') + required_by = [ + pkg.project_name for pkg in pkg_resources.working_set + if name in [required.name for required in pkg.requires()] + ] + + logger.info("Name: %s", name) + logger.info("Version: %s", dist.get('version', '')) + logger.info("Summary: %s", dist.get('summary', '')) + logger.info("Home-page: %s", dist.get('home-page', '')) + logger.info("Author: %s", dist.get('author', '')) + logger.info("Author-email: %s", dist.get('author-email', '')) + logger.info("License: %s", dist.get('license', '')) + logger.info("Location: %s", dist.get('location', '')) + logger.info("Requires: %s", ', '.join(dist.get('requires', []))) + logger.info("Required-by: %s", ', '.join(required_by)) + + if verbose: + logger.info("Metadata-Version: %s", + dist.get('metadata-version', '')) + logger.info("Installer: %s", dist.get('installer', '')) + logger.info("Classifiers:") + for classifier in dist.get('classifiers', []): + logger.info(" %s", classifier) + logger.info("Entry-points:") + for entry in dist.get('entry_points', []): + logger.info(" %s", entry.strip()) + if list_files: + logger.info("Files:") + for line in dist.get('files', []): + logger.info(" %s", line.strip()) + if "files" not in dist: + logger.info("Cannot locate installed-files.txt") + return results_printed diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/uninstall.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/uninstall.py new file mode 100644 index 00000000..0cd6f54b --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/uninstall.py @@ -0,0 +1,78 @@ +from __future__ import absolute_import + +from pip._vendor.packaging.utils import canonicalize_name + +from pip._internal.cli.base_command import Command +from pip._internal.exceptions import InstallationError +from pip._internal.req import parse_requirements +from pip._internal.req.constructors import install_req_from_line +from pip._internal.utils.misc import protect_pip_from_modification_on_windows + + +class UninstallCommand(Command): + """ + 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``. + """ + name = 'uninstall' + usage = """ + %prog [options] ... + %prog [options] -r ...""" + summary = 'Uninstall packages.' + + def __init__(self, *args, **kw): + super(UninstallCommand, self).__init__(*args, **kw) + 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.parser.insert_option_group(0, self.cmd_opts) + + def run(self, options, args): + with self._build_session(options) as session: + 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 + for filename in options.requirements: + for req in parse_requirements( + filename, + options=options, + session=session): + if req.name: + reqs_to_uninstall[canonicalize_name(req.name)] = req + if not reqs_to_uninstall: + raise InstallationError( + 'You must give at least one requirement to %(name)s (see ' + '"pip help %(name)s")' % dict(name=self.name) + ) + + 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() diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/wheel.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/wheel.py new file mode 100644 index 00000000..cd72a3df --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/commands/wheel.py @@ -0,0 +1,186 @@ +# -*- coding: utf-8 -*- +from __future__ import absolute_import + +import logging +import os + +from pip._internal.cache import WheelCache +from pip._internal.cli import cmdoptions +from pip._internal.cli.base_command import RequirementCommand +from pip._internal.exceptions import CommandError, PreviousBuildDirError +from pip._internal.operations.prepare import RequirementPreparer +from pip._internal.req import RequirementSet +from pip._internal.req.req_tracker import RequirementTracker +from pip._internal.resolve import Resolver +from pip._internal.utils.temp_dir import TempDirectory +from pip._internal.wheel import WheelBuilder + +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/ + + Requirements: setuptools>=0.8, and wheel. + + 'pip wheel' uses the bdist_wheel setuptools extension from the wheel + package to build individual wheels. + + """ + + name = 'wheel' + usage = """ + %prog [options] ... + %prog [options] -r ... + %prog [options] [-e] ... + %prog [options] [-e] ... + %prog [options] ...""" + + summary = 'Build wheels from your requirements.' + + def __init__(self, *args, **kw): + super(WheelCommand, self).__init__(*args, **kw) + + cmd_opts = self.cmd_opts + + cmd_opts.add_option( + '-w', '--wheel-dir', + dest='wheel_dir', + metavar='dir', + default=os.curdir, + help=("Build wheels into , where the default is the " + "current working directory."), + ) + cmd_opts.add_option(cmdoptions.no_binary()) + cmd_opts.add_option(cmdoptions.only_binary()) + cmd_opts.add_option(cmdoptions.prefer_binary()) + cmd_opts.add_option( + '--build-option', + dest='build_options', + metavar='options', + action='append', + help="Extra arguments to be supplied to 'setup.py bdist_wheel'.", + ) + cmd_opts.add_option(cmdoptions.no_build_isolation()) + cmd_opts.add_option(cmdoptions.use_pep517()) + cmd_opts.add_option(cmdoptions.no_use_pep517()) + cmd_opts.add_option(cmdoptions.constraints()) + cmd_opts.add_option(cmdoptions.editable()) + cmd_opts.add_option(cmdoptions.requirements()) + cmd_opts.add_option(cmdoptions.src()) + cmd_opts.add_option(cmdoptions.ignore_requires_python()) + cmd_opts.add_option(cmdoptions.no_deps()) + cmd_opts.add_option(cmdoptions.build_dir()) + cmd_opts.add_option(cmdoptions.progress_bar()) + + cmd_opts.add_option( + '--global-option', + dest='global_options', + action='append', + metavar='options', + help="Extra global options to be supplied to the setup.py " + "call before the 'bdist_wheel' command.") + + cmd_opts.add_option( + '--pre', + action='store_true', + default=False, + help=("Include pre-release and development versions. By default, " + "pip only finds stable versions."), + ) + + cmd_opts.add_option(cmdoptions.no_clean()) + cmd_opts.add_option(cmdoptions.require_hashes()) + + index_opts = cmdoptions.make_option_group( + cmdoptions.index_group, + self.parser, + ) + + self.parser.insert_option_group(0, index_opts) + self.parser.insert_option_group(0, cmd_opts) + + def run(self, options, args): + cmdoptions.check_install_build_global(options) + + index_urls = [options.index_url] + options.extra_index_urls + if options.no_index: + logger.debug('Ignoring indexes: %s', ','.join(index_urls)) + index_urls = [] + + if options.build_dir: + options.build_dir = os.path.abspath(options.build_dir) + + options.src_dir = os.path.abspath(options.src_dir) + + with self._build_session(options) as session: + finder = self._build_package_finder(options, session) + build_delete = (not (options.no_clean or options.build_dir)) + wheel_cache = WheelCache(options.cache_dir, options.format_control) + + with RequirementTracker() as req_tracker, TempDirectory( + options.build_dir, delete=build_delete, kind="wheel" + ) as directory: + + requirement_set = RequirementSet( + require_hashes=options.require_hashes, + ) + + try: + self.populate_requirement_set( + requirement_set, args, options, finder, session, + self.name, wheel_cache + ) + + preparer = RequirementPreparer( + build_dir=directory.path, + src_dir=options.src_dir, + download_dir=None, + wheel_download_dir=options.wheel_dir, + progress_bar=options.progress_bar, + build_isolation=options.build_isolation, + req_tracker=req_tracker, + ) + + resolver = Resolver( + preparer=preparer, + finder=finder, + session=session, + wheel_cache=wheel_cache, + use_user_site=False, + upgrade_strategy="to-satisfy-only", + force_reinstall=False, + ignore_dependencies=options.ignore_dependencies, + ignore_requires_python=options.ignore_requires_python, + ignore_installed=True, + isolated=options.isolated_mode, + use_pep517=options.use_pep517 + ) + resolver.resolve(requirement_set) + + # build wheels + wb = WheelBuilder( + finder, preparer, wheel_cache, + build_options=options.build_options or [], + global_options=options.global_options or [], + no_clean=options.no_clean, + ) + build_failures = wb.build( + requirement_set.requirements.values(), session=session, + ) + if len(build_failures) != 0: + raise CommandError( + "Failed to build one or more wheels" + ) + except PreviousBuildDirError: + options.no_clean = True + raise + finally: + if not options.no_clean: + requirement_set.cleanup_files() + wheel_cache.cleanup() diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/configuration.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/configuration.py new file mode 100644 index 00000000..b199fa70 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/configuration.py @@ -0,0 +1,384 @@ +"""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 +""" + +import locale +import logging +import os + +from pip._vendor.six.moves import configparser + +from pip._internal.exceptions import ( + ConfigurationError, ConfigurationFileCouldNotBeLoaded, +) +from pip._internal.locations import ( + global_config_files, legacy_config_file, new_config_file, site_config_file, +) +from pip._internal.utils.misc import ensure_dir, enum +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from typing import ( + Any, Dict, Iterable, List, NewType, Optional, Tuple + ) + + RawConfigParser = configparser.RawConfigParser # Shorthand + Kind = NewType("Kind", str) + +logger = logging.getLogger(__name__) + + +# NOTE: Maybe use the optionx attribute to normalize keynames. +def _normalize_name(name): + # type: (str) -> str + """Make a name consistent regardless of source (environment or file) + """ + name = name.lower().replace('_', '-') + if name.startswith('--'): + name = name[2:] # only prefer long opts + return name + + +def _disassemble_key(name): + # type: (str) -> List[str] + return name.split(".", 1) + + +# 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 +) + + +class Configuration(object): + """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, load_only=None): + # type: (bool, Kind) -> None + super(Configuration, self).__init__() + + _valid_load_only = [kinds.USER, kinds.GLOBAL, kinds.SITE, None] + if 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[:-1])) + ) + ) + self.isolated = isolated # type: bool + self.load_only = load_only # type: Optional[Kind] + + # The order here determines the override order. + self._override_order = [ + kinds.GLOBAL, kinds.USER, kinds.SITE, kinds.ENV, kinds.ENV_VAR + ] + + self._ignore_env_names = ["version", "help"] + + # Because we keep track of where we got the data from + self._parsers = { + variant: [] for variant in self._override_order + } # type: Dict[Kind, List[Tuple[str, RawConfigParser]]] + self._config = { + variant: {} for variant in self._override_order + } # type: Dict[Kind, Dict[str, Any]] + self._modified_parsers = [] # type: List[Tuple[str, RawConfigParser]] + + def load(self): + # type: () -> 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): + # type: () -> Optional[str] + """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): + # type: () -> Iterable[Tuple[str, Any]] + """Returns key-value pairs like dict.items() representing the loaded + configuration + """ + return self._dictionary.items() + + def get_value(self, key): + # type: (str) -> Any + """Get a value from the configuration. + """ + try: + return self._dictionary[key] + except KeyError: + raise ConfigurationError("No such key - {}".format(key)) + + def set_value(self, key, value): + # type: (str, Any) -> None + """Modify a value in the configuration. + """ + self._ensure_have_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][key] = value + self._mark_as_modified(fname, parser) + + def unset_value(self, key): + # type: (str) -> None + """Unset a value in the configuration. + """ + self._ensure_have_load_only() + + if key not in self._config[self.load_only]: + raise ConfigurationError("No such key - {}".format(key)) + + fname, parser = self._get_parser_to_modify() + + if parser is not None: + section, name = _disassemble_key(key) + + # Remove the key in the parser + modified_something = False + if parser.has_section(section): + # Returns whether the option was removed or not + modified_something = parser.remove_option(section, name) + + if modified_something: + # name removed from parser, section may now be empty + section_iter = iter(parser.items(section)) + try: + val = next(section_iter) + except StopIteration: + val = None + + if val is None: + parser.remove_section(section) + + self._mark_as_modified(fname, parser) + else: + raise ConfigurationError( + "Fatal Internal error [id=1]. Please report as a bug." + ) + + del self._config[self.load_only][key] + + def save(self): + # type: () -> 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)) + + with open(fname, "w") as f: + parser.write(f) + + # + # Private routines + # + + def _ensure_have_load_only(self): + # type: () -> 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): + # type: () -> 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 self._override_order: + retval.update(self._config[variant]) + + return retval + + def _load_config_files(self): + # type: () -> 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, fname): + # type: (Kind, str) -> RawConfigParser + logger.debug("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].update(self._normalized_keys(section, items)) + + return parser + + def _construct_parser(self, fname): + # type: (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): + try: + parser.read(fname) + except UnicodeDecodeError: + # See https://github.com/pypa/pip/issues/4963 + raise ConfigurationFileCouldNotBeLoaded( + reason="contains invalid {} characters".format( + locale.getpreferredencoding(False) + ), + 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): + # type: () -> None + """Loads configuration from environment variables + """ + self._config[kinds.ENV_VAR].update( + self._normalized_keys(":env:", self._get_environ_vars()) + ) + + def _normalized_keys(self, section, items): + # type: (str, 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): + # type: () -> Iterable[Tuple[str, str]] + """Returns a generator with all environmental vars with prefix PIP_""" + for key, val in os.environ.items(): + should_be_yielded = ( + key.startswith("PIP_") and + key[4:].lower() not in self._ignore_env_names + ) + if should_be_yielded: + yield key[4:].lower(), val + + # XXX: This is patched in the tests. + def _iter_config_files(self): + # type: () -> Iterable[Tuple[Kind, List[str]]] + """Yields variant and configuration files associated with it. + + This should be treated like items of a dictionary. + """ + # SMELL: Move the conditions out of this function + + # environment variables have the lowest priority + config_file = os.environ.get('PIP_CONFIG_FILE', None) + if config_file is not None: + yield kinds.ENV, [config_file] + else: + yield kinds.ENV, [] + + # at the base we have any global configuration + yield kinds.GLOBAL, list(global_config_files) + + # per-user configuration next + should_load_user_config = not self.isolated and not ( + config_file and os.path.exists(config_file) + ) + if should_load_user_config: + # The legacy config file is overridden by the new config file + yield kinds.USER, [legacy_config_file, new_config_file] + + # finally virtualenv configuration first trumping others + yield kinds.SITE, [site_config_file] + + def _get_parser_to_modify(self): + # type: () -> Tuple[str, RawConfigParser] + # Determine which parser to modify + 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, parser): + # type: (str, RawConfigParser) -> None + file_parser_tuple = (fname, parser) + if file_parser_tuple not in self._modified_parsers: + self._modified_parsers.append(file_parser_tuple) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/download.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/download.py new file mode 100644 index 00000000..2683cf08 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/download.py @@ -0,0 +1,979 @@ +from __future__ import absolute_import + +import cgi +import email.utils +import getpass +import json +import logging +import mimetypes +import os +import platform +import re +import shutil +import sys + +from pip._vendor import requests, six, urllib3 +from pip._vendor.cachecontrol import CacheControlAdapter +from pip._vendor.cachecontrol.caches import FileCache +from pip._vendor.lockfile import LockError +from pip._vendor.requests.adapters import BaseAdapter, HTTPAdapter +from pip._vendor.requests.auth import AuthBase, HTTPBasicAuth +from pip._vendor.requests.models import CONTENT_CHUNK_SIZE, Response +from pip._vendor.requests.structures import CaseInsensitiveDict +from pip._vendor.requests.utils import get_netrc_auth +# NOTE: XMLRPC Client is not annotated in typeshed as on 2017-07-17, which is +# why we ignore the type on this import +from pip._vendor.six.moves import xmlrpc_client # type: ignore +from pip._vendor.six.moves.urllib import parse as urllib_parse +from pip._vendor.six.moves.urllib import request as urllib_request +from pip._vendor.urllib3.util import IS_PYOPENSSL + +import pip +from pip._internal.exceptions import HashMismatch, InstallationError +from pip._internal.locations import write_delete_marker_file +from pip._internal.models.index import PyPI +from pip._internal.utils.encoding import auto_decode +from pip._internal.utils.filesystem import check_path_owner +from pip._internal.utils.glibc import libc_ver +from pip._internal.utils.misc import ( + ARCHIVE_EXTENSIONS, ask_path_exists, backup_dir, consume, display_path, + format_size, get_installed_version, rmtree, split_auth_from_netloc, + splitext, unpack_file, +) +from pip._internal.utils.temp_dir import TempDirectory +from pip._internal.utils.typing import MYPY_CHECK_RUNNING +from pip._internal.utils.ui import DownloadProgressProvider +from pip._internal.vcs import vcs + +if MYPY_CHECK_RUNNING: + from typing import ( + Optional, Tuple, Dict, IO, Text, Union + ) + from pip._internal.models.link import Link + from pip._internal.utils.hashes import Hashes + from pip._internal.vcs import AuthInfo + +try: + import ssl # noqa +except ImportError: + ssl = None + +HAS_TLS = (ssl is not None) or IS_PYOPENSSL + +__all__ = ['get_file_content', + 'is_url', 'url_to_path', 'path_to_url', + 'is_archive_file', 'unpack_vcs_link', + 'unpack_file_url', 'is_vcs_url', 'is_file_url', + 'unpack_http_url', 'unpack_url'] + + +logger = logging.getLogger(__name__) + + +# 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', +) + + +def looks_like_ci(): + # type: () -> 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) + + +def user_agent(): + """ + Return a string representing the user agent. + """ + data = { + "installer": {"name": "pip", "version": pip.__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': + if sys.pypy_version_info.releaselevel == 'final': + pypy_version_info = sys.pypy_version_info[:3] + else: + pypy_version_info = sys.pypy_version_info + 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 + distro_infos = dict(filter( + lambda x: x[1], + zip(["name", "version", "id"], distro.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: + data["openssl_version"] = ssl.OPENSSL_VERSION + + setuptools_version = get_installed_version("setuptools") + if setuptools_version is not None: + data["setuptools_version"] = setuptools_version + + # 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 MultiDomainBasicAuth(AuthBase): + + def __init__(self, prompting=True): + # type: (bool) -> None + self.prompting = prompting + self.passwords = {} # type: Dict[str, AuthInfo] + + def __call__(self, req): + parsed = urllib_parse.urlparse(req.url) + + # Split the credentials from the netloc. + netloc, url_user_password = split_auth_from_netloc(parsed.netloc) + + # Set the url of the request to the url without any credentials + req.url = urllib_parse.urlunparse(parsed[:1] + (netloc,) + parsed[2:]) + + # Use any stored credentials that we have for this netloc + username, password = self.passwords.get(netloc, (None, None)) + + # Use the credentials embedded in the url if we have none stored + if username is None: + username, password = url_user_password + + # Get creds from netrc if we still don't have them + if username is None and password is None: + netrc_auth = get_netrc_auth(req.url) + username, password = netrc_auth if netrc_auth else (None, None) + + if username or password: + # Store the username and password + self.passwords[netloc] = (username, password) + + # Send the basic auth with this request + req = HTTPBasicAuth(username or "", password or "")(req) + + # Attach a hook to handle 401 responses + req.register_hook("response", self.handle_401) + + return req + + def handle_401(self, resp, **kwargs): + # We only care about 401 responses, anything else we want to just + # pass through the actual response + if resp.status_code != 401: + return resp + + # We are not able to prompt the user so simply return the response + if not self.prompting: + return resp + + parsed = urllib_parse.urlparse(resp.url) + + # Prompt the user for a new username and password + username = six.moves.input("User for %s: " % parsed.netloc) + password = getpass.getpass("Password: ") + + # Store the new username and password to use for future requests + if username or password: + self.passwords[parsed.netloc] = (username, password) + + # Consume content and release the original connection to allow our new + # request to reuse the same one. + 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) + + # 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, **kwargs): + # warn user that they provided incorrect credentials + if resp.status_code == 401: + logger.warning('401 Error, Credentials not correct for %s', + resp.request.url) + + +class LocalFSAdapter(BaseAdapter): + + def send(self, request, stream=None, timeout=None, verify=None, cert=None, + proxies=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: + resp.status_code = 404 + resp.raw = exc + 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": stats.st_size, + "Last-Modified": modified, + }) + + resp.raw = open(pathname, "rb") + resp.close = resp.raw.close + + return resp + + def close(self): + pass + + +class SafeFileCache(FileCache): + """ + A file based cache which is safe to use even when the target directory may + not be accessible or writable. + """ + + def __init__(self, *args, **kwargs): + super(SafeFileCache, self).__init__(*args, **kwargs) + + # Check to ensure that the directory containing our cache directory + # is owned by the user current executing pip. If it does not exist + # we will check the parent directory until we find one that does exist. + # If it is not owned by the user executing pip then we will disable + # the cache and log a warning. + if not check_path_owner(self.directory): + logger.warning( + "The directory '%s' or its parent directory is not owned by " + "the current user and the cache has been disabled. Please " + "check the permissions and owner of that directory. If " + "executing pip with sudo, you may want sudo's -H flag.", + self.directory, + ) + + # Set our directory to None to disable the Cache + self.directory = None + + def get(self, *args, **kwargs): + # If we don't have a directory, then the cache should be a no-op. + if self.directory is None: + return + + try: + return super(SafeFileCache, self).get(*args, **kwargs) + except (LockError, OSError, IOError): + # We intentionally silence this error, if we can't access the cache + # then we can just skip caching and process the request as if + # caching wasn't enabled. + pass + + def set(self, *args, **kwargs): + # If we don't have a directory, then the cache should be a no-op. + if self.directory is None: + return + + try: + return super(SafeFileCache, self).set(*args, **kwargs) + except (LockError, OSError, IOError): + # We intentionally silence this error, if we can't access the cache + # then we can just skip caching and process the request as if + # caching wasn't enabled. + pass + + def delete(self, *args, **kwargs): + # If we don't have a directory, then the cache should be a no-op. + if self.directory is None: + return + + try: + return super(SafeFileCache, self).delete(*args, **kwargs) + except (LockError, OSError, IOError): + # We intentionally silence this error, if we can't access the cache + # then we can just skip caching and process the request as if + # caching wasn't enabled. + pass + + +class InsecureHTTPAdapter(HTTPAdapter): + + def cert_verify(self, conn, url, verify, cert): + conn.cert_reqs = 'CERT_NONE' + conn.ca_certs = None + + +class PipSession(requests.Session): + + timeout = None # type: Optional[int] + + def __init__(self, *args, **kwargs): + retries = kwargs.pop("retries", 0) + cache = kwargs.pop("cache", None) + insecure_hosts = kwargs.pop("insecure_hosts", []) + + super(PipSession, self).__init__(*args, **kwargs) + + # Attach our User Agent to the request + self.headers["User-Agent"] = user_agent() + + # Attach our Authentication handler to the session + self.auth = MultiDomainBasicAuth() + + # 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 520 or 527 - may indicate transient error in CloudFlare + status_forcelist=[500, 503, 520, 527], + + # Add a small amount of back off between failed requests in + # order to prevent hammering the service. + backoff_factor=0.25, + ) + + # We want to _only_ cache responses on securely fetched origins. We do + # this because we can't validate the response of an insecurely 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. + if cache: + secure_adapter = CacheControlAdapter( + cache=SafeFileCache(cache, use_dir_lock=True), + max_retries=retries, + ) + else: + secure_adapter = HTTPAdapter(max_retries=retries) + + # Our Insecure HTTPAdapter disables HTTPS validation. It does not + # support caching (see above) so we'll use it for all http:// URLs as + # well as any https:// host that we've marked as ignoring TLS errors + # for. + insecure_adapter = InsecureHTTPAdapter(max_retries=retries) + + self.mount("https://", secure_adapter) + self.mount("http://", insecure_adapter) + + # Enable file:// urls + self.mount("file://", LocalFSAdapter()) + + # We want to use a non-validating adapter for any requests which are + # deemed insecure. + for host in insecure_hosts: + self.mount("https://{}/".format(host), insecure_adapter) + + def request(self, method, url, *args, **kwargs): + # Allow setting a default timeout on a session + kwargs.setdefault("timeout", self.timeout) + + # Dispatch the actual request + return super(PipSession, self).request(method, url, *args, **kwargs) + + +def get_file_content(url, comes_from=None, session=None): + # type: (str, Optional[str], Optional[PipSession]) -> Tuple[str, Text] + """Gets the content of a file; it may be a filename, file: URL, or + http: URL. Returns (location, content). Content is unicode. + + :param url: File path or url. + :param comes_from: Origin description of requirements. + :param session: Instance of pip.download.PipSession. + """ + if session is None: + raise TypeError( + "get_file_content() missing 1 required keyword argument: 'session'" + ) + + match = _scheme_re.search(url) + if match: + scheme = match.group(1).lower() + if (scheme == 'file' and comes_from and + comes_from.startswith('http')): + raise InstallationError( + 'Requirements file %s references URL %s, which is local' + % (comes_from, url)) + if scheme == 'file': + path = url.split(':', 1)[1] + path = path.replace('\\', '/') + match = _url_slash_drive_re.match(path) + if match: + path = match.group(1) + ':' + path.split('|', 1)[1] + path = urllib_parse.unquote(path) + if path.startswith('/'): + path = '/' + path.lstrip('/') + url = path + else: + # FIXME: catch some errors + resp = session.get(url) + resp.raise_for_status() + return resp.url, resp.text + try: + with open(url, 'rb') as f: + content = auto_decode(f.read()) + except IOError as exc: + raise InstallationError( + 'Could not open requirements file: %s' % str(exc) + ) + return url, content + + +_scheme_re = re.compile(r'^(http|https|file):', re.I) +_url_slash_drive_re = re.compile(r'/*([a-z])\|', re.I) + + +def is_url(name): + # type: (Union[str, Text]) -> bool + """Returns true if the name looks like a URL""" + if ':' not in name: + return False + scheme = name.split(':', 1)[0].lower() + return scheme in ['http', 'https', 'file', 'ftp'] + vcs.all_schemes + + +def url_to_path(url): + # type: (str) -> str + """ + Convert a file: URL to a path. + """ + assert url.startswith('file:'), ( + "You can only turn file: urls into filenames (not %r)" % url) + + _, netloc, path, _, _ = urllib_parse.urlsplit(url) + + if not netloc or netloc == 'localhost': + # According to RFC 8089, same as empty authority. + netloc = '' + elif sys.platform == 'win32': + # If we have a UNC path, prepend UNC share notation. + netloc = '\\\\' + netloc + else: + raise ValueError( + 'non-local file URIs are not supported on this platform: %r' + % url + ) + + path = urllib_request.url2pathname(netloc + path) + return path + + +def path_to_url(path): + # type: (Union[str, Text]) -> 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 is_archive_file(name): + # type: (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 + + +def unpack_vcs_link(link, location): + vcs_backend = _get_used_vcs_backend(link) + vcs_backend.unpack(location) + + +def _get_used_vcs_backend(link): + for backend in vcs.backends: + if link.scheme in backend.schemes: + vcs_backend = backend(link.url) + return vcs_backend + + +def is_vcs_url(link): + # type: (Link) -> bool + return bool(_get_used_vcs_backend(link)) + + +def is_file_url(link): + # type: (Link) -> bool + return link.url.lower().startswith('file:') + + +def is_dir_url(link): + # type: (Link) -> bool + """Return whether a file:// Link points to a directory. + + ``link`` must not have any other scheme but file://. Call is_file_url() + first. + + """ + link_path = url_to_path(link.url_without_fragment) + return os.path.isdir(link_path) + + +def _progress_indicator(iterable, *args, **kwargs): + return iterable + + +def _download_url( + resp, # type: Response + link, # type: Link + content_file, # type: IO + hashes, # type: Hashes + progress_bar # type: str +): + # type: (...) -> None + try: + total_length = int(resp.headers['content-length']) + except (ValueError, KeyError, TypeError): + total_length = 0 + + cached_resp = getattr(resp, "from_cache", False) + if logger.getEffectiveLevel() > logging.INFO: + show_progress = False + elif cached_resp: + show_progress = False + elif total_length > (40 * 1000): + show_progress = True + elif not total_length: + show_progress = True + else: + show_progress = False + + show_url = link.show_url + + def resp_read(chunk_size): + try: + # Special case for urllib3. + for chunk in resp.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 = resp.raw.read(chunk_size) + if not chunk: + break + yield chunk + + def written_chunks(chunks): + for chunk in chunks: + content_file.write(chunk) + yield chunk + + progress_indicator = _progress_indicator + + if link.netloc == PyPI.netloc: + url = show_url + else: + url = link.url_without_fragment + + if show_progress: # We don't show progress on cached responses + progress_indicator = DownloadProgressProvider(progress_bar, + max=total_length) + if total_length: + logger.info("Downloading %s (%s)", url, format_size(total_length)) + else: + logger.info("Downloading %s", url) + elif cached_resp: + logger.info("Using cached %s", url) + else: + logger.info("Downloading %s", url) + + logger.debug('Downloading from URL %s', link) + + downloaded_chunks = written_chunks( + progress_indicator( + resp_read(CONTENT_CHUNK_SIZE), + CONTENT_CHUNK_SIZE + ) + ) + if hashes: + hashes.check_against_chunks(downloaded_chunks) + else: + consume(downloaded_chunks) + + +def _copy_file(filename, location, link): + copy = True + download_location = os.path.join(location, link.filename) + if os.path.exists(download_location): + response = ask_path_exists( + 'The file %s exists. (i)gnore, (w)ipe, (b)ackup, (a)abort' % + display_path(download_location), ('i', 'w', 'b', 'a')) + if response == 'i': + copy = False + elif response == 'w': + logger.warning('Deleting %s', display_path(download_location)) + os.remove(download_location) + elif response == 'b': + dest_file = backup_dir(download_location) + logger.warning( + 'Backing up %s to %s', + display_path(download_location), + display_path(dest_file), + ) + shutil.move(download_location, dest_file) + elif response == 'a': + sys.exit(-1) + if copy: + shutil.copy(filename, download_location) + logger.info('Saved %s', display_path(download_location)) + + +def unpack_http_url( + link, # type: Link + location, # type: str + download_dir=None, # type: Optional[str] + session=None, # type: Optional[PipSession] + hashes=None, # type: Optional[Hashes] + progress_bar="on" # type: str +): + # type: (...) -> None + if session is None: + raise TypeError( + "unpack_http_url() missing 1 required keyword argument: 'session'" + ) + + with TempDirectory(kind="unpack") as temp_dir: + # 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 = mimetypes.guess_type(from_path)[0] + else: + # let's download to a tmp dir + from_path, content_type = _download_http_url(link, + session, + temp_dir.path, + hashes, + progress_bar) + + # unpack the archive to the build dir location. even when only + # downloading archives, they have to be unpacked to parse dependencies + unpack_file(from_path, location, content_type, link) + + # a download dir is specified; let's copy the archive there + if download_dir and not already_downloaded_path: + _copy_file(from_path, download_dir, link) + + if not already_downloaded_path: + os.unlink(from_path) + + +def unpack_file_url( + link, # type: Link + location, # type: str + download_dir=None, # type: Optional[str] + hashes=None # type: Optional[Hashes] +): + # type: (...) -> None + """Unpack link into location. + + If download_dir is provided and link points to a file, make a copy + of the link file inside download_dir. + """ + link_path = url_to_path(link.url_without_fragment) + + # If it's a url to a local directory + if is_dir_url(link): + if os.path.isdir(location): + rmtree(location) + shutil.copytree(link_path, location, symlinks=True) + if download_dir: + logger.info('Link is a directory, ignoring download_dir') + return + + # 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(link_path) + + # 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_path + + content_type = mimetypes.guess_type(from_path)[0] + + # unpack the archive to the build dir location. even when only downloading + # archives, they have to be unpacked to parse dependencies + unpack_file(from_path, location, content_type, link) + + # a download dir is specified and not already downloaded + if download_dir and not already_downloaded_path: + _copy_file(from_path, download_dir, link) + + +class PipXmlrpcTransport(xmlrpc_client.Transport): + """Provide a `xmlrpclib.Transport` implementation via a `PipSession` + object. + """ + + def __init__(self, index_url, session, use_datetime=False): + xmlrpc_client.Transport.__init__(self, use_datetime) + index_parts = urllib_parse.urlparse(index_url) + self._scheme = index_parts.scheme + self._session = session + + def request(self, host, handler, request_body, verbose=False): + 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) + response.raise_for_status() + self.verbose = verbose + return self.parse_response(response.raw) + except requests.HTTPError as exc: + logger.critical( + "HTTP error %s while getting %s", + exc.response.status_code, url, + ) + raise + + +def unpack_url( + link, # type: Optional[Link] + location, # type: Optional[str] + download_dir=None, # type: Optional[str] + only_download=False, # type: bool + session=None, # type: Optional[PipSession] + hashes=None, # type: Optional[Hashes] + progress_bar="on" # type: str +): + # type: (...) -> None + """Unpack link. + If link is a VCS link: + if only_download, export into download_dir and ignore location + else unpack into location + for other types of link: + - unpack into location + - if download_dir, copy the file into download_dir + - if only_download, mark location for deletion + + :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 is_vcs_url(link): + unpack_vcs_link(link, location) + + # file urls + elif is_file_url(link): + unpack_file_url(link, location, download_dir, hashes=hashes) + + # http urls + else: + if session is None: + session = PipSession() + + unpack_http_url( + link, + location, + download_dir, + session, + hashes=hashes, + progress_bar=progress_bar + ) + if only_download: + write_delete_marker_file(location) + + +def _download_http_url( + link, # type: Link + session, # type: PipSession + temp_dir, # type: str + hashes, # type: Hashes + progress_bar # type: str +): + # type: (...) -> Tuple[str, str] + """Download link url into temp_dir using provided session""" + target_url = link.url.split('#', 1)[0] + try: + resp = session.get( + target_url, + # 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 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 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={"Accept-Encoding": "identity"}, + stream=True, + ) + resp.raise_for_status() + except requests.HTTPError as exc: + logger.critical( + "HTTP error %s while getting %s", exc.response.status_code, link, + ) + raise + + content_type = resp.headers.get('content-type', '') + 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: + type, params = cgi.parse_header(content_disposition) + # We use ``or`` here because we don't want to use an "empty" value + # from the filename param. + filename = params.get('filename') or filename + ext = splitext(filename)[1] + if not ext: + ext = mimetypes.guess_extension(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 + file_path = os.path.join(temp_dir, filename) + with open(file_path, 'wb') as content_file: + _download_url(resp, link, content_file, hashes, progress_bar) + return file_path, content_type + + +def _check_download_dir(link, download_dir, hashes): + # type: (Link, str, Hashes) -> Optional[str] + """ 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 os.path.exists(download_path): + # 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: + logger.warning( + 'Previously-downloaded file %s has bad hash. ' + 'Re-downloading.', + download_path + ) + os.unlink(download_path) + return None + return download_path + return None diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/exceptions.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/exceptions.py new file mode 100644 index 00000000..7b291a1e --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/exceptions.py @@ -0,0 +1,274 @@ +"""Exceptions used throughout package""" +from __future__ import absolute_import + +from itertools import chain, groupby, repeat + +from pip._vendor.six import iteritems + +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from typing import Optional + from pip._internal.req.req_install import InstallRequirement + + +class PipError(Exception): + """Base pip exception""" + + +class ConfigurationError(PipError): + """General exception in configuration""" + + +class InstallationError(PipError): + """General exception during installation""" + + +class UninstallationError(PipError): + """General exception during uninstallation""" + + +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 InvalidWheelFilename(InstallationError): + """Invalid wheel filename.""" + + +class UnsupportedWheel(InstallationError): + """Unsupported wheel.""" + + +class HashErrors(InstallationError): + """Multiple HashError instances rolled into one for reporting""" + + def __init__(self): + self.errors = [] + + def append(self, error): + self.errors.append(error) + + def __str__(self): + 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) + + def __nonzero__(self): + return bool(self.errors) + + def __bool__(self): + return self.__nonzero__() + + +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 = None # type: Optional[InstallRequirement] + head = '' + + def body(self): + """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 + populate_link() having already been called + + """ + return ' %s' % self._requirement_name() + + def __str__(self): + return '%s\n%s' % (self.head, self.body()) + + def _requirement_name(self): + """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): + """ + :param gotten_hash: The hash of the (possibly malicious) archive we + just downloaded + """ + self.gotten_hash = gotten_hash + + def body(self): + # 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.original_link + # In case someone feeds something downright stupid + # to InstallRequirement's constructor. + else getattr(self.req, 'req', None)) + return ' %s --hash=%s:%s' % (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, gots): + """ + :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): + return ' %s:\n%s' % (self._requirement_name(), + self._hash_comparison()) + + def _hash_comparison(self): + """ + Return a comparison of actual and expected hash values. + + Example:: + + Expected sha256 abcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcde + or 123451234512345123451234512345123451234512345 + Got bcdefbcdefbcdefbcdefbcdefbcdefbcdefbcdefbcdef + + """ + def hash_then_or(hash_name): + # 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 = [] + for hash_name, expecteds in iteritems(self.allowed): + prefix = hash_then_or(hash_name) + lines.extend((' Expected %s %s' % (next(prefix), e)) + for e in expecteds) + lines.append(' Got %s\n' % + self.gots[hash_name].hexdigest()) + prefix = ' or' + 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="could not be loaded", fname=None, error=None): + super(ConfigurationFileCouldNotBeLoaded, self).__init__(error) + self.reason = reason + self.fname = fname + self.error = error + + def __str__(self): + if self.fname is not None: + message_part = " in {}.".format(self.fname) + else: + assert self.error is not None + message_part = ".\n{}\n".format(self.error.message) + return "Configuration file {}{}".format(self.reason, message_part) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/index.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/index.py new file mode 100644 index 00000000..ff614b34 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/index.py @@ -0,0 +1,1108 @@ +"""Routines related to PyPI, indexes""" +from __future__ import absolute_import + +import cgi +import itertools +import logging +import mimetypes +import os +import posixpath +import re +import sys +from collections import namedtuple + +from pip._vendor import html5lib, requests, six +from pip._vendor.distlib.compat import unescape +from pip._vendor.packaging import specifiers +from pip._vendor.packaging.utils import canonicalize_name +from pip._vendor.packaging.version import parse as parse_version +from pip._vendor.requests.exceptions import HTTPError, RetryError, SSLError +from pip._vendor.six.moves.urllib import parse as urllib_parse +from pip._vendor.six.moves.urllib import request as urllib_request + +from pip._internal.download import HAS_TLS, is_url, path_to_url, url_to_path +from pip._internal.exceptions import ( + BestVersionAlreadyInstalled, DistributionNotFound, InvalidWheelFilename, + UnsupportedWheel, +) +from pip._internal.models.candidate import InstallationCandidate +from pip._internal.models.format_control import FormatControl +from pip._internal.models.index import PyPI +from pip._internal.models.link import Link +from pip._internal.pep425tags import get_supported +from pip._internal.utils.compat import ipaddress +from pip._internal.utils.logging import indent_log +from pip._internal.utils.misc import ( + ARCHIVE_EXTENSIONS, SUPPORTED_EXTENSIONS, WHEEL_EXTENSION, normalize_path, + redact_password_from_url, +) +from pip._internal.utils.packaging import check_requires_python +from pip._internal.utils.typing import MYPY_CHECK_RUNNING +from pip._internal.wheel import Wheel + +if MYPY_CHECK_RUNNING: + from logging import Logger + from typing import ( + Tuple, Optional, Any, List, Union, Callable, Set, Sequence, + Iterable, MutableMapping + ) + from pip._vendor.packaging.version import _BaseVersion + from pip._vendor.requests import Response + from pip._internal.pep425tags import Pep425Tag + from pip._internal.req import InstallRequirement + from pip._internal.download import PipSession + + SecureOrigin = Tuple[str, str, Optional[str]] + BuildTag = Tuple[Any, ...] # either empty tuple or Tuple[int, str] + CandidateSortingKey = Tuple[int, _BaseVersion, BuildTag, Optional[int]] + + +__all__ = ['FormatControl', 'FoundCandidates', 'PackageFinder'] + + +SECURE_ORIGINS = [ + # 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", "*", "*"), +] # type: List[SecureOrigin] + + +logger = logging.getLogger(__name__) + + +def _match_vcs_scheme(url): + # type: (str) -> Optional[str] + """Look for VCS schemes in the URL. + + Returns the matched VCS scheme, or None if there's no match. + """ + from pip._internal.vcs import VcsSupport + for scheme in VcsSupport.schemes: + if url.lower().startswith(scheme) and url[len(scheme)] in '+:': + return scheme + return None + + +def _is_url_like_archive(url): + # type: (str) -> bool + """Return whether the URL looks like an archive. + """ + filename = Link(url).filename + for bad_ext in ARCHIVE_EXTENSIONS: + if filename.endswith(bad_ext): + return True + return False + + +class _NotHTML(Exception): + def __init__(self, content_type, request_desc): + # type: (str, str) -> None + super(_NotHTML, self).__init__(content_type, request_desc) + self.content_type = content_type + self.request_desc = request_desc + + +def _ensure_html_header(response): + # type: (Response) -> None + """Check the Content-Type header to ensure the response contains HTML. + + Raises `_NotHTML` if the content type is not text/html. + """ + content_type = response.headers.get("Content-Type", "") + if not content_type.lower().startswith("text/html"): + raise _NotHTML(content_type, response.request.method) + + +class _NotHTTP(Exception): + pass + + +def _ensure_html_response(url, session): + # type: (str, PipSession) -> None + """Send a HEAD request to the URL, and ensure the response contains HTML. + + Raises `_NotHTTP` if the URL is not available for a HEAD request, or + `_NotHTML` if the content type is not text/html. + """ + scheme, netloc, path, query, fragment = urllib_parse.urlsplit(url) + if scheme not in {'http', 'https'}: + raise _NotHTTP() + + resp = session.head(url, allow_redirects=True) + resp.raise_for_status() + + _ensure_html_header(resp) + + +def _get_html_response(url, session): + # type: (str, PipSession) -> Response + """Access an HTML page 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, to avoid downloading a large file. + Raise `_NotHTTP` if the content type cannot be determined, or + `_NotHTML` if it is not HTML. + 2. Actually perform the request. Raise HTTP exceptions on network failures. + 3. Check the Content-Type header to make sure we got HTML, and raise + `_NotHTML` otherwise. + """ + if _is_url_like_archive(url): + _ensure_html_response(url, session=session) + + logger.debug('Getting page %s', redact_password_from_url(url)) + + resp = session.get( + url, + headers={ + "Accept": "text/html", + # 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", + }, + ) + resp.raise_for_status() + + # 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 HTML + # or not. However we can check after we've downloaded it. + _ensure_html_header(resp) + + return resp + + +def _handle_get_page_fail( + link, # type: Link + reason, # type: Union[str, Exception] + meth=None # type: Optional[Callable[..., None]] +): + # type: (...) -> None + if meth is None: + meth = logger.debug + meth("Could not fetch URL %s: %s - skipping", link, reason) + + +def _get_html_page(link, session=None): + # type: (Link, Optional[PipSession]) -> Optional[HTMLPage] + if session is None: + raise TypeError( + "_get_html_page() missing 1 required keyword argument: 'session'" + ) + + 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.debug('Cannot look at %s URL %s', vcs_scheme, link) + return None + + # Tack index.html onto file:// URLs that point to directories + scheme, _, path, _, _, _ = urllib_parse.urlparse(url) + if (scheme == 'file' and os.path.isdir(urllib_request.url2pathname(path))): + # add trailing slash if not present so urljoin doesn't trim + # final segment + if not url.endswith('/'): + url += '/' + url = urllib_parse.urljoin(url, 'index.html') + logger.debug(' file: URL is directory, getting %s', url) + + try: + resp = _get_html_response(url, session=session) + except _NotHTTP: + logger.debug( + 'Skipping page %s because it looks like an archive, and cannot ' + 'be checked by HEAD.', link, + ) + except _NotHTML as exc: + logger.debug( + 'Skipping page %s because the %s request got Content-Type: %s', + link, exc.request_desc, exc.content_type, + ) + except HTTPError as exc: + _handle_get_page_fail(link, exc) + except RetryError as exc: + _handle_get_page_fail(link, exc) + except SSLError as exc: + reason = "There was a problem confirming the ssl certificate: " + reason += str(exc) + _handle_get_page_fail(link, reason, meth=logger.info) + except requests.ConnectionError as exc: + _handle_get_page_fail(link, "connection error: %s" % exc) + except requests.Timeout: + _handle_get_page_fail(link, "timed out") + else: + return HTMLPage(resp.content, resp.url, resp.headers) + return None + + +class CandidateEvaluator(object): + + def __init__( + self, + valid_tags, # type: List[Pep425Tag] + prefer_binary=False # type: bool + + ): + # type: (...) -> None + self._prefer_binary = prefer_binary + self._valid_tags = valid_tags + + def is_wheel_supported(self, wheel): + # type: (Wheel) -> bool + return wheel.supported(self._valid_tags) + + def _sort_key(self, candidate): + # type: (InstallationCandidate) -> CandidateSortingKey + """ + Function used to generate link sort key for link tuples. + The greater the return value, the more preferred it is. + If not finding wheels, then 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._valid_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 + """ + support_num = len(self._valid_tags) + build_tag = tuple() # type: BuildTag + binary_preference = 0 + if candidate.location.is_wheel: + # can raise InvalidWheelFilename + wheel = Wheel(candidate.location.filename) + if not wheel.supported(self._valid_tags): + raise UnsupportedWheel( + "%s is not a supported wheel for this platform. It " + "can't be sorted." % wheel.filename + ) + if self._prefer_binary: + binary_preference = 1 + pri = -(wheel.support_index_min(self._valid_tags)) + if wheel.build_tag is not None: + match = re.match(r'^(\d+)(.*)$', wheel.build_tag) + build_tag_groups = match.groups() + build_tag = (int(build_tag_groups[0]), build_tag_groups[1]) + else: # sdist + pri = -(support_num) + return (binary_preference, candidate.version, build_tag, pri) + + def get_best_candidate(self, candidates): + # type: (List[InstallationCandidate]) -> InstallationCandidate + """ + Return the best candidate per the instance's sort order, or None if + no candidates are given. + """ + if not candidates: + return None + + return max(candidates, key=self._sort_key) + + +class FoundCandidates(object): + """A collection of candidates, returned by `PackageFinder.find_candidates`. + + This class is only intended to be instantiated by PackageFinder through + the `from_specifier()` constructor. + + Arguments: + + * `candidates`: A sequence of all available candidates found. + * `specifier`: Specifier to filter applicable versions. + * `prereleases`: Whether prereleases should be accounted. Pass None to + infer from the specifier. + * `evaluator`: A CandidateEvaluator object to sort applicable candidates + by order of preference. + """ + + def __init__( + self, + candidates, # type: List[InstallationCandidate] + versions, # type: Set[str] + evaluator, # type: CandidateEvaluator + ): + # type: (...) -> None + self._candidates = candidates + self._evaluator = evaluator + self._versions = versions + + @classmethod + def from_specifier( + cls, + candidates, # type: List[InstallationCandidate] + specifier, # type: specifiers.BaseSpecifier + prereleases, # type: Optional[bool] + evaluator, # type: CandidateEvaluator + ): + # type: (...) -> FoundCandidates + versions = { + str(v) for v in specifier.filter( + # 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(). + (str(c.version) for c in candidates), + prereleases=prereleases, + ) + } + return cls(candidates, versions, evaluator) + + def iter_all(self): + # type: () -> Iterable[InstallationCandidate] + """Iterate through all candidates. + """ + return iter(self._candidates) + + def iter_applicable(self): + # type: () -> Iterable[InstallationCandidate] + """Iterate through candidates matching the versions associated with + this instance. + """ + # Again, converting version to str to deal with debundling. + return (c for c in self.iter_all() if str(c.version) in self._versions) + + def get_best(self): + # type: () -> Optional[InstallationCandidate] + """Return the best candidate available, or None if no applicable + candidates are found. + """ + candidates = list(self.iter_applicable()) + return self._evaluator.get_best_candidate(candidates) + + +class PackageFinder(object): + """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, + find_links, # type: List[str] + index_urls, # type: List[str] + allow_all_prereleases=False, # type: bool + trusted_hosts=None, # type: Optional[Iterable[str]] + session=None, # type: Optional[PipSession] + format_control=None, # type: Optional[FormatControl] + platform=None, # type: Optional[str] + versions=None, # type: Optional[List[str]] + abi=None, # type: Optional[str] + implementation=None, # type: Optional[str] + prefer_binary=False # type: bool + ): + # type: (...) -> None + """Create a PackageFinder. + + :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 platform: A string or None. If None, searches for packages + that are supported by the current system. Otherwise, will find + packages that can be built on the platform passed in. These + packages will only be downloaded for distribution: they will + not be built locally. + :param versions: A list of strings or None. This is passed directly + to pep425tags.py in the get_supported() method. + :param abi: A string or None. This is passed directly + to pep425tags.py in the get_supported() method. + :param implementation: A string or None. This is passed directly + to pep425tags.py in the get_supported() method. + :param prefer_binary: Whether to prefer an old, but valid, binary + dist over a new source dist. + """ + if session is None: + raise TypeError( + "PackageFinder() missing 1 required keyword argument: " + "'session'" + ) + + # 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 ~... + self.find_links = [] # type: List[str] + for link in find_links: + if link.startswith('~'): + new_link = normalize_path(link) + if os.path.exists(new_link): + link = new_link + self.find_links.append(link) + + self.index_urls = index_urls + + # These are boring links that have already been logged somehow: + self.logged_links = set() # type: Set[Link] + + self.format_control = format_control or FormatControl(set(), set()) + + # Domains that we won't emit warnings for when not using HTTPS + self.secure_origins = [ + ("*", host, "*") + for host in (trusted_hosts if trusted_hosts else []) + ] # type: List[SecureOrigin] + + # Do we want to allow _all_ pre-releases? + self.allow_all_prereleases = allow_all_prereleases + + # The Session we'll use to make requests + self.session = session + + # The valid tags to check potential found wheel candidates against + valid_tags = get_supported( + versions=versions, + platform=platform, + abi=abi, + impl=implementation, + ) + self.candidate_evaluator = CandidateEvaluator( + valid_tags=valid_tags, prefer_binary=prefer_binary, + ) + + # 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(self.index_urls, self.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 + + def get_formatted_locations(self): + # type: () -> str + lines = [] + if self.index_urls and self.index_urls != [PyPI.simple_url]: + lines.append( + "Looking in indexes: {}".format(", ".join( + redact_password_from_url(url) for url in self.index_urls)) + ) + if self.find_links: + lines.append( + "Looking in links: {}".format(", ".join(self.find_links)) + ) + return "\n".join(lines) + + @staticmethod + def _sort_locations(locations, expand_dir=False): + # type: (Sequence[str], bool) -> Tuple[List[str], List[str]] + """ + Sort locations into "files" (archives) and "urls", and return + a pair of lists (files,urls) + """ + files = [] + urls = [] + + # puts the url for the given file path into the appropriate list + def sort_path(path): + url = path_to_url(path) + if mimetypes.guess_type(url, strict=False)[0] == 'text/html': + urls.append(url) + else: + files.append(url) + + for url in locations: + + is_local_path = os.path.exists(url) + is_file_url = url.startswith('file:') + + if is_local_path or is_file_url: + if is_local_path: + path = url + else: + path = url_to_path(url) + if os.path.isdir(path): + if expand_dir: + path = os.path.realpath(path) + for item in os.listdir(path): + sort_path(os.path.join(path, item)) + elif is_file_url: + urls.append(url) + else: + logger.warning( + "Path '{0}' is ignored: " + "it is a directory.".format(path), + ) + elif os.path.isfile(path): + sort_path(path) + else: + logger.warning( + "Url '%s' is ignored: it is neither a file " + "nor a directory.", url, + ) + elif is_url(url): + # Only add url with clear scheme + urls.append(url) + else: + logger.warning( + "Url '%s' is ignored. It is either a non-existing " + "path or lacks a specific scheme.", url, + ) + + return files, urls + + def _validate_secure_origin(self, logger, location): + # type: (Logger, Link) -> bool + # Determine if this url used a secure transport mechanism + parsed = urllib_parse.urlparse(str(location)) + origin = (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.) + protocol = origin[0].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 (SECURE_ORIGINS + self.secure_origins): + if protocol != secure_origin[0] and secure_origin[0] != "*": + continue + + try: + # We need to do this decode dance to ensure that we have a + # unicode object, even on Python 2.x. + addr = ipaddress.ip_address( + origin[1] + if ( + isinstance(origin[1], six.text_type) or + origin[1] is None + ) + else origin[1].decode("utf8") + ) + network = ipaddress.ip_network( + secure_origin[1] + if isinstance(secure_origin[1], six.text_type) + # setting secure_origin[1] to proper Union[bytes, str] + # creates problems in other places + else secure_origin[1].decode("utf8") # type: ignore + ) + except ValueError: + # We don't have both a valid address or a valid network, so + # we'll check this origin against hostnames. + if (origin[1] and + origin[1].lower() != secure_origin[1].lower() and + secure_origin[1] != "*"): + 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 patches + if (origin[2] != secure_origin[2] and + secure_origin[2] != "*" and + secure_origin[2] 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'.", + parsed.hostname, + parsed.hostname, + ) + + return False + + def _get_index_urls_locations(self, project_name): + # type: (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): + 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] + + def find_all_candidates(self, project_name): + # type: (str) -> List[Optional[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 _link_package_versions for details on which files are accepted + """ + index_locations = self._get_index_urls_locations(project_name) + index_file_loc, index_url_loc = self._sort_locations(index_locations) + fl_file_loc, fl_url_loc = self._sort_locations( + self.find_links, expand_dir=True, + ) + + file_locations = (Link(url) for url in itertools.chain( + index_file_loc, fl_file_loc, + )) + + # We trust every url that the user has given us whether it was given + # via --index-url or --find-links. + # We want to filter out any thing which does not have a secure origin. + url_locations = [ + link for link in itertools.chain( + (Link(url) for url in index_url_loc), + (Link(url) for url in fl_url_loc), + ) + if self._validate_secure_origin(logger, link) + ] + + logger.debug('%d location(s) to search for versions of %s:', + len(url_locations), project_name) + + for location in url_locations: + logger.debug('* %s', location) + + canonical_name = canonicalize_name(project_name) + formats = self.format_control.get_allowed_formats(canonical_name) + search = Search(project_name, canonical_name, formats) + find_links_versions = self._package_versions( + # We trust every directly linked archive in find_links + (Link(url, '-f') for url in self.find_links), + search + ) + + page_versions = [] + for page in self._get_pages(url_locations, project_name): + logger.debug('Analyzing links from page %s', page.url) + with indent_log(): + page_versions.extend( + self._package_versions(page.iter_links(), search) + ) + + file_versions = self._package_versions(file_locations, search) + if file_versions: + file_versions.sort(reverse=True) + logger.debug( + 'Local files found: %s', + ', '.join([ + url_to_path(candidate.location.url) + for candidate in file_versions + ]) + ) + + # This is an intentional priority ordering + return file_versions + find_links_versions + page_versions + + def find_candidates( + self, + project_name, # type: str + specifier=None, # type: Optional[specifiers.BaseSpecifier] + ): + """Find matches for the given project and specifier. + + If given, `specifier` should implement `filter` to allow version + filtering (e.g. ``packaging.specifiers.SpecifierSet``). + + Returns a `FoundCandidates` instance. + """ + if specifier is None: + specifier = specifiers.SpecifierSet() + return FoundCandidates.from_specifier( + self.find_all_candidates(project_name), + specifier=specifier, + prereleases=(self.allow_all_prereleases or None), + evaluator=self.candidate_evaluator, + ) + + def find_requirement(self, req, upgrade): + # type: (InstallRequirement, bool) -> Optional[Link] + """Try to find a Link matching req + + Expects req, an InstallRequirement and upgrade, a boolean + Returns a Link if found, + Raises DistributionNotFound or BestVersionAlreadyInstalled otherwise + """ + candidates = self.find_candidates(req.name, req.specifier) + best_candidate = candidates.get_best() + + installed_version = None # type: Optional[_BaseVersion] + if req.satisfied_by is not None: + installed_version = parse_version(req.satisfied_by.version) + + def _format_versions(cand_iter): + # 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: + logger.critical( + 'Could not find a version that satisfies the requirement %s ' + '(from versions: %s)', + req, + _format_versions(candidates.iter_all()), + ) + + raise DistributionNotFound( + 'No matching distribution found for %s' % req + ) + + best_installed = False + if installed_version and ( + best_candidate is None or + best_candidate.version <= installed_version): + best_installed = True + + if not upgrade and installed_version is not None: + if best_installed: + logger.debug( + 'Existing installed version (%s) is most up-to-date and ' + 'satisfies requirement', + installed_version, + ) + else: + logger.debug( + 'Existing installed version (%s) satisfies requirement ' + '(most up-to-date version is %s)', + installed_version, + best_candidate.version, + ) + return None + + if best_installed: + # 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(candidates.iter_applicable()), + ) + raise BestVersionAlreadyInstalled + + logger.debug( + 'Using version %s (newest of versions: %s)', + best_candidate.version, + _format_versions(candidates.iter_applicable()), + ) + return best_candidate.location + + def _get_pages(self, locations, project_name): + # type: (Iterable[Link], str) -> Iterable[HTMLPage] + """ + Yields (page, page_url) from the given locations, skipping + locations that have errors. + """ + seen = set() # type: Set[Link] + for location in locations: + if location in seen: + continue + seen.add(location) + + page = _get_html_page(location, session=self.session) + if page is None: + continue + + yield page + + _py_version_re = re.compile(r'-py([123]\.?[0-9]?)$') + + def _sort_links(self, links): + # type: (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() # type: Set[Link] + 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 _package_versions( + self, + links, # type: Iterable[Link] + search # type: Search + ): + # type: (...) -> List[Optional[InstallationCandidate]] + result = [] + for link in self._sort_links(links): + v = self._link_package_versions(link, search) + if v is not None: + result.append(v) + return result + + def _log_skipped_link(self, link, reason): + # type: (Link, str) -> None + if link not in self.logged_links: + logger.debug('Skipping link %s; %s', link, reason) + self.logged_links.add(link) + + def _link_package_versions(self, link, search): + # type: (Link, Search) -> Optional[InstallationCandidate] + """Return an InstallationCandidate or None""" + version = None + if link.egg_fragment: + egg_info = link.egg_fragment + ext = link.ext + else: + egg_info, ext = link.splitext() + if not ext: + self._log_skipped_link(link, 'not a file') + return None + if ext not in SUPPORTED_EXTENSIONS: + self._log_skipped_link( + link, 'unsupported archive format: %s' % ext, + ) + return None + if "binary" not in search.formats and ext == WHEEL_EXTENSION: + self._log_skipped_link( + link, 'No binaries permitted for %s' % search.supplied, + ) + return None + if "macosx10" in link.path and ext == '.zip': + self._log_skipped_link(link, 'macosx10 one') + return None + if ext == WHEEL_EXTENSION: + try: + wheel = Wheel(link.filename) + except InvalidWheelFilename: + self._log_skipped_link(link, 'invalid wheel filename') + return None + if canonicalize_name(wheel.name) != search.canonical: + self._log_skipped_link( + link, 'wrong project name (not %s)' % search.supplied) + return None + + if not self.candidate_evaluator.is_wheel_supported(wheel): + self._log_skipped_link( + link, 'it is not compatible with this Python') + return None + + version = wheel.version + + # This should be up by the search.ok_binary check, but see issue 2700. + if "source" not in search.formats and ext != WHEEL_EXTENSION: + self._log_skipped_link( + link, 'No sources permitted for %s' % search.supplied, + ) + return None + + if not version: + version = _egg_info_matches(egg_info, search.canonical) + if not version: + self._log_skipped_link( + link, 'Missing project version for %s' % search.supplied) + return None + + match = self._py_version_re.search(version) + if match: + version = version[:match.start()] + py_version = match.group(1) + if py_version != sys.version[:3]: + self._log_skipped_link( + link, 'Python version is incorrect') + return None + try: + support_this_python = check_requires_python(link.requires_python) + except specifiers.InvalidSpecifier: + logger.debug("Package %s has an invalid Requires-Python entry: %s", + link.filename, link.requires_python) + support_this_python = True + + if not support_this_python: + logger.debug("The package %s is incompatible with the python " + "version in use. Acceptable python versions are: %s", + link, link.requires_python) + return None + logger.debug('Found link %s, version: %s', link, version) + + return InstallationCandidate(search.supplied, version, link) + + +def _find_name_version_sep(egg_info, canonical_name): + # type: (str, str) -> int + """Find the separator's index based on the package's canonical name. + + `egg_info` must be an egg info string for the given package, and + `canonical_name` must be 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:: + + >>> egg_info = 'foo__bar-1.0' + >>> canonical_name = 'foo-bar' + >>> _find_name_version_sep(egg_info, 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(egg_info): + if c != "-": + continue + if canonicalize_name(egg_info[:i]) == canonical_name: + return i + raise ValueError("{} does not match {}".format(egg_info, canonical_name)) + + +def _egg_info_matches(egg_info, canonical_name): + # type: (str, str) -> Optional[str] + """Pull the version part out of a string. + + :param egg_info: 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(egg_info, canonical_name) + 1 + except ValueError: + return None + version = egg_info[version_start:] + if not version: + return None + return version + + +def _determine_base_url(document, page_url): + """Determine the HTML document's base URL. + + This looks for a ```` tag in the HTML document. If present, its href + attribute denotes the base URL of anchor tags in the document. If there is + no such tag (or if it does not have a valid href attribute), the HTML + file's URL is used as the base URL. + + :param document: An HTML document representation. The current + implementation expects the result of ``html5lib.parse()``. + :param page_url: The URL of the HTML document. + """ + for base in document.findall(".//base"): + href = base.get("href") + if href is not None: + return href + return page_url + + +def _get_encoding_from_headers(headers): + """Determine if we have any encoding information in our headers. + """ + if headers and "Content-Type" in headers: + content_type, params = cgi.parse_header(headers["Content-Type"]) + if "charset" in params: + return params['charset'] + return None + + +def _clean_link(url): + # type: (str) -> str + """Makes sure a link is fully encoded. That is, if a ' ' shows up in + the link, it will be rewritten to %20 (while not over-quoting + % or other characters).""" + # Split the URL into parts according to the general structure + # `scheme://netloc/path;parameters?query#fragment`. Note that the + # `netloc` can be empty and the URI will then refer to a local + # filesystem path. + result = urllib_parse.urlparse(url) + # In both cases below we unquote prior to quoting to make sure + # nothing is double quoted. + if result.netloc == "": + # 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. + path = urllib_request.pathname2url( + urllib_request.url2pathname(result.path)) + else: + # In addition to the `/` character we protect `@` so that + # revision strings in VCS URLs are properly parsed. + path = urllib_parse.quote(urllib_parse.unquote(result.path), safe="/@") + return urllib_parse.urlunparse(result._replace(path=path)) + + +class HTMLPage(object): + """Represents one page, along with its URL""" + + def __init__(self, content, url, headers=None): + # type: (bytes, str, MutableMapping[str, str]) -> None + self.content = content + self.url = url + self.headers = headers + + def __str__(self): + return redact_password_from_url(self.url) + + def iter_links(self): + # type: () -> Iterable[Link] + """Yields all links in the page""" + document = html5lib.parse( + self.content, + transport_encoding=_get_encoding_from_headers(self.headers), + namespaceHTMLElements=False, + ) + base_url = _determine_base_url(document, self.url) + for anchor in document.findall(".//a"): + if anchor.get("href"): + href = anchor.get("href") + url = _clean_link(urllib_parse.urljoin(base_url, href)) + pyrequire = anchor.get('data-requires-python') + pyrequire = unescape(pyrequire) if pyrequire else None + yield Link(url, self.url, requires_python=pyrequire) + + +Search = namedtuple('Search', 'supplied canonical formats') +"""Capture key aspects of a search. + +:attribute supplied: The user supplied package. +:attribute canonical: The canonical package name. +:attribute formats: The formats allowed for this package. Should be a set + with 'binary' or 'source' or both in it. +""" diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/locations.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/locations.py new file mode 100644 index 00000000..10860f7b --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/locations.py @@ -0,0 +1,211 @@ +"""Locations where we look for configs, install stuff, etc""" +from __future__ import absolute_import + +import os +import os.path +import platform +import site +import sys +import sysconfig +from distutils import sysconfig as distutils_sysconfig +from distutils.command.install import SCHEME_KEYS # type: ignore + +from pip._internal.utils import appdirs +from pip._internal.utils.compat import WINDOWS, expanduser +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from typing import Any, Union, Dict, List, Optional + + +# Application Directories +USER_CACHE_DIR = appdirs.user_cache_dir("pip") + + +DELETE_MARKER_MESSAGE = '''\ +This file is placed here by pip to indicate the source was put +here by pip. + +Once this package is successfully installed this source code will be +deleted (unless you remove this file). +''' +PIP_DELETE_MARKER_FILENAME = 'pip-delete-this-directory.txt' + + +def write_delete_marker_file(directory): + # type: (str) -> None + """ + Write the pip delete marker file into this directory. + """ + filepath = os.path.join(directory, PIP_DELETE_MARKER_FILENAME) + with open(filepath, 'w') as marker_fp: + marker_fp.write(DELETE_MARKER_MESSAGE) + + +def running_under_virtualenv(): + # type: () -> bool + """ + Return True if we're running inside a virtualenv, False otherwise. + + """ + if hasattr(sys, 'real_prefix'): + return True + elif sys.prefix != getattr(sys, "base_prefix", sys.prefix): + return True + + return False + + +def virtualenv_no_global(): + # type: () -> bool + """ + Return True if in a venv and no system site packages. + """ + # this mirrors the logic in virtualenv.py for locating the + # no-global-site-packages.txt file + site_mod_dir = os.path.dirname(os.path.abspath(site.__file__)) + no_global_file = os.path.join(site_mod_dir, 'no-global-site-packages.txt') + if running_under_virtualenv() and os.path.isfile(no_global_file): + return True + else: + return False + + +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/.. +# Note: using realpath due to tmp dirs on OSX being symlinks +src_prefix = os.path.abspath(src_prefix) + +# FIXME doesn't account for venv linked to global site-packages + +site_packages = sysconfig.get_path("purelib") # type: Optional[str] + +# This is because of a bug in PyPy's sysconfig module, see +# https://bitbucket.org/pypy/pypy/issues/2506/sysconfig-returns-incorrect-paths +# for more information. +if platform.python_implementation().lower() == "pypy": + site_packages = distutils_sysconfig.get_python_lib() +try: + # Use getusersitepackages if this is present, as it ensures that the + # value is initialised properly. + user_site = site.getusersitepackages() +except AttributeError: + user_site = site.USER_SITE +user_dir = expanduser('~') +if WINDOWS: + bin_py = os.path.join(sys.prefix, 'Scripts') + bin_user = os.path.join(user_site, 'Scripts') + # buildout uses 'bin' on Windows too? + if not os.path.exists(bin_py): + bin_py = os.path.join(sys.prefix, 'bin') + bin_user = os.path.join(user_site, 'bin') + + config_basename = 'pip.ini' + + legacy_storage_dir = os.path.join(user_dir, 'pip') + legacy_config_file = os.path.join( + legacy_storage_dir, + config_basename, + ) +else: + bin_py = os.path.join(sys.prefix, 'bin') + bin_user = os.path.join(user_site, 'bin') + + config_basename = 'pip.conf' + + legacy_storage_dir = os.path.join(user_dir, '.pip') + legacy_config_file = os.path.join( + legacy_storage_dir, + config_basename, + ) + # 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 sys.prefix[:16] == '/System/Library/': + bin_py = '/usr/local/bin' + +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) +new_config_file = os.path.join(appdirs.user_config_dir("pip"), config_basename) + + +def distutils_scheme(dist_name, user=False, home=None, root=None, + isolated=False, prefix=None): + # type:(str, bool, str, str, bool, str) -> dict + """ + Return a distutils install scheme + """ + from distutils.dist import Distribution + + scheme = {} + + if isolated: + extra_dist_args = {"script_args": ["--no-user-cfg"]} + else: + extra_dist_args = {} + dist_args = {'name': dist_name} # type: Dict[str, Union[str, List[str]]] + dist_args.update(extra_dist_args) + + d = Distribution(dist_args) + # Ignoring, typeshed issue reported python/typeshed/issues/2567 + d.parse_config_files() + # NOTE: Ignoring type since mypy can't find attributes on 'Command' + i = d.get_command_obj('install', create=True) # type: Any + assert i is not None + # 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), "user={} prefix={}".format(user, prefix) + i.user = user or i.user + if user: + i.prefix = "" + i.prefix = prefix or i.prefix + i.home = home or i.home + i.root = root or i.root + i.finalize_options() + 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 + + # Ignoring, typeshed issue reported python/typeshed/issues/2567 + if 'install_lib' in d.get_option_dict('install'): # type: ignore + scheme.update(dict(purelib=i.install_lib, platlib=i.install_lib)) + + if running_under_virtualenv(): + scheme['headers'] = os.path.join( + sys.prefix, + 'include', + 'site', + 'python' + sys.version[:3], + 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 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/models/__init__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/models/__init__.py new file mode 100644 index 00000000..7855226e --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/models/__init__.py @@ -0,0 +1,2 @@ +"""A package that contains models that represent entities. +""" diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/models/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/models/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..977fa773f713b4b006daf33a4874c74251b308bb GIT binary patch literal 211 zcmX|)y$*sf6om_mgoJnK%D_)_aUlM@fQy^aG=(+p zZ#Z|AB=Py3U$zLL5AeSL+756L1Vbmpf+I@9=X#F~ZEp0+v2UrzjaHrt<#4ANmu{Ap z8_OM69s|M)?(+DM2E&37rW-%F+>%}Uh>U2=m7KsD~LPv literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/models/__pycache__/candidate.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/models/__pycache__/candidate.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..40cbf080c7fabc8d333c872c7a048da02628bda9 GIT binary patch literal 1244 zcmaJ=OK;Oa5Z+xslBQ0@t4M%Ap(iX+7r_ZsDj-6oYKagCq*|cG^=^vW^@CjpkrGa= z)Du613qQzLPW%N<%-Bf*Q8CiYj%Vk!-;D2cyPenHf;WpcA>YX#1mENVuz3qY5J445 zX~-z*Oj)TN+O=*eCv`)Y66xwKxU<2p6}IX-N43+raIV%})k){Wc}muaXo>a_5p8K7 zTA?TAUJ$?Y1F8_8R!$LVBSE>aDaVf@BSk+?!6u(3ACnC1=bmmq+vfczkNcba`OCpz zW3UcZkE8D^sZEljm%Wu_`*2zhvvG{6XJkzka|0AfLMlke1P!fYGNghD>!=;t!WPaE z37unNlhB3s+-h+nGi9VyR6>D%l!-({r98O%TozgynU$s&^@_X%Es0cbDW173^@h3b zC4WQ*ogPq(03+dvjGdW#ASQG|I4S9b9iql27D%hKOJ_n3*`7NgdjyyPTSKdK1pQKv z1^Q$IpHeY>)aR6{)vX5B@x00Kas<4qCHzmlK#SIV?lDUxD&XOt+heCz$Yo&45q zfu@=vT`6@Isg*PrQkj(#sDfgw&p=9K4Fl#TS7yyJP;@Jl_ z7eEMF;{{kYm>pU*QV0I(sTps4x~@Op?ERMh8a&;FDW*~R&*Sx3sG!fE2rP)0Y1j+S zufUh72hHsNyr6N089`tcrIPci!#Th+QmA{JzaK?vdeh=uUWMTVuo0Qabx=g{ezXg#6HGTlGmOXB@N(@q zn_w_16J>&Cjv5#Ebcb?WKst>;Xa~J6{hg*s5GeR(HFj6I(})&E;2QpZQ=>I7uQm{^ S;m8dxqsKhz0n{L=XZ-@lPC#=2 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/models/__pycache__/format_control.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/models/__pycache__/format_control.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6d5ddec4d85936744f58a845dbb10c3744846c99 GIT binary patch literal 2214 zcmah~-EJF26rR~XI~yl7C8Sb;Vo)z?lsZ-60!4r-(mz0$iVC&0D5K5JBwlB|>&&j3 z#I>&+UVyjYh6mvh=9a6zLa+GFY?3A+g|+6)&mNzjZ_fGlvxSB5mp|Lj|Ee?gH#_xs zSl_`Y?m|c=dCCU7%Q>x`)ET&4mow$+TiCm)H}JduAm|2zTDQj8113G`A2R8y`poUl z$>1?-)n368YjLv_M_HaFag-)wC9-IsaCrHLXOEtVjfeL(z863J-06JVdC+oA{l{UM zKJ8a_V#1u9?G&>j@ z7{w~Y1PSca^ole4eETM;pBM z3YBi@IhfWV#2-vIFund}tsD&3hRN{e<|s+!&0D*@&HUDFNk?{wBrBB${A+_;sHbr+-gaANlv$4uOx{ zIC+ps3=b_w&qKrbdD&CirceoTZ2}?Gt`JwSF06GvUOw-f6#mckj5m&8<$4Lmj=bti zSYO~XQ$k$*FQ23kb7;^*Gj*1|>J=;`Qbo$Vj|=U)7~af9;!bBAzMS58IbChOoVHrN z2`c2x9E_z=Q3ye}Q11xw=3-miB6L1XXlgaoLVO611v(vpc(^0)g8QiyPioVL?n%JE zV?*~N`HWB9{rl3HxI2Mt`$T zVq+(jdWImjU|e$P^qi?B1GGw@uhA7$kY{&@BKi(aKewm2EY7k|B~=&ces@ZD*`AW_ zuWxiqcY^BzuwKUmM}!g-`AEm=2<4V%c|=n^+3GWMU_LN2XsG2@UAlO}^0rJ(pj9zS z%kx0K3$O)lF5gp9R7GBV0kg$21W`%I8>dFd#~+`??t=fnz1^zng|raO@CmaOgm$aS z2f=@GoRdxQEgiLly0Jl59Gj@(9>q+Z!W^{KM`vUFmo^%_(`xAVpl(7Tz^)?{lQ0b- zc2Q4NUz-}3FOSi@i_o)Vq%YHoh{H7SH7S#Lpvqn@tEg|#%N7Y@(o=#6Qr95p6HpM7 z)g8|X!@7%Kt+8BRux~r9(7X@sZ;KZyleunJUod>&+M_Z_3)?f@t5)Oq%TT>(mj^?r vX{uDTP_-d6G!cjn>~X%?S8-`Qor=wdY8kx#Wrf4n)Weph8cqXfF1!B#dVdO1 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/models/__pycache__/index.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/models/__pycache__/index.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bb0c6052b37ed98850e91d43101a3053098b1725 GIT binary patch literal 1115 zcmZuwL2uJA6tLI??@X_sjNP7%mTV|Pt(JXe1v|YI}2>|7DT@Q#Sp^+ zO>ssrIzo&v?+P)Gdn+&VxzBvoVZk?&bpUr+*y4coKB6@G1*cJpZKuhV=7qC1%ew*k zDFBW#%uq%c&b(_h#_b(p*5DN?z<8F9t?vFUZNGL$O>V! z1WY~SSDhtZ;VJ+Nr0O!T0EaCmE$%G|cp`?NZ12Pdx|}wGTfez%%JiP?=vl*+a(CH~ z(y}fMrPiA%VPjCD9MP6E8-k@9Q5qZ6+z46NJ_Q#YO9ea3#767P&S^uJy+ym@QgEt` zR6rJGa+;TQ>RDfNF;*ems_uh=+4LwaM6NZZ-_h@vLo;oLP1zibW~E>Uhv$=#JbcES zs}(5Ja8>7GIF*bGJuKZE2F<1FLOPdM$Dk0|!U5jGF^)Tny}KhDY5WKrsRG@JZ^a9{6n+TC8AbZT%@x+s^4b64V2LYqjf;t6>jBx0jH`!+%S- z%U{}c{MY%E1OE}F(ANx@qc*1We3pxwNS6YM1*L7DZGM=;nz@1t0fE0Iq*(2^BHBt^ zXYOy(0jQApB<{CEU+hebY4oe%(2Z;$)!A^d?`EcfOf!-7L~6sC3qU?MtHu82gyGu2 zuFbJW&OZ46*^{)JJ%-^8=p0_WR0CaJ45o4p*8mCd%9LYhO>ZDa6)(*CP5P&or^i|N e2~skW1dMxbJEd!OKl5c~(cge4RJ literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/models/__pycache__/link.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/models/__pycache__/link.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bccd1eebccd6435385d9d7a660590b74482e307e GIT binary patch literal 4934 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 p1yQEqNdo&Jq%d_`v9IJ|@CDT(IR{|laz None + self.project = project + self.version = parse_version(version) # type: _BaseVersion + self.location = location + + super(InstallationCandidate, self).__init__( + key=(self.project, self.version, self.location), + defining_class=InstallationCandidate + ) + + def __repr__(self): + # type: () -> str + return "".format( + self.project, self.version, self.location, + ) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/models/format_control.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/models/format_control.py new file mode 100644 index 00000000..53138e48 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/models/format_control.py @@ -0,0 +1,73 @@ +from pip._vendor.packaging.utils import canonicalize_name + +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from typing import Optional, Set, FrozenSet + + +class FormatControl(object): + """Helper for managing formats from which a package can be installed. + """ + + def __init__(self, no_binary=None, only_binary=None): + # type: (Optional[Set], Optional[Set]) -> 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): + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not self.__eq__(other) + + def __repr__(self): + return "{}({}, {})".format( + self.__class__.__name__, + self.no_binary, + self.only_binary + ) + + @staticmethod + def handle_mutual_excludes(value, target, other): + # type: (str, Optional[Set], Optional[Set]) -> None + 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): + # type: (str) -> FrozenSet + 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): + # type: () -> None + self.handle_mutual_excludes( + ':all:', self.no_binary, self.only_binary, + ) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/models/index.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/models/index.py new file mode 100644 index 00000000..ead1efbd --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/models/index.py @@ -0,0 +1,31 @@ +from pip._vendor.six.moves.urllib import parse as urllib_parse + + +class PackageIndex(object): + """Represents a Package Index and provides easier access to endpoints + """ + + def __init__(self, url, file_storage_domain): + # type: (str, str) -> None + super(PackageIndex, self).__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): + # type: (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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/models/link.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/models/link.py new file mode 100644 index 00000000..2f420760 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/models/link.py @@ -0,0 +1,163 @@ +import posixpath +import re + +from pip._vendor.six.moves.urllib import parse as urllib_parse + +from pip._internal.download import path_to_url +from pip._internal.utils.misc import ( + WHEEL_EXTENSION, redact_password_from_url, splitext, +) +from pip._internal.utils.models import KeyBasedCompareMixin +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from typing import Optional, Tuple, Union + from pip._internal.index import HTMLPage + + +class Link(KeyBasedCompareMixin): + """Represents a parsed link from a Package Index's simple URL + """ + + def __init__(self, url, comes_from=None, requires_python=None): + # type: (str, Optional[Union[str, HTMLPage]], Optional[str]) -> None + """ + url: + url of the resource pointed to (href of the link) + comes_from: + instance of HTMLPage where the link was found, or string. + 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. + """ + + # url can be a UNC windows share + if url.startswith('\\\\'): + url = path_to_url(url) + + self.url = url + self.comes_from = comes_from + self.requires_python = requires_python if requires_python else None + + super(Link, self).__init__( + key=(self.url), + defining_class=Link + ) + + def __str__(self): + if self.requires_python: + rp = ' (requires-python:%s)' % self.requires_python + else: + rp = '' + if self.comes_from: + return '%s (from %s)%s' % (redact_password_from_url(self.url), + self.comes_from, rp) + else: + return redact_password_from_url(str(self.url)) + + def __repr__(self): + return '' % self + + @property + def filename(self): + # type: () -> str + _, netloc, path, _, _ = urllib_parse.urlsplit(self.url) + name = posixpath.basename(path.rstrip('/')) or netloc + name = urllib_parse.unquote(name) + assert name, ('URL %r produced no filename' % self.url) + return name + + @property + def scheme(self): + # type: () -> str + return urllib_parse.urlsplit(self.url)[0] + + @property + def netloc(self): + # type: () -> str + return urllib_parse.urlsplit(self.url)[1] + + @property + def path(self): + # type: () -> str + return urllib_parse.unquote(urllib_parse.urlsplit(self.url)[2]) + + def splitext(self): + # type: () -> Tuple[str, str] + return splitext(posixpath.basename(self.path.rstrip('/'))) + + @property + def ext(self): + # type: () -> str + return self.splitext()[1] + + @property + def url_without_fragment(self): + # type: () -> str + scheme, netloc, path, query, fragment = urllib_parse.urlsplit(self.url) + return urllib_parse.urlunsplit((scheme, netloc, path, query, None)) + + _egg_fragment_re = re.compile(r'[#&]egg=([^&]*)') + + @property + def egg_fragment(self): + # type: () -> Optional[str] + match = self._egg_fragment_re.search(self.url) + if not match: + return None + return match.group(1) + + _subdirectory_fragment_re = re.compile(r'[#&]subdirectory=([^&]*)') + + @property + def subdirectory_fragment(self): + # type: () -> Optional[str] + match = self._subdirectory_fragment_re.search(self.url) + if not match: + return None + return match.group(1) + + _hash_re = re.compile( + r'(sha1|sha224|sha384|sha256|sha512|md5)=([a-f0-9]+)' + ) + + @property + def hash(self): + # type: () -> Optional[str] + match = self._hash_re.search(self.url) + if match: + return match.group(2) + return None + + @property + def hash_name(self): + # type: () -> Optional[str] + match = self._hash_re.search(self.url) + if match: + return match.group(1) + return None + + @property + def show_url(self): + # type: () -> Optional[str] + return posixpath.basename(self.url.split('#', 1)[0].split('?', 1)[0]) + + @property + def is_wheel(self): + # type: () -> bool + return self.ext == WHEEL_EXTENSION + + @property + def is_artifact(self): + # type: () -> bool + """ + Determines if this points to an actual artifact (e.g. a tarball) or if + it points to an "abstract" thing like a path or a VCS location. + """ + from pip._internal.vcs import vcs + + if self.scheme in vcs.all_schemes: + return False + + return True diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/operations/__init__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/operations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/operations/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/operations/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7c2da0c5d8234f9d7bd55b2eff0f5aa53b5e60e6 GIT binary patch literal 147 zcmXr!<>iW5rx(ir1dl-k3@`#24nSPY0whuxf*CX!{Z=v*frJsnF9-dS+yecA%mUq{ z(#)I`U4z1mq&F8{GfU#*^$IF)aoFVM Prq(O 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/operations/__pycache__/prepare.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/operations/__pycache__/prepare.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5629bd6286db3403445c1b48a73b666cc91f3806 GIT binary patch literal 10497 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 Tuple[PackageSet, bool] + """Converts a list of distributions into a PackageSet. + """ + # Default to using all packages installed on the system + if kwargs == {}: + kwargs = {"local_only": False, "skip": ()} + + package_set = {} + problems = False + for dist in get_installed_distributions(**kwargs): + name = canonicalize_name(dist.project_name) + try: + package_set[name] = PackageDetails(dist.version, dist.requires()) + except RequirementParseError as e: + # Don't crash on broken metadata + logging.warning("Error parsing requirements for %s: %s", name, e) + problems = True + return package_set, problems + + +def check_package_set(package_set, should_ignore=None): + # type: (PackageSet, Optional[Callable[[str], bool]]) -> 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. + """ + if should_ignore is None: + def should_ignore(name): + return False + + missing = dict() + conflicting = dict() + + for package_name in package_set: + # Info about dependencies of package_name + missing_deps = set() # type: Set[Missing] + conflicting_deps = set() # type: Set[Conflicting] + + if should_ignore(package_name): + continue + + for req in package_set[package_name].requires: + name = canonicalize_name(req.project_name) # type: str + + # Check if it's missing + if name not in package_set: + missed = True + if req.marker is not None: + missed = req.marker.evaluate() + if missed: + missing_deps.add((name, req)) + continue + + # Check if there's a conflict + version = package_set[name].version # type: str + 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): + # type: (List[InstallRequirement]) -> Tuple[PackageSet, CheckResult] + """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 _simulate_installation_of(to_install, package_set): + # type: (List[InstallRequirement], PackageSet) -> Set[str] + """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: + dist = make_abstract_dist(inst_req).dist() + name = canonicalize_name(dist.key) + package_set[name] = PackageDetails(dist.version, dist.requires()) + + installed.add(name) + + return installed + + +def _create_whitelist(would_be_installed, package_set): + # type: (Set[str], PackageSet) -> Set[str] + 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].requires: + if canonicalize_name(req.name) in packages_affected: + packages_affected.add(package_name) + break + + return packages_affected diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/operations/freeze.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/operations/freeze.py new file mode 100644 index 00000000..0c4c7610 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/operations/freeze.py @@ -0,0 +1,247 @@ +from __future__ import absolute_import + +import collections +import logging +import os +import re + +from pip._vendor import six +from pip._vendor.packaging.utils import canonicalize_name +from pip._vendor.pkg_resources import RequirementParseError + +from pip._internal.exceptions import BadCommand, InstallationError +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.misc import ( + dist_is_editable, get_installed_distributions, +) +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from typing import ( + Iterator, Optional, List, Container, Set, Dict, Tuple, Iterable, Union + ) + from pip._internal.cache import WheelCache + from pip._vendor.pkg_resources import ( + Distribution, Requirement + ) + + RequirementInfo = Tuple[Optional[Union[str, Requirement]], bool, List[str]] + + +logger = logging.getLogger(__name__) + + +def freeze( + requirement=None, # type: Optional[List[str]] + find_links=None, # type: Optional[List[str]] + local_only=None, # type: Optional[bool] + user_only=None, # type: Optional[bool] + skip_regex=None, # type: Optional[str] + isolated=False, # type: bool + wheel_cache=None, # type: Optional[WheelCache] + exclude_editable=False, # type: bool + skip=() # type: Container[str] +): + # type: (...) -> Iterator[str] + find_links = find_links or [] + skip_match = None + + if skip_regex: + skip_match = re.compile(skip_regex).search + + for link in find_links: + yield '-f %s' % link + installations = {} # type: Dict[str, FrozenRequirement] + for dist in get_installed_distributions(local_only=local_only, + skip=(), + user_only=user_only): + try: + req = FrozenRequirement.from_dist(dist) + except RequirementParseError: + logger.warning( + "Could not parse requirement: %s", + dist.project_name + ) + continue + if exclude_editable and req.editable: + continue + installations[req.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() # type: Set[str] + # 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 = collections.defaultdict(list) # type: Dict[str, List[str]] + 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 + (skip_match and skip_match(line)) or + line.startswith(( + '-r', '--requirement', + '-Z', '--always-unzip', + '-f', '--find-links', + '-i', '--index-url', + '--pre', + '--trusted-host', + '--process-dependency-links', + '--extra-index-url'))): + line = line.rstrip() + if line not in emitted_options: + emitted_options.add(line) + yield line + continue + + if line.startswith('-e') or line.startswith('--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, + wheel_cache=wheel_cache, + ) + else: + line_req = install_req_from_line( + COMMENT_RE.sub('', line).strip(), + isolated=isolated, + wheel_cache=wheel_cache, + ) + + 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)" + ) + elif line_req.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.name]).rstrip() + del installations[line_req.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 six.iteritems(req_files): + 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 canonicalize_name(installation.name) not in skip: + yield str(installation).rstrip() + + +def get_requirement_info(dist): + # type: (Distribution) -> RequirementInfo + """ + Compute and return values (req, editable, comments) for use in + FrozenRequirement.from_dist(). + """ + if not dist_is_editable(dist): + return (None, False, []) + + location = os.path.normcase(os.path.abspath(dist.location)) + + from pip._internal.vcs import vcs, RemoteNotFoundError + vc_type = vcs.get_backend_type(location) + + if not vc_type: + req = dist.as_requirement() + logger.debug( + 'No VCS found for editable requirement {!r} in: {!r}', req, + location, + ) + comments = [ + '# Editable install with no version control ({})'.format(req) + ] + return (location, True, comments) + + try: + req = vc_type.get_src_requirement(location, dist.project_name) + except RemoteNotFoundError: + req = dist.as_requirement() + comments = [ + '# Editable {} install with no remote ({})'.format( + vc_type.__name__, req, + ) + ] + return (location, True, comments) + + except BadCommand: + logger.warning( + 'cannot determine version of editable source in %s ' + '(%s command not found in path)', + location, + vc_type.name, + ) + return (None, True, []) + + except InstallationError as exc: + logger.warning( + "Error when trying to get requirement for VCS system %s, " + "falling back to uneditable format", exc + ) + else: + if req is not None: + return (req, True, []) + + logger.warning( + 'Could not determine repository location of %s', location + ) + comments = ['## !! Could not determine repository location'] + + return (None, False, comments) + + +class FrozenRequirement(object): + def __init__(self, name, req, editable, comments=()): + # type: (str, Union[str, Requirement], bool, Iterable[str]) -> None + self.name = name + self.req = req + self.editable = editable + self.comments = comments + + @classmethod + def from_dist(cls, dist): + # type: (Distribution) -> FrozenRequirement + req, editable, comments = get_requirement_info(dist) + if req is None: + req = dist.as_requirement() + + return cls(dist.project_name, req, editable, comments=comments) + + def __str__(self): + req = self.req + if self.editable: + req = '-e %s' % req + return '\n'.join(list(self.comments) + [str(req)]) + '\n' diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/operations/prepare.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/operations/prepare.py new file mode 100644 index 00000000..077a985a --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/operations/prepare.py @@ -0,0 +1,426 @@ +"""Prepares a distribution for installation +""" + +import logging +import os + +from pip._vendor import pkg_resources, requests + +from pip._internal.build_env import BuildEnvironment +from pip._internal.download import ( + is_dir_url, is_file_url, is_vcs_url, unpack_url, url_to_path, +) +from pip._internal.exceptions import ( + DirectoryUrlHashUnsupported, HashUnpinned, InstallationError, + PreviousBuildDirError, VcsHashUnsupported, +) +from pip._internal.utils.compat import expanduser +from pip._internal.utils.hashes import MissingHashes +from pip._internal.utils.logging import indent_log +from pip._internal.utils.misc import display_path, normalize_path +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from typing import Any, Optional + from pip._internal.req.req_install import InstallRequirement + from pip._internal.index import PackageFinder + from pip._internal.download import PipSession + from pip._internal.req.req_tracker import RequirementTracker + +logger = logging.getLogger(__name__) + + +def make_abstract_dist(req): + # type: (InstallRequirement) -> DistAbstraction + """Factory to make an abstract dist object. + + Preconditions: Either an editable req with a source_dir, or satisfied_by or + a wheel link, or a non-editable req with a source_dir. + + :return: A concrete DistAbstraction. + """ + if req.editable: + return IsSDist(req) + elif req.link and req.link.is_wheel: + return IsWheel(req) + else: + return IsSDist(req) + + +class DistAbstraction(object): + """Abstracts out the wheel vs non-wheel Resolver.resolve() logic. + + 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). + - we must be able to generate a list of run-time dependencies + without installing any additional packages (or we would + have to either burn time by doing temporary isolated installs + or alternatively violate pips 'don't start installing unless + all requirements are available' rule - neither of which are + desirable). + - 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. + """ + + def __init__(self, req): + # type: (InstallRequirement) -> None + self.req = req # type: InstallRequirement + + def dist(self): + # type: () -> Any + """Return a setuptools Dist object.""" + raise NotImplementedError + + def prep_for_dist(self, finder, build_isolation): + # type: (PackageFinder, bool) -> Any + """Ensure that we can get a Dist for this requirement.""" + raise NotImplementedError + + +class IsWheel(DistAbstraction): + + def dist(self): + # type: () -> pkg_resources.Distribution + return list(pkg_resources.find_distributions( + self.req.source_dir))[0] + + def prep_for_dist(self, finder, build_isolation): + # type: (PackageFinder, bool) -> Any + # FIXME:https://github.com/pypa/pip/issues/1112 + pass + + +class IsSDist(DistAbstraction): + + def dist(self): + return self.req.get_dist() + + def _raise_conflicts(self, conflicting_with, conflicting_reqs): + conflict_messages = [ + '%s is incompatible with %s' % (installed, wanted) + for installed, wanted in sorted(conflicting_reqs) + ] + raise InstallationError( + "Some build dependencies for %s conflict with %s: %s." % ( + self.req, conflicting_with, ', '.join(conflict_messages)) + ) + + def install_backend_dependencies(self, finder): + # type: (PackageFinder) -> None + """ + Install any extra build dependencies that the backend requests. + + :param finder: a PackageFinder object. + """ + req = self.req + with req.build_env: + # We need to have the env active when calling the hook. + req.spin_message = "Getting requirements to build wheel" + reqs = req.pep517_backend.get_requires_for_build_wheel() + conflicting, missing = req.build_env.check_requirements(reqs) + if conflicting: + self._raise_conflicts("the backend dependencies", conflicting) + req.build_env.install_requirements( + finder, missing, 'normal', + "Installing backend dependencies" + ) + + def prep_for_dist(self, finder, build_isolation): + # type: (PackageFinder, bool) -> None + # Prepare for building. We need to: + # 1. Load pyproject.toml (if it exists) + # 2. Set up the build environment + + self.req.load_pyproject_toml() + should_isolate = self.req.use_pep517 and build_isolation + + if should_isolate: + # Isolate in a BuildEnvironment and install the build-time + # requirements. + self.req.build_env = BuildEnvironment() + self.req.build_env.install_requirements( + finder, self.req.pyproject_requires, 'overlay', + "Installing build dependencies" + ) + 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))) + ) + + # 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. + self.install_backend_dependencies(finder=finder) + + self.req.prepare_metadata() + self.req.assert_source_matches_version() + + +class Installed(DistAbstraction): + + def dist(self): + # type: () -> pkg_resources.Distribution + return self.req.satisfied_by + + def prep_for_dist(self, finder, build_isolation): + # type: (PackageFinder, bool) -> Any + pass + + +class RequirementPreparer(object): + """Prepares a Requirement + """ + + def __init__( + self, + build_dir, # type: str + download_dir, # type: Optional[str] + src_dir, # type: str + wheel_download_dir, # type: Optional[str] + progress_bar, # type: str + build_isolation, # type: bool + req_tracker # type: RequirementTracker + ): + # type: (...) -> None + super(RequirementPreparer, self).__init__() + + self.src_dir = src_dir + self.build_dir = build_dir + self.req_tracker = req_tracker + + # 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 + + # Where still-packed .whl files should be written to. If None, they are + # written to the download_dir parameter. Separate to download_dir to + # permit only keeping wheel archives for pip wheel. + if wheel_download_dir: + wheel_download_dir = normalize_path(wheel_download_dir) + self.wheel_download_dir = wheel_download_dir + + # NOTE + # download_dir and wheel_download_dir overlap semantically and may + # be combined if we're willing to have non-wheel archives present in + # the wheelhouse output by 'pip wheel'. + + self.progress_bar = progress_bar + + # Is build isolation allowed? + self.build_isolation = build_isolation + + @property + def _download_should_save(self): + # type: () -> bool + # TODO: Modify to reduce indentation needed + if self.download_dir: + self.download_dir = expanduser(self.download_dir) + if os.path.exists(self.download_dir): + return True + else: + logger.critical('Could not find download directory') + raise InstallationError( + "Could not find or access download directory '%s'" + % display_path(self.download_dir)) + return False + + def prepare_linked_requirement( + self, + req, # type: InstallRequirement + session, # type: PipSession + finder, # type: PackageFinder + upgrade_allowed, # type: bool + require_hashes # type: bool + ): + # type: (...) -> DistAbstraction + """Prepare a requirement that would be obtained from req.link + """ + # TODO: Breakup into smaller functions + if req.link and req.link.scheme == 'file': + path = url_to_path(req.link.url) + logger.info('Processing %s', display_path(path)) + else: + logger.info('Collecting %s', req) + + with indent_log(): + # @@ if filesystem packages are not marked + # editable in a req, a non deterministic error + # occurs when the script attempts to unpack the + # build directory + req.ensure_has_source_dir(self.build_dir) + # If a checkout exists, it's unwise to keep going. version + # inconsistencies are logged later, but do not fail the + # installation. + # FIXME: this won't upgrade when there's an existing + # package unpacked in `req.source_dir` + # package unpacked in `req.source_dir` + if os.path.exists(os.path.join(req.source_dir, 'setup.py')): + raise PreviousBuildDirError( + "pip can't proceed with requirements '%s' due to a" + " pre-existing build directory (%s). 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." + % (req, req.source_dir) + ) + req.populate_link(finder, upgrade_allowed, require_hashes) + + # We can't hit this spot and have populate_link return None. + # req.satisfied_by is None here (because we're + # guarded) and upgrade has no impact except when satisfied_by + # is not None. + # Then inside find_requirement existing_applicable -> False + # If no new versions are found, DistributionNotFound is raised, + # otherwise a result is guaranteed. + assert req.link + link = req.link + + # Now that we have the real link, we can tell what kind of + # requirements we have and raise some more informative errors + # than otherwise. (For example, we can raise VcsHashUnsupported + # for a VCS URL rather than HashMissing.) + if require_hashes: + # 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 is_vcs_url(link): + raise VcsHashUnsupported() + elif is_file_url(link) and is_dir_url(link): + raise DirectoryUrlHashUnsupported() + if not req.original_link and not req.is_pinned: + # 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. + raise HashUnpinned() + + hashes = req.hashes(trust_internet=not require_hashes) + if require_hashes and not hashes: + # Known-good hashes are missing for this requirement, so + # 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. + hashes = MissingHashes() + + try: + download_dir = self.download_dir + # We always delete unpacked sdists after pip ran. + autodelete_unpacked = True + if req.link.is_wheel and self.wheel_download_dir: + # when doing 'pip wheel` we download wheels to a + # dedicated dir. + download_dir = self.wheel_download_dir + if req.link.is_wheel: + if download_dir: + # When downloading, we only unpack wheels to get + # metadata. + autodelete_unpacked = True + else: + # When installing a wheel, we use the unpacked + # wheel. + autodelete_unpacked = False + unpack_url( + req.link, req.source_dir, + download_dir, autodelete_unpacked, + session=session, hashes=hashes, + progress_bar=self.progress_bar + ) + except requests.HTTPError as exc: + logger.critical( + 'Could not install requirement %s because of error %s', + req, + exc, + ) + raise InstallationError( + 'Could not install requirement %s because of HTTP ' + 'error %s for URL %s' % + (req, exc, req.link) + ) + abstract_dist = make_abstract_dist(req) + with self.req_tracker.track(req): + abstract_dist.prep_for_dist(finder, self.build_isolation) + if self._download_should_save: + # Make a .zip of the source_dir we already created. + if not req.link.is_artifact: + req.archive(self.download_dir) + return abstract_dist + + def prepare_editable_requirement( + self, + req, # type: InstallRequirement + require_hashes, # type: bool + use_user_site, # type: bool + finder # type: PackageFinder + ): + # type: (...) -> DistAbstraction + """Prepare an editable requirement + """ + assert req.editable, "cannot prepare a non-editable req as editable" + + logger.info('Obtaining %s', req) + + with indent_log(): + if require_hashes: + raise InstallationError( + 'The editable requirement %s cannot be installed when ' + 'requiring hashes, because there is no single file to ' + 'hash.' % req + ) + req.ensure_has_source_dir(self.src_dir) + req.update_editable(not self._download_should_save) + + abstract_dist = make_abstract_dist(req) + with self.req_tracker.track(req): + abstract_dist.prep_for_dist(finder, self.build_isolation) + + if self._download_should_save: + req.archive(self.download_dir) + req.check_if_exists(use_user_site) + + return abstract_dist + + def prepare_installed_requirement(self, req, require_hashes, skip_reason): + # type: (InstallRequirement, bool, Optional[str]) -> DistAbstraction + """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 " + "is set to %r" % (req.satisfied_by,) + ) + logger.info( + 'Requirement %s: %s (%s)', + skip_reason, req, req.satisfied_by.version + ) + with indent_log(): + if 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.' + ) + abstract_dist = Installed(req) + + return abstract_dist diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/pep425tags.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/pep425tags.py new file mode 100644 index 00000000..3b68f28d --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/pep425tags.py @@ -0,0 +1,381 @@ +"""Generate and work with PEP 425 Compatibility Tags.""" +from __future__ import absolute_import + +import distutils.util +import logging +import platform +import re +import sys +import sysconfig +import warnings +from collections import OrderedDict + +import pip._internal.utils.glibc +from pip._internal.utils.compat import get_extension_suffixes +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from typing import ( + Tuple, Callable, List, Optional, Union, Dict + ) + + Pep425Tag = Tuple[str, str, str] + +logger = logging.getLogger(__name__) + +_osx_arch_pat = re.compile(r'(.+)_(\d+)_(\d+)_(.+)') + + +def get_config_var(var): + # type: (str) -> Optional[str] + try: + return sysconfig.get_config_var(var) + except IOError as e: # Issue #1074 + warnings.warn("{}".format(e), RuntimeWarning) + return None + + +def get_abbr_impl(): + # type: () -> str + """Return abbreviated implementation name.""" + if hasattr(sys, 'pypy_version_info'): + pyimpl = 'pp' + elif sys.platform.startswith('java'): + pyimpl = 'jy' + elif sys.platform == 'cli': + pyimpl = 'ip' + else: + pyimpl = 'cp' + return pyimpl + + +def get_impl_ver(): + # type: () -> str + """Return implementation version.""" + impl_ver = get_config_var("py_version_nodot") + if not impl_ver or get_abbr_impl() == 'pp': + impl_ver = ''.join(map(str, get_impl_version_info())) + return impl_ver + + +def get_impl_version_info(): + # type: () -> Tuple[int, ...] + """Return sys.version_info-like tuple for use in decrementing the minor + version.""" + if get_abbr_impl() == 'pp': + # as per https://github.com/pypa/pip/issues/2882 + # attrs exist only on pypy + return (sys.version_info[0], + sys.pypy_version_info.major, # type: ignore + sys.pypy_version_info.minor) # type: ignore + else: + return sys.version_info[0], sys.version_info[1] + + +def get_impl_tag(): + # type: () -> str + """ + Returns the Tag for this specific implementation. + """ + return "{}{}".format(get_abbr_impl(), get_impl_ver()) + + +def get_flag(var, fallback, expected=True, warn=True): + # type: (str, Callable[..., bool], Union[bool, int], bool) -> bool + """Use a fallback method for determining SOABI flags if the needed config + var is unset or unavailable.""" + val = get_config_var(var) + if val is None: + if warn: + logger.debug("Config variable '%s' is unset, Python ABI tag may " + "be incorrect", var) + return fallback() + return val == expected + + +def get_abi_tag(): + # type: () -> Optional[str] + """Return the ABI tag based on SOABI (if available) or emulate SOABI + (CPython 2, PyPy).""" + soabi = get_config_var('SOABI') + impl = get_abbr_impl() + if not soabi and impl in {'cp', 'pp'} and hasattr(sys, 'maxunicode'): + d = '' + m = '' + u = '' + if get_flag('Py_DEBUG', + lambda: hasattr(sys, 'gettotalrefcount'), + warn=(impl == 'cp')): + d = 'd' + if get_flag('WITH_PYMALLOC', + lambda: impl == 'cp', + warn=(impl == 'cp')): + m = 'm' + if get_flag('Py_UNICODE_SIZE', + lambda: sys.maxunicode == 0x10ffff, + expected=4, + warn=(impl == 'cp' and + sys.version_info < (3, 3))) \ + and sys.version_info < (3, 3): + u = 'u' + abi = '%s%s%s%s%s' % (impl, get_impl_ver(), d, m, u) + elif soabi and soabi.startswith('cpython-'): + abi = 'cp' + soabi.split('-')[1] + elif soabi: + abi = soabi.replace('.', '_').replace('-', '_') + else: + abi = None + return abi + + +def _is_running_32bit(): + # type: () -> bool + return sys.maxsize == 2147483647 + + +def get_platform(): + # type: () -> str + """Return our platform name 'win32', 'linux_x86_64'""" + if sys.platform == 'darwin': + # distutils.util.get_platform() returns the release based on the value + # of MACOSX_DEPLOYMENT_TARGET on which Python was built, which may + # be significantly older than the user's current machine. + release, _, machine = platform.mac_ver() + split_ver = release.split('.') + + if machine == "x86_64" and _is_running_32bit(): + machine = "i386" + elif machine == "ppc64" and _is_running_32bit(): + machine = "ppc" + + return 'macosx_{}_{}_{}'.format(split_ver[0], split_ver[1], machine) + + # XXX remove distutils dependency + result = distutils.util.get_platform().replace('.', '_').replace('-', '_') + if result == "linux_x86_64" and _is_running_32bit(): + # 32 bit Python program (running on a 64 bit Linux): pip should only + # install and run 32 bit compiled extensions in that case. + result = "linux_i686" + + return result + + +def is_manylinux1_compatible(): + # type: () -> bool + # Only Linux, and only x86-64 / i686 + if get_platform() not in {"linux_x86_64", "linux_i686"}: + return False + + # Check for presence of _manylinux module + try: + import _manylinux + return bool(_manylinux.manylinux1_compatible) + except (ImportError, AttributeError): + # Fall through to heuristic check below + pass + + # Check glibc version. CentOS 5 uses glibc 2.5. + return pip._internal.utils.glibc.have_compatible_glibc(2, 5) + + +def is_manylinux2010_compatible(): + # type: () -> bool + # Only Linux, and only x86-64 / i686 + if get_platform() not in {"linux_x86_64", "linux_i686"}: + return False + + # Check for presence of _manylinux module + try: + import _manylinux + return bool(_manylinux.manylinux2010_compatible) + except (ImportError, AttributeError): + # Fall through to heuristic check below + pass + + # Check glibc version. CentOS 6 uses glibc 2.12. + return pip._internal.utils.glibc.have_compatible_glibc(2, 12) + + +def get_darwin_arches(major, minor, machine): + # type: (int, int, str) -> List[str] + """Return a list of supported arches (including group arches) for + the given major, minor and machine architecture of an macOS machine. + """ + arches = [] + + def _supports_arch(major, minor, arch): + # type: (int, int, str) -> bool + # Looking at the application support for macOS versions in the chart + # provided by https://en.wikipedia.org/wiki/OS_X#Versions it appears + # our timeline looks roughly like: + # + # 10.0 - Introduces ppc support. + # 10.4 - Introduces ppc64, i386, and x86_64 support, however the ppc64 + # and x86_64 support is CLI only, and cannot be used for GUI + # applications. + # 10.5 - Extends ppc64 and x86_64 support to cover GUI applications. + # 10.6 - Drops support for ppc64 + # 10.7 - Drops support for ppc + # + # Given that we do not know if we're installing a CLI or a GUI + # application, we must be conservative and assume it might be a GUI + # application and behave as if ppc64 and x86_64 support did not occur + # until 10.5. + # + # Note: The above information is taken from the "Application support" + # column in the chart not the "Processor support" since I believe + # that we care about what instruction sets an application can use + # not which processors the OS supports. + if arch == 'ppc': + return (major, minor) <= (10, 5) + if arch == 'ppc64': + return (major, minor) == (10, 5) + if arch == 'i386': + return (major, minor) >= (10, 4) + if arch == 'x86_64': + return (major, minor) >= (10, 5) + if arch in groups: + for garch in groups[arch]: + if _supports_arch(major, minor, garch): + return True + return False + + groups = OrderedDict([ + ("fat", ("i386", "ppc")), + ("intel", ("x86_64", "i386")), + ("fat64", ("x86_64", "ppc64")), + ("fat32", ("x86_64", "i386", "ppc")), + ]) # type: Dict[str, Tuple[str, ...]] + + if _supports_arch(major, minor, machine): + arches.append(machine) + + for garch in groups: + if machine in groups[garch] and _supports_arch(major, minor, garch): + arches.append(garch) + + arches.append('universal') + + return arches + + +def get_all_minor_versions_as_strings(version_info): + # type: (Tuple[int, ...]) -> List[str] + versions = [] + major = version_info[:-1] + # Support all previous minor Python versions. + for minor in range(version_info[-1], -1, -1): + versions.append(''.join(map(str, major + (minor,)))) + return versions + + +def get_supported( + versions=None, # type: Optional[List[str]] + noarch=False, # type: bool + platform=None, # type: Optional[str] + impl=None, # type: Optional[str] + abi=None # type: Optional[str] +): + # type: (...) -> List[Pep425Tag] + """Return a list of supported tags for each version specified in + `versions`. + + :param versions: a list of string versions, of the form ["33", "32"], + or None. The first version will be assumed to support our ABI. + :param platform: specify the exact platform 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 abi: specify the exact abi you want valid + tags for, or None. If None, use the local interpreter abi. + """ + supported = [] + + # Versions must be given with respect to the preference + if versions is None: + version_info = get_impl_version_info() + versions = get_all_minor_versions_as_strings(version_info) + + impl = impl or get_abbr_impl() + + abis = [] # type: List[str] + + abi = abi or get_abi_tag() + if abi: + abis[0:0] = [abi] + + abi3s = set() + for suffix in get_extension_suffixes(): + if suffix.startswith('.abi'): + abi3s.add(suffix.split('.', 2)[1]) + + abis.extend(sorted(list(abi3s))) + + abis.append('none') + + if not noarch: + arch = platform or get_platform() + arch_prefix, arch_sep, arch_suffix = arch.partition('_') + if arch.startswith('macosx'): + # support macosx-10.6-intel on macosx-10.9-x86_64 + match = _osx_arch_pat.match(arch) + if match: + name, major, minor, actual_arch = match.groups() + tpl = '{}_{}_%i_%s'.format(name, major) + arches = [] + for m in reversed(range(int(minor) + 1)): + for a in get_darwin_arches(int(major), m, actual_arch): + arches.append(tpl % (m, a)) + else: + # arch pattern didn't match (?!) + arches = [arch] + 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 = [arch, 'manylinux1' + arch_sep + arch_suffix] + elif platform is None: + arches = [] + if is_manylinux2010_compatible(): + arches.append('manylinux2010' + arch_sep + arch_suffix) + if is_manylinux1_compatible(): + arches.append('manylinux1' + arch_sep + arch_suffix) + arches.append(arch) + else: + arches = [arch] + + # Current version, current API (built specifically for our Python): + for abi in abis: + for arch in arches: + supported.append(('%s%s' % (impl, versions[0]), abi, arch)) + + # abi3 modules compatible with older version of Python + for version in versions[1:]: + # abi3 was introduced in Python 3.2 + if version in {'31', '30'}: + break + for abi in abi3s: # empty set if not Python 3 + for arch in arches: + supported.append(("%s%s" % (impl, version), abi, arch)) + + # Has binaries, does not use the Python API: + for arch in arches: + supported.append(('py%s' % (versions[0][0]), 'none', arch)) + + # No abi / arch, but requires our implementation: + supported.append(('%s%s' % (impl, versions[0]), 'none', 'any')) + # Tagged specifically as being cross-version compatible + # (with just the major version specified) + supported.append(('%s%s' % (impl, versions[0][0]), 'none', 'any')) + + # No abi / arch, generic Python + for i, version in enumerate(versions): + supported.append(('py%s' % (version,), 'none', 'any')) + if i == 0: + supported.append(('py%s' % (version[0]), 'none', 'any')) + + return supported + + +implementation_tag = get_impl_tag() diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/pyproject.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/pyproject.py new file mode 100644 index 00000000..43efbed4 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/pyproject.py @@ -0,0 +1,171 @@ +from __future__ import absolute_import + +import io +import os +import sys + +from pip._vendor import pytoml, six + +from pip._internal.exceptions import InstallationError +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from typing import Any, Tuple, Optional, List + + +def _is_list_of_str(obj): + # type: (Any) -> bool + return ( + isinstance(obj, list) and + all(isinstance(item, six.string_types) for item in obj) + ) + + +def make_pyproject_path(setup_py_dir): + # type: (str) -> str + path = os.path.join(setup_py_dir, 'pyproject.toml') + + # Python2 __file__ should not be unicode + if six.PY2 and isinstance(path, six.text_type): + path = path.encode(sys.getfilesystemencoding()) + + return path + + +def load_pyproject_toml( + use_pep517, # type: Optional[bool] + pyproject_toml, # type: str + setup_py, # type: str + req_name # type: str +): + # type: (...) -> Optional[Tuple[List[str], str, List[str]]] + """Load the pyproject.toml file. + + Parameters: + use_pep517 - Has the user requested PEP 517 processing? None + means the user hasn't explicitly specified. + 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 + ) + """ + has_pyproject = os.path.isfile(pyproject_toml) + has_setup = os.path.isfile(setup_py) + + if has_pyproject: + with io.open(pyproject_toml, encoding="utf-8") as f: + pp_toml = pytoml.load(f) + build_system = pp_toml.get("build-system") + else: + build_system = None + + # The following cases must use PEP 517 + # We check for use_pep517 being non-None and falsey because that means + # the user explicitly requested --no-use-pep517. The value 0 as + # opposed to False can occur when the value is provided via an + # environment variable or config file option (due to the quirk of + # strtobool() returning an integer in pip's configuration code). + if has_pyproject and not has_setup: + if use_pep517 is not None and not use_pep517: + raise InstallationError( + "Disabling PEP 517 processing is invalid: " + "project does not have a setup.py" + ) + use_pep517 = True + elif build_system and "build-backend" in build_system: + if use_pep517 is not None and not use_pep517: + raise InstallationError( + "Disabling PEP 517 processing is invalid: " + "project specifies a build backend of {} " + "in pyproject.toml".format( + build_system["build-backend"] + ) + ) + use_pep517 = True + + # If we haven't worked out whether to use PEP 517 yet, + # and the user hasn't explicitly stated a preference, + # we do so if the project has a pyproject.toml file. + elif use_pep517 is None: + use_pep517 = has_pyproject + + # At this point, we know whether we're going to use PEP 517. + assert use_pep517 is not None + + # If we're using the legacy code path, there is nothing further + # for us to do here. + if not use_pep517: + return None + + if build_system is None: + # Either the user has a pyproject.toml with no build-system + # section, or the user has no pyproject.toml, but has opted in + # explicitly via --use-pep517. + # 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", "wheel"], + "build-backend": "setuptools.build_meta:__legacy__", + } + + # If we're using PEP 517, we have build system information (either + # from pyproject.toml, or defaulted by the code above). + # Note that at this point, we do not know if the user has actually + # specified a backend, though. + assert build_system is not None + + # Ensure that the build-system section in pyproject.toml conforms + # to PEP 518. + error_template = ( + "{package} has a pyproject.toml file that does not comply " + "with PEP 518: {reason}" + ) + + # Specifying the build-system table but not the requires key is invalid + if "requires" not in build_system: + raise InstallationError( + error_template.format(package=req_name, reason=( + "it has a 'build-system' table but not " + "'build-system.requires' which is mandatory in the table" + )) + ) + + # Error out if requires is not a list of strings + requires = build_system["requires"] + if not _is_list_of_str(requires): + raise InstallationError(error_template.format( + package=req_name, + reason="'build-system.requires' is not a list of strings.", + )) + + backend = build_system.get("build-backend") + check = [] # type: 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, or wheel + # (which is needed by the backend) in their requirements. So we + # make a note to check that those requirements are 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", "wheel"] + + return (requires, backend, check) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/req/__init__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/req/__init__.py new file mode 100644 index 00000000..c39f63fa --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/req/__init__.py @@ -0,0 +1,78 @@ +from __future__ import absolute_import + +import logging + +from .req_install import InstallRequirement +from .req_set import RequirementSet +from .req_file import parse_requirements +from pip._internal.utils.logging import indent_log +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from typing import Any, List, Sequence + +__all__ = [ + "RequirementSet", "InstallRequirement", + "parse_requirements", "install_given_reqs", +] + +logger = logging.getLogger(__name__) + + +def install_given_reqs( + to_install, # type: List[InstallRequirement] + install_options, # type: List[str] + global_options=(), # type: Sequence[str] + *args, # type: Any + **kwargs # type: Any +): + # type: (...) -> List[InstallRequirement] + """ + Install everything in the given list. + + (to be called after having downloaded and unpacked the packages) + """ + + if to_install: + logger.info( + 'Installing collected packages: %s', + ', '.join([req.name for req in to_install]), + ) + + with indent_log(): + for requirement in to_install: + if requirement.conflicts_with: + logger.info( + 'Found existing installation: %s', + requirement.conflicts_with, + ) + with indent_log(): + uninstalled_pathset = requirement.uninstall( + auto_confirm=True + ) + try: + requirement.install( + install_options, + global_options, + *args, + **kwargs + ) + except Exception: + should_rollback = ( + requirement.conflicts_with and + not requirement.install_succeeded + ) + # if install did not succeed, rollback previous uninstall + if should_rollback: + uninstalled_pathset.rollback() + raise + else: + should_commit = ( + requirement.conflicts_with and + requirement.install_succeeded + ) + if should_commit: + uninstalled_pathset.commit() + requirement.remove_temporary_source() + + return to_install diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/req/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/req/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a621e325c78fbdf71ae0703eb2b15ce483a042ae GIT binary patch literal 1648 zcmZux&2J+$6t_K-$z+<3ZMKwEIWQdfh{UE9oIq6tS{7Kb6lg)+j;O53*hwb!eAMG< zn<~A~y|RcKC&USXgb+vm0{#e}kT~tXuqU1;Nw*SsiC3awg&0;lCOPs)|bVt+^H*hQ8x@aU` z;8nUSR+47W#E3WL7~(WUD`^Mqq!Voz z#=#4W?4w@iDPTf9tUKYL$V90)jgvf+YWFFgPjnxog$jk(<0oY-dBRf#?(G}HeQqq> zJd_2e^0`|9RxeH&te_$r8J|xNKR=}RKE8kN6T0`+?(T!#k9wB2-cP66ei#=@yZf-5 zrxBMm*j*atqys{C<2edCicfiJb}1qYCQJjq(FXL-pcj9Gm?7yaG{ForGO5^o47Lx@ z6^4&sq^v9S-5(g8|6;61KV8;lwTUfRwWiXqy}B5|T#Y%b{w=OegX$x{ITi{!XXYXvPB;U;A{O+KP1-rX-G9F}GZ!u%4I*n5}OB#wzShz`H7%NKq z`Sh8$ZO$KMNxt*C0btNL=;F2imQsIPWWY?Z1IlvA#mgUNCD6go!7^vIx(A_(v(%jQ zO90*sOO??mONX&cc6&|jK%tMg)OMT>Gi^_@IF)tSSGSFmh$B_dvsjIFqf8e#bbYBb z?w?0IH}UoA5@bg6DZ0v$`utSWtPI~Lw zqjXrRQgTYA$*8Uy${|780AC)udOCF7SO9VLngD??8peWGPfG9-R8arAdite`MbTfx zs&W=={GW%K=CGM`&DPFhU|t~U8L?6!q7<$frMfZV>fyW~TuM!m1L!s5XE?dRQ&sPV fEbVS587l?fF?XoA1ENV>(!`4ocvv&6Sf2AQyC%&^ literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/req/__pycache__/constructors.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/req/__pycache__/constructors.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..30c7a353e7654cdb8c0dda8707f8f490afd1af74 GIT binary patch literal 7553 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/req/__pycache__/req_file.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/req/__pycache__/req_file.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a01b22b1136bb72f0a9da398fefe9452b1597664 GIT binary patch literal 9191 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/req/__pycache__/req_install.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/req/__pycache__/req_install.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4a66c6481706406f0a52055a99c00b58f79aa649 GIT binary patch literal 24966 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/req/__pycache__/req_set.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/req/__pycache__/req_set.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..46e50f939f62352f15cd6afdee68b5af78f0f7e2 GIT binary patch literal 5629 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/req/__pycache__/req_tracker.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/req/__pycache__/req_tracker.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..423663739e07c91acc7abf8bdcf2171e350a7a37 GIT binary patch literal 3170 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 SfJCR=Pfz!zzixcpDEuEKWFBMy literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/req/constructors.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/req/constructors.py new file mode 100644 index 00000000..0f18b6a7 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/req/constructors.py @@ -0,0 +1,340 @@ +"""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. +""" + +import logging +import os +import re + +from pip._vendor.packaging.markers import Marker +from pip._vendor.packaging.requirements import InvalidRequirement, Requirement +from pip._vendor.packaging.specifiers import Specifier +from pip._vendor.pkg_resources import RequirementParseError, parse_requirements + +from pip._internal.download import ( + is_archive_file, is_url, path_to_url, url_to_path, +) +from pip._internal.exceptions import InstallationError +from pip._internal.models.index import PyPI, TestPyPI +from pip._internal.models.link import Link +from pip._internal.pyproject import make_pyproject_path +from pip._internal.req.req_install import InstallRequirement +from pip._internal.utils.misc import is_installable_dir +from pip._internal.utils.typing import MYPY_CHECK_RUNNING +from pip._internal.vcs import vcs +from pip._internal.wheel import Wheel + +if MYPY_CHECK_RUNNING: + from typing import ( + Any, Dict, Optional, Set, Tuple, Union, + ) + from pip._internal.cache import WheelCache + + +__all__ = [ + "install_req_from_editable", "install_req_from_line", + "parse_editable" +] + +logger = logging.getLogger(__name__) +operators = Specifier._operators.keys() + + +def _strip_extras(path): + # type: (str) -> Tuple[str, Optional[str]] + m = re.match(r'^(.+)(\[[^\]]+\])$', path) + extras = None + if m: + path_no_extras = m.group(1) + extras = m.group(2) + else: + path_no_extras = path + + return path_no_extras, extras + + +def parse_editable(editable_req): + # type: (str) -> Tuple[Optional[str], str, Optional[Set[str]]] + """Parses an editable requirement into: + - a requirement name + - an URL + - extras + - editable options + Accepted requirements: + svn+http://blahblah@rev#egg=Foobar[baz]&subdirectory=version_subdir + .[some_extra] + """ + + 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): + if not os.path.exists(os.path.join(url_no_extras, 'setup.py')): + msg = ( + 'File "setup.py" not found. Directory cannot be installed ' + 'in editable mode: {}'.format(os.path.abspath(url_no_extras)) + ) + pyproject_path = make_pyproject_path(url_no_extras) + if os.path.isfile(pyproject_path): + msg += ( + '\n(A "pyproject.toml" file was found, but editable ' + 'mode currently requires a setup.py based build.)' + ) + raise InstallationError(msg) + + # 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, + Requirement("placeholder" + extras.lower()).extras, + ) + else: + return package_name, url_no_extras, None + + for version_control in vcs: + if url.lower().startswith('%s:' % version_control): + url = '%s+%s' % (version_control, url) + break + + if '+' not in url: + raise InstallationError( + '%s should either be a path to a local project or a VCS url ' + 'beginning with svn+, git+, hg+, or bzr+' % + editable_req + ) + + vc_type = url.split('+', 1)[0].lower() + + if not vcs.get_backend(vc_type): + error_message = 'For --editable=%s only ' % editable_req + \ + ', '.join([backend.name + '+URL' for backend in vcs.backends]) + \ + ' is currently supported' + raise InstallationError(error_message) + + package_name = Link(url).egg_fragment + if not package_name: + raise InstallationError( + "Could not detect requirement name for '%s', please specify one " + "with #egg=your_package_name" % editable_req + ) + return package_name, url, None + + +def deduce_helpful_msg(req): + # type: (str) -> str + """Returns helpful msg in case requirements file does not exist, + or cannot be parsed. + + :params req: Requirements file path + """ + msg = "" + if os.path.exists(req): + msg = " It does exist." + # Try to parse and check if it is a requirements file. + try: + with open(req, 'r') as fp: + # parse first line only + next(parse_requirements(fp.read())) + msg += " The argument you provided " + \ + "(%s) appears to be a" % (req) + \ + " requirements file. If that is the" + \ + " case, use the '-r' flag to install" + \ + " the packages specified within it." + except RequirementParseError: + logger.debug("Cannot parse '%s' as requirements \ + file" % (req), exc_info=True) + else: + msg += " File '%s' does not exist." % (req) + return msg + + +# ---- The actual constructors follow ---- + + +def install_req_from_editable( + editable_req, # type: str + comes_from=None, # type: Optional[str] + use_pep517=None, # type: Optional[bool] + isolated=False, # type: bool + options=None, # type: Optional[Dict[str, Any]] + wheel_cache=None, # type: Optional[WheelCache] + constraint=False # type: bool +): + # type: (...) -> InstallRequirement + name, url, extras_override = parse_editable(editable_req) + if url.startswith('file:'): + source_dir = url_to_path(url) + else: + source_dir = None + + if name is not None: + try: + req = Requirement(name) + except InvalidRequirement: + raise InstallationError("Invalid requirement: '%s'" % name) + else: + req = None + return InstallRequirement( + req, comes_from, source_dir=source_dir, + editable=True, + link=Link(url), + constraint=constraint, + use_pep517=use_pep517, + isolated=isolated, + options=options if options else {}, + wheel_cache=wheel_cache, + extras=extras_override or (), + ) + + +def install_req_from_line( + name, # type: str + comes_from=None, # type: Optional[Union[str, InstallRequirement]] + use_pep517=None, # type: Optional[bool] + isolated=False, # type: bool + options=None, # type: Optional[Dict[str, Any]] + wheel_cache=None, # type: Optional[WheelCache] + constraint=False # type: bool +): + # type: (...) -> InstallRequirement + """Creates an InstallRequirement from a name, which might be a + requirement, directory containing 'setup.py', filename, or URL. + """ + 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) + looks_like_dir = os.path.isdir(p) and ( + os.path.sep in name or + (os.path.altsep is not None and os.path.altsep in name) or + name.startswith('.') + ) + if looks_like_dir: + if not is_installable_dir(p): + raise InstallationError( + "Directory %r is not installable. Neither 'setup.py' " + "nor 'pyproject.toml' found." % name + ) + link = Link(path_to_url(p)) + elif is_archive_file(p): + if not os.path.isfile(p): + logger.warning( + 'Requirement %r looks like a filename, but the ' + 'file does not exist', + name + ) + link = Link(path_to_url(p)) + + # 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 = "%s==%s" % (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 + + if extras_as_string: + extras = Requirement("placeholder" + extras_as_string.lower()).extras + else: + extras = () + if req_as_string is not None: + try: + req = Requirement(req_as_string) + except InvalidRequirement: + 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 = "" + raise InstallationError( + "Invalid requirement: '%s'\n%s" % (req_as_string, add_msg) + ) + else: + req = None + + return InstallRequirement( + req, comes_from, link=link, markers=markers, + use_pep517=use_pep517, isolated=isolated, + options=options if options else {}, + wheel_cache=wheel_cache, + constraint=constraint, + extras=extras, + ) + + +def install_req_from_req_string( + req_string, # type: str + comes_from=None, # type: Optional[InstallRequirement] + isolated=False, # type: bool + wheel_cache=None, # type: Optional[WheelCache] + use_pep517=None # type: Optional[bool] +): + # type: (...) -> InstallRequirement + try: + req = Requirement(req_string) + except InvalidRequirement: + raise InstallationError("Invalid requirement: '%s'" % req_string) + + 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" + "%s depends on %s " % (comes_from.name, req) + ) + + return InstallRequirement( + req, comes_from, isolated=isolated, wheel_cache=wheel_cache, + use_pep517=use_pep517 + ) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/req/req_file.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/req/req_file.py new file mode 100644 index 00000000..270b75cd --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/req/req_file.py @@ -0,0 +1,383 @@ +""" +Requirements file parsing +""" + +from __future__ import absolute_import + +import optparse +import os +import re +import shlex +import sys + +from pip._vendor.six.moves import filterfalse +from pip._vendor.six.moves.urllib import parse as urllib_parse + +from pip._internal.cli import cmdoptions +from pip._internal.download import get_file_content +from pip._internal.exceptions import RequirementsFileParseError +from pip._internal.req.constructors import ( + install_req_from_editable, install_req_from_line, +) +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from typing import ( + Any, Callable, Iterator, List, NoReturn, Optional, Text, Tuple, + ) + from pip._internal.req import InstallRequirement + from pip._internal.cache import WheelCache + from pip._internal.index import PackageFinder + from pip._internal.download import PipSession + + ReqFileLines = Iterator[Tuple[int, Text]] + +__all__ = ['parse_requirements'] + +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\$\{(?P[A-Z0-9_]+)\})') + +SUPPORTED_OPTIONS = [ + cmdoptions.constraints, + cmdoptions.editable, + cmdoptions.requirements, + cmdoptions.no_index, + cmdoptions.index_url, + cmdoptions.find_links, + cmdoptions.extra_index_url, + cmdoptions.always_unzip, + cmdoptions.no_binary, + cmdoptions.only_binary, + cmdoptions.pre, + cmdoptions.trusted_host, + cmdoptions.require_hashes, +] # type: List[Callable[..., optparse.Option]] + +# options to be passed to requirements +SUPPORTED_OPTIONS_REQ = [ + cmdoptions.install_options, + cmdoptions.global_options, + cmdoptions.hash, +] # type: List[Callable[..., optparse.Option]] + +# the 'dest' string values +SUPPORTED_OPTIONS_REQ_DEST = [str(o().dest) for o in SUPPORTED_OPTIONS_REQ] + + +def parse_requirements( + filename, # type: str + finder=None, # type: Optional[PackageFinder] + comes_from=None, # type: Optional[str] + options=None, # type: Optional[optparse.Values] + session=None, # type: Optional[PipSession] + constraint=False, # type: bool + wheel_cache=None, # type: Optional[WheelCache] + use_pep517=None # type: Optional[bool] +): + # type: (...) -> Iterator[InstallRequirement] + """Parse a requirements file and yield InstallRequirement instances. + + :param filename: Path or url of requirements file. + :param finder: Instance of pip.index.PackageFinder. + :param comes_from: Origin description of requirements. + :param options: cli options. + :param session: Instance of pip.download.PipSession. + :param constraint: If true, parsing a constraint file rather than + requirements file. + :param wheel_cache: Instance of pip.wheel.WheelCache + :param use_pep517: Value of the --use-pep517 option. + """ + if session is None: + raise TypeError( + "parse_requirements() missing 1 required keyword argument: " + "'session'" + ) + + _, content = get_file_content( + filename, comes_from=comes_from, session=session + ) + + lines_enum = preprocess(content, options) + + for line_number, line in lines_enum: + req_iter = process_line(line, filename, line_number, finder, + comes_from, options, session, wheel_cache, + use_pep517=use_pep517, constraint=constraint) + for req in req_iter: + yield req + + +def preprocess(content, options): + # type: (Text, Optional[optparse.Values]) -> ReqFileLines + """Split, filter, and join lines, and return a line iterator + + :param content: the content of the requirements file + :param options: cli options + """ + lines_enum = enumerate(content.splitlines(), start=1) # type: ReqFileLines + lines_enum = join_lines(lines_enum) + lines_enum = ignore_comments(lines_enum) + lines_enum = skip_regex(lines_enum, options) + lines_enum = expand_env_variables(lines_enum) + return lines_enum + + +def process_line( + line, # type: Text + filename, # type: str + line_number, # type: int + finder=None, # type: Optional[PackageFinder] + comes_from=None, # type: Optional[str] + options=None, # type: Optional[optparse.Values] + session=None, # type: Optional[PipSession] + wheel_cache=None, # type: Optional[WheelCache] + use_pep517=None, # type: Optional[bool] + constraint=False # type: bool +): + # type: (...) -> Iterator[InstallRequirement] + """Process a single requirements line; This can result in creating/yielding + requirements, or updating the finder. + + 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. + + :param constraint: If True, parsing a constraints file. + :param options: OptionParser options that we may update + """ + parser = build_parser(line) + defaults = parser.get_default_values() + defaults.index_url = None + if finder: + defaults.format_control = finder.format_control + args_str, options_str = break_args_options(line) + # Prior to 2.7.3, shlex cannot deal with unicode entries + if sys.version_info < (2, 7, 3): + # https://github.com/python/mypy/issues/1174 + options_str = options_str.encode('utf8') # type: ignore + # https://github.com/python/mypy/issues/1174 + opts, _ = parser.parse_args( + shlex.split(options_str), defaults) # type: ignore + + # preserve for the nested code path + line_comes_from = '%s %s (line %s)' % ( + '-c' if constraint else '-r', filename, line_number, + ) + + # yield a line requirement + if args_str: + isolated = options.isolated_mode if options else False + if options: + cmdoptions.check_install_build_global(options, opts) + # get the options that apply to requirements + req_options = {} + for dest in SUPPORTED_OPTIONS_REQ_DEST: + if dest in opts.__dict__ and opts.__dict__[dest]: + req_options[dest] = opts.__dict__[dest] + yield install_req_from_line( + args_str, line_comes_from, constraint=constraint, + use_pep517=use_pep517, + isolated=isolated, options=req_options, wheel_cache=wheel_cache + ) + + # yield an editable requirement + elif opts.editables: + isolated = options.isolated_mode if options else False + yield install_req_from_editable( + opts.editables[0], comes_from=line_comes_from, + use_pep517=use_pep517, + constraint=constraint, isolated=isolated, wheel_cache=wheel_cache + ) + + # parse a nested requirements file + elif opts.requirements or opts.constraints: + if opts.requirements: + req_path = opts.requirements[0] + nested_constraint = False + else: + req_path = 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 + req_path = os.path.join(os.path.dirname(filename), req_path) + # TODO: Why not use `comes_from='-r {} (line {})'` here as well? + parsed_reqs = parse_requirements( + req_path, finder, comes_from, options, session, + constraint=nested_constraint, wheel_cache=wheel_cache + ) + for req in parsed_reqs: + yield req + + # percolate hash-checking option upward + elif opts.require_hashes: + options.require_hashes = opts.require_hashes + + # set finder options + elif finder: + if opts.index_url: + finder.index_urls = [opts.index_url] + if opts.no_index is True: + finder.index_urls = [] + if opts.extra_index_urls: + finder.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 + finder.find_links.append(value) + if opts.pre: + finder.allow_all_prereleases = True + if opts.trusted_hosts: + finder.secure_origins.extend( + ("*", host, "*") for host in opts.trusted_hosts) + + +def break_args_options(line): + # type: (Text) -> Tuple[str, Text] + """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('-') or token.startswith('--'): + break + else: + args.append(token) + options.pop(0) + return ' '.join(args), ' '.join(options) # type: ignore + + +def build_parser(line): + # type: (Text) -> 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, msg): + # type: (Any, str) -> NoReturn + # add offending line + msg = 'Invalid requirement: %s\n%s' % (line, msg) + raise RequirementsFileParseError(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): + # type: (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 = [] # type: List[Text] + 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) + 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: + yield primary_line_number, ''.join(new_line) + + # TODO: handle space after '\'. + + +def ignore_comments(lines_enum): + # type: (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 skip_regex(lines_enum, options): + # type: (ReqFileLines, Optional[optparse.Values]) -> ReqFileLines + """ + Skip lines that match '--skip-requirements-regex' pattern + + Note: the regex pattern is only built once + """ + skip_regex = options.skip_requirements_regex if options else None + if skip_regex: + pattern = re.compile(skip_regex) + lines_enum = filterfalse(lambda e: pattern.search(e[1]), lines_enum) + return lines_enum + + +def expand_env_variables(lines_enum): + # type: (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 `_. + + Valid characters in variable names follow the `POSIX standard + `_ 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 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/req/req_install.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/req/req_install.py new file mode 100644 index 00000000..25a692e1 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/req/req_install.py @@ -0,0 +1,1028 @@ +from __future__ import absolute_import + +import logging +import os +import shutil +import sys +import sysconfig +import zipfile +from distutils.util import change_root + +from pip._vendor import pkg_resources, six +from pip._vendor.packaging.requirements import Requirement +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.pep517.wrappers import Pep517HookCaller + +from pip._internal import wheel +from pip._internal.build_env import NoOpBuildEnvironment +from pip._internal.exceptions import InstallationError +from pip._internal.locations import ( + PIP_DELETE_MARKER_FILENAME, running_under_virtualenv, +) +from pip._internal.models.link import Link +from pip._internal.pyproject import load_pyproject_toml, make_pyproject_path +from pip._internal.req.req_uninstall import UninstallPathSet +from pip._internal.utils.compat import native_str +from pip._internal.utils.hashes import Hashes +from pip._internal.utils.logging import indent_log +from pip._internal.utils.misc import ( + _make_build_dir, ask_path_exists, backup_dir, call_subprocess, + display_path, dist_in_site_packages, dist_in_usersite, ensure_dir, + get_installed_version, redact_password_from_url, rmtree, +) +from pip._internal.utils.packaging import get_metadata +from pip._internal.utils.setuptools_build import SETUPTOOLS_SHIM +from pip._internal.utils.temp_dir import TempDirectory +from pip._internal.utils.typing import MYPY_CHECK_RUNNING +from pip._internal.utils.ui import open_spinner +from pip._internal.vcs import vcs +from pip._internal.wheel import move_wheel_files + +if MYPY_CHECK_RUNNING: + from typing import ( + Any, Dict, Iterable, List, Mapping, Optional, Sequence, Union, + ) + from pip._internal.build_env import BuildEnvironment + from pip._internal.cache import WheelCache + from pip._internal.index import PackageFinder + from pip._vendor.pkg_resources import Distribution + from pip._vendor.packaging.specifiers import SpecifierSet + from pip._vendor.packaging.markers import Marker + + +logger = logging.getLogger(__name__) + + +class InstallRequirement(object): + """ + 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, # type: Optional[Requirement] + comes_from, # type: Optional[Union[str, InstallRequirement]] + source_dir=None, # type: Optional[str] + editable=False, # type: bool + link=None, # type: Optional[Link] + update=True, # type: bool + markers=None, # type: Optional[Marker] + use_pep517=None, # type: Optional[bool] + isolated=False, # type: bool + options=None, # type: Optional[Dict[str, Any]] + wheel_cache=None, # type: Optional[WheelCache] + constraint=False, # type: bool + extras=() # type: Iterable[str] + ): + # type: (...) -> None + assert req is None or isinstance(req, Requirement), req + self.req = req + self.comes_from = comes_from + self.constraint = constraint + if source_dir is not None: + self.source_dir = os.path.normpath(os.path.abspath(source_dir)) + else: + self.source_dir = None + self.editable = editable + + self._wheel_cache = wheel_cache + if link is None and req and req.url: + # PEP 508 URL requirement + link = Link(req.url) + self.link = self.original_link = link + + if extras: + self.extras = extras + elif req: + self.extras = { + pkg_resources.safe_extra(extra) for extra in req.extras + } + else: + self.extras = set() + if markers is None and req: + markers = req.marker + self.markers = markers + + self._egg_info_path = None # type: Optional[str] + # This holds the pkg_resources.Distribution object if this requirement + # is already available: + self.satisfied_by = None + # This hold the pkg_resources.Distribution object if this requirement + # conflicts with another installed distribution: + self.conflicts_with = None + # Temporary build location + self._temp_build_dir = TempDirectory(kind="req-build") + # Used to store the global directory where the _temp_build_dir should + # have been created. Cf _correct_build_location method. + self._ideal_build_dir = None # type: Optional[str] + # True if the editable should be updated: + self.update = update + # Set to True after successful installation + self.install_succeeded = None # type: Optional[bool] + # UninstallPathSet of uninstalled distribution (for possible rollback) + self.uninstalled_pathset = None + self.options = options if options else {} + # Set to True after successful preparation of this requirement + self.prepared = False + self.is_direct = False + + self.isolated = isolated + self.build_env = NoOpBuildEnvironment() # type: BuildEnvironment + + # 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 = None # type: Optional[str] + + # The static build requirements (from pyproject.toml) + self.pyproject_requires = None # type: Optional[List[str]] + + # Build requirements that we will check are available + self.requirements_to_check = [] # type: List[str] + + # The PEP 517 backend we should use to build the project + self.pep517_backend = None # type: Optional[Pep517HookCaller] + + # Are we using PEP 517 for this requirement? + # After pyproject.toml has been loaded, the only valid values are True + # and False. Before loading, None is valid (meaning "use the default"). + # Setting an explicit value before loading pyproject.toml is supported, + # but after loading this flag should be treated as read only. + self.use_pep517 = use_pep517 + + def __str__(self): + # type: () -> str + if self.req: + s = str(self.req) + if self.link: + s += ' from %s' % redact_password_from_url(self.link.url) + elif self.link: + s = redact_password_from_url(self.link.url) + else: + s = '' + if self.satisfied_by is not None: + s += ' in %s' % display_path(self.satisfied_by.location) + if self.comes_from: + if isinstance(self.comes_from, six.string_types): + comes_from = self.comes_from + else: + comes_from = self.comes_from.from_path() + if comes_from: + s += ' (from %s)' % comes_from + return s + + def __repr__(self): + # type: () -> str + return '<%s object: %s editable=%r>' % ( + self.__class__.__name__, str(self), self.editable) + + def populate_link(self, finder, upgrade, require_hashes): + # type: (PackageFinder, bool, bool) -> None + """Ensure that if a link can be found for this, that it is found. + + Note that self.link may still be None - if Upgrade is False and the + requirement is already installed. + + If 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 self.link is None: + self.link = finder.find_requirement(self, upgrade) + if self._wheel_cache is not None and not require_hashes: + old_link = self.link + self.link = self._wheel_cache.get(self.link, self.name) + if old_link != self.link: + logger.debug('Using cached wheel link: %s', self.link) + + # Things that are valid for all kinds of requirements? + @property + def name(self): + # type: () -> Optional[str] + if self.req is None: + return None + return native_str(pkg_resources.safe_name(self.req.name)) + + @property + def specifier(self): + # type: () -> SpecifierSet + return self.req.specifier + + @property + def is_pinned(self): + # type: () -> bool + """Return whether I am pinned to an exact version. + + For example, some-package==1.2 is pinned; some-package>1.2 is not. + """ + specifiers = self.specifier + return (len(specifiers) == 1 and + next(iter(specifiers)).operator in {'==', '==='}) + + @property + def installed_version(self): + # type: () -> Optional[str] + return get_installed_version(self.name) + + def match_markers(self, extras_requested=None): + # type: (Optional[Iterable[str]]) -> 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): + # type: () -> 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.options.get('hashes', {})) + + def hashes(self, trust_internet=True): + # type: (bool) -> 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.options.get('hashes', {}).copy() + link = self.link if trust_internet else self.original_link + if link and link.hash: + good_hashes.setdefault(link.hash_name, []).append(link.hash) + return Hashes(good_hashes) + + def from_path(self): + # type: () -> Optional[str] + """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: + if isinstance(self.comes_from, six.string_types): + comes_from = self.comes_from + else: + comes_from = self.comes_from.from_path() + if comes_from: + s += '->' + comes_from + return s + + def build_location(self, build_dir): + # type: (str) -> Optional[str] + assert build_dir is not None + if self._temp_build_dir.path is not None: + return self._temp_build_dir.path + if self.req is None: + # for requirement via a path to a directory: the name of the + # package is not available yet so we create a temp directory + # Once run_egg_info will have run, we'll be able + # to fix it via _correct_build_location + # 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.create() + self._ideal_build_dir = build_dir + + return self._temp_build_dir.path + if self.editable: + name = self.name.lower() + else: + name = self.name + # 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) + _make_build_dir(build_dir) + return os.path.join(build_dir, name) + + def _correct_build_location(self): + # type: () -> None + """Move self._temp_build_dir to self._ideal_build_dir/self.req.name + + For some requirements (e.g. a path to a directory), the name of the + package is not available until we run egg_info, so the build_location + will return a temporary directory and store the _ideal_build_dir. + + This is only called by self.run_egg_info to fix the temporary build + directory. + """ + if self.source_dir is not None: + return + assert self.req is not None + assert self._temp_build_dir.path + assert (self._ideal_build_dir is not None and + self._ideal_build_dir.path) # type: ignore + old_location = self._temp_build_dir.path + self._temp_build_dir.path = None + + new_location = self.build_location(self._ideal_build_dir) + if os.path.exists(new_location): + raise InstallationError( + 'A package already exists in %s; please remove it to continue' + % display_path(new_location)) + logger.debug( + 'Moving package %s from %s to new location %s', + self, display_path(old_location), display_path(new_location), + ) + shutil.move(old_location, new_location) + self._temp_build_dir.path = new_location + self._ideal_build_dir = None + self.source_dir = os.path.normpath(os.path.abspath(new_location)) + self._egg_info_path = None + + # Correct the metadata directory, if it exists + if self.metadata_directory: + old_meta = self.metadata_directory + rel = os.path.relpath(old_meta, start=old_location) + new_meta = os.path.join(new_location, rel) + new_meta = os.path.normpath(os.path.abspath(new_meta)) + self.metadata_directory = new_meta + + def remove_temporary_source(self): + # type: () -> None + """Remove the source files from this requirement, if they are marked + for deletion""" + if self.source_dir and os.path.exists( + os.path.join(self.source_dir, PIP_DELETE_MARKER_FILENAME)): + logger.debug('Removing source in %s', self.source_dir) + rmtree(self.source_dir) + self.source_dir = None + self._temp_build_dir.cleanup() + self.build_env.cleanup() + + def check_if_exists(self, use_user_site): + # type: (bool) -> bool + """Find an installed distribution that satisfies or conflicts + with this requirement, and set self.satisfied_by or + self.conflicts_with appropriately. + """ + if self.req is None: + return False + try: + # get_distribution() will resolve the entire list of requirements + # anyway, and we've already determined that we need the requirement + # in question, so strip the marker so that we don't try to + # evaluate it. + no_marker = Requirement(str(self.req)) + no_marker.marker = None + self.satisfied_by = pkg_resources.get_distribution(str(no_marker)) + if self.editable and self.satisfied_by: + self.conflicts_with = self.satisfied_by + # when installing editables, nothing pre-existing should ever + # satisfy + self.satisfied_by = None + return True + except pkg_resources.DistributionNotFound: + return False + except pkg_resources.VersionConflict: + existing_dist = pkg_resources.get_distribution( + self.req.name + ) + if use_user_site: + if dist_in_usersite(existing_dist): + self.conflicts_with = existing_dist + elif (running_under_virtualenv() and + dist_in_site_packages(existing_dist)): + raise InstallationError( + "Will not install to the user site because it will " + "lack sys.path precedence to %s in %s" % + (existing_dist.project_name, existing_dist.location) + ) + else: + self.conflicts_with = existing_dist + return True + + # Things valid for wheels + @property + def is_wheel(self): + # type: () -> bool + if not self.link: + return False + return self.link.is_wheel + + def move_wheel_files( + self, + wheeldir, # type: str + root=None, # type: Optional[str] + home=None, # type: Optional[str] + prefix=None, # type: Optional[str] + warn_script_location=True, # type: bool + use_user_site=False, # type: bool + pycompile=True # type: bool + ): + # type: (...) -> None + move_wheel_files( + self.name, self.req, wheeldir, + user=use_user_site, + home=home, + root=root, + prefix=prefix, + pycompile=pycompile, + isolated=self.isolated, + warn_script_location=warn_script_location, + ) + + # Things valid for sdists + @property + def setup_py_dir(self): + # type: () -> str + return os.path.join( + self.source_dir, + self.link and self.link.subdirectory_fragment or '') + + @property + def setup_py(self): + # type: () -> str + assert self.source_dir, "No source dir for %s" % self + + setup_py = os.path.join(self.setup_py_dir, 'setup.py') + + # Python2 __file__ should not be unicode + if six.PY2 and isinstance(setup_py, six.text_type): + setup_py = setup_py.encode(sys.getfilesystemencoding()) + + return setup_py + + @property + def pyproject_toml(self): + # type: () -> str + assert self.source_dir, "No source dir for %s" % self + + return make_pyproject_path(self.setup_py_dir) + + def load_pyproject_toml(self): + # type: () -> 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. In particular, the + use_pep517 attribute can be used to determine whether we should + follow the PEP 517 or legacy (setup.py) code path. + """ + pep517_data = load_pyproject_toml( + self.use_pep517, + self.pyproject_toml, + self.setup_py, + str(self) + ) + + if pep517_data is None: + self.use_pep517 = False + else: + self.use_pep517 = True + requires, backend, check = pep517_data + self.requirements_to_check = check + self.pyproject_requires = requires + self.pep517_backend = Pep517HookCaller(self.setup_py_dir, backend) + + # Use a custom function to call subprocesses + self.spin_message = "" + + def runner( + cmd, # type: List[str] + cwd=None, # type: Optional[str] + extra_environ=None # type: Optional[Mapping[str, Any]] + ): + # type: (...) -> None + with open_spinner(self.spin_message) as spinner: + call_subprocess( + cmd, + cwd=cwd, + extra_environ=extra_environ, + spinner=spinner + ) + self.spin_message = "" + + self.pep517_backend._subprocess_runner = runner + + def prepare_metadata(self): + # type: () -> None + """Ensure that project metadata is available. + + Under PEP 517, call the backend hook to prepare the metadata. + Under legacy processing, call setup.py egg-info. + """ + assert self.source_dir + + with indent_log(): + if self.use_pep517: + self.prepare_pep517_metadata() + else: + self.run_egg_info() + + if not self.req: + if isinstance(parse_version(self.metadata["Version"]), Version): + op = "==" + else: + op = "===" + self.req = Requirement( + "".join([ + self.metadata["Name"], + op, + self.metadata["Version"], + ]) + ) + self._correct_build_location() + else: + metadata_name = canonicalize_name(self.metadata["Name"]) + if canonicalize_name(self.req.name) != metadata_name: + 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 = Requirement(metadata_name) + + def prepare_pep517_metadata(self): + # type: () -> None + assert self.pep517_backend is not None + + metadata_dir = os.path.join( + self.setup_py_dir, + 'pip-wheel-metadata' + ) + ensure_dir(metadata_dir) + + with self.build_env: + # Note that Pep517HookCaller implements a fallback for + # prepare_metadata_for_build_wheel, so we don't have to + # consider the possibility that this hook doesn't exist. + backend = self.pep517_backend + self.spin_message = "Preparing wheel metadata" + distinfo_dir = backend.prepare_metadata_for_build_wheel( + metadata_dir + ) + + self.metadata_directory = os.path.join(metadata_dir, distinfo_dir) + + def run_egg_info(self): + # type: () -> None + if self.name: + logger.debug( + 'Running setup.py (path:%s) egg_info for package %s', + self.setup_py, self.name, + ) + else: + logger.debug( + 'Running setup.py (path:%s) egg_info for package from %s', + self.setup_py, self.link, + ) + script = SETUPTOOLS_SHIM % self.setup_py + base_cmd = [sys.executable, '-c', script] + if self.isolated: + base_cmd += ["--no-user-cfg"] + egg_info_cmd = base_cmd + ['egg_info'] + # We can't put the .egg-info files at the root, because then the + # source code will be mistaken for an installed egg, causing + # problems + if self.editable: + egg_base_option = [] # type: List[str] + else: + egg_info_dir = os.path.join(self.setup_py_dir, 'pip-egg-info') + ensure_dir(egg_info_dir) + egg_base_option = ['--egg-base', 'pip-egg-info'] + with self.build_env: + call_subprocess( + egg_info_cmd + egg_base_option, + cwd=self.setup_py_dir, + command_desc='python setup.py egg_info') + + @property + def egg_info_path(self): + # type: () -> str + if self._egg_info_path is None: + if self.editable: + base = self.source_dir + else: + base = os.path.join(self.setup_py_dir, 'pip-egg-info') + filenames = os.listdir(base) + if self.editable: + filenames = [] + for root, dirs, files in os.walk(base): + for dir in vcs.dirnames: + if dir in dirs: + dirs.remove(dir) + # Iterate over a copy of ``dirs``, since mutating + # a list while iterating over it can cause trouble. + # (See https://github.com/pypa/pip/pull/462.) + for dir in list(dirs): + # Don't search in anything that looks like a virtualenv + # environment + if ( + os.path.lexists( + os.path.join(root, dir, 'bin', 'python') + ) or + os.path.exists( + os.path.join( + root, dir, 'Scripts', 'Python.exe' + ) + )): + dirs.remove(dir) + # Also don't search through tests + elif dir == 'test' or dir == 'tests': + dirs.remove(dir) + filenames.extend([os.path.join(root, dir) + for dir in dirs]) + filenames = [f for f in filenames if f.endswith('.egg-info')] + + if not filenames: + raise InstallationError( + "Files/directories not found in %s" % base + ) + # if we have more than one match, we pick the toplevel one. This + # can easily be the case if there is a dist folder which contains + # an extracted tarball for testing purposes. + if len(filenames) > 1: + filenames.sort( + key=lambda x: x.count(os.path.sep) + + (os.path.altsep and x.count(os.path.altsep) or 0) + ) + self._egg_info_path = os.path.join(base, filenames[0]) + return self._egg_info_path + + @property + def metadata(self): + # type: () -> Any + if not hasattr(self, '_metadata'): + self._metadata = get_metadata(self.get_dist()) + + return self._metadata + + def get_dist(self): + # type: () -> Distribution + """Return a pkg_resources.Distribution for this requirement""" + if self.metadata_directory: + base_dir, distinfo = os.path.split(self.metadata_directory) + metadata = pkg_resources.PathMetadata( + base_dir, self.metadata_directory + ) + dist_name = os.path.splitext(distinfo)[0] + typ = pkg_resources.DistInfoDistribution + else: + egg_info = self.egg_info_path.rstrip(os.path.sep) + base_dir = os.path.dirname(egg_info) + metadata = pkg_resources.PathMetadata(base_dir, egg_info) + dist_name = os.path.splitext(os.path.basename(egg_info))[0] + # https://github.com/python/mypy/issues/1174 + typ = pkg_resources.Distribution # type: ignore + + return typ( + base_dir, + project_name=dist_name, + metadata=metadata, + ) + + def assert_source_matches_version(self): + # type: () -> None + assert self.source_dir + version = self.metadata['version'] + if 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): + # type: (str) -> str + """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.build_location(parent_dir) + return self.source_dir + + # For editable installations + def install_editable( + self, + install_options, # type: List[str] + global_options=(), # type: Sequence[str] + prefix=None # type: Optional[str] + ): + # type: (...) -> None + logger.info('Running setup.py develop for %s', self.name) + + if self.isolated: + global_options = list(global_options) + ["--no-user-cfg"] + + if prefix: + prefix_param = ['--prefix={}'.format(prefix)] + install_options = list(install_options) + prefix_param + + with indent_log(): + # FIXME: should we do --install-headers here too? + with self.build_env: + call_subprocess( + [ + sys.executable, + '-c', + SETUPTOOLS_SHIM % self.setup_py + ] + + list(global_options) + + ['develop', '--no-deps'] + + list(install_options), + + cwd=self.setup_py_dir, + ) + + self.install_succeeded = True + + def update_editable(self, obtain=True): + # type: (bool) -> 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 + assert '+' in self.link.url, "bad url: %r" % self.link.url + if not self.update: + return + vc_type, url = self.link.url.split('+', 1) + backend = vcs.get_backend(vc_type) + if backend: + vcs_backend = backend(self.link.url) + if obtain: + vcs_backend.obtain(self.source_dir) + else: + vcs_backend.export(self.source_dir) + else: + assert 0, ( + 'Unexpected version control type (in %s): %s' + % (self.link, vc_type)) + + # Top-level Actions + def uninstall(self, auto_confirm=False, verbose=False, + use_user_site=False): + # type: (bool, bool, bool) -> Optional[UninstallPathSet] + """ + 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. + + """ + if not self.check_if_exists(use_user_site): + logger.warning("Skipping %s as it is not installed.", self.name) + return None + dist = self.satisfied_by or self.conflicts_with + + uninstalled_pathset = UninstallPathSet.from_dist(dist) + uninstalled_pathset.remove(auto_confirm, verbose) + return uninstalled_pathset + + def _clean_zip_name(self, name, prefix): # only used by archive. + # type: (str, str) -> str + assert name.startswith(prefix + os.path.sep), ( + "name %r doesn't start with prefix %r" % (name, prefix) + ) + name = name[len(prefix) + 1:] + name = name.replace(os.path.sep, '/') + return name + + def _get_archive_name(self, path, parentdir, rootdir): + # type: (str, str, str) -> str + path = os.path.join(parentdir, path) + name = self._clean_zip_name(path, rootdir) + return self.name + '/' + name + + # TODO: Investigate if this should be kept in InstallRequirement + # Seems to be used only when VCS + downloads + def archive(self, build_dir): + # type: (str) -> None + assert self.source_dir + create_archive = True + archive_name = '%s-%s.zip' % (self.name, self.metadata["version"]) + archive_path = os.path.join(build_dir, archive_name) + if os.path.exists(archive_path): + response = ask_path_exists( + 'The file %s exists. (i)gnore, (w)ipe, (b)ackup, (a)bort ' % + display_path(archive_path), ('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 create_archive: + zip = zipfile.ZipFile( + archive_path, 'w', zipfile.ZIP_DEFLATED, + allowZip64=True + ) + dir = os.path.normcase(os.path.abspath(self.setup_py_dir)) + for dirpath, dirnames, filenames in os.walk(dir): + if 'pip-egg-info' in dirnames: + dirnames.remove('pip-egg-info') + 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.writestr(zipdir, '') + for filename in filenames: + if filename == PIP_DELETE_MARKER_FILENAME: + continue + file_arcname = self._get_archive_name(filename, + parentdir=dirpath, + rootdir=dir) + filename = os.path.join(dirpath, filename) + zip.write(filename, file_arcname) + zip.close() + logger.info('Saved %s', display_path(archive_path)) + + def install( + self, + install_options, # type: List[str] + global_options=None, # type: Optional[Sequence[str]] + root=None, # type: Optional[str] + home=None, # type: Optional[str] + prefix=None, # type: Optional[str] + warn_script_location=True, # type: bool + use_user_site=False, # type: bool + pycompile=True # type: bool + ): + # type: (...) -> None + global_options = global_options if global_options is not None else [] + if self.editable: + self.install_editable( + install_options, global_options, prefix=prefix, + ) + return + if self.is_wheel: + version = wheel.wheel_version(self.source_dir) + wheel.check_compatibility(version, self.name) + + self.move_wheel_files( + self.source_dir, root=root, prefix=prefix, home=home, + warn_script_location=warn_script_location, + use_user_site=use_user_site, pycompile=pycompile, + ) + self.install_succeeded = True + return + + # Extend the list of global and install options passed on to + # the setup.py call with the ones from the requirements file. + # Options specified in requirements file override those + # specified on the command line, since the last option given + # to setup.py is the one that is used. + global_options = list(global_options) + \ + self.options.get('global_options', []) + install_options = list(install_options) + \ + self.options.get('install_options', []) + + if self.isolated: + # https://github.com/python/mypy/issues/1174 + global_options = global_options + ["--no-user-cfg"] # type: ignore + + with TempDirectory(kind="record") as temp_dir: + record_filename = os.path.join(temp_dir.path, 'install-record.txt') + install_args = self.get_install_args( + global_options, record_filename, root, prefix, pycompile, + ) + msg = 'Running setup.py install for %s' % (self.name,) + with open_spinner(msg) as spinner: + with indent_log(): + with self.build_env: + call_subprocess( + install_args + install_options, + cwd=self.setup_py_dir, + spinner=spinner, + ) + + if not os.path.exists(record_filename): + logger.debug('Record file %s not found', record_filename) + return + self.install_succeeded = True + + def prepend_root(path): + # type: (str) -> str + if root is None or not os.path.isabs(path): + return path + else: + return change_root(root, path) + + with open(record_filename) as f: + for line in f: + directory = os.path.dirname(line) + if directory.endswith('.egg-info'): + egg_info_dir = prepend_root(directory) + break + else: + logger.warning( + 'Could not find .egg-info directory in install record' + ' for %s', + self, + ) + # FIXME: put the record somewhere + # FIXME: should this be an error? + return + new_lines = [] + with open(record_filename) as f: + for line in f: + filename = line.strip() + if os.path.isdir(filename): + filename += os.path.sep + new_lines.append( + os.path.relpath(prepend_root(filename), egg_info_dir) + ) + new_lines.sort() + ensure_dir(egg_info_dir) + inst_files_path = os.path.join(egg_info_dir, 'installed-files.txt') + with open(inst_files_path, 'w') as f: + f.write('\n'.join(new_lines) + '\n') + + def get_install_args( + self, + global_options, # type: Sequence[str] + record_filename, # type: str + root, # type: Optional[str] + prefix, # type: Optional[str] + pycompile # type: bool + ): + # type: (...) -> List[str] + install_args = [sys.executable, "-u"] + install_args.append('-c') + install_args.append(SETUPTOOLS_SHIM % self.setup_py) + install_args += list(global_options) + \ + ['install', '--record', record_filename] + install_args += ['--single-version-externally-managed'] + + if root is not None: + install_args += ['--root', root] + if prefix is not None: + install_args += ['--prefix', prefix] + + if pycompile: + install_args += ["--compile"] + else: + install_args += ["--no-compile"] + + if running_under_virtualenv(): + py_ver_str = 'python' + sysconfig.get_python_version() + install_args += ['--install-headers', + os.path.join(sys.prefix, 'include', 'site', + py_ver_str, self.name)] + + return install_args diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/req/req_set.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/req/req_set.py new file mode 100644 index 00000000..d1966a4a --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/req/req_set.py @@ -0,0 +1,193 @@ +from __future__ import absolute_import + +import logging +from collections import OrderedDict + +from pip._internal.exceptions import InstallationError +from pip._internal.utils.logging import indent_log +from pip._internal.utils.typing import MYPY_CHECK_RUNNING +from pip._internal.wheel import Wheel + +if MYPY_CHECK_RUNNING: + from typing import Dict, Iterable, List, Optional, Tuple + from pip._internal.req.req_install import InstallRequirement + + +logger = logging.getLogger(__name__) + + +class RequirementSet(object): + + def __init__(self, require_hashes=False, check_supported_wheels=True): + # type: (bool, bool) -> None + """Create a RequirementSet. + """ + + self.requirements = OrderedDict() # type: Dict[str, InstallRequirement] # noqa: E501 + self.require_hashes = require_hashes + self.check_supported_wheels = check_supported_wheels + + # Mapping of alias: real_name + self.requirement_aliases = {} # type: Dict[str, str] + self.unnamed_requirements = [] # type: List[InstallRequirement] + self.successfully_downloaded = [] # type: List[InstallRequirement] + self.reqs_to_cleanup = [] # type: List[InstallRequirement] + + def __str__(self): + # type: () -> str + reqs = [req for req in self.requirements.values() + if not req.comes_from] + reqs.sort(key=lambda req: req.name.lower()) + return ' '.join([str(req.req) for req in reqs]) + + def __repr__(self): + # type: () -> str + reqs = [req for req in self.requirements.values()] + reqs.sort(key=lambda req: req.name.lower()) + reqs_str = ', '.join([str(req.req) for req in reqs]) + return ('<%s object; %d requirement(s): %s>' + % (self.__class__.__name__, len(reqs), reqs_str)) + + def add_requirement( + self, + install_req, # type: InstallRequirement + parent_req_name=None, # type: Optional[str] + extras_requested=None # type: Optional[Iterable[str]] + ): + # type: (...) -> Tuple[List[InstallRequirement], Optional[InstallRequirement]] # noqa: E501 + """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. + """ + name = install_req.name + + # 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", + 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) + if self.check_supported_wheels and not wheel.supported(): + raise InstallationError( + "%s is not a supported wheel on this platform." % + wheel.filename + ) + + # This next bit is really a sanity check. + assert install_req.is_direct == (parent_req_name is None), ( + "a direct req shouldn't have a parent and also, " + "a non direct req should have a parent" + ) + + # Unnamed requirements are scanned again and the requirement won't be + # added as a dependency until after scanning. + if not name: + # url or path requirement w/o an egg fragment + self.unnamed_requirements.append(install_req) + return [install_req], None + + try: + existing_req = self.get_requirement(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.specifier != install_req.req.specifier + ) + if has_conflicting_requirement: + raise InstallationError( + "Double requirement given: %s (already in %s, name=%r)" + % (install_req, existing_req, name) + ) + + # When no existing requirement exists, add the requirement as a + # dependency and it will be scanned again after. + if not existing_req: + self.requirements[name] = install_req + # FIXME: what about other normalizations? E.g., _ vs. -? + if name.lower() != name: + self.requirement_aliases[name.lower()] = name + # We'd want to rescan this requirements 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: + self.reqs_to_cleanup.append(install_req) + raise InstallationError( + "Could not satisfy constraints for '%s': " + "installation from path or url cannot be " + "constrained to a version" % name, + ) + # If we're now installing a constraint, mark the existing + # object for real installation. + existing_req.constraint = False + 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 has_requirement(self, project_name): + # type: (str) -> bool + name = project_name.lower() + if (name in self.requirements and + not self.requirements[name].constraint or + name in self.requirement_aliases and + not self.requirements[self.requirement_aliases[name]].constraint): + return True + return False + + def get_requirement(self, project_name): + # type: (str) -> InstallRequirement + for name in project_name, project_name.lower(): + if name in self.requirements: + return self.requirements[name] + if name in self.requirement_aliases: + return self.requirements[self.requirement_aliases[name]] + raise KeyError("No project with the name %r" % project_name) + + def cleanup_files(self): + # type: () -> None + """Clean up files, remove builds.""" + logger.debug('Cleaning up...') + with indent_log(): + for req in self.reqs_to_cleanup: + req.remove_temporary_source() diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/req/req_tracker.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/req/req_tracker.py new file mode 100644 index 00000000..e36a3f6b --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/req/req_tracker.py @@ -0,0 +1,96 @@ +from __future__ import absolute_import + +import contextlib +import errno +import hashlib +import logging +import os + +from pip._internal.utils.temp_dir import TempDirectory +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from types import TracebackType + from typing import Iterator, Optional, Set, Type + from pip._internal.req.req_install import InstallRequirement + from pip._internal.models.link import Link + +logger = logging.getLogger(__name__) + + +class RequirementTracker(object): + + def __init__(self): + # type: () -> None + self._root = os.environ.get('PIP_REQ_TRACKER') + if self._root is None: + self._temp_dir = TempDirectory(delete=False, kind='req-tracker') + self._temp_dir.create() + self._root = os.environ['PIP_REQ_TRACKER'] = self._temp_dir.path + logger.debug('Created requirements tracker %r', self._root) + else: + self._temp_dir = None + logger.debug('Re-using requirements tracker %r', self._root) + self._entries = set() # type: Set[InstallRequirement] + + def __enter__(self): + # type: () -> RequirementTracker + return self + + def __exit__( + self, + exc_type, # type: Optional[Type[BaseException]] + exc_val, # type: Optional[BaseException] + exc_tb # type: Optional[TracebackType] + ): + # type: (...) -> None + self.cleanup() + + def _entry_path(self, link): + # type: (Link) -> str + hashed = hashlib.sha224(link.url_without_fragment.encode()).hexdigest() + return os.path.join(self._root, hashed) + + def add(self, req): + # type: (InstallRequirement) -> None + link = req.link + info = str(req) + entry_path = self._entry_path(link) + try: + with open(entry_path) as fp: + # Error, these's already a build in progress. + raise LookupError('%s is already being built: %s' + % (link, fp.read())) + except IOError as e: + if e.errno != errno.ENOENT: + raise + assert req not in self._entries + with open(entry_path, 'w') as fp: + fp.write(info) + self._entries.add(req) + logger.debug('Added %s to build tracker %r', req, self._root) + + def remove(self, req): + # type: (InstallRequirement) -> None + link = req.link + self._entries.remove(req) + os.unlink(self._entry_path(link)) + logger.debug('Removed %s from build tracker %r', req, self._root) + + def cleanup(self): + # type: () -> None + for req in set(self._entries): + self.remove(req) + remove = self._temp_dir is not None + if remove: + self._temp_dir.cleanup() + logger.debug('%s build tracker %r', + 'Removed' if remove else 'Cleaned', + self._root) + + @contextlib.contextmanager + def track(self, req): + # type: (InstallRequirement) -> Iterator[None] + self.add(req) + yield + self.remove(req) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/req/req_uninstall.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/req/req_uninstall.py new file mode 100644 index 00000000..733301ce --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/req/req_uninstall.py @@ -0,0 +1,633 @@ +from __future__ import absolute_import + +import csv +import functools +import logging +import os +import sys +import sysconfig + +from pip._vendor import pkg_resources + +from pip._internal.exceptions import UninstallationError +from pip._internal.locations import bin_py, bin_user +from pip._internal.utils.compat import WINDOWS, cache_from_source, uses_pycache +from pip._internal.utils.logging import indent_log +from pip._internal.utils.misc import ( + FakeFile, ask, dist_in_usersite, dist_is_local, egg_link_path, is_local, + normalize_path, renames, rmtree, +) +from pip._internal.utils.temp_dir import AdjacentTempDirectory, TempDirectory +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from typing import ( + Any, Callable, Dict, Iterable, Iterator, List, Optional, Set, Tuple, + ) + from pip._vendor.pkg_resources import Distribution + +logger = logging.getLogger(__name__) + + +def _script_names(dist, script_name, is_gui): + # type: (Distribution, str, bool) -> List[str] + """Create the fully qualified name of the files created by + {console,gui}_scripts for the given ``dist``. + Returns the list of file names + """ + if dist_in_usersite(dist): + bin_dir = bin_user + else: + bin_dir = bin_py + exe_name = os.path.join(bin_dir, script_name) + paths_to_remove = [exe_name] + if WINDOWS: + paths_to_remove.append(exe_name + '.exe') + paths_to_remove.append(exe_name + '.exe.manifest') + if is_gui: + paths_to_remove.append(exe_name + '-script.pyw') + else: + paths_to_remove.append(exe_name + '-script.py') + return paths_to_remove + + +def _unique(fn): + # type: (Callable) -> Callable[..., Iterator[Any]] + @functools.wraps(fn) + def unique(*args, **kw): + # type: (Any, Any) -> Iterator[Any] + seen = set() # type: Set[Any] + for item in fn(*args, **kw): + if item not in seen: + seen.add(item) + yield item + return unique + + +@_unique +def uninstallation_paths(dist): + # type: (Distribution) -> Iterator[str] + """ + 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]. + """ + r = csv.reader(FakeFile(dist.get_metadata_lines('RECORD'))) + for row in r: + path = os.path.join(dist.location, row[0]) + 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): + # type: (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() # type: Set[str] + 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): + # type: (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 = dict((os.path.normcase(p), p) for p in paths) + remaining = set(case_map) + unchecked = sorted(set(os.path.split(p)[0] + for p in case_map.values()), key=len) + wildcards = set() # type: Set[str] + + def norm_join(*a): + # type: (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() # type: Set[str] + all_subdirs = set() # type: Set[str] + 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): + # type: (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) + + # probably this one https://github.com/python/mypy/issues/390 + _normcased_files = set(map(os.path.normcase, files)) # type: ignore + + 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(object): + """A set of file rename operations to stash files while + tentatively uninstalling them.""" + def __init__(self): + # type: () -> None + # Mapping from source file root to [Adjacent]TempDirectory + # for files under that directory. + self._save_dirs = {} # type: Dict[str, TempDirectory] + # (old path, new path) tuples for each move that may need + # to be undone. + self._moves = [] # type: List[Tuple[str, str]] + + def _get_directory_stash(self, path): + # type: (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 = AdjacentTempDirectory(path) # type: TempDirectory + save_dir.create() + except OSError: + save_dir = TempDirectory(kind="uninstall") + save_dir.create() + self._save_dirs[os.path.normcase(path)] = save_dir + + return save_dir.path + + def _get_file_stash(self, path): + # type: (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') + save_dir.create() + 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): + # type: (str) -> str + """Stashes the directory or file and returns its new location. + """ + if os.path.isdir(path): + new_path = self._get_directory_stash(path) + else: + new_path = self._get_file_stash(path) + + self._moves.append((path, new_path)) + if os.path.isdir(path) 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): + # type: () -> None + """Commits the uninstall by removing stashed files.""" + for _, save_dir in self._save_dirs.items(): + save_dir.cleanup() + self._moves = [] + self._save_dirs = {} + + def rollback(self): + # type: () -> None + """Undoes the uninstall by moving stashed files back.""" + for p in self._moves: + logging.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): + 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): + # type: () -> bool + return bool(self._moves) + + +class UninstallPathSet(object): + """A set of file paths to be removed in the uninstallation of a + requirement.""" + def __init__(self, dist): + # type: (Distribution) -> None + self.paths = set() # type: Set[str] + self._refuse = set() # type: Set[str] + self.pth = {} # type: Dict[str, UninstallPthEntries] + self.dist = dist + self._moved_paths = StashedUninstallPathSet() + + def _permitted(self, path): + # type: (str) -> bool + """ + Return True if the given path is one we are permitted to + remove/modify, False otherwise. + + """ + return is_local(path) + + def add(self, path): + # type: (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(normalize_path(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' and uses_pycache: + self.add(cache_from_source(path)) + + def add_pth(self, pth_file, entry): + # type: (str, str) -> None + pth_file = normalize_path(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=False, verbose=False): + # type: (bool, bool) -> 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.project_name, + ) + return + + dist_name_version = ( + self.dist.project_name + "-" + self.dist.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.debug('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): + # type: (bool) -> bool + """Display which files would be deleted and prompt for confirmation + """ + + def _display(msg, paths): + # type: (str, 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')) == 'y' + + def rollback(self): + # type: () -> 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.project_name, + ) + return + logger.info('Rolling back uninstall of %s', self.dist.project_name) + self._moved_paths.rollback() + for pth in self.pth.values(): + pth.rollback() + + def commit(self): + # type: () -> None + """Remove temporary save dir: rollback will no longer be possible.""" + self._moved_paths.commit() + + @classmethod + def from_dist(cls, dist): + # type: (Distribution) -> UninstallPathSet + dist_path = normalize_path(dist.location) + if not dist_is_local(dist): + logger.info( + "Not uninstalling %s at %s, outside environment %s", + dist.key, + dist_path, + sys.prefix, + ) + return cls(dist) + + if dist_path 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.key, + dist_path, + ) + return cls(dist) + + paths_to_remove = cls(dist) + develop_egg_link = egg_link_path(dist) + develop_egg_link_egg_info = '{}.egg-info'.format( + pkg_resources.to_filename(dist.project_name)) + egg_info_exists = dist.egg_info and os.path.exists(dist.egg_info) + # Special case for distutils installed package + distutils_egg_info = getattr(dist._provider, 'path', None) + + # 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 (egg_info_exists and dist.egg_info.endswith('.egg-info') and + not dist.egg_info.endswith(develop_egg_link_egg_info)): + # if dist.egg_info.endswith(develop_egg_link_egg_info), we + # are in fact in the develop_egg_link case + paths_to_remove.add(dist.egg_info) + if dist.has_metadata('installed-files.txt'): + for installed_file in dist.get_metadata( + 'installed-files.txt').splitlines(): + path = os.path.normpath( + os.path.join(dist.egg_info, installed_file) + ) + paths_to_remove.add(path) + # FIXME: need a test for this elif block + # occurs with --single-version-externally-managed/--record outside + # of pip + elif dist.has_metadata('top_level.txt'): + if dist.has_metadata('namespace_packages.txt'): + namespaces = dist.get_metadata('namespace_packages.txt') + else: + namespaces = [] + for top_level_pkg in [ + p for p + in dist.get_metadata('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(path + '.py') + paths_to_remove.add(path + '.pyc') + paths_to_remove.add(path + '.pyo') + + elif distutils_egg_info: + raise UninstallationError( + "Cannot uninstall {!r}. 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.".format( + dist.project_name, + ) + ) + + elif dist.location.endswith('.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 + paths_to_remove.add(dist.location) + easy_install_egg = os.path.split(dist.location)[1] + easy_install_pth = os.path.join(os.path.dirname(dist.location), + 'easy-install.pth') + paths_to_remove.add_pth(easy_install_pth, './' + easy_install_egg) + + elif egg_info_exists and dist.egg_info.endswith('.dist-info'): + for path in uninstallation_paths(dist): + paths_to_remove.add(path) + + elif develop_egg_link: + # develop egg + with open(develop_egg_link, 'r') as fh: + link_pointer = os.path.normcase(fh.readline().strip()) + assert (link_pointer == dist.location), ( + 'Egg-link %s does not match installed location of %s ' + '(at %s)' % (link_pointer, dist.project_name, 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, + ) + + # find distutils scripts= scripts + if dist.has_metadata('scripts') and dist.metadata_isdir('scripts'): + for script in dist.metadata_listdir('scripts'): + if dist_in_usersite(dist): + bin_dir = bin_user + else: + bin_dir = bin_py + paths_to_remove.add(os.path.join(bin_dir, script)) + if WINDOWS: + paths_to_remove.add(os.path.join(bin_dir, script) + '.bat') + + # find console_scripts + _scripts_to_remove = [] + console_scripts = dist.get_entry_map(group='console_scripts') + for name in console_scripts.keys(): + _scripts_to_remove.extend(_script_names(dist, name, False)) + # find gui_scripts + gui_scripts = dist.get_entry_map(group='gui_scripts') + for name in gui_scripts.keys(): + _scripts_to_remove.extend(_script_names(dist, name, True)) + + for s in _scripts_to_remove: + paths_to_remove.add(s) + + return paths_to_remove + + +class UninstallPthEntries(object): + def __init__(self, pth_file): + # type: (str) -> None + if not os.path.isfile(pth_file): + raise UninstallationError( + "Cannot remove entries from nonexistent file %s" % pth_file + ) + self.file = pth_file + self.entries = set() # type: Set[str] + self._saved_lines = None # type: Optional[List[bytes]] + + def add(self, entry): + # type: (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. + if WINDOWS and not os.path.splitdrive(entry)[0]: + entry = entry.replace('\\', '/') + self.entries.add(entry) + + def remove(self): + # type: () -> None + logger.debug('Removing pth entries from %s:', self.file) + 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.debug('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): + # type: () -> 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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/resolve.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/resolve.py new file mode 100644 index 00000000..f49667bb --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/resolve.py @@ -0,0 +1,393 @@ +"""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) +""" + +import logging +from collections import defaultdict +from itertools import chain + +from pip._internal.exceptions import ( + BestVersionAlreadyInstalled, DistributionNotFound, HashError, HashErrors, + UnsupportedPythonVersion, +) +from pip._internal.req.constructors import install_req_from_req_string +from pip._internal.utils.logging import indent_log +from pip._internal.utils.misc import dist_in_usersite, ensure_dir +from pip._internal.utils.packaging import check_dist_requires_python +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from typing import Optional, DefaultDict, List, Set + from pip._internal.download import PipSession + from pip._internal.req.req_install import InstallRequirement + from pip._internal.index import PackageFinder + from pip._internal.req.req_set import RequirementSet + from pip._internal.operations.prepare import ( + DistAbstraction, RequirementPreparer + ) + from pip._internal.cache import WheelCache + +logger = logging.getLogger(__name__) + + +class Resolver(object): + """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, # type: RequirementPreparer + session, # type: PipSession + finder, # type: PackageFinder + wheel_cache, # type: Optional[WheelCache] + use_user_site, # type: bool + ignore_dependencies, # type: bool + ignore_installed, # type: bool + ignore_requires_python, # type: bool + force_reinstall, # type: bool + isolated, # type: bool + upgrade_strategy, # type: str + use_pep517=None # type: Optional[bool] + ): + # type: (...) -> None + super(Resolver, self).__init__() + assert upgrade_strategy in self._allowed_strategies + + self.preparer = preparer + self.finder = finder + self.session = session + + # NOTE: This would eventually be replaced with a cache that can give + # information about both sdist and wheels transparently. + self.wheel_cache = wheel_cache + + # This is set in resolve + self.require_hashes = None # type: Optional[bool] + + self.upgrade_strategy = upgrade_strategy + self.force_reinstall = force_reinstall + self.isolated = isolated + 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.use_pep517 = use_pep517 + + self._discovered_dependencies = \ + defaultdict(list) # type: DefaultDict[str, List] + + def resolve(self, requirement_set): + # type: (RequirementSet) -> None + """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. + """ + # make the wheelhouse + if self.preparer.wheel_download_dir: + ensure_dir(self.preparer.wheel_download_dir) + + # If any top-level requirement has a hash specified, enter + # hash-checking mode, which requires hashes from all. + root_reqs = ( + requirement_set.unnamed_requirements + + list(requirement_set.requirements.values()) + ) + self.require_hashes = ( + requirement_set.require_hashes or + any(req.has_hash_options for req in root_reqs) + ) + + # Display where finder is looking for packages + locations = self.finder.get_formatted_locations() + if locations: + logger.info(locations) + + # Actually prepare the files, and collect any exceptions. Most hash + # exceptions cannot be checked ahead of time, because + # req.populate_link() needs to be called before we can make decisions + # based on link type. + discovered_reqs = [] # type: List[InstallRequirement] + hash_errors = HashErrors() + for req in chain(root_reqs, 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 + + def _is_upgrade_allowed(self, req): + # type: (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.is_direct + + def _set_req_to_reinstall(self, req): + # type: (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. + if not self.use_user_site or dist_in_usersite(req.satisfied_by): + req.conflicts_with = req.satisfied_by + req.satisfied_by = None + + # XXX: Stop passing requirement_set for options + def _check_skip_installed(self, req_to_install): + # type: (InstallRequirement) -> Optional[str] + """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 _get_abstract_dist_for(self, req): + # type: (InstallRequirement) -> DistAbstraction + """Takes a InstallRequirement and returns a single AbstractDist \ + representing a prepared variant of the same. + """ + assert self.require_hashes is not None, ( + "require_hashes should have been set in Resolver.resolve()" + ) + + if req.editable: + return self.preparer.prepare_editable_requirement( + req, self.require_hashes, self.use_user_site, self.finder, + ) + + # 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, self.require_hashes, skip_reason + ) + + upgrade_allowed = self._is_upgrade_allowed(req) + abstract_dist = self.preparer.prepare_linked_requirement( + req, self.session, self.finder, upgrade_allowed, + self.require_hashes + ) + + # 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 abstract_dist + + def _resolve_one( + self, + requirement_set, # type: RequirementSet + req_to_install # type: InstallRequirement + ): + # type: (...) -> 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 + + # register tmp src for cleanup in case something goes wrong + requirement_set.reqs_to_cleanup.append(req_to_install) + + abstract_dist = self._get_abstract_dist_for(req_to_install) + + # Parse and return dependencies + dist = abstract_dist.dist() + try: + check_dist_requires_python(dist) + except UnsupportedPythonVersion as err: + if self.ignore_requires_python: + logger.warning(err.args[0]) + else: + raise + + more_reqs = [] # type: List[InstallRequirement] + + def add_req(subreq, extras_requested): + sub_install_req = install_req_from_req_string( + str(subreq), + req_to_install, + isolated=self.isolated, + wheel_cache=self.wheel_cache, + use_pep517=self.use_pep517 + ) + parent_req_name = req_to_install.name + to_scan_again, add_to_parent = requirement_set.add_requirement( + 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. + if not requirement_set.has_requirement(req_to_install.name): + # 'unnamed' requirements will get added here + req_to_install.is_direct = True + requirement_set.add_requirement( + 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.extras) + ) + for missing in missing_requested: + logger.warning( + '%s does not provide the extra \'%s\'', + dist, missing + ) + + available_requested = sorted( + set(dist.extras) & set(req_to_install.extras) + ) + for subreq in dist.requires(available_requested): + add_req(subreq, extras_requested=available_requested) + + if not req_to_install.editable and not req_to_install.satisfied_by: + # XXX: --no-install leads this to report 'Successfully + # downloaded' for only non-editable reqs, even though we took + # action on them. + requirement_set.successfully_downloaded.append(req_to_install) + + return more_reqs + + def get_installation_order(self, req_set): + # type: (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() # type: Set[InstallRequirement] + + def schedule(req): + 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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/__init__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a9f1ecb2e486a85535df251e413f95da075e7624 GIT binary patch literal 142 zcmXr!<>iW5rx(ir1dl-k3@`#24nSPY0whuxf*CX!{Z=v*frJsnFKhjh+yecA%mUq{ z(#)I`U4z1mq#{&g2OXB183My}L*yQG?l;)(` KfebAMVg>-Qk0JK} literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/__pycache__/appdirs.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/__pycache__/appdirs.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bd0a9895a63883c7310ca79590e1abfe03a313b5 GIT binary patch literal 7983 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 SV>>5YyJnuWocXHhI{ynzV*>*K literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/__pycache__/deprecation.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/__pycache__/deprecation.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2766f5a229d64dc31858aa1d7301a531cbcc3e27 GIT binary patch literal 2551 zcmaJ@-HsbI6dun^em0x^>9$*-qLrm0AcAJAa)Go$Rae{6uArf63vEZB!HJz@cIU6Q zXSZ3>8`4`OUV|Inf|ra5pB28@R-@z1RypTl;~J+K+2VJ*eAnwYZTqgB9DZ$E{>FSS5~F zl}|CR5x0}IU@ch>*73a=Y}|GD3U9q~cuQ=~yx<)7*cLy>S9$vt3C{C1zW&MyF7PeB z!8b9o&AmrX=lp4}wMUbT7qOsv%ruRXJQj&awW2!9;wT-VrXpp1%n(dX=n0c4h81P~ ztk9H;T#5nHQI@K1>ovS|I;7lSeU-(979k8~Qui=c%b8RHjnyzb7E)nF7^1s%|Jj3Q z;r_il``?5Qzwh-9dUrc+>FuSHviV(Z472!j?e?7q5AW>nJwEuZw@U|Rn>Pm zN83D&`MZx=1t_LIcaB!%M;bAM`UmYyohg~RQ*Y`|Ycs@0dP9>b(eBKZx3zbO*qM=+ z^=bXEHg#qM-?!df!yQ9P@AMKdcNciOOGs6xUT%k(j7AYW3Dr0|nV)yrij*q)gP190 z!IzCV8)4e0Tp0=dE!sksjrr_OqiiHXDK-*i6VV|?nZ$7pqZpx-h_a5z5@}ZYW~B5@ z4`bHG8Rv2hOyEeCP+T?yZJ}^T6F--1xh=0n+OA9FC5*lm7&Q!7Mn6SEJBNgWFYa>h zH;*{l1G7!T@S)E z7Uk*^QVVCv7aK{|p^H(fG>hYKZZE9-?!tmHQQ~-;ev{ORq-YO}fSAXG%EBRyjyc}< zoR|I-ZXrajAY|M_gv5+|X+|L`7`??kji8wk%&cLCj~TW34BQdS_*r|}pAqd%-5EKm zp^tep@+;Bx!^YItHD2R&Lzul$4fYq}_nwGzA&oG+2_0y|i%4lB7sDbQRF^i=lWwa; z@kl5~mhRfN=|2`PG_KivoEq9vV@{6+Efh>w+Hx|UU?@^=+oWTr7MA)#q-Q92cfMU7 zvw@YdclT5UA{9`x^ndn+5;AkRDTM7C~&6O5s6djl@O^c+D<>1F0hn8$`R9VyX#6rXY9Sh2k0gUIv zBBqvZI?Uu^4|9qph0tM?ayS$N5~n;;gF+eQrwqfn%#I^2=uimW$2Rk5*^5uuM9~~d zgO!V;{G86|wQDVO1L83*0nBs}E85$S&~QZM$u>e6s2J5NO|ToolxL1v@#-#{d8T literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/__pycache__/encoding.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/__pycache__/encoding.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5cf8feb919ef6350e6c4bba73cab90cbab7dbfd3 GIT binary patch literal 1226 zcmZuvO>f&q5Z&dMC`xt`#|d2b0|at08%TB}APCyD2qH^uQAY_9r$HDS0>xcflvgCP zyFx5OKB>L*2lUuOZ@u(K^k?j~C!c%ksk4+N_>d)b-kaIs%-bQGYir)oU-jd^Erk9- z*Om+X32gBj7=j39C|n>8ap4=GQJ@)`fCjV1c4%WnZN3k_$((U1EREgJ9hbv0#L>tj z*1!O)5WB!CaSB``r2^N9Ti^{+F7PJt2F6J#yhV-C2C2+(c$-wo+RrH5B={8y)-ORD z>IPVCJbU}%ZLjrxyY*x5Raz>SPNYCWCJ&}XjqjN{YgNNtk z1=jj>MHyY3HXDmjv#~k_%BZ*tJ>!fd>B+mVzBxV;U+%oC9et=D-w$G}^}vE*7P|!~ z{s42fC(%AS-Z?TZ@P#o$BRs=%%$*sMhGqo+Vtj%|=FFJG#ojw_(AiIrWfAZRCZ;}x z_n%ytGm}`v);@7g4c?LV$eEc?YsE&TIU<&>MoRNVw`JYV8w6EN>5j_8o#Xs>>5VFL zq43t!WSP7Jd4dK$OHQeun<98m*^!8oq!Uz?1+rc#PsoT%@gb2zWipy7hfq*Nl`V3XNL6WfThI65m*~B0 zD@V|X$3x|u@NAL`?suE3P)>~X; z3#y3?FvwoV9^N*#@HXDU>)68lbBG3al%p>k3w|41WpK*x013CDQ+?H?UUaF;X%63& z>(MIb$}z#=`mg1-4!bbd-s{88BUQd)4<4%OiuRtiuX_jWRa&#LI%qbor-66S<`rGM x6ldc+VU*w0{j~mKT-VHJg@(uDj7%8)R)2Z%1sE3>k5M%&ylGx}MXYLi=KlvBOT_>H literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/__pycache__/filesystem.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/__pycache__/filesystem.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9215f7e0fe4ecba229c1a6d9da1b0f13405dde96 GIT binary patch literal 611 zcmYjNy>8S%5T04vXJee>iiiU70Jw-Rf)*kq6dI(YaHK;g;N*B0&UgOH?waHzU&B%G zDrxdSThLJP3aK*dAe6P{$Mg4nGq3jc!cRBJ=id&%A9(N>`EN!|PW0H3y>K7>u8aeKm8grJ? z{4HL!J@mMCXGecgtevEZ0L!-6XO$QL2S>YrTab(jlaxPrnNMzQO32~7{3%( zh0;peRiwR=@lVrZDH~}$QDM~-Y+&`R;WXgWpSzq?$698>D{ z%~V(Iv@P0$^R6iQ!QsX7yg7WyZD^21QENfd%4w&IQcb@WrBEBCMU}K0Gs%}CU*BK5 zxvYisX{dTm3fvG~=35(yhqY}$%{)`}#|8U6wm*h=F f$zj`}Yhe9AJ+UK#*Hy#2QXJXqDZ6q&NRe{~f2)+S literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/__pycache__/glibc.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/__pycache__/glibc.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b3c3b9b4fdf46441008b7ae51cdc1510530d6b80 GIT binary patch literal 1635 zcmZ8h-Etc>7?rd?-fV0`(g0JKfdvYa9TF!~ZU|EfOqx)JU@}RWQq#`PdL`Ry?_VWt zgEN~e^9DQxH#`iNy5)*j;EGRj0!if2C;40H?6>FW=+jQefBr}B#h-12{zBIpf%#X^ z#RLLH6lW;M1B~^YWMn|hXbmhg+5;O#D|2#p;9|sF{s{itSu6JjUcNF|fqf2je?;3pDo|G$j}KDJnK> zB(0gxH!;#bicir`dZpdq$Z7BbT@dLuM79=095rO>Q3430(bZb#dnZiRyb!@SONUAD zig5w81VZw(7;gn75Bg=nf^-xVr3`8T+2zt+UpcWz(llIAZX)Lu6UyFybabRP#zh^C znT#}Ibcv|CUrWFo0wD*Smt1*CluTkCRjS3A(EF920=$rMkuYUJ1!9MO+E&V~Kl`Of5PfPyr=iTkS7oUXBdnT0@|EJEsIQXSviDdMapl7L^1owlagu_^{LW;mZ^>V#? zD;SsZ^WYDrd~gx(aQ+ z2A{9GoV~15&SYn z--k@1U9Ov^UDI!671p%V!>6*RGJb0qVgKKzc~}hv8B^gA-a@Z{qLipi949 z*c+4h6^k@|u}p^l~}mH}mOLV+X}$O*eCrSAvOu523zQr{UtIlA<$2sYsmZ(TV#49+HLG6BF* zTxU{av%He?tJMZ9ErKK#%XejEIjgH+6oWH*=4oFckX1Va82b=D$Al1@vk$jg=Z0Fh ziSw>3bpkt=T(t~WgntZ~u&ewi8r5(Ku_)r2E#A`MEgkMc7`zR>?fvK3p7CrCE(|z| z+=2zlz5Ju~=Z+5Al}1;ihk4Ppy7Vo<&2jS{!#2E literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/__pycache__/hashes.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/__pycache__/hashes.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7de0b72d36c08dd67ad6e63d3d607d21a287b361 GIT binary patch literal 3549 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 UNOm}r%A_+#Gec;@#aB}Q7x3nVVgLXD literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/__pycache__/models.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/__pycache__/models.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d59f57ebeae8bb1583e0833a8a010e53b1ed3934 GIT binary patch literal 1891 zcmbtU&2G~`5Z<+&#C4POUqUKWM&gn~n+i@yfGT=G2oWJ6Bou*Gj%V9AIJUdHLA1)P zeHku1kguG01y0P^Nok{&24$m}vAvVoZ@!(GCyj>p>BrvZb%(K^?8?G-c7URNRKU6n zI9M_7@>dLOa4r})(mJ=hHdyajt8%vU!9;OnBB}kORQVu}q9jU={b33+*4{6S!a5=8 z>9X+Q07ZX9C0Uo_DHd>w2=)c*I^aMBZ3U`OLt6zGmeAI~gJrZX)S-cP37W8i)`L}8 zL%R&?uz|J?n}}>H-+UuaUj|yjVLHqLCErHhqU7xPJC%No0O5wk=SW9s;)g*N^rm^3 zeqj7a`#t)zkGp~YMV@*-uFyuzw8&B-hbVd#)tHZ&U}Fn4CWHWZr)A}JQJx|NM#xvh zlpYbrfz~ZMceIR;a+`LW*Ehd2$OE(5FH~lo+X! zAa0NFDs;PKelI)CU4eU%5n`E8(#!V&dK$FeuITAyQ*2xbS41!8+_Mt)3;Js@XECh(2PLqOB>(^b literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/__pycache__/outdated.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/__pycache__/outdated.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c306dbdb0b6a931ad1e2177da637fa5e9dee88b7 GIT binary patch literal 3927 zcmZu!Pj4H?72nxilFJoEQIcg#w&QFZD~1Y-PExce+%$+`Nr@9jaV@2e7frV-&QM%( z|1dK{$r31_0CVWYNIpP6Kzr$}Ko33jBlNgE_T-|UAgBJ`P?GJyOU#?unR#z!-=E)m z{ORnh|J%Q|zy9Av%leP?(&J+M5t{lh2)8&(t&D|?(b!Jy&^EmjI;M9+*YuUJYWiAO zL+_+sRuAi$ANq#RO=q%3IBUk0w3*F?b7ovkTiJX#Z^pHBAzKU=&DcvXWJ}>vb}_tY z-s|b5Y&l$JmROd5H|MN`E9m|7a&{%Wl3fk2nte0r8`-t+8pe(AP2u(f@z#We*FU!S zEN^~m@uqlt;)FN&9B+MVg{yp?FQ9*i+dJ0U;&XhjwZ_W1cuy7SNQ)@RhK1DIYj)|S zMQ6}WQc=zh2m6r}su;hwfs z5DjD9i;BY>%XaCDT#clNcp}TCeW9ZyS2|8p!J`*K7e0UT@JV#s3TQYhf;Ktr)BN_7n@QRvh;rwrz0^Pd!LCTGg@;>mkuuLofwB3 zv(?WJ{EH<6sN#oT-qzXh_AnW)?~Rg_ufO|EZ?AaweNI!R!OB|5JWg+qbdsvu#Yl79 zowtWar59l}(NXj!sdfRxva77>xU9u&)?fj<;2d9i)hz8Zo(|cCo(kF(G-IECVgTJ+ z$|vn)|zOZ5L zCf12Nw)+h|JAprN_9uJn>SllL18d65?THOfAnw-K9h2YHc=egfVE-4Ma5gel_b3eg zG*&t?hA$h#qhWFuCnY=F{ej*3f!)Ebxq4qETfPHT$eSQ*^KzcX z9ud;ATm&g=2*f;+@T=l!qO_7rv`6wH%Rpc8qbAx6YospCx*Aa0`GPrCJ3C_t|7{TS@192N8 zbq&OFs?2p3nCmV$P1b}feZ8j zF%wo?=QhR;jR(~o3xRI+T?F|rra{h~9Y6qg5#*KQzZu|B!C_D6o{#}>H#m${aE_6| z-cf*<^8EnMZZE--3PwusATM;Fi-0F;n8rr|*n`nCY~e@x^YJv zIj=|uG-#0p!zroli_4&-k^ z`;t^vwg}*HB`uRZ1U>+$(Ti1-2^}N+<8p!4&)%Xm$%QH}Y`nC8yU<(3DCdO!PzF4T z76Zth65}lwprV)3$lg(eOMHPnssUovYF^*v=l? zszv!x!-fRfCl0qy-0#_ur5)JP<<2v9Qqh%urC*&`Cspo_EB)G_Dvx>PY-CnFdgJa2 zAYfvj)W+3uZQ1Jk6N@hlEO~5JD=P#XF1H7s{Fk1A{07?WK6y~{lEv%j=f=qU&nhS0 z*z33Gj{SL@TOZdA*FVf%7smDeB7qX5UI4&UCpJKgzQDz-KX%6c!1|uaYh$OsH1_*T z1Bc%9MUrPmmq2|!b25{=oSn?*<^Bq9fX^MzObkrrH{iXO2R`;~OuZL-u27x9=bquT z(}ZOzi{pPAUk)>b&9;X$U7n! zA`lLR7_Z#q6aX?Ispxjio@q`r;&2h-qIgjqnG7{zLieT~FMkfV*&slJjG!I8sSVSQV}aS|E!iH#2=4(1#q{l zVa`-Iv%@3ZL)fh&GLzx)ADdJ$NxkN{bKTB#rk{ z(e{a5^@>r-gHDmF1eMzDNgyTBZVTD)~KfRPu*Ab!+Xa^f6J+Paz0$ z&J$h*c@0J+ST>q3J#s3Oh^iyq$%{jiO-c_KF*F&bO_FAHfeJHH0^iD&tP=ZOTBx5J zq-=?&TE@7~nT6yAc7$`rd>wphLPx34BgERn7omvKQc~4n@<-X&g8|QOYH&u9Hb6Lao z?F+2RJXW<^%y&H7#%cpan#(-9iFp^Z*yRw~`pDWw3 zzHrfOI4eQh#>mDE!ppC&nBuez=f=UteBrg%ZJ=6vnkP*)6)wMSQ<)zfLpPm&T;c=6Q(IQ~pgAupS>!}xd|e)+(7ntY!oAAywBVy`bc zdKxg4`i%ZxvVTBxCWm?-Oe>@hkp?aG6Oe|Dif8(R^%`~qmTn-2HegeaddGEqr}dsU F_kUScGcf=F literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/__pycache__/packaging.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/__pycache__/packaging.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..91c7a0b1b7c1120dd10556b749a64dd2b0364423 GIT binary patch literal 2561 zcma)8OK%%D5MJ)Cq}6(5D}E@klN8&uK_DQOgEU2R2!a~U%V?q)w$mhw2J5w!vR2+# zNGgpDIfp8}_iyylYj6D_y!Mp8&{Jo)k}JDCR0fB`AvsIVeDl#?)oS(+zqQ`{Zfn|~ z+SE@6{aa}K4-lail2}WKM+oYAtb4lZ4bOnyh|Q$rmDHRWmy?QDQFtp&7ofiq&W8)oUk&vgt-1IK?w~b^oD24O77qmVqa@Fm zXoJmuL}|DcFishaYWd-T&nV9ZtV4NImp0F7C+bF&aanl>GRjiiMc;R5E?~f6!K^w_mi|o9)M7wVtaDK@5838Ra}Upt$)##087?2k5Os z@Tl-JpjDu4K;!p83?T=H7IW}MLhF;EHX7k(Q(+BtNit}A-f&5uMcOWpC!+$ePioVrOMIz2VN$LQNZ1QGFz zm3!`KKw7qPw@t->rQF@yWdpi5@jG#tbtj*gc1^i*KK7l^RJ6|edKAR`e>e*>@RVkv zIB?-rIXdIHa2-S(76hrgnZ66+DBPJO7LWYzYxaV76jw*ZYPXv)h)QwH_O2wYPne=+ zm6f2A&Z)N@Dp(m!r5r&e&3+c8(nx|_8jxoYM_fAN@c2>M&63A4GAudh2a(Kf851M3ZXpEkRit#A|@Gn6KqQ=P)>k z(t}ohB$qk}3PApuWM2fw9GF4VW-Q$#w&4@MU)Bu}+ zLZz9gosjgVvI08UUC_)BG_W>Asb3BaQ30C;$kn0VO+a^bq#=g;_7HXx4YZk&hG=d} z>)FHI^#|*_>&MpCcaK*$+mD_fUu=piR$wdp9K=m%d=Z4EJH#fc>GQ+aPNR>vxByK> z|05_EeT?Uj^ofeMesotr{6>U75x^3m4)HAwbzlr&3t@?B-v+)tWsI)Tfc-y_ms)zq z)Wl5RIkedaqMaB-J8pN-?9)`xqL{8p;c4B-mUTLZRN{yT4_VL{I7)PsHie8TI zT<7itTW(=O|Wl=BsM4|eb?AT(k@{&kQh zNNissDxi0Cb_?cDQGqWvHie4Ypg_jp?SP7Fy~mnV$atW=SyVXDM;dDYUZCI6-Zoys z>kjp0v}JX(y|cUi^y$NGb`_j74dy~8=cfz8kE4`wS;F@#Z|cRJO*EdrVhy*c@{422 zo`a`?S9F`y;Z6==U*ktUleX`72k@X!-)DFWS;3maTEpl|hbBQ3x5nk8>TL!Ht_5tE zh8a_Z?JZ4NVCk6VRMHeRdo{IS!iNeI-la3Pmg2}(67h~Ia&P6oro~Z?C#&Mg%Hsjj zrK}alOo~UI&4A5YK69$+e>0ead#Vtkrv<-QzQP}bKp_e#SK(MCT19FqzR3Oz=|fug kk}Mp=^gjL*!EvjjTNqtnk~%c_0~S}kVH?(xRks%Y2K@rNX8-^I literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/__pycache__/setuptools_build.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/__pycache__/setuptools_build.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a8360614e4cc9bb909d8045c7bdf5fd8ade1e13d GIT binary patch literal 337 zcmYjN!Ait15KY(1A}roK_aaT8+b(*H6+r|A*A=>6q!PN#RD)>~(-d@nNWAz#d-X3o znG}i!-g`{u%?vXqv)O*}l{_8>2z{e}&&BB6p_@A5=mGH{M`W`75RF#Gh8@^mTcuHrf8Z&2Y%HQLQ`${`NNR?h6R5h1rE*d64T>-)R)YIT#d{OWr7iOj@p zGtkdPY8#zuq34@kNIqY@K5x|GnES5*OtcnETgtSzLU!rj#%!oa^!sjl+9=*jINS55 GazMXPLuOR~ literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/__pycache__/temp_dir.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/__pycache__/temp_dir.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7ecf2b46b94a4f8cfdd24247908bd63ae2ab9405 GIT binary patch literal 4864 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/__pycache__/typing.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/__pycache__/typing.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8bc3c4e512b7cbd9c57dded98addd89f0e0c8c18 GIT binary patch literal 1272 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/appdirs.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/appdirs.py new file mode 100644 index 00000000..fb261110 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/appdirs.py @@ -0,0 +1,268 @@ +""" +This code was taken from https://github.com/ActiveState/appdirs and modified +to suit our purposes. +""" +from __future__ import absolute_import + +import os +import sys + +from pip._vendor.six import PY2, text_type + +from pip._internal.utils.compat import WINDOWS, expanduser +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from typing import List + + +def user_cache_dir(appname): + # type: (str) -> str + r""" + Return full path to the user-specific cache dir for this application. + + "appname" is the name of application. + + Typical user cache directories are: + macOS: ~/Library/Caches/ + Unix: ~/.cache/ (XDG default) + Windows: C:\Users\\AppData\Local\\Cache + + On Windows the only suggestion in the MSDN docs is that local settings go + in the `CSIDL_LOCAL_APPDATA` directory. This is identical to the + non-roaming app data dir (the default returned by `user_data_dir`). Apps + typically put cache data somewhere *under* the given dir here. Some + examples: + ...\Mozilla\Firefox\Profiles\\Cache + ...\Acme\SuperApp\Cache\1.0 + + OPINION: This function appends "Cache" to the `CSIDL_LOCAL_APPDATA` value. + """ + if WINDOWS: + # Get the base path + path = os.path.normpath(_get_win_folder("CSIDL_LOCAL_APPDATA")) + + # When using Python 2, return paths as bytes on Windows like we do on + # other operating systems. See helper function docs for more details. + if PY2 and isinstance(path, text_type): + path = _win_path_to_bytes(path) + + # Add our app name and Cache directory to it + path = os.path.join(path, appname, "Cache") + elif sys.platform == "darwin": + # Get the base path + path = expanduser("~/Library/Caches") + + # Add our app name to it + path = os.path.join(path, appname) + else: + # Get the base path + path = os.getenv("XDG_CACHE_HOME", expanduser("~/.cache")) + + # Add our app name to it + path = os.path.join(path, appname) + + return path + + +def user_data_dir(appname, roaming=False): + # type: (str, bool) -> str + r""" + Return full path to the user-specific data dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "roaming" (boolean, default False) can be set True to use the Windows + roaming appdata directory. That means that for users on a Windows + network setup for roaming profiles, this user data will be + sync'd on login. See + + for a discussion of issues. + + Typical user data directories are: + macOS: ~/Library/Application Support/ + if it exists, else ~/.config/ + Unix: ~/.local/share/ # or in + $XDG_DATA_HOME, if defined + Win XP (not roaming): C:\Documents and Settings\\ ... + ...Application Data\ + Win XP (roaming): C:\Documents and Settings\\Local ... + ...Settings\Application Data\ + Win 7 (not roaming): C:\\Users\\AppData\Local\ + Win 7 (roaming): C:\\Users\\AppData\Roaming\ + + For Unix, we follow the XDG spec and support $XDG_DATA_HOME. + That means, by default "~/.local/share/". + """ + if WINDOWS: + const = roaming and "CSIDL_APPDATA" or "CSIDL_LOCAL_APPDATA" + path = os.path.join(os.path.normpath(_get_win_folder(const)), appname) + elif sys.platform == "darwin": + path = os.path.join( + expanduser('~/Library/Application Support/'), + appname, + ) if os.path.isdir(os.path.join( + expanduser('~/Library/Application Support/'), + appname, + ) + ) else os.path.join( + expanduser('~/.config/'), + appname, + ) + else: + path = os.path.join( + os.getenv('XDG_DATA_HOME', expanduser("~/.local/share")), + appname, + ) + + return path + + +def user_config_dir(appname, roaming=True): + # type: (str, bool) -> str + """Return full path to the user-specific config dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "roaming" (boolean, default True) can be set False to not use the + Windows roaming appdata directory. That means that for users on a + Windows network setup for roaming profiles, this user data will be + sync'd on login. See + + for a discussion of issues. + + Typical user data directories are: + macOS: same as user_data_dir + Unix: ~/.config/ + Win *: same as user_data_dir + + For Unix, we follow the XDG spec and support $XDG_CONFIG_HOME. + That means, by default "~/.config/". + """ + if WINDOWS: + path = user_data_dir(appname, roaming=roaming) + elif sys.platform == "darwin": + path = user_data_dir(appname) + else: + path = os.getenv('XDG_CONFIG_HOME', expanduser("~/.config")) + path = os.path.join(path, appname) + + return path + + +# for the discussion regarding site_config_dirs locations +# see +def site_config_dirs(appname): + # type: (str) -> List[str] + r"""Return a list of potential user-shared config dirs for this application. + + "appname" is the name of application. + + Typical user config directories are: + macOS: /Library/Application Support// + Unix: /etc or $XDG_CONFIG_DIRS[i]// for each value in + $XDG_CONFIG_DIRS + Win XP: C:\Documents and Settings\All Users\Application ... + ...Data\\ + Vista: (Fail! "C:\ProgramData" is a hidden *system* directory + on Vista.) + Win 7: Hidden, but writeable on Win 7: + C:\ProgramData\\ + """ + if WINDOWS: + path = os.path.normpath(_get_win_folder("CSIDL_COMMON_APPDATA")) + pathlist = [os.path.join(path, appname)] + elif sys.platform == 'darwin': + pathlist = [os.path.join('/Library/Application Support', appname)] + else: + # try looking in $XDG_CONFIG_DIRS + xdg_config_dirs = os.getenv('XDG_CONFIG_DIRS', '/etc/xdg') + if xdg_config_dirs: + pathlist = [ + os.path.join(expanduser(x), appname) + for x in xdg_config_dirs.split(os.pathsep) + ] + else: + pathlist = [] + + # always look in /etc directly as well + pathlist.append('/etc') + + return pathlist + + +# -- Windows support functions -- + +def _get_win_folder_from_registry(csidl_name): + # type: (str) -> str + """ + This is a fallback technique at best. I'm not sure if using the + registry for this guarantees us the correct answer for all CSIDL_* + names. + """ + import _winreg + + shell_folder_name = { + "CSIDL_APPDATA": "AppData", + "CSIDL_COMMON_APPDATA": "Common AppData", + "CSIDL_LOCAL_APPDATA": "Local AppData", + }[csidl_name] + + key = _winreg.OpenKey( + _winreg.HKEY_CURRENT_USER, + r"Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" + ) + directory, _type = _winreg.QueryValueEx(key, shell_folder_name) + return directory + + +def _get_win_folder_with_ctypes(csidl_name): + # type: (str) -> str + csidl_const = { + "CSIDL_APPDATA": 26, + "CSIDL_COMMON_APPDATA": 35, + "CSIDL_LOCAL_APPDATA": 28, + }[csidl_name] + + buf = ctypes.create_unicode_buffer(1024) + ctypes.windll.shell32.SHGetFolderPathW(None, csidl_const, None, 0, buf) + + # Downgrade to short path name if have highbit chars. See + # . + has_high_char = False + for c in buf: + if ord(c) > 255: + has_high_char = True + break + if has_high_char: + buf2 = ctypes.create_unicode_buffer(1024) + if ctypes.windll.kernel32.GetShortPathNameW(buf.value, buf2, 1024): + buf = buf2 + + return buf.value + + +if WINDOWS: + try: + import ctypes + _get_win_folder = _get_win_folder_with_ctypes + except ImportError: + _get_win_folder = _get_win_folder_from_registry + + +def _win_path_to_bytes(path): + """Encode Windows paths to bytes. Only used on Python 2. + + Motivation is to be consistent with other operating systems where paths + are also returned as bytes. This avoids problems mixing bytes and Unicode + elsewhere in the codebase. For more details and discussion see + . + + If encoding using ASCII and MBCS fails, return the original Unicode path. + """ + for encoding in ('ASCII', 'MBCS'): + try: + return path.encode(encoding) + except (UnicodeEncodeError, LookupError): + pass + return path diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/compat.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/compat.py new file mode 100644 index 00000000..845436e4 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/compat.py @@ -0,0 +1,264 @@ +"""Stuff that differs in different Python versions and platform +distributions.""" +from __future__ import absolute_import, division + +import codecs +import locale +import logging +import os +import shutil +import sys + +from pip._vendor.six import text_type + +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from typing import Tuple, Text + +try: + import ipaddress +except ImportError: + try: + from pip._vendor import ipaddress # type: ignore + except ImportError: + import ipaddr as ipaddress # type: ignore + ipaddress.ip_address = ipaddress.IPAddress # type: ignore + ipaddress.ip_network = ipaddress.IPNetwork # type: ignore + + +__all__ = [ + "ipaddress", "uses_pycache", "console_to_str", "native_str", + "get_path_uid", "stdlib_pkgs", "WINDOWS", "samefile", "get_terminal_size", + "get_extension_suffixes", +] + + +logger = logging.getLogger(__name__) + +if sys.version_info >= (3, 4): + uses_pycache = True + from importlib.util import cache_from_source +else: + import imp + + try: + cache_from_source = imp.cache_from_source # type: ignore + except AttributeError: + # does not use __pycache__ + cache_from_source = None + + uses_pycache = cache_from_source is not None + + +if sys.version_info >= (3, 5): + backslashreplace_decode = "backslashreplace" +else: + # In version 3.4 and older, backslashreplace exists + # but does not support use for decoding. + # We implement our own replace handler for this + # situation, so that we can consistently use + # backslash replacement for all versions. + def backslashreplace_decode_fn(err): + raw_bytes = (err.object[i] for i in range(err.start, err.end)) + if sys.version_info[0] == 2: + # Python 2 gave us characters - convert to numeric bytes + raw_bytes = (ord(b) for b in raw_bytes) + return u"".join(u"\\x%x" % c for c in raw_bytes), err.end + codecs.register_error( + "backslashreplace_decode", + backslashreplace_decode_fn, + ) + backslashreplace_decode = "backslashreplace_decode" + + +def console_to_str(data): + # type: (bytes) -> Text + """Return a string, safe for output, of subprocess output. + + We assume the data is in the locale preferred encoding. + If it won't decode properly, we warn the user but decode as + best we can. + + We also ensure that the output can be safely written to + standard output without encoding errors. + """ + + # First, get the encoding we assume. This is the preferred + # encoding for the locale, unless that is not found, or + # it is ASCII, in which case assume UTF-8 + encoding = locale.getpreferredencoding() + if (not encoding) or codecs.lookup(encoding).name == "ascii": + encoding = "utf-8" + + # Now try to decode the data - if we fail, warn the user and + # decode with replacement. + try: + decoded_data = data.decode(encoding) + except UnicodeDecodeError: + logger.warning( + "Subprocess output does not appear to be encoded as %s", + encoding, + ) + decoded_data = data.decode(encoding, errors=backslashreplace_decode) + + # Make sure we can print the output, by encoding it to the output + # encoding with replacement of unencodable characters, and then + # decoding again. + # We use stderr's encoding because it's less likely to be + # redirected and if we don't find an encoding we skip this + # step (on the assumption that output is wrapped by something + # that won't fail). + # The double getattr is to deal with the possibility that we're + # being called in a situation where sys.__stderr__ doesn't exist, + # or doesn't have an encoding attribute. Neither of these cases + # should occur in normal pip use, but there's no harm in checking + # in case people use pip in (unsupported) unusual situations. + output_encoding = getattr(getattr(sys, "__stderr__", None), + "encoding", None) + + if output_encoding: + output_encoded = decoded_data.encode( + output_encoding, + errors="backslashreplace" + ) + decoded_data = output_encoded.decode(output_encoding) + + return decoded_data + + +if sys.version_info >= (3,): + def native_str(s, replace=False): + # type: (str, bool) -> str + if isinstance(s, bytes): + return s.decode('utf-8', 'replace' if replace else 'strict') + return s + +else: + def native_str(s, replace=False): + # type: (str, bool) -> str + # Replace is ignored -- unicode to UTF-8 can't fail + if isinstance(s, text_type): + return s.encode('utf-8') + return s + + +def get_path_uid(path): + # type: (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( + "%s is a symlink; Will not return uid for symlinks" % path + ) + return file_uid + + +if sys.version_info >= (3, 4): + from importlib.machinery import EXTENSION_SUFFIXES + + def get_extension_suffixes(): + return EXTENSION_SUFFIXES +else: + from imp import get_suffixes + + def get_extension_suffixes(): + return [suffix[0] for suffix in get_suffixes()] + + +def expanduser(path): + # type: (str) -> str + """ + Expand ~ and ~user constructions. + + Includes a workaround for https://bugs.python.org/issue14768 + """ + expanded = os.path.expanduser(path) + if path.startswith('~/') and expanded.startswith('//'): + expanded = expanded[1:] + return expanded + + +# 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')) + + +def samefile(file1, file2): + # type: (str, str) -> bool + """Provide an alternative for os.path.samefile on Windows/Python2""" + if hasattr(os.path, 'samefile'): + return os.path.samefile(file1, file2) + else: + path1 = os.path.normcase(os.path.abspath(file1)) + path2 = os.path.normcase(os.path.abspath(file2)) + return path1 == path2 + + +if hasattr(shutil, 'get_terminal_size'): + def get_terminal_size(): + # type: () -> Tuple[int, int] + """ + Returns a tuple (x, y) representing the width(x) and the height(y) + in characters of the terminal window. + """ + return tuple(shutil.get_terminal_size()) # type: ignore +else: + def get_terminal_size(): + # type: () -> Tuple[int, int] + """ + Returns a tuple (x, y) representing the width(x) and the height(y) + in characters of the terminal window. + """ + def ioctl_GWINSZ(fd): + try: + import fcntl + import termios + import struct + cr = struct.unpack_from( + 'hh', + fcntl.ioctl(fd, termios.TIOCGWINSZ, '12345678') + ) + except Exception: + return None + if cr == (0, 0): + return None + return cr + cr = ioctl_GWINSZ(0) or ioctl_GWINSZ(1) or ioctl_GWINSZ(2) + if not cr: + try: + fd = os.open(os.ctermid(), os.O_RDONLY) + cr = ioctl_GWINSZ(fd) + os.close(fd) + except Exception: + pass + if not cr: + cr = (os.environ.get('LINES', 25), os.environ.get('COLUMNS', 80)) + return int(cr[1]), int(cr[0]) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/deprecation.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/deprecation.py new file mode 100644 index 00000000..8c896f8c --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/deprecation.py @@ -0,0 +1,93 @@ +""" +A module that implements tooling to enable easy warnings about deprecations. +""" +from __future__ import absolute_import + +import logging +import warnings + +from pip._vendor.packaging.version import parse + +from pip import __version__ as current_version +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from typing import Any, Optional + + +DEPRECATION_MSG_PREFIX = "DEPRECATION: " + + +class PipDeprecationWarning(Warning): + pass + + +_original_showwarning = None # type: Any + + +# Warnings <-> Logging Integration +def _showwarning(message, category, filename, lineno, file=None, line=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(): + # type: () -> 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, replacement, gone_in, issue=None): + # type: (str, Optional[str], Optional[str], Optional[int]) -> None + """Helper to deprecate existing functionality. + + reason: + Textual reason shown to the user about why this functionality has + been deprecated. + 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 errors if pip's current version is greater than or equal to + this. + issue: + Issue number on the tracker that would serve as a useful place for + users to find related discussion and provide feedback. + + Always pass replacement, gone_in and issue as keyword arguments for clarity + at the call site. + """ + + # Construct a nice message. + # This is purposely eagerly formatted as we want it to appear as if someone + # typed this entire message out. + message = DEPRECATION_MSG_PREFIX + reason + if replacement is not None: + message += " A possible replacement is {}.".format(replacement) + if issue is not None: + url = "https://github.com/pypa/pip/issues/" + str(issue) + message += " You can find discussion regarding this at {}.".format(url) + + # Raise as an error if it has to be removed. + if gone_in is not None and parse(current_version) >= parse(gone_in): + raise PipDeprecationWarning(message) + warnings.warn(message, category=PipDeprecationWarning, stacklevel=2) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/encoding.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/encoding.py new file mode 100644 index 00000000..30139f2e --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/encoding.py @@ -0,0 +1,39 @@ +import codecs +import locale +import re +import sys + +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from typing import List, Tuple, Text + +BOMS = [ + (codecs.BOM_UTF8, 'utf-8'), + (codecs.BOM_UTF16, 'utf-16'), + (codecs.BOM_UTF16_BE, 'utf-16-be'), + (codecs.BOM_UTF16_LE, 'utf-16-le'), + (codecs.BOM_UTF32, 'utf-32'), + (codecs.BOM_UTF32_BE, 'utf-32-be'), + (codecs.BOM_UTF32_LE, 'utf-32-le'), +] # type: List[Tuple[bytes, Text]] + +ENCODING_RE = re.compile(br'coding[:=]\s*([-\w.]+)') + + +def auto_decode(data): + # type: (bytes) -> Text + """Check a bytes string for a BOM to correctly detect the encoding + + Fallback to locale.getpreferredencoding(False) like open() on Python3""" + for bom, encoding in BOMS: + if data.startswith(bom): + return data[len(bom):].decode(encoding) + # Lets check the first two lines as in PEP263 + for line in data.split(b'\n')[:2]: + if line[0:1] == b'#' and ENCODING_RE.search(line): + encoding = ENCODING_RE.search(line).groups()[0].decode('ascii') + return data.decode(encoding) + return data.decode( + locale.getpreferredencoding(False) or sys.getdefaultencoding(), + ) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/filesystem.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/filesystem.py new file mode 100644 index 00000000..1e6b0338 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/filesystem.py @@ -0,0 +1,30 @@ +import os +import os.path + +from pip._internal.utils.compat import get_path_uid + + +def check_path_owner(path): + # type: (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 not hasattr(os, "geteuid"): + return True + + 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 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/glibc.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/glibc.py new file mode 100644 index 00000000..5bea655e --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/glibc.py @@ -0,0 +1,93 @@ +from __future__ import absolute_import + +import ctypes +import re +import warnings + +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from typing import Optional, Tuple + + +def glibc_version_string(): + # type: () -> Optional[str] + "Returns glibc version string, or None if not using glibc." + + # 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. + process_namespace = ctypes.CDLL(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 = gnu_get_libc_version() + # py2 / py3 compatibility: + if not isinstance(version_str, str): + version_str = version_str.decode("ascii") + + return version_str + + +# Separated out from have_compatible_glibc for easier unit testing +def check_glibc_version(version_str, required_major, minimum_minor): + # type: (str, int, int) -> bool + # Parse string and check against requested 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[0-9]+)\.(?P[0-9]+)", version_str) + if not m: + warnings.warn("Expected glibc version with 2 components major.minor," + " got: %s" % version_str, RuntimeWarning) + return False + return (int(m.group("major")) == required_major and + int(m.group("minor")) >= minimum_minor) + + +def have_compatible_glibc(required_major, minimum_minor): + # type: (int, int) -> bool + version_str = glibc_version_string() # type: Optional[str] + if version_str is None: + return False + return check_glibc_version(version_str, required_major, minimum_minor) + + +# 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(): + # type: () -> 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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/hashes.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/hashes.py new file mode 100644 index 00000000..a7142069 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/hashes.py @@ -0,0 +1,115 @@ +from __future__ import absolute_import + +import hashlib + +from pip._vendor.six import iteritems, iterkeys, itervalues + +from pip._internal.exceptions import ( + HashMismatch, HashMissing, InstallationError, +) +from pip._internal.utils.misc import read_chunks +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from typing import ( + Dict, List, BinaryIO, NoReturn, Iterator + ) + from pip._vendor.six import PY3 + if PY3: + from hashlib import _Hash + else: + from hashlib import _hash as _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(object): + """A wrapper that builds multiple hashes at once and checks them against + known-good values + + """ + def __init__(self, hashes=None): + # type: (Dict[str, List[str]]) -> None + """ + :param hashes: A dict of algorithm names pointing to lists of allowed + hex digests + """ + self._allowed = {} if hashes is None else hashes + + def check_against_chunks(self, chunks): + # type: (Iterator[bytes]) -> None + """Check good hashes against ones built from iterable of chunks of + data. + + Raise HashMismatch if none match. + + """ + gots = {} + for hash_name in iterkeys(self._allowed): + try: + gots[hash_name] = hashlib.new(hash_name) + except (ValueError, TypeError): + raise InstallationError('Unknown hash name: %s' % hash_name) + + for chunk in chunks: + for hash in itervalues(gots): + hash.update(chunk) + + for hash_name, got in iteritems(gots): + if got.hexdigest() in self._allowed[hash_name]: + return + self._raise(gots) + + def _raise(self, gots): + # type: (Dict[str, _Hash]) -> NoReturn + raise HashMismatch(self._allowed, gots) + + def check_against_file(self, file): + # type: (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): + # type: (str) -> None + with open(path, 'rb') as file: + return self.check_against_file(file) + + def __nonzero__(self): + # type: () -> bool + """Return whether I know any known-good hashes.""" + return bool(self._allowed) + + def __bool__(self): + # type: () -> bool + return self.__nonzero__() + + +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): + # type: () -> 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(MissingHashes, self).__init__(hashes={FAVORITE_HASH: []}) + + def _raise(self, gots): + # type: (Dict[str, _Hash]) -> NoReturn + raise HashMissing(gots[FAVORITE_HASH].hexdigest()) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/logging.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/logging.py new file mode 100644 index 00000000..a28e88ca --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/logging.py @@ -0,0 +1,371 @@ +from __future__ import absolute_import + +import contextlib +import errno +import logging +import logging.handlers +import os +import sys +from logging import Filter + +from pip._vendor.six import PY2 + +from pip._internal.utils.compat import WINDOWS +from pip._internal.utils.deprecation import DEPRECATION_MSG_PREFIX +from pip._internal.utils.misc import ensure_dir, subprocess_logger + +try: + import threading +except ImportError: + import dummy_threading as threading # type: ignore + + +try: + from pip._vendor import colorama +# Lots of different errors can come from this, including SystemError and +# ImportError. +except Exception: + colorama = None + + +_log_state = threading.local() +_log_state.indentation = 0 + + +class BrokenStdoutLoggingError(Exception): + """ + Raised if BrokenPipeError occurs for the stdout stream while logging. + """ + pass + + +# BrokenPipeError does not exist in Python 2 and, in addition, manifests +# differently in Windows and non-Windows. +if WINDOWS: + # In Windows, a broken pipe can show up as EINVAL rather than EPIPE: + # https://bugs.python.org/issue19612 + # https://bugs.python.org/issue30418 + if PY2: + def _is_broken_pipe_error(exc_class, exc): + """See the docstring for non-Windows Python 3 below.""" + return (exc_class is IOError and + exc.errno in (errno.EINVAL, errno.EPIPE)) + else: + # In Windows, a broken pipe IOError became OSError in Python 3. + def _is_broken_pipe_error(exc_class, exc): + """See the docstring for non-Windows Python 3 below.""" + return ((exc_class is BrokenPipeError) or # noqa: F821 + (exc_class is OSError and + exc.errno in (errno.EINVAL, errno.EPIPE))) +elif PY2: + def _is_broken_pipe_error(exc_class, exc): + """See the docstring for non-Windows Python 3 below.""" + return (exc_class is IOError and exc.errno == errno.EPIPE) +else: + # Then we are in the non-Windows Python 3 case. + def _is_broken_pipe_error(exc_class, exc): + """ + Return whether an exception is a broken pipe error. + + Args: + exc_class: an exception class. + exc: an exception instance. + """ + return (exc_class is BrokenPipeError) # noqa: F821 + + +@contextlib.contextmanager +def indent_log(num=2): + """ + A context manager which will cause the log output to be indented for any + log messages emitted inside it. + """ + _log_state.indentation += num + try: + yield + finally: + _log_state.indentation -= num + + +def get_indentation(): + return getattr(_log_state, 'indentation', 0) + + +class IndentingFormatter(logging.Formatter): + def __init__(self, *args, **kwargs): + """ + 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 = kwargs.pop("add_timestamp", False) + super(IndentingFormatter, self).__init__(*args, **kwargs) + + def get_message_start(self, formatted, levelno): + """ + 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): + """ + Calls the standard formatter, but will indent all of the log messages + by our current indentation level. + """ + formatted = super(IndentingFormatter, self).format(record) + message_start = self.get_message_start(formatted, record.levelno) + formatted = message_start + formatted + + prefix = '' + if self.add_timestamp: + prefix = self.formatTime(record, "%Y-%m-%dT%H:%M:%S ") + prefix += " " * get_indentation() + formatted = "".join([ + prefix + line + for line in formatted.splitlines(True) + ]) + return formatted + + +def _color_wrap(*colors): + def wrapped(inp): + return "".join(list(colors) + [inp, colorama.Style.RESET_ALL]) + return wrapped + + +class ColorizedStreamHandler(logging.StreamHandler): + + # Don't build up a list of colors if we don't have colorama + if colorama: + COLORS = [ + # This needs to be in order from highest logging level to lowest. + (logging.ERROR, _color_wrap(colorama.Fore.RED)), + (logging.WARNING, _color_wrap(colorama.Fore.YELLOW)), + ] + else: + COLORS = [] + + def __init__(self, stream=None, no_color=None): + logging.StreamHandler.__init__(self, stream) + self._no_color = no_color + + if WINDOWS and colorama: + self.stream = colorama.AnsiToWin32(self.stream) + + def _using_stdout(self): + """ + Return whether the handler is using sys.stdout. + """ + if WINDOWS and colorama: + # Then self.stream is an AnsiToWin32 object. + return self.stream.wrapped is sys.stdout + + return self.stream is sys.stdout + + def should_color(self): + # Don't colorize things if we do not have colorama or if told not to + if not colorama or self._no_color: + return False + + real_stream = ( + self.stream if not isinstance(self.stream, colorama.AnsiToWin32) + else self.stream.wrapped + ) + + # If the stream is a tty we should color it + if hasattr(real_stream, "isatty") and real_stream.isatty(): + return True + + # If we have an ANSI term we should color it + if os.environ.get("TERM") == "ANSI": + return True + + # If anything else we should not color it + return False + + def format(self, record): + msg = logging.StreamHandler.format(self, record) + + if self.should_color(): + for level, color in self.COLORS: + if record.levelno >= level: + msg = color(msg) + break + + return msg + + # The logging module says handleError() can be customized. + def handleError(self, record): + 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 self._using_stdout() and + _is_broken_pipe_error(exc_class, exc)): + raise BrokenStdoutLoggingError() + + return super(ColorizedStreamHandler, self).handleError(record) + + +class BetterRotatingFileHandler(logging.handlers.RotatingFileHandler): + + def _open(self): + ensure_dir(os.path.dirname(self.baseFilename)) + return logging.handlers.RotatingFileHandler._open(self) + + +class MaxLevelFilter(Filter): + + def __init__(self, level): + self.level = level + + def filter(self, record): + return record.levelno < self.level + + +class ExcludeLoggerFilter(Filter): + + """ + A logging Filter that excludes records from a logger (or its children). + """ + + def filter(self, record): + # The base Filter class allows only records from a logger (or its + # children). + return not super(ExcludeLoggerFilter, self).filter(record) + + +def setup_logging(verbosity, no_color, user_log_file): + """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 >= 1: + level = "DEBUG" + elif verbosity == -1: + level = "WARNING" + elif verbosity == -2: + level = "ERROR" + elif verbosity <= -3: + level = "CRITICAL" + else: + level = "INFO" + + level_number = getattr(logging, level) + + # 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 + log_streams = { + "stdout": "ext://sys.stdout", + "stderr": "ext://sys.stderr", + } + handler_classes = { + "stream": "pip._internal.utils.logging.ColorizedStreamHandler", + "file": "pip._internal.utils.logging.BetterRotatingFileHandler", + } + handlers = ["console", "console_errors", "console_subprocess"] + ( + ["user_log"] if include_user_log else [] + ) + + 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"], + "no_color": no_color, + "stream": log_streams["stdout"], + "filters": ["exclude_subprocess", "exclude_warnings"], + "formatter": "indent", + }, + "console_errors": { + "level": "WARNING", + "class": handler_classes["stream"], + "no_color": no_color, + "stream": log_streams["stderr"], + "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"], + "no_color": no_color, + "stream": log_streams["stderr"], + "filters": ["restrict_to_subprocess"], + "formatter": "indent", + }, + "user_log": { + "level": "DEBUG", + "class": handler_classes["file"], + "filename": additional_log_file, + "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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/misc.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/misc.py new file mode 100644 index 00000000..ca7a5293 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/misc.py @@ -0,0 +1,1011 @@ +from __future__ import absolute_import + +import contextlib +import errno +import io +# we have a submodule named 'logging' which would shadow this if we used the +# regular name: +import logging as std_logging +import os +import posixpath +import re +import shutil +import stat +import subprocess +import sys +import tarfile +import zipfile +from collections import deque + +from pip._vendor import pkg_resources +# NOTE: retrying is not annotated in typeshed as on 2017-07-17, which is +# why we ignore the type on this import. +from pip._vendor.retrying import retry # type: ignore +from pip._vendor.six import PY2 +from pip._vendor.six.moves import input, shlex_quote +from pip._vendor.six.moves.urllib import parse as urllib_parse +from pip._vendor.six.moves.urllib.parse import unquote as urllib_unquote + +from pip._internal.exceptions import CommandError, InstallationError +from pip._internal.locations import ( + running_under_virtualenv, site_packages, user_site, virtualenv_no_global, + write_delete_marker_file, +) +from pip._internal.utils.compat import ( + WINDOWS, console_to_str, expanduser, stdlib_pkgs, +) +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if PY2: + from io import BytesIO as StringIO +else: + from io import StringIO + +if MYPY_CHECK_RUNNING: + from typing import ( + Optional, Tuple, Iterable, List, Match, Union, Any, Mapping, Text, + AnyStr, Container + ) + from pip._vendor.pkg_resources import Distribution + from pip._internal.models.link import Link + from pip._internal.utils.ui import SpinnerInterface + + +__all__ = ['rmtree', 'display_path', 'backup_dir', + 'ask', 'splitext', + 'format_size', 'is_installable_dir', + 'is_svn_page', 'file_contents', + 'split_leading_dir', 'has_leading_dir', + 'normalize_path', + 'renames', 'get_prog', + 'unzip_file', 'untar_file', 'unpack_file', 'call_subprocess', + 'captured_stdout', 'ensure_dir', + 'ARCHIVE_EXTENSIONS', 'SUPPORTED_EXTENSIONS', 'WHEEL_EXTENSION', + 'get_installed_version', 'remove_auth_from_url'] + + +logger = std_logging.getLogger(__name__) +subprocess_logger = std_logging.getLogger('pip.subprocessor') + +LOG_DIVIDER = '----------------------------------------' + +WHEEL_EXTENSION = '.whl' +BZ2_EXTENSIONS = ('.tar.bz2', '.tbz') +XZ_EXTENSIONS = ('.tar.xz', '.txz', '.tlz', '.tar.lz', '.tar.lzma') +ZIP_EXTENSIONS = ('.zip', WHEEL_EXTENSION) +TAR_EXTENSIONS = ('.tar.gz', '.tgz', '.tar') +ARCHIVE_EXTENSIONS = ( + ZIP_EXTENSIONS + BZ2_EXTENSIONS + TAR_EXTENSIONS + XZ_EXTENSIONS) +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 ensure_dir(path): + # type: (AnyStr) -> None + """os.path.makedirs without EEXIST.""" + try: + os.makedirs(path) + except OSError as e: + if e.errno != errno.EEXIST: + raise + + +def get_prog(): + # type: () -> str + try: + prog = os.path.basename(sys.argv[0]) + if prog in ('__main__.py', '-c'): + return "%s -m pip" % sys.executable + else: + return prog + except (AttributeError, TypeError, IndexError): + pass + return 'pip' + + +# Retry every half second for up to 3 seconds +@retry(stop_max_delay=3000, wait_fixed=500) +def rmtree(dir, ignore_errors=False): + # type: (str, bool) -> None + shutil.rmtree(dir, ignore_errors=ignore_errors, + onerror=rmtree_errorhandler) + + +def rmtree_errorhandler(func, path, exc_info): + """On Windows, the files in .svn are read-only, so when rmtree() tries to + remove them, an exception is thrown. We catch that here, remove the + read-only attribute, and hopefully continue without problems.""" + # if file type currently read only + if os.stat(path).st_mode & stat.S_IREAD: + # convert to read/write + os.chmod(path, stat.S_IWRITE) + # use the original function to repeat the operation + func(path) + return + else: + raise + + +def display_path(path): + # type: (Union[str, Text]) -> str + """Gives the display value for a given path, making it relative to cwd + if possible.""" + path = os.path.normcase(os.path.abspath(path)) + if sys.version_info[0] == 2: + path = path.decode(sys.getfilesystemencoding(), 'replace') + path = path.encode(sys.getdefaultencoding(), 'replace') + if path.startswith(os.getcwd() + os.path.sep): + path = '.' + path[len(os.getcwd()):] + return path + + +def backup_dir(dir, ext='.bak'): + # type: (str, str) -> 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, options): + # type: (str, Iterable[str]) -> str + for action in os.environ.get('PIP_EXISTS_ACTION', '').split(): + if action in options: + return action + return ask(message, options) + + +def ask(message, options): + # type: (str, Iterable[str]) -> str + """Ask the message interactively, with the given possible responses""" + while 1: + if os.environ.get('PIP_NO_INPUT'): + raise Exception( + 'No input was expected ($PIP_NO_INPUT set); question: %s' % + message + ) + response = input(message) + response = response.strip().lower() + if response not in options: + print( + 'Your response (%r) was not one of the expected responses: ' + '%s' % (response, ', '.join(options)) + ) + else: + return response + + +def format_size(bytes): + # type: (float) -> str + if bytes > 1000 * 1000: + return '%.1fMB' % (bytes / 1000.0 / 1000) + elif bytes > 10 * 1000: + return '%ikB' % (bytes / 1000) + elif bytes > 1000: + return '%.1fkB' % (bytes / 1000.0) + else: + return '%ibytes' % bytes + + +def is_installable_dir(path): + # type: (str) -> bool + """Is path is a directory containing setup.py or pyproject.toml? + """ + if not os.path.isdir(path): + return False + setup_py = os.path.join(path, 'setup.py') + if os.path.isfile(setup_py): + return True + pyproject_toml = os.path.join(path, 'pyproject.toml') + if os.path.isfile(pyproject_toml): + return True + return False + + +def is_svn_page(html): + # type: (Union[str, Text]) -> Optional[Match[Union[str, Text]]] + """ + Returns true if the page appears to be the index page of an svn repository + """ + return (re.search(r'[^<]*Revision \d+:', html) and + re.search(r'Powered by (?:<a[^>]*?>)?Subversion', html, re.I)) + + +def file_contents(filename): + # type: (str) -> Text + with open(filename, 'rb') as fp: + return fp.read().decode('utf-8') + + +def read_chunks(file, size=io.DEFAULT_BUFFER_SIZE): + """Yield pieces of data from a file-like object until EOF.""" + while True: + chunk = file.read(size) + if not chunk: + break + yield chunk + + +def split_leading_dir(path): + # type: (Union[str, Text]) -> List[Union[str, Text]] + 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): + # type: (Iterable[Union[str, Text]]) -> 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 normalize_path(path, resolve_symlinks=True): + # type: (str, bool) -> str + """ + Convert a path to its canonical, case-normalized, absolute version. + + """ + 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): + # type: (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, new): + # type: (str, 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): + # type: (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." + + """ + if not running_under_virtualenv(): + return True + return normalize_path(path).startswith(normalize_path(sys.prefix)) + + +def dist_is_local(dist): + # type: (Distribution) -> bool + """ + Return True if given Distribution object is installed locally + (i.e. within current virtualenv). + + Always True if we're not in a virtualenv. + + """ + return is_local(dist_location(dist)) + + +def dist_in_usersite(dist): + # type: (Distribution) -> bool + """ + Return True if given Distribution is installed in user site. + """ + norm_path = normalize_path(dist_location(dist)) + return norm_path.startswith(normalize_path(user_site)) + + +def dist_in_site_packages(dist): + # type: (Distribution) -> bool + """ + Return True if given Distribution is installed in + sysconfig.get_python_lib(). + """ + return normalize_path( + dist_location(dist) + ).startswith(normalize_path(site_packages)) + + +def dist_is_editable(dist): + # type: (Distribution) -> bool + """ + Return True if given Distribution is an editable install. + """ + for path_item in sys.path: + egg_link = os.path.join(path_item, dist.project_name + '.egg-link') + if os.path.isfile(egg_link): + return True + return False + + +def get_installed_distributions(local_only=True, + skip=stdlib_pkgs, + include_editables=True, + editables_only=False, + user_only=False): + # type: (bool, Container[str], bool, bool, bool) -> List[Distribution] + """ + Return a list of installed Distribution objects. + + If ``local_only`` is True (default), only return installations + local to the current virtualenv, if in a virtualenv. + + ``skip`` argument is an iterable of lower-case project names to + ignore; defaults to stdlib_pkgs + + If ``include_editables`` is False, don't report editables. + + If ``editables_only`` is True , only report editables. + + If ``user_only`` is True , only report installations in the user + site directory. + + """ + if local_only: + local_test = dist_is_local + else: + def local_test(d): + return True + + if include_editables: + def editable_test(d): + return True + else: + def editable_test(d): + return not dist_is_editable(d) + + if editables_only: + def editables_only_test(d): + return dist_is_editable(d) + else: + def editables_only_test(d): + return True + + if user_only: + user_test = dist_in_usersite + else: + def user_test(d): + return True + + # because of pkg_resources vendoring, mypy cannot find stub in typeshed + return [d for d in pkg_resources.working_set # type: ignore + if local_test(d) and + d.key not in skip and + editable_test(d) and + editables_only_test(d) and + user_test(d) + ] + + +def egg_link_path(dist): + # type: (Distribution) -> Optional[str] + """ + 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 = [] + if running_under_virtualenv(): + if virtualenv_no_global(): + sites.append(site_packages) + else: + sites.append(site_packages) + if user_site: + sites.append(user_site) + else: + if user_site: + sites.append(user_site) + sites.append(site_packages) + + for site in sites: + egglink = os.path.join(site, dist.project_name) + '.egg-link' + if os.path.isfile(egglink): + return egglink + return None + + +def dist_location(dist): + # type: (Distribution) -> str + """ + Get the site-packages location of this distribution. Generally + this is dist.location, except in the case of develop-installed + packages, where dist.location is the source code location, and we + want to know where the egg-link file is. + + """ + egg_link = egg_link_path(dist) + if egg_link: + return egg_link + return dist.location + + +def current_umask(): + """Get the current umask which involves having to set it temporarily.""" + mask = os.umask(0) + os.umask(mask) + return mask + + +def unzip_file(filename, location, flatten=True): + # type: (str, str, bool) -> 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 fn.endswith('/') or 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() + mode = info.external_attr >> 16 + # if mode and regular file and any execute permissions for + # user/group/world? + if mode and stat.S_ISREG(mode) and mode & 0o111: + # make dest file have execute for user/group/world + # (chmod +x) no-op on windows per python docs + os.chmod(fn, (0o777 - current_umask() | 0o111)) + finally: + zipfp.close() + + +def untar_file(filename, location): + # type: (str, 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 after being + written. 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) + try: + leading = has_leading_dir([ + member.name for member in tar.getmembers() + ]) + for member in tar.getmembers(): + fn = member.name + if leading: + # https://github.com/python/mypy/issues/1174 + fn = split_leading_dir(fn)[1] # type: ignore + path = os.path.join(location, fn) + if member.isdir(): + ensure_dir(path) + elif member.issym(): + try: + # https://github.com/python/typeshed/issues/2673 + tar._extract_member(member, path) # type: ignore + 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)) + with open(path, 'wb') as destfp: + shutil.copyfileobj(fp, destfp) + fp.close() + # Update the timestamp (useful for cython compiled files) + # https://github.com/python/typeshed/issues/2673 + tar.utime(member, path) # type: ignore + # member have any execute permissions for user/group/world? + if member.mode & 0o111: + # make dest file have execute for user/group/world + # no-op on windows per python docs + os.chmod(path, (0o777 - current_umask() | 0o111)) + finally: + tar.close() + + +def unpack_file( + filename, # type: str + location, # type: str + content_type, # type: Optional[str] + link # type: Optional[Link] +): + # type: (...) -> 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) + elif (content_type and content_type.startswith('text/html') and + is_svn_page(file_contents(filename))): + # We don't really care about this + from pip._internal.vcs.subversion import Subversion + Subversion('svn+' + link.url).unpack(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( + 'Cannot determine archive format of %s' % location + ) + + +def format_command_args(args): + # type: (List[str]) -> str + """ + Format command arguments for display. + """ + return ' '.join(shlex_quote(arg) for arg in args) + + +def call_subprocess( + cmd, # type: List[str] + show_stdout=False, # type: bool + cwd=None, # type: Optional[str] + on_returncode='raise', # type: str + extra_ok_returncodes=None, # type: Optional[Iterable[int]] + command_desc=None, # type: Optional[str] + extra_environ=None, # type: Optional[Mapping[str, Any]] + unset_environ=None, # type: Optional[Iterable[str]] + spinner=None # type: Optional[SpinnerInterface] +): + # type: (...) -> Optional[Text] + """ + 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(). + """ + 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 = subprocess_logger.info + used_level = std_logging.INFO + else: + # Then log the subprocess output using DEBUG. This also ensures + # it will be logged to the log file (aka user_log), if enabled. + log_subprocess = subprocess_logger.debug + used_level = std_logging.DEBUG + + # 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 + + if command_desc is None: + command_desc = format_command_args(cmd) + + 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( + cmd, stderr=subprocess.STDOUT, stdin=subprocess.PIPE, + stdout=subprocess.PIPE, cwd=cwd, env=env, + ) + proc.stdin.close() + except Exception as exc: + subprocess_logger.critical( + "Error %s while executing command %s", exc, command_desc, + ) + raise + all_output = [] + while True: + line = console_to_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: + spinner.spin() + try: + proc.wait() + finally: + if proc.stdout: + proc.stdout.close() + proc_had_error = ( + proc.returncode and proc.returncode not in extra_ok_returncodes + ) + if use_spinner: + if proc_had_error: + spinner.finish("error") + else: + spinner.finish("done") + if proc_had_error: + if on_returncode == 'raise': + if not showing_subprocess: + # Then the subprocess streams haven't been logged to the + # console yet. + subprocess_logger.error( + 'Complete output from command %s:', command_desc, + ) + # The all_output value already ends in a newline. + subprocess_logger.error(''.join(all_output) + LOG_DIVIDER) + raise InstallationError( + 'Command "%s" failed with error code %s in %s' + % (command_desc, proc.returncode, cwd)) + 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('Invalid value: on_returncode=%s' % + repr(on_returncode)) + return ''.join(all_output) + + +def _make_build_dir(build_dir): + os.makedirs(build_dir) + write_delete_marker_file(build_dir) + + +class FakeFile(object): + """Wrap a list of lines in an object with readline() to make + ConfigParser happy.""" + def __init__(self, lines): + self._gen = (l for l in lines) + + def readline(self): + try: + try: + return next(self._gen) + except NameError: + return self._gen.next() + except StopIteration: + return '' + + def __iter__(self): + return self._gen + + +class StreamWrapper(StringIO): + + @classmethod + def from_stream(cls, orig_stream): + cls.orig_stream = orig_stream + return cls() + + # compileall.compile_dir() needs stdout.encoding to print to stdout + @property + def encoding(self): + return self.orig_stream.encoding + + +@contextlib.contextmanager +def captured_output(stream_name): + """Return a context manager used by captured_stdout/stdin/stderr + that temporarily replaces the sys stream *stream_name* with a StringIO. + + Taken from Lib/support/__init__.py in the CPython repo. + """ + orig_stdout = getattr(sys, stream_name) + setattr(sys, stream_name, StreamWrapper.from_stream(orig_stdout)) + try: + yield getattr(sys, stream_name) + finally: + setattr(sys, stream_name, orig_stdout) + + +def captured_stdout(): + """Capture the output of sys.stdout: + + with captured_stdout() as stdout: + print('hello') + self.assertEqual(stdout.getvalue(), 'hello\n') + + Taken from Lib/support/__init__.py in the CPython repo. + """ + return captured_output('stdout') + + +def captured_stderr(): + """ + See captured_stdout(). + """ + return captured_output('stderr') + + +class cached_property(object): + """A property that is only computed once per instance and then replaces + itself with an ordinary attribute. Deleting the attribute resets the + property. + + Source: https://github.com/bottlepy/bottle/blob/0.11.5/bottle.py#L175 + """ + + def __init__(self, func): + self.__doc__ = getattr(func, '__doc__') + self.func = func + + def __get__(self, obj, cls): + if obj is None: + # We're being accessed from the class itself, not from an object + return self + value = obj.__dict__[self.func.__name__] = self.func(obj) + return value + + +def get_installed_version(dist_name, working_set=None): + """Get the installed version of dist_name avoiding pkg_resources cache""" + # Create a requirement that we'll look for inside of setuptools. + req = pkg_resources.Requirement.parse(dist_name) + + if working_set is None: + # We want to avoid having this cached, so we need to construct a new + # working set each time. + working_set = pkg_resources.WorkingSet() + + # Get the installed distribution from our working set + dist = working_set.find(req) + + # Check to see if we got an installed distribution or not, if we did + # we want to return it's version. + return dist.version if dist else None + + +def consume(iterator): + """Consume an iterable at C speed.""" + deque(iterator, maxlen=0) + + +# Simulates an enum +def enum(*sequential, **named): + 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 split_auth_from_netloc(netloc): + """ + 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) + 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_pass = auth.split(':', 1) + else: + user_pass = auth, None + + user_pass = tuple( + None if x is None else urllib_unquote(x) for x in user_pass + ) + + return netloc, user_pass + + +def redact_netloc(netloc): + # type: (str) -> str + """ + Replace the password in a netloc with "****", if it exists. + + For example, "user:pass@example.com" returns "user:****@example.com". + """ + netloc, (user, password) = split_auth_from_netloc(netloc) + if user is None: + return netloc + password = '' if password is None else ':****' + return '{user}{password}@{netloc}'.format(user=urllib_parse.quote(user), + password=password, + netloc=netloc) + + +def _transform_url(url, transform_netloc): + purl = urllib_parse.urlsplit(url) + netloc = transform_netloc(purl.netloc) + # stripped url + url_pieces = ( + purl.scheme, netloc, purl.path, purl.query, purl.fragment + ) + surl = urllib_parse.urlunsplit(url_pieces) + return surl + + +def _get_netloc(netloc): + return split_auth_from_netloc(netloc)[0] + + +def remove_auth_from_url(url): + # type: (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) + + +def redact_password_from_url(url): + # type: (str) -> str + """Replace the password in a given url with ****.""" + return _transform_url(url, redact_netloc) + + +def protect_pip_from_modification_on_windows(modifying_pip): + """Protection of pip.exe from modification on Windows + + On Windows, any operation modifying pip should be run as: + python -m pip ... + """ + pip_names = [ + "pip.exe", + "pip{}.exe".format(sys.version_info[0]), + "pip{}.{}.exe".format(*sys.version_info[:2]) + ] + + # 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)) + ) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/models.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/models.py new file mode 100644 index 00000000..d5cb80a7 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/models.py @@ -0,0 +1,40 @@ +"""Utilities for defining models +""" + +import operator + + +class KeyBasedCompareMixin(object): + """Provides comparision capabilities that is based on a key + """ + + def __init__(self, key, defining_class): + self._compare_key = key + self._defining_class = defining_class + + def __hash__(self): + return hash(self._compare_key) + + def __lt__(self, other): + return self._compare(other, operator.__lt__) + + def __le__(self, other): + return self._compare(other, operator.__le__) + + def __gt__(self, other): + return self._compare(other, operator.__gt__) + + def __ge__(self, other): + return self._compare(other, operator.__ge__) + + def __eq__(self, other): + return self._compare(other, operator.__eq__) + + def __ne__(self, other): + return self._compare(other, operator.__ne__) + + def _compare(self, other, method): + if not isinstance(other, self._defining_class): + return NotImplemented + + return method(self._compare_key, other._compare_key) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/outdated.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/outdated.py new file mode 100644 index 00000000..3b58cd5e --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/outdated.py @@ -0,0 +1,162 @@ +from __future__ import absolute_import + +import datetime +import json +import logging +import os.path +import sys + +from pip._vendor import lockfile, pkg_resources +from pip._vendor.packaging import version as packaging_version + +from pip._internal.index import PackageFinder +from pip._internal.utils.compat import WINDOWS +from pip._internal.utils.filesystem import check_path_owner +from pip._internal.utils.misc import ensure_dir, get_installed_version +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + import optparse + from typing import Any, Dict + from pip._internal.download import PipSession + + +SELFCHECK_DATE_FMT = "%Y-%m-%dT%H:%M:%SZ" + + +logger = logging.getLogger(__name__) + + +class SelfCheckState(object): + def __init__(self, cache_dir): + # type: (str) -> None + self.state = {} # type: Dict[str, Any] + self.statefile_path = None + + # Try to load the existing state + if cache_dir: + self.statefile_path = os.path.join(cache_dir, "selfcheck.json") + try: + with open(self.statefile_path) as statefile: + self.state = json.load(statefile)[sys.prefix] + except (IOError, ValueError, KeyError): + # Explicitly suppressing exceptions, since we don't want to + # error out if the cache file is invalid. + pass + + def save(self, pypi_version, current_time): + # type: (str, datetime.datetime) -> None + # If we do not have a path to cache in, don't bother saving. + if not self.statefile_path: + return + + # Check to make sure that we own the directory + if not check_path_owner(os.path.dirname(self.statefile_path)): + 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(os.path.dirname(self.statefile_path)) + + # Attempt to write out our version check file + with lockfile.LockFile(self.statefile_path): + if os.path.exists(self.statefile_path): + with open(self.statefile_path) as statefile: + state = json.load(statefile) + else: + state = {} + + state[sys.prefix] = { + "last_check": current_time.strftime(SELFCHECK_DATE_FMT), + "pypi_version": pypi_version, + } + + with open(self.statefile_path, "w") as statefile: + json.dump(state, statefile, sort_keys=True, + separators=(",", ":")) + + +def was_installed_by_pip(pkg): + # type: (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. + """ + try: + dist = pkg_resources.get_distribution(pkg) + return (dist.has_metadata('INSTALLER') and + 'pip' in dist.get_metadata_lines('INSTALLER')) + except pkg_resources.DistributionNotFound: + return False + + +def pip_version_check(session, options): + # type: (PipSession, 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_version = get_installed_version("pip") + if not installed_version: + return + + pip_version = packaging_version.parse(installed_version) + pypi_version = None + + try: + state = SelfCheckState(cache_dir=options.cache_dir) + + current_time = datetime.datetime.utcnow() + # Determine if we need to refresh the state + if "last_check" in state.state and "pypi_version" in state.state: + last_check = datetime.datetime.strptime( + state.state["last_check"], + SELFCHECK_DATE_FMT + ) + if (current_time - last_check).total_seconds() < 7 * 24 * 60 * 60: + pypi_version = state.state["pypi_version"] + + # Refresh the version if we need to or just see if we need to warn + if pypi_version is None: + # Lets use PackageFinder to see what the latest pip version is + finder = PackageFinder( + find_links=options.find_links, + index_urls=[options.index_url] + options.extra_index_urls, + allow_all_prereleases=False, # Explicitly set to False + trusted_hosts=options.trusted_hosts, + session=session, + ) + candidate = finder.find_candidates("pip").get_best() + if candidate is None: + return + pypi_version = str(candidate.version) + + # save that we've performed a check + state.save(pypi_version, current_time) + + remote_version = packaging_version.parse(pypi_version) + + # Determine if our pypi_version is older + if (pip_version < remote_version and + pip_version.base_version != remote_version.base_version and + was_installed_by_pip('pip')): + # Advise "python -m pip" on Windows to avoid issues + # with overwriting pip.exe. + if WINDOWS: + pip_cmd = "python -m pip" + else: + pip_cmd = "pip" + logger.warning( + "You are using pip version %s, however version %s is " + "available.\nYou should consider upgrading via the " + "'%s install --upgrade pip' command.", + pip_version, pypi_version, pip_cmd + ) + except Exception: + logger.debug( + "There was an error checking the latest version of pip", + exc_info=True, + ) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/packaging.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/packaging.py new file mode 100644 index 00000000..449f3fd6 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/packaging.py @@ -0,0 +1,85 @@ +from __future__ import absolute_import + +import logging +import sys +from email.parser import FeedParser + +from pip._vendor import pkg_resources +from pip._vendor.packaging import specifiers, version + +from pip._internal import exceptions +from pip._internal.utils.misc import display_path +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from typing import Optional + from email.message import Message + from pip._vendor.pkg_resources import Distribution + + +logger = logging.getLogger(__name__) + + +def check_requires_python(requires_python): + # type: (Optional[str]) -> bool + """ + Check if the python version in use match the `requires_python` specifier. + + Returns `True` if the version of python in use matches the requirement. + Returns `False` if the version of python in use does not matches the + requirement. + + Raises an InvalidSpecifier if `requires_python` have an invalid format. + """ + if requires_python is None: + # The package provides no information + return True + requires_python_specifier = specifiers.SpecifierSet(requires_python) + + # We only use major.minor.micro + python_version = version.parse('.'.join(map(str, sys.version_info[:3]))) + return python_version in requires_python_specifier + + +def get_metadata(dist): + # type: (Distribution) -> Message + if (isinstance(dist, pkg_resources.DistInfoDistribution) and + dist.has_metadata('METADATA')): + metadata = dist.get_metadata('METADATA') + elif dist.has_metadata('PKG-INFO'): + metadata = dist.get_metadata('PKG-INFO') + else: + logger.warning("No metadata found in %s", display_path(dist.location)) + metadata = '' + + feed_parser = FeedParser() + feed_parser.feed(metadata) + return feed_parser.close() + + +def check_dist_requires_python(dist): + pkg_info_dict = get_metadata(dist) + requires_python = pkg_info_dict.get('Requires-Python') + try: + if not check_requires_python(requires_python): + raise exceptions.UnsupportedPythonVersion( + "%s requires Python '%s' but the running Python is %s" % ( + dist.project_name, + requires_python, + '.'.join(map(str, sys.version_info[:3])),) + ) + except specifiers.InvalidSpecifier as e: + logger.warning( + "Package %s has an invalid Requires-Python entry %s - %s", + dist.project_name, requires_python, e, + ) + return + + +def get_installer(dist): + # type: (Distribution) -> str + if dist.has_metadata('INSTALLER'): + for line in dist.get_metadata_lines('INSTALLER'): + if line.strip(): + return line.strip() + return '' diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/setuptools_build.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/setuptools_build.py new file mode 100644 index 00000000..03973e97 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/setuptools_build.py @@ -0,0 +1,8 @@ +# Shim to wrap setup.py invocation with setuptools +SETUPTOOLS_SHIM = ( + "import setuptools, tokenize;__file__=%r;" + "f=getattr(tokenize, 'open', open)(__file__);" + "code=f.read().replace('\\r\\n', '\\n');" + "f.close();" + "exec(compile(code, __file__, 'exec'))" +) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/temp_dir.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/temp_dir.py new file mode 100644 index 00000000..2c81ad55 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/temp_dir.py @@ -0,0 +1,155 @@ +from __future__ import absolute_import + +import errno +import itertools +import logging +import os.path +import tempfile + +from pip._internal.utils.misc import rmtree + +logger = logging.getLogger(__name__) + + +class TempDirectory(object): + """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 or None + delete + Whether the directory should be deleted when exiting + (when used as a contextmanager) + + Methods: + create() + Creates a temporary directory and stores its path in the path + attribute. + cleanup() + Deletes the temporary directory and sets path attribute to None + + When used as a context manager, a temporary directory is created on + entering the context and, if the delete attribute is True, on exiting the + context the created directory is deleted. + """ + + def __init__(self, path=None, delete=None, kind="temp"): + super(TempDirectory, self).__init__() + + if path is None and delete is None: + # If we were not given an explicit directory, and we were not given + # an explicit delete option, then we'll default to deleting. + delete = True + + self.path = path + self.delete = delete + self.kind = kind + + def __repr__(self): + return "<{} {!r}>".format(self.__class__.__name__, self.path) + + def __enter__(self): + self.create() + return self + + def __exit__(self, exc, value, tb): + if self.delete: + self.cleanup() + + def create(self): + """Create a temporary directory and store its path in self.path + """ + if self.path is not None: + logger.debug( + "Skipped creation of temporary directory: {}".format(self.path) + ) + return + # 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. + self.path = os.path.realpath( + tempfile.mkdtemp(prefix="pip-{}-".format(self.kind)) + ) + logger.debug("Created temporary directory: {}".format(self.path)) + + def cleanup(self): + """Remove the temporary directory created and reset state + """ + if self.path is not None and os.path.exists(self.path): + rmtree(self.path) + self.path = None + + +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, delete=None): + super(AdjacentTempDirectory, self).__init__(delete=delete) + self.original = original.rstrip('/\\') + + @classmethod + def _generate_names(cls, name): + """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): + 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: + self.path = os.path.realpath(path) + break + + if not self.path: + # Final fallback on the default behavior. + self.path = os.path.realpath( + tempfile.mkdtemp(prefix="pip-{}-".format(self.kind)) + ) + logger.debug("Created temporary directory: {}".format(self.path)) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/typing.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/typing.py new file mode 100644 index 00000000..10170ce2 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/typing.py @@ -0,0 +1,29 @@ +"""For neatly implementing static typing in pip. + +`mypy` - the static type analysis tool we use - uses the `typing` module, which +provides core functionality fundamental to mypy's functioning. + +Generally, `typing` would be imported at runtime and used in that fashion - +it acts as a no-op at runtime and does not have any run-time overhead by +design. + +As it turns out, `typing` is not vendorable - it uses separate sources for +Python 2/Python 3. Thus, this codebase can not expect it to be present. +To work around this, mypy allows the typing import to be behind a False-y +optional to prevent it from running at runtime and type-comments can be used +to remove the need for the types to be accessible directly during runtime. + +This module provides the False-y guard in a nicely named fashion so that a +curious maintainer can reach here to read this. + +In pip, all static-typing related imports should be guarded as follows: + + from pip._internal.utils.typing import MYPY_CHECK_RUNNING + + if MYPY_CHECK_RUNNING: + from typing import ... + +Ref: https://github.com/python/mypy/issues/3216 +""" + +MYPY_CHECK_RUNNING = False diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/ui.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/ui.py new file mode 100644 index 00000000..0902ce71 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/utils/ui.py @@ -0,0 +1,424 @@ +from __future__ import absolute_import, division + +import contextlib +import itertools +import logging +import sys +import time +from signal import SIGINT, default_int_handler, signal + +from pip._vendor import six +from pip._vendor.progress import HIDE_CURSOR, SHOW_CURSOR +from pip._vendor.progress.bar import Bar, FillingCirclesBar, IncrementalBar +from pip._vendor.progress.spinner import Spinner + +from pip._internal.utils.compat import WINDOWS +from pip._internal.utils.logging import get_indentation +from pip._internal.utils.misc import format_size +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from typing import Any, Iterator, IO + +try: + from pip._vendor import colorama +# Lots of different errors can come from this, including SystemError and +# ImportError. +except Exception: + colorama = None + +logger = logging.getLogger(__name__) + + +def _select_progress_class(preferred, fallback): + encoding = getattr(preferred.file, "encoding", None) + + # If we don't know what encoding this file is in, then we'll just assume + # that it doesn't support unicode and use the ASCII bar. + if not encoding: + return fallback + + # Collect all of the possible characters we want to use with the preferred + # bar. + characters = [ + getattr(preferred, "empty_fill", six.text_type()), + getattr(preferred, "fill", six.text_type()), + ] + characters += list(getattr(preferred, "phases", [])) + + # Try to decode the characters we're using for the bar using the encoding + # of the given file, if this works then we'll assume that we can use the + # fancier bar and if not we'll fall back to the plaintext bar. + try: + six.text_type().join(characters).encode(encoding) + except UnicodeEncodeError: + return fallback + else: + return preferred + + +_BaseBar = _select_progress_class(IncrementalBar, Bar) # type: Any + + +class InterruptibleMixin(object): + """ + Helper to ensure that self.finish() gets called on keyboard interrupt. + + This allows downloads to be interrupted without leaving temporary state + (like hidden cursors) behind. + + This class is similar to the progress library's existing SigIntMixin + helper, but as of version 1.2, that helper has the following problems: + + 1. It calls sys.exit(). + 2. It discards the existing SIGINT handler completely. + 3. It leaves its own handler in place even after an uninterrupted finish, + which will have unexpected delayed effects if the user triggers an + unrelated keyboard interrupt some time after a progress-displaying + download has already completed, for example. + """ + + def __init__(self, *args, **kwargs): + """ + Save the original SIGINT handler for later. + """ + super(InterruptibleMixin, self).__init__(*args, **kwargs) + + self.original_handler = signal(SIGINT, self.handle_sigint) + + # If signal() returns None, the previous handler was not installed from + # Python, and we cannot restore it. This probably should not happen, + # but if it does, we must restore something sensible instead, at least. + # The least bad option should be Python's default SIGINT handler, which + # just raises KeyboardInterrupt. + if self.original_handler is None: + self.original_handler = default_int_handler + + def finish(self): + """ + Restore the original SIGINT handler after finishing. + + This should happen regardless of whether the progress display finishes + normally, or gets interrupted. + """ + super(InterruptibleMixin, self).finish() + signal(SIGINT, self.original_handler) + + def handle_sigint(self, signum, frame): + """ + Call self.finish() before delegating to the original SIGINT handler. + + This handler should only be in place while the progress display is + active. + """ + self.finish() + self.original_handler(signum, frame) + + +class SilentBar(Bar): + + def update(self): + pass + + +class BlueEmojiBar(IncrementalBar): + + suffix = "%(percent)d%%" + bar_prefix = " " + bar_suffix = " " + phases = (u"\U0001F539", u"\U0001F537", u"\U0001F535") # type: Any + + +class DownloadProgressMixin(object): + + def __init__(self, *args, **kwargs): + super(DownloadProgressMixin, self).__init__(*args, **kwargs) + self.message = (" " * (get_indentation() + 2)) + self.message + + @property + def downloaded(self): + return format_size(self.index) + + @property + def download_speed(self): + # Avoid zero division errors... + if self.avg == 0.0: + return "..." + return format_size(1 / self.avg) + "/s" + + @property + def pretty_eta(self): + if self.eta: + return "eta %s" % self.eta_td + return "" + + def iter(self, it, n=1): + for x in it: + yield x + self.next(n) + self.finish() + + +class WindowsMixin(object): + + def __init__(self, *args, **kwargs): + # The Windows terminal does not support the hide/show cursor ANSI codes + # even with colorama. So we'll ensure that hide_cursor is False on + # Windows. + # This call needs to go before the super() call, so that hide_cursor + # is set in time. The base progress bar class writes the "hide cursor" + # code to the terminal in its init, so if we don't set this soon + # enough, we get a "hide" with no corresponding "show"... + if WINDOWS and self.hide_cursor: + self.hide_cursor = False + + super(WindowsMixin, self).__init__(*args, **kwargs) + + # Check if we are running on Windows and we have the colorama module, + # if we do then wrap our file with it. + if WINDOWS and colorama: + self.file = colorama.AnsiToWin32(self.file) + # The progress code expects to be able to call self.file.isatty() + # but the colorama.AnsiToWin32() object doesn't have that, so we'll + # add it. + self.file.isatty = lambda: self.file.wrapped.isatty() + # The progress code expects to be able to call self.file.flush() + # but the colorama.AnsiToWin32() object doesn't have that, so we'll + # add it. + self.file.flush = lambda: self.file.wrapped.flush() + + +class BaseDownloadProgressBar(WindowsMixin, InterruptibleMixin, + DownloadProgressMixin): + + file = sys.stdout + message = "%(percent)d%%" + suffix = "%(downloaded)s %(download_speed)s %(pretty_eta)s" + +# NOTE: The "type: ignore" comments on the following classes are there to +# work around https://github.com/python/typing/issues/241 + + +class DefaultDownloadProgressBar(BaseDownloadProgressBar, + _BaseBar): + pass + + +class DownloadSilentBar(BaseDownloadProgressBar, SilentBar): # type: ignore + pass + + +class DownloadIncrementalBar(BaseDownloadProgressBar, # type: ignore + IncrementalBar): + pass + + +class DownloadFillingCirclesBar(BaseDownloadProgressBar, # type: ignore + FillingCirclesBar): + pass + + +class DownloadBlueEmojiProgressBar(BaseDownloadProgressBar, # type: ignore + BlueEmojiBar): + pass + + +class DownloadProgressSpinner(WindowsMixin, InterruptibleMixin, + DownloadProgressMixin, Spinner): + + file = sys.stdout + suffix = "%(downloaded)s %(download_speed)s" + + def next_phase(self): + if not hasattr(self, "_phaser"): + self._phaser = itertools.cycle(self.phases) + return next(self._phaser) + + def update(self): + message = self.message % self + phase = self.next_phase() + suffix = self.suffix % self + line = ''.join([ + message, + " " if message else "", + phase, + " " if suffix else "", + suffix, + ]) + + self.writeln(line) + + +BAR_TYPES = { + "off": (DownloadSilentBar, DownloadSilentBar), + "on": (DefaultDownloadProgressBar, DownloadProgressSpinner), + "ascii": (DownloadIncrementalBar, DownloadProgressSpinner), + "pretty": (DownloadFillingCirclesBar, DownloadProgressSpinner), + "emoji": (DownloadBlueEmojiProgressBar, DownloadProgressSpinner) +} + + +def DownloadProgressProvider(progress_bar, max=None): + if max is None or max == 0: + return BAR_TYPES[progress_bar][1]().iter + else: + return BAR_TYPES[progress_bar][0](max=max).iter + + +################################################################ +# Generic "something is happening" spinners +# +# We don't even try using progress.spinner.Spinner here because it's actually +# simpler to reimplement from scratch than to coerce their code into doing +# what we need. +################################################################ + +@contextlib.contextmanager +def hidden_cursor(file): + # type: (IO) -> Iterator[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) + + +class RateLimiter(object): + def __init__(self, min_update_interval_seconds): + # type: (float) -> None + self._min_update_interval_seconds = min_update_interval_seconds + self._last_update = 0 # type: float + + def ready(self): + # type: () -> bool + now = time.time() + delta = now - self._last_update + return delta >= self._min_update_interval_seconds + + def reset(self): + # type: () -> None + self._last_update = time.time() + + +class SpinnerInterface(object): + def spin(self): + # type: () -> None + raise NotImplementedError() + + def finish(self, final_status): + # type: (str) -> None + raise NotImplementedError() + + +class InteractiveSpinner(SpinnerInterface): + def __init__(self, message, file=None, spin_chars="-\\|/", + # Empirically, 8 updates/second looks nice + min_update_interval_seconds=0.125): + 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): + 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): + # type: () -> None + if self._finished: + return + if not self._rate_limiter.ready(): + return + self._write(next(self._spin_cycle)) + + def finish(self, final_status): + # type: (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, min_update_interval_seconds=60): + # type: (str, float) -> None + self._message = message + self._finished = False + self._rate_limiter = RateLimiter(min_update_interval_seconds) + self._update("started") + + def _update(self, status): + assert not self._finished + self._rate_limiter.reset() + logger.info("%s: %s", self._message, status) + + def spin(self): + # type: () -> None + if self._finished: + return + if not self._rate_limiter.ready(): + return + self._update("still running...") + + def finish(self, final_status): + # type: (str) -> None + if self._finished: + return + self._update("finished with status '%s'" % (final_status,)) + self._finished = True + + +@contextlib.contextmanager +def open_spinner(message): + # type: (str) -> Iterator[SpinnerInterface] + # 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 = InteractiveSpinner(message) # type: SpinnerInterface + 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") diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/vcs/__init__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/vcs/__init__.py new file mode 100644 index 00000000..6fca0793 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/vcs/__init__.py @@ -0,0 +1,604 @@ +"""Handles all VCS (version control) support""" +from __future__ import absolute_import + +import errno +import logging +import os +import shutil +import sys + +from pip._vendor import pkg_resources +from pip._vendor.six.moves.urllib import parse as urllib_parse + +from pip._internal.exceptions import BadCommand +from pip._internal.utils.misc import ( + ask_path_exists, backup_dir, call_subprocess, display_path, rmtree, +) +from pip._internal.utils.typing import MYPY_CHECK_RUNNING + +if MYPY_CHECK_RUNNING: + from typing import ( + Any, Dict, Iterable, List, Mapping, Optional, Text, Tuple, Type + ) + from pip._internal.utils.ui import SpinnerInterface + + AuthInfo = Tuple[Optional[str], Optional[str]] + +__all__ = ['vcs'] + + +logger = logging.getLogger(__name__) + + +def make_vcs_requirement_url(repo_url, rev, project_name, subdir=None): + """ + 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. + """ + egg_project_name = pkg_resources.to_filename(project_name) + req = '{}@{}#egg={}'.format(repo_url, rev, egg_project_name) + if subdir: + req += '&subdirectory={}'.format(subdir) + + return req + + +class RemoteNotFoundError(Exception): + pass + + +class RevOptions(object): + + """ + Encapsulates a VCS-specific revision to install, along with any VCS + install options. + + Instances of this class should be treated as if immutable. + """ + + def __init__( + self, + vc_class, # type: Type[VersionControl] + rev=None, # type: Optional[str] + extra_args=None, # type: Optional[List[str]] + ): + # type: (...) -> None + """ + Args: + vc_class: a VersionControl subclass. + rev: the name of the revision to install. + extra_args: a list of extra options. + """ + if extra_args is None: + extra_args = [] + + self.extra_args = extra_args + self.rev = rev + self.vc_class = vc_class + + def __repr__(self): + return '<RevOptions {}: rev={!r}>'.format(self.vc_class.name, self.rev) + + @property + def arg_rev(self): + # type: () -> Optional[str] + if self.rev is None: + return self.vc_class.default_arg_rev + + return self.rev + + def to_args(self): + # type: () -> List[str] + """ + Return the VCS-specific command arguments. + """ + args = [] # type: List[str] + 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): + # type: () -> str + if not self.rev: + return '' + + return ' (to revision {})'.format(self.rev) + + def make_new(self, rev): + # type: (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(object): + _registry = {} # type: Dict[str, Type[VersionControl]] + schemes = ['ssh', 'git', 'hg', 'bzr', 'sftp', 'svn'] + + def __init__(self): + # type: () -> None + # Register more schemes with urlparse for various version control + # systems + urllib_parse.uses_netloc.extend(self.schemes) + # Python >= 2.7.4, 3.3 doesn't have uses_fragment + if getattr(urllib_parse, 'uses_fragment', None): + urllib_parse.uses_fragment.extend(self.schemes) + super(VcsSupport, self).__init__() + + def __iter__(self): + return self._registry.__iter__() + + @property + def backends(self): + # type: () -> List[Type[VersionControl]] + return list(self._registry.values()) + + @property + def dirnames(self): + # type: () -> List[str] + return [backend.dirname for backend in self.backends] + + @property + def all_schemes(self): + # type: () -> List[str] + schemes = [] # type: List[str] + for backend in self.backends: + schemes.extend(backend.schemes) + return schemes + + def register(self, cls): + # type: (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, cls=None, name=None): + # type: (Optional[Type[VersionControl]], Optional[str]) -> None + if name in self._registry: + del self._registry[name] + elif cls in self._registry.values(): + del self._registry[cls.name] + else: + logger.warning('Cannot unregister because no class or name given') + + def get_backend_type(self, location): + # type: (str) -> Optional[Type[VersionControl]] + """ + Return the type of the version control backend if found at given + location, e.g. vcs.get_backend_type('/path/to/vcs/checkout') + """ + for vc_type in self._registry.values(): + if vc_type.controls_location(location): + logger.debug('Determine that %s uses VCS: %s', + location, vc_type.name) + return vc_type + return None + + def get_backend(self, name): + # type: (str) -> Optional[Type[VersionControl]] + name = name.lower() + if name in self._registry: + return self._registry[name] + return None + + +vcs = VcsSupport() + + +class VersionControl(object): + name = '' + dirname = '' + repo_name = '' + # List of supported schemes for this Version Control + schemes = () # type: Tuple[str, ...] + # Iterable of environment variable names to pass to call_subprocess(). + unset_environ = () # type: Tuple[str, ...] + default_arg_rev = None # type: Optional[str] + + @classmethod + def should_add_vcs_url_prefix(cls, remote_url): + """ + 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('{}:'.format(cls.name)) + + @classmethod + def get_subdirectory(cls, repo_dir): + """ + Return the path to setup.py, relative to the repo root. + """ + return None + + @classmethod + def get_requirement_revision(cls, repo_dir): + """ + 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, project_name): + """ + 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 repo_url is None: + return None + + if cls.should_add_vcs_url_prefix(repo_url): + repo_url = '{}+{}'.format(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 + + def __init__(self, url=None, *args, **kwargs): + self.url = url + super(VersionControl, self).__init__(*args, **kwargs) + + @staticmethod + def get_base_rev_args(rev): + """ + Return the base revision arguments for a vcs command. + + Args: + rev: the name of a revision to install. Cannot be None. + """ + raise NotImplementedError + + @classmethod + def make_rev_options(cls, rev=None, extra_args=None): + # type: (Optional[str], Optional[List[str]]) -> 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) + + @classmethod + def _is_local_repository(cls, repo): + # type: (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) + + def export(self, location): + """ + Export the repository at the url to the destination location + i.e. only download the files, without vcs informations + """ + raise NotImplementedError + + @classmethod + def get_netloc_and_auth(cls, netloc, scheme): + """ + 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): + # type: (str) -> Tuple[str, Optional[str], 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( + "Sorry, {!r} is a malformed VCS url. " + "The format is <vcs>+<protocol>://<url>, " + "e.g. svn+http://myrepo/svn/MyApp#egg=MyApp".format(url) + ) + # 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) + url = urllib_parse.urlunsplit((scheme, netloc, path, query, '')) + return url, rev, user_pass + + @staticmethod + def make_rev_args(username, password): + """ + Return the RevOptions "extra arguments" to use in obtain(). + """ + return [] + + def get_url_rev_options(self, url): + # type: (str) -> Tuple[str, RevOptions] + """ + Return the URL and RevOptions object to use in obtain() and in + some cases export(), as a tuple (url, rev_options). + """ + url, rev, user_pass = self.get_url_rev_and_auth(url) + username, password = user_pass + extra_args = self.make_rev_args(username, password) + rev_options = self.make_rev_options(rev, extra_args=extra_args) + + return url, rev_options + + @staticmethod + def normalize_url(url): + # type: (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, url2): + # type: (str, str) -> bool + """ + Compare two repo URLs for identity, ignoring incidental differences. + """ + return (cls.normalize_url(url1) == cls.normalize_url(url2)) + + @classmethod + def fetch_new(cls, dest, url, rev_options): + """ + 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. + """ + raise NotImplementedError + + def switch(self, dest, url, rev_options): + """ + Switch the repo at ``dest`` to point to ``URL``. + + Args: + rev_options: a RevOptions object. + """ + raise NotImplementedError + + def update(self, dest, url, rev_options): + """ + 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, name): + """ + 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): + # type: (str) -> None + """ + Install or update in editable mode the package represented by this + VersionControl object. + + Args: + dest: the repository directory in which to install or update. + """ + url, rev_options = self.get_url_rev_options(self.url) + + if not os.path.exists(dest): + self.fetch_new(dest, url, rev_options) + 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): + 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) + 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 ', # type: ignore + ('i', 'w', 'b')) + + logger.warning( + 'The plan is to install the %s repository %s', + self.name, + url, + ) + response = ask_path_exists('What to do? %s' % 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) + 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) + 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) + + def unpack(self, location): + # type: (str) -> None + """ + Clean up current location and download the url repository + (and vcs infos) into location + """ + if os.path.exists(location): + rmtree(location) + self.obtain(location) + + @classmethod + def get_remote_url(cls, location): + """ + 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): + """ + Return the current commit id of the files at the given location. + """ + raise NotImplementedError + + @classmethod + def run_command( + cls, + cmd, # type: List[str] + show_stdout=True, # type: bool + cwd=None, # type: Optional[str] + on_returncode='raise', # type: str + extra_ok_returncodes=None, # type: Optional[Iterable[int]] + command_desc=None, # type: Optional[str] + extra_environ=None, # type: Optional[Mapping[str, Any]] + spinner=None # type: Optional[SpinnerInterface] + ): + # type: (...) -> Optional[Text] + """ + 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 = [cls.name] + 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) + except OSError as e: + # errno.ENOENT = no such file or directory + # In other words, the VCS executable isn't available + if e.errno == errno.ENOENT: + raise BadCommand( + 'Cannot find command %r - do you have ' + '%r installed and in your ' + 'PATH?' % (cls.name, cls.name)) + else: + raise # re-raise exception if a different error occurred + + @classmethod + def is_repository_directory(cls, path): + # type: (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 controls_location(cls, location): + # type: (str) -> bool + """ + Check if a location is controlled by the vcs. + 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. + """ + return cls.is_repository_directory(location) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/vcs/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/vcs/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..89a8e39b039d84c91448a6ea516f0a4a3a768159 GIT binary patch literal 17007 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/vcs/__pycache__/bazaar.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/vcs/__pycache__/bazaar.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..51673feedce54556bd308b6b25ad2488c2e9d166 GIT binary patch literal 3432 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/vcs/__pycache__/git.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/vcs/__pycache__/git.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..953a89e0914c6bf73a1de890f7386c8c0074427c GIT binary patch literal 9067 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�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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/vcs/__pycache__/mercurial.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/vcs/__pycache__/mercurial.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..244b612ab555905dd02290a301ac6c9fd3c3cda2 GIT binary patch literal 3665 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 T0MaDi3NZ16-@xkFgKz&2hd80I literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/vcs/__pycache__/subversion.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/vcs/__pycache__/subversion.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dd0afb23458f19cdd6293d30ea0b0bb6ace477ae GIT binary patch literal 6698 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 b9&#MA5l>$>J=jQLO)kI%>gK`^v~T|lr6ZUv literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/vcs/bazaar.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/vcs/bazaar.py new file mode 100644 index 00000000..3587b3de --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/vcs/bazaar.py @@ -0,0 +1,103 @@ +from __future__ import absolute_import + +import logging +import os + +from pip._vendor.six.moves.urllib import parse as urllib_parse + +from pip._internal.download import path_to_url +from pip._internal.utils.misc import display_path, rmtree +from pip._internal.vcs import VersionControl, vcs + +logger = logging.getLogger(__name__) + + +class Bazaar(VersionControl): + name = 'bzr' + dirname = '.bzr' + repo_name = 'branch' + schemes = ( + 'bzr', 'bzr+http', 'bzr+https', 'bzr+ssh', 'bzr+sftp', 'bzr+ftp', + 'bzr+lp', + ) + + def __init__(self, url=None, *args, **kwargs): + super(Bazaar, self).__init__(url, *args, **kwargs) + # This is only needed for python <2.7.5 + # Register lp but do not expose as a scheme to support bzr+lp. + if getattr(urllib_parse, 'uses_fragment', None): + urllib_parse.uses_fragment.extend(['lp']) + + @staticmethod + def get_base_rev_args(rev): + return ['-r', rev] + + def export(self, location): + """ + Export the Bazaar repository at the url to the destination location + """ + # Remove the location to make sure Bazaar can export it correctly + if os.path.exists(location): + rmtree(location) + + url, rev_options = self.get_url_rev_options(self.url) + self.run_command( + ['export', location, url] + rev_options.to_args(), + show_stdout=False, + ) + + @classmethod + def fetch_new(cls, dest, url, rev_options): + rev_display = rev_options.to_display() + logger.info( + 'Checking out %s%s to %s', + url, + rev_display, + display_path(dest), + ) + cmd_args = ['branch', '-q'] + rev_options.to_args() + [url, dest] + cls.run_command(cmd_args) + + def switch(self, dest, url, rev_options): + self.run_command(['switch', url], cwd=dest) + + def update(self, dest, url, rev_options): + cmd_args = ['pull', '-q'] + rev_options.to_args() + self.run_command(cmd_args, cwd=dest) + + @classmethod + def get_url_rev_and_auth(cls, url): + # hotfix the URL scheme after removing bzr+ from bzr+ssh:// readd it + url, rev, user_pass = super(Bazaar, cls).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): + urls = cls.run_command(['info'], show_stdout=False, 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 + return None + + @classmethod + def get_revision(cls, location): + revision = cls.run_command( + ['revno'], show_stdout=False, cwd=location, + ) + return revision.splitlines()[-1] + + @classmethod + def is_commit_id_equal(cls, dest, name): + """Always assume the versions don't match""" + return False + + +vcs.register(Bazaar) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/vcs/git.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/vcs/git.py new file mode 100644 index 00000000..35ea9301 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/vcs/git.py @@ -0,0 +1,362 @@ +from __future__ import absolute_import + +import logging +import os.path +import re + +from pip._vendor.packaging.version import parse as parse_version +from pip._vendor.six.moves.urllib import parse as urllib_parse +from pip._vendor.six.moves.urllib import request as urllib_request + +from pip._internal.exceptions import BadCommand +from pip._internal.utils.compat import samefile +from pip._internal.utils.misc import display_path, redact_password_from_url +from pip._internal.utils.temp_dir import TempDirectory +from pip._internal.vcs import RemoteNotFoundError, VersionControl, vcs + +urlsplit = urllib_parse.urlsplit +urlunsplit = urllib_parse.urlunsplit + + +logger = logging.getLogger(__name__) + + +HASH_REGEX = re.compile('[a-fA-F0-9]{40}') + + +def looks_like_hash(sha): + return bool(HASH_REGEX.match(sha)) + + +class Git(VersionControl): + name = 'git' + dirname = '.git' + repo_name = 'clone' + schemes = ( + 'git', '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' + + def __init__(self, url=None, *args, **kwargs): + + # Works around an apparent Git bug + # (see https://article.gmane.org/gmane.comp.version-control.git/146500) + if url: + 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('/') + ) + url = urlunsplit((scheme, netloc, newpath, query, fragment)) + after_plus = scheme.find('+') + 1 + url = scheme[:after_plus] + urlunsplit( + (scheme[after_plus:], netloc, newpath, query, fragment), + ) + + super(Git, self).__init__(url, *args, **kwargs) + + @staticmethod + def get_base_rev_args(rev): + return [rev] + + def get_git_version(self): + VERSION_PFX = 'git version ' + version = self.run_command(['version'], show_stdout=False) + if version.startswith(VERSION_PFX): + version = version[len(VERSION_PFX):].split()[0] + else: + version = '' + # get first 3 positions of the git version because + # on windows it is x.y.z.windows.t, and this parses as + # LegacyVersion which always smaller than a Version. + version = '.'.join(version.split('.')[:3]) + return parse_version(version) + + @classmethod + def get_current_branch(cls, location): + """ + 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, cwd=location, + ) + ref = output.strip() + + if ref.startswith('refs/heads/'): + return ref[len('refs/heads/'):] + + return None + + def export(self, location): + """Export the Git repository at the url to the destination location""" + if not location.endswith('/'): + location = location + '/' + + with TempDirectory(kind="export") as temp_dir: + self.unpack(temp_dir.path) + self.run_command( + ['checkout-index', '-a', '-f', '--prefix', location], + show_stdout=False, cwd=temp_dir.path + ) + + @classmethod + def get_revision_sha(cls, dest, rev): + """ + 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, on_returncode='ignore') + refs = {} + for line in output.strip().splitlines(): + try: + sha, ref = line.split() + except ValueError: + # Include the offending line to simplify troubleshooting if + # this error ever occurs. + raise ValueError('unexpected show-ref line: {!r}'.format(line)) + + refs[ref] = sha + + branch_ref = 'refs/remotes/origin/{}'.format(rev) + tag_ref = 'refs/tags/{}'.format(rev) + + sha = refs.get(branch_ref) + if sha is not None: + return (sha, True) + + sha = refs.get(tag_ref) + + return (sha, False) + + @classmethod + def resolve_revision(cls, dest, url, rev_options): + """ + 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 + sha, is_branch = cls.get_revision_sha(dest, rev) + + if sha is not None: + rev_options = rev_options.make_new(sha) + 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.warning( + "Did not find branch or tag '%s', assuming revision or ref.", + rev, + ) + + if not rev.startswith('refs/'): + return rev_options + + # If it looks like a ref, we have to fetch it explicitly. + cls.run_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, name): + """ + 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 + + @classmethod + def fetch_new(cls, dest, url, rev_options): + rev_display = rev_options.to_display() + logger.info( + 'Cloning %s%s to %s', redact_password_from_url(url), + rev_display, display_path(dest), + ) + cls.run_command(['clone', '-q', url, dest]) + + if rev_options.rev: + # Then a specific revision was requested. + rev_options = cls.resolve_revision(dest, url, rev_options) + branch_name = getattr(rev_options, 'branch_name', None) + if branch_name is None: + # Only do a checkout if the current commit id doesn't match + # the requested revision. + if not cls.is_commit_id_equal(dest, rev_options.rev): + cmd_args = ['checkout', '-q'] + rev_options.to_args() + cls.run_command(cmd_args, cwd=dest) + elif cls.get_current_branch(dest) != branch_name: + # Then a specific branch was requested, and that branch + # is not yet checked out. + track_branch = 'origin/{}'.format(branch_name) + cmd_args = [ + 'checkout', '-b', branch_name, '--track', track_branch, + ] + cls.run_command(cmd_args, cwd=dest) + + #: repo may contain submodules + cls.update_submodules(dest) + + def switch(self, dest, url, rev_options): + self.run_command(['config', 'remote.origin.url', url], cwd=dest) + cmd_args = ['checkout', '-q'] + rev_options.to_args() + self.run_command(cmd_args, cwd=dest) + + self.update_submodules(dest) + + def update(self, dest, url, rev_options): + # First fetch changes from the default remote + if self.get_git_version() >= parse_version('1.9.0'): + # fetch tags in addition to everything else + self.run_command(['fetch', '-q', '--tags'], cwd=dest) + else: + self.run_command(['fetch', '-q'], cwd=dest) + # Then reset to wanted revision (maybe even origin/master) + rev_options = self.resolve_revision(dest, url, rev_options) + cmd_args = ['reset', '--hard', '-q'] + rev_options.to_args() + self.run_command(cmd_args, cwd=dest) + #: update submodules + self.update_submodules(dest) + + @classmethod + def get_remote_url(cls, location): + """ + 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, 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 url.strip() + + @classmethod + def get_revision(cls, location, rev=None): + if rev is None: + rev = 'HEAD' + current_rev = cls.run_command( + ['rev-parse', rev], show_stdout=False, cwd=location, + ) + return current_rev.strip() + + @classmethod + def get_subdirectory(cls, location): + # find the repo root + git_dir = cls.run_command(['rev-parse', '--git-dir'], + show_stdout=False, cwd=location).strip() + if not os.path.isabs(git_dir): + git_dir = os.path.join(location, git_dir) + root_dir = os.path.join(git_dir, '..') + # find setup.py + orig_location = location + while not os.path.exists(os.path.join(location, 'setup.py')): + last_location = location + location = os.path.dirname(location) + if location == last_location: + # We've traversed up to the root of the filesystem without + # finding setup.py + logger.warning( + "Could not find setup.py for directory %s (tried all " + "parent directories)", + orig_location, + ) + return None + # relative path of setup.py to repo root + if samefile(root_dir, location): + return None + return os.path.relpath(location, root_dir) + + @classmethod + def get_url_rev_and_auth(cls, url): + """ + 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. + """ + if '://' not in url: + assert 'file:' not in url + url = url.replace('git+', 'git+ssh://') + url, rev, user_pass = super(Git, cls).get_url_rev_and_auth(url) + url = url.replace('ssh://', '') + else: + url, rev, user_pass = super(Git, cls).get_url_rev_and_auth(url) + + return url, rev, user_pass + + @classmethod + def update_submodules(cls, location): + if not os.path.exists(os.path.join(location, '.gitmodules')): + return + cls.run_command( + ['submodule', 'update', '--init', '--recursive', '-q'], + cwd=location, + ) + + @classmethod + def controls_location(cls, location): + if super(Git, cls).controls_location(location): + return True + try: + r = cls.run_command(['rev-parse'], + cwd=location, + show_stdout=False, + on_returncode='ignore') + return not r + except BadCommand: + logger.debug("could not determine if %s is under git control " + "because git is not available", location) + return False + + +vcs.register(Git) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/vcs/mercurial.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/vcs/mercurial.py new file mode 100644 index 00000000..81edc4a0 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/vcs/mercurial.py @@ -0,0 +1,105 @@ +from __future__ import absolute_import + +import logging +import os + +from pip._vendor.six.moves import configparser + +from pip._internal.download import path_to_url +from pip._internal.utils.misc import display_path +from pip._internal.utils.temp_dir import TempDirectory +from pip._internal.vcs import VersionControl, vcs + +logger = logging.getLogger(__name__) + + +class Mercurial(VersionControl): + name = 'hg' + dirname = '.hg' + repo_name = 'clone' + schemes = ('hg', 'hg+http', 'hg+https', 'hg+ssh', 'hg+static-http') + + @staticmethod + def get_base_rev_args(rev): + return [rev] + + def export(self, location): + """Export the Hg repository at the url to the destination location""" + with TempDirectory(kind="export") as temp_dir: + self.unpack(temp_dir.path) + + self.run_command( + ['archive', location], show_stdout=False, cwd=temp_dir.path + ) + + @classmethod + def fetch_new(cls, dest, url, rev_options): + rev_display = rev_options.to_display() + logger.info( + 'Cloning hg %s%s to %s', + url, + rev_display, + display_path(dest), + ) + cls.run_command(['clone', '--noupdate', '-q', url, dest]) + cmd_args = ['update', '-q'] + rev_options.to_args() + cls.run_command(cmd_args, cwd=dest) + + def switch(self, dest, url, rev_options): + repo_config = os.path.join(dest, self.dirname, 'hgrc') + config = configparser.SafeConfigParser() + try: + config.read(repo_config) + config.set('paths', 'default', url) + 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 = ['update', '-q'] + rev_options.to_args() + self.run_command(cmd_args, cwd=dest) + + def update(self, dest, url, rev_options): + self.run_command(['pull', '-q'], cwd=dest) + cmd_args = ['update', '-q'] + rev_options.to_args() + self.run_command(cmd_args, cwd=dest) + + @classmethod + def get_remote_url(cls, location): + url = cls.run_command( + ['showconfig', 'paths.default'], + show_stdout=False, cwd=location).strip() + if cls._is_local_repository(url): + url = path_to_url(url) + return url.strip() + + @classmethod + def get_revision(cls, location): + """ + Return the repository-local changeset revision number, as an integer. + """ + current_revision = cls.run_command( + ['parents', '--template={rev}'], + show_stdout=False, cwd=location).strip() + return current_revision + + @classmethod + def get_requirement_revision(cls, location): + """ + Return the changeset identification hash, as a 40-character + hexadecimal string + """ + current_rev_hash = cls.run_command( + ['parents', '--template={node}'], + show_stdout=False, cwd=location).strip() + return current_rev_hash + + @classmethod + def is_commit_id_equal(cls, dest, name): + """Always assume the versions don't match""" + return False + + +vcs.register(Mercurial) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/vcs/subversion.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/vcs/subversion.py new file mode 100644 index 00000000..01bb1612 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/vcs/subversion.py @@ -0,0 +1,234 @@ +from __future__ import absolute_import + +import logging +import os +import re + +from pip._internal.utils.logging import indent_log +from pip._internal.utils.misc import ( + display_path, rmtree, split_auth_from_netloc, +) +from pip._internal.utils.typing import MYPY_CHECK_RUNNING +from pip._internal.vcs import VersionControl, vcs + +_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>') + + +if MYPY_CHECK_RUNNING: + from typing import Optional, Tuple + +logger = logging.getLogger(__name__) + + +class Subversion(VersionControl): + name = 'svn' + dirname = '.svn' + repo_name = 'checkout' + schemes = ('svn', 'svn+ssh', 'svn+http', 'svn+https', 'svn+svn') + + @classmethod + def should_add_vcs_url_prefix(cls, remote_url): + return True + + @staticmethod + def get_base_rev_args(rev): + return ['-r', rev] + + def get_vcs_version(self): + # type: () -> Optional[Tuple[int, ...]] + """Return the version of the currently installed Subversion client. + + :return: A tuple containing the parts of the version information or + ``None`` 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 + version_prefix = 'svn, version ' + version = self.run_command(['--version'], show_stdout=False) + if not version.startswith(version_prefix): + return None + + version = version[len(version_prefix):].split()[0] + version_list = version.split('.') + try: + parsed_version = tuple(map(int, version_list)) + except ValueError: + return None + + if not parsed_version: + return None + + return parsed_version + + def export(self, location): + """Export the svn repository at the url to the destination location""" + url, rev_options = self.get_url_rev_options(self.url) + + logger.info('Exporting svn repository %s to %s', url, location) + with indent_log(): + if os.path.exists(location): + # Subversion doesn't like to check out over an existing + # directory --force fixes this, but was only added in svn 1.5 + rmtree(location) + cmd_args = ['export'] + rev_options.to_args() + [url, location] + self.run_command(cmd_args, show_stdout=False) + + @classmethod + def fetch_new(cls, dest, url, rev_options): + rev_display = rev_options.to_display() + logger.info( + 'Checking out %s%s to %s', + url, + rev_display, + display_path(dest), + ) + cmd_args = ['checkout', '-q'] + rev_options.to_args() + [url, dest] + cls.run_command(cmd_args) + + def switch(self, dest, url, rev_options): + cmd_args = ['switch'] + rev_options.to_args() + [url, dest] + self.run_command(cmd_args) + + def update(self, dest, url, rev_options): + cmd_args = ['update'] + rev_options.to_args() + [dest] + self.run_command(cmd_args) + + @classmethod + def get_revision(cls, location): + """ + Return the maximum revision for all files under a given location + """ + # Note: taken from setuptools.command.egg_info + revision = 0 + + for base, dirs, files 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: + 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 revision + + @classmethod + def get_netloc_and_auth(cls, netloc, scheme): + """ + 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(Subversion, cls).get_netloc_and_auth(netloc, scheme) + + return split_auth_from_netloc(netloc) + + @classmethod + def get_url_rev_and_auth(cls, url): + # hotfix the URL scheme after removing svn+ from svn+ssh:// readd it + url, rev, user_pass = super(Subversion, cls).get_url_rev_and_auth(url) + if url.startswith('ssh://'): + url = 'svn+' + url + return url, rev, user_pass + + @staticmethod + def make_rev_args(username, password): + extra_args = [] + if username: + extra_args += ['--username', username] + if password: + extra_args += ['--password', password] + + return extra_args + + @classmethod + def get_remote_url(cls, location): + # In cases where the source is in a subdirectory, not alongside + # setup.py we have to look up in the location until we find a real + # setup.py + orig_location = location + while not os.path.exists(os.path.join(location, 'setup.py')): + last_location = location + location = os.path.dirname(location) + if location == last_location: + # We've traversed up to the root of the filesystem without + # finding setup.py + logger.warning( + "Could not find setup.py for directory %s (tried all " + "parent directories)", + orig_location, + ) + return None + + return cls._get_svn_url_rev(location)[0] + + @classmethod + def _get_svn_url_rev(cls, location): + 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 = '' + + if (data.startswith('8') or + data.startswith('9') or + data.startswith('10')): + data = list(map(str.splitlines, data.split('\n\x0c\n'))) + del data[0][0] # get rid of the '8' + url = data[0][3] + revs = [int(d[9]) for d in data if len(d) > 9 and d[9]] + [0] + elif data.startswith('<?xml'): + match = _svn_xml_url_re.search(data) + if not match: + raise ValueError('Badly formatted data: %r' % data) + 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 + xml = cls.run_command( + ['info', '--xml', location], + show_stdout=False, + ) + url = _svn_info_xml_url_re.search(xml).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, name): + """Always assume the versions don't match""" + return False + + +vcs.register(Subversion) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/wheel.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/wheel.py new file mode 100644 index 00000000..1bdbe93a --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_internal/wheel.py @@ -0,0 +1,1098 @@ +""" +Support for installing and building the "wheel" binary package format. +""" +from __future__ import absolute_import + +import collections +import compileall +import csv +import hashlib +import logging +import os.path +import re +import shutil +import stat +import sys +import warnings +from base64 import urlsafe_b64encode +from email.parser import Parser + +from pip._vendor import pkg_resources +from pip._vendor.distlib.scripts import ScriptMaker +from pip._vendor.packaging.utils import canonicalize_name +from pip._vendor.six import StringIO + +from pip._internal import pep425tags +from pip._internal.download import path_to_url, unpack_url +from pip._internal.exceptions import ( + InstallationError, InvalidWheelFilename, UnsupportedWheel, +) +from pip._internal.locations import ( + PIP_DELETE_MARKER_FILENAME, distutils_scheme, +) +from pip._internal.models.link import Link +from pip._internal.utils.logging import indent_log +from pip._internal.utils.misc import ( + LOG_DIVIDER, call_subprocess, captured_stdout, ensure_dir, + format_command_args, read_chunks, +) +from pip._internal.utils.setuptools_build import SETUPTOOLS_SHIM +from pip._internal.utils.temp_dir import TempDirectory +from pip._internal.utils.typing import MYPY_CHECK_RUNNING +from pip._internal.utils.ui import open_spinner + +if MYPY_CHECK_RUNNING: + from typing import ( + Dict, List, Optional, Sequence, Mapping, Tuple, IO, Text, Any, Iterable + ) + from pip._vendor.packaging.requirements import Requirement + from pip._internal.req.req_install import InstallRequirement + from pip._internal.download import PipSession + from pip._internal.index import FormatControl, PackageFinder + from pip._internal.operations.prepare import ( + RequirementPreparer + ) + from pip._internal.cache import WheelCache + from pip._internal.pep425tags import Pep425Tag + + InstalledCSVRow = Tuple[str, ...] + + +VERSION_COMPATIBLE = (1, 0) + + +logger = logging.getLogger(__name__) + + +def normpath(src, p): + return os.path.relpath(src, p).replace(os.path.sep, '/') + + +def rehash(path, blocksize=1 << 20): + # type: (str, int) -> Tuple[str, str] + """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) + digest = 'sha256=' + urlsafe_b64encode( + h.digest() + ).decode('latin1').rstrip('=') + # unicode/str python2 issues + return (digest, str(length)) # type: ignore + + +def open_for_csv(name, mode): + # type: (str, Text) -> IO + if sys.version_info[0] < 3: + nl = {} # type: Dict[str, Any] + bin = 'b' + else: + nl = {'newline': ''} # type: Dict[str, Any] + bin = '' + return open(name, mode + bin, **nl) + + +def replace_python_tag(wheelname, new_tag): + # type: (str, str) -> str + """Replace the Python tag in a wheel file name with a new value. + """ + parts = wheelname.split('-') + parts[-3] = new_tag + return '-'.join(parts) + + +def fix_script(path): + # type: (str) -> Optional[bool] + """Replace #!python with #!/path/to/python + Return True if file was changed.""" + # XXX RECORD hashes will need to be updated + if 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 + return None + + +dist_info_re = re.compile(r"""^(?P<namever>(?P<name>.+?)(-(?P<ver>.+?))?) + \.dist-info$""", re.VERBOSE) + + +def root_is_purelib(name, wheeldir): + # type: (str, str) -> bool + """ + Return True if the extracted wheel in wheeldir should go into purelib. + """ + name_folded = name.replace("-", "_") + for item in os.listdir(wheeldir): + match = dist_info_re.match(item) + if match and match.group('name') == name_folded: + with open(os.path.join(wheeldir, item, 'WHEEL')) as wheel: + for line in wheel: + line = line.lower().rstrip() + if line == "root-is-purelib: true": + return True + return False + + +def get_entrypoints(filename): + # type: (str) -> Tuple[Dict[str, str], Dict[str, str]] + if not os.path.exists(filename): + return {}, {} + + # This is done because you can pass a string to entry_points wrappers which + # means that they may or may not be valid INI files. The attempt here is to + # strip leading and trailing whitespace in order to make them valid INI + # files. + with open(filename) as fp: + data = StringIO() + for line in fp: + data.write(line.strip()) + data.write("\n") + data.seek(0) + + # get the entry points and then the script names + entry_points = pkg_resources.EntryPoint.parse_map(data) + console = entry_points.get('console_scripts', {}) + gui = entry_points.get('gui_scripts', {}) + + def _split_ep(s): + """get the string representation of EntryPoint, remove space and split + on '='""" + return str(s).replace(" ", "").split("=") + + # convert the EntryPoint objects into strings with module:function + console = dict(_split_ep(v) for v in console.values()) + gui = dict(_split_ep(v) for v in gui.values()) + return console, gui + + +def message_about_scripts_not_on_PATH(scripts): + # type: (Sequence[str]) -> Optional[str] + """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 = collections.defaultdict(set) # type: Dict[str, 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(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.dirname(sys.executable))) + warn_for = { + parent_dir: scripts for parent_dir, scripts in grouped_by_dir.items() + if os.path.normcase(parent_dir) not in not_warn_dirs + } + if not warn_for: + return None + + # Format a message + msg_lines = [] + for parent_dir, scripts in warn_for.items(): + sorted_scripts = sorted(scripts) # type: List[str] + if len(sorted_scripts) == 1: + start_text = "script {} is".format(sorted_scripts[0]) + else: + start_text = "scripts {} are".format( + ", ".join(sorted_scripts[:-1]) + " and " + sorted_scripts[-1] + ) + + msg_lines.append( + "The {} installed in '{}' which is not on PATH." + .format(start_text, parent_dir) + ) + + 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")) + + # Returns the formatted multiline message + return "\n".join(msg_lines) + + +def sorted_outrows(outrows): + # type: (Iterable[InstalledCSVRow]) -> List[InstalledCSVRow] + """ + Return the given rows of a RECORD file in sorted order. + + 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(outrows, key=lambda row: tuple(str(x) for x in row)) + + +def get_csv_rows_for_installed( + old_csv_rows, # type: Iterable[List[str]] + installed, # type: Dict[str, str] + changed, # type: set + generated, # type: List[str] + lib_dir, # type: str +): + # type: (...) -> List[InstalledCSVRow] + """ + :param installed: A map from archive RECORD path to installation RECORD + path. + """ + installed_rows = [] # type: List[InstalledCSVRow] + for row in old_csv_rows: + if len(row) > 3: + logger.warning( + 'RECORD line has more than three elements: {}'.format(row) + ) + # Make a copy because we are mutating the row. + row = list(row) + old_path = row[0] + new_path = installed.pop(old_path, old_path) + row[0] = new_path + if new_path in changed: + digest, length = rehash(new_path) + row[1] = digest + row[2] = length + installed_rows.append(tuple(row)) + for f in generated: + digest, length = rehash(f) + installed_rows.append((normpath(f, lib_dir), digest, str(length))) + for f in installed: + installed_rows.append((installed[f], '', '')) + return installed_rows + + +def move_wheel_files( + name, # type: str + req, # type: Requirement + wheeldir, # type: str + user=False, # type: bool + home=None, # type: Optional[str] + root=None, # type: Optional[str] + pycompile=True, # type: bool + scheme=None, # type: Optional[Mapping[str, str]] + isolated=False, # type: bool + prefix=None, # type: Optional[str] + warn_script_location=True # type: bool +): + # type: (...) -> None + """Install a wheel""" + # TODO: Investigate and break this up. + # TODO: Look into moving this into a dedicated class for representing an + # installation. + + if not scheme: + scheme = distutils_scheme( + name, user=user, home=home, root=root, isolated=isolated, + prefix=prefix, + ) + + if root_is_purelib(name, wheeldir): + lib_dir = scheme['purelib'] + else: + lib_dir = scheme['platlib'] + + info_dir = [] # type: List[str] + data_dirs = [] + source = wheeldir.rstrip(os.path.sep) + os.path.sep + + # 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 = {} # type: Dict[str, str] + changed = set() + generated = [] # type: List[str] + + # Compile all of the pyc files that we're going to be installing + if pycompile: + with captured_stdout() as stdout: + with warnings.catch_warnings(): + warnings.filterwarnings('ignore') + compileall.compile_dir(source, force=True, quiet=True) + logger.debug(stdout.getvalue()) + + def record_installed(srcfile, destfile, modified=False): + """Map archive RECORD paths to installation RECORD paths.""" + oldpath = normpath(srcfile, wheeldir) + newpath = normpath(destfile, lib_dir) + installed[oldpath] = newpath + if modified: + changed.add(destfile) + + def clobber(source, dest, is_base, fixer=None, filter=None): + ensure_dir(dest) # common for the 'include' path + + for dir, subdirs, files in os.walk(source): + basedir = dir[len(source):].lstrip(os.path.sep) + destdir = os.path.join(dest, basedir) + if is_base and basedir.split(os.path.sep, 1)[0].endswith('.data'): + continue + for s in subdirs: + destsubdir = os.path.join(dest, basedir, s) + if is_base and basedir == '' and destsubdir.endswith('.data'): + data_dirs.append(s) + continue + elif (is_base and + s.endswith('.dist-info') and + canonicalize_name(s).startswith( + canonicalize_name(req.name))): + assert not info_dir, ('Multiple .dist-info directories: ' + + destsubdir + ', ' + + ', '.join(info_dir)) + info_dir.append(destsubdir) + for f in files: + # Skip unwanted files + if filter and filter(f): + continue + srcfile = os.path.join(dir, f) + destfile = os.path.join(dest, basedir, f) + # directory creation is lazy and after the file filtering above + # to ensure we don't install empty dirs; empty dirs can't be + # uninstalled. + ensure_dir(destdir) + + # copyfile (called below) truncates the destination if it + # exists and then writes 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(destfile): + os.unlink(destfile) + + # We use copyfile (not move, copy, or copy2) to be extra sure + # that we are not moving directories over (copyfile fails for + # directories) as well as to ensure that we are not copying + # over any metadata because we want more control over what + # metadata we actually copy over. + shutil.copyfile(srcfile, destfile) + + # Copy over the metadata for the file, currently this only + # includes the atime and mtime. + st = os.stat(srcfile) + if hasattr(os, "utime"): + os.utime(destfile, (st.st_atime, st.st_mtime)) + + # If our file is executable, then make our destination file + # executable. + if os.access(srcfile, os.X_OK): + st = os.stat(srcfile) + permissions = ( + st.st_mode | stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH + ) + os.chmod(destfile, permissions) + + changed = False + if fixer: + changed = fixer(destfile) + record_installed(srcfile, destfile, changed) + + clobber(source, lib_dir, True) + + assert info_dir, "%s .dist-info directory not found" % req + + # Get the defined entry points + ep_file = os.path.join(info_dir[0], 'entry_points.txt') + console, gui = get_entrypoints(ep_file) + + def is_entrypoint_wrapper(name): + # EP, EP.exe and EP-script.py are scripts generated for + # entry point EP by setuptools + 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) + + for datadir in data_dirs: + fixer = None + filter = None + for subdir in os.listdir(os.path.join(wheeldir, datadir)): + fixer = None + if subdir == 'scripts': + fixer = fix_script + filter = is_entrypoint_wrapper + source = os.path.join(wheeldir, datadir, subdir) + dest = scheme[subdir] + clobber(source, dest, False, fixer=fixer, filter=filter) + + maker = ScriptMaker(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 + + # Simplify the script and fix the fact that the default script swallows + # every single stack trace. + # See https://bitbucket.org/pypa/distlib/issue/34/ + # See https://bitbucket.org/pypa/distlib/issue/33/ + def _get_script_text(entry): + if entry.suffix is None: + raise InstallationError( + "Invalid script entry point: %s for req: %s - A callable " + "suffix is required. Cf https://packaging.python.org/en/" + "latest/distributing.html#console-scripts for more " + "information." % (entry, req) + ) + return maker.script_template % { + "module": entry.prefix, + "import_name": entry.suffix.split(".")[0], + "func": entry.suffix, + } + # ignore type, because mypy disallows assigning to a method, + # see https://github.com/python/mypy/issues/2427 + maker._get_script_text = _get_script_text # type: ignore + maker.script_template = r"""# -*- coding: utf-8 -*- +import re +import sys + +from %(module)s import %(import_name)s + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit(%(func)s()) +""" + + # 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, but that won't happen till Metadata 2.0 is + # available. + # In the meantime, 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. So, as a stopgap until Metadata 2.0, we + # override the versioned entry points in the wheel and generate the + # correct ones. This code is purely a short-term measure until Metadata 2.0 + # is available. + # + # 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: + spec = 'pip = ' + pip_script + generated.extend(maker.make(spec)) + + if os.environ.get("ENSUREPIP_OPTIONS", "") != "altinstall": + spec = 'pip%s = %s' % (sys.version[:1], pip_script) + generated.extend(maker.make(spec)) + + spec = 'pip%s = %s' % (sys.version[:3], pip_script) + generated.extend(maker.make(spec)) + # 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: + spec = 'easy_install = ' + easy_install_script + generated.extend(maker.make(spec)) + + spec = 'easy_install-%s = %s' % (sys.version[:3], easy_install_script) + generated.extend(maker.make(spec)) + # 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 and GUI entry points specified in the wheel + if len(console) > 0: + generated_console_scripts = maker.make_multiple( + ['%s = %s' % kv for kv in console.items()] + ) + generated.extend(generated_console_scripts) + + if warn_script_location: + msg = message_about_scripts_not_on_PATH(generated_console_scripts) + if msg is not None: + logger.warning(msg) + + if len(gui) > 0: + generated.extend( + maker.make_multiple( + ['%s = %s' % kv for kv in gui.items()], + {'gui': True} + ) + ) + + # Record pip as the installer + installer = os.path.join(info_dir[0], 'INSTALLER') + temp_installer = os.path.join(info_dir[0], 'INSTALLER.pip') + with open(temp_installer, 'wb') as installer_file: + installer_file.write(b'pip\n') + shutil.move(temp_installer, installer) + generated.append(installer) + + # Record details of all files installed + record = os.path.join(info_dir[0], 'RECORD') + temp_record = os.path.join(info_dir[0], 'RECORD.pip') + with open_for_csv(record, 'r') as record_in: + with open_for_csv(temp_record, 'w+') as record_out: + reader = csv.reader(record_in) + outrows = get_csv_rows_for_installed( + reader, installed=installed, changed=changed, + generated=generated, lib_dir=lib_dir, + ) + writer = csv.writer(record_out) + # Sort to simplify testing. + for row in sorted_outrows(outrows): + writer.writerow(row) + shutil.move(temp_record, record) + + +def wheel_version(source_dir): + # type: (Optional[str]) -> Optional[Tuple[int, ...]] + """ + Return the Wheel-Version of an extracted wheel, if possible. + + Otherwise, return None if we couldn't parse / extract it. + """ + try: + dist = [d for d in pkg_resources.find_on_path(None, source_dir)][0] + + wheel_data = dist.get_metadata('WHEEL') + wheel_data = Parser().parsestr(wheel_data) + + version = wheel_data['Wheel-Version'].strip() + version = tuple(map(int, version.split('.'))) + return version + except Exception: + return None + + +def check_compatibility(version, name): + # type: (Optional[Tuple[int, ...]], 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 not version: + raise UnsupportedWheel( + "%s is in an unsupported or invalid wheel" % name + ) + if version[0] > VERSION_COMPATIBLE[0]: + raise UnsupportedWheel( + "%s's Wheel-Version (%s) is not compatible with this version " + "of pip" % (name, '.'.join(map(str, version))) + ) + elif version > VERSION_COMPATIBLE: + logger.warning( + 'Installing from a newer Wheel-Version (%s)', + '.'.join(map(str, version)), + ) + + +class Wheel(object): + """A wheel file""" + + # TODO: Maybe move the class into the models sub-package + # TODO: Maybe move the install code into this class + + wheel_file_re = re.compile( + r"""^(?P<namever>(?P<name>.+?)-(?P<ver>.*?)) + ((-(?P<build>\d[^-]*?))?-(?P<pyver>.+?)-(?P<abi>.+?)-(?P<plat>.+?) + \.whl|\.dist-info)$""", + re.VERBOSE + ) + + def __init__(self, filename): + # type: (str) -> None + """ + :raises InvalidWheelFilename: when the filename is invalid for a wheel + """ + wheel_info = self.wheel_file_re.match(filename) + if not wheel_info: + raise InvalidWheelFilename( + "%s is not a valid wheel filename." % filename + ) + self.filename = filename + self.name = wheel_info.group('name').replace('_', '-') + # we'll assume "_" means "-" due to wheel naming scheme + # (https://github.com/pypa/pip/issues/1150) + self.version = wheel_info.group('ver').replace('_', '-') + self.build_tag = wheel_info.group('build') + self.pyversions = wheel_info.group('pyver').split('.') + self.abis = wheel_info.group('abi').split('.') + self.plats = wheel_info.group('plat').split('.') + + # All the tag combinations from this file + self.file_tags = { + (x, y, z) for x in self.pyversions + for y in self.abis for z in self.plats + } + + def support_index_min(self, tags=None): + # type: (Optional[List[Pep425Tag]]) -> Optional[int] + """ + Return the lowest index that one of the wheel's file_tag combinations + achieves in the supported_tags list e.g. if there are 8 supported tags, + and one of the file tags is first in the list, then return 0. Returns + None is the wheel is not supported. + """ + if tags is None: # for mock + tags = pep425tags.get_supported() + indexes = [tags.index(c) for c in self.file_tags if c in tags] + return min(indexes) if indexes else None + + def supported(self, tags=None): + # type: (Optional[List[Pep425Tag]]) -> bool + """Is this wheel supported on this system?""" + if tags is None: # for mock + tags = pep425tags.get_supported() + return bool(set(tags).intersection(self.file_tags)) + + +def _contains_egg_info( + s, _egg_info_re=re.compile(r'([a-z0-9_.]+)-([a-z0-9_.!+-]+)', re.I)): + """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_use_ephemeral_cache( + req, # type: InstallRequirement + format_control, # type: FormatControl + autobuilding, # type: bool + cache_available # type: bool +): + # type: (...) -> Optional[bool] + """ + Return whether to build an InstallRequirement object using the + ephemeral cache. + + :param cache_available: whether a cache directory is available for the + autobuilding=True case. + + :return: True or False to build the requirement with ephem_cache=True + or False, respectively; or None not to build the requirement. + """ + if req.constraint: + return None + if req.is_wheel: + if not autobuilding: + logger.info( + 'Skipping %s, due to already being wheel.', req.name, + ) + return None + if not autobuilding: + return False + + if req.editable or not req.source_dir: + return None + + if req.link and not req.link.is_artifact: + # VCS checkout. Build wheel just for this run. + return True + + if "binary" not in format_control.get_allowed_formats( + canonicalize_name(req.name)): + logger.info( + "Skipping bdist_wheel for %s, due to binaries " + "being disabled for it.", req.name, + ) + return None + + link = req.link + base, ext = link.splitext() + if cache_available and _contains_egg_info(base): + return False + + # Otherwise, build the wheel just for this run using the ephemeral + # cache since we are either in the case of e.g. a local directory, or + # no cache directory is available to use. + return True + + +def format_command_result( + command_args, # type: List[str] + command_output, # type: str +): + # type: (...) -> str + """ + Format command information for logging. + """ + command_desc = format_command_args(command_args) + text = 'Command arguments: {}\n'.format(command_desc) + + if not command_output: + text += 'Command output: None' + elif logger.getEffectiveLevel() > logging.DEBUG: + text += 'Command output: [use --verbose to show]' + else: + if not command_output.endswith('\n'): + command_output += '\n' + text += 'Command output:\n{}{}'.format(command_output, LOG_DIVIDER) + + return text + + +def get_legacy_build_wheel_path( + names, # type: List[str] + temp_dir, # type: str + req, # type: InstallRequirement + command_args, # type: List[str] + command_output, # type: str +): + # type: (...) -> Optional[str] + """ + Return the path to the wheel in the temporary build directory. + """ + # Sort for determinism. + names = sorted(names) + if not names: + msg = ( + 'Legacy build of wheel for {!r} created no files.\n' + ).format(req.name) + msg += format_command_result(command_args, command_output) + logger.warning(msg) + return None + + if len(names) > 1: + msg = ( + 'Legacy build of wheel for {!r} created more than one file.\n' + 'Filenames (choosing first): {}\n' + ).format(req.name, names) + msg += format_command_result(command_args, command_output) + logger.warning(msg) + + return os.path.join(temp_dir, names[0]) + + +class WheelBuilder(object): + """Build wheels from a RequirementSet.""" + + def __init__( + self, + finder, # type: PackageFinder + preparer, # type: RequirementPreparer + wheel_cache, # type: WheelCache + build_options=None, # type: Optional[List[str]] + global_options=None, # type: Optional[List[str]] + no_clean=False # type: bool + ): + # type: (...) -> None + self.finder = finder + self.preparer = preparer + self.wheel_cache = wheel_cache + + self._wheel_dir = preparer.wheel_download_dir + + self.build_options = build_options or [] + self.global_options = global_options or [] + self.no_clean = no_clean + + def _build_one(self, req, output_dir, python_tag=None): + """Build one wheel. + + :return: The filename of the built wheel, or None if the build failed. + """ + # Install build deps into temporary directory (PEP 518) + with req.build_env: + return self._build_one_inside_env(req, output_dir, + python_tag=python_tag) + + def _build_one_inside_env(self, req, output_dir, python_tag=None): + with TempDirectory(kind="wheel") as temp_dir: + if req.use_pep517: + builder = self._build_one_pep517 + else: + builder = self._build_one_legacy + wheel_path = builder(req, temp_dir.path, python_tag=python_tag) + if wheel_path is not None: + wheel_name = os.path.basename(wheel_path) + dest_path = os.path.join(output_dir, wheel_name) + try: + shutil.move(wheel_path, dest_path) + logger.info('Stored in directory: %s', output_dir) + return dest_path + except Exception: + pass + # Ignore return, we can't do anything else useful. + self._clean_one(req) + return None + + def _base_setup_args(self, req): + # NOTE: Eventually, we'd want to also -S to the flags here, when we're + # isolating. Currently, it breaks Python in virtualenvs, because it + # relies on site.py to find parts of the standard library outside the + # virtualenv. + return [ + sys.executable, '-u', '-c', + SETUPTOOLS_SHIM % req.setup_py + ] + list(self.global_options) + + def _build_one_pep517(self, req, tempd, python_tag=None): + """Build one InstallRequirement using the PEP 517 build process. + + Returns path to wheel if successfully built. Otherwise, returns None. + """ + assert req.metadata_directory is not None + if self.build_options: + # PEP 517 does not support --build-options + logger.error('Cannot build wheel for %s using PEP 517 when ' + '--build-options is present' % (req.name,)) + return None + try: + req.spin_message = 'Building wheel for %s (PEP 517)' % (req.name,) + logger.debug('Destination directory: %s', tempd) + wheel_name = req.pep517_backend.build_wheel( + tempd, + metadata_directory=req.metadata_directory + ) + if python_tag: + # General PEP 517 backends don't necessarily support + # a "--python-tag" option, so we rename the wheel + # file directly. + new_name = replace_python_tag(wheel_name, python_tag) + os.rename( + os.path.join(tempd, wheel_name), + os.path.join(tempd, new_name) + ) + # Reassign to simplify the return at the end of function + wheel_name = new_name + except Exception: + logger.error('Failed building wheel for %s', req.name) + return None + return os.path.join(tempd, wheel_name) + + def _build_one_legacy(self, req, tempd, python_tag=None): + """Build one InstallRequirement using the "legacy" build process. + + Returns path to wheel if successfully built. Otherwise, returns None. + """ + base_args = self._base_setup_args(req) + + spin_message = 'Building wheel for %s (setup.py)' % (req.name,) + with open_spinner(spin_message) as spinner: + logger.debug('Destination directory: %s', tempd) + wheel_args = base_args + ['bdist_wheel', '-d', tempd] \ + + self.build_options + + if python_tag is not None: + wheel_args += ["--python-tag", python_tag] + + try: + output = call_subprocess(wheel_args, cwd=req.setup_py_dir, + spinner=spinner) + except Exception: + spinner.finish("error") + logger.error('Failed building wheel for %s', req.name) + return None + names = os.listdir(tempd) + wheel_path = get_legacy_build_wheel_path( + names=names, + temp_dir=tempd, + req=req, + command_args=wheel_args, + command_output=output, + ) + return wheel_path + + def _clean_one(self, req): + base_args = self._base_setup_args(req) + + logger.info('Running setup.py clean for %s', req.name) + clean_args = base_args + ['clean', '--all'] + try: + call_subprocess(clean_args, cwd=req.source_dir) + return True + except Exception: + logger.error('Failed cleaning build dir for %s', req.name) + return False + + def build( + self, + requirements, # type: Iterable[InstallRequirement] + session, # type: PipSession + autobuilding=False # type: bool + ): + # type: (...) -> List[InstallRequirement] + """Build wheels. + + :param unpack: If True, replace the sdist we built from with the + newly built wheel, in preparation for installation. + :return: True if all the wheels built correctly. + """ + buildset = [] + format_control = self.finder.format_control + # Whether a cache directory is available for autobuilding=True. + cache_available = bool(self._wheel_dir or self.wheel_cache.cache_dir) + + for req in requirements: + ephem_cache = should_use_ephemeral_cache( + req, format_control=format_control, autobuilding=autobuilding, + cache_available=cache_available, + ) + if ephem_cache is None: + continue + + buildset.append((req, ephem_cache)) + + if not buildset: + return [] + + # Is any wheel build not using the ephemeral cache? + if any(not ephem_cache for _, ephem_cache in buildset): + have_directory_for_build = self._wheel_dir or ( + autobuilding and self.wheel_cache.cache_dir + ) + assert have_directory_for_build + + # TODO by @pradyunsg + # Should break up this method into 2 separate methods. + + # Build the wheels. + logger.info( + 'Building wheels for collected packages: %s', + ', '.join([req.name for (req, _) in buildset]), + ) + _cache = self.wheel_cache # shorter name + with indent_log(): + build_success, build_failure = [], [] + for req, ephem in buildset: + python_tag = None + if autobuilding: + python_tag = pep425tags.implementation_tag + if ephem: + output_dir = _cache.get_ephem_path_for_link(req.link) + else: + output_dir = _cache.get_path_for_link(req.link) + try: + ensure_dir(output_dir) + except OSError as e: + logger.warning("Building wheel for %s failed: %s", + req.name, e) + build_failure.append(req) + continue + else: + output_dir = self._wheel_dir + wheel_file = self._build_one( + req, output_dir, + python_tag=python_tag, + ) + if wheel_file: + build_success.append(req) + if autobuilding: + # XXX: This is mildly duplicative with prepare_files, + # but not close enough to pull out to a single common + # method. + # The code below assumes temporary source dirs - + # prevent it doing bad things. + if req.source_dir and not os.path.exists(os.path.join( + req.source_dir, PIP_DELETE_MARKER_FILENAME)): + raise AssertionError( + "bad source dir - missing marker") + # Delete the source we built the wheel from + req.remove_temporary_source() + # set the build directory again - name is known from + # the work prepare_files did. + req.source_dir = req.build_location( + self.preparer.build_dir + ) + # Update the link for this. + req.link = Link(path_to_url(wheel_file)) + assert req.link.is_wheel + # extract the wheel into the dir + unpack_url( + req.link, req.source_dir, None, False, + session=session, + ) + else: + build_failure.append(req) + + # notify success/failure + if build_success: + logger.info( + 'Successfully built %s', + ' '.join([req.name for req in build_success]), + ) + if build_failure: + logger.info( + 'Failed to build %s', + ' '.join([req.name for req in build_failure]), + ) + # Return a list of requirements that failed to build + return build_failure diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/__init__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/__init__.py new file mode 100644 index 00000000..c1d9508d --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/__init__.py @@ -0,0 +1,109 @@ +""" +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("colorama") + vendored("distlib") + vendored("distro") + vendored("html5lib") + vendored("lockfile") + vendored("six") + vendored("six.moves") + vendored("six.moves.urllib") + vendored("six.moves.urllib.parse") + vendored("packaging") + vendored("packaging.version") + vendored("packaging.specifiers") + vendored("pep517") + vendored("pkg_resources") + vendored("progress") + vendored("pytoml") + vendored("retrying") + 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("urllib3") diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cda6f6ecb09936085b094a0a2ab4a4cce2a5836f GIT binary patch literal 2809 zcmbuA&u`pB6vxLu*52J_+q6x8q|oC2Zd&T34WSjP5Q3zlQq=<p6;?%-*E7j_GxoSM z<Ir`J)4~yne}fBu(1;tSUO8~!#2b6EL{!-z*p=rqe)IM7%)I9}tG!<L#V_Hv;VFcE zLkE5?^gn@1{9z%4Q6FIo+tkYJzHRBgL!G`;)9trvdVLSOeV?>O?NO(0yX4r!nppig z+```XsNW<0PZs~3I3uSXKThVbKd~nk@kZ@)NVnL*&JXq@M0&VAu`JDwVb>6R*7iBW zp5bxB6NdAKCk;;-o;F-CJY#s)@SNd!!$rdjhVK}@Yk1M{lHq%Xf#GGtD~4AMuNhu9 zykU6L@Rs3{;cde^hVL8RH4F`x4Oa~B8QwQsHT=ME&G19R2b$RV5-mNfe(e@%5k@;C z$BYN52sQ!DU7BwNm=rKV@+2i9V4DGm1IdDd6VS*YCj@I*W9~NUfaQT;8IeOhL|#e4 z^O%O+?&Fk#moyhCCdS$H&0@$(ih}_O5>^X1!9kj3rHluZ1aXc7BVjomgRWZ^IF=xS z>Ff|LQg|%b<SYxyLP$>HEbP9~>AqyC6Y)SWT1pb7S;4q`_Ber@uYdY0=)v_FTw(_r zY>kk#cG1M%v&QG8y^EwXLDHQdY-8s~*Fw)xzThI++V1j)7SjK3Q2x=^NO~iG7cDll z9-&<evfah4iT%Rfv-cd?sTKAj+I9A|69*!JAQIlQ%74AG7rwr?$MxJ`)-4K~OqCVB zsSRD_L2R;Es&*9RaYmv@btAJP==)og4Pq*kM_HnI>`A@Y4bB-?ju;E&XAGAR1Lbj1 z&{Qg45E)C!mt56t#<XMAYZ8Fq`aQ}W#DXYyNMigm;tMdlKUbG!RxCr<?+(h8;=3y^ zhXb~9A8S*6nT%S73FfJcqOcgN_P*PTdb8)DLDrmYTj#Cg9nYS(<}H2}Y*p)a_}!4I zxg<`81kyorMpZjul<_!=m5);)X*y7z?r^5sLz&SvZE3^Ow>KfpV7=+9ssl}!u^l3+ z`Dr&SIR$NX_Meuph&imYQ^d)3yal;iot$<<lVa7v-zHIzB;8CQ_xfHzinV(WRIk|H ziZ~Ih<OytZyWngKZna=6Sq7`%MDj8C*1eY{5mHpA_j@6Em5@T}Os-B&jm-;T35#!; z%u-gX8;1^s5$qc!N#pg};X2soypdJ6{*9_&j8>OtDkX<)zI~)5%q4|P1$TFj))r$1 z6-fwM%~;EUeGCqF38AA{R99vxC@GkbvozE2EFbP?UlTHp2^6*nr-_^uwCMvni`V{z zW7v=gN<%V?hA?0K5my`k>9J536iPCv?y=69>iP^f5VI`K<1NBxWrA@qYZKucDIn`f zb?NZ8l`^H(((Li@Ko-yVCbX+?e_A(>a5<gZjD#}|;nS|J9^p<$YF6lLS2E2AD`)0i zt%Fjg{HC6*E}c+*6k(P$=fY+wOAcoQx1ppeS04__X99|x94ea$KBw)S^^H%zdba*_ zV_muRh!00))4?em+i)1bX`?GDc<ns@d}HHjwEpCax=t&1#L~Pz4-PbEwA=Qh<}~@( ihdaTcaiP+;E%>)wZ^3I{@SJN-eXni*@89@+%g0}}UU8QI literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/__pycache__/appdirs.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/__pycache__/appdirs.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..91b5a6cace8d465f3d5b4396665f46febdcad269 GIT binary patch literal 20609 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/__pycache__/distro.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/__pycache__/distro.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a1197468479232641b2232ff7a17fac883cc4785 GIT binary patch literal 36307 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/__pycache__/ipaddress.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/__pycache__/ipaddress.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4829ec4b6f0ab982bb69f27bfb83f42a961797d5 GIT binary patch literal 66498 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 TtM3^4NaDoct3%&0`1t<^2lXi< literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/__pycache__/pyparsing.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/__pycache__/pyparsing.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ad4fdedb3900399afaec63a9a66f50dd240c8371 GIT binary patch literal 222459 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%0ABk3LR-BIXo)N847p& zA<JlKt0z1;6e$Ju1fSbQFhKA}c(|<;=|D;@SGr4|$MM85H#U>m)ZYUwlIZl*op>LT zR3fzSD&zVz9#Kybdx7A$1P1_e<2oSn)RXC_a2)#q*8_?Rw1<C)qeZP+`RYW}h@AiB z#&{=p`t0R1OsJmEqzSODh^S_Q*#ti&c#i-p5uv&p;%^YkTTVY(Pf=GA^fQ(L0-K<N zexD;Yli2SOh;p2>iA^Jz&m7&sM^be1uv5VzOGND<xR78G0k>||EP_)BDDtGf!jk1E zscHz$B$!KZ0l@--`2^<?@DN(fAec_T`KxLmpwy8%i{KoBHyCLxv4sTh()l9-kwZJ5 zexeh19x;w(+9(dD6A{%yP)DE$RuilwC}jj0VpkJn>FgwS8Nu}gy9jIo5tLg)Y#qT> z1lJMlAowgmE}7}->+IOkWvzyu!Q434wXACw&rN)fOFOgTF*c(Ow}_)W(}{=lvC5ND zIjn>2jC=#ZR)Q@Ag9KTE%L$h9xprdf3Hk{xqTg;}7Qy9ot|1tpvx{IAK`%iMK_9_J zf}I3Q2)YR_B3Mdrl;AFcETfvnOs=5wT7qQ+R}f5RIc_6%DZwQKe?V{z0Yw4T7a76D zbbg%RE;{!S+e^U3zurNRNu9TikSoLSmlz|K37bskWMcPyz992Anb^skPG)jE=xiIS zM|n}C&^Cs12SIZsa&xb(T#rSoFpjrDPLdNC;w!;QZWzrmw2hIWSRSkJP<d*Mwk@~j zvX$yG(*9XyXMkWg!JiS_Lcob(0E~k(XFyV&>KQL&8|-Vw`w2)Wa3h39j;Mk;{7J@Q zF%ui&Rk0W(qU09_k07KEsQpaHHc)8alqbw+b-c8^G+J6hgY*2*FcPf7<EvG`(M3PH zD&tjvc$zujCq5+(JZ7AlKt3uFGcWI$v57IGJc)3fw}~<H0&{~|Voos2@!1=3KU2$N zMx~K7%8j^uPERffgt|}djm*I;y4<WZ&rU>3W9D-6RI|cdf+x>0#{$Ojon&5OE;Y-{ z$>zt*YIB@99%-FwZZ+4KSD6<hycFRnbA?%No^4Jur<!Fj_O!^{X|6-e4dz61v3Z6$ z&S*?dNS<YkF{T=47)ElnaZd7FqtuwH72yFw)iw2QQPFi{%t+zMariVQ6G<4Ms+v|l zsoW@EV#F%XrbL<%o3a<uB#9}|&t>8}H8!QAayQB`mV(G-ZM3{(O1vsQF<KQ*#S_3- zFOAWZf!u<!iQ}uzt6Euu($%%1VKq{g5{{a2nyM;~naEQ$egR`O@x(+UR$6An@r{+n L4YZLel-U0Q0{LCR literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/__pycache__/retrying.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/__pycache__/retrying.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7b3b1685159612a1d39201a89b05a071ac799d35 GIT binary patch literal 8042 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/__pycache__/six.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/__pycache__/six.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..aa2039aa2e0ca945433db140986a7b0df1b1c981 GIT binary patch literal 26460 zcmc(H3wT_|b>8mXCl(73BEgqLQL8sWkxPjbMTsIQK1EU@A&8(vX(@TN*tq}}SnL9G z?~=d<lw^apXj@ij%Xa*V?YK^Aw~pPkNs~5@HnrO{wc|8>_a<r6Bz7y;O`AT_R!!^v z|CxL5J^)gd-0$n|ckewjcOGZXoH=vm%$d8ZuP^i5SM$$*<Hbnik0Ncq#{nP2<@{NH zB%&gPh>9w!8lABUR+Mn88Y{%)885`;nJ6UWnJgsbnJT1IypUFjLXVxC%BbkZh)Pad zh2AifLMUrOD*0Y(W8`X7y*iyJ^x0Ycal3y!T3BTd;C_R>8uvAJe__yGTUdu2>kAud zm+g%vg?;0=#WZ$m>Lx&I>`h45FX?Wc+N^q(qWatR0Lp%CDT;ijjz?5h^<9prKKquX zSRuF2Z{KR?mLf~hXyja^mWxO1+om&DqdFUn@Gp6<GVimITJ{+e{s_b8b83|uxEv|m zu5M7P@w@|NuTg_2dr->06XCUL9m4DEJ5kqN2(MQg5Z(Z6??%iP#B5YIBIZU(F@*3< zY7@enq=c>ZR{I{*wGHt%tIdetY;Qrn?e>tm1^=A7btw+`Hg&tYL*1!vTS_2w7ecqI zyVYG1+M<T=ZmZfNp?eV8wiH9E?UE<2woCjDbua$+sT~s9DWM%|r-XK?`_*pA^MI7K zM?E0%52_)%@2aKmQV-QEwO2hXxa>ok{gV2CdPE&mha~n^b*sur>|u3S9TDiLI_g8m z)G;60(^12tg5z=ZsML2t+I3Q$K<F;CX=us9^D*_fJWr|9@*GxAs1cNZmwHm2QBMjq zs?MsX1bSMXQ_l$WtSYGU0zIdmSML(2s9sPdfyPu>DS>P?t|kPUR24NP(6p+m8G&l5 zu4V<AQ*%lS<S567T;=*uLp9U|d3#aK3!V$ADbF8Mi}JjrUR0MP#Y^gCiFvnrk6MzL z%j&)AeFD9ruBi75^a1rj^{PN0Qm?5W7wD?`u=<EVud9!$j|uc~^%Lq70)0|_N_|?O z�eNpB3nH>hpfdKc&8){({7PQT?>~8G-(y`jTJAm+gDhUs@kge_7(cg3!+*^i>Ic z4WYlXK4R_?^K<I2s=p@C&#PZhe_fzoRKKMD#!_tJU?Gn&e6#wS)7I6vuGx9?)Gw=F zS+XXgdm@GW{9ZeMH1hn;!Vddhd%L}3>OOnNQVip8r@h0zYl(SWd)w45dx!c}zFi+# zf=s#^pL5Se&hJ2J+l#n>%dg>0v~a(qy<hz;rot%t+v?Xbihf;2(Qb@_zoWh`Z5mSF z2%*0lLVquWej|kbeh7U%gnl!G{y_+RGlUMQulaR+D};V4guWd@zfDN}miles_J0`0 z|4s<~qY(PXA@ol|=%0o){<9GJ=OOejLg-%_XkugGf%#4L1EBVxP<wZa+E){Ee<<{P zz}^jdlHR*PQ*gjiRC(%m*(0Fl@2TGhHGf~Ixd+tzSL$C2PYkI)2%&!i{J<v@vBHC> z?ZL3NJ#Dom=SHNq2kkw6ZF^ALA4+Y1r2g2i?K|qbsO`H_+e4`B-=dCx2i_V|Z-mhI zLg?S4Ui0?*A@m<Y=ug6Q|1pIAQwaTO2>s^}`Y$2$Uqk4>h0vdc(0>o1{}Dp}Glbp@ zq5l;^e;z{rJB0pE2>l>{Fo#9j;Ak6cwZXAAI3BbYc@u4LvJFnP!Ra=*r>&fffhTS+ z>_s2$4g2t+wmwYH4N4#GwIA~P@FDvi)Z5Em#50Sl&-5gqeq5_AbIxBS{rRvx1b9Gw z4fh+^r+BXJ2(9S|4F;i!cwrxK+85&Va0gCb5}fwg5BoShEI6(8aaxC3)`vK4Kxm`j zv{7){FIe1YWZ6WtZ~*lj2<zG3R!`5|fYfuq-tX75U+THZuV)iVzB#OCGeWmWJ-7IJ zz#}rk9`Pk8sg)C{7FD+bz74v?K|F8AbqC->cJ^wI{xyW|EF8xDuEG)A?=Bq0eM{jO z?n8w~ao<`vUb_R&dnDC1Nwr;4<t5b)Np)}G_(Iw~Q8)?h=Qe0Rk3sv%1lkXB--l}_ zYCQ@4$AbQIvTy?FA1^%Kk$#`imXLNAuKSVxaX)<)rA;DkH?9W|e+q3rT^L4a53UCh z^Mrj%VWf5dp@)Jrc<#mZFy1odK3tOWI5}oNt^-291EM935F7h;`xN3IA>Hi6)RXpM zNdGee9RV~d&{05V1v&=kDS;jZ^t3?70i6SFd-Y=|i4;GC`k%p*R6YXuSv*PQV}J{I zlFG*cpGW@Z0G~h!&-?I6!0+<m#{d^=XOZG@TtTVCHz@Tq;Gk5txV_XT+DaX1EA>g1 zigpvjGt%zcZDKg;!^H5c51$A8l)%}mSv`i()40w7_ZRSF3C{v9*<*#W=<iUDY&B&g zzOWRX8ZS(oS7^(milWX6psB*NT`kN=+FGGz*QV-)I_|TDS>!oim=n!D1Fb(Z9Yu|7 z`*Q`2`||~-Mp^JK2^A5VLWo!d*pvVpY|4c)Fq%M^7?*)z1y6;`20U%Yrd&Hd)vzxt zSw1erqCQoRM+$YpWV|qk)M3q_7HgXDslu8j3FFC<&!g0fcoL&`0iMTm8dnkU0yv{j z=k2C_|J08mu8KMr@q8WE46fScXyH=rMnE6MRmU}pm_?gu=D4~Lip0XT&c~qt^yw*i zulc@4y(ptvDLy_OM~YV^g(E3QHy2j}_`DcmazVwgCV0tyNyVnq$U(`#R?H*SOI>CD z#B>BH{@8x0@G?>?gsE<~F9C)|>f;#=@%#jG^y|%_^}BJsXWT+Mwto?=TdE}yw^Ud{ znE78sjhFF!3D?Vj-;3ubaq<0Sq<<ftpTfoX_aXcWo}b3W=M{vn;Q4-BA3)ysPeckI zu<t2+(0+9(GW8+Eeh|7xY`O>7d}<<MzgGNlwCyTF-<>~Tf0*!66w>+L=d8j<3a?{D z_&PZE9<>Q{?$=+nUxy}nj}IfQ{gM5V5wvXXtB~9uIsZEIPkq$hMmnq5Xk^Q0qLE1R zfv4O`wc=K6CpTW#xr-WbZ6a5$D?8^-mfW0f)SO(smK#}cC-K;sE7eqP*Be|*4@JFI zr7@>oZMb%^GBaD(?r`(&!x$u`nF?~)uB{#9**E4#9h{Xy@^w9Npqaccf8Wmhy>D13 z>5Uj~aooK4ROv$L4WJfz;}+b?xWXTk9>nDg;$}w*&=(38MyLg9#@MEzxEFn<%*_1p z$t*{3IV{{H8P+MlI*nVE_3~#$zRc#t9lJWNGl-DeoB18?%<PWY%Ix;BMy0B@-#a%s zR=;<rVw7CP3pN%=dWTb)&(AJ+sbaBe*NVjhD8XUXk!Z8$nY<r64D`~)Vy!e|7mHq| zSe&V=MwM{3Se$E=s^*RE3+iuSqO*+a!EGNdDLQRQ_>D&pQI@&@@EJCl?O2R1MvAa# zfHqb$cSvDHT`xCg?3!D0E9e`yo-5_X8?`b+`C-riZ9tM@ame!GeBs3q?7{@iC@IBs zG^Ci8T6!(um5IL^Z`{bD*dW~Kl(iVy7y(An=AM(nHaSCyZ8>eb4P7G#x|6man=6fj zktCv8a$GdP%@4&$Kf`mNU(8u>yp$=#VLy_R-8lCL=}o#3Vot7zSm~&~5zm!*Z4=%s z=QR}v&&5>&tw;iuQ>Es@QQIl&x9kaNH|VT4qTC@%_u?UNH@e`IO0D7+i_aiMz)Wje zHG!+l`*Og<Yz&J#!VHITTZ~LamLiv8Zj@{QvO|nUBMYnD*kW`l&KQbAs5yi2h?|(s zXkW=Oip?SiRCE~aOBc0`VSd5(QjQJAakXIVrIcM|$m=N<%jg>iUD1CC5tT8BgkxIQ z^-x?|=*8+|Q=a9{dPx-3sJh*)1=mg3XzY374x1cCPCD8jwPLGrPez-oI~p!YhldiH zDfKGe26$s%={tD~$FPB9_}qjSPveqaPh07jW=uz~3qLSP9=EX9)2~FvA!StTau4JT zdR_WHsZw|*UWvpbg(OJT<Mp1dU$E6_8P&t(pe#PwMZBDyxVaH@2v+sz5NI3Gh#S*e z7Go+hoz}U<=%v_V3}ZH4OD<xZ6ywV0n1q*b8nd?6ccBPrsTUi0c9$0eJNr~Ny%MWe zl^3ho7r|sXrWINU1xTL?E{CB=bRZfBm2p|k!8X)eoVB7PWpNzLQ$XHuh$X{E58(ys z6pn7uUn;&CuQaZJk2|aLxhotyq!=$@<l6xFjBJ5!q?rYl25rF9!q5Su#x$$(Qs55Z z(ai`2{1+EKP5C0%OI#>b8_Og_uP`A~7K;sJb~s0n5i`+jw7I^MM1Cz0lo%ta6**B_ zeJ_ge`uqV>wyV`*vBjN17YUKru@ktQByMS|zXu%3xDE~_7xCw8!7boW;ZM$kY0iU2 zHbJ{+@n*v7l>uaUGbA*p3Kq!AA-TF)6NHaZQnaz5z8mQ@`PdA%93cw$c3~E@tCRI$ zh4)1+Sg$$QhS74C3s5`4JUQGr&revFAj(V&$rDF0qwI+=4vd%>7Br+M!f7ZdW|YMc z%Ly>k^BHEDihS6bi;tS|0fdb}_N@H9dOH%fI!PwqH#7UH6~`^tXJ)Z9Lt!jA8EM|# z*$Pzw@8tJY>*Z3_IRGHYgIVbYa3ADDkqjmh((y^=B^c#&)hIJDi+c~NBTtYO2cu0h z37D<~;iSrIaNr(f(z|)PkGF7C2K^&^$G%*|<?~%Oo=!^tmJt{JI3D?P$dLixspLwM zQ6wT~#+27DW9CrM;Nh|~110boa-Kq<oAV$PPb?RTiwO~v2Nxk0AujhpTqbJq#rUPf zVgg*6sBJJp(|=#Ud%WeFK#V30|2~K+4gYc+iRhAEA4;}nWG@9tN{Qj6AWa2GGlrez zr5QyiAY~`3e+Z>I6t^uYn?&!Wqe+YMmT)`}DIs~@Vic@HX@TIq6omxjq#j$cj1Z2u zgs|R*l%_dG!SIr31ys!z0~m#p0_t<Pj2;9r=L@+ujC|QVWDP?TxVDtL4ttT*9}Fsi zSX-?b)4^Qigo8}N={aPsD1;d&T`F2;(oHBc=_aua)uS?4P^DC_$|6Nt^{IY5d;Be{ zjK5{oYxfqiDh(11dV|H$%KT|e4kIOZ(kPy`ZhkwH!|zaT1}}26c#|_~B~{M459g@g zbMQK{{HeH3&S{JpnmYN6lyG*k;^agNVy3E19UIAWBgaN|-Mce4Ua2V*$<<S}UILiU zopf`~WW7;UxiK3nt{GHb8LQe-+QkYG3D#Ws-IA|Vt>)}`2o&na7qGU1%8s?!xSwv9 zWbBablu<`WS87LQDNw;sFJj?jn8q?HL*I0*ezE3Hj-gaqg;x7<vS{h%9<uk(vUHIR z)Y5KViNY<eCOZ5veFE2UTp~~AbBh*Mwi}@Pkf%A{M^$uvWHGiL3!b^;xriWa4SUf% zWG0t9MqC^1QiiYBGv27m63X$?0oa8yW<jo7Ovn8kYd5Ha@pCJq-b&s<STd{-mMhT? zjDfYRZLDE^2=6+u^|gIwT#guZT7%dx;C-MdT?4IF;^9#JCr)99bE-46oW`hKM0W>W z9u@Kp#f+RIE?%5$zYHUCtdG$z5hF7LWhl2+#;Pqt2eHC6300wmjF1c4<)h#OH;Prq zR%2RqErnT`2Icoe%?iZt^yaNHw#=}>@(-i1R(Esc*<gu?=8!48^yBt|tUJ73Gr-Lv z<T`}M(z`{>Uu8Ru(q};$_D7qyuFMu~dBUcW{$W$kNK;+#@nX<a3r*c@n(8mGAicQ) zxMaEUMaxYrS^B`DHI>AY&4TtHS+t5N#7i0b5HdqHt=FS$y@9tAxOppfMtiHgOvS0x z9Jf>}+oDh!JsAsVLsF=)ZQNky!cbF?iNfn;N}n0Nj!MM>6Ny?DiIfDX@W-Tf&2iM0 zJ){?Tl{6y@ihwe68z}-SEL&?eKPxhg0{V<t26C=$*xPcIaWMyQm9GL8fb^yOE>D*x zY+ocZ-#I&1vysZBc!rFhtOKs+(B}}jTH9p^;aR(!!}=7klcV4bEA<8NuKfMEEskwd zmfyeozM=3v%{d%9Vl7EcmK-Vs`f)TUP=?vK?vaJ=KrTV_ci46ji>c-<E3#TEZ3p4P zfzB1M8Bt=`GlrgreQFKYYqpu43<>8N6>Te_U#r|42oug&wxVs~ty+-gkfDvxBmN>o z<LLX9#ea~N>!iMJ4T5sY=wU|*9pjDDf}o&>2|dXh$CH;~QBJ*~!N)BIZ7E(fyL}Ot zaA!Idx6*O^W0^!cneI>bK&@qpGOqB)74AV?T_(js49lmuA``|iX^0kk(zR!t=FK$q z$P~_57?ZE)^a1;<V3Uv*K7lG$MENXUe24Xuh-v7CnlWBac@%4e+Qi8xJgZXo(qSk$ zUa7(w=Jix?ckA^kCOg_Dp%cIYR`K8Vn&&vyAhwtFV@)Vgsm(TAw5jN4gUzN#moCDX z#Q0>ThJtG%V_;e+&3f?)?@5rpd{KE;-6?Q^4Y(mIZ2)6l4`S*Kmj$Gu$jm^?al8yv zq*+}r+m7QUbg4FBd&zn8?9+CeL_lN23Rta-c`<;r5%D#js!_H%v%^3sjqP<NtM)vs zrFGXXBw&WMQMkl;35oR5PdT<eS}CKA<$AS>K}|KuM4y84<Ykz^5Y&q`D{LX}y|_Uj z0!^gJGO86S*K6aIiP@4yPA_{zLL(-WD%WQhv^~Lw&o01FHUYEP*i3Pv*6`vJfSL^E z8SE>n#>~t@5p%7L)@3_F{gbXci!oK7uGmv0bg%(Ilcv1Nw_au2k~&`Uh~#NXte?v9 z`X=3(Y7r`^*!DdXF$2pqLJP_scbf7#AHMFD)PDOiC(fQeWm?yi7kU2$0z|P|K|U|V z0I`$UydS&Do+(wT#hD6B++!ujZuUz={`ASy#||@W66Bd6&jj8;TMlsAM3{tGPD+GH zV)955Z?G-X46KP2VCXj2wCXw?Mw+B1bC}dy-&R1aUJG9|*R{%k@N5-hGMHl8GkEPS zcI|n$y~Sr4Zf`LYc>N^AiL+-%Mr{o(-X|b93jwe1$nle{cizCLNanVfRC%OQo~~jn z&6+3J-fq}l;z@a=v^}dikm3ZqtWz&f+pb@Dc2q*9UYHkrMojw8lshe>-%FkKfqp** zHilBQKH(*g%Ci~7=l%HAK|07C+mFjU3fNB{ywA729}M!qYR+-0ggDtzKP0pZ(&RhR z1hGX&h~w9nHKg)u4ASH~()0#(x|Mk^cD6F#3}W((2?9meo%Uk5wY^5n4MA>*18P&Q z<Mp1M4g<~LJqBU;KFFeK%1fM`#-mjx;{rS}@~d@So~+l=S03nlgyAD5+ze8o<hE2n zEb`9G)N4K+Brn6=l;}tm=5?pr`XuX4w|dP(Ncf>RUdMn>;vJsNAT}?tLC+RvAm%Z8 z$LjOUciMyw*XNr-ihNs&bwSDQbVvUH_x4`&vJG7YGecW~<ZZ4oOYnS0q@Tpds4xS} z<aOPh!9)fbB;+McVa>jdvc1)Q9lAbNcLVX)7HIkj@@;Wm-~3Ef&z1uT*<*r~k^Y-N zN(Kr2VY%A0`I*zF&Ws!}gEP$GCrMna)OPLkl6c4rQ#3#mb{!Zc^39|{-%Ch%WetZm zfKJ<rXg4>XHoK5!v5(S<9rWFEU418qecsSE($O*4>|9aTTS;&G7BD*uO-wXl>}xXY z^^UO9&&Y0(mj+JK4PNgkW*s+(mbl`a<Mjkk)$2i8Omez}nHb<yy;76>4l{ZgL^W!r zECc)TqCFI6s}1N;jhfLVvOZv<2ZE4WFODs^&^%a`T@yt(BgH@#>jf_@unPow1Zr?h zn*_4&;PoNKDH26miM(D3)@&DMV?O`{OEb`+<c%rSWP)l0GtmXRx!QC+FlddCjyN+U z{@?I|89MKP7bN4`;RPzg)iz#W7|Pq3Q^z=@rAN`;on8;;L=!g%h0FyV&(`aslW;<i z*sj5!7eu;<wnCgq_qK?3%e4lOw$X8p+kEKl4<SG6+acWdK&Y472*<FHt3GSjn*D}P z@_xZyzZe9t8O66$YQ@1J3~^D*)%8wf6QQ~@h>=AY)cSe2jCiRtriotv6H?4kEH9y` zYi~V!=cqkif*vN_aRN&M*q^;Md~pUk0uy#b8Z~yrEErHk7U29skfc|XCcltXEMx@x z%@^xhou1I%EnN}ku!#3-KVz4wGv0<nV~(p!Wf#R%%7+^6WKi%Rvo4EWE0r&c-WU{f zw8CXVdpT=a&hqGWQqc1FUM3H4$TBb*gnBsz2Z79^tz@f?l**HKTSWg;H8I=<iC426 zA$N<6z34%BRp^S1?RyHma@8)?8na#x#+2Xr{g1*lw9pD?XGwa<xLMHHTV+J6DF58f z3L>WMxeG-`G}m@ao&k?F2RkHGFd8~ygS2mJz~!zz;G9{gUUqZuI~j2%@7o!2{TOaP z-!|kJ_EInzkI7Oe9CD^)FN-(jDil0ub<>irQX8*(8AKC6^5(j3O8O02+eONiqCra& z{kDjC`!$K#Qhl2H-vK>a+20OH*MNk-*+x=^y;Wye7>C7(EV`Q;yU5h4tGS_*QrCLZ zuDEs3i-xs>xE$J^+SMf*gy0vNR2Do$Qv$^Rr3H!u>JcabC?il3P_Ig<G`6L(st3we z#)A)mxO{ahTg{V4U=widTxpp)m7^SXU@r_D@@&VR!8Va2CeXk_*-F(l$I0OBiZk<G z$3TSP!c11z;IwO!HQZ@ON6Dtn5fYD9Np9G4t6n80#7%10O9(PvLhARhRFx{dbila! z>&PZ%GT0z#N^din$xb!5v%eE?2Yl<UHT4F&;@2`b(i{h;C1Z91Hez;Mhl2Hb-Zt>I zkvBm|HqlqoTh}7V@8S~cHH~+1V+j{)xaQktww)b2Xhnmc(252^v-?fQIC^OL?s^*! z!CkLZ%fZw)Lz{I=(H@4up6(iAEHpb|aC&1^T@>@u5H7IWU$DPVJjvV<OK$?)fy)hu z7F?bIu+Sgu#fxv)QS8!i>*9>rx>(4%;t{f+eq(T_7r(JnZ96z{m0H)fhvV<$h$Xdo z(;1t%m==xe`b=A!ngca7u~D8Bi|V%AothiYw*Vp2%3BG26E_;&73_QPqv8GsScRS& z-3{;6QkAs*PuX^|WW=(tUjer=`1ABfxf>&;(Yy#VD9WY(Cm>iyDX1Ho&Y6g&h7SmP zMOau+r=h1Cy@jgvG1yoUNL6NvET%w!r4+JKs$YyTVM;lLK6w!o<frpX>gW|<XL^M@ zQnc|e`Mb7saD*iZE+tlFnJ3*qNnPMhPmvbl5|ptU(ChwoBAgYvdOqYr?kBl2W-lA} zG`MNfy+(YzV#6U~WT6-?hZi%!oo3(?Hk9d5Go5@IUbl1D$m8yfP!5~c#Ul3<ZbsGE z71@O>USgWwf?ZwqX3xF}=%Vwp`oN6=%JE3^CV0|ROAvT%UNu2F80TZ9+JYB%7iQs{ z2#;D_r$d&$4YhO?4+E`V(8i$jNL1h3O^}f2qzv~>v27tG(KWVF8>=^Js=MSt?o0UZ zgbQeL-rQEpPS%33{P?_fEtXz`_g<`A?WT{nwk&f*Sd-b!y1lKQ`>)v=Zr+lGq&*<e zok)qteRy=WMibdBtwKBS4%vmq1lgJ7E;CqV$#)iwc?tFfR<3Zgz+T%~1auCG(e-TD ziaoQ&Z<r7lmLz7pr-gyu!)B3e{P7v0!9i`%AOi+SSb8_x^#E=`wYwP6lHoF&kXrdx zHD#6_{8-CDTwVJ@9j@kS><GyS3kL@Z6#PV%8r<mgj7?zN4e2eNM=A~t4q;)|m1erT zk!V*7w`N~ZSDx8c(5RT9t%1^1Y2|}>abHjpj4KQ`cOA$6Cta*5i^LHe+c(_J!WL@X zao~oskn<TjOcJ(|v|$f$m#}T)b{swMnvoaS>4Wz;1&|k?win=0;^9=KHGQ!SLn7y; znT9Ej1{h*Y9sq`KvogIGdAy`pSLnY2N9Ks$&s%4oV=EjLnq<e@syz5kt4yH0nd{al zJ9U!kv9=0n?s`XUOmM~Z))h*s(`^+VB{3f6?GfG%b=OasE*;8#p`<X~8ORIv$#v)| zefD&#x{jv3MbV`F^@`^EXWv=Tr1JHO=KJT~S<$5D^@`^EVykE`eW7AsB&T~BLWTvs z9>T&L&HMa4d!z7)T**<PlVQq?W_VKb!R%7f3;E`*>t!)DEYI}F^)hWiMcZ<cbqLNB z6}>{Ohu^w@^QQ9WuT@6K9w1UnU~;IE^LPdid}j?eQ?zx~w%>=jH)-swfTGJL#^~5w zi_-cr6xvY%D-nsjd`j0R@v>V+L>q2fagQTK(>ie28-U7!J@+Hf0Ni6du2WcTV$PH* zFz24JC!o6&*7$J}I$d&Mv2nZ`mL>Fh+tU3g*h+J+wD9dHE1W0I8Uw_IYYi5#SeJ=| zO?<d%J@;HQ{v3XV{zk1LiZ0HvlxA(nZ0I`@!=>766)R9^3@Z>!lSHpx0|gF#AwJ~_ zJ$(436u*Bpdj>rkgBcGGYiwE1rfFy2iCw4<w~E)J$kw3_EUSY)SHXlE)lVWlS`!;< zjC;{acW-Ctm^m-@{ExO(@-#9P{4PI9882Pl%pL|pIcy|g=C3xh+@%acA?1k<FRn7f z`O$?-6I3PZwNMY(hS%^3H+<0ID&H5&i<k5ScK4?*^4W#7#)2#I`4+bCsOr^z)ott> z_<=ox;`Ot<bxxo9G~&MaBi5S@>g5o5%NmDK<Cj`BdU1Q+E_e7m5=G&#y#Sh9aXx^q z;R8^)<YWN6Nv-J~eFwBuke|+li@4}fs_-5c&U^>HkroeX&`xZR!9NSjx_-KYwPJwn z?WjcWVAomhSQmLXPBewV*N8AxWVp!D=UdDI;@$HCniFEr;fa(6`@;Z$dla~DrAkXX z6VC!o@yr8OREWO|q1Yws#aJ!t$2<TBcX$tCI7fZ6LA<%?7$}7ESLP5WHt0$%<51ol zer#?g6?0}?%RM|<$vVYtIrzMkogz+F(a8`d60B^nO*KOwoM5#J?^>q9x>rAk)(pi9 zNmEcE<rjkpDaK1k-fk)-Sb6c6Nh8W7p1;e0Mx>KDkECss+qAJn#(_W~=oWX@pO&`e z+_C-iYa7}tZg{R<FaSN=ByFxEtt5hHD%O5&3Ei>W{v1omG`}p>u-C95SD)D;Q`fc} z;i8!cSEvXMh^+*4pkrArJX*L&34%jcoaApSWMw=hdx)xjC#V{ln1aOQ(n9=)sIx=P zqE`&B8iT}pFnUBkln#b6B*P-pD!;qqGlGkd`48Cp<bCM-6DSw9LHN75WybKwLCxW@ z3YWu$9L)<V%EO~e*83w@BFe&mxRD-uas-8kp3;{rm7ohbQqoLo@$3iE_2?IH;xX>V z;b1$gQkP;io`8(g;nsP<O{%mJ3dq$Xxp0<5a(x`B5|Zn3m@6T<K8{=&lS_XAaIe5I z=Nt2z79;$C#-$|kCMEAzn0F*H_my*SXV)GEYZe1Lg=Zh0=~`N4FQru9rL^Fh)_<~? z2HwOVeKn&0d@*$?F~7}CaRrHzbI)0qdM+gwd+-6TO*rcU!*dh@ZV|?29`dKFJVG!+ zLmbfN*5ADUES7mVtg_v47pitn$Q-We<j{9`%;0`GX0S8AJCCEku(o$veb^mb!aE8# z&g7iZoYg#uhlU{L3QjVD#81mR68q^ZktrV7=|Nl)T?T$xipdEsO6U`ck}WcoVk$Y+ zhZ3gJEDgw$vtq+g`?&3kc@W!o(0qq_^eNQtWw^t_sM-V$|H9|C0v6Fvkde}&DB^`V z1#?1}i|5*@(Zp5BE$J!5QQsJ!H5^LSMAs4deR3sT`Xi7?X*f6YpOv#Z@C9Ehv}-%v zC8a(J1nk+f%}u!HW*Ru4jME$x2RWRlFXaLxaZbFs3Abw|Y2Hz(VU$)>4mvnDHglNx z<)k(&{dLoCTZX)7=FMnsDDA~&>$65kgER`OcOi_BK+mwvJv6->lTGs;yM}_Wq_BrF zx;3}6#f9ueI5NScB#NG<My4HRkD+!s_f)Oa;9Vvg5c(;;=Fo&9I7gV2gC`n?Zt=S$ z9(yNZ^^;^)HX9e>QMiMg9k3DfByZdo`x&vH^H>z)R?CC{8|@`j6G{cLU<{XNR{H?7 zONC3&ucqY0kQ@-jsV~|iFgjxTK}?rqLp-MvOA(*F;={r=n5E$KG5IJCI>#{G8Ta~& zY~2Oiykt?Dr(Z+>J}oWs2>}?}CFTU>%|O#3r6MpiXN8NJYtNX;j5d9HzHHBOA(!va z2G}@W!i29xUWvY9jq^K%IN3>EK*mI<?4fFrkuoTG7>8=Z73)gm3M^q}P+q~{EaDO| z4eezPsl3ERU7CgOTCqrA7AF#6GWDY4u%@P=jaDXVHjcbCW-(R>_=#FWC5X~n*+_FN zg#FcACk40cv?ixE923{?Bdsp;_Fmpz;Z2w+))p&?WI(<f@3*i9_Ikt`h-=1#ttXih zxKg;}5YchW1g}KLEkiDagA))o=J*8GJL5R`yc7o=;>|n5y*5e_|I8K@y<AC7fyp7R zd>Q42KS2Q@XB%$8u3&q0g_s@p!!i|N?=NA#4$!<+bVyh=OQzuPaA+7+4vOcKm-Hx! za0SZh6>zX`*$gNt)=chtcp08+5La7Aj9!p&36YK14nmFXokok}#bR+UNor=^=FnTB zhMhFY6>=%b&Z`YYXxKn9IENS|W6fg0SmN#pcrHX%UqSytO?W>${sX+R_svPfR}tJF zVrDhB|1g+^wXAS7@q;K39^l+(Fa~AKDhvTvM8WF``{O|(!hXPM#h8ALC9T2|5Fa>! z*~NV60L`EsSF;+lQCcJIV(R6!urK|^L|DtNpq5BtT^b(_YU6Eo4~fi6))B1(-kd%u z2AU5XVcT-b#xWLd^T<>#hIAfGC|#4SQIGsOc<p6G(e#2d{btdGQG`j|^5y1HXfs%5 zU`pS%h|d^avgX&xfxUjwwi4h^$l1A_&^@A<@F8pYT?v6>26l0rNiqK{Cwwe(;`=b! z1IBbe)#F?46T|$Fgj20^drkI>L`K=AX>DUyPCoH~35**_UR>PnUm~$j0e6}5L|*F= z2D$bU_d}K_;{mJ~7gqFo>bf!k)gD?!LMnrop45pb%xhr>8pfoQI>w&jUKiB@&SYjr zqhP0K$H|w?vdy}Dh<8Xp%aq-cdwylY9DN-n9AS;@p@^03)1LqiZzdY<`1S|&G~kZG z$W%vgIS=9%sAYN`=qmOG4oiupYIX-_0%)F57pJ9{{C!$;%BA@mN9r~X*5tNsb+&E| zwwuSWa01J7OUFM`^(Z(kP#A*+&-UC4z5?+=Zu^0pvDC>is~4dDydcYrTn?!iVhR&2 z@onYpYAY{D*<O~|Xxd6MVJWZeRdYQL2f`G`lOOz$3~<lgeW!Cbg#>xU>!GK)v`LG0 z*xS}hJx`Y6(8j11TUU({)EJGl3PqOJXV+wh*yMhSJth-=FI7h9FqZxda;@A~&xC#D zTH{!$IGbHe^Ed_=_KKU(d&Az`i{4DqdIZfTQoGSj>9g_<VSQFck^fF+daL=1L0>x3 zlS1zQKmFIm0Ie>g+`<>w$Y`xJ*X%oA@7JGVKYW_Eu%Gx9l%3L%dJB6uX-a;}?#uYy z2Tq%0--&-fZ$G|FK@S0rZT-1x_TP^<)_$e4f9Ti|^5hTSPvM|jVSokW(VYH!i$T`v z02!t4w3C7XW;*Dz>?P^1u&ds(PkQ}6Au$$L7*L;Qhv1SQpGaeb-%bE71}=^eV-lNA z=}kCJ48?aUW}Hy~na@DT*HNGpBZO%*QNm&%BJ?}dHkHbk&tPo9(#Of+TQI(1yeR8q zOi}zmjDMKa!9FPu_6IUCFNHnT9=8krF5$7|NysF>i_g;EWtN{!3v){ayW|jRt_0_p z+60#D94I+XV%vZsal)%kB&1H=`gRtr()`i@w0msi%F)-Bo`4a@onNDjN=|xCNSm6^ z`k!bk?hG5<`Y=JRT&hvFVtvbkD`xcG=^&z9f}?uS%-Y>(u0hl<cgs+|quZ$8jN+0( zhpvICmOB$-vd6ZMnd+d*LX!+>FGC#j^9sA=UV2}(G&8132R=)tLBWyc_F4JX+=>lp ztx$q|m>PZ(j9_$&%+vfhkSv|e5r&`Qt1sY&>hB>elR#@Gxam4|T_r{$Thg+!g;9a} zgZ^ohBOXVXr=Xiyn)A5kf~M`Gbd?|c;0G@)3o}vhOGl~<{@^9^PXR^jz2jRQeu1c+ zDz_Bg4l^Q%X90je$(BvCmDhqlCLh@0m)FJ{_)Z(td(EDdRi%Cwke7x>v1p@a6-_q` zCNII^x{fi!4#k!xKU{%8HUR1UYUnQ#JdV#=-EWK-S+FGrflSs84u|5fL?3S0InXA~ zcvBcX-;bfp!6JwUG(-~N!*Hc}r_zLj(CI_ZjGinU(^V#k^RQ>3N7QI>Q!(ZvY;?Im zX9fp0uzqqKE=0VfIUX)w-1A~M^WpV90qn=C^^1m2`0YFM0TzB!OitOu1xB1brEJP4 z`R<7vK{jl4Bd{>OZSsX4`RI^%^@%^5sI^C#?VG%P3pa0b$Jre5ZEOFWkp50bA~BsU zPxL(|$^|9)PMFJ+^^-=owvrj&;^pbqFx?$tx|YN3@}%^L6z4<Zd6yAaA90uhlW>(L zo^#lP>2RIP_(2{w?>8`{i+JG$Nqz4*eK#u@B0@dG*t9TRLl-Y`Y7&PaaVFAq{Si+X zcwghlKFmJ!Rat|l?|vlp&_3g>YKx>}pC{g4f!|EvC+OY4WUW{tyS5`L#JMwnfI1y4 z^g-U}l%VN8;APFqm40jJ%VUgxl(*x&J;vMPxWQL!QsW>SCMiBKVj4L7oE$YzeA}Zu z4L_TjyOTpg9AIXE7}_fvsd9)L#?cwg9Z%y&BQ7gu0P%x7`W!hXb(kaS<P-WF(-n9- z&)QR1=({);s>@8uy;j+sl&wNN%-}Y@DDcL89sL4t6TH#3r(ed+TXXKrp^=eeXNreL zM^7FfK7DNX?5MXYh<s|~=%KU6M#cUk3uRdmiFz$Mn*KZsqD0lS42l85d|!c{nE{1m zvG_Br?Z)uqJz%&JPF>1=7JC~<y0|`<k2>fD7D$sP$R`KX!6Hc-%sM;(Thl;#-;50S z0~7|%??E)e28zus|4;j7oSNkzprrf}W0{XZ(dNn2+1NmwKB@!OKrDmLAExo`f`J<b z)~;SPuyNo(IyR7^=PLjF@<#Anhmcu`ay4q=O|1-H?;oV%oYeW}W*jdQONiyJmT-S8 zi;c~GU`RcA1HJ>2w6GSA4J13u=nN6(?tee#!$HXpo3WpNrMT{V*9&u1-u)j4>lpx^ z>ym~>tGi-5Q*G!YPT54ZS9%NIH{qZCmGt3cjN7{d(bZNwfZ|D%4{FGjjiIgtdKTrh zVH{%`|BpWJN9tAxJOJ#CeLQVaf?wogn4li}fg7d#58x8+v9j?jxr^n9?VaiPM@ccf z!#^4Aw^nBdvQ{D;TNkxbnJDgw3~~;j)a>qc%$>?wct!_P$rzHZ9#}IlI53!9OZ*3; Q$v8efmjLyIpX1j51<hvsJpcdz literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/appdirs.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/appdirs.py new file mode 100644 index 00000000..2bd39110 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/appdirs.py @@ -0,0 +1,604 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# Copyright (c) 2005-2010 ActiveState Software Inc. +# Copyright (c) 2013 Eddy Petrișor + +"""Utilities for determining application-specific dirs. + +See <http://github.com/ActiveState/appdirs> for details and usage. +""" +# Dev Notes: +# - MSDN on where to store app data files: +# http://support.microsoft.com/default.aspx?scid=kb;en-us;310294#XSLTH3194121123120121120120 +# - Mac OS X: http://developer.apple.com/documentation/MacOSX/Conceptual/BPFileSystem/index.html +# - XDG spec for Un*x: http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html + +__version_info__ = (1, 4, 3) +__version__ = '.'.join(map(str, __version_info__)) + + +import sys +import os + +PY3 = sys.version_info[0] == 3 + +if PY3: + unicode = str + +if sys.platform.startswith('java'): + import platform + os_name = platform.java_ver()[3][0] + if os_name.startswith('Windows'): # "Windows XP", "Windows 7", etc. + system = 'win32' + elif os_name.startswith('Mac'): # "Mac OS X", etc. + system = 'darwin' + else: # "Linux", "SunOS", "FreeBSD", etc. + # Setting this to "linux2" is not ideal, but only Windows or Mac + # are actually checked for and the rest of the module expects + # *sys.platform* style strings. + system = 'linux2' +else: + system = sys.platform + + + +def user_data_dir(appname=None, appauthor=None, version=None, roaming=False): + r"""Return full path to the user-specific data dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is 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>". + Only applied when appname is present. + "roaming" (boolean, default False) can be set True to use the Windows + roaming appdata directory. That means that for users on a Windows + network setup for roaming profiles, this user data will be + sync'd on login. See + <http://technet.microsoft.com/en-us/library/cc766489(WS.10).aspx> + for a discussion of issues. + + Typical user data directories are: + Mac OS X: ~/Library/Application Support/<AppName> + Unix: ~/.local/share/<AppName> # or in $XDG_DATA_HOME, if defined + Win XP (not roaming): C:\Documents and Settings\<username>\Application Data\<AppAuthor>\<AppName> + Win XP (roaming): C:\Documents and Settings\<username>\Local Settings\Application Data\<AppAuthor>\<AppName> + Win 7 (not roaming): C:\Users\<username>\AppData\Local\<AppAuthor>\<AppName> + Win 7 (roaming): C:\Users\<username>\AppData\Roaming\<AppAuthor>\<AppName> + + For Unix, we follow the XDG spec and support $XDG_DATA_HOME. + That means, by default "~/.local/share/<AppName>". + """ + if system == "win32": + if appauthor is None: + appauthor = appname + const = roaming and "CSIDL_APPDATA" or "CSIDL_LOCAL_APPDATA" + path = os.path.normpath(_get_win_folder(const)) + if appname: + if appauthor is not False: + path = os.path.join(path, appauthor, appname) + else: + path = os.path.join(path, appname) + elif system == 'darwin': + path = os.path.expanduser('~/Library/Application Support/') + if appname: + path = os.path.join(path, appname) + else: + path = os.getenv('XDG_DATA_HOME', os.path.expanduser("~/.local/share")) + if appname: + path = os.path.join(path, appname) + if appname and version: + path = os.path.join(path, version) + return path + + +def site_data_dir(appname=None, appauthor=None, version=None, multipath=False): + r"""Return full path to the user-shared data dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is 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>". + Only applied when appname is present. + "multipath" is an optional parameter only applicable to *nix + which indicates that the entire list of data dirs should be + returned. By default, the first item from XDG_DATA_DIRS is + returned, or '/usr/local/share/<AppName>', + if XDG_DATA_DIRS is not set + + Typical site data directories are: + Mac OS X: /Library/Application Support/<AppName> + Unix: /usr/local/share/<AppName> or /usr/share/<AppName> + Win XP: C:\Documents and Settings\All Users\Application Data\<AppAuthor>\<AppName> + Vista: (Fail! "C:\ProgramData" is a hidden *system* directory on Vista.) + Win 7: C:\ProgramData\<AppAuthor>\<AppName> # Hidden, but writeable on Win 7. + + For Unix, this is using the $XDG_DATA_DIRS[0] default. + + WARNING: Do not use this on Windows. See the Vista-Fail note above for why. + """ + if system == "win32": + if appauthor is None: + appauthor = appname + path = os.path.normpath(_get_win_folder("CSIDL_COMMON_APPDATA")) + if appname: + if appauthor is not False: + path = os.path.join(path, appauthor, appname) + else: + path = os.path.join(path, appname) + elif system == 'darwin': + path = os.path.expanduser('/Library/Application Support') + if appname: + path = os.path.join(path, appname) + else: + # XDG default for $XDG_DATA_DIRS + # only first, if multipath is False + path = os.getenv('XDG_DATA_DIRS', + os.pathsep.join(['/usr/local/share', '/usr/share'])) + pathlist = [os.path.expanduser(x.rstrip(os.sep)) for x in path.split(os.pathsep)] + if appname: + if version: + appname = os.path.join(appname, version) + pathlist = [os.sep.join([x, appname]) for x in pathlist] + + if multipath: + path = os.pathsep.join(pathlist) + else: + path = pathlist[0] + return path + + if appname and version: + path = os.path.join(path, version) + return path + + +def user_config_dir(appname=None, appauthor=None, version=None, roaming=False): + r"""Return full path to the user-specific config dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is 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>". + Only applied when appname is present. + "roaming" (boolean, default False) can be set True to use the Windows + roaming appdata directory. That means that for users on a Windows + network setup for roaming profiles, this user data will be + sync'd on login. See + <http://technet.microsoft.com/en-us/library/cc766489(WS.10).aspx> + for a discussion of issues. + + Typical user config directories are: + Mac OS X: same as user_data_dir + Unix: ~/.config/<AppName> # or in $XDG_CONFIG_HOME, if defined + Win *: same as user_data_dir + + For Unix, we follow the XDG spec and support $XDG_CONFIG_HOME. + That means, by default "~/.config/<AppName>". + """ + if system in ["win32", "darwin"]: + path = user_data_dir(appname, appauthor, None, roaming) + else: + path = os.getenv('XDG_CONFIG_HOME', os.path.expanduser("~/.config")) + if appname: + path = os.path.join(path, appname) + if appname and version: + path = os.path.join(path, version) + return path + + +def site_config_dir(appname=None, appauthor=None, version=None, multipath=False): + r"""Return full path to the user-shared data dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is 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>". + Only applied when appname is present. + "multipath" is an optional parameter only applicable to *nix + which indicates that the entire list of config dirs should be + returned. By default, the first item from XDG_CONFIG_DIRS is + returned, or '/etc/xdg/<AppName>', if XDG_CONFIG_DIRS is not set + + Typical site config directories are: + Mac OS X: same as site_data_dir + Unix: /etc/xdg/<AppName> or $XDG_CONFIG_DIRS[i]/<AppName> for each value in + $XDG_CONFIG_DIRS + Win *: same as site_data_dir + Vista: (Fail! "C:\ProgramData" is a hidden *system* directory on Vista.) + + For Unix, this is using the $XDG_CONFIG_DIRS[0] default, if multipath=False + + WARNING: Do not use this on Windows. See the Vista-Fail note above for why. + """ + if system in ["win32", "darwin"]: + path = site_data_dir(appname, appauthor) + if appname and version: + path = os.path.join(path, version) + else: + # XDG default for $XDG_CONFIG_DIRS + # only first, if multipath is False + path = os.getenv('XDG_CONFIG_DIRS', '/etc/xdg') + pathlist = [os.path.expanduser(x.rstrip(os.sep)) for x in path.split(os.pathsep)] + if appname: + if version: + appname = os.path.join(appname, version) + pathlist = [os.sep.join([x, appname]) for x in pathlist] + + if multipath: + path = os.pathsep.join(pathlist) + else: + path = pathlist[0] + return path + + +def user_cache_dir(appname=None, appauthor=None, version=None, opinion=True): + r"""Return full path to the user-specific cache dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is 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>". + Only applied when appname is present. + "opinion" (boolean) can be False to disable the appending of + "Cache" to the base app data dir for Windows. See + discussion below. + + Typical user cache directories are: + Mac OS X: ~/Library/Caches/<AppName> + Unix: ~/.cache/<AppName> (XDG default) + Win XP: C:\Documents and Settings\<username>\Local Settings\Application Data\<AppAuthor>\<AppName>\Cache + Vista: C:\Users\<username>\AppData\Local\<AppAuthor>\<AppName>\Cache + + On Windows the only suggestion in the MSDN docs is that local settings go in + the `CSIDL_LOCAL_APPDATA` directory. This is identical to the non-roaming + app data dir (the default returned by `user_data_dir` above). Apps typically + put cache data somewhere *under* the given dir here. Some examples: + ...\Mozilla\Firefox\Profiles\<ProfileName>\Cache + ...\Acme\SuperApp\Cache\1.0 + OPINION: This function appends "Cache" to the `CSIDL_LOCAL_APPDATA` value. + This can be disabled with the `opinion=False` option. + """ + if system == "win32": + if appauthor is None: + appauthor = appname + path = os.path.normpath(_get_win_folder("CSIDL_LOCAL_APPDATA")) + if appname: + if appauthor is not False: + path = os.path.join(path, appauthor, appname) + else: + path = os.path.join(path, appname) + if opinion: + path = os.path.join(path, "Cache") + elif system == 'darwin': + path = os.path.expanduser('~/Library/Caches') + if appname: + path = os.path.join(path, appname) + else: + path = os.getenv('XDG_CACHE_HOME', os.path.expanduser('~/.cache')) + if appname: + path = os.path.join(path, appname) + if appname and version: + path = os.path.join(path, version) + return path + + +def user_state_dir(appname=None, appauthor=None, version=None, roaming=False): + r"""Return full path to the user-specific state dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is 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>". + Only applied when appname is present. + "roaming" (boolean, default False) can be set True to use the Windows + roaming appdata directory. That means that for users on a Windows + network setup for roaming profiles, this user data will be + sync'd on login. See + <http://technet.microsoft.com/en-us/library/cc766489(WS.10).aspx> + for a discussion of issues. + + Typical user state directories are: + Mac OS X: same as user_data_dir + Unix: ~/.local/state/<AppName> # or in $XDG_STATE_HOME, if defined + Win *: same as user_data_dir + + For Unix, we follow this Debian proposal <https://wiki.debian.org/XDGBaseDirectorySpecification#state> + to extend the XDG spec and support $XDG_STATE_HOME. + + That means, by default "~/.local/state/<AppName>". + """ + if system in ["win32", "darwin"]: + path = user_data_dir(appname, appauthor, None, roaming) + else: + path = os.getenv('XDG_STATE_HOME', os.path.expanduser("~/.local/state")) + if appname: + path = os.path.join(path, appname) + if appname and version: + path = os.path.join(path, version) + return path + + +def user_log_dir(appname=None, appauthor=None, version=None, opinion=True): + r"""Return full path to the user-specific log dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is 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>". + Only applied when appname is present. + "opinion" (boolean) can be False to disable the appending of + "Logs" to the base app data dir for Windows, and "log" to the + base cache dir for Unix. See discussion below. + + Typical user log directories are: + Mac OS X: ~/Library/Logs/<AppName> + Unix: ~/.cache/<AppName>/log # or under $XDG_CACHE_HOME if defined + Win XP: C:\Documents and Settings\<username>\Local Settings\Application Data\<AppAuthor>\<AppName>\Logs + Vista: C:\Users\<username>\AppData\Local\<AppAuthor>\<AppName>\Logs + + On Windows the only suggestion in the MSDN docs is that local settings + go in the `CSIDL_LOCAL_APPDATA` directory. (Note: I'm interested in + examples of what some windows apps use for a logs dir.) + + OPINION: This function appends "Logs" to the `CSIDL_LOCAL_APPDATA` + value for Windows and appends "log" to the user cache dir for Unix. + This can be disabled with the `opinion=False` option. + """ + if system == "darwin": + path = os.path.join( + os.path.expanduser('~/Library/Logs'), + appname) + elif system == "win32": + path = user_data_dir(appname, appauthor, version) + version = False + if opinion: + path = os.path.join(path, "Logs") + else: + path = user_cache_dir(appname, appauthor, version) + version = False + if opinion: + path = os.path.join(path, "log") + if appname and version: + path = os.path.join(path, version) + return path + + +class AppDirs(object): + """Convenience wrapper for getting application dirs.""" + def __init__(self, appname=None, appauthor=None, version=None, + roaming=False, multipath=False): + self.appname = appname + self.appauthor = appauthor + self.version = version + self.roaming = roaming + self.multipath = multipath + + @property + def user_data_dir(self): + return user_data_dir(self.appname, self.appauthor, + version=self.version, roaming=self.roaming) + + @property + def site_data_dir(self): + return site_data_dir(self.appname, self.appauthor, + version=self.version, multipath=self.multipath) + + @property + def user_config_dir(self): + return user_config_dir(self.appname, self.appauthor, + version=self.version, roaming=self.roaming) + + @property + def site_config_dir(self): + return site_config_dir(self.appname, self.appauthor, + version=self.version, multipath=self.multipath) + + @property + def user_cache_dir(self): + return user_cache_dir(self.appname, self.appauthor, + version=self.version) + + @property + def user_state_dir(self): + return user_state_dir(self.appname, self.appauthor, + version=self.version) + + @property + def user_log_dir(self): + return user_log_dir(self.appname, self.appauthor, + version=self.version) + + +#---- internal support stuff + +def _get_win_folder_from_registry(csidl_name): + """This is a fallback technique at best. I'm not sure if using the + registry for this guarantees us the correct answer for all CSIDL_* + names. + """ + if PY3: + import winreg as _winreg + else: + import _winreg + + shell_folder_name = { + "CSIDL_APPDATA": "AppData", + "CSIDL_COMMON_APPDATA": "Common AppData", + "CSIDL_LOCAL_APPDATA": "Local AppData", + }[csidl_name] + + key = _winreg.OpenKey( + _winreg.HKEY_CURRENT_USER, + r"Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" + ) + dir, type = _winreg.QueryValueEx(key, shell_folder_name) + return dir + + +def _get_win_folder_with_pywin32(csidl_name): + from win32com.shell import shellcon, shell + dir = shell.SHGetFolderPath(0, getattr(shellcon, csidl_name), 0, 0) + # Try to make this a unicode path because SHGetFolderPath does + # not return unicode strings when there is unicode data in the + # path. + try: + dir = unicode(dir) + + # Downgrade to short path name if have highbit chars. See + # <http://bugs.activestate.com/show_bug.cgi?id=85099>. + has_high_char = False + for c in dir: + if ord(c) > 255: + has_high_char = True + break + if has_high_char: + try: + import win32api + dir = win32api.GetShortPathName(dir) + except ImportError: + pass + except UnicodeError: + pass + return dir + + +def _get_win_folder_with_ctypes(csidl_name): + import ctypes + + csidl_const = { + "CSIDL_APPDATA": 26, + "CSIDL_COMMON_APPDATA": 35, + "CSIDL_LOCAL_APPDATA": 28, + }[csidl_name] + + buf = ctypes.create_unicode_buffer(1024) + ctypes.windll.shell32.SHGetFolderPathW(None, csidl_const, None, 0, buf) + + # Downgrade to short path name if have highbit chars. See + # <http://bugs.activestate.com/show_bug.cgi?id=85099>. + has_high_char = False + for c in buf: + if ord(c) > 255: + has_high_char = True + break + if has_high_char: + buf2 = ctypes.create_unicode_buffer(1024) + if ctypes.windll.kernel32.GetShortPathNameW(buf.value, buf2, 1024): + buf = buf2 + + return buf.value + +def _get_win_folder_with_jna(csidl_name): + import array + from com.sun import jna + from com.sun.jna.platform import win32 + + buf_size = win32.WinDef.MAX_PATH * 2 + buf = array.zeros('c', buf_size) + shell = win32.Shell32.INSTANCE + shell.SHGetFolderPath(None, getattr(win32.ShlObj, csidl_name), None, win32.ShlObj.SHGFP_TYPE_CURRENT, buf) + dir = jna.Native.toString(buf.tostring()).rstrip("\0") + + # Downgrade to short path name if have highbit chars. See + # <http://bugs.activestate.com/show_bug.cgi?id=85099>. + has_high_char = False + for c in dir: + if ord(c) > 255: + has_high_char = True + break + if has_high_char: + buf = array.zeros('c', buf_size) + kernel = win32.Kernel32.INSTANCE + if kernel.GetShortPathName(dir, buf, buf_size): + dir = jna.Native.toString(buf.tostring()).rstrip("\0") + + return dir + +if system == "win32": + try: + from ctypes import windll + _get_win_folder = _get_win_folder_with_ctypes + except ImportError: + try: + import com.sun.jna + _get_win_folder = _get_win_folder_with_jna + except ImportError: + _get_win_folder = _get_win_folder_from_registry + + +#---- self test code + +if __name__ == "__main__": + appname = "MyApp" + appauthor = "MyCompany" + + props = ("user_data_dir", + "user_config_dir", + "user_cache_dir", + "user_state_dir", + "user_log_dir", + "site_data_dir", + "site_config_dir") + + print("-- app dirs %s --" % __version__) + + print("-- app dirs (with optional 'version')") + dirs = AppDirs(appname, appauthor, version="1.0") + for prop in props: + print("%s: %s" % (prop, getattr(dirs, prop))) + + print("\n-- app dirs (without optional 'version')") + dirs = AppDirs(appname, appauthor) + for prop in props: + print("%s: %s" % (prop, getattr(dirs, prop))) + + print("\n-- app dirs (without optional 'appauthor')") + dirs = AppDirs(appname) + for prop in props: + print("%s: %s" % (prop, getattr(dirs, prop))) + + print("\n-- app dirs (with disabled 'appauthor')") + dirs = AppDirs(appname, appauthor=False) + for prop in props: + print("%s: %s" % (prop, getattr(dirs, prop))) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/__init__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/__init__.py new file mode 100644 index 00000000..8fdee66f --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/__init__.py @@ -0,0 +1,11 @@ +"""CacheControl import Interface. + +Make it easy to import from cachecontrol without long namespaces. +""" +__author__ = "Eric Larson" +__email__ = "eric@ionrock.org" +__version__ = "0.12.5" + +from .wrapper import CacheControl +from .adapter import CacheControlAdapter +from .controller import CacheController diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0824d03c4e8b1f51f5efe695f9720ae12a610592 GIT binary patch literal 500 zcmYjN%}xR_5bpA~us}5N1$yPcf*2DI#$bpC6ZPV4qiM>vKtsE&vqb`L<i!Wtt0!N< zle37)wwdYoO*-HFT=e_V%V+!=2ZVf)%BdlqqUBfU1WAYpl0ejwny4pr(GX4DFwLYH z5X3FrGGP)PaH!j+lXMWbpUI%JpU-%@k~5omu$n64EO>gKc?k=i$~cN1`C3xtspR>N zdi(!n0oKs8%uSEETjf`F<EggUl4jh<+@V4qNBiy_sFXf%$ZfVil}M(_W?<8GY+<=? zjpOr4eEE$dl0i`PsvRLetMXgH9rlLdlWJH?cp5}S$e6GxV@1Rm-(Wj{xWkw<Txo<| z#@;35SR6^X1@4>#C|6m8{7)I`C5w(jp)NEq@Ij!5&%ymnN8Y%RQ*JolC@qHLx7FN^ sC!!1;42xvK!l=5Q5o0P-p0U{NiuSd!Vx#3vshyX~jo@%=y`UHT0%A^<Qvd(} literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/__pycache__/_cmd.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/__pycache__/_cmd.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ea77b4678381780264c1e9750212343f3bc7e8e4 GIT binary patch literal 1503 zcmZ`(%Z}SN6y-w?T9!RdS_ElPq;Atiyoep7yC4XfPKss`7)58Y5n2d}N!W7r3PtB( zcvj9fACgT!h}*9E3tjbIN}Ub@L;%U7%ZJWA_fX%DM$vD7&VN7g3Hgg$c{t!7ptWzH zlSI;jBsj8ymMmcuF)w)OC7#1x;g>-YIP4c;DH7puPz=f_i2#REyd%j_4rBylEQd0N zaU>^lB**V)GFB(@<PWBe8XpO)r)Ok#?Qi%xS<a{xTD{z<*0g{>JIz)bby`<O*TrL* zHAZO&51!;J<EG#xDC+gvg~yNedRMB-{F3Qb=@p)c4~52{okDBBh0c&IHEhd|loA-d zBe}qse;^o<1o+V9EYKhov7%MxnR=xP8{(JpYHj@|KmGXpXFEDGT4m+atdfP&Hp-;z zG0+M(UHAjhBRJ-thYM3SizaXGzS!l3ynFBE=0$z)zQmAg=_^&qS}#_Z@~TUDk*-QP zZ{FGwkk~b8Pawub0_X^hsi67<&}FumDbBfU9|17L&?Be}b%d(E_aIlyom|iZ-FlKk z)=*`Ky&j_$Gz|_|8Gm^`<96t1rOIUM)<&Rio)!5XvL0;IPUo%3SNm{dO!Hu|*b4+L zpjoInFwh=$NX&+3s%`VSvVK|bDr2KQQxtI0edGVgjM*^js&2g&HaaQ0Zj7f5*UF?g z0ViIEK#NgA8J#cz(!|i~FCcO$4q5@pIB~uLU<elf0EPg8nB?zK3bJKKG=aCYe5Z^3 z&GU_#KL7RE)YMa>-%g>jQ^ytR>}^!h%(zC$Z44Gjv)+X^YS4%Hj$RJjoBlWjfhpjU zTW~;M)PRnu{u<s_$QK_}5u4+E4xr<Wg>_|Qz!~g(!3>z$71Q4a2eu8NiN3u4c7Ty1 z)lW?%DO$Y}fY_z!`EnngqW$DI`_ZyCU6OM8;LdF5_&6~w2g>?OAmNOsZve7mr$?$) z+tgL7Y}nso%XRj;pOrA}uD10XomU2I<zeRfCZ6Eo-jCJs$}F$GgXwkx9iagYc+3NS zosVh6^c~zN(iB&vDPG!%78o1Ct(x~Y${8=2UWv>d+1_XK-eJzE$*oT=b9<bVliQzO z)ZJTfbN};z{JOfMKRUh8ke!<U(XX;nrRkO2@sFXM!^Ok0mb*edLMOB+wO}y=YlFFC NE&>sYAo^U;e*uatcKQGS literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/__pycache__/adapter.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/__pycache__/adapter.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ce8e377dd4cd6aac9889c4e17f27440e34294c6d GIT binary patch literal 2991 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 R4{H^$4<OKIeW+Oa&KJHL{5t>u literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/__pycache__/cache.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/__pycache__/cache.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dde18aecf304c2c93585c4885a9cda8cbf3ec40b GIT binary patch literal 1716 zcma)7OK;Oa5Z<*N$8noBw4w+JkPm=liKZ2B1XL&pRYDOj2^4`W$Gd5r`qi~lDN#<O z_x=tp{2*UB@fSETv#w(|LWPZX_UV~#X1>`xYPZcVKe}J<sf7F_wWh&*4|@6-1S5UI zC{qF&Dt(2L*MzA|J0ncv>Rjz>ux>CN);iZ<-C)fR#5Se_^Wzb>Jl6vm4@TU}tmkhJ ztYIuHKTHB1@+kA8!{SETweU9MLw6ixmY-U#l^qH0GBb6D-14LCkcY9DSj_h_KaN~6 z>6*U)9kFSyy@|bJ4;N)qV6q22eE@=!J_RQfbmENk)dGHBD_|pFX28DAS^(V4TQA&{ z?;~yx)nLPsLf?m;njkVVC*MFRd_a4EV6zuz2c=h>y%Hi8wvuZp4~DsV%qQQ8Xu@~D zpYCK~vXl79_F(J>Y<u_QXb|r{WVj`}bIKzYiyav_FOD)12gRbBOmg**XJ|i_$mq1a zz}kfqPlY3FI9`QUV1jK`G++=qh`e#?24gNU7Q(<?HRV|wCVw#pC;uIu!kki>TehP! z9`KBJYNk4sXT_n14q?M_;T$@0kp`*MriB#@cFmE77sM&wgw4{G^-8}y>)FlRaGb~u zx#Q%f<AgCA2RL7KoRhH|6epsEidRsqqQL0Xypd)xbOKX=lN5!a7%Kkct_K^7hS&C> zr(F;WqMA%$>KO&90!e|I8q--5#s)K3OH!2r^H%cKOQ;4()!wCKAUpO^>lO&)>Wnya zMw2xkXG+OiRp7;33!r>*jk%d?7fH%ne&lBk)>_RuNePINJacZMehfdM2Ays!kaWun zmk^<!644q=W@JQ0fQON}QdE#4FgG%|7Z4;ZmyFBv+i<Z=V!N`sOn<BrY4HAq!SgMO zhUrL|(V61YIi=(iaOWL)Pd=9%f|}SsAc!W{#|gxQ*Xu-}+GSM81`B!>jT)}yIzj$O zT=+6!AkJ?AE{e#Gb#bRe_-}M-5+_&13h8+lQDJ>!j!Zi3RPic`3SY0Lz?_J66j*`c zI*KKpSM^j;{2JW50sVsFrUn$(1n%~1J#RV=i#@2HR`HO-TVK#kFa8Z=Ey&xocrKLZ T#*?A|pCQGh4;o!nJL`V{|3^d7 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/__pycache__/compat.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/__pycache__/compat.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..62f48148a6f2f68e046bacfb4af12c1cc0bedd5f GIT binary patch literal 707 zcmZ`#&2H2%5VoD9n{Knqic=3ga6(#8vnzV7DlSNHsVb-hSfEwb9%xu6c5Mf-@4$<2 z;mVB%$q5MwiC5sn<cB3iB9_PF`F=9vlgVWK>T~+~3nSz^8GQFKe~8=tz_6W3BB>$; z<&=`=q`VUnV4JaBQqrsz4LbBCDcK9MO|ZsP$RlJQ^=!UlGZpcuXExq}+ABtUbi@1O zjvc7DLkEgb?H6M{zM=TKQ-tcELwiLG37=pmhuFy!`~KE3;TE5C49T96dGr%!C39Mj zDy!b<ygbJ|d3<?!@f4iVrGw_4yVV=B5=uLe^I4rBSLN%}WY&SjXC(E(lfr20A6cty z9V6ai^+;UgVxyqmGwsP!lbdw)9!jZgYT>#9=N%e}P4*UC+8Li9(*4{9XwHv@qJJs; z-Vpu2W#w~a!^ZA#DEMR7!1xGdF0_Pt-@^yL@>_%Hc~(F-SKz$;MC=qz+VJaa;R~}s zyW@40D|x)UzFO<$1KE_?-A}p@nYaR>OK-JW2wj-Wr)FEnr-hc4f-{Pi?k)yKXLL$$ R2aG0oPNV+L{?=ox{|326y=nje literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/__pycache__/controller.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/__pycache__/controller.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0b29e4aaf5d495dc6b02387187269f81f06e09cb GIT binary patch literal 7648 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..68a652a82b80065f5b2cd395062ad1255488ae5a GIT binary patch literal 2104 zcmZ`)!EPHj5GA=QX}y+Rw@Fhc2vRnu2uSQ8xu%5^Hz|5?4=&JFXh2X)Dq4A^RY=OR z4D}@cOfUVQy%s&>7kcUpcO}clmI8-d&T#nNaE5xhvlIXR*TMULwg~x~Y_t&ON6;+? zp@^ax8PP7K<Oiad3a*F>G+PGUK!vBI)A$5dq(h6=o4M2W$Db1XUbO%wN6_sX5SnzU zB3-5^?Dd|yp$b*wigX*Qsah~LRiw6HY^l%GwrXF|Zlre9F05>+7*5+O?i|Z3>&fKo zU7G1%jGRogk>`|<m_s`qftJt8WiCxV9V;$*f5P+LP$!Ph25B<jvlOhH)?A-!Gk1e@ z{DB)S6;H=5=hD0CP5XUqo^lBuW&=IuZXg}+!>K&AJjrsa!5%!KFMXktsnc*&Qo)0D zH-J6bJ4^Dh(_?3O-Y@->-Vb80eGML@b0+P94-2q0pP2k2g#!Q%_~1Z8n{19aJ%W-= zwf*OT2PCcKQw#e?deqa#mIx$Q`LqY1y$hS<;QWaY9i9PS^fxiOpI&eaysbww&K({r zlO$Du8Tib(9Y~eWAQsm+4@zQq!`N_S(2t?peGrZ;$$|*Fpdi_TfeaLZJESL_(4c8? zU({Tt5D=SUzh2d!6p!jPtGIW9BD6Z|7YuBp)#{(b#Bk!j$A@k-Ih>@EXT52fsb|kW z4tn|X7Ydhr7w3Aca&wr-WT5fZOr9NL$g7+>n9Pevh;*DfA@-1K69l0VZPLq!HFOSE z#tBl!hLOVVBXt)h3o?W%Thc$6qYx*$WDq5GVj7_9uwqY$58AEsLx`ePeRl%W0-GWn z%aJw_Og+m|Y@=p-y;q1YVZmZ?ldYIueqE2X@+?FGCFL8Acc6Q?-@|0yM!-WT<+JFN zgv7D4*l<el_Zu0rU&%c37QtHk-KJJiPwyRM0W$Qsi{00&{C{gqZi;4EU>)ii-lnw+ zLA9bk5vA2P;KqIdf>1`=Y?n3}qY;kb<>Pvuo7-<tUFR?dcSytBLkXP@*^(^b9aNat zAj@113}%4Az!njN?_6e6{Xe*yCEyoeTjfoY?zJu-)ME79PHv>l8r;(g+z`qO69?e2 zVX$Bb59Z;Lm?tncmT)HvOeZM1rVn=!;zL)$ZOlySbn&>pqBcWhFnLz#7RZq+LM5HN zbuZ=~SbdA+u-FJ~!!Lr1xZJNJh&bxm9l>Tm4<WDEQAN*~;R~i%Ii8~aHse<}7zZbx zFkBYJPP}3t3oH9ttYcul0=2>SYLlY5j|&e_Ad~BYG7sVNEp)pJ0vYZFA*)zEs$+S5 z9^OHWj|WyORB<fCC|A=A=WQWAPGweUT0*Ei5yG_L41=%CH9{X_4`TzG2Z;r5@L|DJ t^!TDUWKkn(N1sRAapZOI_7*J7%lEfg{*8D=owp)-RU(A?ts>bD{sZ!R0X6^t literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..51624ab51a0ecc9bc6d8c7ce58b556a16937b3c3 GIT binary patch literal 4634 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/__pycache__/serialize.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/__pycache__/serialize.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b3e6cd165585d25cb214cd004097ba5082140770 GIT binary patch literal 4188 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 KYnE^O_J08cZH-?5 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7368766afbddf6ac45913ee4d23aae0c1e220cc5 GIT binary patch literal 608 zcmYjOy^a$x5cYWgoIeP<h9^MU;%-mSA;e#()7(`NDB7$oc9A!0YzIW-R7cA*P}A^0 zZmI4Su43#QB4f>`&oi^*Z)Ts(X5;t2FFyRFg!~~VRv>?kZk`};!a<TARsexhN&94# zATM~v^Y5@qd2&Tcb_-Zsf<If-O)D0|*6KmN;kB|tV|etgYivv{uN#J?!A9tTFVM|f z1P6*)azhT_ay7Sb$X)KhQJ1*XWv<}xBR?=lK2c5`yP-fLPyTTfk}k{4PnsZNEo}YK z_^}bXt7W$r+K*bX)19$h<LAv$qZE4G$l4hHD1KFMq*(XDwgWf&qP12%uc|!@#2_mZ zouE>UOCvt(huzkeBcB?94YJrkry-vO$OD9Ru4eUd700J^nA#Wjv0p^b@P7BIvc0NQ zr_MLKPV)21&+TToe9A*8`udC5@<CVenS1%wS6wS5^o9E7r;C%_2La|W0-20~0X;d4 zPGL&*L(G-M@_HGp%=8rRaV|XxERGp!qPi1!fHBWr^aI~X@iP2(Ge^Ll8G--jFTm!J AcK`qY literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/_cmd.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/_cmd.py new file mode 100644 index 00000000..f1e0ad94 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/_cmd.py @@ -0,0 +1,57 @@ +import logging + +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 + +from argparse import ArgumentParser + + +def setup_logging(): + logger.setLevel(logging.DEBUG) + handler = logging.StreamHandler() + logger.addHandler(handler) + + +def get_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 + return sess + + +def get_args(): + parser = ArgumentParser() + parser.add_argument("url", help="The URL to try and cache") + return parser.parse_args() + + +def main(args=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 + sess.cache_controller.cache_response(resp.request, resp.raw) + + # Now try to get it + if sess.cache_controller.cached_request(resp.request): + print("Cached!") + else: + print("Not cached :(") + + +if __name__ == "__main__": + main() diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/adapter.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/adapter.py new file mode 100644 index 00000000..780eb288 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/adapter.py @@ -0,0 +1,133 @@ +import types +import functools +import zlib + +from pip._vendor.requests.adapters import HTTPAdapter + +from .controller import CacheController +from .cache import DictCache +from .filewrapper import CallbackFileWrapper + + +class CacheControlAdapter(HTTPAdapter): + invalidating_methods = {"PUT", "DELETE"} + + def __init__( + self, + cache=None, + cache_etags=True, + controller_class=None, + serializer=None, + heuristic=None, + cacheable_methods=None, + *args, + **kw + ): + super(CacheControlAdapter, self).__init__(*args, **kw) + self.cache = cache or DictCache() + 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, cacheable_methods=None, **kw): + """ + 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(CacheControlAdapter, self).send(request, **kw) + + return resp + + def build_response( + self, request, response, from_cache=False, cacheable_methods=None + ): + """ + 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 response.status == 301: + 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( + response._fp, + functools.partial( + self.controller.cache_response, request, response + ), + ) + if response.chunked: + super_update_chunk_length = response._update_chunk_length + + def _update_chunk_length(self): + super_update_chunk_length() + if self.chunk_left == 0: + self._fp._close() + + response._update_chunk_length = types.MethodType( + _update_chunk_length, response + ) + + resp = super(CacheControlAdapter, self).build_response(request, response) + + # See if we should invalidate the cache. + if request.method in self.invalidating_methods and resp.ok: + 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 + + return resp + + def close(self): + self.cache.close() + super(CacheControlAdapter, self).close() diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/cache.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/cache.py new file mode 100644 index 00000000..94e07732 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/cache.py @@ -0,0 +1,39 @@ +""" +The cache object API for implementing caches. The default is a thread +safe in-memory dictionary. +""" +from threading import Lock + + +class BaseCache(object): + + def get(self, key): + raise NotImplementedError() + + def set(self, key, value): + raise NotImplementedError() + + def delete(self, key): + raise NotImplementedError() + + def close(self): + pass + + +class DictCache(BaseCache): + + def __init__(self, init_dict=None): + self.lock = Lock() + self.data = init_dict or {} + + def get(self, key): + return self.data.get(key, None) + + def set(self, key, value): + with self.lock: + self.data.update({key: value}) + + def delete(self, key): + with self.lock: + if key in self.data: + self.data.pop(key) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/caches/__init__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/caches/__init__.py new file mode 100644 index 00000000..0e1658fa --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/caches/__init__.py @@ -0,0 +1,2 @@ +from .file_cache import FileCache # noqa +from .redis_cache import RedisCache # noqa diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d2af2bdd9921d3683165541335ba8716936760b5 GIT binary patch literal 244 zcmXr!<>iW5rxzQ>z`*brh~a<<$Z`PUVi_Qj!jQt4!;s4u#mER^GvzSlGDk53+04NV znk+9Ffl4$PZ*jV1=A=3&CTFAqIb1=hDVfD!o}VVmEv_`6TzoP}vIt~!6n7Cw9xB2N z6j{ko#0sRq#4mUKlH3CQg3JQlq|(fs6kUVDjHG-6qZE)37{`~T=B4Bp>4Qy7&d)0; n%FlstiuL2;GxIV_;^XxSDsOSv<mRW8=A_zz+*k~<nTHVoHt#=- literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..178954346d34a98d7334066cea8b22c485423b3a GIT binary patch literal 3178 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 YCyMvb1w6p*tc4~pYop!-ot5YR1<FR;Gynhq literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ba83d95fe97cc95c6547ae0d9836e5754e22a308 GIT binary patch literal 1500 zcmaJ>OK;RL5cVU<rps=-sDR)CM(SlHx~<^Cp(+TFcpUZsLZAo~rLo(lWRtD!^rh`- z`)9cDgL37>U*N=yvrCt%!jkQY$CLTKdH6}U+y3%n@bxn%<R@7e9>~vOny0WxB56)W zG@=w`ma`Fyn3H+VM_%Mn@|s9b`WHm{%A4}Ym%#_pZ~X#m(x-JOv!l#pW#Qz+Dw~ZI z$V)F0qh2QIzDn`td;prp`!)!QL{yT9Nh;X|iMZs_gWZ$MGLWqc3cf<Q1Sf%P%Nww_ zWJh*k52X(nR_gY9B{S1_VKW!F<9rFzv|*Xh35kInSkNIL^U|^?`mFYh%6D}DH@*`c z!uI>!h8>MJ#@Tp%r^<4<zInL6Q*J(%c;se$qzYN;jnwff3#-e#`7j$Ap~Oxz7@yW* z9A`yl<9G>iIB@iA^%C!3u1~K8-a+8xfE>^Xozez6b6{(}r);0;7Tl=$H+AZ;Hw*gG zH(){YxzptZr(ilvu>x@5j?+bI3xo+bx8_bKYzlQytWCIO2YgEIl5_5K-h^6z!ViKe znNqmLv055{tr<Y0tj0vwL1ojTJdS)gQ71Le3R`z=X_GuQ3eq4=-*ZGX0<Qg|B(GH6 zQYYg~D|3}t7w)XUG?*+xJ=$X(dbUUp+*}{d9vIA-O<k@36VgDc91zZ;>cCuez6yW1 z19KkLn+s8GtWyeV9GFm~@8Y@!!pZ%{_msRMUwh|JkC0e~iKXPQ^9gzo(6F<&Z&W^3 zTI`luq`69TR_uu+&xPGr0upURR)|E%#3nn?Tm$jZC~=(G{kE8mG^s4K;=^H|H>vQ@ zOe6OHaI1ai?H=4Rt~Pj&p7j>^IrU$9NE4@{hxcdjpE(Or8D#{vm`V|g7?))ZL>`Hv z6opb!*b>;403B&vUK|Wv$osS@2+Z+iQ6oe!c>sq^0@xLRpv3N8!oDk#k&5HG9mk_m zRyoR@I6kbBywPZU6<nKWEGZWreH$fA@IvAp2G>(QD6ruS)@jH>9`bez)<C0X*bmU# zZe=SC-ZU0~Yk=rJyc~nst1)nI0}#enqxsMnKKG03yw>4XLtq=jZSbY)K*e|XA5bns AIRF3v literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py new file mode 100644 index 00000000..1ba00806 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py @@ -0,0 +1,146 @@ +import hashlib +import os +from textwrap import dedent + +from ..cache import BaseCache +from ..controller import CacheController + +try: + FileNotFoundError +except NameError: + # py2.X + FileNotFoundError = (IOError, OSError) + + +def _secure_open_write(filename, fmode): + # We only want to write to this file, so open it in write only mode + flags = os.O_WRONLY + + # os.O_CREAT | os.O_EXCL will fail if the file already exists, so we only + # will open *new* files. + # We specify this because we want to ensure that the mode we pass is the + # mode of the file. + flags |= os.O_CREAT | os.O_EXCL + + # Do not follow symlinks to prevent someone from making a symlink that + # we follow and insecurely open a cache file. + if hasattr(os, "O_NOFOLLOW"): + flags |= os.O_NOFOLLOW + + # On Windows we'll mark this file as binary + if hasattr(os, "O_BINARY"): + flags |= os.O_BINARY + + # Before we open our file, we want to delete any existing file that is + # there + try: + os.remove(filename) + except (IOError, OSError): + # The file must not exist already, so we can just skip ahead to opening + pass + + # Open our file, the use of os.O_CREAT | os.O_EXCL will ensure that if a + # race condition happens between the os.remove and this line, that an + # error will be raised. Because we utilize a lockfile this should only + # happen if someone is attempting to attack us. + fd = os.open(filename, flags, fmode) + try: + return os.fdopen(fd, "wb") + + except: + # An error occurred wrapping our FD in a file object + os.close(fd) + raise + + +class FileCache(BaseCache): + + def __init__( + self, + directory, + forever=False, + filemode=0o0600, + dirmode=0o0700, + use_dir_lock=None, + lock_class=None, + ): + + if use_dir_lock is not None and lock_class is not None: + raise ValueError("Cannot use use_dir_lock and lock_class together") + + try: + from pip._vendor.lockfile import LockFile + from pip._vendor.lockfile.mkdirlockfile import MkdirLockFile + except ImportError: + notice = dedent( + """ + NOTE: In order to use the FileCache you must have + lockfile installed. You can install it via pip: + pip install lockfile + """ + ) + raise ImportError(notice) + + else: + if use_dir_lock: + lock_class = MkdirLockFile + + elif lock_class is None: + lock_class = LockFile + + self.directory = directory + self.forever = forever + self.filemode = filemode + self.dirmode = dirmode + self.lock_class = lock_class + + @staticmethod + def encode(x): + return hashlib.sha224(x.encode()).hexdigest() + + def _fn(self, name): + # 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): + name = self._fn(key) + try: + with open(name, "rb") as fh: + return fh.read() + + except FileNotFoundError: + return None + + def set(self, key, value): + name = self._fn(key) + + # Make sure the directory exists + try: + os.makedirs(os.path.dirname(name), self.dirmode) + except (IOError, OSError): + pass + + with self.lock_class(name) as lock: + # Write our actual file + with _secure_open_write(lock.path, self.filemode) as fh: + fh.write(value) + + def delete(self, key): + name = self._fn(key) + if not self.forever: + try: + os.remove(name) + except FileNotFoundError: + pass + + +def url_to_file_path(url, filecache): + """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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py new file mode 100644 index 00000000..ed705ce7 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py @@ -0,0 +1,33 @@ +from __future__ import division + +from datetime import datetime +from pip._vendor.cachecontrol.cache import BaseCache + + +class RedisCache(BaseCache): + + def __init__(self, conn): + self.conn = conn + + def get(self, key): + return self.conn.get(key) + + def set(self, key, value, expires=None): + if not expires: + self.conn.set(key, value) + else: + expires = expires - datetime.utcnow() + self.conn.setex(key, int(expires.total_seconds()), value) + + def delete(self, key): + self.conn.delete(key) + + def clear(self): + """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): + """Redis uses connection pooling, no need to close the connection.""" + pass diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/compat.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/compat.py new file mode 100644 index 00000000..33b5aed0 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/compat.py @@ -0,0 +1,29 @@ +try: + from urllib.parse import urljoin +except ImportError: + from urlparse import urljoin + + +try: + import cPickle as pickle +except ImportError: + import pickle + + +# Handle the case where the requests module has been patched to not have +# urllib3 bundled as part of its source. +try: + from pip._vendor.requests.packages.urllib3.response import HTTPResponse +except ImportError: + from pip._vendor.urllib3.response import HTTPResponse + +try: + from pip._vendor.requests.packages.urllib3.util import is_fp_closed +except ImportError: + from pip._vendor.urllib3.util import is_fp_closed + +# Replicate some six behaviour +try: + text_type = unicode +except NameError: + text_type = str diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/controller.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/controller.py new file mode 100644 index 00000000..1b2b943c --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/controller.py @@ -0,0 +1,367 @@ +""" +The httplib2 algorithms ported for use with requests. +""" +import logging +import re +import calendar +import time +from email.utils import parsedate_tz + +from pip._vendor.requests.structures import CaseInsensitiveDict + +from .cache import DictCache +from .serialize import Serializer + + +logger = logging.getLogger(__name__) + +URI = re.compile(r"^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?") + + +def parse_uri(uri): + """Parses a URI using the regex given in Appendix B of RFC 3986. + + (scheme, authority, path, query, fragment) = parse_uri(uri) + """ + groups = URI.match(uri).groups() + return (groups[1], groups[3], groups[4], groups[6], groups[8]) + + +class CacheController(object): + """An interface to see if request should cached or not. + """ + + def __init__( + self, cache=None, cache_etags=True, serializer=None, status_codes=None + ): + self.cache = cache or DictCache() + self.cache_etags = cache_etags + self.serializer = serializer or Serializer() + self.cacheable_status_codes = status_codes or (200, 203, 300, 301) + + @classmethod + def _urlnorm(cls, uri): + """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): + return cls._urlnorm(uri) + + def parse_cache_control(self, headers): + 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 = {} + + 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 cached_request(self, request): + """ + Return a cached response if it exists in the cache, otherwise + return False. + """ + 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 + + # Request allows serving from the cache, let's see if we find something + cache_data = self.cache.get(cache_url) + if cache_data is None: + logger.debug("No cache entry available") + return False + + # Check whether it can be deserialized + resp = self.serializer.loads(request, cache_data) + if not resp: + logger.warning("Cache entry deserialization failed, entry ignored") + return False + + # If we have a cached 301, 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 resp.status == 301: + msg = ( + 'Returning cached "301 Moved Permanently" response ' + "(ignoring date and etag information)" + ) + logger.debug(msg) + return resp + + headers = 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() + date = calendar.timegm(parsedate_tz(headers["date"])) + 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 + if "max-age" in resp_cc: + freshness_lifetime = resp_cc["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) - 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. + if "max-age" in cc: + freshness_lifetime = cc["max-age"] + logger.debug( + "Freshness lifetime from request max-age: %i", freshness_lifetime + ) + + if "min-fresh" in cc: + min_fresh = cc["min-fresh"] + # 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): + cache_url = self.cache_url(request.url) + resp = self.serializer.loads(request, self.cache.get(cache_url)) + new_headers = {} + + if resp: + headers = 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_response(self, request, response, body=None, status_codes=None): + """ + Algorithm for caching requests. + + This assumes a requests Response object. + """ + # 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(response.headers) + + # 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) + + 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 + + # If we've been given an etag, then keep the response + if self.cache_etags and "etag" in response_headers: + logger.debug("Caching due to etag") + self.cache.set( + cache_url, self.serializer.dumps(request, response, body=body) + ) + + # Add to the cache any 301s. We do this before looking that + # the Date headers. + elif response.status == 301: + logger.debug("Caching permanant redirect") + self.cache.set(cache_url, self.serializer.dumps(request, response)) + + # 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: + # cache when there is a max-age > 0 + if "max-age" in cc and cc["max-age"] > 0: + logger.debug("Caching b/c date exists and max-age > 0") + self.cache.set( + cache_url, self.serializer.dumps(request, response, body=body) + ) + + # If the request can expire, it means we should cache it + # in the meantime. + elif "expires" in response_headers: + if response_headers["expires"]: + logger.debug("Caching b/c of expires header") + self.cache.set( + cache_url, self.serializer.dumps(request, response, body=body) + ) + + def update_cached_response(self, request, response): + """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. + """ + cache_url = self.cache_url(request.url) + + cached_response = self.serializer.loads(request, self.cache.get(cache_url)) + + 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 problmatic due to + # typical assumptions. + excluded_headers = ["content-length"] + + cached_response.headers.update( + dict( + (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, self.serializer.dumps(request, cached_response)) + + return cached_response diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/filewrapper.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/filewrapper.py new file mode 100644 index 00000000..30ed4c5a --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/filewrapper.py @@ -0,0 +1,80 @@ +from io import BytesIO + + +class CallbackFileWrapper(object): + """ + 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. + """ + + def __init__(self, fp, callback): + self.__buf = BytesIO() + self.__fp = fp + self.__callback = callback + + def __getattr__(self, name): + # The vaguaries 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 thigns 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): + try: + return self.__fp.fp is None + + except AttributeError: + pass + + try: + return self.__fp.closed + + except AttributeError: + pass + + # We just don't cache it then. + # TODO: Add some logging here... + return False + + def _close(self): + if self.__callback: + self.__callback(self.__buf.getvalue()) + + # 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 + + def read(self, amt=None): + data = self.__fp.read(amt) + self.__buf.write(data) + if self.__is_fp_closed(): + self._close() + + return data + + def _safe_read(self, amt): + data = self.__fp._safe_read(amt) + 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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/heuristics.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/heuristics.py new file mode 100644 index 00000000..6c0e9790 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/heuristics.py @@ -0,0 +1,135 @@ +import calendar +import time + +from email.utils import formatdate, parsedate, parsedate_tz + +from datetime import datetime, timedelta + +TIME_FMT = "%a, %d %b %Y %H:%M:%S GMT" + + +def expire_after(delta, date=None): + date = date or datetime.utcnow() + return date + delta + + +def datetime_to_header(dt): + return formatdate(calendar.timegm(dt.timetuple())) + + +class BaseHeuristic(object): + + def warning(self, response): + """ + 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): + """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): + 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): + headers = {} + + if "expires" not in response.headers: + date = parsedate(response.headers["date"]) + expires = expire_after(timedelta(days=1), date=datetime(*date[:6])) + 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): + self.delta = timedelta(**kw) + + def update_headers(self, response): + expires = expire_after(self.delta) + return {"expires": datetime_to_header(expires), "cache-control": "public"} + + def warning(self, response): + 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): + headers = 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 {} + + date = calendar.timegm(parsedate_tz(headers["date"])) + last_modified = parsedate(headers["last-modified"]) + if date is None or 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): + return None diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/serialize.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/serialize.py new file mode 100644 index 00000000..ec43ff27 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/serialize.py @@ -0,0 +1,186 @@ +import base64 +import io +import json +import zlib + +from pip._vendor import msgpack +from pip._vendor.requests.structures import CaseInsensitiveDict + +from .compat import HTTPResponse, pickle, text_type + + +def _b64_decode_bytes(b): + return base64.b64decode(b.encode("ascii")) + + +def _b64_decode_str(s): + return _b64_decode_bytes(s).decode("utf8") + + +class Serializer(object): + + def dumps(self, request, response, body=None): + response_headers = CaseInsensitiveDict(response.headers) + + if body is None: + body = response.read(decode_content=False) + + # NOTE: 99% sure this is dead code. I'm only leaving it + # here b/c I don't have a test yet to prove + # it. Basically, before using + # `cachecontrol.filewrapper.CallbackFileWrapper`, + # this made an effort to reset the file handle. The + # `CallbackFileWrapper` short circuits this code by + # setting the body as the content is consumed, the + # result being a `body` argument is *always* passed + # into cache_response, and in turn, + # `Serializer.dump`. + response._fp = io.BytesIO(body) + + # NOTE: This is all a bit weird, but it's really important that on + # Python 2.x these objects are unicode and not str, even when + # they contain only ascii. The problem here is that msgpack + # understands the difference between unicode and bytes and we + # have it set to differentiate between them, however Python 2 + # doesn't know the difference. Forcing these to unicode will be + # enough to have msgpack know the difference. + data = { + u"response": { + u"body": body, + u"headers": dict( + (text_type(k), text_type(v)) for k, v in response.headers.items() + ), + u"status": response.status, + u"version": response.version, + u"reason": text_type(response.reason), + u"strict": response.strict, + u"decode_content": response.decode_content, + } + } + + # Construct our vary headers + data[u"vary"] = {} + if u"vary" in response_headers: + varied_headers = response_headers[u"vary"].split(",") + for header in varied_headers: + header = text_type(header).strip() + header_value = request.headers.get(header, None) + if header_value is not None: + header_value = text_type(header_value) + data[u"vary"][header] = header_value + + return b",".join([b"cc=4", msgpack.dumps(data, use_bin_type=True)]) + + def loads(self, request, data): + # Short circuit if we've been given an empty set of data + if not data: + return + + # Determine what version of the serializer the data was serialized + # with + try: + ver, data = data.split(b",", 1) + except ValueError: + ver = b"cc=0" + + # Make sure that our "ver" is actually a version and isn't a false + # positive from a , being in the data stream. + if ver[:3] != b"cc=": + data = ver + data + ver = b"cc=0" + + # Get the version number out of the cc=N + ver = ver.split(b"=", 1)[-1].decode("ascii") + + # Dispatch to the actual load method for the given version + try: + return getattr(self, "_loads_v{}".format(ver))(request, data) + + except AttributeError: + # This is a version we don't have a loads function for, so we'll + # just treat it as a miss and return None + return + + def prepare_response(self, request, cached): + """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. + if "*" in cached.get("vary", {}): + return + + # 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 + + body_raw = cached["response"].pop("body") + + headers = CaseInsensitiveDict(data=cached["response"]["headers"]) + if headers.get("transfer-encoding", "") == "chunked": + headers.pop("transfer-encoding") + + cached["response"]["headers"] = headers + + try: + body = io.BytesIO(body_raw) + 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")) + + return HTTPResponse(body=body, preload_content=False, **cached["response"]) + + def _loads_v0(self, request, data): + # The original legacy cache data. This doesn't contain enough + # information to construct everything we need, so we'll treat this as + # a miss. + return + + def _loads_v1(self, request, data): + try: + cached = pickle.loads(data) + except ValueError: + return + + return self.prepare_response(request, cached) + + def _loads_v2(self, request, data): + try: + cached = json.loads(zlib.decompress(data).decode("utf8")) + except (ValueError, zlib.error): + return + + # We need to decode the items that we've base64 encoded + cached["response"]["body"] = _b64_decode_bytes(cached["response"]["body"]) + cached["response"]["headers"] = dict( + (_b64_decode_str(k), _b64_decode_str(v)) + for k, v in cached["response"]["headers"].items() + ) + cached["response"]["reason"] = _b64_decode_str(cached["response"]["reason"]) + cached["vary"] = dict( + (_b64_decode_str(k), _b64_decode_str(v) if v is not None else v) + for k, v in cached["vary"].items() + ) + + return self.prepare_response(request, cached) + + def _loads_v3(self, request, data): + # Due to Python 2 encoding issues, it's impossible to know for sure + # exactly how to load v3 entries, thus we'll treat these as a miss so + # that they get rewritten out as v4 entries. + return + + def _loads_v4(self, request, data): + try: + cached = msgpack.loads(data, encoding="utf-8") + except ValueError: + return + + return self.prepare_response(request, cached) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/wrapper.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/wrapper.py new file mode 100644 index 00000000..265bfc8b --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/cachecontrol/wrapper.py @@ -0,0 +1,29 @@ +from .adapter import CacheControlAdapter +from .cache import DictCache + + +def CacheControl( + sess, + cache=None, + cache_etags=True, + serializer=None, + heuristic=None, + controller_class=None, + adapter_class=None, + cacheable_methods=None, +): + + cache = cache or DictCache() + 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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/certifi/__init__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/certifi/__init__.py new file mode 100644 index 00000000..632db8e1 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/certifi/__init__.py @@ -0,0 +1,3 @@ +from .core import where + +__version__ = "2019.03.09" diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/certifi/__main__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/certifi/__main__.py new file mode 100644 index 00000000..ae2aff5c --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/certifi/__main__.py @@ -0,0 +1,2 @@ +from pip._vendor.certifi import where +print(where()) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/certifi/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/certifi/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1dc6529543f187ce2a3c06eda9eca8439d67fcca GIT binary patch literal 207 zcmXr!<>iW5rx$C&z`*brh~a<<$Z`PUVi6#b!jQt4!;s4u#mLBz!W6}n!W_(?$?}pB zD5c4Gi?uu>wJ5cU%gDgcQqRCx&%n}8llc})a(+>25y+TZ-0|^csYS(^`FZj2D;bJd zfns3dm$iOLZh?M5W`S-}X=YA}u0df&Qoeyv3P=cyf%@`N@{9D7Q;SM6(=zqr<1_Oz cOXB183My}L*yQG?l;)(`ft*ncvWSNX0LvgVq5uE@ literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/certifi/__pycache__/__main__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/certifi/__pycache__/__main__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ddcede37255c1c0723b56dddb20fc2ce8af7330c GIT binary patch literal 210 zcmXr!<>iW5rx$C=z`*brh~a<<$Z`PUVksbz!jQt4!;s4u#mLBz%9P63%+L&Er7#6E zXfnS9$}?y(-eN7!NG(eB(`1ekF32p<i!V#fOUW<NOHM5+$xO>E0-1M<wV)_7uVf`d z5etw9CVpA#m*f`c19j*om1gFo=o%DeB;^|zrGSLM7;2C{)FA!%_}s+Iy!d#%g34PQ VHo5sJr8%i~j6m~>L00fE0sy%^H8KDI literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/certifi/__pycache__/core.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/certifi/__pycache__/core.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..50b53a10433ef37fed2dbff8692f2a34af219259 GIT binary patch literal 419 zcmYjNu};G<5Vf6D4OY7&rmPv7R4}k0gv8zjSR#;>#*X63iG$;UsDP#X3=1FRm5E<q z;+&$wliu^`EWLYoC(|jt{YdW|Lg*8?2Z8DW*dKy$lp~HgQ8>pu;Ncs}2`5)58EtN8 zDU6ksOuHxgx(B7#wd~_Y^R*JO5q53bKDM=pW!u|AslrO##!8pFLRWEFc&D@zO-jFD zC|Z<WJuol;UIP0g5Q|oLMQpIeFS|N?hJafii7Yns&ng)?qI(y1g{|F~OVbvOa1mpb zRDv-VuC#0u>~QstOa#u~r<rZKtdrerxt5C0=J)kd&yTrp4P+0Z<=SMwduOFK0+x59 v$66RM@exB1geSyMc$2`58RNQS%=oJg&0*F*Ie-rro$c;*?t=^_A&!C{!gp+@ literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/certifi/cacert.pem b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/certifi/cacert.pem new file mode 100644 index 00000000..84636dde --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/certifi/cacert.pem @@ -0,0 +1,4658 @@ + +# Issuer: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA +# Subject: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA +# Label: "GlobalSign Root CA" +# Serial: 4835703278459707669005204 +# MD5 Fingerprint: 3e:45:52:15:09:51:92:e1:b7:5d:37:9f:b1:87:29:8a +# SHA1 Fingerprint: b1:bc:96:8b:d4:f4:9d:62:2a:a8:9a:81:f2:15:01:52:a4:1d:82:9c +# SHA256 Fingerprint: eb:d4:10:40:e4:bb:3e:c7:42:c9:e3:81:d3:1e:f2:a4:1a:48:b6:68:5c:96:e7:ce:f3:c1:df:6c:d4:33:1c:99 +-----BEGIN CERTIFICATE----- +MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG +A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv +b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw +MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i +YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT +aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ +jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp +xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp +1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG +snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ +U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8 +9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E +BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B +AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz +yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE +38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP +AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad +DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME +HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R2 +# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R2 +# Label: "GlobalSign Root CA - R2" +# Serial: 4835703278459682885658125 +# MD5 Fingerprint: 94:14:77:7e:3e:5e:fd:8f:30:bd:41:b0:cf:e7:d0:30 +# SHA1 Fingerprint: 75:e0:ab:b6:13:85:12:27:1c:04:f8:5f:dd:de:38:e4:b7:24:2e:fe +# SHA256 Fingerprint: ca:42:dd:41:74:5f:d0:b8:1e:b9:02:36:2c:f9:d8:bf:71:9d:a1:bd:1b:1e:fc:94:6f:5b:4c:99:f4:2c:1b:9e +-----BEGIN CERTIFICATE----- +MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G +A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp +Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1 +MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG +A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL +v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8 +eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq +tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd +C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa +zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB +mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH +V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n +bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG +3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs +J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO +291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS +ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd +AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7 +TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== +-----END CERTIFICATE----- + +# Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only +# Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only +# Label: "Verisign Class 3 Public Primary Certification Authority - G3" +# Serial: 206684696279472310254277870180966723415 +# MD5 Fingerprint: cd:68:b6:a7:c7:c4:ce:75:e0:1d:4f:57:44:61:92:09 +# SHA1 Fingerprint: 13:2d:0d:45:53:4b:69:97:cd:b2:d5:c3:39:e2:55:76:60:9b:5c:c6 +# SHA256 Fingerprint: eb:04:cf:5e:b1:f3:9a:fa:76:2f:2b:b1:20:f2:96:cb:a5:20:c1:b9:7d:b1:58:95:65:b8:1c:b9:a1:7b:72:44 +-----BEGIN CERTIFICATE----- +MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw +CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl +cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu +LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT +aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp +dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD +VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT +aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ +bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu +IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg +LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b +N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t +KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu +kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm +CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ +Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu +imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te +2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe +DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC +/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p +F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt +TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== +-----END CERTIFICATE----- + +# Issuer: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited +# Subject: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited +# Label: "Entrust.net Premium 2048 Secure Server CA" +# Serial: 946069240 +# MD5 Fingerprint: ee:29:31:bc:32:7e:9a:e6:e8:b5:f7:51:b4:34:71:90 +# SHA1 Fingerprint: 50:30:06:09:1d:97:d4:f5:ae:39:f7:cb:e7:92:7d:7d:65:2d:34:31 +# SHA256 Fingerprint: 6d:c4:71:72:e0:1c:bc:b0:bf:62:58:0d:89:5f:e2:b8:ac:9a:d4:f8:73:80:1e:0c:10:b9:c8:37:d2:1e:b1:77 +-----BEGIN CERTIFICATE----- +MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML +RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp +bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5 +IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0yOTA3 +MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3 +LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp +YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG +A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq +K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe +sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX +MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT +XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/ +HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH +4QIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV +HQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJKoZIhvcNAQEFBQADggEBADub +j1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPyT/4xmf3IDExo +U8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf +zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5b +u/8j72gZyxKTJ1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+ +bYQLCIt+jerXmCHG8+c8eS9enNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/Er +fF6adulZkMV8gzURZVE= +-----END CERTIFICATE----- + +# Issuer: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust +# Subject: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust +# Label: "Baltimore CyberTrust Root" +# Serial: 33554617 +# MD5 Fingerprint: ac:b6:94:a5:9c:17:e0:d7:91:52:9b:b1:97:06:a6:e4 +# SHA1 Fingerprint: d4:de:20:d0:5e:66:fc:53:fe:1a:50:88:2c:78:db:28:52:ca:e4:74 +# SHA256 Fingerprint: 16:af:57:a9:f6:76:b0:ab:12:60:95:aa:5e:ba:de:f2:2a:b3:11:19:d6:44:ac:95:cd:4b:93:db:f3:f2:6a:eb +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ +RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD +VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX +DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y +ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy +VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr +mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr +IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK +mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu +XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy +dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye +jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1 +BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3 +DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92 +9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx +jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0 +Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz +ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS +R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp +-----END CERTIFICATE----- + +# Issuer: CN=AddTrust External CA Root O=AddTrust AB OU=AddTrust External TTP Network +# Subject: CN=AddTrust External CA Root O=AddTrust AB OU=AddTrust External TTP Network +# Label: "AddTrust External Root" +# Serial: 1 +# MD5 Fingerprint: 1d:35:54:04:85:78:b0:3f:42:42:4d:bf:20:73:0a:3f +# SHA1 Fingerprint: 02:fa:f3:e2:91:43:54:68:60:78:57:69:4d:f5:e4:5b:68:85:18:68 +# SHA256 Fingerprint: 68:7f:a4:51:38:22:78:ff:f0:c8:b1:1f:8d:43:d5:76:67:1c:6e:b2:bc:ea:b4:13:fb:83:d9:65:d0:6d:2f:f2 +-----BEGIN CERTIFICATE----- +MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU +MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs +IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290 +MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux +FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h +bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v +dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt +H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9 +uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX +mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX +a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN +E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0 +WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD +VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0 +Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU +cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx +IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN +AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH +YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 +6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC +Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX +c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a +mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= +-----END CERTIFICATE----- + +# Issuer: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc. +# Subject: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc. +# Label: "Entrust Root Certification Authority" +# Serial: 1164660820 +# MD5 Fingerprint: d6:a5:c3:ed:5d:dd:3e:00:c1:3d:87:92:1f:1d:3f:e4 +# SHA1 Fingerprint: b3:1e:b1:b7:40:e3:6c:84:02:da:dc:37:d4:4d:f5:d4:67:49:52:f9 +# SHA256 Fingerprint: 73:c1:76:43:4f:1b:c6:d5:ad:f4:5b:0e:76:e7:27:28:7c:8d:e5:76:16:c1:e6:e6:14:1a:2b:2c:bc:7d:8e:4c +-----BEGIN CERTIFICATE----- +MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC +VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0 +Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW +KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl +cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw +NTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw +NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy +ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV +BAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ +KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo +Nu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4 +4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9 +KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI +rb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi +94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB +sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi +gA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo +kORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE +vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA +A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t +O1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua +AGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP +9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/ +eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m +0vdXcDazv/wor3ElhVsT/h5/WrQ8 +-----END CERTIFICATE----- + +# Issuer: CN=GeoTrust Global CA O=GeoTrust Inc. +# Subject: CN=GeoTrust Global CA O=GeoTrust Inc. +# Label: "GeoTrust Global CA" +# Serial: 144470 +# MD5 Fingerprint: f7:75:ab:29:fb:51:4e:b7:77:5e:ff:05:3c:99:8e:f5 +# SHA1 Fingerprint: de:28:f4:a4:ff:e5:b9:2f:a3:c5:03:d1:a3:49:a7:f9:96:2a:82:12 +# SHA256 Fingerprint: ff:85:6a:2d:25:1d:cd:88:d3:66:56:f4:50:12:67:98:cf:ab:aa:de:40:79:9c:72:2d:e4:d2:b5:db:36:a7:3a +-----BEGIN CERTIFICATE----- +MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT +MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i +YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG +EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg +R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9 +9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq +fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv +iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU +1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+ +bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW +MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA +ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l +uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn +Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS +tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF +PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un +hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV +5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw== +-----END CERTIFICATE----- + +# Issuer: CN=GeoTrust Universal CA O=GeoTrust Inc. +# Subject: CN=GeoTrust Universal CA O=GeoTrust Inc. +# Label: "GeoTrust Universal CA" +# Serial: 1 +# MD5 Fingerprint: 92:65:58:8b:a2:1a:31:72:73:68:5c:b4:a5:7a:07:48 +# SHA1 Fingerprint: e6:21:f3:35:43:79:05:9a:4b:68:30:9d:8a:2f:74:22:15:87:ec:79 +# SHA256 Fingerprint: a0:45:9b:9f:63:b2:25:59:f5:fa:5d:4c:6d:b3:f9:f7:2f:f1:93:42:03:35:78:f0:73:bf:1d:1b:46:cb:b9:12 +-----BEGIN CERTIFICATE----- +MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEW +MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVy +c2FsIENBMB4XDTA0MDMwNDA1MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UE +BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xHjAcBgNVBAMTFUdlb1RydXN0 +IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKYV +VaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9tJPi8 +cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTT +QjOgNB0eRXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFh +F7em6fgemdtzbvQKoiFs7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2v +c7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d8Lsrlh/eezJS/R27tQahsiFepdaVaH/w +mZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7VqnJNk22CDtucvc+081xd +VHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3CgaRr0BHdCX +teGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZ +f9hBZ3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfRe +Bi9Fi1jUIxaS5BZuKGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+ +nhutxx9z3SxPGWX9f5NAEC7S8O08ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB +/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0XG0D08DYj3rWMB8GA1UdIwQY +MBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG +9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc +aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fX +IwjhmF7DWgh2qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzyn +ANXH/KttgCJwpQzgXQQpAvvLoJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0z +uzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsKxr2EoyNB3tZ3b4XUhRxQ4K5RirqN +Pnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxFKyDuSN/n3QmOGKja +QI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2DFKW +koRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9 +ER/frslKxfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQt +DF4JbAiXfKM9fJP/P6EUp8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/Sfuvm +bJxPgWp6ZKy7PtXny3YuxadIwVyQD8vIP/rmMuGNG2+k5o7Y+SlIis5z/iw= +-----END CERTIFICATE----- + +# Issuer: CN=GeoTrust Universal CA 2 O=GeoTrust Inc. +# Subject: CN=GeoTrust Universal CA 2 O=GeoTrust Inc. +# Label: "GeoTrust Universal CA 2" +# Serial: 1 +# MD5 Fingerprint: 34:fc:b8:d0:36:db:9e:14:b3:c2:f2:db:8f:e4:94:c7 +# SHA1 Fingerprint: 37:9a:19:7b:41:85:45:35:0c:a6:03:69:f3:3c:2e:af:47:4f:20:79 +# SHA256 Fingerprint: a0:23:4f:3b:c8:52:7c:a5:62:8e:ec:81:ad:5d:69:89:5d:a5:68:0d:c9:1d:1c:b8:47:7f:33:f8:78:b9:5b:0b +-----BEGIN CERTIFICATE----- +MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEW +MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVy +c2FsIENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYD +VQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1 +c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC +AQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0DE81 +WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUG +FF+3Qs17j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdq +XbboW0W63MOhBW9Wjo8QJqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxL +se4YuU6W3Nx2/zu+z18DwPw76L5GG//aQMJS9/7jOvdqdzXQ2o3rXhhqMcceujwb +KNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2WP0+GfPtDCapkzj4T8Fd +IgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP20gaXT73 +y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRt +hAAnZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgoc +QIgfksILAAX/8sgCSqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4 +Lt1ZrtmhN79UNdxzMk+MBB4zsslG8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAfBgNV +HSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8EBAMCAYYwDQYJ +KoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z +dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQ +L1EuxBRa3ugZ4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgr +Fg5fNuH8KrUwJM/gYwx7WBr+mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSo +ag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpqA1Ihn0CoZ1Dy81of398j9tx4TuaY +T1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpgY+RdM4kX2TGq2tbz +GDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiPpm8m +1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJV +OCiNUW7dFGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH +6aLcr34YEoP9VhdBLtUpgn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwX +QMAJKOSLakhT2+zNVVXxxvjpoixMptEmX36vWkzaH6byHCx+rgIW0lbQL1dTR+iS +-----END CERTIFICATE----- + +# Issuer: CN=AAA Certificate Services O=Comodo CA Limited +# Subject: CN=AAA Certificate Services O=Comodo CA Limited +# Label: "Comodo AAA Services root" +# Serial: 1 +# MD5 Fingerprint: 49:79:04:b0:eb:87:19:ac:47:b0:bc:11:51:9b:74:d0 +# SHA1 Fingerprint: d1:eb:23:a4:6d:17:d6:8f:d9:25:64:c2:f1:f1:60:17:64:d8:e3:49 +# SHA256 Fingerprint: d7:a7:a0:fb:5d:7e:27:31:d7:71:e9:48:4e:bc:de:f7:1d:5f:0c:3e:0a:29:48:78:2b:c8:3e:e0:ea:69:9e:f4 +-----BEGIN CERTIFICATE----- +MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb +MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow +GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj +YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL +MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE +BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM +GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua +BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe +3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4 +YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR +rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm +ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU +oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF +MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v +QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t +b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF +AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q +GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz +Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2 +G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi +l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3 +smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== +-----END CERTIFICATE----- + +# Issuer: CN=QuoVadis Root Certification Authority O=QuoVadis Limited OU=Root Certification Authority +# Subject: CN=QuoVadis Root Certification Authority O=QuoVadis Limited OU=Root Certification Authority +# Label: "QuoVadis Root CA" +# Serial: 985026699 +# MD5 Fingerprint: 27:de:36:fe:72:b7:00:03:00:9d:f4:f0:1e:6c:04:24 +# SHA1 Fingerprint: de:3f:40:bd:50:93:d3:9b:6c:60:f6:da:bc:07:62:01:00:89:76:c9 +# SHA256 Fingerprint: a4:5e:de:3b:bb:f0:9c:8a:e1:5c:72:ef:c0:72:68:d6:93:a2:1c:99:6f:d5:1e:67:ca:07:94:60:fd:6d:88:73 +-----BEGIN CERTIFICATE----- +MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJC +TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0 +aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0 +aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAzMTkxODMzMzNaFw0yMTAzMTcxODMz +MzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUw +IwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVR +dW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Yp +li4kVEAkOPcahdxYTMukJ0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2D +rOpm2RgbaIr1VxqYuvXtdj182d6UajtLF8HVj71lODqV0D1VNk7feVcxKh7YWWVJ +WCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeLYzcS19Dsw3sgQUSj7cug +F+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWenAScOospU +xbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCC +Ak4wPQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVv +dmFkaXNvZmZzaG9yZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREw +ggENMIIBCQYJKwYBBAG+WAABMIH7MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNl +IG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBh +c3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFy +ZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh +Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYI +KwYBBQUHAgEWFmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3T +KbkGGew5Oanwl4Rqy+/fMIGuBgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rq +y+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1p +dGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYD +VQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6tlCL +MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSk +fnIYj9lofFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf8 +7C9TqnN7Az10buYWnuulLsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1R +cHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2xgI4JVrmcGmD+XcHXetwReNDWXcG31a0y +mQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi5upZIof4l/UO/erMkqQW +xFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi5nrQNiOK +SnQ2+Q== +-----END CERTIFICATE----- + +# 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: O=SECOM Trust.net OU=Security Communication RootCA1 +# Subject: O=SECOM Trust.net OU=Security Communication RootCA1 +# Label: "Security Communication Root CA" +# Serial: 0 +# MD5 Fingerprint: f1:bc:63:6a:54:e0:b5:27:f5:cd:e7:1a:e3:4d:6e:4a +# SHA1 Fingerprint: 36:b1:2b:49:f9:81:9e:d7:4c:9e:bc:38:0f:c6:56:8f:5d:ac:b2:f7 +# SHA256 Fingerprint: e7:5e:72:ed:9f:56:0e:ec:6e:b4:80:00:73:a4:3f:c3:ad:19:19:5a:39:22:82:01:78:95:97:4a:99:02:6b:6c +-----BEGIN CERTIFICATE----- +MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEY +MBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21t +dW5pY2F0aW9uIFJvb3RDQTEwHhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5 +WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYD +VQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw8yl8 +9f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJ +DKaVv0uMDPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9 +Ms+k2Y7CI9eNqPPYJayX5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/N +QV3Is00qVUarH9oe4kA92819uZKAnDfdDJZkndwi92SL32HeFZRSFaB9UslLqCHJ +xrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2JChzAgMBAAGjPzA9MB0G +A1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYwDwYDVR0T +AQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vG +kl3g0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfr +Uj94nK9NrvjVT8+amCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5 +Bw+SUEmK3TGXX8npN6o7WWWXlDLJs58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJU +JRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ6rBK+1YWc26sTfcioU+tHXot +RSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAiFL39vmwLAw== +-----END CERTIFICATE----- + +# Issuer: CN=Sonera Class2 CA O=Sonera +# Subject: CN=Sonera Class2 CA O=Sonera +# Label: "Sonera Class 2 Root CA" +# Serial: 29 +# MD5 Fingerprint: a3:ec:75:0f:2e:88:df:fa:48:01:4e:0b:5c:48:6f:fb +# SHA1 Fingerprint: 37:f7:6d:e6:07:7c:90:c5:b1:3e:93:1a:b7:41:10:b4:f2:e4:9a:27 +# SHA256 Fingerprint: 79:08:b4:03:14:c1:38:10:0b:51:8d:07:35:80:7f:fb:fc:f8:51:8a:00:95:33:71:05:ba:38:6b:15:3d:d9:27 +-----BEGIN CERTIFICATE----- +MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP +MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAx +MDQwNjA3Mjk0MFoXDTIxMDQwNjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNV +BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMiBDQTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3/Ei9vX+ALTU74W+o +Z6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybTdXnt +5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s +3TmVToMGf+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2Ej +vOr7nQKV0ba5cTppCD8PtOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu +8nYybieDwnPz3BjotJPqdURrBGAgcVeHnfO+oJAjPYok4doh28MCAwEAAaMzMDEw +DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITTXjwwCwYDVR0PBAQDAgEG +MA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt0jSv9zil +zqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/ +3DEIcbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvD +FNr450kkkdAdavphOe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6 +Tk6ezAyNlNzZRZxe7EJQY670XcSxEtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2 +ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLHllpwrN9M +-----END CERTIFICATE----- + +# Issuer: CN=XRamp Global Certification Authority O=XRamp Security Services Inc OU=www.xrampsecurity.com +# Subject: CN=XRamp Global Certification Authority O=XRamp Security Services Inc OU=www.xrampsecurity.com +# Label: "XRamp Global CA Root" +# Serial: 107108908803651509692980124233745014957 +# MD5 Fingerprint: a1:0b:44:b3:ca:10:d8:00:6e:9d:0f:d8:0f:92:0a:d1 +# SHA1 Fingerprint: b8:01:86:d1:eb:9c:86:a5:41:04:cf:30:54:f3:4c:52:b7:e5:58:c6 +# SHA256 Fingerprint: ce:cd:dc:90:50:99:d8:da:df:c5:b1:d2:09:b7:37:cb:e2:c1:8c:fb:2c:10:c0:ff:0b:cf:0d:32:86:fc:1a:a2 +-----BEGIN CERTIFICATE----- +MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB +gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk +MCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRY +UmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQxMTAxMTcx +NDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3 +dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2Vy +dmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS6 +38eMpSe2OAtp87ZOqCwuIR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCP +KZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7Q +DxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4 +qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRa +JSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNVi +PvryxS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0P +BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASs +jVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0 +eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcNAQEFBQAD +ggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc/Kh4ZzXxHfAR +vbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt +qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLa +IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy +i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ +O+7ETPTsJ3xCwnR8gooJybQDJbw= +-----END CERTIFICATE----- + +# Issuer: O=The Go Daddy Group, Inc. OU=Go Daddy Class 2 Certification Authority +# Subject: O=The Go Daddy Group, Inc. OU=Go Daddy Class 2 Certification Authority +# Label: "Go Daddy Class 2 CA" +# Serial: 0 +# MD5 Fingerprint: 91:de:06:25:ab:da:fd:32:17:0c:bb:25:17:2a:84:67 +# SHA1 Fingerprint: 27:96:ba:e6:3f:18:01:e2:77:26:1b:a0:d7:77:70:02:8f:20:ee:e4 +# SHA256 Fingerprint: c3:84:6b:f2:4b:9e:93:ca:64:27:4c:0e:c6:7c:1e:cc:5e:02:4f:fc:ac:d2:d7:40:19:35:0e:81:fe:54:6a:e4 +-----BEGIN CERTIFICATE----- +MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh +MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE +YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3 +MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo +ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg +MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN +ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA +PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w +wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi +EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY +avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+ +YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE +sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h +/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5 +IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj +YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD +ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy +OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P +TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ +HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER +dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf +ReYNnyicsbkqWletNw+vHX/bvZ8= +-----END CERTIFICATE----- + +# Issuer: O=Starfield Technologies, Inc. OU=Starfield Class 2 Certification Authority +# Subject: O=Starfield Technologies, Inc. OU=Starfield Class 2 Certification Authority +# Label: "Starfield Class 2 CA" +# Serial: 0 +# MD5 Fingerprint: 32:4a:4b:bb:c8:63:69:9b:be:74:9a:c6:dd:1d:46:24 +# SHA1 Fingerprint: ad:7e:1c:28:b0:64:ef:8f:60:03:40:20:14:c3:d0:e3:37:0e:b5:8a +# SHA256 Fingerprint: 14:65:fa:20:53:97:b8:76:fa:a6:f0:a9:95:8e:55:90:e4:0f:cc:7f:aa:4f:b7:c2:c8:67:75:21:fb:5f:b6:58 +-----BEGIN CERTIFICATE----- +MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl +MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp +U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw +NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE +ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp +ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3 +DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf +8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN ++lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0 +X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa +K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA +1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G +A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR +zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0 +YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD +bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w +DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3 +L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D +eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl +xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp +VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY +WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q= +-----END CERTIFICATE----- + +# Issuer: O=Government Root Certification Authority +# Subject: O=Government Root Certification Authority +# Label: "Taiwan GRCA" +# Serial: 42023070807708724159991140556527066870 +# MD5 Fingerprint: 37:85:44:53:32:45:1f:20:f0:f3:95:e1:25:c4:43:4e +# SHA1 Fingerprint: f4:8b:11:bf:de:ab:be:94:54:20:71:e6:41:de:6b:be:88:2b:40:b9 +# SHA256 Fingerprint: 76:00:29:5e:ef:e8:5b:9e:1f:d6:24:db:76:06:2a:aa:ae:59:81:8a:54:d2:77:4c:d4:c0:b2:c0:11:31:e1:b3 +-----BEGIN CERTIFICATE----- +MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/ +MQswCQYDVQQGEwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmlj +YXRpb24gQXV0aG9yaXR5MB4XDTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1ow +PzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dvdmVybm1lbnQgUm9vdCBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB +AJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qNw8XR +IePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1q +gQdW8or5BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKy +yhwOeYHWtXBiCAEuTk8O1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAts +F/tnyMKtsc2AtJfcdgEWFelq16TheEfOhtX7MfP6Mb40qij7cEwdScevLJ1tZqa2 +jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wovJ5pGfaENda1UhhXcSTvx +ls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7Q3hub/FC +VGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHK +YS1tB6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoH +EgKXTiCQ8P8NHuJBO9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThN +Xo+EHWbNxWCWtFJaBYmOlXqYwZE8lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1Ud +DgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNVHRMEBTADAQH/MDkGBGcqBwAE +MTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg209yewDL7MTqK +UWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ +TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyf +qzvS/3WXy6TjZwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaK +ZEk9GhiHkASfQlK3T8v+R0F2Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFE +JPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlUD7gsL0u8qV1bYH+Mh6XgUmMqvtg7 +hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6QzDxARvBMB1uUO07+1 +EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+HbkZ6Mm +nD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WX +udpVBrkk7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44Vbnz +ssQwmSNOXfJIoRIM3BKQCZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDe +LMDDav7v3Aun+kbfYNucpllQdSNpc5Oy+fwC00fmcc4QAu4njIT/rEUNE1yDMuAl +pYYsfPQS +-----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=Class 2 Primary CA O=Certplus +# Subject: CN=Class 2 Primary CA O=Certplus +# Label: "Certplus Class 2 Primary CA" +# Serial: 177770208045934040241468760488327595043 +# MD5 Fingerprint: 88:2c:8c:52:b8:a2:3c:f3:f7:bb:03:ea:ae:ac:42:0b +# SHA1 Fingerprint: 74:20:74:41:72:9c:dd:92:ec:79:31:d8:23:10:8d:c2:81:92:e2:bb +# SHA256 Fingerprint: 0f:99:3c:8a:ef:97:ba:af:56:87:14:0e:d5:9a:d1:82:1b:b4:af:ac:f0:aa:9a:58:b5:d5:7a:33:8a:3a:fb:cb +-----BEGIN CERTIFICATE----- +MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAw +PTELMAkGA1UEBhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFz +cyAyIFByaW1hcnkgQ0EwHhcNOTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9 +MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2VydHBsdXMxGzAZBgNVBAMTEkNsYXNz +IDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANxQ +ltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR5aiR +VhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyL +kcAbmXuZVg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCd +EgETjdyAYveVqUSISnFOYFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yas +H7WLO7dDWWuwJKZtkIvEcupdM5i3y95ee++U8Rs+yskhwcWYAqqi9lt3m/V+llU0 +HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRMECDAGAQH/AgEKMAsGA1Ud +DwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJYIZIAYb4 +QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMu +Y29tL0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/ +AN9WM2K191EBkOvDP9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8 +yfFC82x/xXp8HVGIutIKPidd3i1RTtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMR +FcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+7UCmnYR0ObncHoUW2ikbhiMA +ybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW//1IMwrh3KWB +kJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7 +l7+ijrRU +-----END CERTIFICATE----- + +# Issuer: CN=DST Root CA X3 O=Digital Signature Trust Co. +# Subject: CN=DST Root CA X3 O=Digital Signature Trust Co. +# Label: "DST Root CA X3" +# Serial: 91299735575339953335919266965803778155 +# MD5 Fingerprint: 41:03:52:dc:0f:f7:50:1b:16:f0:02:8e:ba:6f:45:c5 +# SHA1 Fingerprint: da:c9:02:4f:54:d8:f6:df:94:93:5f:b1:73:26:38:ca:6a:d7:7c:13 +# SHA256 Fingerprint: 06:87:26:03:31:a7:24:03:d9:09:f1:05:e6:9b:cf:0d:32:e1:bd:24:93:ff:c6:d9:20:6d:11:bc:d6:77:07:39 +-----BEGIN CERTIFICATE----- +MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/ +MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT +DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow +PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD +Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O +rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq +OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b +xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw +7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD +aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV +HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG +SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69 +ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr +AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz +R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5 +JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo +Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ +-----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=SwissSign Silver CA - G2 O=SwissSign AG +# Subject: CN=SwissSign Silver CA - G2 O=SwissSign AG +# Label: "SwissSign Silver CA - G2" +# Serial: 5700383053117599563 +# MD5 Fingerprint: e0:06:a1:c9:7d:cf:c9:fc:0d:c0:56:75:96:d8:62:13 +# SHA1 Fingerprint: 9b:aa:e5:9f:56:ee:21:cb:43:5a:be:25:93:df:a7:f0:40:d1:1d:cb +# SHA256 Fingerprint: be:6c:4d:a2:bb:b9:ba:59:b6:f3:93:97:68:37:42:46:c3:c0:05:99:3f:a9:8f:02:0d:1d:ed:be:d4:8a:81:d5 +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +# Issuer: CN=GeoTrust Primary Certification Authority O=GeoTrust Inc. +# Subject: CN=GeoTrust Primary Certification Authority O=GeoTrust Inc. +# Label: "GeoTrust Primary Certification Authority" +# Serial: 32798226551256963324313806436981982369 +# MD5 Fingerprint: 02:26:c3:01:5e:08:30:37:43:a9:d0:7d:cf:37:e6:bf +# SHA1 Fingerprint: 32:3c:11:8e:1b:f7:b8:b6:52:54:e2:e2:10:0d:d6:02:90:37:f0:96 +# SHA256 Fingerprint: 37:d5:10:06:c5:12:ea:ab:62:64:21:f1:ec:8c:92:01:3f:c5:f8:2a:e9:8e:e5:33:eb:46:19:b8:de:b4:d0:6c +-----BEGIN CERTIFICATE----- +MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBY +MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMo +R2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEx +MjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgxCzAJBgNVBAYTAlVTMRYwFAYDVQQK +Ew1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQcmltYXJ5IENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9 +AWbK7hWNb6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjA +ZIVcFU2Ix7e64HXprQU9nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE0 +7e9GceBrAqg1cmuXm2bgyxx5X9gaBGgeRwLmnWDiNpcB3841kt++Z8dtd1k7j53W +kBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGttm/81w7a4DSwDRp35+MI +mO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G +A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJ +KoZIhvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ1 +6CePbJC/kRYkRj5KTs4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl +4b7UVXGYNTq+k+qurUKykG/g/CFNNWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6K +oKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHaFloxt/m0cYASSJlyc1pZU8Fj +UjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG1riR/aYNKxoU +AT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk= +-----END CERTIFICATE----- + +# Issuer: CN=thawte Primary Root CA O=thawte, Inc. OU=Certification Services Division/(c) 2006 thawte, Inc. - For authorized use only +# Subject: CN=thawte Primary Root CA O=thawte, Inc. OU=Certification Services Division/(c) 2006 thawte, Inc. - For authorized use only +# Label: "thawte Primary Root CA" +# Serial: 69529181992039203566298953787712940909 +# MD5 Fingerprint: 8c:ca:dc:0b:22:ce:f5:be:72:ac:41:1a:11:a8:d8:12 +# SHA1 Fingerprint: 91:c6:d6:ee:3e:8a:c8:63:84:e5:48:c2:99:29:5c:75:6c:81:7b:81 +# SHA256 Fingerprint: 8d:72:2f:81:a9:c1:13:c0:79:1d:f1:36:a2:96:6d:b2:6c:95:0a:97:1d:b4:6b:41:99:f4:ea:54:b7:8b:fb:9f +-----BEGIN CERTIFICATE----- +MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCB +qTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf +Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw +MDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNV +BAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3MDAwMDAwWhcNMzYw +NzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5j +LjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYG +A1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl +IG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCsoPD7gFnUnMekz52hWXMJEEUMDSxuaPFs +W0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ1CRfBsDMRJSUjQJib+ta +3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGcq/gcfomk +6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6 +Sk/KaAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94J +NqR32HuHUETVPm4pafs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBA +MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XP +r87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUFAAOCAQEAeRHAS7ORtvzw6WfU +DW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeEuzLlQRHAd9mz +YJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX +xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2 +/qxAeeWsEG89jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/ +LHbTY5xZ3Y+m4Q6gLkH3LpVHz7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7 +jVaMaA== +-----END CERTIFICATE----- + +# Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G5 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2006 VeriSign, Inc. - For authorized use only +# Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G5 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2006 VeriSign, Inc. - For authorized use only +# Label: "VeriSign Class 3 Public Primary Certification Authority - G5" +# Serial: 33037644167568058970164719475676101450 +# MD5 Fingerprint: cb:17:e4:31:67:3e:e2:09:fe:45:57:93:f3:0a:fa:1c +# SHA1 Fingerprint: 4e:b6:d5:78:49:9b:1c:cf:5f:58:1e:ad:56:be:3d:9b:67:44:a5:e5 +# SHA256 Fingerprint: 9a:cf:ab:7e:43:c8:d8:80:d0:6b:26:2a:94:de:ee:e4:b4:65:99:89:c3:d0:ca:f1:9b:af:64:05:e4:1a:b7:df +-----BEGIN CERTIFICATE----- +MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB +yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL +ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp +U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW +ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL +MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW +ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln +biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp +U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y +aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1 +nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex +t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz +SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG +BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+ +rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/ +NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E +BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH +BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy +aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv +MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE +p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y +5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK +WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ +4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N +hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq +-----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=Network Solutions Certificate Authority O=Network Solutions L.L.C. +# Subject: CN=Network Solutions Certificate Authority O=Network Solutions L.L.C. +# Label: "Network Solutions Certificate Authority" +# Serial: 116697915152937497490437556386812487904 +# MD5 Fingerprint: d3:f3:a6:16:c0:fa:6b:1d:59:b1:2d:96:4d:0e:11:2e +# SHA1 Fingerprint: 74:f8:a3:c3:ef:e7:b3:90:06:4b:83:90:3c:21:64:60:20:e5:df:ce +# SHA256 Fingerprint: 15:f0:ba:00:a3:ac:7a:f3:ac:88:4c:07:2b:10:11:a0:77:bd:77:c0:97:f4:01:64:b2:f8:59:8a:bd:83:86:0c +-----BEGIN CERTIFICATE----- +MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBi +MQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu +MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3Jp +dHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMxMjM1OTU5WjBiMQswCQYDVQQGEwJV +UzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydO +ZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwz +c7MEL7xxjOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPP +OCwGJgl6cvf6UDL4wpPTaaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rl +mGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXTcrA/vGp97Eh/jcOrqnErU2lBUzS1sLnF +BgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc/Qzpf14Dl847ABSHJ3A4 +qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMBAAGjgZcw +gZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIB +BjAPBgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwu +bmV0c29sc3NsLmNvbS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3Jp +dHkuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc8 +6fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q4LqILPxFzBiwmZVRDuwduIj/ +h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/GGUsyfJj4akH +/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv +wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHN +pGxlaKFJdlxDydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey +-----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=OISTE WISeKey Global Root GA CA O=WISeKey OU=Copyright (c) 2005/OISTE Foundation Endorsed +# Subject: CN=OISTE WISeKey Global Root GA CA O=WISeKey OU=Copyright (c) 2005/OISTE Foundation Endorsed +# Label: "OISTE WISeKey Global Root GA CA" +# Serial: 86718877871133159090080555911823548314 +# MD5 Fingerprint: bc:6c:51:33:a7:e9:d3:66:63:54:15:72:1b:21:92:93 +# SHA1 Fingerprint: 59:22:a1:e1:5a:ea:16:35:21:f8:98:39:6a:46:46:b0:44:1b:0f:a9 +# SHA256 Fingerprint: 41:c9:23:86:6a:b4:ca:d6:b7:ad:57:80:81:58:2e:02:07:97:a6:cb:df:4f:ff:78:ce:83:96:b3:89:37:d7:f5 +-----BEGIN CERTIFICATE----- +MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCB +ijELMAkGA1UEBhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHly +aWdodCAoYykgMjAwNTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl +ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQSBDQTAeFw0w +NTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYDVQQGEwJDSDEQMA4G +A1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIwIAYD +VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBX +SVNlS2V5IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAy0+zAJs9Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxR +VVuuk+g3/ytr6dTqvirdqFEr12bDYVxgAsj1znJ7O7jyTmUIms2kahnBAbtzptf2 +w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbDd50kc3vkDIzh2TbhmYsF +mQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ/yxViJGg +4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t9 +4B3RLoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYw +DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQw +EAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOx +SPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vImMMkQyh2I+3QZH4VFvbBsUfk2 +ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4+vg1YFkCExh8 +vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa +hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZi +Fj4A4xylNoEYokxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ +/L7fCg0= +-----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: CN=Deutsche Telekom Root CA 2 O=Deutsche Telekom AG OU=T-TeleSec Trust Center +# Subject: CN=Deutsche Telekom Root CA 2 O=Deutsche Telekom AG OU=T-TeleSec Trust Center +# Label: "Deutsche Telekom Root CA 2" +# Serial: 38 +# MD5 Fingerprint: 74:01:4a:91:b1:08:c4:58:ce:47:cd:f0:dd:11:53:08 +# SHA1 Fingerprint: 85:a4:08:c0:9c:19:3e:5d:51:58:7d:cd:d6:13:30:fd:8c:de:37:bf +# SHA256 Fingerprint: b6:19:1a:50:d0:c3:97:7f:7d:a9:9b:cd:aa:c8:6a:22:7d:ae:b9:67:9e:c7:0b:a3:b0:c9:d9:22:71:c1:70:d3 +-----BEGIN CERTIFICATE----- +MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEc +MBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2Vj +IFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENB +IDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5MjM1OTAwWjBxMQswCQYDVQQGEwJE +RTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxl +U2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290 +IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEU +ha88EOQ5bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhC +QN/Po7qCWWqSG6wcmtoIKyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1Mjwr +rFDa1sPeg5TKqAyZMg4ISFZbavva4VhYAUlfckE8FQYBjl2tqriTtM2e66foai1S +NNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aKSe5TBY8ZTNXeWHmb0moc +QqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTVjlsB9WoH +txa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAP +BgNVHRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC +AQEAlGRZrTlk5ynrE/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756Abrsp +tJh6sTtU6zkXR34ajgv8HzFZMQSyzhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpa +IzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8rZ7/gFnkm0W09juwzTkZmDLl +6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4Gdyd1Lx+4ivn+ +xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU +Cm26OWMohpLzGITY+9HPBVZkVw== +-----END CERTIFICATE----- + +# Issuer: CN=Cybertrust Global Root O=Cybertrust, Inc +# Subject: CN=Cybertrust Global Root O=Cybertrust, Inc +# Label: "Cybertrust Global Root" +# Serial: 4835703278459682877484360 +# MD5 Fingerprint: 72:e4:4a:87:e3:69:40:80:77:ea:bc:e3:f4:ff:f0:e1 +# SHA1 Fingerprint: 5f:43:e5:b1:bf:f8:78:8c:ac:1c:c7:ca:4a:9a:c6:22:2b:cc:34:c6 +# SHA256 Fingerprint: 96:0a:df:00:63:e9:63:56:75:0c:29:65:dd:0a:08:67:da:0b:9c:bd:6e:77:71:4a:ea:fb:23:49:ab:39:3d:a3 +-----BEGIN CERTIFICATE----- +MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYG +A1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2Jh +bCBSb290MB4XDTA2MTIxNTA4MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UE +ChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBS +b290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+Mi8vRRQZhP/8NN5 +7CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW0ozS +J8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2y +HLtgwEZLAfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iP +t3sMpTjr3kfb1V05/Iin89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNz +FtApD0mpSPCzqrdsxacwOUBdrsTiXSZT8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAY +XSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/ +MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2MDSgMqAw +hi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3Js +MB8GA1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUA +A4IBAQBW7wojoFROlZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMj +Wqd8BfP9IjsO0QbE2zZMcwSO5bAi5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUx +XOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2hO0j9n0Hq0V+09+zv+mKts2o +omcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+TX3EJIrduPuoc +A06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW +WL1WMRJOEcgh4LMRkWXbtKaIOM5V +-----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=GeoTrust Primary Certification Authority - G3 O=GeoTrust Inc. OU=(c) 2008 GeoTrust Inc. - For authorized use only +# Subject: CN=GeoTrust Primary Certification Authority - G3 O=GeoTrust Inc. OU=(c) 2008 GeoTrust Inc. - For authorized use only +# Label: "GeoTrust Primary Certification Authority - G3" +# Serial: 28809105769928564313984085209975885599 +# MD5 Fingerprint: b5:e8:34:36:c9:10:44:58:48:70:6d:2e:83:d4:b8:05 +# SHA1 Fingerprint: 03:9e:ed:b8:0b:e7:a0:3c:69:53:89:3b:20:d2:d9:32:3a:4c:2a:fd +# SHA256 Fingerprint: b4:78:b8:12:25:0d:f8:78:63:5c:2a:a7:ec:7d:15:5e:aa:62:5e:e8:29:16:e2:cd:29:43:61:88:6c:d1:fb:d4 +-----BEGIN CERTIFICATE----- +MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCB +mDELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsT +MChjKSAyMDA4IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s +eTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv +cml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIzNTk1OVowgZgxCzAJ +BgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg +MjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0 +BgNVBAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg +LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz ++uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5jK/BGvESyiaHAKAxJcCGVn2TAppMSAmUm +hsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdEc5IiaacDiGydY8hS2pgn +5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3CIShwiP/W +JmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exAL +DmKudlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZC +huOl1UcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw +HQYDVR0OBBYEFMR5yo6hTgMdHNxr2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IB +AQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9cr5HqQ6XErhK8WTTOd8lNNTB +zU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbEAp7aDHdlDkQN +kv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD +AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUH +SJsMC8tJP33st/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2G +spki4cErx5z481+oghLrGREt +-----END CERTIFICATE----- + +# Issuer: CN=thawte Primary Root CA - G2 O=thawte, Inc. OU=(c) 2007 thawte, Inc. - For authorized use only +# Subject: CN=thawte Primary Root CA - G2 O=thawte, Inc. OU=(c) 2007 thawte, Inc. - For authorized use only +# Label: "thawte Primary Root CA - G2" +# Serial: 71758320672825410020661621085256472406 +# MD5 Fingerprint: 74:9d:ea:60:24:c4:fd:22:53:3e:cc:3a:72:d9:29:4f +# SHA1 Fingerprint: aa:db:bc:22:23:8f:c4:01:a1:27:bb:38:dd:f4:1d:db:08:9e:f0:12 +# SHA256 Fingerprint: a4:31:0d:50:af:18:a6:44:71:90:37:2a:86:af:af:8b:95:1f:fb:43:1d:83:7f:1e:56:88:b4:59:71:ed:15:57 +-----BEGIN CERTIFICATE----- +MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDEL +MAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMp +IDIwMDcgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAi +BgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMjAeFw0wNzExMDUwMDAw +MDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh +d3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBGb3Ig +YXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9v +dCBDQSAtIEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/ +BebfowJPDQfGAFG6DAJSLSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6 +papu+7qzcMBniKI11KOasf2twu8x+qi58/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUmtgAMADna3+FGO6Lts6K +DPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUNG4k8VIZ3 +KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41ox +XZ3Krr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg== +-----END CERTIFICATE----- + +# Issuer: CN=thawte Primary Root CA - G3 O=thawte, Inc. OU=Certification Services Division/(c) 2008 thawte, Inc. - For authorized use only +# Subject: CN=thawte Primary Root CA - G3 O=thawte, Inc. OU=Certification Services Division/(c) 2008 thawte, Inc. - For authorized use only +# Label: "thawte Primary Root CA - G3" +# Serial: 127614157056681299805556476275995414779 +# MD5 Fingerprint: fb:1b:5d:43:8a:94:cd:44:c6:76:f2:43:4b:47:e7:31 +# SHA1 Fingerprint: f1:8b:53:8d:1b:e9:03:b6:a6:f0:56:43:5b:17:15:89:ca:f3:6b:f2 +# SHA256 Fingerprint: 4b:03:f4:58:07:ad:70:f2:1b:fc:2c:ae:71:c9:fd:e4:60:4c:06:4c:f5:ff:b6:86:ba:e5:db:aa:d7:fd:d3:4c +-----BEGIN CERTIFICATE----- +MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCB +rjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf +Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw +MDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNV +BAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0wODA0MDIwMDAwMDBa +Fw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhhd3Rl +LCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9u +MTgwNgYDVQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXpl +ZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEcz +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsr8nLPvb2FvdeHsbnndm +gcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2AtP0LMqmsywCPLLEHd5N/8 +YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC+BsUa0Lf +b1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS9 +9irY7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2S +zhkGcuYMXDhpxwTWvGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUk +OQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV +HQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJKoZIhvcNAQELBQADggEBABpA +2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweKA3rD6z8KLFIW +oCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu +t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7c +KUGRIjxpp7sC8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fM +m7v/OeZWYdMKp8RcTGB7BXcmer/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZu +MdRAGmI0Nj81Aa6sY6A= +-----END CERTIFICATE----- + +# Issuer: CN=GeoTrust Primary Certification Authority - G2 O=GeoTrust Inc. OU=(c) 2007 GeoTrust Inc. - For authorized use only +# Subject: CN=GeoTrust Primary Certification Authority - G2 O=GeoTrust Inc. OU=(c) 2007 GeoTrust Inc. - For authorized use only +# Label: "GeoTrust Primary Certification Authority - G2" +# Serial: 80682863203381065782177908751794619243 +# MD5 Fingerprint: 01:5e:d8:6b:bd:6f:3d:8e:a1:31:f8:12:e0:98:73:6a +# SHA1 Fingerprint: 8d:17:84:d5:37:f3:03:7d:ec:70:fe:57:8b:51:9a:99:e6:10:d7:b0 +# SHA256 Fingerprint: 5e:db:7a:c4:3b:82:a0:6a:87:61:e8:d7:be:49:79:eb:f2:61:1f:7d:d7:9b:f9:1c:1c:6b:56:6a:21:9e:d7:66 +-----BEGIN CERTIFICATE----- +MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDEL +MAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChj +KSAyMDA3IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2 +MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 +eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1OVowgZgxCzAJBgNV +BAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykgMjAw +NyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNV +BAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH +MjB2MBAGByqGSM49AgEGBSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcL +So17VDs6bl8VAsBQps8lL33KSLjHUGMcKiEIfJo22Av+0SbFWDEwKCXzXV2juLal +tJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO +BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+EVXVMAoG +CCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGT +qQ7mndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBucz +rD6ogRLQy7rQkgu2npaqBA+K +-----END CERTIFICATE----- + +# Issuer: CN=VeriSign Universal Root Certification Authority O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2008 VeriSign, Inc. - For authorized use only +# Subject: CN=VeriSign Universal Root Certification Authority O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2008 VeriSign, Inc. - For authorized use only +# Label: "VeriSign Universal Root Certification Authority" +# Serial: 85209574734084581917763752644031726877 +# MD5 Fingerprint: 8e:ad:b5:01:aa:4d:81:e4:8c:1d:d1:e1:14:00:95:19 +# SHA1 Fingerprint: 36:79:ca:35:66:87:72:30:4d:30:a5:fb:87:3b:0f:a7:7b:b7:0d:54 +# SHA256 Fingerprint: 23:99:56:11:27:a5:71:25:de:8c:ef:ea:61:0d:df:2f:a0:78:b5:c8:06:7f:4e:82:82:90:bf:b8:60:e8:4b:3c +-----BEGIN CERTIFICATE----- +MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCB +vTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL +ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJp +U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9W +ZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe +Fw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJVUzEX +MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0 +IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9y +IGF1dGhvcml6ZWQgdXNlIG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNh +bCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj1mCOkdeQmIN65lgZOIzF +9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGPMiJhgsWH +H26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+H +LL729fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN +/BMReYTtXlT2NJ8IAfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPT +rJ9VAMf2CGqUuV/c4DPxhGD5WycRtPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1Ud +EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0GCCsGAQUFBwEMBGEwX6FdoFsw +WTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2Oa8PPgGrUSBgs +exkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud +DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4 +sAPmLGd75JR3Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+ +seQxIcaBlVZaDrHC1LGmWazxY8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz +4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTxP/jgdFcrGJ2BtMQo2pSXpXDrrB2+ +BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+PwGZsY6rp2aQW9IHR +lRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4mJO3 +7M2CYfE45k+XmCpajQ== +-----END CERTIFICATE----- + +# Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G4 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2007 VeriSign, Inc. - For authorized use only +# Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G4 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2007 VeriSign, Inc. - For authorized use only +# Label: "VeriSign Class 3 Public Primary Certification Authority - G4" +# Serial: 63143484348153506665311985501458640051 +# MD5 Fingerprint: 3a:52:e1:e7:fd:6f:3a:e3:6f:f3:6f:99:1b:f9:22:41 +# SHA1 Fingerprint: 22:d5:d8:df:8f:02:31:d1:8d:f7:9d:b7:cf:8a:2d:64:c9:3f:6c:3a +# SHA256 Fingerprint: 69:dd:d7:ea:90:bb:57:c9:3e:13:5d:c8:5e:a6:fc:d5:48:0b:60:32:39:bd:c4:54:fc:75:8b:2a:26:cf:7f:79 +-----BEGIN CERTIFICATE----- +MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjEL +MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW +ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2ln +biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp +U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y +aXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjELMAkG +A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJp +U2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwg +SW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2ln +biBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8Utpkmw4tXNherJI9/gHm +GUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGzrl0Bp3ve +fLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUw +AwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJ +aW1hZ2UvZ2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYj +aHR0cDovL2xvZ28udmVyaXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMW +kf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMDA2gAMGUCMGYhDBgmYFo4e1ZC +4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIxAJw9SDkjOVga +FRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA== +-----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=Staat der Nederlanden Root CA - G2 O=Staat der Nederlanden +# Subject: CN=Staat der Nederlanden Root CA - G2 O=Staat der Nederlanden +# Label: "Staat der Nederlanden Root CA - G2" +# Serial: 10000012 +# MD5 Fingerprint: 7c:a5:0f:f8:5b:9a:7d:6d:30:ae:54:5a:e3:42:a2:8a +# SHA1 Fingerprint: 59:af:82:79:91:86:c7:b4:75:07:cb:cf:03:57:46:eb:04:dd:b7:16 +# SHA256 Fingerprint: 66:8c:83:94:7d:a6:3b:72:4b:ec:e1:74:3c:31:a0:e6:ae:d0:db:8e:c5:b3:1b:e3:77:bb:78:4f:91:b6:71:6f +-----BEGIN CERTIFICATE----- +MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJO +TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFh +dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oX +DTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMCTkwxHjAcBgNVBAoMFVN0YWF0IGRl +ciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5lZGVybGFuZGVuIFJv +b3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ5291 +qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8Sp +uOUfiUtnvWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPU +Z5uW6M7XxgpT0GtJlvOjCwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvE +pMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiile7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp +5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCROME4HYYEhLoaJXhena/M +UGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpICT0ugpTN +GmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy +5V6548r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv +6q012iDTiIJh8BIitrzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEK +eN5KzlW/HdXZt1bv8Hb/C3m1r737qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6 +B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMBAAGjgZcwgZQwDwYDVR0TAQH/ +BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcCARYxaHR0cDov +L3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV +HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqG +SIb3DQEBCwUAA4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLyS +CZa59sCrI2AGeYwRTlHSeYAz+51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen +5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwjf/ST7ZwaUb7dRUG/kSS0H4zpX897 +IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaNkqbG9AclVMwWVxJK +gnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfkCpYL ++63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxL +vJxxcypFURmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkm +bEgeqmiSBeGCc1qb3AdbCG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvk +N1trSt8sV4pAWja63XVECDdCcAz+3F4hoKOKwJCcaNpQ5kUQR3i2TtJlycM33+FC +Y7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoVIPVVYpbtbZNQvOSqeK3Z +ywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm66+KAQ== +-----END CERTIFICATE----- + +# Issuer: CN=Hongkong Post Root CA 1 O=Hongkong Post +# Subject: CN=Hongkong Post Root CA 1 O=Hongkong Post +# Label: "Hongkong Post Root CA 1" +# Serial: 1000 +# MD5 Fingerprint: a8:0d:6f:39:78:b9:43:6d:77:42:6d:98:5a:cc:23:ca +# SHA1 Fingerprint: d6:da:a8:20:8d:09:d2:15:4d:24:b5:2f:cb:34:6e:b2:58:b2:8a:58 +# SHA256 Fingerprint: f9:e6:7d:33:6c:51:00:2a:c0:54:c6:32:02:2d:66:dd:a2:e7:e3:ff:f1:0a:d0:61:ed:31:d8:bb:b4:10:cf:b2 +-----BEGIN CERTIFICATE----- +MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsx +FjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3Qg +Um9vdCBDQSAxMB4XDTAzMDUxNTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkG +A1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdr +b25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1ApzQ +jVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEn +PzlTCeqrauh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjh +ZY4bXSNmO7ilMlHIhqqhqZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9 +nnV0ttgCXjqQesBCNnLsak3c78QA3xMYV18meMjWCnl3v/evt3a5pQuEF10Q6m/h +q5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNVHRMBAf8ECDAGAQH/AgED +MA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7ih9legYsC +mEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI3 +7piol7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clB +oiMBdDhViw+5LmeiIAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJs +EhTkYY2sEJCehFC78JZvRZ+K88psT/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpO +fMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilTc4afU9hDDl3WY4JxHYB0yvbi +AmvZWg== +-----END CERTIFICATE----- + +# Issuer: CN=SecureSign RootCA11 O=Japan Certification Services, Inc. +# Subject: CN=SecureSign RootCA11 O=Japan Certification Services, Inc. +# Label: "SecureSign RootCA11" +# Serial: 1 +# MD5 Fingerprint: b7:52:74:e2:92:b4:80:93:f2:75:e4:cc:d7:f2:ea:26 +# SHA1 Fingerprint: 3b:c4:9f:48:f8:f3:73:a0:9c:1e:bd:f8:5b:b1:c3:65:c7:d8:11:b3 +# SHA256 Fingerprint: bf:0f:ee:fb:9e:3a:58:1a:d5:f9:e9:db:75:89:98:57:43:d2:61:08:5c:4d:31:4f:6f:5d:72:59:aa:42:16:12 +-----BEGIN CERTIFICATE----- +MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDEr +MCkGA1UEChMiSmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoG +A1UEAxMTU2VjdXJlU2lnbiBSb290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0 +MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSswKQYDVQQKEyJKYXBhbiBDZXJ0aWZp +Y2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1cmVTaWduIFJvb3RD +QTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvLTJsz +i1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8 +h9uuywGOwvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOV +MdrAG/LuYpmGYz+/3ZMqg6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9 +UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rPO7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni +8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitAbpSACW22s293bzUIUPsC +h8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZXt94wDgYD +VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEB +AKChOBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xm +KbabfSVSSUOrTC4rbnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQ +X5Ucv+2rIrVls4W6ng+4reV6G4pQOh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWr +QbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01y8hSyn+B/tlr0/cR7SXf+Of5 +pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061lgeLKBObjBmN +QSdJQO7e5iNEOdyhIta6A/I= +-----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=Autoridad de Certificacion Firmaprofesional CIF A62634068 +# Subject: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068 +# Label: "Autoridad de Certificacion Firmaprofesional CIF A62634068" +# Serial: 6047274297262753887 +# MD5 Fingerprint: 73:3a:74:7a:ec:bb:a3:96:a6:c2:e4:e2:c8:9b:c0:c3 +# SHA1 Fingerprint: ae:c5:fb:3f:c8:e1:bf:c4:e5:4f:03:07:5a:9a:e8:00:b7:f7:b6:fa +# SHA256 Fingerprint: 04:04:80:28:bf:1f:28:64:d4:8f:9a:d4:d8:32:94:36:6a:82:88:56:55:3f:3b:14:30:3f:90:14:7f:5d:40:ef +-----BEGIN CERTIFICATE----- +MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UE +BhMCRVMxQjBABgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1h +cHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEy +MzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIwQAYDVQQDDDlBdXRvcmlkYWQgZGUg +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+JIwuwIDAQABo4HvMIHsMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYD +VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNHDhpkLzCBpgYD +VR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp +cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBv +ACAAZABlACAAbABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBl +AGwAbwBuAGEAIAAwADgAMAAxADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF +661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx51tkljYyGOylMnfX40S2wBEqgLk9 +am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qkR71kMrv2JYSiJ0L1 +ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaPT481 +PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS +3a/DTg4fJl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5k +SeTy36LssUzAKh3ntLFlosS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF +3dvd6qJ2gHN99ZwExEWN57kci57q13XRcrHedUTnQn3iV2t93Jm8PYMo6oCTjcVM +ZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoRsaS8I8nkvof/uZS2+F0g +StRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTDKCOM/icz +Q0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQB +jLMi6Et8Vcad+qMUu2WFbm5PEn4KPJ2V +-----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----- +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 +-----END CERTIFICATE----- + +# Issuer: CN=Chambers of Commerce Root - 2008 O=AC Camerfirma S.A. +# Subject: CN=Chambers of Commerce Root - 2008 O=AC Camerfirma S.A. +# Label: "Chambers of Commerce Root - 2008" +# Serial: 11806822484801597146 +# MD5 Fingerprint: 5e:80:9e:84:5a:0e:65:0b:17:02:f3:55:18:2a:3e:d7 +# SHA1 Fingerprint: 78:6a:74:ac:76:ab:14:7f:9c:6a:30:50:ba:9e:a8:7e:fe:9a:ce:3c +# SHA256 Fingerprint: 06:3e:4a:fa:c4:91:df:d3:32:f3:08:9b:85:42:e9:46:17:d8:93:d7:fe:94:4e:10:a7:93:7e:e2:9d:96:93:c0 +-----BEGIN CERTIFICATE----- +MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYD +VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0 +IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3 +MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xKTAnBgNVBAMTIENoYW1iZXJz +IG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEyMjk1MFoXDTM4MDcz +MTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBj +dXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIw +EAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEp +MCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0G +CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW9 +28sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKAXuFixrYp4YFs8r/lfTJq +VKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorjh40G072Q +DuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR +5gN/ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfL +ZEFHcpOrUMPrCXZkNNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05a +Sd+pZgvMPMZ4fKecHePOjlO+Bd5gD2vlGts/4+EhySnB8esHnFIbAURRPHsl18Tl +UlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331lubKgdaX8ZSD6e2wsWsSaR6s ++12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ0wlf2eOKNcx5 +Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj +ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAx +hduub+84Mxh2EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNV +HQ4EFgQU+SSsD7K1+HnA+mCIG8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1 ++HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpN +YWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29t +L2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVy +ZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAt +IDIwMDiCCQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRV +HSAAMCowKAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20w +DQYJKoZIhvcNAQEFBQADggIBAJASryI1wqM58C7e6bXpeHxIvj99RZJe6dqxGfwW +PJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH3qLPaYRgM+gQDROpI9CF +5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbURWpGqOt1 +glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaH +FoI6M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2 +pSB7+R5KBWIBpih1YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MD +xvbxrN8y8NmBGuScvfaAFPDRLLmF9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QG +tjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcKzBIKinmwPQN/aUv0NCB9szTq +jktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvGnrDQWzilm1De +fhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg +OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZ +d0jQ +-----END CERTIFICATE----- + +# Issuer: CN=Global Chambersign Root - 2008 O=AC Camerfirma S.A. +# Subject: CN=Global Chambersign Root - 2008 O=AC Camerfirma S.A. +# Label: "Global Chambersign Root - 2008" +# Serial: 14541511773111788494 +# MD5 Fingerprint: 9e:80:ff:78:01:0c:2e:c1:36:bd:fe:96:90:6e:08:f3 +# SHA1 Fingerprint: 4a:bd:ee:ec:95:0d:35:9c:89:ae:c7:52:a1:2c:5b:29:f6:d6:aa:0c +# SHA256 Fingerprint: 13:63:35:43:93:34:a7:69:80:16:a0:d3:24:de:72:28:4e:07:9d:7b:52:20:bb:8f:bd:74:78:16:ee:be:ba:ca +-----BEGIN CERTIFICATE----- +MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYD +VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0 +IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3 +MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD +aGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMxNDBaFw0zODA3MzEx +MjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3Vy +cmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAG +A1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAl +BgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZI +hvcNAQEBBQADggIPADCCAgoCggIBAMDfVtPkOpt2RbQT2//BthmLN0EYlVJH6xed +KYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXfXjaOcNFccUMd2drvXNL7 +G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0ZJJ0YPP2 +zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4 +ddPB/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyG +HoiMvvKRhI9lNNgATH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2 +Id3UwD2ln58fQ1DJu7xsepeY7s2MH/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3V +yJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfeOx2YItaswTXbo6Al/3K1dh3e +beksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSFHTynyQbehP9r +6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh +wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsog +zCtLkykPAgMBAAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQW +BBS5CcqcHtvTbDprru1U8VuTBjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDpr +ru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UEBhMCRVUxQzBBBgNVBAcTOk1hZHJp +ZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJmaXJtYS5jb20vYWRk +cmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJmaXJt +YSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiC +CQDJzdPp1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCow +KAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZI +hvcNAQEFBQADggIBAICIf3DekijZBZRG/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZ +UohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6ReAJ3spED8IXDneRRXoz +X1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/sdZ7LoR/x +fxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVz +a2Mg9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yyd +Yhz2rXzdpjEetrHHfoUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMd +SqlapskD7+3056huirRXhOukP9DuqqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9O +AP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETrP3iZ8ntxPjzxmKfFGBI/5rso +M0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVqc5iJWzouE4ge +v8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z +09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B +-----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=AffirmTrust Commercial O=AffirmTrust +# Subject: CN=AffirmTrust Commercial O=AffirmTrust +# Label: "AffirmTrust Commercial" +# Serial: 8608355977964138876 +# MD5 Fingerprint: 82:92:ba:5b:ef:cd:8a:6f:a6:3d:55:f9:84:f6:d6:b7 +# SHA1 Fingerprint: f9:b5:b6:32:45:5f:9c:be:ec:57:5f:80:dc:e9:6e:2c:c7:b2:78:b7 +# SHA256 Fingerprint: 03:76:ab:1d:54:c5:f9:80:3c:e4:b2:e2:01:a0:ee:7e:ef:7b:57:b6:36:e8:a9:3c:9b:8d:48:60:c9:6f:5f:a7 +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UE +BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz +dCBDb21tZXJjaWFsMB4XDTEwMDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDEL +MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp +cm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6EqdbDuKP +Hx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yr +ba0F8PrVC8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPAL +MeIrJmqbTFeurCA+ukV6BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1 +yHp52UKqK39c/s4mT6NmgTWvRLpUHhwwMmWd5jyTXlBOeuM61G7MGvv50jeuJCqr +VwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNVHQ4EFgQUnZPGU4teyq8/ +nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ +KoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYG +XUPGhi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNj +vbz4YYCanrHOQnDiqX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivt +Z8SOyUOyXGsViQK8YvxO8rUzqrJv0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9g +N53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0khsUlHRUe072o0EclNmsxZt9YC +nlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8= +-----END CERTIFICATE----- + +# Issuer: CN=AffirmTrust Networking O=AffirmTrust +# Subject: CN=AffirmTrust Networking O=AffirmTrust +# Label: "AffirmTrust Networking" +# Serial: 8957382827206547757 +# MD5 Fingerprint: 42:65:ca:be:01:9a:9a:4c:a9:8c:41:49:cd:c0:d5:7f +# SHA1 Fingerprint: 29:36:21:02:8b:20:ed:02:f5:66:c5:32:d1:d6:ed:90:9f:45:00:2f +# SHA256 Fingerprint: 0a:81:ec:5a:92:97:77:f1:45:90:4a:f3:8d:5d:50:9f:66:b5:e2:c5:8f:cd:b5:31:05:8b:0e:17:f3:f0:b4:1b +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UE +BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz +dCBOZXR3b3JraW5nMB4XDTEwMDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDEL +MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp +cm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SEHi3y +YJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbua +kCNrmreIdIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRL +QESxG9fhwoXA3hA/Pe24/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp +6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gbh+0t+nvujArjqWaJGctB+d1ENmHP4ndG +yH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNVHQ4EFgQUBx/S55zawm6i +QLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ +KoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfO +tDIuUFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzu +QY0x2+c06lkh1QF612S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZ +Lgo/bNjR9eUJtGxUAArgFU2HdW23WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4u +olu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9/ZFvgrG+CJPbFEfxojfHRZ48 +x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s= +-----END CERTIFICATE----- + +# Issuer: CN=AffirmTrust Premium O=AffirmTrust +# Subject: CN=AffirmTrust Premium O=AffirmTrust +# Label: "AffirmTrust Premium" +# Serial: 7893706540734352110 +# MD5 Fingerprint: c4:5d:0e:48:b6:ac:28:30:4e:0a:bc:f9:38:16:87:57 +# SHA1 Fingerprint: d8:a6:33:2c:e0:03:6f:b1:85:f6:63:4f:7d:6a:06:65:26:32:28:27 +# SHA256 Fingerprint: 70:a7:3f:7f:37:6b:60:07:42:48:90:45:34:b1:14:82:d5:bf:0e:69:8e:cc:49:8d:f5:25:77:eb:f2:e9:3b:9a +-----BEGIN CERTIFICATE----- +MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UE +BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVz +dCBQcmVtaXVtMB4XDTEwMDEyOTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkG +A1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1U +cnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxBLf +qV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtnBKAQ +JG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ ++jjeRFcV5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrS +s8PhaJyJ+HoAVt70VZVs+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5 +HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmdGPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d7 +70O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5Rp9EixAqnOEhss/n/fauG +V+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NIS+LI+H+S +qHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S +5u046uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4Ia +C1nEWTJ3s7xgaVY5/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TX +OwF0lkLgAOIua+rF7nKsu7/+6qqo+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYE +FJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ +BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByvMiPIs0laUZx2 +KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg +Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B +8OWycvpEgjNC6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQ +MKSOyARiqcTtNd56l+0OOF6SL5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc +0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK+4w1IX2COPKpVJEZNZOUbWo6xbLQ +u4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmVBtWVyuEklut89pMF +u+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFgIxpH +YoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8 +GKa1qF60g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaO +RtGdFNrHF+QFlozEJLUbzxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6e +KeC2uAloGRwYQw== +-----END CERTIFICATE----- + +# Issuer: CN=AffirmTrust Premium ECC O=AffirmTrust +# Subject: CN=AffirmTrust Premium ECC O=AffirmTrust +# Label: "AffirmTrust Premium ECC" +# Serial: 8401224907861490260 +# MD5 Fingerprint: 64:b0:09:55:cf:b1:d5:99:e2:be:13:ab:a6:5d:ea:4d +# SHA1 Fingerprint: b8:23:6b:00:2f:1d:16:86:53:01:55:6c:11:a4:37:ca:eb:ff:c3:bb +# SHA256 Fingerprint: bd:71:fd:f6:da:97:e4:cf:62:d1:64:7a:dd:25:81:b0:7d:79:ad:f8:39:7e:b4:ec:ba:9c:5e:84:88:82:14:23 +-----BEGIN CERTIFICATE----- +MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMC +VVMxFDASBgNVBAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQ +cmVtaXVtIEVDQzAeFw0xMDAxMjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJ +BgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1UcnVzdDEgMB4GA1UEAwwXQWZmaXJt +VHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQNMF4bFZ0D +0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQN8O9 +ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0G +A1UdDgQWBBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4G +A1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/Vs +aobgxCd05DhT1wV/GzTjxi+zygk8N53X57hG8f2h4nECMEJZh0PUUd+60wkyWs6I +flc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKMeQ== +-----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=Hellenic Academic and Research Institutions RootCA 2011 O=Hellenic Academic and Research Institutions Cert. Authority +# Subject: CN=Hellenic Academic and Research Institutions RootCA 2011 O=Hellenic Academic and Research Institutions Cert. Authority +# Label: "Hellenic Academic and Research Institutions RootCA 2011" +# Serial: 0 +# MD5 Fingerprint: 73:9f:4c:4b:73:5b:79:e9:fa:ba:1c:ef:6e:cb:d5:c9 +# SHA1 Fingerprint: fe:45:65:9b:79:03:5b:98:a1:61:b5:51:2e:ac:da:58:09:48:22:4d +# SHA256 Fingerprint: bc:10:4f:15:a4:8b:e7:09:dc:a5:42:a7:e1:d4:b9:df:6f:05:45:27:e8:02:ea:a9:2d:59:54:44:25:8a:fe:71 +-----BEGIN CERTIFICATE----- +MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1Ix +RDBCBgNVBAoTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1 +dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1p +YyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIFJvb3RDQSAyMDExMB4XDTExMTIw +NjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYTAkdSMUQwQgYDVQQK +EztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIENl +cnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl +c2VhcmNoIEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBAKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPz +dYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJ +fel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa71HFK9+WXesyHgLacEns +bgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u8yBRQlqD +75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSP +FEDH3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNV +HRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp +5dgTBCPuQSUwRwYDVR0eBEAwPqA8MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQu +b3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQub3JnMA0GCSqGSIb3DQEBBQUA +A4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVtXdMiKahsog2p +6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8 +TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7 +dIsXRSZMFpGD/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8Acys +Nnq/onN694/BtZqhFLKPM58N7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXI +l7WdmplNsDz4SgCbZN2fOUvRJ9e4 +-----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: O=Trustis Limited OU=Trustis FPS Root CA +# Subject: O=Trustis Limited OU=Trustis FPS Root CA +# Label: "Trustis FPS Root CA" +# Serial: 36053640375399034304724988975563710553 +# MD5 Fingerprint: 30:c9:e7:1e:6b:e6:14:eb:65:b2:16:69:20:31:67:4d +# SHA1 Fingerprint: 3b:c0:38:0b:33:c3:f6:a6:0c:86:15:22:93:d9:df:f5:4b:81:c0:04 +# SHA256 Fingerprint: c1:b4:82:99:ab:a5:20:8f:e9:63:0a:ce:55:ca:68:a0:3e:da:5a:51:9c:88:02:a0:d3:a6:73:be:8f:8e:55:7d +-----BEGIN CERTIFICATE----- +MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBF +MQswCQYDVQQGEwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQL +ExNUcnVzdGlzIEZQUyBSb290IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTEx +MzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNVBAoTD1RydXN0aXMgTGltaXRlZDEc +MBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQAD +ggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQRUN+ +AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihH +iTHcDnlkH5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjj +vSkCqPoc4Vu5g6hBSLwacY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA +0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zto3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlB +OrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEAAaNTMFEwDwYDVR0TAQH/ +BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAdBgNVHQ4E +FgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01 +GX2cGE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmW +zaD+vkAMXBJV+JOCyinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP4 +1BIy+Q7DsdwyhEQsb8tGD+pmQQ9P8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZE +f1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHVl/9D7S3B2l0pKoU/rGXuhg8F +jZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYliB6XzCGcKQEN +ZetX2fNXlrtIzYE= +-----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=EE Certification Centre Root CA O=AS Sertifitseerimiskeskus +# Subject: CN=EE Certification Centre Root CA O=AS Sertifitseerimiskeskus +# Label: "EE Certification Centre Root CA" +# Serial: 112324828676200291871926431888494945866 +# MD5 Fingerprint: 43:5e:88:d4:7d:1a:4a:7e:fd:84:2e:52:eb:01:d4:6f +# SHA1 Fingerprint: c9:a8:b9:e7:55:80:5e:58:e3:53:77:a7:25:eb:af:c3:7b:27:cc:d7 +# SHA256 Fingerprint: 3e:84:ba:43:42:90:85:16:e7:75:73:c0:99:2f:09:79:ca:08:4e:46:85:68:1f:f1:95:cc:ba:8a:22:9b:8a:76 +-----BEGIN CERTIFICATE----- +MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1 +MQswCQYDVQQGEwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1 +czEoMCYGA1UEAwwfRUUgQ2VydGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYG +CSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIwMTAxMDMwMTAxMDMwWhgPMjAzMDEy +MTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlBUyBTZXJ0aWZpdHNl +ZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRyZSBS +b290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEB +AQUAA4IBDwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUy +euuOF0+W2Ap7kaJjbMeMTC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvO +bntl8jixwKIy72KyaOBhU8E2lf/slLo2rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIw +WFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw93X2PaRka9ZP585ArQ/d +MtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtNP2MbRMNE +1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYD +VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/ +zQas8fElyalL1BSZMEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYB +BQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEF +BQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+RjxY6hUFaTlrg4wCQiZrxTFGGV +v9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqMlIpPnTX/dqQG +E5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u +uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIW +iAYLtqZLICjU3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/v +GVCJYMzpJJUPwssd8m92kMfMdcGWxZ0= +-----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=E-Tugra Certification Authority O=E-Tu\u011fra EBG Bili\u015fim Teknolojileri ve Hizmetleri A.\u015e. OU=E-Tugra Sertifikasyon Merkezi +# Subject: CN=E-Tugra Certification Authority O=E-Tu\u011fra EBG Bili\u015fim Teknolojileri ve Hizmetleri A.\u015e. OU=E-Tugra Sertifikasyon Merkezi +# Label: "E-Tugra Certification Authority" +# Serial: 7667447206703254355 +# MD5 Fingerprint: b8:a1:03:63:b0:bd:21:71:70:8a:6f:13:3a:bb:79:49 +# SHA1 Fingerprint: 51:c6:e7:08:49:06:6e:f3:92:d4:5c:a0:0d:6d:a3:62:8f:c3:52:39 +# SHA256 Fingerprint: b0:bf:d5:2b:b0:d7:d9:bd:92:bf:5d:4d:c1:3d:a2:55:c0:2c:54:2f:37:83:65:ea:89:39:11:f5:5e:55:f2:3c +-----BEGIN CERTIFICATE----- +MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNV +BAYTAlRSMQ8wDQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBC +aWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNV +BAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQDDB9FLVR1 +Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMwNTEyMDk0OFoXDTIz +MDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmExQDA+ +BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhp +em1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN +ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA4vU/kwVRHoViVF56C/UY +B4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vdhQd2h8y/L5VMzH2nPbxH +D5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5KCKpbknSF +Q9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEo +q1+gElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3D +k14opz8n8Y4e0ypQBaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcH +fC425lAcP9tDJMW/hkd5s3kc91r0E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsut +dEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gzrt48Ue7LE3wBf4QOXVGUnhMM +ti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAqjqFGOjGY5RH8 +zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn +rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUX +U8u3Zg5mTPj5dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6 +Jyr+zE7S6E5UMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5 +XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAF +Nzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAKkEh47U6YA5n+KGCR +HTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jOXKqY +GwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c +77NCR807VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3 ++GbHeJAAFS6LrVE1Uweoa2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WK +vJUawSg5TB9D0pH0clmKuVb8P7Sd2nCcdlqMQ1DujjByTd//SffGqWfZbawCEeI6 +FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEVKV0jq9BgoRJP3vQXzTLl +yb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gTDx4JnW2P +AJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpD +y4Q08ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8d +NL/+I5c30jn6PQ0GC7TbO6Orb1wdtn7os4I07QZcJA== +-----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 - R4 +# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R4 +# Label: "GlobalSign ECC Root CA - R4" +# Serial: 14367148294922964480859022125800977897474 +# MD5 Fingerprint: 20:f0:27:68:d1:7e:a0:9d:0e:e6:2a:ca:df:5c:89:8e +# SHA1 Fingerprint: 69:69:56:2e:40:80:f4:24:a1:e7:19:9f:14:ba:f3:ee:58:ab:6a:bb +# SHA256 Fingerprint: be:c9:49:11:c2:95:56:76:db:6c:0a:55:09:86:d7:6e:3b:a0:05:66:7c:44:2c:97:62:b4:fb:b7:73:de:22:8c +-----BEGIN CERTIFICATE----- +MIIB4TCCAYegAwIBAgIRKjikHJYKBN5CsiilC+g0mAIwCgYIKoZIzj0EAwIwUDEk +MCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpH +bG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoX +DTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBD +QSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu +MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuMZ5049sJQ6fLjkZHAOkrprlOQcJ +FspjsbmG+IpXwVfOQvpzofdlQv8ewQCybnMO/8ch5RikqtlxP6jUuc6MHaNCMEAw +DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFFSwe61F +uOJAf/sKbvu+M8k8o4TVMAoGCCqGSM49BAMCA0gAMEUCIQDckqGgE6bPA7DmxCGX +kPoUVy0D7O48027KqGx2vKLeuwIgJ6iFJzWbVsaj8kfSt24bAgAXqmemFZHe+pTs +ewv4n4Q= +-----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=Staat der Nederlanden Root CA - G3 O=Staat der Nederlanden +# Subject: CN=Staat der Nederlanden Root CA - G3 O=Staat der Nederlanden +# Label: "Staat der Nederlanden Root CA - G3" +# Serial: 10003001 +# MD5 Fingerprint: 0b:46:67:07:db:10:2f:19:8c:35:50:60:d1:0b:f4:37 +# SHA1 Fingerprint: d8:eb:6b:41:51:92:59:e0:f3:e7:85:00:c0:3d:b6:88:97:c9:ee:fc +# SHA256 Fingerprint: 3c:4f:b0:b9:5a:b8:b3:00:32:f4:32:b8:6f:53:5f:e1:72:c1:85:d0:fd:39:86:58:37:cf:36:18:7f:a6:f4:28 +-----BEGIN CERTIFICATE----- +MIIFdDCCA1ygAwIBAgIEAJiiOTANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJO +TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFh +dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQSAtIEczMB4XDTEzMTExNDExMjg0MloX +DTI4MTExMzIzMDAwMFowWjELMAkGA1UEBhMCTkwxHjAcBgNVBAoMFVN0YWF0IGRl +ciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5lZGVybGFuZGVuIFJv +b3QgQ0EgLSBHMzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL4yolQP +cPssXFnrbMSkUeiFKrPMSjTysF/zDsccPVMeiAho2G89rcKezIJnByeHaHE6n3WW +IkYFsO2tx1ueKt6c/DrGlaf1F2cY5y9JCAxcz+bMNO14+1Cx3Gsy8KL+tjzk7FqX +xz8ecAgwoNzFs21v0IJyEavSgWhZghe3eJJg+szeP4TrjTgzkApyI/o1zCZxMdFy +KJLZWyNtZrVtB0LrpjPOktvA9mxjeM3KTj215VKb8b475lRgsGYeCasH/lSJEULR +9yS6YHgamPfJEf0WwTUaVHXvQ9Plrk7O53vDxk5hUUurmkVLoR9BvUhTFXFkC4az +5S6+zqQbwSmEorXLCCN2QyIkHxcE1G6cxvx/K2Ya7Irl1s9N9WMJtxU51nus6+N8 +6U78dULI7ViVDAZCopz35HCz33JvWjdAidiFpNfxC95DGdRKWCyMijmev4SH8RY7 +Ngzp07TKbBlBUgmhHbBqv4LvcFEhMtwFdozL92TkA1CvjJFnq8Xy7ljY3r735zHP +bMk7ccHViLVlvMDoFxcHErVc0qsgk7TmgoNwNsXNo42ti+yjwUOH5kPiNL6VizXt +BznaqB16nzaeErAMZRKQFWDZJkBE41ZgpRDUajz9QdwOWke275dhdU/Z/seyHdTt +XUmzqWrLZoQT1Vyg3N9udwbRcXXIV2+vD3dbAgMBAAGjQjBAMA8GA1UdEwEB/wQF +MAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRUrfrHkleuyjWcLhL75Lpd +INyUVzANBgkqhkiG9w0BAQsFAAOCAgEAMJmdBTLIXg47mAE6iqTnB/d6+Oea31BD +U5cqPco8R5gu4RV78ZLzYdqQJRZlwJ9UXQ4DO1t3ApyEtg2YXzTdO2PCwyiBwpwp +LiniyMMB8jPqKqrMCQj3ZWfGzd/TtiunvczRDnBfuCPRy5FOCvTIeuXZYzbB1N/8 +Ipf3YF3qKS9Ysr1YvY2WTxB1v0h7PVGHoTx0IsL8B3+A3MSs/mrBcDCw6Y5p4ixp +gZQJut3+TcCDjJRYwEYgr5wfAvg1VUkvRtTA8KCWAg8zxXHzniN9lLf9OtMJgwYh +/WA9rjLA0u6NpvDntIJ8CsxwyXmA+P5M9zWEGYox+wrZ13+b8KKaa8MFSu1BYBQw +0aoRQm7TIwIEC8Zl3d1Sd9qBa7Ko+gE4uZbqKmxnl4mUnrzhVNXkanjvSr0rmj1A +fsbAddJu+2gw7OyLnflJNZoaLNmzlTnVHpL3prllL+U9bTpITAjc5CgSKL59NVzq +4BZ+Extq1z7XnvwtdbLBFNUjA9tbbws+eC8N3jONFrdI54OagQ97wUNNVQQXOEpR +1VmiiXTTn74eS9fGbbeIJG9gkaSChVtWQbzQRKtqE77RLFi3EjNYsjdj3BP1lB0/ +QFH1T/U67cjF68IeHRaVesd+QnGTbksVtzDfqu1XhUisHWrdOWnk4Xl4vs4Fv6EM +94B7IWcnMFk= +-----END CERTIFICATE----- + +# Issuer: CN=Staat der Nederlanden EV Root CA O=Staat der Nederlanden +# Subject: CN=Staat der Nederlanden EV Root CA O=Staat der Nederlanden +# Label: "Staat der Nederlanden EV Root CA" +# Serial: 10000013 +# MD5 Fingerprint: fc:06:af:7b:e8:1a:f1:9a:b4:e8:d2:70:1f:c0:f5:ba +# SHA1 Fingerprint: 76:e2:7e:c1:4f:db:82:c1:c0:a6:75:b5:05:be:3d:29:b4:ed:db:bb +# SHA256 Fingerprint: 4d:24:91:41:4c:fe:95:67:46:ec:4c:ef:a6:cf:6f:72:e2:8a:13:29:43:2f:9d:8a:90:7a:c4:cb:5d:ad:c1:5a +-----BEGIN CERTIFICATE----- +MIIFcDCCA1igAwIBAgIEAJiWjTANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQGEwJO +TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSkwJwYDVQQDDCBTdGFh +dCBkZXIgTmVkZXJsYW5kZW4gRVYgUm9vdCBDQTAeFw0xMDEyMDgxMTE5MjlaFw0y +MjEyMDgxMTEwMjhaMFgxCzAJBgNVBAYTAk5MMR4wHAYDVQQKDBVTdGFhdCBkZXIg +TmVkZXJsYW5kZW4xKTAnBgNVBAMMIFN0YWF0IGRlciBOZWRlcmxhbmRlbiBFViBS +b290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA48d+ifkkSzrS +M4M1LGns3Amk41GoJSt5uAg94JG6hIXGhaTK5skuU6TJJB79VWZxXSzFYGgEt9nC +UiY4iKTWO0Cmws0/zZiTs1QUWJZV1VD+hq2kY39ch/aO5ieSZxeSAgMs3NZmdO3d +Z//BYY1jTw+bbRcwJu+r0h8QoPnFfxZpgQNH7R5ojXKhTbImxrpsX23Wr9GxE46p +rfNeaXUmGD5BKyF/7otdBwadQ8QpCiv8Kj6GyzyDOvnJDdrFmeK8eEEzduG/L13l +pJhQDBXd4Pqcfzho0LKmeqfRMb1+ilgnQ7O6M5HTp5gVXJrm0w912fxBmJc+qiXb +j5IusHsMX/FjqTf5m3VpTCgmJdrV8hJwRVXj33NeN/UhbJCONVrJ0yPr08C+eKxC +KFhmpUZtcALXEPlLVPxdhkqHz3/KRawRWrUgUY0viEeXOcDPusBCAUCZSCELa6fS +/ZbV0b5GnUngC6agIk440ME8MLxwjyx1zNDFjFE7PZQIZCZhfbnDZY8UnCHQqv0X +cgOPvZuM5l5Tnrmd74K74bzickFbIZTTRTeU0d8JOV3nI6qaHcptqAqGhYqCvkIH +1vI4gnPah1vlPNOePqc7nvQDs/nxfRN0Av+7oeX6AHkcpmZBiFxgV6YuCcS6/ZrP +px9Aw7vMWgpVSzs4dlG4Y4uElBbmVvMCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB +/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFP6rAJCYniT8qcwaivsnuL8wbqg7 +MA0GCSqGSIb3DQEBCwUAA4ICAQDPdyxuVr5Os7aEAJSrR8kN0nbHhp8dB9O2tLsI +eK9p0gtJ3jPFrK3CiAJ9Brc1AsFgyb/E6JTe1NOpEyVa/m6irn0F3H3zbPB+po3u +2dfOWBfoqSmuc0iH55vKbimhZF8ZE/euBhD/UcabTVUlT5OZEAFTdfETzsemQUHS +v4ilf0X8rLiltTMMgsT7B/Zq5SWEXwbKwYY5EdtYzXc7LMJMD16a4/CrPmEbUCTC +wPTxGfARKbalGAKb12NMcIxHowNDXLldRqANb/9Zjr7dn3LDWyvfjFvO5QxGbJKy +CqNMVEIYFRIYvdr8unRu/8G2oGTYqV9Vrp9canaW2HNnh/tNf1zuacpzEPuKqf2e +vTY4SUmH9A4U8OmHuD+nT3pajnnUk+S7aFKErGzp85hwVXIy+TSrK0m1zSBi5Dp6 +Z2Orltxtrpfs/J92VoguZs9btsmksNcFuuEnL5O7Jiqik7Ab846+HUCjuTaPPoIa +Gl6I6lD4WeKDRikL40Rc4ZW2aZCaFG+XroHPaO+Zmr615+F/+PoTRxZMzG0IQOeL +eG9QgkRQP2YGiqtDhFZKDyAthg710tvSeopLzaXoTvFeJiUBWSOgftL2fiFX1ye8 +FVdMpEbB4IMeDExNH08GGeL5qPQ6gqGyeUN51q1veieQA6TqJIc/2b3Z6fJfUEkc +7uzXLg== +-----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=Entrust Root Certification Authority - G2 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2009 Entrust, Inc. - for authorized use only +# Subject: CN=Entrust Root Certification Authority - G2 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2009 Entrust, Inc. - for authorized use only +# Label: "Entrust Root Certification Authority - G2" +# Serial: 1246989352 +# MD5 Fingerprint: 4b:e2:c9:91:96:65:0c:f4:0e:5a:93:92:a0:0a:fe:b2 +# SHA1 Fingerprint: 8c:f4:27:fd:79:0c:3a:d1:66:06:8d:e8:1e:57:ef:bb:93:22:72:d4 +# SHA256 Fingerprint: 43:df:57:74:b0:3e:7f:ef:5f:e4:0d:93:1a:7b:ed:f1:bb:2e:6b:42:73:8c:4e:6d:38:41:10:3d:3a:a7:f3:39 +-----BEGIN CERTIFICATE----- +MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMC +VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50 +cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3Qs +IEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVz +dCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwHhcNMDkwNzA3MTcy +NTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUVu +dHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwt +dGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0 +aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmlj +YXRpb24gQXV0aG9yaXR5IC0gRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK +AoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP/vaCeb9zYQYKpSfYs1/T +RU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXzHHfV1IWN +cCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hW +wcKUs/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1 +U1+cPvQXLOZprE4yTGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0 +jaWvYkxN4FisZDQSA/i2jZRjJKRxAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAP +BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ60B7vfec7aVHUbI2fkBJmqzAN +BgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5ZiXMRrEPR9RP/ +jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ +Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v +1fN2D807iDginWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4R +nAuknZoh8/CbCzB428Hch0P+vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmH +VHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xOe4pIb4tF9g== +-----END CERTIFICATE----- + +# Issuer: CN=Entrust Root Certification Authority - EC1 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2012 Entrust, Inc. - for authorized use only +# Subject: CN=Entrust Root Certification Authority - EC1 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2012 Entrust, Inc. - for authorized use only +# Label: "Entrust Root Certification Authority - EC1" +# Serial: 51543124481930649114116133369 +# MD5 Fingerprint: b6:7e:1d:f0:58:c5:49:6c:24:3b:3d:ed:98:18:ed:bc +# SHA1 Fingerprint: 20:d8:06:40:df:9b:25:f5:12:25:3a:11:ea:f7:59:8a:eb:14:b5:47 +# SHA256 Fingerprint: 02:ed:0e:b2:8c:14:da:45:16:5c:56:67:91:70:0d:64:51:d7:fb:56:f0:b2:ab:1d:3b:8e:b0:70:e5:6e:df:f5 +-----BEGIN CERTIFICATE----- +MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkG +A1UEBhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3 +d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVu +dHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEzMDEGA1UEAxMq +RW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRUMxMB4XDTEy +MTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYwFAYD +VQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0 +L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0g +Zm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBD +ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEVDMTB2MBAGByqGSM49AgEGBSuBBAAi +A2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHyAsWfoPZb1YsGGYZPUxBt +ByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef9eNi1KlH +Bz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O +BBYEFLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVC +R98crlOZF7ZvHH3hvxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nX +hTcGtXsI/esni0qU+eH6p44mCOh8kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G +-----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=Certinomis - Root CA O=Certinomis OU=0002 433998903 +# Subject: CN=Certinomis - Root CA O=Certinomis OU=0002 433998903 +# Label: "Certinomis - Root CA" +# Serial: 1 +# MD5 Fingerprint: 14:0a:fd:8d:a8:28:b5:38:69:db:56:7e:61:22:03:3f +# SHA1 Fingerprint: 9d:70:bb:01:a5:a4:a0:18:11:2e:f7:1c:01:b9:32:c5:34:e7:88:a8 +# SHA256 Fingerprint: 2a:99:f5:bc:11:74:b7:3c:bb:1d:62:08:84:e0:1c:34:e5:1c:cb:39:78:da:12:5f:0e:33:26:88:83:bf:41:58 +-----BEGIN CERTIFICATE----- +MIIFkjCCA3qgAwIBAgIBATANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJGUjET +MBEGA1UEChMKQ2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxHTAb +BgNVBAMTFENlcnRpbm9taXMgLSBSb290IENBMB4XDTEzMTAyMTA5MTcxOFoXDTMz +MTAyMTA5MTcxOFowWjELMAkGA1UEBhMCRlIxEzARBgNVBAoTCkNlcnRpbm9taXMx +FzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMR0wGwYDVQQDExRDZXJ0aW5vbWlzIC0g +Um9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANTMCQosP5L2 +fxSeC5yaah1AMGT9qt8OHgZbn1CF6s2Nq0Nn3rD6foCWnoR4kkjW4znuzuRZWJfl +LieY6pOod5tK8O90gC3rMB+12ceAnGInkYjwSond3IjmFPnVAy//ldu9n+ws+hQV +WZUKxkd8aRi5pwP5ynapz8dvtF4F/u7BUrJ1Mofs7SlmO/NKFoL21prbcpjp3vDF +TKWrteoB4owuZH9kb/2jJZOLyKIOSY008B/sWEUuNKqEUL3nskoTuLAPrjhdsKkb +5nPJWqHZZkCqqU2mNAKthH6yI8H7KsZn9DS2sJVqM09xRLWtwHkziOC/7aOgFLSc +CbAK42C++PhmiM1b8XcF4LVzbsF9Ri6OSyemzTUK/eVNfaoqoynHWmgE6OXWk6Ri +wsXm9E/G+Z8ajYJJGYrKWUM66A0ywfRMEwNvbqY/kXPLynNvEiCL7sCCeN5LLsJJ +wx3tFvYk9CcbXFcx3FXuqB5vbKziRcxXV4p1VxngtViZSTYxPDMBbRZKzbgqg4SG +m/lg0h9tkQPTYKbVPZrdd5A9NaSfD171UkRpucC63M9933zZxKyGIjK8e2uR73r4 +F2iw4lNVYC2vPsKD2NkJK/DAZNuHi5HMkesE/Xa0lZrmFAYb1TQdvtj/dBxThZng +WVJKYe2InmtJiUZ+IFrZ50rlau7SZRFDAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIB +BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTvkUz1pcMw6C8I6tNxIqSSaHh0 +2TAfBgNVHSMEGDAWgBTvkUz1pcMw6C8I6tNxIqSSaHh02TANBgkqhkiG9w0BAQsF +AAOCAgEAfj1U2iJdGlg+O1QnurrMyOMaauo++RLrVl89UM7g6kgmJs95Vn6RHJk/ +0KGRHCwPT5iVWVO90CLYiF2cN/z7ZMF4jIuaYAnq1fohX9B0ZedQxb8uuQsLrbWw +F6YSjNRieOpWauwK0kDDPAUwPk2Ut59KA9N9J0u2/kTO+hkzGm2kQtHdzMjI1xZS +g081lLMSVX3l4kLr5JyTCcBMWwerx20RoFAXlCOotQqSD7J6wWAsOMwaplv/8gzj +qh8c3LigkyfeY+N/IZ865Z764BNqdeuWXGKRlI5nU7aJ+BIJy29SWwNyhlCVCNSN +h4YVH5Uk2KRvms6knZtt0rJ2BobGVgjF6wnaNsIbW0G+YSrjcOa4pvi2WsS9Iff/ +ql+hbHY5ZtbqTFXhADObE5hjyW/QASAJN1LnDE8+zbz1X5YnpyACleAu6AdBBR8V +btaw5BngDwKTACdyxYvRVB9dSsNAl35VpnzBMwQUAR1JIGkLGZOdblgi90AMRgwj +Y/M50n92Uaf0yKHxDHYiI0ZSKS3io0EHVmmY0gUJvGnHWmHNj4FgFU2A3ZDifcRQ +8ow7bkrHxuaAKzyBvBGAFhAn1/DNP3nMcyrDflOR1m749fPH0FFNjkulW+YZFzvW +gQncItzujrnEj1PhZ7szuIgVRs/taTX/dQ1G885x4cVrhkIGuUE= +-----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=LuxTrust Global Root 2 O=LuxTrust S.A. +# Subject: CN=LuxTrust Global Root 2 O=LuxTrust S.A. +# Label: "LuxTrust Global Root 2" +# Serial: 59914338225734147123941058376788110305822489521 +# MD5 Fingerprint: b2:e1:09:00:61:af:f7:f1:91:6f:c4:ad:8d:5e:3b:7c +# SHA1 Fingerprint: 1e:0e:56:19:0a:d1:8b:25:98:b2:04:44:ff:66:8a:04:17:99:5f:3f +# SHA256 Fingerprint: 54:45:5f:71:29:c2:0b:14:47:c4:18:f9:97:16:8f:24:c5:8f:c5:02:3b:f5:da:5b:e2:eb:6e:1d:d8:90:2e:d5 +-----BEGIN CERTIFICATE----- +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 +-----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=TrustCor RootCert CA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority +# Subject: CN=TrustCor RootCert CA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority +# Label: "TrustCor RootCert CA-1" +# Serial: 15752444095811006489 +# MD5 Fingerprint: 6e:85:f1:dc:1a:00:d3:22:d5:b2:b2:ac:6b:37:05:45 +# SHA1 Fingerprint: ff:bd:cd:e7:82:c8:43:5e:3c:6f:26:86:5c:ca:a8:3a:45:5b:c3:0a +# SHA256 Fingerprint: d4:0e:9c:86:cd:8f:e4:68:c1:77:69:59:f4:9e:a7:74:fa:54:86:84:b6:c4:06:f3:90:92:61:f4:dc:e2:57:5c +-----BEGIN CERTIFICATE----- +MIIEMDCCAxigAwIBAgIJANqb7HHzA7AZMA0GCSqGSIb3DQEBCwUAMIGkMQswCQYD +VQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEk +MCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5U +cnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgNVBAMMFlRydXN0Q29y +IFJvb3RDZXJ0IENBLTEwHhcNMTYwMjA0MTIzMjE2WhcNMjkxMjMxMTcyMzE2WjCB +pDELMAkGA1UEBhMCUEExDzANBgNVBAgMBlBhbmFtYTEUMBIGA1UEBwwLUGFuYW1h +IENpdHkxJDAiBgNVBAoMG1RydXN0Q29yIFN5c3RlbXMgUy4gZGUgUi5MLjEnMCUG +A1UECwweVHJ1c3RDb3IgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MR8wHQYDVQQDDBZU +cnVzdENvciBSb290Q2VydCBDQS0xMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEAv463leLCJhJrMxnHQFgKq1mqjQCj/IDHUHuO1CAmujIS2CNUSSUQIpid +RtLByZ5OGy4sDjjzGiVoHKZaBeYei0i/mJZ0PmnK6bV4pQa81QBeCQryJ3pS/C3V +seq0iWEk8xoT26nPUu0MJLq5nux+AHT6k61sKZKuUbS701e/s/OojZz0JEsq1pme +9J7+wH5COucLlVPat2gOkEz7cD+PSiyU8ybdY2mplNgQTsVHCJCZGxdNuWxu72CV +EY4hgLW9oHPY0LJ3xEXqWib7ZnZ2+AYfYW0PVcWDtxBWcgYHpfOxGgMFZA6dWorW +hnAbJN7+KIor0Gqw/Hqi3LJ5DotlDwIDAQABo2MwYTAdBgNVHQ4EFgQU7mtJPHo/ +DeOxCbeKyKsZn3MzUOcwHwYDVR0jBBgwFoAU7mtJPHo/DeOxCbeKyKsZn3MzUOcw +DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQAD +ggEBACUY1JGPE+6PHh0RU9otRCkZoB5rMZ5NDp6tPVxBb5UrJKF5mDo4Nvu7Zp5I +/5CQ7z3UuJu0h3U/IJvOcs+hVcFNZKIZBqEHMwwLKeXx6quj7LUKdJDHfXLy11yf +ke+Ri7fc7Waiz45mO7yfOgLgJ90WmMCV1Aqk5IGadZQ1nJBfiDcGrVmVCrDRZ9MZ +yonnMlo2HD6CqFqTvsbQZJG2z9m2GM/bftJlo6bEjhcxwft+dtvTheNYsnd6djts +L1Ac59v2Z3kf9YKVmgenFK+P3CghZwnS1k1aHBkcjndcw5QkPTJrS37UeJSDvjdN +zl/HHk484IkzlQsPpTLWPFp5LBk= +-----END CERTIFICATE----- + +# Issuer: CN=TrustCor RootCert CA-2 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority +# Subject: CN=TrustCor RootCert CA-2 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority +# Label: "TrustCor RootCert CA-2" +# Serial: 2711694510199101698 +# MD5 Fingerprint: a2:e1:f8:18:0b:ba:45:d5:c7:41:2a:bb:37:52:45:64 +# SHA1 Fingerprint: b8:be:6d:cb:56:f1:55:b9:63:d4:12:ca:4e:06:34:c7:94:b2:1c:c0 +# SHA256 Fingerprint: 07:53:e9:40:37:8c:1b:d5:e3:83:6e:39:5d:ae:a5:cb:83:9e:50:46:f1:bd:0e:ae:19:51:cf:10:fe:c7:c9:65 +-----BEGIN CERTIFICATE----- +MIIGLzCCBBegAwIBAgIIJaHfyjPLWQIwDQYJKoZIhvcNAQELBQAwgaQxCzAJBgNV +BAYTAlBBMQ8wDQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5MSQw +IgYDVQQKDBtUcnVzdENvciBTeXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRy +dXN0Q29yIENlcnRpZmljYXRlIEF1dGhvcml0eTEfMB0GA1UEAwwWVHJ1c3RDb3Ig +Um9vdENlcnQgQ0EtMjAeFw0xNjAyMDQxMjMyMjNaFw0zNDEyMzExNzI2MzlaMIGk +MQswCQYDVQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEg +Q2l0eTEkMCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYD +VQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgNVBAMMFlRy +dXN0Q29yIFJvb3RDZXJ0IENBLTIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +AoICAQCnIG7CKqJiJJWQdsg4foDSq8GbZQWU9MEKENUCrO2fk8eHyLAnK0IMPQo+ +QVqedd2NyuCb7GgypGmSaIwLgQ5WoD4a3SwlFIIvl9NkRvRUqdw6VC0xK5mC8tkq +1+9xALgxpL56JAfDQiDyitSSBBtlVkxs1Pu2YVpHI7TYabS3OtB0PAx1oYxOdqHp +2yqlO/rOsP9+aij9JxzIsekp8VduZLTQwRVtDr4uDkbIXvRR/u8OYzo7cbrPb1nK +DOObXUm4TOJXsZiKQlecdu/vvdFoqNL0Cbt3Nb4lggjEFixEIFapRBF37120Hape +az6LMvYHL1cEksr1/p3C6eizjkxLAjHZ5DxIgif3GIJ2SDpxsROhOdUuxTTCHWKF +3wP+TfSvPd9cW436cOGlfifHhi5qjxLGhF5DUVCcGZt45vz27Ud+ez1m7xMTiF88 +oWP7+ayHNZ/zgp6kPwqcMWmLmaSISo5uZk3vFsQPeSghYA2FFn3XVDjxklb9tTNM +g9zXEJ9L/cb4Qr26fHMC4P99zVvh1Kxhe1fVSntb1IVYJ12/+CtgrKAmrhQhJ8Z3 +mjOAPF5GP/fDsaOGM8boXg25NSyqRsGFAnWAoOsk+xWq5Gd/bnc/9ASKL3x74xdh +8N0JqSDIvgmk0H5Ew7IwSjiqqewYmgeCK9u4nBit2uBGF6zPXQIDAQABo2MwYTAd +BgNVHQ4EFgQU2f4hQG6UnrybPZx9mCAZ5YwwYrIwHwYDVR0jBBgwFoAU2f4hQG6U +nrybPZx9mCAZ5YwwYrIwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYw +DQYJKoZIhvcNAQELBQADggIBAJ5Fngw7tu/hOsh80QA9z+LqBrWyOrsGS2h60COX +dKcs8AjYeVrXWoSK2BKaG9l9XE1wxaX5q+WjiYndAfrs3fnpkpfbsEZC89NiqpX+ +MWcUaViQCqoL7jcjx1BRtPV+nuN79+TMQjItSQzL/0kMmx40/W5ulop5A7Zv2wnL +/V9lFDfhOPXzYRZY5LVtDQsEGz9QLX+zx3oaFoBg+Iof6Rsqxvm6ARppv9JYx1RX +CI/hOWB3S6xZhBqI8d3LT3jX5+EzLfzuQfogsL7L9ziUwOHQhQ+77Sxzq+3+knYa +ZH9bDTMJBzN7Bj8RpFxwPIXAz+OQqIN3+tvmxYxoZxBnpVIt8MSZj3+/0WvitUfW +2dCFmU2Umw9Lje4AWkcdEQOsQRivh7dvDDqPys/cA8GiCcjl/YBeyGBCARsaU1q7 +N6a3vLqE6R5sGtRk2tRD/pOLS/IseRYQ1JMLiI+h2IYURpFHmygk71dSTlxCnKr3 +Sewn6EAes6aJInKc9Q0ztFijMDvd1GpUk74aTfOTlPf8hAs/hCBcNANExdqtvArB +As8e5ZTZ845b2EzwnexhF7sUMlQMAimTHpKG9n/v55IFDlndmQguLvqcAFLTxWYp +5KeXRKQOKIETNcX2b2TmQcTVL8w0RSXPQQCWPUouwpaYT05KnJe32x+SMsj/D1Fu +1uwJ +-----END CERTIFICATE----- + +# Issuer: CN=TrustCor ECA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority +# Subject: CN=TrustCor ECA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority +# Label: "TrustCor ECA-1" +# Serial: 9548242946988625984 +# MD5 Fingerprint: 27:92:23:1d:0a:f5:40:7c:e9:e6:6b:9d:d8:f5:e7:6c +# SHA1 Fingerprint: 58:d1:df:95:95:67:6b:63:c0:f0:5b:1c:17:4d:8b:84:0b:c8:78:bd +# SHA256 Fingerprint: 5a:88:5d:b1:9c:01:d9:12:c5:75:93:88:93:8c:af:bb:df:03:1a:b2:d4:8e:91:ee:15:58:9b:42:97:1d:03:9c +-----BEGIN CERTIFICATE----- +MIIEIDCCAwigAwIBAgIJAISCLF8cYtBAMA0GCSqGSIb3DQEBCwUAMIGcMQswCQYD +VQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEk +MCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5U +cnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxFzAVBgNVBAMMDlRydXN0Q29y +IEVDQS0xMB4XDTE2MDIwNDEyMzIzM1oXDTI5MTIzMTE3MjgwN1owgZwxCzAJBgNV +BAYTAlBBMQ8wDQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5MSQw +IgYDVQQKDBtUcnVzdENvciBTeXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRy +dXN0Q29yIENlcnRpZmljYXRlIEF1dGhvcml0eTEXMBUGA1UEAwwOVHJ1c3RDb3Ig +RUNBLTEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDPj+ARtZ+odnbb +3w9U73NjKYKtR8aja+3+XzP4Q1HpGjORMRegdMTUpwHmspI+ap3tDvl0mEDTPwOA +BoJA6LHip1GnHYMma6ve+heRK9jGrB6xnhkB1Zem6g23xFUfJ3zSCNV2HykVh0A5 +3ThFEXXQmqc04L/NyFIduUd+Dbi7xgz2c1cWWn5DkR9VOsZtRASqnKmcp0yJF4Ou +owReUoCLHhIlERnXDH19MURB6tuvsBzvgdAsxZohmz3tQjtQJvLsznFhBmIhVE5/ +wZ0+fyCMgMsq2JdiyIMzkX2woloPV+g7zPIlstR8L+xNxqE6FXrntl019fZISjZF +ZtS6mFjBAgMBAAGjYzBhMB0GA1UdDgQWBBREnkj1zG1I1KBLf/5ZJC+Dl5mahjAf +BgNVHSMEGDAWgBREnkj1zG1I1KBLf/5ZJC+Dl5mahjAPBgNVHRMBAf8EBTADAQH/ +MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAQEABT41XBVwm8nHc2Fv +civUwo/yQ10CzsSUuZQRg2dd4mdsdXa/uwyqNsatR5Nj3B5+1t4u/ukZMjgDfxT2 +AHMsWbEhBuH7rBiVDKP/mZb3Kyeb1STMHd3BOuCYRLDE5D53sXOpZCz2HAF8P11F +hcCF5yWPldwX8zyfGm6wyuMdKulMY/okYWLW2n62HGz1Ah3UKt1VkOsqEUc8Ll50 +soIipX1TH0XsJ5F95yIW6MBoNtjG8U+ARDL54dHRHareqKucBK+tIA5kmE2la8BI +WJZpTdwHjFGTot+fDz2LYLSCjaoITmJF4PkL0uDgPFveXHEnJcLmA4GLEFPjx1Wi +tJ/X5g== +-----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=GTS Root R1 O=Google Trust Services LLC +# Subject: CN=GTS Root R1 O=Google Trust Services LLC +# Label: "GTS Root R1" +# Serial: 146587175971765017618439757810265552097 +# MD5 Fingerprint: 82:1a:ef:d4:d2:4a:f2:9f:e2:3d:97:06:14:70:72:85 +# SHA1 Fingerprint: e1:c9:50:e6:ef:22:f8:4c:56:45:72:8b:92:20:60:d7:d5:a7:a3:e8 +# SHA256 Fingerprint: 2a:57:54:71:e3:13:40:bc:21:58:1c:bd:2c:f1:3e:15:84:63:20:3e:ce:94:bc:f9:d3:cc:19:6b:f0:9a:54:72 +-----BEGIN CERTIFICATE----- +MIIFWjCCA0KgAwIBAgIQbkepxUtHDA3sM9CJuRz04TANBgkqhkiG9w0BAQwFADBH +MQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExM +QzEUMBIGA1UEAxMLR1RTIFJvb3QgUjEwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIy +MDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNl +cnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjEwggIiMA0GCSqGSIb3DQEB +AQUAA4ICDwAwggIKAoICAQC2EQKLHuOhd5s73L+UPreVp0A8of2C+X0yBoJx9vaM +f/vo27xqLpeXo4xL+Sv2sfnOhB2x+cWX3u+58qPpvBKJXqeqUqv4IyfLpLGcY9vX +mX7wCl7raKb0xlpHDU0QM+NOsROjyBhsS+z8CZDfnWQpJSMHobTSPS5g4M/SCYe7 +zUjwTcLCeoiKu7rPWRnWr4+wB7CeMfGCwcDfLqZtbBkOtdh+JhpFAz2weaSUKK0P +fyblqAj+lug8aJRT7oM6iCsVlgmy4HqMLnXWnOunVmSPlk9orj2XwoSPwLxAwAtc +vfaHszVsrBhQf4TgTM2S0yDpM7xSma8ytSmzJSq0SPly4cpk9+aCEI3oncKKiPo4 +Zor8Y/kB+Xj9e1x3+naH+uzfsQ55lVe0vSbv1gHR6xYKu44LtcXFilWr06zqkUsp +zBmkMiVOKvFlRNACzqrOSbTqn3yDsEB750Orp2yjj32JgfpMpf/VjsPOS+C12LOO +Rc92wO1AK/1TD7Cn1TsNsYqiA94xrcx36m97PtbfkSIS5r762DL8EGMUUXLeXdYW +k70paDPvOmbsB4om3xPXV2V4J95eSRQAogB/mqghtqmxlbCluQ0WEdrHbEg8QOB+ +DVrNVjzRlwW5y0vtOUucxD/SVRNuJLDWcfr0wbrM7Rv1/oFB2ACYPTrIrnqYNxgF +lQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV +HQ4EFgQU5K8rJnEaK0gnhS9SZizv8IkTcT4wDQYJKoZIhvcNAQEMBQADggIBADiW +Cu49tJYeX++dnAsznyvgyv3SjgofQXSlfKqE1OXyHuY3UjKcC9FhHb8owbZEKTV1 +d5iyfNm9dKyKaOOpMQkpAWBz40d8U6iQSifvS9efk+eCNs6aaAyC58/UEBZvXw6Z +XPYfcX3v73svfuo21pdwCxXu11xWajOl40k4DLh9+42FpLFZXvRq4d2h9mREruZR +gyFmxhE+885H7pwoHyXa/6xmld01D1zvICxi/ZG6qcz8WpyTgYMpl0p8WnK0OdC3 +d8t5/Wk6kjftbjhlRn7pYL15iJdfOBL07q9bgsiG1eGZbYwE8na6SfZu6W0eX6Dv +J4J2QPim01hcDyxC2kLGe4g0x8HYRZvBPsVhHdljUEn2NIVq4BjFbkerQUIpm/Zg +DdIx02OYI5NaAIFItO/Nis3Jz5nu2Z6qNuFoS3FJFDYoOj0dzpqPJeaAcWErtXvM ++SUWgeExX6GjfhaknBZqlxi9dnKlC54dNuYvoS++cJEPqOba+MSSQGwlfnuzCdyy +F62ARPBopY+Udf90WuioAnwMCeKpSwughQtiue+hMZL77/ZRBIls6Kl0obsXs7X9 +SQ98POyDGCBDTtWTurQ0sR8WNh8M5mQ5Fkzc4P4dyKliPUDqysU0ArSuiYgzNdws +E3PYJ/HQcu51OyLemGhmW/HGY0dVHLqlCFF1pkgl +-----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: 146587176055767053814479386953112547951 +# MD5 Fingerprint: 44:ed:9a:0e:a4:09:3b:00:f2:ae:4c:a3:c6:61:b0:8b +# SHA1 Fingerprint: d2:73:96:2a:2a:5e:39:9f:73:3f:e1:c7:1e:64:3f:03:38:34:fc:4d +# SHA256 Fingerprint: c4:5d:7b:b0:8e:6d:67:e6:2e:42:35:11:0b:56:4e:5f:78:fd:92:ef:05:8c:84:0a:ea:4e:64:55:d7:58:5c:60 +-----BEGIN CERTIFICATE----- +MIIFWjCCA0KgAwIBAgIQbkepxlqz5yDFMJo/aFLybzANBgkqhkiG9w0BAQwFADBH +MQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExM +QzEUMBIGA1UEAxMLR1RTIFJvb3QgUjIwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIy +MDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNl +cnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjIwggIiMA0GCSqGSIb3DQEB +AQUAA4ICDwAwggIKAoICAQDO3v2m++zsFDQ8BwZabFn3GTXd98GdVarTzTukk3Lv +CvptnfbwhYBboUhSnznFt+4orO/LdmgUud+tAWyZH8QiHZ/+cnfgLFuv5AS/T3Kg +GjSY6Dlo7JUle3ah5mm5hRm9iYz+re026nO8/4Piy33B0s5Ks40FnotJk9/BW9Bu +XvAuMC6C/Pq8tBcKSOWIm8Wba96wyrQD8Nr0kLhlZPdcTK3ofmZemde4wj7I0BOd +re7kRXuJVfeKH2JShBKzwkCX44ofR5GmdFrS+LFjKBC4swm4VndAoiaYecb+3yXu +PuWgf9RhD1FLPD+M2uFwdNjCaKH5wQzpoeJ/u1U8dgbuak7MkogwTZq9TwtImoS1 +mKPV+3PBV2HdKFZ1E66HjucMUQkQdYhMvI35ezzUIkgfKtzra7tEscszcTJGr61K +8YzodDqs5xoic4DSMPclQsciOzsSrZYuxsN2B6ogtzVJV+mSSeh2FnIxZyuWfoqj +x5RWIr9qS34BIbIjMt/kmkRtWVtd9QCgHJvGeJeNkP+byKq0rxFROV7Z+2et1VsR +nTKaG73VululycslaVNVJ1zgyjbLiGH7HrfQy+4W+9OmTN6SpdTi3/UGVN4unUu0 +kzCqgc7dGtxRcw1PcOnlthYhGXmy5okLdWTK1au8CcEYof/UVKGFPP0UJAOyh9Ok +twIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV +HQ4EFgQUu//KjiOfT5nK2+JopqUVJxce2Q4wDQYJKoZIhvcNAQEMBQADggIBALZp +8KZ3/p7uC4Gt4cCpx/k1HUCCq+YEtN/L9x0Pg/B+E02NjO7jMyLDOfxA325BS0JT +vhaI8dI4XsRomRyYUpOM52jtG2pzegVATX9lO9ZY8c6DR2Dj/5epnGB3GFW1fgiT +z9D2PGcDFWEJ+YF59exTpJ/JjwGLc8R3dtyDovUMSRqodt6Sm2T4syzFJ9MHwAiA +pJiS4wGWAqoC7o87xdFtCjMwc3i5T1QWvwsHoaRc5svJXISPD+AVdyx+Jn7axEvb +pxZ3B7DNdehyQtaVhJ2Gg/LkkM0JR9SLA3DaWsYDQvTtN6LwG1BUSw7YhN4ZKJmB +R64JGz9I0cNv4rBgF/XuIwKl2gBbbZCr7qLpGzvpx0QnRY5rn/WkhLx3+WuXrD5R +RaIRpsyF7gpo8j5QOHokYh4XIDdtak23CZvJ/KRY9bb7nE4Yu5UC56GtmwfuNmsk +0jmGwZODUNKBRqhfYlcsu2xkiAhu7xNUX90txGdj08+JN7+dIPT7eoOboB6BAFDC +5AwiWVIQ7UNWhwD4FFKnHYuTjKJNRn8nxnGbJN7k2oaLDX5rIMHAnuFl2GqjpuiF +izoHCBy69Y9Vmhh1fuXsgWbRIXOhNUQLgD1bnF5vKheW0YMjiGZt5obicDIvUiLn +yOd/xCxgXS/Dr55FBcOEArf9LAhST4Ldo/DUhgkC +-----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: 146587176140553309517047991083707763997 +# MD5 Fingerprint: 1a:79:5b:6b:04:52:9c:5d:c7:74:33:1b:25:9a:f9:25 +# SHA1 Fingerprint: 30:d4:24:6f:07:ff:db:91:89:8a:0b:e9:49:66:11:eb:8c:5e:46:e5 +# SHA256 Fingerprint: 15:d5:b8:77:46:19:ea:7d:54:ce:1c:a6:d0:b0:c4:03:e0:37:a9:17:f1:31:e8:a0:4e:1e:6b:7a:71:ba:bc:e5 +-----BEGIN CERTIFICATE----- +MIICDDCCAZGgAwIBAgIQbkepx2ypcyRAiQ8DVd2NHTAKBggqhkjOPQQDAzBHMQsw +CQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEU +MBIGA1UEAxMLR1RTIFJvb3QgUjMwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAw +MDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZp +Y2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjMwdjAQBgcqhkjOPQIBBgUrgQQA +IgNiAAQfTzOHMymKoYTey8chWEGJ6ladK0uFxh1MJ7x/JlFyb+Kf1qPKzEUURout +736GjOyxfi//qXGdGIRFBEFVbivqJn+7kAHjSxm65FSWRQmx1WyRRK2EE46ajA2A +DDL24CejQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud +DgQWBBTB8Sa6oC2uhYHP0/EqEr24Cmf9vDAKBggqhkjOPQQDAwNpADBmAjEAgFuk +fCPAlaUs3L6JbyO5o91lAFJekazInXJ0glMLfalAvWhgxeG4VDvBNhcl2MG9AjEA +njWSdIUlUfUk7GRSJFClH9voy8l27OyCbvWFGFPouOOaKaqW04MjyaR7YbPMAuhd +-----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: 146587176229350439916519468929765261721 +# MD5 Fingerprint: 5d:b6:6a:c4:60:17:24:6a:1a:99:a8:4b:ee:5e:b4:26 +# SHA1 Fingerprint: 2a:1d:60:27:d9:4a:b1:0a:1c:4d:91:5c:cd:33:a0:cb:3e:2d:54:cb +# SHA256 Fingerprint: 71:cc:a5:39:1f:9e:79:4b:04:80:25:30:b3:63:e1:21:da:8a:30:43:bb:26:66:2f:ea:4d:ca:7f:c9:51:a4:bd +-----BEGIN CERTIFICATE----- +MIICCjCCAZGgAwIBAgIQbkepyIuUtui7OyrYorLBmTAKBggqhkjOPQQDAzBHMQsw +CQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEU +MBIGA1UEAxMLR1RTIFJvb3QgUjQwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAw +MDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZp +Y2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjQwdjAQBgcqhkjOPQIBBgUrgQQA +IgNiAATzdHOnaItgrkO4NcWBMHtLSZ37wWHO5t5GvWvVYRg1rkDdc/eJkTBa6zzu +hXyiQHY7qca4R9gq55KRanPpsXI5nymfopjTX15YhmUPoYRlBtHci8nHc8iMai/l +xKvRHYqjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud +DgQWBBSATNbrdP9JNqPV2Py1PsVq8JQdjDAKBggqhkjOPQQDAwNnADBkAjBqUFJ0 +CMRw3J5QdCHojXohw0+WbhXRIjVhLfoIN+4Zba3bssx9BzT1YBkstTTZbyACMANx +sbqjYAuG7ZoIapVon+Kz4ZNkfF6Tpt95LY2F45TPI11xzPKwTdb+mciUqXWi4w== +-----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----- +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 +mpv0 +-----END CERTIFICATE----- diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/certifi/core.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/certifi/core.py new file mode 100644 index 00000000..7271acf4 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/certifi/core.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- + +""" +certifi.py +~~~~~~~~~~ + +This module returns the installation location of cacert.pem. +""" +import os + + +def where(): + f = os.path.dirname(__file__) + + return os.path.join(f, 'cacert.pem') diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__init__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__init__.py new file mode 100644 index 00000000..0f9f820e --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__init__.py @@ -0,0 +1,39 @@ +######################## BEGIN LICENSE BLOCK ######################## +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + + +from .compat import PY2, PY3 +from .universaldetector import UniversalDetector +from .version import __version__, VERSION + + +def detect(byte_str): + """ + Detect the encoding of the given byte string. + + :param byte_str: The byte sequence to examine. + :type byte_str: ``bytes`` or ``bytearray`` + """ + if not isinstance(byte_str, bytearray): + if not isinstance(byte_str, bytes): + raise TypeError('Expected object of type bytes or bytearray, got: ' + '{0}'.format(type(byte_str))) + else: + byte_str = bytearray(byte_str) + detector = UniversalDetector() + detector.feed(byte_str) + return detector.close() diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..841e63b09781309275a1ce34d7c37b7bc1fcc1bd GIT binary patch literal 794 zcmYjPO^?$s5ViB&z@iooaP*N%Y+LPeKm{Qrs05b<u?rFrC`n^)n<|O3j*GTSd!hUj zPF(mwzH;I(aANGVu#RRlW6yhj@yzkTLHP0K;L}|Xp<n3QvLJp2);t175yb^6afC}N zvarsr!Y-Z2F|l2^r5AanANi0w)cuB{fO@B>@BhXC?_0`#^WjLl<33iscUAtGi6$*x zFv&8>1r*$fW4)L2Dvp)^e)9J8)$5Z?qxI5i9I)qL%}a0+t&zlAs~MTdg6O`qDPB0z zU8615-&b4(66<V(q_;&Iyv7S(=NLg0Y!N85uD*u^Rx5?bIU}sfIL)gW;pZlwf!c~p zSCWxN3OE>q1~RTwk(TBlhJ&%DA!k6)ma>Z_Ffk%IVV7x{S8UM2<f?9K{-a2eXi$?R zgo|C03X!go#9*!-PA+SBDn<#PE+8=4_B@RSX}p0vATut<<jZK&@2D_u@~V+32vMDX zCCW9osm>WtOoZS<dFNb|sZ@?uC-hq@=bSOB+^paYgAN56qa~|=?)vrvi5^t`c|4S5 zJ*@NkaJtM3dN{h6Px<JG>Mdi?+lq2A%;u>8@Gy?^DwlCQs8`Bs+3xAqcEKS(#3A<Z zEh_*YVsQudPT*g>jF)vPg&qcBgHyfbev<ZzTIK$3l!U8GVYHDUF=DT|+nOVIQgXU1 Q*i(H?qiehPChppQ0pVlYfdBvi literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/big5freq.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/big5freq.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b57e7a05491ebad228b3451e7438eec219413c2d GIT binary patch literal 54681 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 Ug8LKPbMOCt{`U_2e|-o31F>{L?f?J) literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/big5prober.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/big5prober.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a3dc354f2c4cef6691532ccb632bdba83b8b1eec GIT binary patch literal 1070 zcmah|O>Yx15ViL!n<#0a6(0vqaEe5ms?ZxCXo@N%Qjl_6fvnBiO}6rGQrnA^s<%Yy zZ{flZvc!oKe}NM--j*&GaAf=KOm^nYyxC{HUgy)d-Ot}6LVl3O3IM-`t&iZ~gi}ch znox?^lV0H`zQeu@iZBTs4rElck`^V$goiv@6CMe=@{^di#-tzrq!6l4?fp?DO@6pE zVmM3HSeTD$J`oB$Tf;fe%jwvpMvT&ImX`vo4-fO{!BMV_$|se{=jEF+l}nv#@bwPg z9Urjqh>boRy?viSf<Mc@M*2AbK@!SI;$4wb$|?8OapH@B`#e~a6-`3GjxpfqiUcG< z#x2{y)HS^f+2g_+W8>CO;V{I|OS1CLycIZ&Z-Ny(v(Q8<0(a|@oW<zj1Y**Ye%pq+ zS_q|}=fuX0<z;RdQy5T%XlrM#4@?&db+Gq%qk5KN`4>XjPzfyzbRp0}p2FQ`ER(6$ zjD01)UJgvL7%cL|&ZNpE-`P8#P3C+198GSsFQVjgHON2(F3ey8wJw|#yNjiYA@LK~ z8Udjjv_oThv3=W+-5cV6bq2dL#Mh8Gr%<tXVgr0jZGfduRTnOY>thohZ5KH}Ev!rn z(Fcq6;2_?`gGRpQfBv7dHN^4J;$LZFnU>Qkor;}C%4Uf-{(g))Avwluhp}SLD~Y(v z*m;%8+T(g=W9T8MYnJLRL{-~x*xt1;nUE5c#!lSu>LJD^xN&$4K;vA*v>SB;XTyov zEGF0G*9s}@kKL;0MC12T)ZdGnB74Va+8CO8jv|PnVW@D(T<BXSHF9FaFY5AMJwh@l Jf0w$S{~LwK0Ac_D literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/chardistribution.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/chardistribution.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b399953324dcc486f3a7ea3c6209bbb3d0dad076 GIT binary patch literal 6266 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 V0sn^^HQGNbJD(j<zp?D(e*vLv`#=By literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/charsetgroupprober.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/charsetgroupprober.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4848160ca9f8231a257adc6aa853c7519208ce9d GIT binary patch literal 2177 zcmb_d&2Jk;6rb6dU9TNGEg@|KL?T5+;EE;%A^{S#Mg0;7T-2mgvRaL7&tz-I@yE=% zO3X$=a-^QPao}Izl7EE%U~h<1Puw~2d$Va0O1QE1d;8{N-@K3Cd-G|nR(W!``t-MX z#{OWZ9trst$bAH+ndW`A!<(Fw9Q1=7(G;BBXIf}^z_c`CCYn-*8>}9^<oKk{^XhkY z*zOLJjkJ{-jBB@_wd{sTY1-HhHXT278a?hIm|;z>Su@b{FW45>fffhlrtmUOIEb6l zggVlt12*H$2y(2;UM}g1o;zU8SXXro@A3;KS+fG0&gBb7hu^ou$*8cP(Fy#ajL};h zk^2xr%2J-OS<nkIuK7>oc91b85(X|c@lZ1;77aKy*KZ9HwbkvX#=az#^(YVBWMr%* z$MRUI?x340mCvbGC+$8rYB1T!OCui$moKQcaj8ls#yM3?)`MI+)8DcospENBsZPIz zW%Voj>+V{*Gg=#UN7veuZeL%!K7Q67UjIbXlqdDv4D`^hbr5iEQvY@)P005`|LSPZ z#!!73<VawAfk*gF-}!f-R$tlQq0G`l0VCHaXs!Wv60jLVun;^Yc2_gjlXuwDEBid- zb~)p{z^@{xD$JmuC$#ts%9I!{KL)b!Rpi4e8#aR0P3xglvLy_PSccZX6I-T<3RoT$ z5w&v|)B{`fb4NkswnqDaZD!9AI}i2&$dSPKJRGia$z!}1_;l$E*ZpzFev>&ww?S?N z3?4GK1kTB`VniO0)C&L*-lz+2TRxwdRCR`ft*$nMj>)T(9r&UKtsRtyx4ba*#NI_5 z@iCo6uCgHVmP$T-_Y6x<tNT9;wr}FdJSJ>UTFHM|cmbQf0KIPESulE~>bUL*LPS2C zKSJ2urN99)gZ&^2+`>4{f*yBo`!`@S<NG2L?kdJ26+O8f*jpJ@Cg9YI5O$g^VKxQ? z0|giYWU&rDCy>S16Kk=}ZA`oHRk`?T96zRn;rqI5-1C_8@T*rm#OxceESFoxXiLD) z<9iPtHSVZyHjBiDjv8DZH6CoLZ|{0&=8^J~by)y1ZttZAQ`Rm(fn6fzvwV{3i<tWw z<gS1*56b|s40r_qB~H~zd>%XoO)s4R0y6SA`P4h8jC^>1fdD5N)nbZDM35FWN62U- zFnUh|uUhN}z7FN?6YLI=iibYrH^%Fk=tb^(%$5*FiBWkLaOUSLGqx{}Rzg|<&1G^X zQ4>KXx0zkfBvL96bU9x4;g;@aEpR?nNz_OV@BcnsJpA)!^1~vD2R9QK?4N1veYY|g zrYl9IPcLAI|4AvWe1&nnT7;D{WG@kWix{<qQ(27q!z3{_54CAe5=-^vac&96^{^;H zN>5()J(&*iIm@LNUrQR5$Rm)u3dVebBvK>sD>@6M@I2BN^NS!_i@>Ls&q&=r+XFR@ zIl4KhJK*N1D77=xlRn8+rN)z1zgY2Y+&8v7M%%-slkOFMkxQ0fRaA2A=nCnWeqX5* z_@VXqF6kR2RpScCQ6G)@d{nJe<7yl)`tIAPhk0mlce$bvYDYb%Xt$Pb1HbP?c_ESN SJpQt9;KnlPr-Q1zD*gtBt<~cI literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/charsetprober.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/charsetprober.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c9b2454fb7ddd252581ffa3ac8fcaaf0f80c3846 GIT binary patch literal 3403 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachine.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachine.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..87b7acffcbefd5d3304aadf37d0ea727dcf03600 GIT binary patch literal 2834 zcma)8%Wm676djU!(6X$iNsA^(AJa_{p^0oXivU5<CQZ_A8n>{6E`$~Y#TiL-DN>mk zIdR~uoNwqqbkh&wwyXR?S3UPq56f1AQkWq*k8|%m=iZ_2?(DRF{j2v|qa(!M;@nlk z^8++{3!M_m%S2x&Uj>;r@%z3feh{jr>TiUq>)<Tt*OYfCx{bG3E%x7f=(}Foei|p^ zG}nhNb~>S{#TDS;0h)b`PK&;$MBi6lKOhrt1mGCFUsny)#Ct=9Y76(KYN>79L%pTi zYUhnO^ZG5-f$8_ktB(qm<|8&XHyr<gI9d|dLuttgIjKC7u8_ytq{9;#%fSgItbRVz zd7|a8Fc_Q0#-+(Di;cu61NY?jg<&uakZPA3YpFDXbJ%5cqSIq-Z_Cul7ipHsq1H;e zaqQ-+3#nlhHWP=1jJ57od>p4)JjnEIS>(Ffh261q=|uPBGniZ7kc{Jeq%ADkb8v&$ z!f=t(u$&rwoE9@X-x=rR(i|I(F1%)Rqh*YCcZCJ$9QN0(a!9nW7-HIKqpc%KV=SGy z;?9DS`z;1KeD?6*Sp{()F{Hq>>_df$jd(D`nHwW;;y=@)I9peSp-9W+bt~<Glvp0e zS*j#d(sEkBpDv3CY7B_hMvh}E2U>#;rE`}KQ>}WHXHTCj+?xB9t29BLkbB^rcv_Eq zg#f#2iF46C20)y4suP$@h#$fux2$%QBbZg%rlTBUaoVvovAYZfhG}(P$O0G!VOpCa zO_s?iUyM^EWda3~B6l%Fb3`<`coA-q>ZCZ9aHhh!OvlI!7BQVnv`VR7U?`<rg|zks z48zTfa1_)+@Hwqd4i0`gSTI`&eva68aSDyHmG&1+$@Ma2idW^iie^(Nm$7o>*oD|C z(pHd<7q!hK>6b}1Ly{4*m*Ez><j@ooQo$lw3@o4yc?iOxV)7nuO?;eubkUvKBQ(2* z?$kRK5l&q69{0Wycn)0csO}nPG~PTFN8y?9a5CfQ^Y;xOxLai-nxF`>vJ)jUV<Hki zf`W^8O1&u4dAVK9b845(tQd`OaF$ym?S90wHf0z^c|6fkR5oZ9BX!icc3r=$S)C0_ z-%kD%<_g^X=gF>{On0a0^v+<GX6nw~^YNhA`%2Lex9C{ssxZ4`9*MGB9j9!3ejN9v zCuB0sQx`?|h=?{i;Wg&Jw)g7h<<q^l*pX29bkTjuB|$iGM0|lk@Z{}x0~27htn-Ov zLOgdpgKu9I3ddvKr`H{H-=bNT$$NEugL!6TsUv+c37mBt;{h5$#T(G`hIsAc&2#=y z@VjsJ6yBm5&j*<I(L_|I6+BkEAwIz9N8)wB?{&=6I^@HtsEMPRYTQGZj6h%A=6<=I zWU;l8qfZAXL)lq~T@9A)YQ+#IVqwZ{W`Dk(LhLq79XF<gIWpJiwLx8z=4(t-=_O^0 z(~9BB7Uvm*Rpe1dFoR_)*DqbfQ{Q3GUPUK@j@O2!SNsn3UdMa&$p&IqJJ*yYb(vlA zikPW1^(qH9>R4VwPII#3;E#wBr2o&@zR>lH4dyp&S@UC=VXe6zq%zlGS)-~!N)eZv zGpoGL@cfUWVkepx!QnZ#zWgt@HthSqzJ(e7D$L^1yZtkt!Hr**uJ{`ZZ-KPm-8S1; zTec!Pd1e`%80{!}K8v&Y`O%CbRU}blNPjLXbCaGvrtVYP8%|9z)yAE$>2qnc%q2s$ z^*NfQQVl<>d0`j^VFxYXxo+KT5ma60vx%*0yip8}@V|`bH-VPn*OklPkSmr<gnm2t E7s(6xeE<Le literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/compat.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/compat.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2dca3a408217b5f8a142e8579af5d97b01a02826 GIT binary patch literal 310 zcmYj}y-ve06ovhlpH}UH5YIq{HdQ+zA;iRpkjjDuijw$N4J5I#or*jX3lHR#sjt9< zT^8=u{qE5@(%H=C)90_{OV1GcM*oI-ee2Hz2qbWeI0E#FMf8UBrJ$S$#wjp}c7(?e z@uWZZ4)F<v6xhjSJP~+{viRs*(ETyAKHg<S6E8IO$R>`O(YV<Gv}t5tH2qFG`tY<4 z*!a+DmkfPVO93veN&`i(CKf(yVMhfnszwXu6X{tf4fwgrZKrb8s6{n2tyrwy_my0& vMX*j+9H19c=k>nS0&HH(PL+14Mwec9QVcEJT=*h$=8@7VW`0u~lfVB9`JYd2 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/cp949prober.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/cp949prober.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5acfb64c05869a319d2b1ad9ea4a202d48b08e38 GIT binary patch literal 1077 zcmah|%Wl*#6t(l3Oqpp*c?cv{uo^)-6?9VxmB+MVQKnRk*hC;J6T59H=TX~1no)OC zso%ne56YGmzrc!nofgs!II?|m9pA^fColT_rO)3tzP#!X@`JR72lzEiy$cH`oJx|> zh*HFkbTT(`Eq0}s`H^q2CxfgLbtrj9xX*(N!UN$i+$iLo2^oYxDYzQY`r+QE(f-HX zR2!8}E0Y%an>>~?ooYB-8x=gwk0&NJVjL$YX)eHee_TnEzMUB{I*HXpm_t=eg@Tji z(c$*iHk*vu_`~kr`vgM#8SWL*TL1)!C?}C~NscI|+_?xNS9sjz-UV6E$Omk51{_=x zk3^Vrr@m$VH{lX200-{q9H)K;iy?-dlZA8YEa1?%##_KU^G&cIuy@YMX^1DBfKz%f z=+?fjN}*H$m+O$RG*1m<3LPpRZQaE3z;vb@e80zAe6bh_n+sL@N@!t#2Tu!m1bdgU zM8;Y(_Kp178JesdmT9>@ty0O?H_uL{#pZL4COg?zk@G?g6JV7KGfYY#v$Wi9lrt4V z<R>sS0z#MRk{i<b-4-Pq*Qwv&2KgD`Jya2=P_uJT`}Uez2GfA59&8pj%L=^KJxl}2 zVR@X1r(n@oI&tO?+7a6y{Xc53Unmjh{|Xz*I6to9V=-)nyiw%!2ZIoMh1oGyFEN%C zypo7}jGa}nY)&j~bqF*<hs{jg2Dj=CEOq~?If;-Gx{Xv^C)P)dELcfA2B1+JA?<}d z&)QHmtF}=sB{bq#Ys8}Qr^%Y1#!9JP$);CyHBD96kU9XX24SJltn0s-G{|-%eA$$@ N^9Ykc1@x$W+~194|Cs;) literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/enums.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/enums.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d8399bf9f38691e74fe08516c97458df755ac253 GIT binary patch literal 2568 zcmbVOOK;mo5T;%f#n^ec#}?=UeV_swIY=*s8x+=qb{NZ)A<{uDw4iA2T4F+x$}X9} z0(wgROfNn6x9qhi{e`|~R+1mFV<e?8qn+L1?(8?S-}0OFb@Rtx8$bQ5YufMHg{KVd zZ4faAMYVyptI+~2zR_rr6<(JHMX*b>40c)BC9o@02U}Nm8SE-Gz&4a!0lP*`uuWy_ zVBex^V6Q2=O4nVjetX8vW*n3Bgk)nztR$ZZXayMwI3u}W6fB<Rqj8#N$|W2JoU)8e zgYbDUVhz*W3i526@-5N{64Hu;M7fZ!Xpl6HSLXI;5=3z$Oeb|SgdLte1!!%9h)+N< zZBT%{7inQoqQya(mIf7C9_X|JvFg&alWCs0S&*@rYZ7?8aU=+Xs0n9N&IC&`jGqx2 zot!WZCK2c^NI>!=ddav5Vgm8AFiSZJA>w03qNJf_n?nfN93z?+K{@rRG<-h^Cd~Jx z>HCwE<}tR{eE&rr#LJPY@6$9ymxIH;<u~27ZOfYFwpY!^_U>c9b>vyUXnYMOR_c#$ zH?zrfa~e(WALmg_?>~4kK29Gzq}Zjzf5{S>^35gWo48NWn4WTs&;Svrj8eIPKh=8) zTHM1nx;+B*ZfFNpst*iW9n@HvRa)A>WG2&F8mmJ47Bv9+n!Mc&l2Hx`--+Uk@!7NY zg&zt)y+=;ei-Npj3ie<+jZaCIl0eNg93HOH(^+O`I9z0fmmqwO=VPuEZhC$f)u*7G z`WmmmKZgUQ@hU2GkQ?pCwqv=L@7ntZU3<s2I`X4cpVx18Y|rjF&8{?_G!L5SDfPWx z-)cIt>hv7H{bWy;n%%CfE?<%*=sHi|qP33e-3E0JL~MXE%8PWYv{6vwmlE?KHNSSi z)8i-^EvkO^ePKVV`YF85u2ee5+BgRmD*ajzYaPq8+Mey~N@J&Y=yZJBle*LM{C(?M zC_aX13CQKj#NPi8z<v;pql7I0a6T9Sg#?)_CVBhBzb6hA*K77YS+V;4USI0A=e`R7 zEXn#60I>HG09ex7==L?Jn~o+ks7|YIwAY0}ZFv+oT=pVoNyxg<a~4PAG^Mj2ZiXd3 z^F*c(2r^0#!Z{`<X&k4opuQAq0)@Ve(p-=<0cJ;neG8yD1|DMl;)DMvZ4iNHlNNw1 zinFaP&a#{*VhaeG5uhzBL0I`h93imsDCH4QbCjsXk=`2o4oss;t6q?$Fcufe3=f;! z7_rO;Pyc*^?{Il6XstB+;wm_et8X}U^V)hh9Ba4f*-tHL96DWl&*~mYefe)3^jzQ! z7`qk5fe;f0w;ttR!m<})RP?S`;WHR`2qLg+Mbf|uMUEpO$k~G!Zi9%=LETgh3!(;$ z4SBD<%3*tf<mv3Un~UK5N<4>-oY6DfZ7dd04_wVM9J){xF>9S>3|A5?Ln2~)I3#cf zpH~p3FH7Mw0IQ{$oMv!VM<ixKeMcmu-E+KtuS?*b4%0+L6mDfo0`SP7{+9Rdzp(H5 zKdAmj^%tr?K{@r>wRx%m6<IsL?;UA&;m>aYaqmgpJ=$;ey0X%-cY&y?%eAjf4<5WG z$Ra)Zimu@v#Sy1&EUpnfJ$?q?3hHuIM9z`SI38$~N9BFp0@8T2_+0oNZzr`%xpcR7 J_YMf?{{R90Z`A+* literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/escprober.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/escprober.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c7e6166f8a28d89c1aaedf31ea49287e51ae1fd3 GIT binary patch literal 2559 zcma)7UvC>l5Z}E!pU?K$NlhA3pz1Y9NJccN!V5wbv`U=TZR137py))kIJfJ6y*oR5 z=aN{Cgycw-kdP2hJoc5BegZzpy&<0Z#5+&S?AcC3D#V?3Zf<9GXLsf|GoKcV`EOsX zJq;HK`IEfy7{K3!5q$%M6Ha{+P?u8VHD3#KS69658$rg+1g2{SSvRZZ4BrZJZZ62X z`Jmty0^7AIxlee8n`eZZf=+a|$g>Snv0hWyzCx4YW~V6|BHokzLm^?JyxHg7u-%B8 zvDj&Poo*;9dQy7a4BNwITWojzSjfai{h3-~PZiaoijfo^xU8|mc6PU_kCSq(vAc15 zV`H;^dG6uf<+(@u^EnUBIDgPF_(Wd=5yYjOxEiOf&KF*g7UeoO&T_7yc)YOXW`xPJ z+&Uu@>Slq@@x0<KUf}i_adW)LOYqIVAO>*@;FiT?u^M?7Tr&DS@4$1==|;{4fisLm z<TRaCug`@Oc^wgmRi`-^$UeBuY4xSUMJ&7++~kN5w19~|QM-NL5mFqUIHDPK{S!wD zuip;4qvoM691(fVfpB1X)akZjClW_PSdO-&09C&$xYG}vxUaVAauLSe)`=5$L<Fm6 zhSrp{?rF+tgy2`7j_4&YF^TDzOthXhrkwr+2y2ruVfvW#j5yOX?-IEMyxz;kR-BvA z324m!^YeeyEr9NKbD4cXRs`92E-R%nj+Pb_T~zdnqGix~XF?Fm5Dcvja4h%$Jl0aE zt1Km%XgCm37U2Ae#aK7&#*8Jo)VVAQqzw{@Pyrx6sMV{DDr?ks_8!-^Yt^m9gz$)v zOLT<HBC$}_dU$W|9_q>*{+f?=_pA5nGLJtCO^D!g0edsAKMdpK3QNN(IP)NPA`vI$ z^C>(o=1F3*2vaD@NC-<@(GnvPeoLJXu9aiV^P5q`*l*<TJL_>USRZr;w+@G0pWnKD z)H&?m-rzW;273;N?#p$w2gcU{B7ic;*R{ckEWs&1h7o-LgwQfIsZAH*MT*0mzN2gZ z#`fCGgC14`d@i7*4io1n!MGf+VkEc7)0I;?rjc{B%;C$7G3{w6KU#i5;tc9c09(vd zQOzo9O=Egc$;l#YtYRovkb@EkPEY-u=)MT$5>8)5vJ9l6$!o}?UWLl{kbfTu-dJt% zIWSQf2%#movq3fG1smvS`O>XbMCMn<tK-;&5t%^X_y|7=@Ka}ik20@J&g~}lH2N%T z2BM0KRjO&D>z53^srmoxs%yX9t~G;L?G2lkLp#%YyFK(3-c#l|Z9rpzfp^yH?N|5z z7%jc}>&rH1sOP`EP-=@95+iJ39rDBuEKyD*;Ce$F-MHk7i~95Ol!1jfR1{tUbNuU= z0?>Xw)sBC}lLG(4sXo?i2=rL*QJct*j*!#F+Jv4OV<Xmk#xqTJ0FpWb_!*>^;o4__ zX@-!@aQzvTzr<!Q3(&M+Cf6Xa1Fp-%x-v)#N}~7d2^Od#>|TQJ!c6xGIWnK1-(Y3M zsBcTe&1)FYITSkOb>NeHD30Sa{Urh_$yE3EclT3N<0TWbzI(uSs`6bWO$&utJ7~aM zVr}n!Ro`N@gJdQ3750sEHx{G~IZX`*7N_}<Q2<S>!;=^aRV)+grAcMa3L}=HG-u8M zY_x>n4cH`F1wv>ZGN%NYlZV#?E>A6Zk>V(6qpO#Ki92AT*jS7)51<(584LP+=p%14 zb~J4IQ%ROF-uD<&B}?UPVnH2)f*zm98+aQB$xS4;fF#9fmGp$~!?Jk-&WeD_f9wSx z!icaCS{XwtE!qX!uno&pHKtxECB<n5rd3m7q9)~OM@HAo{EB@c$%t?mM5>8MjMg-U oBJ!ZW%$tU46{<y~m27^v^U{=9cT!J$fd`GS)!5+UCAwn#1BbU^tpET3 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/escsm.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/escsm.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..459afae84f3e47d4dbd405e422c5c360e2f9c207 GIT binary patch literal 7316 zcmeHLNpI6Y6t=TCd)uT71xi&R4mDDmkX|?-)HXz<ZIYrSCkte`nMqre4Ld=C-@+f@ z!tX(I<&?j`iFso?Uh1|=n>Iib%j0?5_uf3uJWpmjk%+$kvGrk2<hWm){l|0M4yCo9 zevU&N;#*vsmw28-%aRZCAN}+WAi?MX#W=wAxPz4Eb(^}(9_g5jheCjY;L^E9i~LU7 zz-9Kd?|3$|l7LpE5cW|t0f$f+MNsscAcfHbDFWIoe(>k8v(aXJmp#44<>rm-_2{XG z5r_6c+fKu%+4$Xj5Bi*~hYnzydj95)6h*623`bB5M{x|rjjY7cLn%Quug(g47Z><( zjKlEj&W0B~vO}XDc<{`Zo*i>U=F?$ki_Y|BmtSQAx~2}B8_l9LhaO4uIDzKz9G*uD zD9Ps10(vYZskV34>^|*%GbZ<Qq~kqqmXVQ;ZHy)l@EmiwxhbX4nzV?MbVjA{B1)k} z7WWcbs&V3zAzkL2$dh<kX`G&QaILTO@eu03FaS*u8Xq*Y3~)n%HeaJfDgAaYo!fqq zBcVK4X;>6UtkF_5P3|klEllD%(Nr4!u1aDWz#5{t#;KypE!;8aKu2j~5^gD-lYw%A zhY|1*+pis^bJ<)jov#c-;5rOV)G0f7N5Th6Pk{(*CWlob9ClT#bSj%19iR$>RAB(q zZT^xlrk{xaGy+&L`V50*qrzg*N%rDrjj<4CiMZoLh{EM{PcM?zbe-z*oJ^5~PsZhg zzHO;h45pgSf5$nSf3wE;Zp;#K$B7UlV^xGn)=cYNUvssNRWp+wrEyy25;paE+O2Y# z8u47&SO5XrS-AxFm$YWitar!tLf_us@3f22v1%q$o@C*?@xmXga9&s>t=e_tfUXHJ ztBPap_V4$)oz*V7lbGfdxauFdxJ-h$GiYlnoV^mED9QO!jRb4;-D;f#3)SioJ>%T3 z*W_}61gW%ECrMB$?pEbep(59J_eup414&sfAH6A*NP-@z!ij3W!m#2NNsU)6%7u}# zB<G+G-Z`KsX@dfxGaM5N^xRP$Rvl23v_XN;8w&IcsPCNm9CnD%{C=6~w|kl1SucG& zIBTJF_S5NcH=9GiVz>MmcTiW&z+p7P{S4L`T6?Sag@j+VyJ*nDuh%G!)}vpDxSt*( u-{1-a*7*&7onN8XQ-8qc<IO8P5oEyL;MeH=>{ieL8$8?&{yN2W#{CD|j(+$6 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/eucjpprober.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/eucjpprober.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f0d8c3dcc69adf9e3810b1ec6d4239272f750321 GIT binary patch literal 2363 zcmai0OK&4Z5bmCr$BylIv#(@@P*!4*jMyXsggC5LERNZSHck|Kg&47F#_o<Y-kGt} z(?*HqJvnHv{0R<R5WlAnTsZB8AHW5wdTh%<JUr>{>gq>TfAz}8l}hQGpLbsVSS92) zvhs6){v2BNEp(i48k2+uG_eAU;@pbu#0eZj+p(K?foEtZE+l^78`_PFNhv59+Kbnc za!{t^G2sR7UlQ&MXJ!W#UTl+k=`95@bxW6z<ggp1{k95~(B*@$cN(R_%<5F%IvB?) z`r<-~#%U<qLg8*9VP&H+<cnkTL%`i?zGyr<+K)0NqwZKm!}L)a#ur(X!Qu_G*chft zoU0Xn)$m#SfE^s}H=p-FvE|R6Q`r#^f&`S4z<NVYD5u=I^aI<_Hg|w_gv(v-U6L6M zJfO|1fiCbOFI|$r=WDzSWAP1fNKgV4DtgVx&R^9-NbrXv3dWXw0-Yj?PRYy~STk5u zwsK}LXRh*Q1jd5$%~+h0K?!$o0+-WPeNDUBcqF7O!X?^gEJ`EAm~>$(edHB;21b@8 z(!=>pzJeVK5xfbUFW_3OmqWK?YgdX)D1g?<M0^5ck+EJJW*K8Ykv|^ps${e~ibnUl z<0$6$_s&kc!@Z9<vP@&&iIflJZVznBh1wP4-e5E`7Ty_M$Tbjp4_a1&j?gMCQ6IiZ zZpR$6oyD8}8N7Gk;8pMdB0Gn10g@x}eglzQM+zbX(37=%xQ46^?5<;nJ3fS#VZ5MH zlWQv`+%bS$(FKj!SRCLK3}dw>9-O)V?8w|Z7nRFc3esgn1<++_n20^Rz=Doglg(9m ztDF8;toEOUqc8=V{g+@r4%7ZP><jd~h0rUQFE;dyMz9P03EjuM^HX^7`R@jGI)iVY zy!`dG1-M%SdrGI)7R1MEdkRiGa9>%n1uNd5z`>yhKD6T0nn9LPrNJ7wcKL{$Rn6WC z?B&3%Ug53-7dUWtZAM-@Q;S=``DF^xxdovyxW?@VIBpEC<8128Ae#YoV|5M^@*SWZ zw>Js)x5@W-!|MKjSv{+MML?c2muDGyH$l@|udE-a+%tFIo{>4diJ>~!dgb7J@gCsZ z1kZ3=le_n_ZTQQhVEZ&u+Yo+3xgDzQE~G(Ndka7liEj1wPx#gEKp29>gtlXm$};eE zDTNHjGEAuwlZbYk$H#}q+KY$%zL47GqC4)(8+g$z?9h<fYaMpjK~sDAN$oxDv~li# zdHABW&z^R)+wMF%?&#}%aLe9UN|C|{ZVG~Ri9z7!QxiejIT3=(iV<&A(Z&5{r`hN{ zZ9UfO{h?wa9gh2_jE5@JRdeSsJ&CwTdqQutpBx@{8ZSDm^W?Y*ljr+&*Tkgu5eU#x zY8pY9%oCWYA3kcs5C;=T%V?7CgBqVfGwGDj4Xb9dNfq*mV<_w~zf@@rRyV0fH)+YL zT2)#Gj&DtBt6_&vTZS7VjLmreyFh?7$$)}CqEB0fvXt@tnUyDI$3P@MfXz8Vb`qY~ z?fiZ4BvYaoj3>H0&&X!>_h;b+Uqj0<`iObL<j$(1S5bw607U>33S(d}mJIngM!L+{ z**J{z6_a>PqSHS3A=D3bvEnNTrO{kh=Gnd{;uxyR5^~6BCTp66iKXW~Xc>B@Ps@d} zgP(ubWZYK0s$G$elg#*F?yc)dcb?bsFp!vQ^+s-K<4Q^XZ-OagP?xZNtkkW%lzD?u pFIDGx?egHt42m2Uy*$+~waxWLUA6xpN8};a4Wn=k%s>C^zW@}vHUa<u literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/euckrfreq.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/euckrfreq.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e8727cd2e67b592d6eb43ac7b6fe9776c9fcd1e2 GIT binary patch literal 24067 zcmeI(<)0Q;kSO56f(Hm15)#}kgain#f#4P)A-H?v?(Xg`!QI{6-QC??b{_VAxZmzS zaCd+EY}Khcb^4vaz;ri1MvorlpM@DK-_05laxLWl`k%~^LqhU}=FQ`TQZuAdNX;;n z!VHOAGfSngq5e=lB=wJ>9d-V9M}mBJ^xugdn%?P#HfRwclq+FES@lIIt5H;1Eo>;q zwXCtWO*%v&9oAa=L$##=>!fw13G`JCAIdVUS9m5`pzvJu-hd4X8?gzS(aNaS*dpDE zZ5U{BBLj-qo5Yl+qV1|tMYrMWaA$|L7g~0TmV^tXjiI}wnY8q=_EO7kYkLsE+H2Ll z(y`{{z*h<jMEew4XgOys1KOHA&!rVtSZ?T0(SFSba1e(OQ=znN<LzjS?KrG@1V^z` zOKfCzZdcomDdZAmRcJ4oVefH;6F7-esHbpR6o}4<&f*--W1zwX(M4RsWn95k{OO=S zUBNZ!b=<&B{N)OUs!l^n&3#b@x3t{G9W1rB!WU<UbMIRFS9(wM#HjnC2Y85As*glD z?077?Wy%xLQ#`|SlywD<^d+_JTk~2-KZ;&xSt9CZz?YgUqrEhn9WS-S*78c!UiGyo zr|6BSrFl=$&VTbvqPGeiMEmSrY1BJwJFR8Id+C1;%7_ork65Moqn4QXWGy6OD6191 zh{7Tq!XpCOJNye#M8vf>nH?PzI--ZPlW4XhTOhl&NOn~5i6V=lAS$9EI+AGqQWOI* zQN`X^qMo9?jy!8hXJ>q+kXG8=-j;}Mt*Yjv(q5uC);dVzisGS*0mIFUFHL}In!gq$ z#5edBiSQlrI_-N=IeU{Ju{4wMbFjvgB-WB5x0bF>`>2}C+FC8iMJbRHsgN3JklwbV zNM&2~&pVJ-b&WzgQ4iG&(tSv8t(()nm39|B7WK9_rK_(fT_-*K`GOD@Jv3)9AR|)w zb(K(|r$TLeGbuC|O;pG%-60)mXdG*?MaPgBpRDC@S}oDvhW=n%AKMlpo<b$fy&N=C z^ot#PRC`<NgDkfFh;s_RB1B(b)o)B`YkXEM7fczhrJw3g)_z7dq*rLId6&NRrZg92 zSA8u#q?$we3%)gegF+{Jb6SgNM=nuLg^pTsOY<NvnrKd=a7#4Vj(iHEMfpVquwKh4 zEm`oFw4g#E^f5jc3QLRNR}@7tq)`1$R2(Hx5~WZY2~Do*W94yp8EY@C<+iu1bfc)8 zsJ|;HFRFl?(j(~a%Q*l85zT;#S_Vmf7yW@hk@fS35rv)@`g_Z{m85@TlhghYRYqqm z@tyIn^o{CZL#s%Ws+KWt1iBklRUxNn5IWgg6x9?$H-!GlE`4iMJ852h;SCs|Fc;M| zztb{KAs1>`tN9t*YKdy2hQ7?!`ig2I4C<)1HNK~z@2%CfRu9eX$gEIbn%fx-L@VuR zC>p4GQ98tj&LygDZK!maw4y1|L{AmI7xgo$n6!~8jnM>QT|rY(GX!Xk7HEm@%-d!_ zf1}Qu^0Ty+YHJL0cv^+c=2f<%jY3;|u(k#5q?Po&GAe_<U$6qztwlGvy}l0Uu8`8+ zRI2M#ZyWFvhC6qIs5A2D>u6giwAS2NR7ccBw8)gMqMz;PCQ6~&UDN}q9XU#0E75XM zBGEiMTBD1#tF|pv=xJMFQ9oC3T6Kg=8>G3H>PLmG_=Ilu)>b`Z+wY?O3fV-x?dXHP z=!XKITSTSo7$ExF+CWh%dk2XIV+e*~rGo~j9=5H#OB<#z93wCi+qBfeC}{%Q+8965 z=NN_Us-s1twT!`7jKg?@d~SBoM+3%4Cn!wBBuvH>OvN-jb5LI6r%T7$7F#+)+Dvt( zsJ5%$C{3-J20JiIwUg={)qk)HT`<nP3!?k3DviD{)&|=9pS@wFceR8Q?NpepFb8un z56OMD&Zb-!Ju&K)Xs5OLS{j-%OJRX@A;KHlN#9|8cTrGZA8S)I$HIJT`5Zppjx+ie z8L$|~q*?6fCAuamZd-h5JNzz9V9IVh)-w9@87ONlKy7D4a7Jf4;z)aH8Gyt_)kQkZ zKWYi5<p<FqEm1{FT-8!6L+Jm7{#HY3dsksJ-lCly7tLF)c?DKt6?&?!7OlZrtiyV2 zz<rZ9iYB=5O`^@n@6tA_<}$v%QD0z?LP>|$5pB_&MawSfR_Qiu#}4eoF6_o0{BA&9 zJHBx4U6X$^Wv}W!WVUw66-3lhT@(o$&`<TK9g$S`+c8meKom>MU!T8BqW?s3aaS5* z?^RJXBvDBFxeo^o*dsb5I*j5DDunEaV?a6EVn_@494qa}r?6aMl53fa7}lO!J7Ux_ zJKEx?^carg1isMsryakDHsPc~GHa(qD@0dO&$*|q{p#>3PV>k8od#HpGpf0rc2;x_ z!!@55B@r!Gy&%1a->hB6C24NaCXCWI*adYo`Lb$wS5O~e6nbg7qHq=0a2+>r6Sr_1 zereyii^8_u6WzxHJj62R)>kd<$gI-iqL-paS{~yGo?@_T*<;5uX=GoLR(4dzV1<HO zhTyrD7kG)Onuln4C2eBIYtb8gaO6<iqUd{TZJKD9LPO0pkRMBYHQs62ZO0*N!$g~m zU#+?V@f0c;&_j9|4fIX6b{;$NpT76zJvZP-q}4aw6*SYbN4iy%$CP_oB3S!i+edst zNa*jOJLwd{h{7Tq!XpB5nljXYrlK#bwQ&UzMZ1h2qHxVxR96s5A(p}%YtKZHt!)-X z5k<vo)o7yV*z1fgpSPL!0u5c-m#Q%^Np*%ZVoGBnjlO&MN;*;W9*xY)?u^l*xF{rz zt?z^=jwmjo85&O%A2X#1M6*O+ixMK6$tCP9Ao@==hN~*%O25&vSM;rDvm;-ig_cCt zzQgxOj3kI|N>WiWBu5IAvp1zE6;dM&(qgSENGD3~$mP=X(hSImM%MPJMsdymB9lT5 zlV>}(u<9l0aM2`DHJ95+nptyU+kOyb!H@XT-Z_|ytkx>%8)4f^Q}&B~QkbVD21Z&t zfS(nzA*MoOYx6}b>}?{=u9^cyqzhCRViA5(_*EgNC>L@g5Aq@(@}mF>q7Vurxr2&` ze#Jqf4k3lYVrPu>g=lK6sFq^*4aHFchkfV`h-JrRdzXkNi|(VOzEUWSGAN63i08l2 zR0oxpW)f8pbrn?<?K35kGs56^YolCMF?)-OZi&9KW2@$+u3)O>KQu3s{wW%xubCZx zNh{%R{DTMf2CB>LXfCR(@Gq*MDx#Xw%4sF+sAg@PwZnE~6s<6zx<U~xd2qx99nn%> zOAXaZqWMN0L;)>7W3;}i)@tgjg@g)66*}1Vl{0E9tQ5Ub{RwrfEfm!i^%d0<6}4>v z>Pz<<KN$_At4wJqI_8WY6dFkzqY0X#83GhExw)tXTA~$N<DP08QCqY_d#rZQMAZ(` zj_8EW=z=v`x{Bg|{-~N0xu9;=N{h}|>n<HA?IG%kUiiXC=q>7lwVL~i`k}BL{Y3-N zOgd2Xz5h_f?0qHrM`4gc25YlT87wWYy4FPwkq$)^S2|2oOW$mJhf9xXZm7D&T1nM! zr1Mc05sfb+`a<*9`u;^Eh3Ix<kQNb*u{OfwY0|jTk<w9E=c>*syv1m1V=xxuuwKh} z(G{mn5KTlBXJj;Qn?eiGB!$VCf-#2vrm$bjRBO{P9b*+X7{3v9w9HVLiCOp$v$09b z9MN3N!+b2jLM*~!EWuJN!)AMrJ8iji1y*7eR$~p;VjW`Jv0k(RyM3`YiZ1xjEwM?u z8RvY;9IiexwpiPWZHTOT(~jh#?bdc+C$=~!4t{b*3N3v_4U8%wnuJ}N<LcXr6Xp%T zYkl!VyY1brFTZpxUg49%Z7k4y!WUv3wi&g@j&jaeik1rFaX|B4)p+{$iPD(2UvvP! z7<y222#4{NDO>d&6dkdaRGJ*EOg?JulXRMv8mJ_lA-ZJfF)iDjy91%SLjNdN_(R`! zF0Hsx$MuyEoe-tdHxKb`>n}Qmld7k1z?6svoR&tmw}7Fi^_{VnSM{uDq_uOR1m>L= zUBE_DPTJdBOG!KaHsvQ=)N);PNz_<%upJLIKa}n?@3Lw^Yga_6?6@krh6B>;qKl%1 zwoMS-uolJPH$}H_8<AD-h!Q#NuIL`_;{hI`h$AbQm&uez)*j;to+7T6?D$}4OVMJ{ zGu7uPE<J8aYNwSnYJ|RT73zuliY6$W!ZUp@>|Lk&QWQ^Nm#@YvX$3o8i}GrTuX<DT z#@btat@)i%2}QM36Mw!8JT%~)zW4Zm-U=T@DKuv`^h;6b{?K2E3Z+HU4GoDLN_JDi zh{7Tq!XpB9J2&(pROq+n&ylr=h=kCsp}#f^NG3{v8;GpB${9zczaxrEiy?|BDx(@z zl-OEH{2|?rC<cTxIjZP|r~{%&qoceXCp3>0Eivy~7r6&}u@7Hrj)DDJ_FIc7jfJle z8*va92eiZ!#YY$8bD$6+xQqn8u*alxaa#JlD1jY6ik9iS>Bz6GCB!#q|M^Nqk+kea zBI$Sd9&@ZE79DgggUx$qEg}~A&`DGqNXJMI=?jq_7L{^A&ush4X-BLjwIdmlBLz|- z6;h+JQE5bJkq+sR0U6QX8JR>!4LycD4vO!fS)wcWLCXYd)9pCpg8C`^V{M9qvS^v8 z;FW|s$BjCHtkR$GGg@oOCR%N8c2Rdje?%fX<|>?*=1~0wC8W_Dc@YzkQ{lEKm#C|4 zar6xlMZih(P9dsur>I_5IBhMrZEsxtZ`Sfi^CBP4Xvr^n>Wl)Sf+&Qus)a>64A^5p z5$Ufeiek9_`7*SevtzO7yy(&AbF~!5ch)YTgtR0|A(p;kF1)m~3@+*`D=LTbn4zzN z=#pwh(eL;Jf8wmK!C#_E_#6MAGOil168}o8pem~2vZ3Fjy0ivrq87e3`GJpGTUrMd zjXG$pjcQ_h>nco=UXj+5*2gDb;_#X;`KVb%DRENas^)7*f{9ulDXbTjM_WUq;kuR^ zNQ&szZi<qjfzxh@8j2dBF&3M*$&pXYYbq*>u|7veYfbc36wTCJ+T`0tHC6C!`A#!Y zfaYkUxrJ!GQ7uKS&>CS?LyS*uZyRfq4Q(sBrcl+kcGC9ffR4D}3Ob28qYJvC8@i(h zdSaXAf=)YW-g;?Q<4+-l!`rI%P)+Cxnke+Lce_GwQ6Kb0KlH}{4AVSNGzfz+1j7~l z$#Q3?^sa-Z7(eWD72zD2&jroX_Xr~tepMJLx@PSLzO*-s!U;R>nRj104x==W#u$u6 zDci=0qPdpqc#JJ}oHK8{>I6*0Buqx&j47fArnJ-CSTtSXzQeZ|RYqZ|zGSM?L@8Cv zDop=8K-x%khO~xgmA&V+%(RwD%PdiAm-e4%HqJUNwQ57#^5MCbht?h;4IU#c=GZnD z^DrMboVGx;5R0%FV~v{XGL}e3=zC(yQt2`*M^SzAu|m2Mi8QYgePh5htd_39T0Avs zooGD*SHD3NL-Tax_W?IrTdI0MdPp=wb(2CzYw4ZVTVWV}k*;$=-$@5yyuRoP;ZRI< zvjL?<Z?ybi=oV{#SbJ{AIgGU9EmotK>N8irRdYJgHqmzcV8>~F)eXI&d51zX(N0l% zJ9dfQ>Dy>WEzK{q+!Ix?_N8h~?AE*od$AAuaR9wEKQ}ask1*@=C}}r)4{DjJ<&fww zj^HT5XgMZ&X~%KV35+)-gSC^=)6!ScQ=e0u!C9Qc`Oj<ST@YQwC0xc8T*Z5z@|x&^ z%e^kTfv;WUeq?jnO>2)uw?yA+zAd_gySRt@cz}o4Wx!@<ytel^UP_04Uh@&QYe|n^ zUG7DbW9oaT<&h~LME|NjmOep7d!LGW*jq=-OfAo>otHiry}(P%H2IBfucY5N<C3*R zsA9)d1754X!COqTw#pfGMRoPXw4*)VY3U$(ue!$2H=2L^yr%jAA8}OmmI0rnA)z;F z?u5ZVc7#=!t7Qhhl!jFehwzAiFAx!tu*TlVq9}-pXo%#3-uk@5jEZip{^!Y}dZKY! zvbxf*MKKg&A{M?vY{bDkqux0!t~4IvBLUv4{;XQlX%9r1tbMJT5V0LO2EDa3(ejPL z2YuyS#u3%fO9}nGB?|p2g?^L9xB4208l#=dJt9hoE9O15Bayz3=6xqxWNojOKk-SS zrnT=;-jO5h?I`-*j*bc;p+A4!IqQs03LC6l7Inr!g~XbZpp-PJXrsP0($$}@O7m5m zaz-*O<5jn)HWwwgmI5hJTcMCC-`MekmQ)Het;I4bwKShX8qvRYEW!?q(wA0YpD3Lu zJu)C8GU2z+RcB<D{(vmlYOR8UdTRO6T2}mopK-@Q*+ltWMn*fPi`L?rz1dZBAdIhM zQZ2tobK;4<T%z2_gRuIRe!d|8jq+Msr!Su<oN9hi0fbj5C@O@)D1u)xLA8%jRYZS_ ziYgStENkJ-t17C7-xRv(`^wc%63r47S15s!D23TRereGFef13ZPV}7}5lk+lS{CI( zDU~{N=&$1-v?U}6Z4L=S`$B@yPZ<(~HirbEPXI%L(AxwdfnV-H=#G#eD*PZ7M2Gtc zK@7x1EVvgI#6}#rrxJLG5x7wuxG@m;9v=7&5`2SikqF<x56?kjBtcRnLvo}*N~A(+ zq(NGwgKyeF24qAgWQIR>gDmi4d5{%9!S{zC8?qw@enC#;LT=<iUgSf56hJ`~LSYoa zuPBOQ_zlHT0wqxjrBMcDQ4Zx%0TuB({(x^6!C$C^zu~)dP#J#L1^!wPR7EvZM-9|O zE!0LG)I~kihwo%TLo|Z#X+aY-MKkz&ZO|Mo&=RfC8g0-P?a&?_;O}5TCv-*^bVWCG zM-TKwFZ4zq^hH1P#{dk(APmM348<@E#|VtXD2&D!jKw&N#{^8oBuvH>OvN-z#|+HG zEc}Prn1i{Phxu55g;<2eSc0WkhUHj+l~{$<ScA1#hxOQijo5_E*n+LthV9sao!Eul z*n_>;hy6H!gE)l4ID(@%hT}MalQ@ObID@k|hx53Ai@1c#xPq&=hU>V2o4AGBxP!a6 zhx>Sdhj@g?c!H;RhUa*Jmw1KOc!Rfihxhn^kN5=l$AU2MV{{M>;Sm8|tqI&<3*46r zA|nc-A{wIOOT>V`83wWN75tSVa5pK43(qQo_(%XxuY!c|m%YHP;~)|IC=&Q9K#&+o zkQ9D243Z-SQo^0{AT`n;Ez%)9G9V)|Av1nJ7W{~;_z6G5-=~A@$N?`E1v!xmxseBX z;pfP}Gnb$M3c_Cyg2E_*Ur`jr;E(p8I7*--N})8$pe)LvJSxBqli+v!fj{vVJUj{h z#y_Zxe^CWhQ4M~=3jD|%)I=@RMjh0JzjFrl(EttM$L*jonxH9~AwYAqKufejYqUXI zv_pGzKu2^!XLLbVbVGOaKu`2SZ}dT5^h19Pz(5SbU<|=f48w4Yz(|b3XpF&FjKg?L zz(h>KWK6+SOv7}{z)Z}-f0&Iqn2ULsj|EtWMOcg_Sc+v>julvmRalKRSc`R7j}6#} zP1uYr*otk~jvd&EUD%C1*o%GGj{`V}LpY2hIErI9juSYEQ#g$?IE!;Qj|;enOSp_H zxQc7IjvKg%TeyuoxQlzZj|X^&M|g}Uc#3Cuju&`|S9py#c#C&<j}Q2WPY4McN*MU@ zE^r?$a04}P<2(2Q5fKR<=LTL83cPk2M1x1}fu99~7>J2j_zJNR2XPS(@sR*uBO&}a z5qt{|?*e~c4ZcTWB!R!A2g#5eo)!o0?FOlk8foB3X^;--kpX@N2r?lven1v@r8dY4 zFN6d?BOAOC7UY2Eyg^RnLT=<iUgSf56hJ`~LSYoauP6#Pk^&D2g5oHFk|>4JD1)*n zhw`X^iufIW;7@pv6I6m9B7%QV8UMl^gP<y^p*m{755Pe!)J7fDMLpC<12jY<G)5CN zMKkz;A!v>kXo*&6jW%eDc4&_d=!j0}j4tSkZs?94=!stFjXvm$e&~+@7>Gd_j3F3` zVHl1P7>Q9BjWHODaTt#Yn21T3j47CkX_$@~n2A~V53?}`b1@I|u>cFP2#c`<OR)^g zu>vcx3ahaOYq1XNu>l*g37fG6Td@t>u>(7?3%jugd$AAuaR3K#2#0Y5M{x|taRMiC z3a4=fXK@baaRC=`372sNS8)y3aRWDT3%79xcX1E*@c<9;2#@guPw@=T@d7XL3a{}7 zZ}ATA@c|$437(q-?rR2N;eK!6$M+xtykiu2Um|d`D)5R+;GuQkDRtmkK;SlU;O1)( z10G}t9<~KvAvWS5F5)3R62MKZAR)fNw{SB&@Qz2|6{{dIk{~IPAvsbYB~l?Z(jYC; z!JY0P12Q5LGQ)kFAPas(R{VsYkqz0A1HT|Aywx9gF+A{^Uf@lUz@47JeU_jA3Zf7S zqX^tK4T_=|enWATfVW2ix2S^BD1)*nhw`X^iufIW;7|O8O86W9!1L<Bz1YCrmB3Au zz)h5(I%=RMYN0mjpf21i3F@N(8ln*z!^5ngDVo8(lAt+Spe0(NHQJyp+Mzu<pd&h= zGrFKFx}iIIpeK5vH~OG2`k_AtU?2uzFos|#hG95HU?fIiG{#^o#$h}rU?L`AGNxcE zreQi}U?yhaKg`A)%*8y+#{w+GA}q!dEX6V`#|o^(Dy+sDti?L4#|CV~CTzwQY{fQg z#}4eoF6_o0?8QFp#{nF~AsogL9K|sl#|fOoDV)X`oW(hu#|2!(C0xc8T*Wn9#|_-X zE!@T(+{HcI#{)dXBRs|vJjF9S#|yl~E4;=Vyu~}b#|M1GCxnC##XpG*!ot5U3j7O= zz`p|syc`;M<udSkW#E0Wz`Iw0_aFk#$pa6@15Z=~kKzJP9s)Ol1Gg%J*oXr!Uk2WH z3cS`7cv~j$yg%@uIPl;v@X#jkup@A*GWZ^ekpxMR49SrKDUk}Pkp^jz4(X8r-qZ{- zAu~L@3$nmdkiY|m;3xcyY{-rr_yswU3%QX8d65tP;Zslm1>q(Czzg$15qSAL@b-03 z3|<Khio>gWK}mQwCn$|FD2sCN1R!v`JE(}?@dy6IU#Nt?@eeBFUsOR=R6}*tKuy#_ zZPY<s)I)tVKtnV_V>CfiG=tm3L36Y~OSD33cv&OxHbvlpci>r6;4xI-Nk-5Ko>c^0 z&=uX#9X-$!z0ezd&=>vC9|JHDgD@CFFciZu93wCiqc9p{Fc#x59uqJTlQ0=mFcs4< z9WyW!v+y5gV-DtG9_C{K7Ge<=V+odG8J1%OR$>)aV-40~9oAz5HewStV+*!o8@6Ky zc48NHV-NOXANJz_4&o3F;|Px87>?rvPT~|!;|$K?9M0ncF5(g{;|i|g8m{98ZsHbh z;|}iP9`54-9^w%m;|ZSP8J^<>Ug8yA;|<>89p2*uKH?KXB7_nKVG$1D5dmKyA|fF& zq97`w!N1B0zC;YfL@fAM2Z48~1Ftv--d_&9OdNPSH}Fbr;APIhdz^t+DFd%62Hsr@ zyv7xHO)BudQ{Z)_z-vf>myZIk`2=3K3A`T?c;zGTW=G%!j=;Mcf%gmouMPyB$_E}s z2cC8YnehX%;74S|Pxu+xkR3Vj3vwbCaw8A&A|LXj01BcI3Zn>qMNt&PZzzruD2Y-i zjWQ^Uawv}qsEFV32mZugsD!`q4=UqdR6$i#Lv_?ZP1Hhd)InX;Lwz(rLo`BTG(l4| zgC}G`bF@H9v_fmNL0hy#dvriYbV6rzL05D`cl1C{^g?g+L0|Mke+<At48mXx!B7mt zaE!o6jKXM)!B~vLcuc@VOu}SL!BkAcbj-j^%))<|jX9W$d6<s{ScpYfj3ro#Wmt|C zScz3wjWt+{by$xL*oaNoj4jxTZP<<-*oj@(jXl_leb|o!IEX_yj3YRTV>pfzIEhm@ zjWallb2yI+xQI)*j4QZ`Yq*XZxQSc1jXSuDd$^AWc!)=Mj3;=CXLybmc!^hdjW>9U zcX*Ev_=r#NCPCmKc;E?l;6Zla>2u&gaqtBqA`&7a3Zfz!qT@@%KupBKSBQ-`h>LiL zj|BJ{3GofSMIwBM?~xcukQB*~94U|zsgN3JkQV8X9vP4knUEPjAPas(R{VsYkqz0A z1HT|Aav?YJATRPEKMJ5A3ZXEH;8zqyG5m(&D1nkFh0-X4vM7i0sDO(29e?0Y{Dn&R z8~>m({zVm3MKx4M4b(&})J7fDMLpC<12jY<G)5CNMKgFgAZU&jXo*&6jW!6q!5sQc zP}C0X(E%ON37ydeUC|BQ(E~lv3%$_?ebEp7F#rQG2!k;MLop1)F#;no3ZpRwV=)fn zF#!`X36n7eQ!x$GF#|I(3;$s@=3p-7VLldMAr@gVmS8ECVL4V{C01cI)?h8xVLdir zBQ{|(wqPr^VLNtUCw5^s_FymeVLuMwAP(U$j^HSc;W$p<Bu?Qp&fqN0;XE$jA}--F zuHY)J;W}>MCT`(2?%*!&;XWSVAs*o|p5Q5-;W=L5C0^k*-rz0X;XOX!BR(M{Vklt{ z7U2*c5%2{fA`&7a3Zfz!qT@@%KupBKSBQ-`h>LiLj|BJ{3GofSMIwBM?~xcukQB*~ z94U|zsgN3JkQV8X9vP4knUEPjAPas(R{VsYkqz0A1HT|Aav?YJATRPEKMJ5A3ZXEH z;8zqyG5m(&D1nkFh0-X4vM7i0sDO(29e?0Y{Dn&R8~>m({zVm3MKx4M4b(&})J7fD zMLpC<12jY<G)5CNMKgFgDrk-tXo*&6jW%eDc4&_d=!j0}j4tSkZs?94=!stFjXvm$ ze&~+@7>Gd_j3F3`VHl1P7>Q9BjWHODaTt#Yn21T3j47CkX_$@~n2A~V53?}`b1@I| zu>cFP2#c`<OR)^gu>vcx3ahaOYq1XNu>l*g37fG6Td@t>u>(7?3%jugd$AAuaR3K# z2#0Y5M{x|taRMiC3a4=fXK@baaRC=`372sNS8)y3aRWDT3%79xcX1E*@c<9;2#@gu zPw@=T@d7XL3a{}7Z}ATA@c|$42_ca}34^c*hwzAiFAx!t5E)Sr710nKUm^x#A{M?v zY{Wra#6x@}z}HBKZ}2S=;X8bf#7KgqNQUG{fs{yv)JTK0NQd;ufQ-n5%=iIW@FTL~ zC;W_T$c`NN1v!xmxseBXkq`M%00mJ9g;4~*q9}^tHxx$+ltd|%Mj4bvIh02QRK)N2 z1ApQ#RKnl*2bJ+Js-P;Wp*m`yCTgKJ>Yy&_p*|X*AsV4EnxH9~!F!=WbF@H9v_fmN zL0hy#dvriYbV6rzL05D`cl1C{^g?g+L0|Mke+<At48mXx!B7mtaE!o6jKXM)!B~vL zcuc@VOu}SL!BkAcbj-j^%))<|jX9W$d6<s{ScpYfj3ro#Wmt|CScz3wjWt+{by$xL z*oaNoj4jxTZP<<-*oj@(jXl_leb|o!IEX_yj3YRTV>pfzIEhm@jWallb2yI+xQI)* zj4QZ`Yq*XZxQSc1jXSuDd$^AWc!)=Mj3;=CXLybmc!^hdjW>9UcX*Ev_=ryki5yB8 zghe=nM+AI<h=_#9h=QnyhUoYbF%T26@D*Ys4&ovn;v)gRMnZgpZ;=S!;d>-T5+p@3 zBu5IQL@K048l*)!q(=s1L?(FOJ59K=i3?XOSiD@73V)R;Rxp2wDus%buTZX7fr=H1 zl`d7KT>jAicQ)q#>BwK8MByssi&ZLoHo^a{6fBxQbYtl%MamT}TcvclLWRrC3H=so zHs0pS)S^+-Oik-G%}~8%y@oY2WNucsdXvmqYFhgIe^px5YFx8Pkf}!9YC+9fEi%<= zS))NvJE+wxW7D>0Bjsw;q-M*8weqA1{rRzZ>d>De!-owYJ|xWl|KI=DSKxmD2Rs{~ literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/euckrprober.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/euckrprober.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b9232a4d1fe4dbdc9e2ca6c5f82ec335152ca57d GIT binary patch literal 1078 zcmah|&2H2%5VrHTY1wV73J^$~;ItCktqMm}0o#g0*@C*_5`nC2?6xURvb7zgUG=t= z`Yc>{8cx1);uSbC<Ft@oz>&vaW|H~&X8f$zTmATL>(lp$kRPPA0>Cd}>pc*ha4Jbb z6G{<#(kuMLci5Lf5hkI-fsBey(xK!H;USMM36BI_`bo??6Vi`=QgGF$_Wrn*CVxFQ zVsx6Si7@X~H5Cdho1=>7<;ldPMvT+!G%p2cAMSq`9USfD+NgY5o4hJtm8qQTT!V4V z8QEma#_#s_-)0cv&+@O4ehxs8gmRL2SLB#-%Du}t@kPLW9$b<oO+vsfXTZ@F2}puD zckCVKzsWGe0&wAp&T;FfAPh0|f-Jo=ZwW@@n_vm=EHu%Qz}dMVXE9nh0jKn^zhXmO z&xBGyJFziid6^r=6gpHP>Q*vG1=EGXR@i&IRX<CSfQ3*tR6+{_JOo<EV>nkB%VerG zV_(Uy-JvOF!&yEXOzT|o!S?y-wA$X`sB)Wq5hbtGFoQ;LVTPj4KC78)$JT7FVu<_% zwnjkc8eOF^UEFO^vUQXCEpCvX5&nm%a|$(khl>b)8yp;|HPH2`>cZi0Bi7;7b}<jA zhm~m|`k>Js2;wasv_rN(`fpep9aKuB<-fwlGA&Q)^h69=A#YWA^FcqxW?^=W*;U4h ziq{fxm$CCYm5s&mW@F$HT5RTO1Kg@j5Vm*SolHmx?M5nY66+yG7Tioc2B2{`V%m+m zfz#pGtQXVk@|!LxB*<<y!=mxt6wSSHqhvQ+V_TEc3{wPNG)xvwnsfa(lLonN#4noi Ob{}CfI09Yj9{)GFIszpC literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/euctwfreq.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/euctwfreq.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1120165597719b77041d5f5d16a705bfe0f263e2 GIT binary patch literal 54690 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 AUH||9 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/euctwprober.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/euctwprober.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..db41ae3bbc15c63e75778f6b0dd14468bc4b18a8 GIT binary patch literal 1078 zcmah|O>fgc5Z(1x+>*3a1qdWAa3T_Is=^UfKvHob1t~?9EYQmFZc|rlC*56BCF(7e z`dhg0XSnT^6MumdGwTG>3)tG-=NWrG-Wxw}wbnm<+x`4KBIE~IxdOniVCf!goNy{h zK@&<5d(tcX#CO=2K@ldQ!-0&7M$(|<E#V=Lt_hC>o%>158w1jge^Ln5ruKfnk|uvM zHKKc#s(~;c)OaWqc(%J^o|mJ6NsZ{I*;!r+us%He*gZb!<=UuxSeblWzAjTa)wu@e zhI6t(pY`AO4&P;v;?LzTkbVI`kc4uQcsJyfa>~8yIPpcmeI8tsIZZ;qu4cf|4GBns zH8<=X7r(AB!v^re6NBT@&tNme&?_?c&b>J}jc<ZEJhRY5a{_1Mik!#j;RJ%xqxPB& zbu|%60qw-bjOAr+7*iNfg=kyL92HC#3Z=03_)7mQMFM6**-!~B4Db+WAy464V=R-Y z){K26zYaR4m~<xjWM^3AlJD$YoDIi&`y5Sfu`i<JW7Ww(2rf)VRGGP)I5~DFQx!wz zC$KaELO19-jp^*}3MISC(r<Bt{B-d<ES*#6**ls=@Y&AsiP`{Lo2n)p4%gczJlZDK z0sXKtEyPo>Xb(2x%^s|#Tz%=kX>D|z=9g*tue7mD%Tbk%1WLI~d8^Ci3+))i!s-~a z>x>m+UP;7F#xAN<)*i>3je$py*i6+HgjL(H+15gxOh^fGBNfZST8NPaHxrKmXdI51 zHlt?XY&bTX#c<Jnt&&25>~=jY8vmQ3{%_nU*)1pR%H-6;6hRaXlZBJ!LjSF#Mox|R RW!>JvBP<3-ph?~B{RX)$0+Rp$ literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/gb2312freq.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/gb2312freq.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8b6c358651f7f829fb876ee3d2479767bd620341 GIT binary patch literal 38332 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 L_y7G*I|Kg*v8{O6 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/gb2312prober.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/gb2312prober.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c9f58e31bdc575f7c4108bff4af515c1027483ac GIT binary patch literal 1086 zcmah|O>Yx15ViL!+iKI6q9TE~z==q-DJe(9M^n@bDM-1kK-OmMCR=$osqIBd)LSa` zw{YPH`O1mEz=;`e1L+04vi){ucV_(N`KaCA{QUjki;W2RLDoh9_$^F*0t+XcN>b94 zQpBG0N<Z}-_GM6pY3Ohuqq3E@C^;oO<k2<Zk)TUIjd^QGI`K~mp*qw)7}U}f$8#h4 zlS~bT`J|>Jp}@1-pYoy_4^3voAj>C3CBXXV^tgBQqIXhgql!^&ifQ$(%H&)Z8ob+$ zmkkGO@bTpRha8gp8U8KOF98UWQchCuhMZGQxpy6>z6iL_gKM&+X$aU=4LG_X0ZFmy zmQ9)jO_4dC0SE3F9jAT{iy?+yk)?OxEx~Dg6D;AKg(g}O*jrcRB1R7<5S5;FHf*Tt znNSLtCpKoRs0zcF!hkA7+eYr#V7gS;4ZFwJ7+@Jvun@|IN@!t#i9ic^4*LdUxy-a? z>>K&@rfbSscUH{yM|C0j{^8|hG(GHbG`Y#Xii%HFH-}zuVY=fHl09=RIhf5=45^>O z)CdUOqMJ0Pi@kMH4pznAVFwxN<BwQ8r*LZT%tp<BY71-~suI{7ZkBC$wFy=NCt_7r zif3Ta9xTLLJiL>0{j2}yZS_%1TKp?<EVF7{XJdiwTqV7G(A5{67(0dqGG;d!E2q4c zh!e&x>r6Ht$DNIVOX#zit9uYv-G{}tZ(EcLDWT`c#;US5VkE)|;|Tzb3W;eFC4sY{ zcDBpWEdfoZ6mn#D8^vh6KV@@&oSy8C>+YI-8bw7AMT5LhZZ7oSN*d%E62EGW_xdpw KgEB~{d%WMF^8p$F literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/hebrewprober.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/hebrewprober.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7d7ae80745aebc8aab24bcf32aa454fc1a4e6fcf GIT binary patch literal 2920 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 Pg$lfmEp_9#)Xn`5Xo8lp literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/jisfreq.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/jisfreq.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1d87880a6a60660a9f9c1fdf2d0a61fe8c642e8a GIT binary patch literal 44476 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/jpcntx.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/jpcntx.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..272cef1619ac62f70a5abbdbfeccf2e429148911 GIT binary patch literal 38615 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 W-6fiSx0qi4_Wv_ny6fm&_x%rDYqX*O literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/langbulgarianmodel.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/langbulgarianmodel.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e26f166260f36c13ff9586d4cb86ec18abc9d71c GIT binary patch literal 24830 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/langcyrillicmodel.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/langcyrillicmodel.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..07b4d84bfa4ef52f7ce62624ee6d13f27840daba GIT binary patch literal 30381 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/langgreekmodel.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/langgreekmodel.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..efc761cb54c1999905f121442a81e183d85ed8ae GIT binary patch literal 24508 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/langhebrewmodel.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/langhebrewmodel.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..78908af054fa4d5bc088cbc176c27902d8827902 GIT binary patch literal 23362 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/langhungarianmodel.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/langhungarianmodel.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1891f4d6713578114bf7af3992ac82c32780b1a1 GIT binary patch literal 24804 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 N9MJIee}kW8{|g?*zUu%0 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/langthaimodel.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/langthaimodel.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3fdb64a10c9431c2d738c351596c362aa0f9e916 GIT binary patch literal 23341 zcmeI4XOx^}8HOhi0g(s@q9P(il%OFI6f7t~6zK>F3ZX2U%#bW>c9(ZIq1b!xU9n@q z0#<ra{;9w0y7q2Vtk|&5eT(Pf+~@tqne1jM2Xb<qr{3@Lyz_l?PJS@^FIceksh8|~ z+RhJawSL^X^?%#7T1&hB<gQ(`uU*k<U$<gjr`4I)zPx=!`^xrJ?W-@`V#Q|dYnHVZ zUccer-J%Wu68<UtL%2*hOE_C-3zrL52v-Un;dJ3D;c8)2SSySP<H9w<wZe76$-<B@ zA)F&zFML+`oN$A%R5)BXLMXzK!lW=IoGBbHd|p^5tPoZU#|kG1X9!;qP7#h1mJ4fy z5n)(ZDV!>NQTUSZW#KErSB0+$CkbB{z9D>5_?9p&d|UXAuwMAC@IB%C!ViR1!imB% z;fKPH1bvDdej@x-_?hr?;TOUN;g`a%gkKAH6LuAD6z(hhMmS2?O4wO=gs_LOzi_Uw zSa^)^XyM_)BZUKnhYC9iI|$upthM2u!V+O~VSC|z!b60|3l9_y5Ecn{7rKvQYr|&3 z<AiO6-wN9Z`w06A_Y&?c94*Wjo**17>?CY0%o83Y+(%d->@D11*iG0|c&hL_;rGHH zgg**53HK0o5f%y$5Ox>-B<v^bC2S#VDI6*sBRp6*P586$7vYJ*qlCu_hX_v+4iXL% zo+3P1c$)B6;cvpt!rz7N-`46Yce!-wO&8sG@L?Bhx%`M_iw@Xt$@Ki?YlcS_ZZW<6 zsx`x9Xli_DytF%IXzlRC^!5{_v#QhXjIHW){i!l?-t<mW=TD5R8Xg^*7@r)O8d={N zD#KGF<I_8w-RVpWb;eeYj!do@8tqI?b;|TMlAP>J4UG-2?M!bqIy|;|-SFzpv3s|= z7hQDOgF&D4tvbRTT(5VBp2RYX&{J0iLLZ0gH7$COiXNn*_p<2KD0-fYp2VVeq3BUA zddrGllA;%<=q)RHHHu!uqF1u$B`JC#ir#>t*S_dQEPC0CUW1}1yXc`V`g-_3H>9_= z>?Z6k>>=za=q)RH4T>K5qW8S$RV#XDieBBKFN&hChoU#W=uIyAYAH(ueXA6`Ol5yT z-$O-TGUWi_Ktb<J^L+YlD*Bcxdaa6HrlPNrqOY5xZ-%l|I7HC5MLAT^+gSAa6}@>y zFI_oYI6^p5I7-krP0>4Djunm*^qQ9Ag%gBj!gAq6LEkDx?{7ItI9XUBoFbem=$oOO zE({502*bikVU^GpI>MR4YGI8qBAg|hEsP3lg)w1Vm=MkpiZCfm3G0OQ!nwkE!ui4l z!qbIk2+tIrB|KYrj__RJdBXFB7YHvDUL?F&c!}^*;bp?hg;xl#6ka8~T6m4{TH$rV z>xDN6Zxr4nyjggQ@K)h%!rO%lg?9+=6y7DgTX>J~Ug3ShMZ)`q4+tL=J|tW$d|3F1 z@KNDo!X?6`!pDVA2%i)_C45@=jBuGSU)a2hy<6LLt;^+lU*CAZS%XAxm%5r&({o*j z(i;f`Y%zG$`C$kZ7e^vWoV64d%8sFe6eZS+L}Yur4Af{L5C_=>7I1OYIR?CuU3PP? zUBfQQ6w^x#<wh%%S(QnN^=mO-qlFX)VL2PUj(J?_yjDm#8+Fmk4LO0!HN|z32&;B~ z49;j+wb97hLI8`BK4LBjDFk8yT-sdhg!gp<*D*?J*(i=%vrCCB=BrsgBj%%yM6E7j zxLBTmF>E;-31YQ-aWT6!x|D=vw=qVxW^o&~JZV_Cy|b=k^C-647$a)|yI8o6`5>lp zjP;Qs=Hgi2ZS+RguBD>4_bf3Qq9hy(mzkaLRK%E+amm_ZT)T9Th+alRfD&iJC5C*h z1m#AHHZH<rgo^+P$0)|Ns1pGa=tT)CPPl_1iBT6)cB2geio=SMaHF{9axWgzZdh(} zj6JCHk>Q2_E>d(LYAaxQVzm{Vb%J7C#|&b&JV9ig=mY3kg=K0k)7zrB=32RyaGSFs zP%9=zF}+-bV}@gHBNi5ISoAv92Yd!~A>eVHwN(SX6k9Zwj$Ybqu^TE;(tFY<#$^m* zwm2x18|xxbbCHUDIn8agsVJeBI$~H%K+F~iTVzSp>YQZ-+{TY5o)^Y-Z)7<<Eb5pP z3sGV<%PKCmMTui1aBaEH9SFqcwO$w3_8<`!ZnW8THcG;+wMER!I2JQ=8&N{BJ8*rt zi=7C)7%fUdg{%|q4FM;}Vl~#$L2<+ecjKB^-(!$v1;>1lx3n8suFeU&bkG)csL;k~ z7I1<i5#WsIpv_h->qNis1Qc73ftZgiqr@(QH@YqXD05n<xWqA+ct}bRK$I*NySc+4 zHj9>z^rYNDSmDxvMG2D<bDiNVZY@TMEnM2H>^pGQF2z`sIA)h4ac#{6o*>|Z9Aj`s zBT=(F3khbn#o(cgi{&GcvKv|SY;jk(5px1KO9>Vwjh2f&Uk#qr3D@DW5iy_PI*J`b znav%G4q`E`6BZ3UyB5Wwj$%q2n{BY5Ev^KM-8>%~aaUp0>ew;_T-=B#_EdrB<%Xyu zHj5TpauBmPMv3=u46D&~TZr2A^aw;99kw_ew^rghzzx-6WG#iek(QU~11#fWpT=5t zxff<}%)O4qMkMIKiedz8)lQ?gX3frpg>u{mpDzh_co||bJ+1}p*1&~v5Ni>0T_mg* z(=%FFxEx8$){GHX;&DAB3A-d%!B)7eUu&b-gGVvD`EVv+%Mb_^1gNtL2eAjDVYwq> zjV?o?%;s*hON_ec4cEPnF}-65*m4O6*$QwQA;6JzP;7Y;o6ho)%)-7b$Sl;^3YY0w zl{zexiA9H9vP{55Fu3bTV3EK=IV{?+ID=TUxg_9mYw#F|+BH}(Vq|T(mtxOS(?f-< zi{0y3Y*dR`CF(Y@8}oT8MvKiGXQ9I-v$MzSs5H(z;{;ddNo#iy_lL_pqf(18r0W0) zTeU>v{l%n6Sp~NbYw(T`WtNSU@|Nzk6dwi3K9bvrL=1%6Zyg<TVR<T}ws~BH2VxIr z4Q>M$J-1PU>lh$mtL8=mQKoW<$DnxAS==8Mci?kb(3b0Lxvmk>X4iTMAWy8;Mlbi` zShR6XbP(gThz;b{Ca?e(!Dyb(30nqZFl6-F4Hb$lfO2hm1URi$XHgeZ$GNsB3DKG! zDvjC31eepO5+%5{JSn|Q?<`v~0RqHq)rygi;+eQ1T06J5yjNg-R<&|uEzcP)vCA05 z8qc+8WNR^(M8fhQRC>D%*}HC_Ec3<YPJr6gF_0~!m>}9n*m6gxM9DyIZz(?bfkb;3 zv$W;eC{DA>eAHRq2|DZsILI9cAZh^)ibUfc)L}7I#7H#i4U}kHi`%dsyD<SJ3~7tY z;WlC_dSe3Q=|G;?;MVM@#JNmwc_Z$M4wjC4q1VN@=-EOlN}NEHZ0I3SvubD5>KbDq zP^+T^i#l$|Sso<2fDSAdhX7ey7NCTz6S$2QA9rKP?Ihtz1O09pD{N$2sN6nXcJpJw zGc?ds61^66j6|$Yf(a;bEE3^T99GnYTPvmnE9x3uo-p=xaif&$T!K|AcC40g8;P)R znVA?z#*p44VhF^MBxY=Je+=0;2B*2$h>fBoT%Q&PMM*7Ni@A+kLnW*}O8S)wW!hNF zlLB8(Ou%PJ9hOC-B+e!4gnNnEttA|bSx|0FP_juZkIVh_aYk*@TC7njF1vSKWPQ)X zxNKr`Yk6}cMyrkCad}i+61Nd5v0!9tXABgp>G?=L(3rsTwYJ*1?(JR7{UPACS}!qM z?x469L)2qXOfMy5k%}zt;1+l4-r5<1i+U~4DB75asrr~;ppHI1{XUM|bS0iIHu7E7 zF0A)54B2lT9UE!YhOEUlQofJ2xVk<%?kc(E|JwIO#It6X$0yucM-+3rjn6?XfeHeg zMvPutxVPzZz!*$gvts6OeFu&;E)yNKGl*Hm9mMXkZuy~)*|~_u4{CPg`%vM<;giO) z03|h-M=I(_#26v(Y#+t7wosn28!Pmo7gNo}2O38<4%u&AqrhAw=HkNUVvpHABc4Qm zmbDKw>INU9CfZx&PW6#B-d|%PE~no*?inkj?uc%`>)#P~o5{@aA=|CJICtIOt^YN_ zjmN#jbyC-upaiS2I8LLZF+s^(SaUIkFDGuu=SHlzI~TW6J7X?xXcM1%Tdh!AYp!Ao zH=o|I`$MeV-(fwp`%|gQ$B)x*uO8F=>D2}LRo0`sKbU&Vc)K$?z3qRC6m;O?R=GjH z94Oqpbn(>MiNzBm6N^@^8yRgcT5`^smE%kHYb)fxL+d+Z?eVf$KgZhcOfA+Au}*cR u)=GQdiSwtoI;d-|8|^%Pudd$YKJ&Vq*Xz&xt$Stf{JHt_H=FmrKmP&E5mR0O literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/langturkishmodel.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/langturkishmodel.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..77798b3bba2963315524488e65513933209778d1 GIT binary patch literal 23359 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/latin1prober.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/latin1prober.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bccae171f67de019761f5b7464cb9b4485c140e3 GIT binary patch literal 2891 zcmc&#OK%%D5GJ_~t=20?ah-?j^mQqs0=APr&=d$78_KJIW4o2p0t=_CEK;(R)x%t> zZB+SE8_2Q!8@=R5^k?u^^icQ*^paC&xJo1$Zd#*<F2T`oW=IaddFX>eA>4Vk{OI{S zA-|K!j}o#9>-1|zh#-O{q)lT=k!J~OJFx@26T8BVJwak$cyUhnaR9Qs$i<-u;u(>T zBN4_0>HqH|C(k}6y$<Br$K-ww5QwHw2w@dU&rZ~y9B3VZJ_3uAy0fnHay&vfZ@kL5 zX_-HvM@=YaCPoAvO|FrjmiZHU)I>kiI*Dh+Y<%t>5i=q>A|jIX(20wpP$8vr$B=BK zL`|W*S5+0Mw^VmmDiB1-H9L)pu4;Mgg4Hohatt|1jvXW(5+6wpNdTk<^W}#|_@(PW zB#9~HDtk)mR8YZ=g4hv`aF0mrN>6ygKO%=T_JPld!16hf7a{0_%<nk=l(-}g!RvyF z)~mYNxt@7j!#CiEzj!Oo^j#pDXgVZ^ti=vNDaep;$5MAlT3#lD^XNv&H(uKBNu?s# zW&+Neou=m86nRojHLn3WyasG)3cRl5KCgBA9W9mdluV@tz}!?Ob@<Km%#ib6$n#q( zy4_ppHG50D{bnMTuI=ybcCWoJP-G|nR(3>Jt>6Vh>XpR4t7oII+<T&C!JR5T2jL}j zmijOT7bc&-{KDBO957C0-1s&SjV}k>8&tD-i-LAr9w1}83LwBX6owOEa5lH^t8>7c z=<XMHKIi4NZNBmFfhvMX;i2k08d5cfJoK&+x$r{O04Bw>AmC|42Xj-tTC}Dd#h_V7 zF~<b8&J4oODw|6;ZhZ8~(sg^s>GzokVFUPir`nbY>`&1{!UhXdmrh#!<J~5E(BIq` zB-Ku%Uv0?V#BI~zcwteqzJM7bi_^Yx7Z^xBGNgy}fPTL<q_@eV`v(jXl`W71M>Ehm z+J!JVmk3DQp)2TPrdGAr@*#}5E!-arT@SQ^eGJ)t6KpZH_lsYlE)N(wSwIz{TMEr$ zy_rC^^6#2@kIPOYX{LKTks4&F8AXVf0nF`g*=Bh$1JEuWbcIZ^oXD5g*D4j85Ljf! z-`L#d5AGPBr`RWKmOv#TU-E2<m|*vbmY`OK)=Y?@7!{I>b#x+wj9ZsdXgE5(2!zlO zMqp<Ezl_e&kPXgHMHhFxj4FDC(_*~?3}UTmivfZ~%q|T`wOqu02nF$&sH=h<u+9~f z3TFZB;g1!N_2$WCh|(fCU_&MtSZ<*u@cz7&0m`|J#t-w)?)^46x`k<PKZV`U;yx06 zxZ2qH>DNE6?)-5JFnI^H=%IQGh;h<>+oD!-GPpe5)zt)m>UQc)Av-mB5~A4#B>Y(Y zBOEgVE21t#xO{dIYA>L!6VSop6j;-HOEcK&uy~-=g`Bs$qMslialYTLCYi=IAzSt) zfX)P6Qa@3b@d>XZ!A7gz0|Kov3vEp%3Fl+Kp_X1lBikde!F~fXMJAw;A9#@)xxuV$ zy&I)f+ll@)v1q@VVC`j5IlCR!j}7L;0jHg3?Xc@*#+EzH?lcd^cJ>r&GQM{#d$rxm zlS}7KVbt-m{}J1^jVC+(cABN$C2-U@4{zU9SY^gptCW#cfRw*PvWZLNDx2y}eAN{s sZy>?2jYFGp7+4eB%+lvmG)wn@L^NV9bLolU6zP8%7xVC6J~3SPFGMy%Pyhe` literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/mbcharsetprober.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/mbcharsetprober.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..783ef3931034e38eb1ee88c8c141bb6157b95d84 GIT binary patch literal 2182 zcma)7UvC>l5Z~SVle2Sn(xiU{6ay;A5=|-)4@d<;6VpbbP8B;Kov2o4@5VXzeCO`1 zQDeC;IH*s22VQwWd;~tnzVei>fGWYv+Hn&pk-GNI&hG5a%+AjI?(<5e{L`NsPxmW? z{6o$(7x-_W7x#b&B4|nmG@=xFma>5pIRiIxDS1eQBiv&mTuG-+<O#1u>i!9ZV|8jO zTZge~N&Q6S9jWTfgvcdXucc!xP53zO9wwQzvo0K2G_;Sc_yLF{5fvn2f<}&5c|{JW zwONW>%X`8<4kAzbVo3zYWJ;qY;7g)x`9Lg-@R&p;Q4v)b%ddz_qGj-M)m(o(N_Fz! zNXv76j%(!_w2OsS)a)|r9w9h7^Im)kj3$~+$dvWjgbMnb4cUZnM-ZT{V1o4+aGoIG zg42W`EvIqT;|EEqr8+^ib>Dc!XegEPU}gf&lPuAkn`<H|v`RW7o#Yvhvp78(OJz#k zTtG~DF)(GG#)alx2s=dEEo6G2d{jwIiSsT93(o%_|328%gW={d8Q$%Tl2qKi_x!Mv z-}_A9lI{FwnTcF&q9!5r=AeUIA@$Hc<;L(xl|b(&(2D>Fp=;EK-}wED!?tmHi7uuF zHXIj`yAP8$k(+{WLi&!njkM3^b60J^+?~w@ME6W2SyL^6j=HbVn_1vICBb2}j0<HX zA?~0Gk{yRCF0CM0MREnmUFZewBD4yZDce4N_mV4F_2=$`ciKW7=!7P}K-$79Q+(z1 zX0CSz!&DArrln{om8-cgGba|Fm~b9yp2Y+C1*)^z#>O9A;>g+kZ|RR(1HG5n4=^D| zaZi4E#`b0Jdb)Q}5ty@>ayAYOBJ$#I`?7QjzismLua}Vjeb#p-bi!^yxxREJj&}Rr zGp3p#@%u{xDySboFHP7KKt`AQ%TP1n6Y{)j_f}x9fYs``)fHHU70|spB`@6x)Ecb( z4s{52VEu}4?&G-DU&q<Roq~Iyakc{92<Ik2dV~CmC+6}W321QV8kp5^6>MJv-LLK0 z>r-O68&lMN^O>t&pZW&#tB?U+bNs=bq6Yt2`P2>*U4#10RV~)F4ge6yYyvAxp_Bih z)o&S3!9z&nq%yNvY|5E@p?QJesSqNK*Vx<J-7|ig_j-T?o{*hUPpyMUT}6TgX8h)E zn?G(Ce|FONJM9+EgYS0to7;S+ZM;_d+r73~?@7Rpky4PN7DLc5mV+%H;~q#U0Gcdz zm$n=2##Vc$`OvKNa?NFyk9vn(#5y)rt0&J65+Sp$G;6I#yL;`e{Wfnu+H1h%`|Y}C z%g_XPdGJdann2>ufy`P6Fs(VdU`u0BAL>K!=qu>O1`q_ERjAYeDmI|5<&e%+*4Ry2 zW>pr#9OP{L&Lt&;SG%}$5INu(NuN&V#mr`C@-YZ5t{{b?2>PsW>G;kiR?o)?fg(h> z$GQi&FLOS~#VAES<ox+4PUn&(&PCqk++wgrE)zgz!6!o>oq2r>l=a0_=HTCzX$r>{ z0X>C5i-1_Uc%(pN3>=qL{V)jK&<)<RfZBu)Q{~)eKp`+0PiCV*VROx9rQQ6-#*9M? TCb&Pl(AT%o3}$dhSDpU>PihQj literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/mbcsgroupprober.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/mbcsgroupprober.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b44082e95e83847e5a1a90c4a870a53ce7f740ad GIT binary patch literal 1073 zcmZ8fO>fgc5Z(1h5`UznDF;s6jnt;JAhi-gC;=*ph$_+w$pWnsuahRM6L;4EfpS1f zrJnd9T=+pNZk+fFoS4~|H0oM2elxrF%zLv3^}7H5=kAAJRYHD~wdDYQ2ByA&<AhT| zG8$8g*b-J|$F{+?a56V`4R%B&tHxD>T~W)t*fY2y{49tAgR3IU>T%uRn%KxT<4uD- zaVOh~w<tL#+~>g+;Xz6lcHH1$mqhhH6xxWWZnQ6YvYQsiayrXT<+Ptl$ol7JFAr~` z?#Zj}Dhghlw@*%2VR+oyKX|ymigEk(+nca`di3aM75c5w@bN0bvuE#?VFLZE7K(*S z-3OPFm~s+Z+_@$L$}MhRd9i&>91=S~#nqc{TJ7!{flgwXuL;3-4a^2p&%qU>pmVaY z#@3v2`W@si>;)+tFc+)>Rt2kpd0_s63~O`3f;kz73xdKzMXLi61)?_@vcX6cpjchI zYL=%`22exS7#mGS1!EHHN+cs)bQN@PF^I&bq=(K2r>nV9UTIgRDlH;QJ1P|e8Nw#i z@)%1*PbtQJkiV^Fk>$;Nl<)LsBf)p}E-(7iy?u@;W9(Bp;Zxa6V6r?dnpr<lLmcn2 z$Zq~cZoq#ZfT_FS2yIvnU4MM*>%Ci=?*8W#(GExs6eqnbWlZ~wWm7&Ah(pFMXFajp zF-3H}Y&}VZ0715)oN*DA4aC@hQ7r<X%)F?HJJGgoAO+B4t$T?_v_C5bhf6v}W9_T) zNR<iHTL<YZ8JCQW_&OZ+@uHT8a1`dyM_FcYE;>kZxUOXehot>J+}JXK12Z2LpUVtR b&$N5PY>AMUu02^w^AxYKLcSrr_1OOa&5j5W literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/mbcssm.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/mbcssm.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bfb1e713c3afcec0b859d55c322e27da9a8b2ead GIT binary patch literal 17526 zcmeHOSyLNF5Z;BAkObnsj4@z*A=@$-$0@rim5L$q3APL2O4U?SDnX9|DXvH&2mc`d zA%7q*`7L?g*F5nT@|5YGoxRWsX(bZ{FI(#AnVzqwr>CcPR%jok)2VO&eDK|G+nV;b z=Kj+)?JH5Q>?Jh~G|>07eVysL1~aUS>pyghkAWYESv73&e^BQCs6K>74gODQlEq<` z_3$o;^EmH;9!UHiV+ojJNox#eRB3}DdWz9O$<-M3O21t}b)`eusp?p&HY`=UyR8=Q z$JOei^!a6H#wa~!DY(vhc@ok*#e1QjeANf@EDbRbej?8(eG2a{gXXSqs`TSL?J^S1 z!~^!RKcxlM4>#BVPm8tc=L0Z6_71{LHe~tGSzG^Tek+xnw3i0iFx+Azd<YCa%tv65 zG>^h<Hs)R(;Ssz%mb>Iir++MW9s4M}J+m4*x@A<lBta;*7Mm|Ev2nP=Ciobn_&A?{ zA)3)7EU+t<PP?yVQLyhCofpl`_Kwo8(4O+l?9fN<9t!O##jK_v!>;lxVpdc9Dh$)C zrr|ET=APA=IC5)Nyn9vLypnrIo@6s{kInLHBKBtZER4{|b8w$shd88!J(xr4`_Mg# z%|lXNYW}KD`6%Yp1m}zshhCJ>m=<34R9Zwy_LrWpdC0OG{JQ8p&u_pe*?kipuv>&k z2^z-gxUh!urWgt5BH~rG$aY(Mudvl6Q@xa>Ql?sMoyz*#u*mLkVJpAQ@4y&YzW_@t zW8tx%S}`hN0@Bb2<6=~tTl}2ad9Z$6uDZQmqAd(BZ6iO}b8K{M7uID_Luial6`jpu zv40q>@IGB(##0#RQ(U8^Sa-S_?O&@OOw?+v*VfXQo(xlO6t}GO7rP4&**%_ttNbp% z2h+4C?!&dbmRUX(M=vd-n|<rW?Va5Np05_G{1ne-r(H-4B;812f|$n2?)Q%~F|&7j zuUM%Rs>Q86ZuZGaskmJ|EStR*RAGtww|9!=!X7`c>c&BFpP$B2Uk{Q55^?C$PE&%I zvDNoaKYMx-&wW_UzJ4#uHybC3U$XpoJ6rwPjK5e}e)MqJOy+lXOVz^bSNW5~ht22N zho7(H6t|W;?M01!NYY69kqjUi6yzj^h$n9sG%@!w&cAhn9x4+Fsjn4m$RXPU!vHBq zB#aMe0dQNDJDuQ$El1>%`2cfHCgx9Dw3ks7<wp_p?Mad!Wq;!hwA?7EKaWPWe7t^v z_R)<IZ{Xz)CU~|eha`9;DLW*jmXNR^9Nf8kQ;K)0pEyVPG3CmSc4~B`1;<AesaTbX zvpsv>*>NHDk%Exe2-f*Wv%ocSBBvFO@-n4`R<s0So!t|0?nK;xHz?h7Cc)*-#9j9l znhr$~#S>Z`oi4?lH}KRG2`<Jtow<K}RyB|e0=xJg+5`JtgdjRyx>GzZa>l52x|FH0 zJuBjbQb>KIAS5<|xflF@<_#xuTH)xSy%h!Zv6NB*kH92w&Yu6(P1QO0__A?St^JKE zu6d?Mrbb$SS~=hTLFav%hsfr`rher692->|&)QCg>ELfCBhxzi%i~s-$DJtyH#u(T zPcu^nx+J6^N{x-DMxU?9<AHZBr*mMJix4<wL|mAaZh4J-NBNfZd7mD{caqL=k^+*J z+3qBhq+N9#K<l@WDyNHAX~S9^1;o+ZeQnKG13lQhst95I#4B<{<Op%33cIm8GkokP znX~`6A%pE3Vw5B=+tPPtKt@(wvJ7(x7PL;1wDTkV+dF#Pj{dtH@;in$!n`ple~(e? zfx!3FbzxQKUo)M_IT@>!@8~`rmVWf<{B*Q=j(+~>z=rWuJAOWyz%G+sas{hXNNlfV z1|{!%JhtUE1JVgTCnjtUX0m3C9~|#j%J_1UnOJ%C;&EYhEpNth8yoL7%vgT&*~X?B zf3=w}tmn)glIJ(g5!vzOvyH-9?rmZ7*~(hZOiSr{Vg23LxivFM?;er1gk%M9)N1r1 z`z^T*74Iv(elMYtMX1&2gIaPo^v#A16|4ot#<NhAyP=!k*igY*P;5L4MY)2e<ZD!f zO<KGFkEv!adO-D1@I+p`ctzkI;skU=HhF<*DOIr4ht>S@N=}Yy@i?k#_JRjg4-b6J z1sA-6V{;8S_E2zqPwa^_nm9CCHhF<*DYamKXyum})JXn$x>(&mT0Gi4%5EL+?m>3x z$DOUirDeb-`V@ZR2XI(k#JApnR~PrUwkwtW2S>k}i7)mK;dqaKIV}`bcEld&i;4Ho zTDS~jMxWDfb{kz?y1WwSXf$GT`htDkZvuIqorW<fY?;$%^!c`GooQ-*jarFzHsiPR z_2NpPR-rf1_<GoSyKT-B56!P|Z9Pt_VT=nqC-q^vrrWw!qeAnPJ}NYi>+RJ%tq+oa W(Z?8PQ&u@`mFRtJ#}Z}UUGXn~r30b> literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/sbcharsetprober.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/sbcharsetprober.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b09c368da2fd51288b7d6e508434fecd108d34c9 GIT binary patch literal 2935 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 B#n%7; literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/sbcsgroupprober.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/sbcsgroupprober.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d8cad1a080c19da6272a606eb3f327ba078fbcb8 GIT binary patch literal 1563 zcmaJ>O>f&q5Zxt3iK0k}l4Zv&`gIlB*p36aITS@<19gKoK>-;kuxLS0<VK>iD=AAV ztqbL(0QnO=_R>p#&|Z7$U+AebyR>7cKq>6Q+nFJEKHlnK6a_#2dGM2t2>FZLdK$pL zf>r(okdvGWA}OO3xg#9uGS_fdG^EEo*<?-GVlC-2U$$9W1}rfChUmzUg)(B1*?XcZ zd#op87Mp!j^yPpJ3~z}YIb=h_eX%R|*q-5SaZm2EeM-(r9^{?ZB=2y#b=iA)I3c6x zZwe`ns2-fnQ#Ik$xmvDQ->c=6E3n?16pNYQr&krP{k5y9hd&gH2gl<FXIH8aqR5^s zb1ro7?Xq~JEZ_Mqt%}9?Zb1Ab&F)${kEim{$%%c(Y{p}=896#OpZNS-asJ!}^zE?^ z-<lw7Xiqv_i&?6QbYVkx>kRLjp{m}+<H^bK(ZxJ1>_JezjU9i(r;7i4Z4K@ArX2%& z&c#|iFUq-z%AkEWk6W|y10b9*niJ-{A<t+|bLX|s+&82_SOfa*>fYq^Y;vpH84dy; z6b}fB;K$0}0V-0_4cR)E&X!P8xm9CJ0X>6FgDr!;!M4G`V8>u+Ff!OR*xS-sxFJbg z^|#~|er=G`4ank^W4L3uyP=mm8)xHg9ZELjGQJ#cDDG$O7Q_seUCbyaSkTk2FGhRX zE7vQo)Bw`fev%Z6qDm5lr6{aRc?eB}7J`q^MhFl(2q6MCKy?xN0J^m@iY!%(rXHI5 zC9e{RqDyM0Zt`C$zR0zwI5<ZQ-6*+urlYwTY8|F`#d20;sYvdchcAnA{jL?n(oT|0 zq-B{Te~^Dp4=cGkTotSP({&;8`$sS4)8)}|jwZ8`myp0x9cFNwa$X&l)2y7~m9jY= ztgh4$vi}TLi9l%AY104vye197-k`qmg*2eP^XvXQk~z3;@W{hvFH*^qL<b4BWi610 zN%8`UvL17?j_P_cE(DC`BgnzPh^h~fe~f_h`xI8`0Ql7GpN`(w1FQ>rd#facA-V^J zT9+-<j9m9cx|n74AB36J|EoZE@r4=Qb{l=83Ozv2^!kEZ?~PJ)gx(77vvr_wbPsKI z#@1?N6Ix51CCW+1=4E@QZ6s>W)cm$RmSJ<W{{=)rf4{_jmDs9~hV&CRrm=$ze(t|v CY@Y-G literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/sjisprober.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/sjisprober.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9a3ffc343e96d655bcef8bf163aa31d8f8119f84 GIT binary patch literal 2389 zcmZuz&2Jk;6rY*>@Y-2BuG6LoLMWA}ge96(fDng*C`sC;YMdx`g;-GyYtP16cX#c~ zu2B-XCkOS~e}fBuLjRDta>|t>7kF>RNgU{|XXeev&U^3ozWimiTKV~p^;hp}g#1b7 z9vkTIq2<3oCy1a4NohbS(kx-A6<C_K5<7JQN7HuVrlp{yX(#d0a!}T^n^e+;U?KGb zpOU9Ul!SLqgcs4N6;wsJO`4Sp3T&EGE$@z#BL3mDh&GQx*^Y{RIqXIfb{d;Q5oi5& z5f;&I*gJ}|2v%3x&v)8eabC!{J1*j3_BacZ(>%^$ZwdD{hglJw6m!c}T;}avzPq=z z{i4Z~k324~R{rdA&8P=bT|L%}%J+eYNI(S%*jsW)1r_Yv3oK1r!Uo!o9N`G}oJ?up z0<BdBx+Kb?a!vwIEC?UQ@>^n)paKw7RRskz`t}eGd~ig**z&KSD@Z{nWXc9?3Y&#h z*i)Eur*NkP#!}(wu{<Gz3Z4)I?xwBgf^zclD3Y=amne_(IExF;C0;CDTr2l9z&uYS z8eiQJbFlIdaXo|Y9o(z;46Ikn%8^kX6@a>(N68_KWzKs^nCG1TPX7LOqew>^qj>b7 zJB}0a;NkI6clhuNflIpaU!zP6<wg&zE}~*1AH?}cn|^(CDi?s~eQ0?FIznr-LOpoT zw1o{~>z5jR7`l()yPMDfK$ZdV5+YmT^%@|#h!n&GU?=NlxP?m%?3S>@6Q4uN5iFGH ztbT33b&bXiQP7f`c;15!n3DlDmSLKY@=<kwkY`~Eo~^kWcGo;_!>14N4h9`zXLsi~ z&VT-4#we&jrmUsB=iw;Kz+{@mhuJAF3A6q<>__N$mptb&zufO>dEgK_2Rf5h^aZH= zj-D`$JDtM2MPB{&hJo^IU`^<RtwMObu_oZe1Lrl9`>^8<N&*~u;6W=-*wh9muM8Hz zwf%i^T-Rr-aP|;ZYd2OGVYROBu20Dud%^^RmG=_}&Q%2bmarb-*cdG7nLV*rAUuA< zU3<zX?%g(fW)9rUX^>P{cj43u0m?Dd|Gv|w^a(h7y?b2$k$?>DOa`W9xC7EJzh>{K ze4=^WodQytUcvAktiHB!eyJm@+yT3lT4(p}=WFmYp|N%p7i$obL%9|fYh6g1uy+CQ z6N%n-fmXS|0KfPLp5{joq+rlUSxJ;hAJ$bRgWSk-%&8LnQaRfP2YUy~O@{q`B$Xqg z?zk_}@8mLeB|PM|_BwobTe;>-<?eLaIQO3Hy=-mqosM$aoyP|qwbTcH?v164G8n<X zfw8J^NDF3aJl{TyA|b1qy%t54x3)Xmo1LB3Q?=M17Cg#^<NgsBVG*jDzH^uz#v;mk zk!rM`?HzPBUv_xs*}*nUUTifT9X-lJNI*uZXbkZ+OK+&G@=zL%IOyoQ4zbTbjBlXj zUqeUeZCcmKrUvQ8))e-berj}?y0pO>aAt*8SdG=F52rnLwm27-sM}RIqAjrL@c0A> zFf8N&a94DBrYTnF(3mol9c+z}#7tu#veNLRX&D7UCtck*jEBmfC2T$WuU>e;PtbA< zPoi}=Tb+~hCaO>_phRFM;v5Xd)1eqANc)^0kHf_5=)9~Gq4K~Zp}G{ObH0L5YQa@? zRttJjl0eP5f*kUW&Z;`0Vqy9eT8^ISQNQHd_<HwrMs780YBBB3vYhdMi4LwB#<1FR zQuD_^S2ZY7SWM=Mn5k>-VARWs6H~}sxH5-|rz@ZnW#cs0KCYv|l!7a1joc`!@*WvP QzQekr1@^)C=B-=*0_Hb3ApigX literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/universaldetector.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/universaldetector.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8cf180117fb244f35851aa8147b13982ba9e1c2c GIT binary patch literal 5784 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/utf8prober.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/utf8prober.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..628aeedad416567e670677b6baed7465b0b3acee GIT binary patch literal 1920 zcmah~&2A$_5bmBokDYN6B`X0ELMsr9j5f&vLS!W%>^j~gQesE;L`Wl6Eql7-*qIqS zJ!7=7oRcH%ZBM)emplp&&?gY5oZ!rfsvgJdAP|<irn>s4s=luJ{6)E3`r&5t<u4^d zekTh*3-s?`r28N^;WQ#K4Jbw3h>X|_%-9MnJvSpeb^=H1R#b@Hz@=o5aGN{Vggb&x z&7jB&EmCoBDO^{fs$4y5%a+KF<)9;E#ZVq<y`<a9+L=(^Q9C^AB|^_&`&xCt?-plE zc*%+XVw<&&*imD*b{N9V^Pf4>QXdpS0?J8Xa2lAe$tmRqH?Q5m(z?ZM&~4#xhZnBN zlm-RRU0&3>%S(Lenn3s-FT=O=nph-Qf>f4O3Ek%jbaQvV?u3{h{_u-I;7C6Ok&%o} z$kgZ?Q&`N*%$mZS*_?oMCZu0LJ11~8tyf%Sr=y{evH(Yw%UCbzWsFH1rqV%MG1QQ- zG*)GnjA9mdSO}n|%9bJ(8Q^23B07a{k+CpprzvAUlfS;%%HrYHus7W3jCv8@cye*p z89e!%qe&0;qe%EbZsBEIWLu-`bbF|uX>)ifi{SeajMN1|=rS!)hmP0ZLa})l>%T+s zA)LAo1*C4~pl}4l(hwN+TfDzwOZ1~rkREDKr$jE{5|!orvy7${6sst3+hZ6h!jwli zUR{V!qjN7fe5)#+z@q0AUcji2ZOD6LTi-i#mHU`GQl5reWGrdN;xjyNfFQ>Bods`; zd;Zs{%JcXSe{R%Hx}$bie7WFj5&66IP{#qAFdrN`xt~CJ)t}H^^0ISf0P3VqC&rXs znG-WJ`sTSIA7@tI#&SF+7ml_T!1^4l?mcS}tXQ(7Uz!47=QhqP(qH1nSHvJ}>B9LQ z%DV5t$ujJH1N!n5Ei31id~<gn?f|gO`Yi@5H8rg27gnW2yvkULWFRpEW!IX`MpI%t zDW~4>*-=e7`3B`2_${2fFB&KHU3TCryX8M?`f9xkuM>`>6bXExo+FXy;(_kcJX74Q z`L(KlP~TI_dhZ}P?QxNWLanv-8%@7@;xm80S%b;pZpG3ir`*nECcw8;G=wUc^`VYc zSI65Du}+2HPa)>?0}uq7#e?BeYc7}Rn&CkkxyE>9p=|Knyj&0+Ok6+XCMcX<L96tE ziO-3AG(la@*U3|IMY%bl?*flZpptbnS@rJC-f!avH-GHhVpGi6>d&2uk)u&=)N8D| z|E$T5n~mpS#m-XBD2aOK;vZ!%AHv!pj1*gu=u}oQ{Pz~ZzmH|bLk7bxVN8`6iwArZ zq3$tuF=|Koiu?qw)BK`aSh+wtz<}AMT*HM2C_YB<5Cm{u&S{~DBH+b2?$A4$4>T1Z zd42>VMH8TIc#da#mS?%^no{bOk}A(SG^aR;SSwoqp{Ban^6Fd5A6XYooc}dxDppS1 j3DY#zl$^8FJd!*nj6=C!=P7^tJ_dt~=FwFs1<(2$u*0oY literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/version.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/__pycache__/version.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..367683ffd3338f2132236e03d4cfb71d9af76760 GIT binary patch literal 389 zcmX|7yH3L}6m`;+qM)wKccep|iZWFQRR{)_B2mOpfg&e%8$<lSc7S%}YgkzLo2>i+ zBNJ{2T<IL$myXW8<9<KBeaClS2%%4p{|J3H^|1S%C|V#IECLqXhctW*79HA|qd~O! zh_4H7K`2_44A={|&VrKV8k_>lg)aGW4Td?x*%Oy5a0P=WW-M0{WF<0YKrJCJh@s5I zOQQrlb60Q)mbpq}y#^vFG=p{vY?Wz}Kadr(IF2Wza)mMzI3p5HOCp;!IG{x0?5~`z z1mPvll^DdE?ii2oQ61pfAgX(5N>!ew^<J8`#(dGW-npxLH|JOLi_6&?GCTea4Si1% wCv>8@9%dCU>2UN|WNLIsx2*<VM^a^y)^F0v`djMV<KI`EY~^g^DGH<D2Xh&DzW@LL literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/big5freq.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/big5freq.py new file mode 100644 index 00000000..38f32517 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/big5freq.py @@ -0,0 +1,386 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +# Big5 frequency table +# by Taiwan's Mandarin Promotion Council +# <http://www.edu.tw:81/mandr/> +# +# 128 --> 0.42261 +# 256 --> 0.57851 +# 512 --> 0.74851 +# 1024 --> 0.89384 +# 2048 --> 0.97583 +# +# Ideal Distribution Ratio = 0.74851/(1-0.74851) =2.98 +# Random Distribution Ration = 512/(5401-512)=0.105 +# +# Typical Distribution Ratio about 25% of Ideal one, still much higher than RDR + +BIG5_TYPICAL_DISTRIBUTION_RATIO = 0.75 + +#Char to FreqOrder table +BIG5_TABLE_SIZE = 5376 + +BIG5_CHAR_TO_FREQ_ORDER = ( + 1,1801,1506, 255,1431, 198, 9, 82, 6,5008, 177, 202,3681,1256,2821, 110, # 16 +3814, 33,3274, 261, 76, 44,2114, 16,2946,2187,1176, 659,3971, 26,3451,2653, # 32 +1198,3972,3350,4202, 410,2215, 302, 590, 361,1964, 8, 204, 58,4510,5009,1932, # 48 + 63,5010,5011, 317,1614, 75, 222, 159,4203,2417,1480,5012,3555,3091, 224,2822, # 64 +3682, 3, 10,3973,1471, 29,2787,1135,2866,1940, 873, 130,3275,1123, 312,5013, # 80 +4511,2052, 507, 252, 682,5014, 142,1915, 124, 206,2947, 34,3556,3204, 64, 604, # 96 +5015,2501,1977,1978, 155,1991, 645, 641,1606,5016,3452, 337, 72, 406,5017, 80, # 112 + 630, 238,3205,1509, 263, 939,1092,2654, 756,1440,1094,3453, 449, 69,2987, 591, # 128 + 179,2096, 471, 115,2035,1844, 60, 50,2988, 134, 806,1869, 734,2036,3454, 180, # 144 + 995,1607, 156, 537,2907, 688,5018, 319,1305, 779,2145, 514,2379, 298,4512, 359, # 160 +2502, 90,2716,1338, 663, 11, 906,1099,2553, 20,2441, 182, 532,1716,5019, 732, # 176 +1376,4204,1311,1420,3206, 25,2317,1056, 113, 399, 382,1950, 242,3455,2474, 529, # 192 +3276, 475,1447,3683,5020, 117, 21, 656, 810,1297,2300,2334,3557,5021, 126,4205, # 208 + 706, 456, 150, 613,4513, 71,1118,2037,4206, 145,3092, 85, 835, 486,2115,1246, # 224 +1426, 428, 727,1285,1015, 800, 106, 623, 303,1281,5022,2128,2359, 347,3815, 221, # 240 +3558,3135,5023,1956,1153,4207, 83, 296,1199,3093, 192, 624, 93,5024, 822,1898, # 256 +2823,3136, 795,2065, 991,1554,1542,1592, 27, 43,2867, 859, 139,1456, 860,4514, # 272 + 437, 712,3974, 164,2397,3137, 695, 211,3037,2097, 195,3975,1608,3559,3560,3684, # 288 +3976, 234, 811,2989,2098,3977,2233,1441,3561,1615,2380, 668,2077,1638, 305, 228, # 304 +1664,4515, 467, 415,5025, 262,2099,1593, 239, 108, 300, 200,1033, 512,1247,2078, # 320 +5026,5027,2176,3207,3685,2682, 593, 845,1062,3277, 88,1723,2038,3978,1951, 212, # 336 + 266, 152, 149, 468,1899,4208,4516, 77, 187,5028,3038, 37, 5,2990,5029,3979, # 352 +5030,5031, 39,2524,4517,2908,3208,2079, 55, 148, 74,4518, 545, 483,1474,1029, # 368 +1665, 217,1870,1531,3138,1104,2655,4209, 24, 172,3562, 900,3980,3563,3564,4519, # 384 + 32,1408,2824,1312, 329, 487,2360,2251,2717, 784,2683, 4,3039,3351,1427,1789, # 400 + 188, 109, 499,5032,3686,1717,1790, 888,1217,3040,4520,5033,3565,5034,3352,1520, # 416 +3687,3981, 196,1034, 775,5035,5036, 929,1816, 249, 439, 38,5037,1063,5038, 794, # 432 +3982,1435,2301, 46, 178,3278,2066,5039,2381,5040, 214,1709,4521, 804, 35, 707, # 448 + 324,3688,1601,2554, 140, 459,4210,5041,5042,1365, 839, 272, 978,2262,2580,3456, # 464 +2129,1363,3689,1423, 697, 100,3094, 48, 70,1231, 495,3139,2196,5043,1294,5044, # 480 +2080, 462, 586,1042,3279, 853, 256, 988, 185,2382,3457,1698, 434,1084,5045,3458, # 496 + 314,2625,2788,4522,2335,2336, 569,2285, 637,1817,2525, 757,1162,1879,1616,3459, # 512 + 287,1577,2116, 768,4523,1671,2868,3566,2526,1321,3816, 909,2418,5046,4211, 933, # 528 +3817,4212,2053,2361,1222,4524, 765,2419,1322, 786,4525,5047,1920,1462,1677,2909, # 544 +1699,5048,4526,1424,2442,3140,3690,2600,3353,1775,1941,3460,3983,4213, 309,1369, # 560 +1130,2825, 364,2234,1653,1299,3984,3567,3985,3986,2656, 525,1085,3041, 902,2001, # 576 +1475, 964,4527, 421,1845,1415,1057,2286, 940,1364,3141, 376,4528,4529,1381, 7, # 592 +2527, 983,2383, 336,1710,2684,1846, 321,3461, 559,1131,3042,2752,1809,1132,1313, # 608 + 265,1481,1858,5049, 352,1203,2826,3280, 167,1089, 420,2827, 776, 792,1724,3568, # 624 +4214,2443,3281,5050,4215,5051, 446, 229, 333,2753, 901,3818,1200,1557,4530,2657, # 640 +1921, 395,2754,2685,3819,4216,1836, 125, 916,3209,2626,4531,5052,5053,3820,5054, # 656 +5055,5056,4532,3142,3691,1133,2555,1757,3462,1510,2318,1409,3569,5057,2146, 438, # 672 +2601,2910,2384,3354,1068, 958,3043, 461, 311,2869,2686,4217,1916,3210,4218,1979, # 688 + 383, 750,2755,2627,4219, 274, 539, 385,1278,1442,5058,1154,1965, 384, 561, 210, # 704 + 98,1295,2556,3570,5059,1711,2420,1482,3463,3987,2911,1257, 129,5060,3821, 642, # 720 + 523,2789,2790,2658,5061, 141,2235,1333, 68, 176, 441, 876, 907,4220, 603,2602, # 736 + 710, 171,3464, 404, 549, 18,3143,2398,1410,3692,1666,5062,3571,4533,2912,4534, # 752 +5063,2991, 368,5064, 146, 366, 99, 871,3693,1543, 748, 807,1586,1185, 22,2263, # 768 + 379,3822,3211,5065,3212, 505,1942,2628,1992,1382,2319,5066, 380,2362, 218, 702, # 784 +1818,1248,3465,3044,3572,3355,3282,5067,2992,3694, 930,3283,3823,5068, 59,5069, # 800 + 585, 601,4221, 497,3466,1112,1314,4535,1802,5070,1223,1472,2177,5071, 749,1837, # 816 + 690,1900,3824,1773,3988,1476, 429,1043,1791,2236,2117, 917,4222, 447,1086,1629, # 832 +5072, 556,5073,5074,2021,1654, 844,1090, 105, 550, 966,1758,2828,1008,1783, 686, # 848 +1095,5075,2287, 793,1602,5076,3573,2603,4536,4223,2948,2302,4537,3825, 980,2503, # 864 + 544, 353, 527,4538, 908,2687,2913,5077, 381,2629,1943,1348,5078,1341,1252, 560, # 880 +3095,5079,3467,2870,5080,2054, 973, 886,2081, 143,4539,5081,5082, 157,3989, 496, # 896 +4224, 57, 840, 540,2039,4540,4541,3468,2118,1445, 970,2264,1748,1966,2082,4225, # 912 +3144,1234,1776,3284,2829,3695, 773,1206,2130,1066,2040,1326,3990,1738,1725,4226, # 928 + 279,3145, 51,1544,2604, 423,1578,2131,2067, 173,4542,1880,5083,5084,1583, 264, # 944 + 610,3696,4543,2444, 280, 154,5085,5086,5087,1739, 338,1282,3096, 693,2871,1411, # 960 +1074,3826,2445,5088,4544,5089,5090,1240, 952,2399,5091,2914,1538,2688, 685,1483, # 976 +4227,2475,1436, 953,4228,2055,4545, 671,2400, 79,4229,2446,3285, 608, 567,2689, # 992 +3469,4230,4231,1691, 393,1261,1792,2401,5092,4546,5093,5094,5095,5096,1383,1672, # 1008 +3827,3213,1464, 522,1119, 661,1150, 216, 675,4547,3991,1432,3574, 609,4548,2690, # 1024 +2402,5097,5098,5099,4232,3045, 0,5100,2476, 315, 231,2447, 301,3356,4549,2385, # 1040 +5101, 233,4233,3697,1819,4550,4551,5102, 96,1777,1315,2083,5103, 257,5104,1810, # 1056 +3698,2718,1139,1820,4234,2022,1124,2164,2791,1778,2659,5105,3097, 363,1655,3214, # 1072 +5106,2993,5107,5108,5109,3992,1567,3993, 718, 103,3215, 849,1443, 341,3357,2949, # 1088 +1484,5110,1712, 127, 67, 339,4235,2403, 679,1412, 821,5111,5112, 834, 738, 351, # 1104 +2994,2147, 846, 235,1497,1881, 418,1993,3828,2719, 186,1100,2148,2756,3575,1545, # 1120 +1355,2950,2872,1377, 583,3994,4236,2581,2995,5113,1298,3699,1078,2557,3700,2363, # 1136 + 78,3829,3830, 267,1289,2100,2002,1594,4237, 348, 369,1274,2197,2178,1838,4552, # 1152 +1821,2830,3701,2757,2288,2003,4553,2951,2758, 144,3358, 882,4554,3995,2759,3470, # 1168 +4555,2915,5114,4238,1726, 320,5115,3996,3046, 788,2996,5116,2831,1774,1327,2873, # 1184 +3997,2832,5117,1306,4556,2004,1700,3831,3576,2364,2660, 787,2023, 506, 824,3702, # 1200 + 534, 323,4557,1044,3359,2024,1901, 946,3471,5118,1779,1500,1678,5119,1882,4558, # 1216 + 165, 243,4559,3703,2528, 123, 683,4239, 764,4560, 36,3998,1793, 589,2916, 816, # 1232 + 626,1667,3047,2237,1639,1555,1622,3832,3999,5120,4000,2874,1370,1228,1933, 891, # 1248 +2084,2917, 304,4240,5121, 292,2997,2720,3577, 691,2101,4241,1115,4561, 118, 662, # 1264 +5122, 611,1156, 854,2386,1316,2875, 2, 386, 515,2918,5123,5124,3286, 868,2238, # 1280 +1486, 855,2661, 785,2216,3048,5125,1040,3216,3578,5126,3146, 448,5127,1525,5128, # 1296 +2165,4562,5129,3833,5130,4242,2833,3579,3147, 503, 818,4001,3148,1568, 814, 676, # 1312 +1444, 306,1749,5131,3834,1416,1030, 197,1428, 805,2834,1501,4563,5132,5133,5134, # 1328 +1994,5135,4564,5136,5137,2198, 13,2792,3704,2998,3149,1229,1917,5138,3835,2132, # 1344 +5139,4243,4565,2404,3580,5140,2217,1511,1727,1120,5141,5142, 646,3836,2448, 307, # 1360 +5143,5144,1595,3217,5145,5146,5147,3705,1113,1356,4002,1465,2529,2530,5148, 519, # 1376 +5149, 128,2133, 92,2289,1980,5150,4003,1512, 342,3150,2199,5151,2793,2218,1981, # 1392 +3360,4244, 290,1656,1317, 789, 827,2365,5152,3837,4566, 562, 581,4004,5153, 401, # 1408 +4567,2252, 94,4568,5154,1399,2794,5155,1463,2025,4569,3218,1944,5156, 828,1105, # 1424 +4245,1262,1394,5157,4246, 605,4570,5158,1784,2876,5159,2835, 819,2102, 578,2200, # 1440 +2952,5160,1502, 436,3287,4247,3288,2836,4005,2919,3472,3473,5161,2721,2320,5162, # 1456 +5163,2337,2068, 23,4571, 193, 826,3838,2103, 699,1630,4248,3098, 390,1794,1064, # 1472 +3581,5164,1579,3099,3100,1400,5165,4249,1839,1640,2877,5166,4572,4573, 137,4250, # 1488 + 598,3101,1967, 780, 104, 974,2953,5167, 278, 899, 253, 402, 572, 504, 493,1339, # 1504 +5168,4006,1275,4574,2582,2558,5169,3706,3049,3102,2253, 565,1334,2722, 863, 41, # 1520 +5170,5171,4575,5172,1657,2338, 19, 463,2760,4251, 606,5173,2999,3289,1087,2085, # 1536 +1323,2662,3000,5174,1631,1623,1750,4252,2691,5175,2878, 791,2723,2663,2339, 232, # 1552 +2421,5176,3001,1498,5177,2664,2630, 755,1366,3707,3290,3151,2026,1609, 119,1918, # 1568 +3474, 862,1026,4253,5178,4007,3839,4576,4008,4577,2265,1952,2477,5179,1125, 817, # 1584 +4254,4255,4009,1513,1766,2041,1487,4256,3050,3291,2837,3840,3152,5180,5181,1507, # 1600 +5182,2692, 733, 40,1632,1106,2879, 345,4257, 841,2531, 230,4578,3002,1847,3292, # 1616 +3475,5183,1263, 986,3476,5184, 735, 879, 254,1137, 857, 622,1300,1180,1388,1562, # 1632 +4010,4011,2954, 967,2761,2665,1349, 592,2134,1692,3361,3003,1995,4258,1679,4012, # 1648 +1902,2188,5185, 739,3708,2724,1296,1290,5186,4259,2201,2202,1922,1563,2605,2559, # 1664 +1871,2762,3004,5187, 435,5188, 343,1108, 596, 17,1751,4579,2239,3477,3709,5189, # 1680 +4580, 294,3582,2955,1693, 477, 979, 281,2042,3583, 643,2043,3710,2631,2795,2266, # 1696 +1031,2340,2135,2303,3584,4581, 367,1249,2560,5190,3585,5191,4582,1283,3362,2005, # 1712 + 240,1762,3363,4583,4584, 836,1069,3153, 474,5192,2149,2532, 268,3586,5193,3219, # 1728 +1521,1284,5194,1658,1546,4260,5195,3587,3588,5196,4261,3364,2693,1685,4262, 961, # 1744 +1673,2632, 190,2006,2203,3841,4585,4586,5197, 570,2504,3711,1490,5198,4587,2633, # 1760 +3293,1957,4588, 584,1514, 396,1045,1945,5199,4589,1968,2449,5200,5201,4590,4013, # 1776 + 619,5202,3154,3294, 215,2007,2796,2561,3220,4591,3221,4592, 763,4263,3842,4593, # 1792 +5203,5204,1958,1767,2956,3365,3712,1174, 452,1477,4594,3366,3155,5205,2838,1253, # 1808 +2387,2189,1091,2290,4264, 492,5206, 638,1169,1825,2136,1752,4014, 648, 926,1021, # 1824 +1324,4595, 520,4596, 997, 847,1007, 892,4597,3843,2267,1872,3713,2405,1785,4598, # 1840 +1953,2957,3103,3222,1728,4265,2044,3714,4599,2008,1701,3156,1551, 30,2268,4266, # 1856 +5207,2027,4600,3589,5208, 501,5209,4267, 594,3478,2166,1822,3590,3479,3591,3223, # 1872 + 829,2839,4268,5210,1680,3157,1225,4269,5211,3295,4601,4270,3158,2341,5212,4602, # 1888 +4271,5213,4015,4016,5214,1848,2388,2606,3367,5215,4603, 374,4017, 652,4272,4273, # 1904 + 375,1140, 798,5216,5217,5218,2366,4604,2269, 546,1659, 138,3051,2450,4605,5219, # 1920 +2254, 612,1849, 910, 796,3844,1740,1371, 825,3845,3846,5220,2920,2562,5221, 692, # 1936 + 444,3052,2634, 801,4606,4274,5222,1491, 244,1053,3053,4275,4276, 340,5223,4018, # 1952 +1041,3005, 293,1168, 87,1357,5224,1539, 959,5225,2240, 721, 694,4277,3847, 219, # 1968 +1478, 644,1417,3368,2666,1413,1401,1335,1389,4019,5226,5227,3006,2367,3159,1826, # 1984 + 730,1515, 184,2840, 66,4607,5228,1660,2958, 246,3369, 378,1457, 226,3480, 975, # 2000 +4020,2959,1264,3592, 674, 696,5229, 163,5230,1141,2422,2167, 713,3593,3370,4608, # 2016 +4021,5231,5232,1186, 15,5233,1079,1070,5234,1522,3224,3594, 276,1050,2725, 758, # 2032 +1126, 653,2960,3296,5235,2342, 889,3595,4022,3104,3007, 903,1250,4609,4023,3481, # 2048 +3596,1342,1681,1718, 766,3297, 286, 89,2961,3715,5236,1713,5237,2607,3371,3008, # 2064 +5238,2962,2219,3225,2880,5239,4610,2505,2533, 181, 387,1075,4024, 731,2190,3372, # 2080 +5240,3298, 310, 313,3482,2304, 770,4278, 54,3054, 189,4611,3105,3848,4025,5241, # 2096 +1230,1617,1850, 355,3597,4279,4612,3373, 111,4280,3716,1350,3160,3483,3055,4281, # 2112 +2150,3299,3598,5242,2797,4026,4027,3009, 722,2009,5243,1071, 247,1207,2343,2478, # 2128 +1378,4613,2010, 864,1437,1214,4614, 373,3849,1142,2220, 667,4615, 442,2763,2563, # 2144 +3850,4028,1969,4282,3300,1840, 837, 170,1107, 934,1336,1883,5244,5245,2119,4283, # 2160 +2841, 743,1569,5246,4616,4284, 582,2389,1418,3484,5247,1803,5248, 357,1395,1729, # 2176 +3717,3301,2423,1564,2241,5249,3106,3851,1633,4617,1114,2086,4285,1532,5250, 482, # 2192 +2451,4618,5251,5252,1492, 833,1466,5253,2726,3599,1641,2842,5254,1526,1272,3718, # 2208 +4286,1686,1795, 416,2564,1903,1954,1804,5255,3852,2798,3853,1159,2321,5256,2881, # 2224 +4619,1610,1584,3056,2424,2764, 443,3302,1163,3161,5257,5258,4029,5259,4287,2506, # 2240 +3057,4620,4030,3162,2104,1647,3600,2011,1873,4288,5260,4289, 431,3485,5261, 250, # 2256 + 97, 81,4290,5262,1648,1851,1558, 160, 848,5263, 866, 740,1694,5264,2204,2843, # 2272 +3226,4291,4621,3719,1687, 950,2479, 426, 469,3227,3720,3721,4031,5265,5266,1188, # 2288 + 424,1996, 861,3601,4292,3854,2205,2694, 168,1235,3602,4293,5267,2087,1674,4622, # 2304 +3374,3303, 220,2565,1009,5268,3855, 670,3010, 332,1208, 717,5269,5270,3603,2452, # 2320 +4032,3375,5271, 513,5272,1209,2882,3376,3163,4623,1080,5273,5274,5275,5276,2534, # 2336 +3722,3604, 815,1587,4033,4034,5277,3605,3486,3856,1254,4624,1328,3058,1390,4035, # 2352 +1741,4036,3857,4037,5278, 236,3858,2453,3304,5279,5280,3723,3859,1273,3860,4625, # 2368 +5281, 308,5282,4626, 245,4627,1852,2480,1307,2583, 430, 715,2137,2454,5283, 270, # 2384 + 199,2883,4038,5284,3606,2727,1753, 761,1754, 725,1661,1841,4628,3487,3724,5285, # 2400 +5286, 587, 14,3305, 227,2608, 326, 480,2270, 943,2765,3607, 291, 650,1884,5287, # 2416 +1702,1226, 102,1547, 62,3488, 904,4629,3489,1164,4294,5288,5289,1224,1548,2766, # 2432 + 391, 498,1493,5290,1386,1419,5291,2056,1177,4630, 813, 880,1081,2368, 566,1145, # 2448 +4631,2291,1001,1035,2566,2609,2242, 394,1286,5292,5293,2069,5294, 86,1494,1730, # 2464 +4039, 491,1588, 745, 897,2963, 843,3377,4040,2767,2884,3306,1768, 998,2221,2070, # 2480 + 397,1827,1195,1970,3725,3011,3378, 284,5295,3861,2507,2138,2120,1904,5296,4041, # 2496 +2151,4042,4295,1036,3490,1905, 114,2567,4296, 209,1527,5297,5298,2964,2844,2635, # 2512 +2390,2728,3164, 812,2568,5299,3307,5300,1559, 737,1885,3726,1210, 885, 28,2695, # 2528 +3608,3862,5301,4297,1004,1780,4632,5302, 346,1982,2222,2696,4633,3863,1742, 797, # 2544 +1642,4043,1934,1072,1384,2152, 896,4044,3308,3727,3228,2885,3609,5303,2569,1959, # 2560 +4634,2455,1786,5304,5305,5306,4045,4298,1005,1308,3728,4299,2729,4635,4636,1528, # 2576 +2610, 161,1178,4300,1983, 987,4637,1101,4301, 631,4046,1157,3229,2425,1343,1241, # 2592 +1016,2243,2570, 372, 877,2344,2508,1160, 555,1935, 911,4047,5307, 466,1170, 169, # 2608 +1051,2921,2697,3729,2481,3012,1182,2012,2571,1251,2636,5308, 992,2345,3491,1540, # 2624 +2730,1201,2071,2406,1997,2482,5309,4638, 528,1923,2191,1503,1874,1570,2369,3379, # 2640 +3309,5310, 557,1073,5311,1828,3492,2088,2271,3165,3059,3107, 767,3108,2799,4639, # 2656 +1006,4302,4640,2346,1267,2179,3730,3230, 778,4048,3231,2731,1597,2667,5312,4641, # 2672 +5313,3493,5314,5315,5316,3310,2698,1433,3311, 131, 95,1504,4049, 723,4303,3166, # 2688 +1842,3610,2768,2192,4050,2028,2105,3731,5317,3013,4051,1218,5318,3380,3232,4052, # 2704 +4304,2584, 248,1634,3864, 912,5319,2845,3732,3060,3865, 654, 53,5320,3014,5321, # 2720 +1688,4642, 777,3494,1032,4053,1425,5322, 191, 820,2121,2846, 971,4643, 931,3233, # 2736 + 135, 664, 783,3866,1998, 772,2922,1936,4054,3867,4644,2923,3234, 282,2732, 640, # 2752 +1372,3495,1127, 922, 325,3381,5323,5324, 711,2045,5325,5326,4055,2223,2800,1937, # 2768 +4056,3382,2224,2255,3868,2305,5327,4645,3869,1258,3312,4057,3235,2139,2965,4058, # 2784 +4059,5328,2225, 258,3236,4646, 101,1227,5329,3313,1755,5330,1391,3314,5331,2924, # 2800 +2057, 893,5332,5333,5334,1402,4305,2347,5335,5336,3237,3611,5337,5338, 878,1325, # 2816 +1781,2801,4647, 259,1385,2585, 744,1183,2272,4648,5339,4060,2509,5340, 684,1024, # 2832 +4306,5341, 472,3612,3496,1165,3315,4061,4062, 322,2153, 881, 455,1695,1152,1340, # 2848 + 660, 554,2154,4649,1058,4650,4307, 830,1065,3383,4063,4651,1924,5342,1703,1919, # 2864 +5343, 932,2273, 122,5344,4652, 947, 677,5345,3870,2637, 297,1906,1925,2274,4653, # 2880 +2322,3316,5346,5347,4308,5348,4309, 84,4310, 112, 989,5349, 547,1059,4064, 701, # 2896 +3613,1019,5350,4311,5351,3497, 942, 639, 457,2306,2456, 993,2966, 407, 851, 494, # 2912 +4654,3384, 927,5352,1237,5353,2426,3385, 573,4312, 680, 921,2925,1279,1875, 285, # 2928 + 790,1448,1984, 719,2168,5354,5355,4655,4065,4066,1649,5356,1541, 563,5357,1077, # 2944 +5358,3386,3061,3498, 511,3015,4067,4068,3733,4069,1268,2572,3387,3238,4656,4657, # 2960 +5359, 535,1048,1276,1189,2926,2029,3167,1438,1373,2847,2967,1134,2013,5360,4313, # 2976 +1238,2586,3109,1259,5361, 700,5362,2968,3168,3734,4314,5363,4315,1146,1876,1907, # 2992 +4658,2611,4070, 781,2427, 132,1589, 203, 147, 273,2802,2407, 898,1787,2155,4071, # 3008 +4072,5364,3871,2803,5365,5366,4659,4660,5367,3239,5368,1635,3872, 965,5369,1805, # 3024 +2699,1516,3614,1121,1082,1329,3317,4073,1449,3873, 65,1128,2848,2927,2769,1590, # 3040 +3874,5370,5371, 12,2668, 45, 976,2587,3169,4661, 517,2535,1013,1037,3240,5372, # 3056 +3875,2849,5373,3876,5374,3499,5375,2612, 614,1999,2323,3877,3110,2733,2638,5376, # 3072 +2588,4316, 599,1269,5377,1811,3735,5378,2700,3111, 759,1060, 489,1806,3388,3318, # 3088 +1358,5379,5380,2391,1387,1215,2639,2256, 490,5381,5382,4317,1759,2392,2348,5383, # 3104 +4662,3878,1908,4074,2640,1807,3241,4663,3500,3319,2770,2349, 874,5384,5385,3501, # 3120 +3736,1859, 91,2928,3737,3062,3879,4664,5386,3170,4075,2669,5387,3502,1202,1403, # 3136 +3880,2969,2536,1517,2510,4665,3503,2511,5388,4666,5389,2701,1886,1495,1731,4076, # 3152 +2370,4667,5390,2030,5391,5392,4077,2702,1216, 237,2589,4318,2324,4078,3881,4668, # 3168 +4669,2703,3615,3504, 445,4670,5393,5394,5395,5396,2771, 61,4079,3738,1823,4080, # 3184 +5397, 687,2046, 935, 925, 405,2670, 703,1096,1860,2734,4671,4081,1877,1367,2704, # 3200 +3389, 918,2106,1782,2483, 334,3320,1611,1093,4672, 564,3171,3505,3739,3390, 945, # 3216 +2641,2058,4673,5398,1926, 872,4319,5399,3506,2705,3112, 349,4320,3740,4082,4674, # 3232 +3882,4321,3741,2156,4083,4675,4676,4322,4677,2408,2047, 782,4084, 400, 251,4323, # 3248 +1624,5400,5401, 277,3742, 299,1265, 476,1191,3883,2122,4324,4325,1109, 205,5402, # 3264 +2590,1000,2157,3616,1861,5403,5404,5405,4678,5406,4679,2573, 107,2484,2158,4085, # 3280 +3507,3172,5407,1533, 541,1301, 158, 753,4326,2886,3617,5408,1696, 370,1088,4327, # 3296 +4680,3618, 579, 327, 440, 162,2244, 269,1938,1374,3508, 968,3063, 56,1396,3113, # 3312 +2107,3321,3391,5409,1927,2159,4681,3016,5410,3619,5411,5412,3743,4682,2485,5413, # 3328 +2804,5414,1650,4683,5415,2613,5416,5417,4086,2671,3392,1149,3393,4087,3884,4088, # 3344 +5418,1076, 49,5419, 951,3242,3322,3323, 450,2850, 920,5420,1812,2805,2371,4328, # 3360 +1909,1138,2372,3885,3509,5421,3243,4684,1910,1147,1518,2428,4685,3886,5422,4686, # 3376 +2393,2614, 260,1796,3244,5423,5424,3887,3324, 708,5425,3620,1704,5426,3621,1351, # 3392 +1618,3394,3017,1887, 944,4329,3395,4330,3064,3396,4331,5427,3744, 422, 413,1714, # 3408 +3325, 500,2059,2350,4332,2486,5428,1344,1911, 954,5429,1668,5430,5431,4089,2409, # 3424 +4333,3622,3888,4334,5432,2307,1318,2512,3114, 133,3115,2887,4687, 629, 31,2851, # 3440 +2706,3889,4688, 850, 949,4689,4090,2970,1732,2089,4335,1496,1853,5433,4091, 620, # 3456 +3245, 981,1242,3745,3397,1619,3746,1643,3326,2140,2457,1971,1719,3510,2169,5434, # 3472 +3246,5435,5436,3398,1829,5437,1277,4690,1565,2048,5438,1636,3623,3116,5439, 869, # 3488 +2852, 655,3890,3891,3117,4092,3018,3892,1310,3624,4691,5440,5441,5442,1733, 558, # 3504 +4692,3747, 335,1549,3065,1756,4336,3748,1946,3511,1830,1291,1192, 470,2735,2108, # 3520 +2806, 913,1054,4093,5443,1027,5444,3066,4094,4693, 982,2672,3399,3173,3512,3247, # 3536 +3248,1947,2807,5445, 571,4694,5446,1831,5447,3625,2591,1523,2429,5448,2090, 984, # 3552 +4695,3749,1960,5449,3750, 852, 923,2808,3513,3751, 969,1519, 999,2049,2325,1705, # 3568 +5450,3118, 615,1662, 151, 597,4095,2410,2326,1049, 275,4696,3752,4337, 568,3753, # 3584 +3626,2487,4338,3754,5451,2430,2275, 409,3249,5452,1566,2888,3514,1002, 769,2853, # 3600 + 194,2091,3174,3755,2226,3327,4339, 628,1505,5453,5454,1763,2180,3019,4096, 521, # 3616 +1161,2592,1788,2206,2411,4697,4097,1625,4340,4341, 412, 42,3119, 464,5455,2642, # 3632 +4698,3400,1760,1571,2889,3515,2537,1219,2207,3893,2643,2141,2373,4699,4700,3328, # 3648 +1651,3401,3627,5456,5457,3628,2488,3516,5458,3756,5459,5460,2276,2092, 460,5461, # 3664 +4701,5462,3020, 962, 588,3629, 289,3250,2644,1116, 52,5463,3067,1797,5464,5465, # 3680 +5466,1467,5467,1598,1143,3757,4342,1985,1734,1067,4702,1280,3402, 465,4703,1572, # 3696 + 510,5468,1928,2245,1813,1644,3630,5469,4704,3758,5470,5471,2673,1573,1534,5472, # 3712 +5473, 536,1808,1761,3517,3894,3175,2645,5474,5475,5476,4705,3518,2929,1912,2809, # 3728 +5477,3329,1122, 377,3251,5478, 360,5479,5480,4343,1529, 551,5481,2060,3759,1769, # 3744 +2431,5482,2930,4344,3330,3120,2327,2109,2031,4706,1404, 136,1468,1479, 672,1171, # 3760 +3252,2308, 271,3176,5483,2772,5484,2050, 678,2736, 865,1948,4707,5485,2014,4098, # 3776 +2971,5486,2737,2227,1397,3068,3760,4708,4709,1735,2931,3403,3631,5487,3895, 509, # 3792 +2854,2458,2890,3896,5488,5489,3177,3178,4710,4345,2538,4711,2309,1166,1010, 552, # 3808 + 681,1888,5490,5491,2972,2973,4099,1287,1596,1862,3179, 358, 453, 736, 175, 478, # 3824 +1117, 905,1167,1097,5492,1854,1530,5493,1706,5494,2181,3519,2292,3761,3520,3632, # 3840 +4346,2093,4347,5495,3404,1193,2489,4348,1458,2193,2208,1863,1889,1421,3331,2932, # 3856 +3069,2182,3521, 595,2123,5496,4100,5497,5498,4349,1707,2646, 223,3762,1359, 751, # 3872 +3121, 183,3522,5499,2810,3021, 419,2374, 633, 704,3897,2394, 241,5500,5501,5502, # 3888 + 838,3022,3763,2277,2773,2459,3898,1939,2051,4101,1309,3122,2246,1181,5503,1136, # 3904 +2209,3899,2375,1446,4350,2310,4712,5504,5505,4351,1055,2615, 484,3764,5506,4102, # 3920 + 625,4352,2278,3405,1499,4353,4103,5507,4104,4354,3253,2279,2280,3523,5508,5509, # 3936 +2774, 808,2616,3765,3406,4105,4355,3123,2539, 526,3407,3900,4356, 955,5510,1620, # 3952 +4357,2647,2432,5511,1429,3766,1669,1832, 994, 928,5512,3633,1260,5513,5514,5515, # 3968 +1949,2293, 741,2933,1626,4358,2738,2460, 867,1184, 362,3408,1392,5516,5517,4106, # 3984 +4359,1770,1736,3254,2934,4713,4714,1929,2707,1459,1158,5518,3070,3409,2891,1292, # 4000 +1930,2513,2855,3767,1986,1187,2072,2015,2617,4360,5519,2574,2514,2170,3768,2490, # 4016 +3332,5520,3769,4715,5521,5522, 666,1003,3023,1022,3634,4361,5523,4716,1814,2257, # 4032 + 574,3901,1603, 295,1535, 705,3902,4362, 283, 858, 417,5524,5525,3255,4717,4718, # 4048 +3071,1220,1890,1046,2281,2461,4107,1393,1599, 689,2575, 388,4363,5526,2491, 802, # 4064 +5527,2811,3903,2061,1405,2258,5528,4719,3904,2110,1052,1345,3256,1585,5529, 809, # 4080 +5530,5531,5532, 575,2739,3524, 956,1552,1469,1144,2328,5533,2329,1560,2462,3635, # 4096 +3257,4108, 616,2210,4364,3180,2183,2294,5534,1833,5535,3525,4720,5536,1319,3770, # 4112 +3771,1211,3636,1023,3258,1293,2812,5537,5538,5539,3905, 607,2311,3906, 762,2892, # 4128 +1439,4365,1360,4721,1485,3072,5540,4722,1038,4366,1450,2062,2648,4367,1379,4723, # 4144 +2593,5541,5542,4368,1352,1414,2330,2935,1172,5543,5544,3907,3908,4724,1798,1451, # 4160 +5545,5546,5547,5548,2936,4109,4110,2492,2351, 411,4111,4112,3637,3333,3124,4725, # 4176 +1561,2674,1452,4113,1375,5549,5550, 47,2974, 316,5551,1406,1591,2937,3181,5552, # 4192 +1025,2142,3125,3182, 354,2740, 884,2228,4369,2412, 508,3772, 726,3638, 996,2433, # 4208 +3639, 729,5553, 392,2194,1453,4114,4726,3773,5554,5555,2463,3640,2618,1675,2813, # 4224 + 919,2352,2975,2353,1270,4727,4115, 73,5556,5557, 647,5558,3259,2856,2259,1550, # 4240 +1346,3024,5559,1332, 883,3526,5560,5561,5562,5563,3334,2775,5564,1212, 831,1347, # 4256 +4370,4728,2331,3909,1864,3073, 720,3910,4729,4730,3911,5565,4371,5566,5567,4731, # 4272 +5568,5569,1799,4732,3774,2619,4733,3641,1645,2376,4734,5570,2938, 669,2211,2675, # 4288 +2434,5571,2893,5572,5573,1028,3260,5574,4372,2413,5575,2260,1353,5576,5577,4735, # 4304 +3183, 518,5578,4116,5579,4373,1961,5580,2143,4374,5581,5582,3025,2354,2355,3912, # 4320 + 516,1834,1454,4117,2708,4375,4736,2229,2620,1972,1129,3642,5583,2776,5584,2976, # 4336 +1422, 577,1470,3026,1524,3410,5585,5586, 432,4376,3074,3527,5587,2594,1455,2515, # 4352 +2230,1973,1175,5588,1020,2741,4118,3528,4737,5589,2742,5590,1743,1361,3075,3529, # 4368 +2649,4119,4377,4738,2295, 895, 924,4378,2171, 331,2247,3076, 166,1627,3077,1098, # 4384 +5591,1232,2894,2231,3411,4739, 657, 403,1196,2377, 542,3775,3412,1600,4379,3530, # 4400 +5592,4740,2777,3261, 576, 530,1362,4741,4742,2540,2676,3776,4120,5593, 842,3913, # 4416 +5594,2814,2032,1014,4121, 213,2709,3413, 665, 621,4380,5595,3777,2939,2435,5596, # 4432 +2436,3335,3643,3414,4743,4381,2541,4382,4744,3644,1682,4383,3531,1380,5597, 724, # 4448 +2282, 600,1670,5598,1337,1233,4745,3126,2248,5599,1621,4746,5600, 651,4384,5601, # 4464 +1612,4385,2621,5602,2857,5603,2743,2312,3078,5604, 716,2464,3079, 174,1255,2710, # 4480 +4122,3645, 548,1320,1398, 728,4123,1574,5605,1891,1197,3080,4124,5606,3081,3082, # 4496 +3778,3646,3779, 747,5607, 635,4386,4747,5608,5609,5610,4387,5611,5612,4748,5613, # 4512 +3415,4749,2437, 451,5614,3780,2542,2073,4388,2744,4389,4125,5615,1764,4750,5616, # 4528 +4390, 350,4751,2283,2395,2493,5617,4391,4126,2249,1434,4127, 488,4752, 458,4392, # 4544 +4128,3781, 771,1330,2396,3914,2576,3184,2160,2414,1553,2677,3185,4393,5618,2494, # 4560 +2895,2622,1720,2711,4394,3416,4753,5619,2543,4395,5620,3262,4396,2778,5621,2016, # 4576 +2745,5622,1155,1017,3782,3915,5623,3336,2313, 201,1865,4397,1430,5624,4129,5625, # 4592 +5626,5627,5628,5629,4398,1604,5630, 414,1866, 371,2595,4754,4755,3532,2017,3127, # 4608 +4756,1708, 960,4399, 887, 389,2172,1536,1663,1721,5631,2232,4130,2356,2940,1580, # 4624 +5632,5633,1744,4757,2544,4758,4759,5634,4760,5635,2074,5636,4761,3647,3417,2896, # 4640 +4400,5637,4401,2650,3418,2815, 673,2712,2465, 709,3533,4131,3648,4402,5638,1148, # 4656 + 502, 634,5639,5640,1204,4762,3649,1575,4763,2623,3783,5641,3784,3128, 948,3263, # 4672 + 121,1745,3916,1110,5642,4403,3083,2516,3027,4132,3785,1151,1771,3917,1488,4133, # 4688 +1987,5643,2438,3534,5644,5645,2094,5646,4404,3918,1213,1407,2816, 531,2746,2545, # 4704 +3264,1011,1537,4764,2779,4405,3129,1061,5647,3786,3787,1867,2897,5648,2018, 120, # 4720 +4406,4407,2063,3650,3265,2314,3919,2678,3419,1955,4765,4134,5649,3535,1047,2713, # 4736 +1266,5650,1368,4766,2858, 649,3420,3920,2546,2747,1102,2859,2679,5651,5652,2000, # 4752 +5653,1111,3651,2977,5654,2495,3921,3652,2817,1855,3421,3788,5655,5656,3422,2415, # 4768 +2898,3337,3266,3653,5657,2577,5658,3654,2818,4135,1460, 856,5659,3655,5660,2899, # 4784 +2978,5661,2900,3922,5662,4408, 632,2517, 875,3923,1697,3924,2296,5663,5664,4767, # 4800 +3028,1239, 580,4768,4409,5665, 914, 936,2075,1190,4136,1039,2124,5666,5667,5668, # 4816 +5669,3423,1473,5670,1354,4410,3925,4769,2173,3084,4137, 915,3338,4411,4412,3339, # 4832 +1605,1835,5671,2748, 398,3656,4413,3926,4138, 328,1913,2860,4139,3927,1331,4414, # 4848 +3029, 937,4415,5672,3657,4140,4141,3424,2161,4770,3425, 524, 742, 538,3085,1012, # 4864 +5673,5674,3928,2466,5675, 658,1103, 225,3929,5676,5677,4771,5678,4772,5679,3267, # 4880 +1243,5680,4142, 963,2250,4773,5681,2714,3658,3186,5682,5683,2596,2332,5684,4774, # 4896 +5685,5686,5687,3536, 957,3426,2547,2033,1931,2941,2467, 870,2019,3659,1746,2780, # 4912 +2781,2439,2468,5688,3930,5689,3789,3130,3790,3537,3427,3791,5690,1179,3086,5691, # 4928 +3187,2378,4416,3792,2548,3188,3131,2749,4143,5692,3428,1556,2549,2297, 977,2901, # 4944 +2034,4144,1205,3429,5693,1765,3430,3189,2125,1271, 714,1689,4775,3538,5694,2333, # 4960 +3931, 533,4417,3660,2184, 617,5695,2469,3340,3539,2315,5696,5697,3190,5698,5699, # 4976 +3932,1988, 618, 427,2651,3540,3431,5700,5701,1244,1690,5702,2819,4418,4776,5703, # 4992 +3541,4777,5704,2284,1576, 473,3661,4419,3432, 972,5705,3662,5706,3087,5707,5708, # 5008 +4778,4779,5709,3793,4145,4146,5710, 153,4780, 356,5711,1892,2902,4420,2144, 408, # 5024 + 803,2357,5712,3933,5713,4421,1646,2578,2518,4781,4782,3934,5714,3935,4422,5715, # 5040 +2416,3433, 752,5716,5717,1962,3341,2979,5718, 746,3030,2470,4783,4423,3794, 698, # 5056 +4784,1893,4424,3663,2550,4785,3664,3936,5719,3191,3434,5720,1824,1302,4147,2715, # 5072 +3937,1974,4425,5721,4426,3192, 823,1303,1288,1236,2861,3542,4148,3435, 774,3938, # 5088 +5722,1581,4786,1304,2862,3939,4787,5723,2440,2162,1083,3268,4427,4149,4428, 344, # 5104 +1173, 288,2316, 454,1683,5724,5725,1461,4788,4150,2597,5726,5727,4789, 985, 894, # 5120 +5728,3436,3193,5729,1914,2942,3795,1989,5730,2111,1975,5731,4151,5732,2579,1194, # 5136 + 425,5733,4790,3194,1245,3796,4429,5734,5735,2863,5736, 636,4791,1856,3940, 760, # 5152 +1800,5737,4430,2212,1508,4792,4152,1894,1684,2298,5738,5739,4793,4431,4432,2213, # 5168 + 479,5740,5741, 832,5742,4153,2496,5743,2980,2497,3797, 990,3132, 627,1815,2652, # 5184 +4433,1582,4434,2126,2112,3543,4794,5744, 799,4435,3195,5745,4795,2113,1737,3031, # 5200 +1018, 543, 754,4436,3342,1676,4796,4797,4154,4798,1489,5746,3544,5747,2624,2903, # 5216 +4155,5748,5749,2981,5750,5751,5752,5753,3196,4799,4800,2185,1722,5754,3269,3270, # 5232 +1843,3665,1715, 481, 365,1976,1857,5755,5756,1963,2498,4801,5757,2127,3666,3271, # 5248 + 433,1895,2064,2076,5758, 602,2750,5759,5760,5761,5762,5763,3032,1628,3437,5764, # 5264 +3197,4802,4156,2904,4803,2519,5765,2551,2782,5766,5767,5768,3343,4804,2905,5769, # 5280 +4805,5770,2864,4806,4807,1221,2982,4157,2520,5771,5772,5773,1868,1990,5774,5775, # 5296 +5776,1896,5777,5778,4808,1897,4158, 318,5779,2095,4159,4437,5780,5781, 485,5782, # 5312 + 938,3941, 553,2680, 116,5783,3942,3667,5784,3545,2681,2783,3438,3344,2820,5785, # 5328 +3668,2943,4160,1747,2944,2983,5786,5787, 207,5788,4809,5789,4810,2521,5790,3033, # 5344 + 890,3669,3943,5791,1878,3798,3439,5792,2186,2358,3440,1652,5793,5794,5795, 941, # 5360 +2299, 208,3546,4161,2020, 330,4438,3944,2906,2499,3799,4439,4811,5796,5797,5798, # 5376 +) + diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/big5prober.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/big5prober.py new file mode 100644 index 00000000..98f99701 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/big5prober.py @@ -0,0 +1,47 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .mbcharsetprober import MultiByteCharSetProber +from .codingstatemachine import CodingStateMachine +from .chardistribution import Big5DistributionAnalysis +from .mbcssm import BIG5_SM_MODEL + + +class Big5Prober(MultiByteCharSetProber): + def __init__(self): + super(Big5Prober, self).__init__() + self.coding_sm = CodingStateMachine(BIG5_SM_MODEL) + self.distribution_analyzer = Big5DistributionAnalysis() + self.reset() + + @property + def charset_name(self): + return "Big5" + + @property + def language(self): + return "Chinese" diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/chardistribution.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/chardistribution.py new file mode 100644 index 00000000..c0395f4a --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/chardistribution.py @@ -0,0 +1,233 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .euctwfreq import (EUCTW_CHAR_TO_FREQ_ORDER, EUCTW_TABLE_SIZE, + EUCTW_TYPICAL_DISTRIBUTION_RATIO) +from .euckrfreq import (EUCKR_CHAR_TO_FREQ_ORDER, EUCKR_TABLE_SIZE, + EUCKR_TYPICAL_DISTRIBUTION_RATIO) +from .gb2312freq import (GB2312_CHAR_TO_FREQ_ORDER, GB2312_TABLE_SIZE, + GB2312_TYPICAL_DISTRIBUTION_RATIO) +from .big5freq import (BIG5_CHAR_TO_FREQ_ORDER, BIG5_TABLE_SIZE, + BIG5_TYPICAL_DISTRIBUTION_RATIO) +from .jisfreq import (JIS_CHAR_TO_FREQ_ORDER, JIS_TABLE_SIZE, + JIS_TYPICAL_DISTRIBUTION_RATIO) + + +class CharDistributionAnalysis(object): + ENOUGH_DATA_THRESHOLD = 1024 + SURE_YES = 0.99 + SURE_NO = 0.01 + MINIMUM_DATA_THRESHOLD = 3 + + def __init__(self): + # Mapping table to get frequency order from char order (get from + # GetOrder()) + self._char_to_freq_order = None + self._table_size = None # Size of above table + # This is a constant value which varies from language to language, + # used in calculating confidence. See + # http://www.mozilla.org/projects/intl/UniversalCharsetDetection.html + # for further detail. + self.typical_distribution_ratio = None + self._done = None + self._total_chars = None + self._freq_chars = None + self.reset() + + def reset(self): + """reset analyser, clear any state""" + # If this flag is set to True, detection is done and conclusion has + # been made + self._done = False + self._total_chars = 0 # Total characters encountered + # The number of characters whose frequency order is less than 512 + self._freq_chars = 0 + + def feed(self, char, char_len): + """feed a character with known length""" + if char_len == 2: + # we only care about 2-bytes character in our distribution analysis + order = self.get_order(char) + else: + order = -1 + if order >= 0: + self._total_chars += 1 + # order is valid + if order < self._table_size: + if 512 > self._char_to_freq_order[order]: + self._freq_chars += 1 + + def get_confidence(self): + """return confidence based on existing data""" + # if we didn't receive any character in our consideration range, + # return negative answer + if self._total_chars <= 0 or self._freq_chars <= self.MINIMUM_DATA_THRESHOLD: + return self.SURE_NO + + if self._total_chars != self._freq_chars: + r = (self._freq_chars / ((self._total_chars - self._freq_chars) + * self.typical_distribution_ratio)) + if r < self.SURE_YES: + return r + + # normalize confidence (we don't want to be 100% sure) + return self.SURE_YES + + def got_enough_data(self): + # It is not necessary to receive all data to draw conclusion. + # For charset detection, certain amount of data is enough + return self._total_chars > self.ENOUGH_DATA_THRESHOLD + + def get_order(self, byte_str): + # We do not handle characters based on the original encoding string, + # but convert this encoding string to a number, here called order. + # This allows multiple encodings of a language to share one frequency + # table. + return -1 + + +class EUCTWDistributionAnalysis(CharDistributionAnalysis): + def __init__(self): + super(EUCTWDistributionAnalysis, self).__init__() + self._char_to_freq_order = EUCTW_CHAR_TO_FREQ_ORDER + self._table_size = EUCTW_TABLE_SIZE + self.typical_distribution_ratio = EUCTW_TYPICAL_DISTRIBUTION_RATIO + + def get_order(self, byte_str): + # for euc-TW encoding, we are interested + # first byte range: 0xc4 -- 0xfe + # second byte range: 0xa1 -- 0xfe + # no validation needed here. State machine has done that + first_char = byte_str[0] + if first_char >= 0xC4: + return 94 * (first_char - 0xC4) + byte_str[1] - 0xA1 + else: + return -1 + + +class EUCKRDistributionAnalysis(CharDistributionAnalysis): + def __init__(self): + super(EUCKRDistributionAnalysis, self).__init__() + self._char_to_freq_order = EUCKR_CHAR_TO_FREQ_ORDER + self._table_size = EUCKR_TABLE_SIZE + self.typical_distribution_ratio = EUCKR_TYPICAL_DISTRIBUTION_RATIO + + def get_order(self, byte_str): + # for euc-KR encoding, we are interested + # first byte range: 0xb0 -- 0xfe + # second byte range: 0xa1 -- 0xfe + # no validation needed here. State machine has done that + first_char = byte_str[0] + if first_char >= 0xB0: + return 94 * (first_char - 0xB0) + byte_str[1] - 0xA1 + else: + return -1 + + +class GB2312DistributionAnalysis(CharDistributionAnalysis): + def __init__(self): + super(GB2312DistributionAnalysis, self).__init__() + self._char_to_freq_order = GB2312_CHAR_TO_FREQ_ORDER + self._table_size = GB2312_TABLE_SIZE + self.typical_distribution_ratio = GB2312_TYPICAL_DISTRIBUTION_RATIO + + def get_order(self, byte_str): + # for GB2312 encoding, we are interested + # first byte range: 0xb0 -- 0xfe + # second byte range: 0xa1 -- 0xfe + # no validation needed here. State machine has done that + first_char, second_char = byte_str[0], byte_str[1] + if (first_char >= 0xB0) and (second_char >= 0xA1): + return 94 * (first_char - 0xB0) + second_char - 0xA1 + else: + return -1 + + +class Big5DistributionAnalysis(CharDistributionAnalysis): + def __init__(self): + super(Big5DistributionAnalysis, self).__init__() + self._char_to_freq_order = BIG5_CHAR_TO_FREQ_ORDER + self._table_size = BIG5_TABLE_SIZE + self.typical_distribution_ratio = BIG5_TYPICAL_DISTRIBUTION_RATIO + + def get_order(self, byte_str): + # for big5 encoding, we are interested + # first byte range: 0xa4 -- 0xfe + # second byte range: 0x40 -- 0x7e , 0xa1 -- 0xfe + # no validation needed here. State machine has done that + first_char, second_char = byte_str[0], byte_str[1] + if first_char >= 0xA4: + if second_char >= 0xA1: + return 157 * (first_char - 0xA4) + second_char - 0xA1 + 63 + else: + return 157 * (first_char - 0xA4) + second_char - 0x40 + else: + return -1 + + +class SJISDistributionAnalysis(CharDistributionAnalysis): + def __init__(self): + super(SJISDistributionAnalysis, self).__init__() + self._char_to_freq_order = JIS_CHAR_TO_FREQ_ORDER + self._table_size = JIS_TABLE_SIZE + self.typical_distribution_ratio = JIS_TYPICAL_DISTRIBUTION_RATIO + + def get_order(self, byte_str): + # for sjis encoding, we are interested + # first byte range: 0x81 -- 0x9f , 0xe0 -- 0xfe + # second byte range: 0x40 -- 0x7e, 0x81 -- oxfe + # no validation needed here. State machine has done that + first_char, second_char = byte_str[0], byte_str[1] + if (first_char >= 0x81) and (first_char <= 0x9F): + order = 188 * (first_char - 0x81) + elif (first_char >= 0xE0) and (first_char <= 0xEF): + order = 188 * (first_char - 0xE0 + 31) + else: + return -1 + order = order + second_char - 0x40 + if second_char > 0x7F: + order = -1 + return order + + +class EUCJPDistributionAnalysis(CharDistributionAnalysis): + def __init__(self): + super(EUCJPDistributionAnalysis, self).__init__() + self._char_to_freq_order = JIS_CHAR_TO_FREQ_ORDER + self._table_size = JIS_TABLE_SIZE + self.typical_distribution_ratio = JIS_TYPICAL_DISTRIBUTION_RATIO + + def get_order(self, byte_str): + # for euc-JP encoding, we are interested + # first byte range: 0xa0 -- 0xfe + # second byte range: 0xa1 -- 0xfe + # no validation needed here. State machine has done that + char = byte_str[0] + if char >= 0xA0: + return 94 * (char - 0xA1) + byte_str[1] - 0xa1 + else: + return -1 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/charsetgroupprober.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/charsetgroupprober.py new file mode 100644 index 00000000..8b3738ef --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/charsetgroupprober.py @@ -0,0 +1,106 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .enums import ProbingState +from .charsetprober import CharSetProber + + +class CharSetGroupProber(CharSetProber): + def __init__(self, lang_filter=None): + super(CharSetGroupProber, self).__init__(lang_filter=lang_filter) + self._active_num = 0 + self.probers = [] + self._best_guess_prober = None + + def reset(self): + super(CharSetGroupProber, self).reset() + self._active_num = 0 + for prober in self.probers: + if prober: + prober.reset() + prober.active = True + self._active_num += 1 + self._best_guess_prober = None + + @property + def charset_name(self): + if not self._best_guess_prober: + self.get_confidence() + if not self._best_guess_prober: + return None + return self._best_guess_prober.charset_name + + @property + def language(self): + if not self._best_guess_prober: + self.get_confidence() + if not self._best_guess_prober: + return None + return self._best_guess_prober.language + + def feed(self, byte_str): + for prober in self.probers: + if not prober: + continue + if not prober.active: + continue + state = prober.feed(byte_str) + if not state: + continue + if state == ProbingState.FOUND_IT: + self._best_guess_prober = prober + return self.state + elif state == ProbingState.NOT_ME: + prober.active = False + self._active_num -= 1 + if self._active_num <= 0: + self._state = ProbingState.NOT_ME + return self.state + return self.state + + def get_confidence(self): + state = self.state + if state == ProbingState.FOUND_IT: + return 0.99 + elif state == ProbingState.NOT_ME: + return 0.01 + best_conf = 0.0 + self._best_guess_prober = None + for prober in self.probers: + if not prober: + continue + if not prober.active: + self.logger.debug('%s not active', prober.charset_name) + continue + conf = prober.get_confidence() + self.logger.debug('%s %s confidence = %s', prober.charset_name, prober.language, conf) + if best_conf < conf: + best_conf = conf + self._best_guess_prober = prober + if not self._best_guess_prober: + return 0.0 + return best_conf diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/charsetprober.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/charsetprober.py new file mode 100644 index 00000000..eac4e598 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/charsetprober.py @@ -0,0 +1,145 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Universal charset detector code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 2001 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# Shy Shalom - original C code +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +import logging +import re + +from .enums import ProbingState + + +class CharSetProber(object): + + SHORTCUT_THRESHOLD = 0.95 + + def __init__(self, lang_filter=None): + self._state = None + self.lang_filter = lang_filter + self.logger = logging.getLogger(__name__) + + def reset(self): + self._state = ProbingState.DETECTING + + @property + def charset_name(self): + return None + + def feed(self, buf): + pass + + @property + def state(self): + return self._state + + def get_confidence(self): + return 0.0 + + @staticmethod + def filter_high_byte_only(buf): + buf = re.sub(b'([\x00-\x7F])+', b' ', buf) + return buf + + @staticmethod + def filter_international_words(buf): + """ + We define three types of bytes: + alphabet: english alphabets [a-zA-Z] + international: international characters [\x80-\xFF] + marker: everything else [^a-zA-Z\x80-\xFF] + + The input buffer can be thought to contain a series of words delimited + by markers. This function works to filter all words that contain at + least one international character. All contiguous sequences of markers + are replaced by a single space ascii character. + + This filter applies to all scripts which do not use English characters. + """ + filtered = bytearray() + + # This regex expression filters out only words that have at-least one + # international character. The word may include one marker character at + # the end. + words = re.findall(b'[a-zA-Z]*[\x80-\xFF]+[a-zA-Z]*[^a-zA-Z\x80-\xFF]?', + buf) + + for word in words: + filtered.extend(word[:-1]) + + # If the last character in the word is a marker, replace it with a + # space as markers shouldn't affect our analysis (they are used + # similarly across all languages and may thus have similar + # frequencies). + last_char = word[-1:] + if not last_char.isalpha() and last_char < b'\x80': + last_char = b' ' + filtered.extend(last_char) + + return filtered + + @staticmethod + def filter_with_english_letters(buf): + """ + Returns a copy of ``buf`` that retains only the sequences of English + alphabet and high byte characters that are not between <> characters. + Also retains English alphabet and high byte characters immediately + before occurrences of >. + + This filter can be applied to all scripts which contain both English + characters and extended ASCII characters, but is currently only used by + ``Latin1Prober``. + """ + filtered = bytearray() + in_tag = False + prev = 0 + + for curr in range(len(buf)): + # Slice here to get bytes instead of an int with Python 3 + buf_char = buf[curr:curr + 1] + # Check if we're coming out of or entering an HTML tag + if buf_char == b'>': + in_tag = False + elif buf_char == b'<': + in_tag = True + + # If current character is not extended-ASCII and not alphabetic... + if buf_char < b'\x80' and not buf_char.isalpha(): + # ...and we're not in a tag + if curr > prev and not in_tag: + # Keep everything after last non-extended-ASCII, + # non-alphabetic character + filtered.extend(buf[prev:curr]) + # Output a space to delimit stretch we kept + filtered.extend(b' ') + prev = curr + 1 + + # If we're not in a tag... + if not in_tag: + # Keep everything after last non-extended-ASCII, non-alphabetic + # character + filtered.extend(buf[prev:]) + + return filtered diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/cli/__init__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/cli/__init__.py new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/cli/__init__.py @@ -0,0 +1 @@ + diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/cli/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/cli/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..40780c053a978d18c3f07635a900bb34871eec60 GIT binary patch literal 146 zcmXr!<>iW5rx(k}z`*brh~WSv-~hzMEI=ZKA(%mv(QhR~5l9$8{Ib_C$t}<?$SlxJ zD$UGE(KRT{NXj=bN&yLhaeP^7UP^wEesV@)QA%owesWHxetdjpUS>&ryk0@&Ee@O9 Q{FKt1R6CHt#X!se06?Q7J^%m! literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/cli/__pycache__/chardetect.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/cli/__pycache__/chardetect.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..82289ffc74a2a385667e957f5e1cc63e4b4d4573 GIT binary patch literal 3070 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/cli/chardetect.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/cli/chardetect.py new file mode 100644 index 00000000..c61136b6 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/cli/chardetect.py @@ -0,0 +1,85 @@ +#!/usr/bin/env python +""" +Script which takes one or more file paths and reports on their detected +encodings + +Example:: + + % chardetect somefile someotherfile + somefile: windows-1252 with confidence 0.5 + someotherfile: ascii with confidence 1.0 + +If no paths are provided, it takes its input from stdin. + +""" + +from __future__ import absolute_import, print_function, unicode_literals + +import argparse +import sys + +from pip._vendor.chardet import __version__ +from pip._vendor.chardet.compat import PY2 +from pip._vendor.chardet.universaldetector import UniversalDetector + + +def description_of(lines, name='stdin'): + """ + Return a string describing the probable encoding of a file or + list of strings. + + :param lines: The lines to get the encoding of. + :type lines: Iterable of bytes + :param name: Name of file or collection of lines + :type name: str + """ + u = UniversalDetector() + for line in lines: + line = bytearray(line) + u.feed(line) + # shortcut out of the loop to save reading further - particularly useful if we read a BOM. + if u.done: + break + u.close() + result = u.result + if PY2: + name = name.decode(sys.getfilesystemencoding(), 'ignore') + if result['encoding']: + return '{0}: {1} with confidence {2}'.format(name, result['encoding'], + result['confidence']) + else: + return '{0}: no result'.format(name) + + +def main(argv=None): + """ + Handles command line arguments and gets things started. + + :param argv: List of arguments, as if specified on the command-line. + If None, ``sys.argv[1:]`` is used instead. + :type argv: list of str + """ + # Get command line arguments + parser = argparse.ArgumentParser( + description="Takes one or more file paths and reports their detected \ + encodings") + parser.add_argument('input', + help='File whose encoding we would like to determine. \ + (default: stdin)', + type=argparse.FileType('rb'), nargs='*', + default=[sys.stdin if PY2 else sys.stdin.buffer]) + parser.add_argument('--version', action='version', + version='%(prog)s {0}'.format(__version__)) + args = parser.parse_args(argv) + + for f in args.input: + if f.isatty(): + print("You are running chardetect interactively. Press " + + "CTRL-D twice at the start of a blank line to signal the " + + "end of your input. If you want help, run chardetect " + + "--help\n", file=sys.stderr) + print(description_of(f, f.name)) + + +if __name__ == '__main__': + main() diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/codingstatemachine.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/codingstatemachine.py new file mode 100644 index 00000000..68fba44f --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/codingstatemachine.py @@ -0,0 +1,88 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +import logging + +from .enums import MachineState + + +class CodingStateMachine(object): + """ + A state machine to verify a byte sequence for a particular encoding. For + each byte the detector receives, it will feed that byte to every active + state machine available, one byte at a time. The state machine changes its + state based on its previous state and the byte it receives. There are 3 + states in a state machine that are of interest to an auto-detector: + + START state: This is the state to start with, or a legal byte sequence + (i.e. a valid code point) for character has been identified. + + ME state: This indicates that the state machine identified a byte sequence + that is specific to the charset it is designed for and that + there is no other possible encoding which can contain this byte + sequence. This will to lead to an immediate positive answer for + the detector. + + ERROR state: This indicates the state machine identified an illegal byte + sequence for that encoding. This will lead to an immediate + negative answer for this encoding. Detector will exclude this + encoding from consideration from here on. + """ + def __init__(self, sm): + self._model = sm + self._curr_byte_pos = 0 + self._curr_char_len = 0 + self._curr_state = None + self.logger = logging.getLogger(__name__) + self.reset() + + def reset(self): + self._curr_state = MachineState.START + + def next_state(self, c): + # for each byte we get its class + # if it is first byte, we also get byte length + byte_class = self._model['class_table'][c] + if self._curr_state == MachineState.START: + self._curr_byte_pos = 0 + self._curr_char_len = self._model['char_len_table'][byte_class] + # from byte's class and state_table, we get its next state + curr_state = (self._curr_state * self._model['class_factor'] + + byte_class) + self._curr_state = self._model['state_table'][curr_state] + self._curr_byte_pos += 1 + return self._curr_state + + def get_current_charlen(self): + return self._curr_char_len + + def get_coding_state_machine(self): + return self._model['name'] + + @property + def language(self): + return self._model['language'] diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/compat.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/compat.py new file mode 100644 index 00000000..ddd74687 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/compat.py @@ -0,0 +1,34 @@ +######################## BEGIN LICENSE BLOCK ######################## +# Contributor(s): +# Dan Blanchard +# Ian Cordasco +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +import sys + + +if sys.version_info < (3, 0): + PY2 = True + PY3 = False + base_str = (str, unicode) + text_type = unicode +else: + PY2 = False + PY3 = True + base_str = (bytes, str) + text_type = str diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/cp949prober.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/cp949prober.py new file mode 100644 index 00000000..efd793ab --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/cp949prober.py @@ -0,0 +1,49 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .chardistribution import EUCKRDistributionAnalysis +from .codingstatemachine import CodingStateMachine +from .mbcharsetprober import MultiByteCharSetProber +from .mbcssm import CP949_SM_MODEL + + +class CP949Prober(MultiByteCharSetProber): + def __init__(self): + super(CP949Prober, self).__init__() + self.coding_sm = CodingStateMachine(CP949_SM_MODEL) + # NOTE: CP949 is a superset of EUC-KR, so the distribution should be + # not different. + self.distribution_analyzer = EUCKRDistributionAnalysis() + self.reset() + + @property + def charset_name(self): + return "CP949" + + @property + def language(self): + return "Korean" diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/enums.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/enums.py new file mode 100644 index 00000000..04512072 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/enums.py @@ -0,0 +1,76 @@ +""" +All of the Enums that are used throughout the chardet package. + +:author: Dan Blanchard (dan.blanchard@gmail.com) +""" + + +class InputState(object): + """ + This enum represents the different states a universal detector can be in. + """ + PURE_ASCII = 0 + ESC_ASCII = 1 + HIGH_BYTE = 2 + + +class LanguageFilter(object): + """ + This enum represents the different language filters we can apply to a + ``UniversalDetector``. + """ + CHINESE_SIMPLIFIED = 0x01 + CHINESE_TRADITIONAL = 0x02 + JAPANESE = 0x04 + KOREAN = 0x08 + NON_CJK = 0x10 + ALL = 0x1F + CHINESE = CHINESE_SIMPLIFIED | CHINESE_TRADITIONAL + CJK = CHINESE | JAPANESE | KOREAN + + +class ProbingState(object): + """ + This enum represents the different states a prober can be in. + """ + DETECTING = 0 + FOUND_IT = 1 + NOT_ME = 2 + + +class MachineState(object): + """ + This enum represents the different states a state machine can be in. + """ + START = 0 + ERROR = 1 + ITS_ME = 2 + + +class SequenceLikelihood(object): + """ + This enum represents the likelihood of a character following the previous one. + """ + NEGATIVE = 0 + UNLIKELY = 1 + LIKELY = 2 + POSITIVE = 3 + + @classmethod + def get_num_categories(cls): + """:returns: The number of likelihood categories in the enum.""" + return 4 + + +class CharacterCategory(object): + """ + This enum represents the different categories language models for + ``SingleByteCharsetProber`` put characters into. + + Anything less than CONTROL is considered a letter. + """ + UNDEFINED = 255 + LINE_BREAK = 254 + SYMBOL = 253 + DIGIT = 252 + CONTROL = 251 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/escprober.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/escprober.py new file mode 100644 index 00000000..c70493f2 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/escprober.py @@ -0,0 +1,101 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .charsetprober import CharSetProber +from .codingstatemachine import CodingStateMachine +from .enums import LanguageFilter, ProbingState, MachineState +from .escsm import (HZ_SM_MODEL, ISO2022CN_SM_MODEL, ISO2022JP_SM_MODEL, + ISO2022KR_SM_MODEL) + + +class EscCharSetProber(CharSetProber): + """ + This CharSetProber uses a "code scheme" approach for detecting encodings, + whereby easily recognizable escape or shift sequences are relied on to + identify these encodings. + """ + + def __init__(self, lang_filter=None): + super(EscCharSetProber, self).__init__(lang_filter=lang_filter) + self.coding_sm = [] + if self.lang_filter & LanguageFilter.CHINESE_SIMPLIFIED: + self.coding_sm.append(CodingStateMachine(HZ_SM_MODEL)) + self.coding_sm.append(CodingStateMachine(ISO2022CN_SM_MODEL)) + if self.lang_filter & LanguageFilter.JAPANESE: + self.coding_sm.append(CodingStateMachine(ISO2022JP_SM_MODEL)) + if self.lang_filter & LanguageFilter.KOREAN: + self.coding_sm.append(CodingStateMachine(ISO2022KR_SM_MODEL)) + self.active_sm_count = None + self._detected_charset = None + self._detected_language = None + self._state = None + self.reset() + + def reset(self): + super(EscCharSetProber, self).reset() + for coding_sm in self.coding_sm: + if not coding_sm: + continue + coding_sm.active = True + coding_sm.reset() + self.active_sm_count = len(self.coding_sm) + self._detected_charset = None + self._detected_language = None + + @property + def charset_name(self): + return self._detected_charset + + @property + def language(self): + return self._detected_language + + def get_confidence(self): + if self._detected_charset: + return 0.99 + else: + return 0.00 + + def feed(self, byte_str): + for c in byte_str: + for coding_sm in self.coding_sm: + if not coding_sm or not coding_sm.active: + continue + coding_state = coding_sm.next_state(c) + if coding_state == MachineState.ERROR: + coding_sm.active = False + self.active_sm_count -= 1 + if self.active_sm_count <= 0: + self._state = ProbingState.NOT_ME + return self.state + elif coding_state == MachineState.ITS_ME: + self._state = ProbingState.FOUND_IT + self._detected_charset = coding_sm.get_coding_state_machine() + self._detected_language = coding_sm.language + return self.state + + return self.state diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/escsm.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/escsm.py new file mode 100644 index 00000000..0069523a --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/escsm.py @@ -0,0 +1,246 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .enums import MachineState + +HZ_CLS = ( +1,0,0,0,0,0,0,0, # 00 - 07 +0,0,0,0,0,0,0,0, # 08 - 0f +0,0,0,0,0,0,0,0, # 10 - 17 +0,0,0,1,0,0,0,0, # 18 - 1f +0,0,0,0,0,0,0,0, # 20 - 27 +0,0,0,0,0,0,0,0, # 28 - 2f +0,0,0,0,0,0,0,0, # 30 - 37 +0,0,0,0,0,0,0,0, # 38 - 3f +0,0,0,0,0,0,0,0, # 40 - 47 +0,0,0,0,0,0,0,0, # 48 - 4f +0,0,0,0,0,0,0,0, # 50 - 57 +0,0,0,0,0,0,0,0, # 58 - 5f +0,0,0,0,0,0,0,0, # 60 - 67 +0,0,0,0,0,0,0,0, # 68 - 6f +0,0,0,0,0,0,0,0, # 70 - 77 +0,0,0,4,0,5,2,0, # 78 - 7f +1,1,1,1,1,1,1,1, # 80 - 87 +1,1,1,1,1,1,1,1, # 88 - 8f +1,1,1,1,1,1,1,1, # 90 - 97 +1,1,1,1,1,1,1,1, # 98 - 9f +1,1,1,1,1,1,1,1, # a0 - a7 +1,1,1,1,1,1,1,1, # a8 - af +1,1,1,1,1,1,1,1, # b0 - b7 +1,1,1,1,1,1,1,1, # b8 - bf +1,1,1,1,1,1,1,1, # c0 - c7 +1,1,1,1,1,1,1,1, # c8 - cf +1,1,1,1,1,1,1,1, # d0 - d7 +1,1,1,1,1,1,1,1, # d8 - df +1,1,1,1,1,1,1,1, # e0 - e7 +1,1,1,1,1,1,1,1, # e8 - ef +1,1,1,1,1,1,1,1, # f0 - f7 +1,1,1,1,1,1,1,1, # f8 - ff +) + +HZ_ST = ( +MachineState.START,MachineState.ERROR, 3,MachineState.START,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,# 00-07 +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,# 08-0f +MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START, 4,MachineState.ERROR,# 10-17 + 5,MachineState.ERROR, 6,MachineState.ERROR, 5, 5, 4,MachineState.ERROR,# 18-1f + 4,MachineState.ERROR, 4, 4, 4,MachineState.ERROR, 4,MachineState.ERROR,# 20-27 + 4,MachineState.ITS_ME,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,# 28-2f +) + +HZ_CHAR_LEN_TABLE = (0, 0, 0, 0, 0, 0) + +HZ_SM_MODEL = {'class_table': HZ_CLS, + 'class_factor': 6, + 'state_table': HZ_ST, + 'char_len_table': HZ_CHAR_LEN_TABLE, + 'name': "HZ-GB-2312", + 'language': 'Chinese'} + +ISO2022CN_CLS = ( +2,0,0,0,0,0,0,0, # 00 - 07 +0,0,0,0,0,0,0,0, # 08 - 0f +0,0,0,0,0,0,0,0, # 10 - 17 +0,0,0,1,0,0,0,0, # 18 - 1f +0,0,0,0,0,0,0,0, # 20 - 27 +0,3,0,0,0,0,0,0, # 28 - 2f +0,0,0,0,0,0,0,0, # 30 - 37 +0,0,0,0,0,0,0,0, # 38 - 3f +0,0,0,4,0,0,0,0, # 40 - 47 +0,0,0,0,0,0,0,0, # 48 - 4f +0,0,0,0,0,0,0,0, # 50 - 57 +0,0,0,0,0,0,0,0, # 58 - 5f +0,0,0,0,0,0,0,0, # 60 - 67 +0,0,0,0,0,0,0,0, # 68 - 6f +0,0,0,0,0,0,0,0, # 70 - 77 +0,0,0,0,0,0,0,0, # 78 - 7f +2,2,2,2,2,2,2,2, # 80 - 87 +2,2,2,2,2,2,2,2, # 88 - 8f +2,2,2,2,2,2,2,2, # 90 - 97 +2,2,2,2,2,2,2,2, # 98 - 9f +2,2,2,2,2,2,2,2, # a0 - a7 +2,2,2,2,2,2,2,2, # a8 - af +2,2,2,2,2,2,2,2, # b0 - b7 +2,2,2,2,2,2,2,2, # b8 - bf +2,2,2,2,2,2,2,2, # c0 - c7 +2,2,2,2,2,2,2,2, # c8 - cf +2,2,2,2,2,2,2,2, # d0 - d7 +2,2,2,2,2,2,2,2, # d8 - df +2,2,2,2,2,2,2,2, # e0 - e7 +2,2,2,2,2,2,2,2, # e8 - ef +2,2,2,2,2,2,2,2, # f0 - f7 +2,2,2,2,2,2,2,2, # f8 - ff +) + +ISO2022CN_ST = ( +MachineState.START, 3,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,# 00-07 +MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 08-0f +MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,# 10-17 +MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 4,MachineState.ERROR,# 18-1f +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 20-27 + 5, 6,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 28-2f +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 30-37 +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,MachineState.START,# 38-3f +) + +ISO2022CN_CHAR_LEN_TABLE = (0, 0, 0, 0, 0, 0, 0, 0, 0) + +ISO2022CN_SM_MODEL = {'class_table': ISO2022CN_CLS, + 'class_factor': 9, + 'state_table': ISO2022CN_ST, + 'char_len_table': ISO2022CN_CHAR_LEN_TABLE, + 'name': "ISO-2022-CN", + 'language': 'Chinese'} + +ISO2022JP_CLS = ( +2,0,0,0,0,0,0,0, # 00 - 07 +0,0,0,0,0,0,2,2, # 08 - 0f +0,0,0,0,0,0,0,0, # 10 - 17 +0,0,0,1,0,0,0,0, # 18 - 1f +0,0,0,0,7,0,0,0, # 20 - 27 +3,0,0,0,0,0,0,0, # 28 - 2f +0,0,0,0,0,0,0,0, # 30 - 37 +0,0,0,0,0,0,0,0, # 38 - 3f +6,0,4,0,8,0,0,0, # 40 - 47 +0,9,5,0,0,0,0,0, # 48 - 4f +0,0,0,0,0,0,0,0, # 50 - 57 +0,0,0,0,0,0,0,0, # 58 - 5f +0,0,0,0,0,0,0,0, # 60 - 67 +0,0,0,0,0,0,0,0, # 68 - 6f +0,0,0,0,0,0,0,0, # 70 - 77 +0,0,0,0,0,0,0,0, # 78 - 7f +2,2,2,2,2,2,2,2, # 80 - 87 +2,2,2,2,2,2,2,2, # 88 - 8f +2,2,2,2,2,2,2,2, # 90 - 97 +2,2,2,2,2,2,2,2, # 98 - 9f +2,2,2,2,2,2,2,2, # a0 - a7 +2,2,2,2,2,2,2,2, # a8 - af +2,2,2,2,2,2,2,2, # b0 - b7 +2,2,2,2,2,2,2,2, # b8 - bf +2,2,2,2,2,2,2,2, # c0 - c7 +2,2,2,2,2,2,2,2, # c8 - cf +2,2,2,2,2,2,2,2, # d0 - d7 +2,2,2,2,2,2,2,2, # d8 - df +2,2,2,2,2,2,2,2, # e0 - e7 +2,2,2,2,2,2,2,2, # e8 - ef +2,2,2,2,2,2,2,2, # f0 - f7 +2,2,2,2,2,2,2,2, # f8 - ff +) + +ISO2022JP_ST = ( +MachineState.START, 3,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,# 00-07 +MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 08-0f +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,# 10-17 +MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,# 18-1f +MachineState.ERROR, 5,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 4,MachineState.ERROR,MachineState.ERROR,# 20-27 +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 6,MachineState.ITS_ME,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,# 28-2f +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,# 30-37 +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 38-3f +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,MachineState.START,MachineState.START,# 40-47 +) + +ISO2022JP_CHAR_LEN_TABLE = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0) + +ISO2022JP_SM_MODEL = {'class_table': ISO2022JP_CLS, + 'class_factor': 10, + 'state_table': ISO2022JP_ST, + 'char_len_table': ISO2022JP_CHAR_LEN_TABLE, + 'name': "ISO-2022-JP", + 'language': 'Japanese'} + +ISO2022KR_CLS = ( +2,0,0,0,0,0,0,0, # 00 - 07 +0,0,0,0,0,0,0,0, # 08 - 0f +0,0,0,0,0,0,0,0, # 10 - 17 +0,0,0,1,0,0,0,0, # 18 - 1f +0,0,0,0,3,0,0,0, # 20 - 27 +0,4,0,0,0,0,0,0, # 28 - 2f +0,0,0,0,0,0,0,0, # 30 - 37 +0,0,0,0,0,0,0,0, # 38 - 3f +0,0,0,5,0,0,0,0, # 40 - 47 +0,0,0,0,0,0,0,0, # 48 - 4f +0,0,0,0,0,0,0,0, # 50 - 57 +0,0,0,0,0,0,0,0, # 58 - 5f +0,0,0,0,0,0,0,0, # 60 - 67 +0,0,0,0,0,0,0,0, # 68 - 6f +0,0,0,0,0,0,0,0, # 70 - 77 +0,0,0,0,0,0,0,0, # 78 - 7f +2,2,2,2,2,2,2,2, # 80 - 87 +2,2,2,2,2,2,2,2, # 88 - 8f +2,2,2,2,2,2,2,2, # 90 - 97 +2,2,2,2,2,2,2,2, # 98 - 9f +2,2,2,2,2,2,2,2, # a0 - a7 +2,2,2,2,2,2,2,2, # a8 - af +2,2,2,2,2,2,2,2, # b0 - b7 +2,2,2,2,2,2,2,2, # b8 - bf +2,2,2,2,2,2,2,2, # c0 - c7 +2,2,2,2,2,2,2,2, # c8 - cf +2,2,2,2,2,2,2,2, # d0 - d7 +2,2,2,2,2,2,2,2, # d8 - df +2,2,2,2,2,2,2,2, # e0 - e7 +2,2,2,2,2,2,2,2, # e8 - ef +2,2,2,2,2,2,2,2, # f0 - f7 +2,2,2,2,2,2,2,2, # f8 - ff +) + +ISO2022KR_ST = ( +MachineState.START, 3,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,# 00-07 +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,# 08-0f +MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 4,MachineState.ERROR,MachineState.ERROR,# 10-17 +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 5,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 18-1f +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.START,MachineState.START,MachineState.START,MachineState.START,# 20-27 +) + +ISO2022KR_CHAR_LEN_TABLE = (0, 0, 0, 0, 0, 0) + +ISO2022KR_SM_MODEL = {'class_table': ISO2022KR_CLS, + 'class_factor': 6, + 'state_table': ISO2022KR_ST, + 'char_len_table': ISO2022KR_CHAR_LEN_TABLE, + 'name': "ISO-2022-KR", + 'language': 'Korean'} + + diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/eucjpprober.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/eucjpprober.py new file mode 100644 index 00000000..20ce8f7d --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/eucjpprober.py @@ -0,0 +1,92 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .enums import ProbingState, MachineState +from .mbcharsetprober import MultiByteCharSetProber +from .codingstatemachine import CodingStateMachine +from .chardistribution import EUCJPDistributionAnalysis +from .jpcntx import EUCJPContextAnalysis +from .mbcssm import EUCJP_SM_MODEL + + +class EUCJPProber(MultiByteCharSetProber): + def __init__(self): + super(EUCJPProber, self).__init__() + self.coding_sm = CodingStateMachine(EUCJP_SM_MODEL) + self.distribution_analyzer = EUCJPDistributionAnalysis() + self.context_analyzer = EUCJPContextAnalysis() + self.reset() + + def reset(self): + super(EUCJPProber, self).reset() + self.context_analyzer.reset() + + @property + def charset_name(self): + return "EUC-JP" + + @property + def language(self): + return "Japanese" + + def feed(self, byte_str): + for i in range(len(byte_str)): + # PY3K: byte_str is a byte array, so byte_str[i] is an int, not a byte + coding_state = self.coding_sm.next_state(byte_str[i]) + if coding_state == MachineState.ERROR: + self.logger.debug('%s %s prober hit error at byte %s', + self.charset_name, self.language, i) + self._state = ProbingState.NOT_ME + break + elif coding_state == MachineState.ITS_ME: + self._state = ProbingState.FOUND_IT + break + elif coding_state == MachineState.START: + char_len = self.coding_sm.get_current_charlen() + if i == 0: + self._last_char[1] = byte_str[0] + self.context_analyzer.feed(self._last_char, char_len) + self.distribution_analyzer.feed(self._last_char, char_len) + else: + self.context_analyzer.feed(byte_str[i - 1:i + 1], + char_len) + self.distribution_analyzer.feed(byte_str[i - 1:i + 1], + char_len) + + self._last_char[0] = byte_str[-1] + + if self.state == ProbingState.DETECTING: + if (self.context_analyzer.got_enough_data() and + (self.get_confidence() > self.SHORTCUT_THRESHOLD)): + self._state = ProbingState.FOUND_IT + + return self.state + + def get_confidence(self): + context_conf = self.context_analyzer.get_confidence() + distrib_conf = self.distribution_analyzer.get_confidence() + return max(context_conf, distrib_conf) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/euckrfreq.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/euckrfreq.py new file mode 100644 index 00000000..b68078cb --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/euckrfreq.py @@ -0,0 +1,195 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +# Sampling from about 20M text materials include literature and computer technology + +# 128 --> 0.79 +# 256 --> 0.92 +# 512 --> 0.986 +# 1024 --> 0.99944 +# 2048 --> 0.99999 +# +# Idea Distribution Ratio = 0.98653 / (1-0.98653) = 73.24 +# Random Distribution Ration = 512 / (2350-512) = 0.279. +# +# Typical Distribution Ratio + +EUCKR_TYPICAL_DISTRIBUTION_RATIO = 6.0 + +EUCKR_TABLE_SIZE = 2352 + +# Char to FreqOrder table , +EUCKR_CHAR_TO_FREQ_ORDER = ( + 13, 130, 120,1396, 481,1719,1720, 328, 609, 212,1721, 707, 400, 299,1722, 87, +1397,1723, 104, 536,1117,1203,1724,1267, 685,1268, 508,1725,1726,1727,1728,1398, +1399,1729,1730,1731, 141, 621, 326,1057, 368,1732, 267, 488, 20,1733,1269,1734, + 945,1400,1735, 47, 904,1270,1736,1737, 773, 248,1738, 409, 313, 786, 429,1739, + 116, 987, 813,1401, 683, 75,1204, 145,1740,1741,1742,1743, 16, 847, 667, 622, + 708,1744,1745,1746, 966, 787, 304, 129,1747, 60, 820, 123, 676,1748,1749,1750, +1751, 617,1752, 626,1753,1754,1755,1756, 653,1757,1758,1759,1760,1761,1762, 856, + 344,1763,1764,1765,1766, 89, 401, 418, 806, 905, 848,1767,1768,1769, 946,1205, + 709,1770,1118,1771, 241,1772,1773,1774,1271,1775, 569,1776, 999,1777,1778,1779, +1780, 337, 751,1058, 28, 628, 254,1781, 177, 906, 270, 349, 891,1079,1782, 19, +1783, 379,1784, 315,1785, 629, 754,1402, 559,1786, 636, 203,1206,1787, 710, 567, +1788, 935, 814,1789,1790,1207, 766, 528,1791,1792,1208,1793,1794,1795,1796,1797, +1403,1798,1799, 533,1059,1404,1405,1156,1406, 936, 884,1080,1800, 351,1801,1802, +1803,1804,1805, 801,1806,1807,1808,1119,1809,1157, 714, 474,1407,1810, 298, 899, + 885,1811,1120, 802,1158,1812, 892,1813,1814,1408, 659,1815,1816,1121,1817,1818, +1819,1820,1821,1822, 319,1823, 594, 545,1824, 815, 937,1209,1825,1826, 573,1409, +1022,1827,1210,1828,1829,1830,1831,1832,1833, 556, 722, 807,1122,1060,1834, 697, +1835, 900, 557, 715,1836,1410, 540,1411, 752,1159, 294, 597,1211, 976, 803, 770, +1412,1837,1838, 39, 794,1413, 358,1839, 371, 925,1840, 453, 661, 788, 531, 723, + 544,1023,1081, 869, 91,1841, 392, 430, 790, 602,1414, 677,1082, 457,1415,1416, +1842,1843, 475, 327,1024,1417, 795, 121,1844, 733, 403,1418,1845,1846,1847, 300, + 119, 711,1212, 627,1848,1272, 207,1849,1850, 796,1213, 382,1851, 519,1852,1083, + 893,1853,1854,1855, 367, 809, 487, 671,1856, 663,1857,1858, 956, 471, 306, 857, +1859,1860,1160,1084,1861,1862,1863,1864,1865,1061,1866,1867,1868,1869,1870,1871, + 282, 96, 574,1872, 502,1085,1873,1214,1874, 907,1875,1876, 827, 977,1419,1420, +1421, 268,1877,1422,1878,1879,1880, 308,1881, 2, 537,1882,1883,1215,1884,1885, + 127, 791,1886,1273,1423,1887, 34, 336, 404, 643,1888, 571, 654, 894, 840,1889, + 0, 886,1274, 122, 575, 260, 908, 938,1890,1275, 410, 316,1891,1892, 100,1893, +1894,1123, 48,1161,1124,1025,1895, 633, 901,1276,1896,1897, 115, 816,1898, 317, +1899, 694,1900, 909, 734,1424, 572, 866,1425, 691, 85, 524,1010, 543, 394, 841, +1901,1902,1903,1026,1904,1905,1906,1907,1908,1909, 30, 451, 651, 988, 310,1910, +1911,1426, 810,1216, 93,1912,1913,1277,1217,1914, 858, 759, 45, 58, 181, 610, + 269,1915,1916, 131,1062, 551, 443,1000, 821,1427, 957, 895,1086,1917,1918, 375, +1919, 359,1920, 687,1921, 822,1922, 293,1923,1924, 40, 662, 118, 692, 29, 939, + 887, 640, 482, 174,1925, 69,1162, 728,1428, 910,1926,1278,1218,1279, 386, 870, + 217, 854,1163, 823,1927,1928,1929,1930, 834,1931, 78,1932, 859,1933,1063,1934, +1935,1936,1937, 438,1164, 208, 595,1938,1939,1940,1941,1219,1125,1942, 280, 888, +1429,1430,1220,1431,1943,1944,1945,1946,1947,1280, 150, 510,1432,1948,1949,1950, +1951,1952,1953,1954,1011,1087,1955,1433,1043,1956, 881,1957, 614, 958,1064,1065, +1221,1958, 638,1001, 860, 967, 896,1434, 989, 492, 553,1281,1165,1959,1282,1002, +1283,1222,1960,1961,1962,1963, 36, 383, 228, 753, 247, 454,1964, 876, 678,1965, +1966,1284, 126, 464, 490, 835, 136, 672, 529, 940,1088,1435, 473,1967,1968, 467, + 50, 390, 227, 587, 279, 378, 598, 792, 968, 240, 151, 160, 849, 882,1126,1285, + 639,1044, 133, 140, 288, 360, 811, 563,1027, 561, 142, 523,1969,1970,1971, 7, + 103, 296, 439, 407, 506, 634, 990,1972,1973,1974,1975, 645,1976,1977,1978,1979, +1980,1981, 236,1982,1436,1983,1984,1089, 192, 828, 618, 518,1166, 333,1127,1985, + 818,1223,1986,1987,1988,1989,1990,1991,1992,1993, 342,1128,1286, 746, 842,1994, +1995, 560, 223,1287, 98, 8, 189, 650, 978,1288,1996,1437,1997, 17, 345, 250, + 423, 277, 234, 512, 226, 97, 289, 42, 167,1998, 201,1999,2000, 843, 836, 824, + 532, 338, 783,1090, 182, 576, 436,1438,1439, 527, 500,2001, 947, 889,2002,2003, +2004,2005, 262, 600, 314, 447,2006, 547,2007, 693, 738,1129,2008, 71,1440, 745, + 619, 688,2009, 829,2010,2011, 147,2012, 33, 948,2013,2014, 74, 224,2015, 61, + 191, 918, 399, 637,2016,1028,1130, 257, 902,2017,2018,2019,2020,2021,2022,2023, +2024,2025,2026, 837,2027,2028,2029,2030, 179, 874, 591, 52, 724, 246,2031,2032, +2033,2034,1167, 969,2035,1289, 630, 605, 911,1091,1168,2036,2037,2038,1441, 912, +2039, 623,2040,2041, 253,1169,1290,2042,1442, 146, 620, 611, 577, 433,2043,1224, + 719,1170, 959, 440, 437, 534, 84, 388, 480,1131, 159, 220, 198, 679,2044,1012, + 819,1066,1443, 113,1225, 194, 318,1003,1029,2045,2046,2047,2048,1067,2049,2050, +2051,2052,2053, 59, 913, 112,2054, 632,2055, 455, 144, 739,1291,2056, 273, 681, + 499,2057, 448,2058,2059, 760,2060,2061, 970, 384, 169, 245,1132,2062,2063, 414, +1444,2064,2065, 41, 235,2066, 157, 252, 877, 568, 919, 789, 580,2067, 725,2068, +2069,1292,2070,2071,1445,2072,1446,2073,2074, 55, 588, 66,1447, 271,1092,2075, +1226,2076, 960,1013, 372,2077,2078,2079,2080,2081,1293,2082,2083,2084,2085, 850, +2086,2087,2088,2089,2090, 186,2091,1068, 180,2092,2093,2094, 109,1227, 522, 606, +2095, 867,1448,1093, 991,1171, 926, 353,1133,2096, 581,2097,2098,2099,1294,1449, +1450,2100, 596,1172,1014,1228,2101,1451,1295,1173,1229,2102,2103,1296,1134,1452, + 949,1135,2104,2105,1094,1453,1454,1455,2106,1095,2107,2108,2109,2110,2111,2112, +2113,2114,2115,2116,2117, 804,2118,2119,1230,1231, 805,1456, 405,1136,2120,2121, +2122,2123,2124, 720, 701,1297, 992,1457, 927,1004,2125,2126,2127,2128,2129,2130, + 22, 417,2131, 303,2132, 385,2133, 971, 520, 513,2134,1174, 73,1096, 231, 274, + 962,1458, 673,2135,1459,2136, 152,1137,2137,2138,2139,2140,1005,1138,1460,1139, +2141,2142,2143,2144, 11, 374, 844,2145, 154,1232, 46,1461,2146, 838, 830, 721, +1233, 106,2147, 90, 428, 462, 578, 566,1175, 352,2148,2149, 538,1234, 124,1298, +2150,1462, 761, 565,2151, 686,2152, 649,2153, 72, 173,2154, 460, 415,2155,1463, +2156,1235, 305,2157,2158,2159,2160,2161,2162, 579,2163,2164,2165,2166,2167, 747, +2168,2169,2170,2171,1464, 669,2172,2173,2174,2175,2176,1465,2177, 23, 530, 285, +2178, 335, 729,2179, 397,2180,2181,2182,1030,2183,2184, 698,2185,2186, 325,2187, +2188, 369,2189, 799,1097,1015, 348,2190,1069, 680,2191, 851,1466,2192,2193, 10, +2194, 613, 424,2195, 979, 108, 449, 589, 27, 172, 81,1031, 80, 774, 281, 350, +1032, 525, 301, 582,1176,2196, 674,1045,2197,2198,1467, 730, 762,2199,2200,2201, +2202,1468,2203, 993,2204,2205, 266,1070, 963,1140,2206,2207,2208, 664,1098, 972, +2209,2210,2211,1177,1469,1470, 871,2212,2213,2214,2215,2216,1471,2217,2218,2219, +2220,2221,2222,2223,2224,2225,2226,2227,1472,1236,2228,2229,2230,2231,2232,2233, +2234,2235,1299,2236,2237, 200,2238, 477, 373,2239,2240, 731, 825, 777,2241,2242, +2243, 521, 486, 548,2244,2245,2246,1473,1300, 53, 549, 137, 875, 76, 158,2247, +1301,1474, 469, 396,1016, 278, 712,2248, 321, 442, 503, 767, 744, 941,1237,1178, +1475,2249, 82, 178,1141,1179, 973,2250,1302,2251, 297,2252,2253, 570,2254,2255, +2256, 18, 450, 206,2257, 290, 292,1142,2258, 511, 162, 99, 346, 164, 735,2259, +1476,1477, 4, 554, 343, 798,1099,2260,1100,2261, 43, 171,1303, 139, 215,2262, +2263, 717, 775,2264,1033, 322, 216,2265, 831,2266, 149,2267,1304,2268,2269, 702, +1238, 135, 845, 347, 309,2270, 484,2271, 878, 655, 238,1006,1478,2272, 67,2273, + 295,2274,2275, 461,2276, 478, 942, 412,2277,1034,2278,2279,2280, 265,2281, 541, +2282,2283,2284,2285,2286, 70, 852,1071,2287,2288,2289,2290, 21, 56, 509, 117, + 432,2291,2292, 331, 980, 552,1101, 148, 284, 105, 393,1180,1239, 755,2293, 187, +2294,1046,1479,2295, 340,2296, 63,1047, 230,2297,2298,1305, 763,1306, 101, 800, + 808, 494,2299,2300,2301, 903,2302, 37,1072, 14, 5,2303, 79, 675,2304, 312, +2305,2306,2307,2308,2309,1480, 6,1307,2310,2311,2312, 1, 470, 35, 24, 229, +2313, 695, 210, 86, 778, 15, 784, 592, 779, 32, 77, 855, 964,2314, 259,2315, + 501, 380,2316,2317, 83, 981, 153, 689,1308,1481,1482,1483,2318,2319, 716,1484, +2320,2321,2322,2323,2324,2325,1485,2326,2327, 128, 57, 68, 261,1048, 211, 170, +1240, 31,2328, 51, 435, 742,2329,2330,2331, 635,2332, 264, 456,2333,2334,2335, + 425,2336,1486, 143, 507, 263, 943,2337, 363, 920,1487, 256,1488,1102, 243, 601, +1489,2338,2339,2340,2341,2342,2343,2344, 861,2345,2346,2347,2348,2349,2350, 395, +2351,1490,1491, 62, 535, 166, 225,2352,2353, 668, 419,1241, 138, 604, 928,2354, +1181,2355,1492,1493,2356,2357,2358,1143,2359, 696,2360, 387, 307,1309, 682, 476, +2361,2362, 332, 12, 222, 156,2363, 232,2364, 641, 276, 656, 517,1494,1495,1035, + 416, 736,1496,2365,1017, 586,2366,2367,2368,1497,2369, 242,2370,2371,2372,1498, +2373, 965, 713,2374,2375,2376,2377, 740, 982,1499, 944,1500,1007,2378,2379,1310, +1501,2380,2381,2382, 785, 329,2383,2384,1502,2385,2386,2387, 932,2388,1503,2389, +2390,2391,2392,1242,2393,2394,2395,2396,2397, 994, 950,2398,2399,2400,2401,1504, +1311,2402,2403,2404,2405,1049, 749,2406,2407, 853, 718,1144,1312,2408,1182,1505, +2409,2410, 255, 516, 479, 564, 550, 214,1506,1507,1313, 413, 239, 444, 339,1145, +1036,1508,1509,1314,1037,1510,1315,2411,1511,2412,2413,2414, 176, 703, 497, 624, + 593, 921, 302,2415, 341, 165,1103,1512,2416,1513,2417,2418,2419, 376,2420, 700, +2421,2422,2423, 258, 768,1316,2424,1183,2425, 995, 608,2426,2427,2428,2429, 221, +2430,2431,2432,2433,2434,2435,2436,2437, 195, 323, 726, 188, 897, 983,1317, 377, + 644,1050, 879,2438, 452,2439,2440,2441,2442,2443,2444, 914,2445,2446,2447,2448, + 915, 489,2449,1514,1184,2450,2451, 515, 64, 427, 495,2452, 583,2453, 483, 485, +1038, 562, 213,1515, 748, 666,2454,2455,2456,2457, 334,2458, 780, 996,1008, 705, +1243,2459,2460,2461,2462,2463, 114,2464, 493,1146, 366, 163,1516, 961,1104,2465, + 291,2466,1318,1105,2467,1517, 365,2468, 355, 951,1244,2469,1319,2470, 631,2471, +2472, 218,1320, 364, 320, 756,1518,1519,1321,1520,1322,2473,2474,2475,2476, 997, +2477,2478,2479,2480, 665,1185,2481, 916,1521,2482,2483,2484, 584, 684,2485,2486, + 797,2487,1051,1186,2488,2489,2490,1522,2491,2492, 370,2493,1039,1187, 65,2494, + 434, 205, 463,1188,2495, 125, 812, 391, 402, 826, 699, 286, 398, 155, 781, 771, + 585,2496, 590, 505,1073,2497, 599, 244, 219, 917,1018, 952, 646,1523,2498,1323, +2499,2500, 49, 984, 354, 741,2501, 625,2502,1324,2503,1019, 190, 357, 757, 491, + 95, 782, 868,2504,2505,2506,2507,2508,2509, 134,1524,1074, 422,1525, 898,2510, + 161,2511,2512,2513,2514, 769,2515,1526,2516,2517, 411,1325,2518, 472,1527,2519, +2520,2521,2522,2523,2524, 985,2525,2526,2527,2528,2529,2530, 764,2531,1245,2532, +2533, 25, 204, 311,2534, 496,2535,1052,2536,2537,2538,2539,2540,2541,2542, 199, + 704, 504, 468, 758, 657,1528, 196, 44, 839,1246, 272, 750,2543, 765, 862,2544, +2545,1326,2546, 132, 615, 933,2547, 732,2548,2549,2550,1189,1529,2551, 283,1247, +1053, 607, 929,2552,2553,2554, 930, 183, 872, 616,1040,1147,2555,1148,1020, 441, + 249,1075,2556,2557,2558, 466, 743,2559,2560,2561, 92, 514, 426, 420, 526,2562, +2563,2564,2565,2566,2567,2568, 185,2569,2570,2571,2572, 776,1530, 658,2573, 362, +2574, 361, 922,1076, 793,2575,2576,2577,2578,2579,2580,1531, 251,2581,2582,2583, +2584,1532, 54, 612, 237,1327,2585,2586, 275, 408, 647, 111,2587,1533,1106, 465, + 3, 458, 9, 38,2588, 107, 110, 890, 209, 26, 737, 498,2589,1534,2590, 431, + 202, 88,1535, 356, 287,1107, 660,1149,2591, 381,1536, 986,1150, 445,1248,1151, + 974,2592,2593, 846,2594, 446, 953, 184,1249,1250, 727,2595, 923, 193, 883,2596, +2597,2598, 102, 324, 539, 817,2599, 421,1041,2600, 832,2601, 94, 175, 197, 406, +2602, 459,2603,2604,2605,2606,2607, 330, 555,2608,2609,2610, 706,1108, 389,2611, +2612,2613,2614, 233,2615, 833, 558, 931, 954,1251,2616,2617,1537, 546,2618,2619, +1009,2620,2621,2622,1538, 690,1328,2623, 955,2624,1539,2625,2626, 772,2627,2628, +2629,2630,2631, 924, 648, 863, 603,2632,2633, 934,1540, 864, 865,2634, 642,1042, + 670,1190,2635,2636,2637,2638, 168,2639, 652, 873, 542,1054,1541,2640,2641,2642, # 512, 256 +) + diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/euckrprober.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/euckrprober.py new file mode 100644 index 00000000..345a060d --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/euckrprober.py @@ -0,0 +1,47 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .mbcharsetprober import MultiByteCharSetProber +from .codingstatemachine import CodingStateMachine +from .chardistribution import EUCKRDistributionAnalysis +from .mbcssm import EUCKR_SM_MODEL + + +class EUCKRProber(MultiByteCharSetProber): + def __init__(self): + super(EUCKRProber, self).__init__() + self.coding_sm = CodingStateMachine(EUCKR_SM_MODEL) + self.distribution_analyzer = EUCKRDistributionAnalysis() + self.reset() + + @property + def charset_name(self): + return "EUC-KR" + + @property + def language(self): + return "Korean" diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/euctwfreq.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/euctwfreq.py new file mode 100644 index 00000000..ed7a995a --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/euctwfreq.py @@ -0,0 +1,387 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +# EUCTW frequency table +# Converted from big5 work +# by Taiwan's Mandarin Promotion Council +# <http:#www.edu.tw:81/mandr/> + +# 128 --> 0.42261 +# 256 --> 0.57851 +# 512 --> 0.74851 +# 1024 --> 0.89384 +# 2048 --> 0.97583 +# +# Idea Distribution Ratio = 0.74851/(1-0.74851) =2.98 +# Random Distribution Ration = 512/(5401-512)=0.105 +# +# Typical Distribution Ratio about 25% of Ideal one, still much higher than RDR + +EUCTW_TYPICAL_DISTRIBUTION_RATIO = 0.75 + +# Char to FreqOrder table , +EUCTW_TABLE_SIZE = 5376 + +EUCTW_CHAR_TO_FREQ_ORDER = ( + 1,1800,1506, 255,1431, 198, 9, 82, 6,7310, 177, 202,3615,1256,2808, 110, # 2742 +3735, 33,3241, 261, 76, 44,2113, 16,2931,2184,1176, 659,3868, 26,3404,2643, # 2758 +1198,3869,3313,4060, 410,2211, 302, 590, 361,1963, 8, 204, 58,4296,7311,1931, # 2774 + 63,7312,7313, 317,1614, 75, 222, 159,4061,2412,1480,7314,3500,3068, 224,2809, # 2790 +3616, 3, 10,3870,1471, 29,2774,1135,2852,1939, 873, 130,3242,1123, 312,7315, # 2806 +4297,2051, 507, 252, 682,7316, 142,1914, 124, 206,2932, 34,3501,3173, 64, 604, # 2822 +7317,2494,1976,1977, 155,1990, 645, 641,1606,7318,3405, 337, 72, 406,7319, 80, # 2838 + 630, 238,3174,1509, 263, 939,1092,2644, 756,1440,1094,3406, 449, 69,2969, 591, # 2854 + 179,2095, 471, 115,2034,1843, 60, 50,2970, 134, 806,1868, 734,2035,3407, 180, # 2870 + 995,1607, 156, 537,2893, 688,7320, 319,1305, 779,2144, 514,2374, 298,4298, 359, # 2886 +2495, 90,2707,1338, 663, 11, 906,1099,2545, 20,2436, 182, 532,1716,7321, 732, # 2902 +1376,4062,1311,1420,3175, 25,2312,1056, 113, 399, 382,1949, 242,3408,2467, 529, # 2918 +3243, 475,1447,3617,7322, 117, 21, 656, 810,1297,2295,2329,3502,7323, 126,4063, # 2934 + 706, 456, 150, 613,4299, 71,1118,2036,4064, 145,3069, 85, 835, 486,2114,1246, # 2950 +1426, 428, 727,1285,1015, 800, 106, 623, 303,1281,7324,2127,2354, 347,3736, 221, # 2966 +3503,3110,7325,1955,1153,4065, 83, 296,1199,3070, 192, 624, 93,7326, 822,1897, # 2982 +2810,3111, 795,2064, 991,1554,1542,1592, 27, 43,2853, 859, 139,1456, 860,4300, # 2998 + 437, 712,3871, 164,2392,3112, 695, 211,3017,2096, 195,3872,1608,3504,3505,3618, # 3014 +3873, 234, 811,2971,2097,3874,2229,1441,3506,1615,2375, 668,2076,1638, 305, 228, # 3030 +1664,4301, 467, 415,7327, 262,2098,1593, 239, 108, 300, 200,1033, 512,1247,2077, # 3046 +7328,7329,2173,3176,3619,2673, 593, 845,1062,3244, 88,1723,2037,3875,1950, 212, # 3062 + 266, 152, 149, 468,1898,4066,4302, 77, 187,7330,3018, 37, 5,2972,7331,3876, # 3078 +7332,7333, 39,2517,4303,2894,3177,2078, 55, 148, 74,4304, 545, 483,1474,1029, # 3094 +1665, 217,1869,1531,3113,1104,2645,4067, 24, 172,3507, 900,3877,3508,3509,4305, # 3110 + 32,1408,2811,1312, 329, 487,2355,2247,2708, 784,2674, 4,3019,3314,1427,1788, # 3126 + 188, 109, 499,7334,3620,1717,1789, 888,1217,3020,4306,7335,3510,7336,3315,1520, # 3142 +3621,3878, 196,1034, 775,7337,7338, 929,1815, 249, 439, 38,7339,1063,7340, 794, # 3158 +3879,1435,2296, 46, 178,3245,2065,7341,2376,7342, 214,1709,4307, 804, 35, 707, # 3174 + 324,3622,1601,2546, 140, 459,4068,7343,7344,1365, 839, 272, 978,2257,2572,3409, # 3190 +2128,1363,3623,1423, 697, 100,3071, 48, 70,1231, 495,3114,2193,7345,1294,7346, # 3206 +2079, 462, 586,1042,3246, 853, 256, 988, 185,2377,3410,1698, 434,1084,7347,3411, # 3222 + 314,2615,2775,4308,2330,2331, 569,2280, 637,1816,2518, 757,1162,1878,1616,3412, # 3238 + 287,1577,2115, 768,4309,1671,2854,3511,2519,1321,3737, 909,2413,7348,4069, 933, # 3254 +3738,7349,2052,2356,1222,4310, 765,2414,1322, 786,4311,7350,1919,1462,1677,2895, # 3270 +1699,7351,4312,1424,2437,3115,3624,2590,3316,1774,1940,3413,3880,4070, 309,1369, # 3286 +1130,2812, 364,2230,1653,1299,3881,3512,3882,3883,2646, 525,1085,3021, 902,2000, # 3302 +1475, 964,4313, 421,1844,1415,1057,2281, 940,1364,3116, 376,4314,4315,1381, 7, # 3318 +2520, 983,2378, 336,1710,2675,1845, 321,3414, 559,1131,3022,2742,1808,1132,1313, # 3334 + 265,1481,1857,7352, 352,1203,2813,3247, 167,1089, 420,2814, 776, 792,1724,3513, # 3350 +4071,2438,3248,7353,4072,7354, 446, 229, 333,2743, 901,3739,1200,1557,4316,2647, # 3366 +1920, 395,2744,2676,3740,4073,1835, 125, 916,3178,2616,4317,7355,7356,3741,7357, # 3382 +7358,7359,4318,3117,3625,1133,2547,1757,3415,1510,2313,1409,3514,7360,2145, 438, # 3398 +2591,2896,2379,3317,1068, 958,3023, 461, 311,2855,2677,4074,1915,3179,4075,1978, # 3414 + 383, 750,2745,2617,4076, 274, 539, 385,1278,1442,7361,1154,1964, 384, 561, 210, # 3430 + 98,1295,2548,3515,7362,1711,2415,1482,3416,3884,2897,1257, 129,7363,3742, 642, # 3446 + 523,2776,2777,2648,7364, 141,2231,1333, 68, 176, 441, 876, 907,4077, 603,2592, # 3462 + 710, 171,3417, 404, 549, 18,3118,2393,1410,3626,1666,7365,3516,4319,2898,4320, # 3478 +7366,2973, 368,7367, 146, 366, 99, 871,3627,1543, 748, 807,1586,1185, 22,2258, # 3494 + 379,3743,3180,7368,3181, 505,1941,2618,1991,1382,2314,7369, 380,2357, 218, 702, # 3510 +1817,1248,3418,3024,3517,3318,3249,7370,2974,3628, 930,3250,3744,7371, 59,7372, # 3526 + 585, 601,4078, 497,3419,1112,1314,4321,1801,7373,1223,1472,2174,7374, 749,1836, # 3542 + 690,1899,3745,1772,3885,1476, 429,1043,1790,2232,2116, 917,4079, 447,1086,1629, # 3558 +7375, 556,7376,7377,2020,1654, 844,1090, 105, 550, 966,1758,2815,1008,1782, 686, # 3574 +1095,7378,2282, 793,1602,7379,3518,2593,4322,4080,2933,2297,4323,3746, 980,2496, # 3590 + 544, 353, 527,4324, 908,2678,2899,7380, 381,2619,1942,1348,7381,1341,1252, 560, # 3606 +3072,7382,3420,2856,7383,2053, 973, 886,2080, 143,4325,7384,7385, 157,3886, 496, # 3622 +4081, 57, 840, 540,2038,4326,4327,3421,2117,1445, 970,2259,1748,1965,2081,4082, # 3638 +3119,1234,1775,3251,2816,3629, 773,1206,2129,1066,2039,1326,3887,1738,1725,4083, # 3654 + 279,3120, 51,1544,2594, 423,1578,2130,2066, 173,4328,1879,7386,7387,1583, 264, # 3670 + 610,3630,4329,2439, 280, 154,7388,7389,7390,1739, 338,1282,3073, 693,2857,1411, # 3686 +1074,3747,2440,7391,4330,7392,7393,1240, 952,2394,7394,2900,1538,2679, 685,1483, # 3702 +4084,2468,1436, 953,4085,2054,4331, 671,2395, 79,4086,2441,3252, 608, 567,2680, # 3718 +3422,4087,4088,1691, 393,1261,1791,2396,7395,4332,7396,7397,7398,7399,1383,1672, # 3734 +3748,3182,1464, 522,1119, 661,1150, 216, 675,4333,3888,1432,3519, 609,4334,2681, # 3750 +2397,7400,7401,7402,4089,3025, 0,7403,2469, 315, 231,2442, 301,3319,4335,2380, # 3766 +7404, 233,4090,3631,1818,4336,4337,7405, 96,1776,1315,2082,7406, 257,7407,1809, # 3782 +3632,2709,1139,1819,4091,2021,1124,2163,2778,1777,2649,7408,3074, 363,1655,3183, # 3798 +7409,2975,7410,7411,7412,3889,1567,3890, 718, 103,3184, 849,1443, 341,3320,2934, # 3814 +1484,7413,1712, 127, 67, 339,4092,2398, 679,1412, 821,7414,7415, 834, 738, 351, # 3830 +2976,2146, 846, 235,1497,1880, 418,1992,3749,2710, 186,1100,2147,2746,3520,1545, # 3846 +1355,2935,2858,1377, 583,3891,4093,2573,2977,7416,1298,3633,1078,2549,3634,2358, # 3862 + 78,3750,3751, 267,1289,2099,2001,1594,4094, 348, 369,1274,2194,2175,1837,4338, # 3878 +1820,2817,3635,2747,2283,2002,4339,2936,2748, 144,3321, 882,4340,3892,2749,3423, # 3894 +4341,2901,7417,4095,1726, 320,7418,3893,3026, 788,2978,7419,2818,1773,1327,2859, # 3910 +3894,2819,7420,1306,4342,2003,1700,3752,3521,2359,2650, 787,2022, 506, 824,3636, # 3926 + 534, 323,4343,1044,3322,2023,1900, 946,3424,7421,1778,1500,1678,7422,1881,4344, # 3942 + 165, 243,4345,3637,2521, 123, 683,4096, 764,4346, 36,3895,1792, 589,2902, 816, # 3958 + 626,1667,3027,2233,1639,1555,1622,3753,3896,7423,3897,2860,1370,1228,1932, 891, # 3974 +2083,2903, 304,4097,7424, 292,2979,2711,3522, 691,2100,4098,1115,4347, 118, 662, # 3990 +7425, 611,1156, 854,2381,1316,2861, 2, 386, 515,2904,7426,7427,3253, 868,2234, # 4006 +1486, 855,2651, 785,2212,3028,7428,1040,3185,3523,7429,3121, 448,7430,1525,7431, # 4022 +2164,4348,7432,3754,7433,4099,2820,3524,3122, 503, 818,3898,3123,1568, 814, 676, # 4038 +1444, 306,1749,7434,3755,1416,1030, 197,1428, 805,2821,1501,4349,7435,7436,7437, # 4054 +1993,7438,4350,7439,7440,2195, 13,2779,3638,2980,3124,1229,1916,7441,3756,2131, # 4070 +7442,4100,4351,2399,3525,7443,2213,1511,1727,1120,7444,7445, 646,3757,2443, 307, # 4086 +7446,7447,1595,3186,7448,7449,7450,3639,1113,1356,3899,1465,2522,2523,7451, 519, # 4102 +7452, 128,2132, 92,2284,1979,7453,3900,1512, 342,3125,2196,7454,2780,2214,1980, # 4118 +3323,7455, 290,1656,1317, 789, 827,2360,7456,3758,4352, 562, 581,3901,7457, 401, # 4134 +4353,2248, 94,4354,1399,2781,7458,1463,2024,4355,3187,1943,7459, 828,1105,4101, # 4150 +1262,1394,7460,4102, 605,4356,7461,1783,2862,7462,2822, 819,2101, 578,2197,2937, # 4166 +7463,1502, 436,3254,4103,3255,2823,3902,2905,3425,3426,7464,2712,2315,7465,7466, # 4182 +2332,2067, 23,4357, 193, 826,3759,2102, 699,1630,4104,3075, 390,1793,1064,3526, # 4198 +7467,1579,3076,3077,1400,7468,4105,1838,1640,2863,7469,4358,4359, 137,4106, 598, # 4214 +3078,1966, 780, 104, 974,2938,7470, 278, 899, 253, 402, 572, 504, 493,1339,7471, # 4230 +3903,1275,4360,2574,2550,7472,3640,3029,3079,2249, 565,1334,2713, 863, 41,7473, # 4246 +7474,4361,7475,1657,2333, 19, 463,2750,4107, 606,7476,2981,3256,1087,2084,1323, # 4262 +2652,2982,7477,1631,1623,1750,4108,2682,7478,2864, 791,2714,2653,2334, 232,2416, # 4278 +7479,2983,1498,7480,2654,2620, 755,1366,3641,3257,3126,2025,1609, 119,1917,3427, # 4294 + 862,1026,4109,7481,3904,3760,4362,3905,4363,2260,1951,2470,7482,1125, 817,4110, # 4310 +4111,3906,1513,1766,2040,1487,4112,3030,3258,2824,3761,3127,7483,7484,1507,7485, # 4326 +2683, 733, 40,1632,1106,2865, 345,4113, 841,2524, 230,4364,2984,1846,3259,3428, # 4342 +7486,1263, 986,3429,7487, 735, 879, 254,1137, 857, 622,1300,1180,1388,1562,3907, # 4358 +3908,2939, 967,2751,2655,1349, 592,2133,1692,3324,2985,1994,4114,1679,3909,1901, # 4374 +2185,7488, 739,3642,2715,1296,1290,7489,4115,2198,2199,1921,1563,2595,2551,1870, # 4390 +2752,2986,7490, 435,7491, 343,1108, 596, 17,1751,4365,2235,3430,3643,7492,4366, # 4406 + 294,3527,2940,1693, 477, 979, 281,2041,3528, 643,2042,3644,2621,2782,2261,1031, # 4422 +2335,2134,2298,3529,4367, 367,1249,2552,7493,3530,7494,4368,1283,3325,2004, 240, # 4438 +1762,3326,4369,4370, 836,1069,3128, 474,7495,2148,2525, 268,3531,7496,3188,1521, # 4454 +1284,7497,1658,1546,4116,7498,3532,3533,7499,4117,3327,2684,1685,4118, 961,1673, # 4470 +2622, 190,2005,2200,3762,4371,4372,7500, 570,2497,3645,1490,7501,4373,2623,3260, # 4486 +1956,4374, 584,1514, 396,1045,1944,7502,4375,1967,2444,7503,7504,4376,3910, 619, # 4502 +7505,3129,3261, 215,2006,2783,2553,3189,4377,3190,4378, 763,4119,3763,4379,7506, # 4518 +7507,1957,1767,2941,3328,3646,1174, 452,1477,4380,3329,3130,7508,2825,1253,2382, # 4534 +2186,1091,2285,4120, 492,7509, 638,1169,1824,2135,1752,3911, 648, 926,1021,1324, # 4550 +4381, 520,4382, 997, 847,1007, 892,4383,3764,2262,1871,3647,7510,2400,1784,4384, # 4566 +1952,2942,3080,3191,1728,4121,2043,3648,4385,2007,1701,3131,1551, 30,2263,4122, # 4582 +7511,2026,4386,3534,7512, 501,7513,4123, 594,3431,2165,1821,3535,3432,3536,3192, # 4598 + 829,2826,4124,7514,1680,3132,1225,4125,7515,3262,4387,4126,3133,2336,7516,4388, # 4614 +4127,7517,3912,3913,7518,1847,2383,2596,3330,7519,4389, 374,3914, 652,4128,4129, # 4630 + 375,1140, 798,7520,7521,7522,2361,4390,2264, 546,1659, 138,3031,2445,4391,7523, # 4646 +2250, 612,1848, 910, 796,3765,1740,1371, 825,3766,3767,7524,2906,2554,7525, 692, # 4662 + 444,3032,2624, 801,4392,4130,7526,1491, 244,1053,3033,4131,4132, 340,7527,3915, # 4678 +1041,2987, 293,1168, 87,1357,7528,1539, 959,7529,2236, 721, 694,4133,3768, 219, # 4694 +1478, 644,1417,3331,2656,1413,1401,1335,1389,3916,7530,7531,2988,2362,3134,1825, # 4710 + 730,1515, 184,2827, 66,4393,7532,1660,2943, 246,3332, 378,1457, 226,3433, 975, # 4726 +3917,2944,1264,3537, 674, 696,7533, 163,7534,1141,2417,2166, 713,3538,3333,4394, # 4742 +3918,7535,7536,1186, 15,7537,1079,1070,7538,1522,3193,3539, 276,1050,2716, 758, # 4758 +1126, 653,2945,3263,7539,2337, 889,3540,3919,3081,2989, 903,1250,4395,3920,3434, # 4774 +3541,1342,1681,1718, 766,3264, 286, 89,2946,3649,7540,1713,7541,2597,3334,2990, # 4790 +7542,2947,2215,3194,2866,7543,4396,2498,2526, 181, 387,1075,3921, 731,2187,3335, # 4806 +7544,3265, 310, 313,3435,2299, 770,4134, 54,3034, 189,4397,3082,3769,3922,7545, # 4822 +1230,1617,1849, 355,3542,4135,4398,3336, 111,4136,3650,1350,3135,3436,3035,4137, # 4838 +2149,3266,3543,7546,2784,3923,3924,2991, 722,2008,7547,1071, 247,1207,2338,2471, # 4854 +1378,4399,2009, 864,1437,1214,4400, 373,3770,1142,2216, 667,4401, 442,2753,2555, # 4870 +3771,3925,1968,4138,3267,1839, 837, 170,1107, 934,1336,1882,7548,7549,2118,4139, # 4886 +2828, 743,1569,7550,4402,4140, 582,2384,1418,3437,7551,1802,7552, 357,1395,1729, # 4902 +3651,3268,2418,1564,2237,7553,3083,3772,1633,4403,1114,2085,4141,1532,7554, 482, # 4918 +2446,4404,7555,7556,1492, 833,1466,7557,2717,3544,1641,2829,7558,1526,1272,3652, # 4934 +4142,1686,1794, 416,2556,1902,1953,1803,7559,3773,2785,3774,1159,2316,7560,2867, # 4950 +4405,1610,1584,3036,2419,2754, 443,3269,1163,3136,7561,7562,3926,7563,4143,2499, # 4966 +3037,4406,3927,3137,2103,1647,3545,2010,1872,4144,7564,4145, 431,3438,7565, 250, # 4982 + 97, 81,4146,7566,1648,1850,1558, 160, 848,7567, 866, 740,1694,7568,2201,2830, # 4998 +3195,4147,4407,3653,1687, 950,2472, 426, 469,3196,3654,3655,3928,7569,7570,1188, # 5014 + 424,1995, 861,3546,4148,3775,2202,2685, 168,1235,3547,4149,7571,2086,1674,4408, # 5030 +3337,3270, 220,2557,1009,7572,3776, 670,2992, 332,1208, 717,7573,7574,3548,2447, # 5046 +3929,3338,7575, 513,7576,1209,2868,3339,3138,4409,1080,7577,7578,7579,7580,2527, # 5062 +3656,3549, 815,1587,3930,3931,7581,3550,3439,3777,1254,4410,1328,3038,1390,3932, # 5078 +1741,3933,3778,3934,7582, 236,3779,2448,3271,7583,7584,3657,3780,1273,3781,4411, # 5094 +7585, 308,7586,4412, 245,4413,1851,2473,1307,2575, 430, 715,2136,2449,7587, 270, # 5110 + 199,2869,3935,7588,3551,2718,1753, 761,1754, 725,1661,1840,4414,3440,3658,7589, # 5126 +7590, 587, 14,3272, 227,2598, 326, 480,2265, 943,2755,3552, 291, 650,1883,7591, # 5142 +1702,1226, 102,1547, 62,3441, 904,4415,3442,1164,4150,7592,7593,1224,1548,2756, # 5158 + 391, 498,1493,7594,1386,1419,7595,2055,1177,4416, 813, 880,1081,2363, 566,1145, # 5174 +4417,2286,1001,1035,2558,2599,2238, 394,1286,7596,7597,2068,7598, 86,1494,1730, # 5190 +3936, 491,1588, 745, 897,2948, 843,3340,3937,2757,2870,3273,1768, 998,2217,2069, # 5206 + 397,1826,1195,1969,3659,2993,3341, 284,7599,3782,2500,2137,2119,1903,7600,3938, # 5222 +2150,3939,4151,1036,3443,1904, 114,2559,4152, 209,1527,7601,7602,2949,2831,2625, # 5238 +2385,2719,3139, 812,2560,7603,3274,7604,1559, 737,1884,3660,1210, 885, 28,2686, # 5254 +3553,3783,7605,4153,1004,1779,4418,7606, 346,1981,2218,2687,4419,3784,1742, 797, # 5270 +1642,3940,1933,1072,1384,2151, 896,3941,3275,3661,3197,2871,3554,7607,2561,1958, # 5286 +4420,2450,1785,7608,7609,7610,3942,4154,1005,1308,3662,4155,2720,4421,4422,1528, # 5302 +2600, 161,1178,4156,1982, 987,4423,1101,4157, 631,3943,1157,3198,2420,1343,1241, # 5318 +1016,2239,2562, 372, 877,2339,2501,1160, 555,1934, 911,3944,7611, 466,1170, 169, # 5334 +1051,2907,2688,3663,2474,2994,1182,2011,2563,1251,2626,7612, 992,2340,3444,1540, # 5350 +2721,1201,2070,2401,1996,2475,7613,4424, 528,1922,2188,1503,1873,1570,2364,3342, # 5366 +3276,7614, 557,1073,7615,1827,3445,2087,2266,3140,3039,3084, 767,3085,2786,4425, # 5382 +1006,4158,4426,2341,1267,2176,3664,3199, 778,3945,3200,2722,1597,2657,7616,4427, # 5398 +7617,3446,7618,7619,7620,3277,2689,1433,3278, 131, 95,1504,3946, 723,4159,3141, # 5414 +1841,3555,2758,2189,3947,2027,2104,3665,7621,2995,3948,1218,7622,3343,3201,3949, # 5430 +4160,2576, 248,1634,3785, 912,7623,2832,3666,3040,3786, 654, 53,7624,2996,7625, # 5446 +1688,4428, 777,3447,1032,3950,1425,7626, 191, 820,2120,2833, 971,4429, 931,3202, # 5462 + 135, 664, 783,3787,1997, 772,2908,1935,3951,3788,4430,2909,3203, 282,2723, 640, # 5478 +1372,3448,1127, 922, 325,3344,7627,7628, 711,2044,7629,7630,3952,2219,2787,1936, # 5494 +3953,3345,2220,2251,3789,2300,7631,4431,3790,1258,3279,3954,3204,2138,2950,3955, # 5510 +3956,7632,2221, 258,3205,4432, 101,1227,7633,3280,1755,7634,1391,3281,7635,2910, # 5526 +2056, 893,7636,7637,7638,1402,4161,2342,7639,7640,3206,3556,7641,7642, 878,1325, # 5542 +1780,2788,4433, 259,1385,2577, 744,1183,2267,4434,7643,3957,2502,7644, 684,1024, # 5558 +4162,7645, 472,3557,3449,1165,3282,3958,3959, 322,2152, 881, 455,1695,1152,1340, # 5574 + 660, 554,2153,4435,1058,4436,4163, 830,1065,3346,3960,4437,1923,7646,1703,1918, # 5590 +7647, 932,2268, 122,7648,4438, 947, 677,7649,3791,2627, 297,1905,1924,2269,4439, # 5606 +2317,3283,7650,7651,4164,7652,4165, 84,4166, 112, 989,7653, 547,1059,3961, 701, # 5622 +3558,1019,7654,4167,7655,3450, 942, 639, 457,2301,2451, 993,2951, 407, 851, 494, # 5638 +4440,3347, 927,7656,1237,7657,2421,3348, 573,4168, 680, 921,2911,1279,1874, 285, # 5654 + 790,1448,1983, 719,2167,7658,7659,4441,3962,3963,1649,7660,1541, 563,7661,1077, # 5670 +7662,3349,3041,3451, 511,2997,3964,3965,3667,3966,1268,2564,3350,3207,4442,4443, # 5686 +7663, 535,1048,1276,1189,2912,2028,3142,1438,1373,2834,2952,1134,2012,7664,4169, # 5702 +1238,2578,3086,1259,7665, 700,7666,2953,3143,3668,4170,7667,4171,1146,1875,1906, # 5718 +4444,2601,3967, 781,2422, 132,1589, 203, 147, 273,2789,2402, 898,1786,2154,3968, # 5734 +3969,7668,3792,2790,7669,7670,4445,4446,7671,3208,7672,1635,3793, 965,7673,1804, # 5750 +2690,1516,3559,1121,1082,1329,3284,3970,1449,3794, 65,1128,2835,2913,2759,1590, # 5766 +3795,7674,7675, 12,2658, 45, 976,2579,3144,4447, 517,2528,1013,1037,3209,7676, # 5782 +3796,2836,7677,3797,7678,3452,7679,2602, 614,1998,2318,3798,3087,2724,2628,7680, # 5798 +2580,4172, 599,1269,7681,1810,3669,7682,2691,3088, 759,1060, 489,1805,3351,3285, # 5814 +1358,7683,7684,2386,1387,1215,2629,2252, 490,7685,7686,4173,1759,2387,2343,7687, # 5830 +4448,3799,1907,3971,2630,1806,3210,4449,3453,3286,2760,2344, 874,7688,7689,3454, # 5846 +3670,1858, 91,2914,3671,3042,3800,4450,7690,3145,3972,2659,7691,3455,1202,1403, # 5862 +3801,2954,2529,1517,2503,4451,3456,2504,7692,4452,7693,2692,1885,1495,1731,3973, # 5878 +2365,4453,7694,2029,7695,7696,3974,2693,1216, 237,2581,4174,2319,3975,3802,4454, # 5894 +4455,2694,3560,3457, 445,4456,7697,7698,7699,7700,2761, 61,3976,3672,1822,3977, # 5910 +7701, 687,2045, 935, 925, 405,2660, 703,1096,1859,2725,4457,3978,1876,1367,2695, # 5926 +3352, 918,2105,1781,2476, 334,3287,1611,1093,4458, 564,3146,3458,3673,3353, 945, # 5942 +2631,2057,4459,7702,1925, 872,4175,7703,3459,2696,3089, 349,4176,3674,3979,4460, # 5958 +3803,4177,3675,2155,3980,4461,4462,4178,4463,2403,2046, 782,3981, 400, 251,4179, # 5974 +1624,7704,7705, 277,3676, 299,1265, 476,1191,3804,2121,4180,4181,1109, 205,7706, # 5990 +2582,1000,2156,3561,1860,7707,7708,7709,4464,7710,4465,2565, 107,2477,2157,3982, # 6006 +3460,3147,7711,1533, 541,1301, 158, 753,4182,2872,3562,7712,1696, 370,1088,4183, # 6022 +4466,3563, 579, 327, 440, 162,2240, 269,1937,1374,3461, 968,3043, 56,1396,3090, # 6038 +2106,3288,3354,7713,1926,2158,4467,2998,7714,3564,7715,7716,3677,4468,2478,7717, # 6054 +2791,7718,1650,4469,7719,2603,7720,7721,3983,2661,3355,1149,3356,3984,3805,3985, # 6070 +7722,1076, 49,7723, 951,3211,3289,3290, 450,2837, 920,7724,1811,2792,2366,4184, # 6086 +1908,1138,2367,3806,3462,7725,3212,4470,1909,1147,1518,2423,4471,3807,7726,4472, # 6102 +2388,2604, 260,1795,3213,7727,7728,3808,3291, 708,7729,3565,1704,7730,3566,1351, # 6118 +1618,3357,2999,1886, 944,4185,3358,4186,3044,3359,4187,7731,3678, 422, 413,1714, # 6134 +3292, 500,2058,2345,4188,2479,7732,1344,1910, 954,7733,1668,7734,7735,3986,2404, # 6150 +4189,3567,3809,4190,7736,2302,1318,2505,3091, 133,3092,2873,4473, 629, 31,2838, # 6166 +2697,3810,4474, 850, 949,4475,3987,2955,1732,2088,4191,1496,1852,7737,3988, 620, # 6182 +3214, 981,1242,3679,3360,1619,3680,1643,3293,2139,2452,1970,1719,3463,2168,7738, # 6198 +3215,7739,7740,3361,1828,7741,1277,4476,1565,2047,7742,1636,3568,3093,7743, 869, # 6214 +2839, 655,3811,3812,3094,3989,3000,3813,1310,3569,4477,7744,7745,7746,1733, 558, # 6230 +4478,3681, 335,1549,3045,1756,4192,3682,1945,3464,1829,1291,1192, 470,2726,2107, # 6246 +2793, 913,1054,3990,7747,1027,7748,3046,3991,4479, 982,2662,3362,3148,3465,3216, # 6262 +3217,1946,2794,7749, 571,4480,7750,1830,7751,3570,2583,1523,2424,7752,2089, 984, # 6278 +4481,3683,1959,7753,3684, 852, 923,2795,3466,3685, 969,1519, 999,2048,2320,1705, # 6294 +7754,3095, 615,1662, 151, 597,3992,2405,2321,1049, 275,4482,3686,4193, 568,3687, # 6310 +3571,2480,4194,3688,7755,2425,2270, 409,3218,7756,1566,2874,3467,1002, 769,2840, # 6326 + 194,2090,3149,3689,2222,3294,4195, 628,1505,7757,7758,1763,2177,3001,3993, 521, # 6342 +1161,2584,1787,2203,2406,4483,3994,1625,4196,4197, 412, 42,3096, 464,7759,2632, # 6358 +4484,3363,1760,1571,2875,3468,2530,1219,2204,3814,2633,2140,2368,4485,4486,3295, # 6374 +1651,3364,3572,7760,7761,3573,2481,3469,7762,3690,7763,7764,2271,2091, 460,7765, # 6390 +4487,7766,3002, 962, 588,3574, 289,3219,2634,1116, 52,7767,3047,1796,7768,7769, # 6406 +7770,1467,7771,1598,1143,3691,4198,1984,1734,1067,4488,1280,3365, 465,4489,1572, # 6422 + 510,7772,1927,2241,1812,1644,3575,7773,4490,3692,7774,7775,2663,1573,1534,7776, # 6438 +7777,4199, 536,1807,1761,3470,3815,3150,2635,7778,7779,7780,4491,3471,2915,1911, # 6454 +2796,7781,3296,1122, 377,3220,7782, 360,7783,7784,4200,1529, 551,7785,2059,3693, # 6470 +1769,2426,7786,2916,4201,3297,3097,2322,2108,2030,4492,1404, 136,1468,1479, 672, # 6486 +1171,3221,2303, 271,3151,7787,2762,7788,2049, 678,2727, 865,1947,4493,7789,2013, # 6502 +3995,2956,7790,2728,2223,1397,3048,3694,4494,4495,1735,2917,3366,3576,7791,3816, # 6518 + 509,2841,2453,2876,3817,7792,7793,3152,3153,4496,4202,2531,4497,2304,1166,1010, # 6534 + 552, 681,1887,7794,7795,2957,2958,3996,1287,1596,1861,3154, 358, 453, 736, 175, # 6550 + 478,1117, 905,1167,1097,7796,1853,1530,7797,1706,7798,2178,3472,2287,3695,3473, # 6566 +3577,4203,2092,4204,7799,3367,1193,2482,4205,1458,2190,2205,1862,1888,1421,3298, # 6582 +2918,3049,2179,3474, 595,2122,7800,3997,7801,7802,4206,1707,2636, 223,3696,1359, # 6598 + 751,3098, 183,3475,7803,2797,3003, 419,2369, 633, 704,3818,2389, 241,7804,7805, # 6614 +7806, 838,3004,3697,2272,2763,2454,3819,1938,2050,3998,1309,3099,2242,1181,7807, # 6630 +1136,2206,3820,2370,1446,4207,2305,4498,7808,7809,4208,1055,2605, 484,3698,7810, # 6646 +3999, 625,4209,2273,3368,1499,4210,4000,7811,4001,4211,3222,2274,2275,3476,7812, # 6662 +7813,2764, 808,2606,3699,3369,4002,4212,3100,2532, 526,3370,3821,4213, 955,7814, # 6678 +1620,4214,2637,2427,7815,1429,3700,1669,1831, 994, 928,7816,3578,1260,7817,7818, # 6694 +7819,1948,2288, 741,2919,1626,4215,2729,2455, 867,1184, 362,3371,1392,7820,7821, # 6710 +4003,4216,1770,1736,3223,2920,4499,4500,1928,2698,1459,1158,7822,3050,3372,2877, # 6726 +1292,1929,2506,2842,3701,1985,1187,2071,2014,2607,4217,7823,2566,2507,2169,3702, # 6742 +2483,3299,7824,3703,4501,7825,7826, 666,1003,3005,1022,3579,4218,7827,4502,1813, # 6758 +2253, 574,3822,1603, 295,1535, 705,3823,4219, 283, 858, 417,7828,7829,3224,4503, # 6774 +4504,3051,1220,1889,1046,2276,2456,4004,1393,1599, 689,2567, 388,4220,7830,2484, # 6790 + 802,7831,2798,3824,2060,1405,2254,7832,4505,3825,2109,1052,1345,3225,1585,7833, # 6806 + 809,7834,7835,7836, 575,2730,3477, 956,1552,1469,1144,2323,7837,2324,1560,2457, # 6822 +3580,3226,4005, 616,2207,3155,2180,2289,7838,1832,7839,3478,4506,7840,1319,3704, # 6838 +3705,1211,3581,1023,3227,1293,2799,7841,7842,7843,3826, 607,2306,3827, 762,2878, # 6854 +1439,4221,1360,7844,1485,3052,7845,4507,1038,4222,1450,2061,2638,4223,1379,4508, # 6870 +2585,7846,7847,4224,1352,1414,2325,2921,1172,7848,7849,3828,3829,7850,1797,1451, # 6886 +7851,7852,7853,7854,2922,4006,4007,2485,2346, 411,4008,4009,3582,3300,3101,4509, # 6902 +1561,2664,1452,4010,1375,7855,7856, 47,2959, 316,7857,1406,1591,2923,3156,7858, # 6918 +1025,2141,3102,3157, 354,2731, 884,2224,4225,2407, 508,3706, 726,3583, 996,2428, # 6934 +3584, 729,7859, 392,2191,1453,4011,4510,3707,7860,7861,2458,3585,2608,1675,2800, # 6950 + 919,2347,2960,2348,1270,4511,4012, 73,7862,7863, 647,7864,3228,2843,2255,1550, # 6966 +1346,3006,7865,1332, 883,3479,7866,7867,7868,7869,3301,2765,7870,1212, 831,1347, # 6982 +4226,4512,2326,3830,1863,3053, 720,3831,4513,4514,3832,7871,4227,7872,7873,4515, # 6998 +7874,7875,1798,4516,3708,2609,4517,3586,1645,2371,7876,7877,2924, 669,2208,2665, # 7014 +2429,7878,2879,7879,7880,1028,3229,7881,4228,2408,7882,2256,1353,7883,7884,4518, # 7030 +3158, 518,7885,4013,7886,4229,1960,7887,2142,4230,7888,7889,3007,2349,2350,3833, # 7046 + 516,1833,1454,4014,2699,4231,4519,2225,2610,1971,1129,3587,7890,2766,7891,2961, # 7062 +1422, 577,1470,3008,1524,3373,7892,7893, 432,4232,3054,3480,7894,2586,1455,2508, # 7078 +2226,1972,1175,7895,1020,2732,4015,3481,4520,7896,2733,7897,1743,1361,3055,3482, # 7094 +2639,4016,4233,4521,2290, 895, 924,4234,2170, 331,2243,3056, 166,1627,3057,1098, # 7110 +7898,1232,2880,2227,3374,4522, 657, 403,1196,2372, 542,3709,3375,1600,4235,3483, # 7126 +7899,4523,2767,3230, 576, 530,1362,7900,4524,2533,2666,3710,4017,7901, 842,3834, # 7142 +7902,2801,2031,1014,4018, 213,2700,3376, 665, 621,4236,7903,3711,2925,2430,7904, # 7158 +2431,3302,3588,3377,7905,4237,2534,4238,4525,3589,1682,4239,3484,1380,7906, 724, # 7174 +2277, 600,1670,7907,1337,1233,4526,3103,2244,7908,1621,4527,7909, 651,4240,7910, # 7190 +1612,4241,2611,7911,2844,7912,2734,2307,3058,7913, 716,2459,3059, 174,1255,2701, # 7206 +4019,3590, 548,1320,1398, 728,4020,1574,7914,1890,1197,3060,4021,7915,3061,3062, # 7222 +3712,3591,3713, 747,7916, 635,4242,4528,7917,7918,7919,4243,7920,7921,4529,7922, # 7238 +3378,4530,2432, 451,7923,3714,2535,2072,4244,2735,4245,4022,7924,1764,4531,7925, # 7254 +4246, 350,7926,2278,2390,2486,7927,4247,4023,2245,1434,4024, 488,4532, 458,4248, # 7270 +4025,3715, 771,1330,2391,3835,2568,3159,2159,2409,1553,2667,3160,4249,7928,2487, # 7286 +2881,2612,1720,2702,4250,3379,4533,7929,2536,4251,7930,3231,4252,2768,7931,2015, # 7302 +2736,7932,1155,1017,3716,3836,7933,3303,2308, 201,1864,4253,1430,7934,4026,7935, # 7318 +7936,7937,7938,7939,4254,1604,7940, 414,1865, 371,2587,4534,4535,3485,2016,3104, # 7334 +4536,1708, 960,4255, 887, 389,2171,1536,1663,1721,7941,2228,4027,2351,2926,1580, # 7350 +7942,7943,7944,1744,7945,2537,4537,4538,7946,4539,7947,2073,7948,7949,3592,3380, # 7366 +2882,4256,7950,4257,2640,3381,2802, 673,2703,2460, 709,3486,4028,3593,4258,7951, # 7382 +1148, 502, 634,7952,7953,1204,4540,3594,1575,4541,2613,3717,7954,3718,3105, 948, # 7398 +3232, 121,1745,3837,1110,7955,4259,3063,2509,3009,4029,3719,1151,1771,3838,1488, # 7414 +4030,1986,7956,2433,3487,7957,7958,2093,7959,4260,3839,1213,1407,2803, 531,2737, # 7430 +2538,3233,1011,1537,7960,2769,4261,3106,1061,7961,3720,3721,1866,2883,7962,2017, # 7446 + 120,4262,4263,2062,3595,3234,2309,3840,2668,3382,1954,4542,7963,7964,3488,1047, # 7462 +2704,1266,7965,1368,4543,2845, 649,3383,3841,2539,2738,1102,2846,2669,7966,7967, # 7478 +1999,7968,1111,3596,2962,7969,2488,3842,3597,2804,1854,3384,3722,7970,7971,3385, # 7494 +2410,2884,3304,3235,3598,7972,2569,7973,3599,2805,4031,1460, 856,7974,3600,7975, # 7510 +2885,2963,7976,2886,3843,7977,4264, 632,2510, 875,3844,1697,3845,2291,7978,7979, # 7526 +4544,3010,1239, 580,4545,4265,7980, 914, 936,2074,1190,4032,1039,2123,7981,7982, # 7542 +7983,3386,1473,7984,1354,4266,3846,7985,2172,3064,4033, 915,3305,4267,4268,3306, # 7558 +1605,1834,7986,2739, 398,3601,4269,3847,4034, 328,1912,2847,4035,3848,1331,4270, # 7574 +3011, 937,4271,7987,3602,4036,4037,3387,2160,4546,3388, 524, 742, 538,3065,1012, # 7590 +7988,7989,3849,2461,7990, 658,1103, 225,3850,7991,7992,4547,7993,4548,7994,3236, # 7606 +1243,7995,4038, 963,2246,4549,7996,2705,3603,3161,7997,7998,2588,2327,7999,4550, # 7622 +8000,8001,8002,3489,3307, 957,3389,2540,2032,1930,2927,2462, 870,2018,3604,1746, # 7638 +2770,2771,2434,2463,8003,3851,8004,3723,3107,3724,3490,3390,3725,8005,1179,3066, # 7654 +8006,3162,2373,4272,3726,2541,3163,3108,2740,4039,8007,3391,1556,2542,2292, 977, # 7670 +2887,2033,4040,1205,3392,8008,1765,3393,3164,2124,1271,1689, 714,4551,3491,8009, # 7686 +2328,3852, 533,4273,3605,2181, 617,8010,2464,3308,3492,2310,8011,8012,3165,8013, # 7702 +8014,3853,1987, 618, 427,2641,3493,3394,8015,8016,1244,1690,8017,2806,4274,4552, # 7718 +8018,3494,8019,8020,2279,1576, 473,3606,4275,3395, 972,8021,3607,8022,3067,8023, # 7734 +8024,4553,4554,8025,3727,4041,4042,8026, 153,4555, 356,8027,1891,2888,4276,2143, # 7750 + 408, 803,2352,8028,3854,8029,4277,1646,2570,2511,4556,4557,3855,8030,3856,4278, # 7766 +8031,2411,3396, 752,8032,8033,1961,2964,8034, 746,3012,2465,8035,4279,3728, 698, # 7782 +4558,1892,4280,3608,2543,4559,3609,3857,8036,3166,3397,8037,1823,1302,4043,2706, # 7798 +3858,1973,4281,8038,4282,3167, 823,1303,1288,1236,2848,3495,4044,3398, 774,3859, # 7814 +8039,1581,4560,1304,2849,3860,4561,8040,2435,2161,1083,3237,4283,4045,4284, 344, # 7830 +1173, 288,2311, 454,1683,8041,8042,1461,4562,4046,2589,8043,8044,4563, 985, 894, # 7846 +8045,3399,3168,8046,1913,2928,3729,1988,8047,2110,1974,8048,4047,8049,2571,1194, # 7862 + 425,8050,4564,3169,1245,3730,4285,8051,8052,2850,8053, 636,4565,1855,3861, 760, # 7878 +1799,8054,4286,2209,1508,4566,4048,1893,1684,2293,8055,8056,8057,4287,4288,2210, # 7894 + 479,8058,8059, 832,8060,4049,2489,8061,2965,2490,3731, 990,3109, 627,1814,2642, # 7910 +4289,1582,4290,2125,2111,3496,4567,8062, 799,4291,3170,8063,4568,2112,1737,3013, # 7926 +1018, 543, 754,4292,3309,1676,4569,4570,4050,8064,1489,8065,3497,8066,2614,2889, # 7942 +4051,8067,8068,2966,8069,8070,8071,8072,3171,4571,4572,2182,1722,8073,3238,3239, # 7958 +1842,3610,1715, 481, 365,1975,1856,8074,8075,1962,2491,4573,8076,2126,3611,3240, # 7974 + 433,1894,2063,2075,8077, 602,2741,8078,8079,8080,8081,8082,3014,1628,3400,8083, # 7990 +3172,4574,4052,2890,4575,2512,8084,2544,2772,8085,8086,8087,3310,4576,2891,8088, # 8006 +4577,8089,2851,4578,4579,1221,2967,4053,2513,8090,8091,8092,1867,1989,8093,8094, # 8022 +8095,1895,8096,8097,4580,1896,4054, 318,8098,2094,4055,4293,8099,8100, 485,8101, # 8038 + 938,3862, 553,2670, 116,8102,3863,3612,8103,3498,2671,2773,3401,3311,2807,8104, # 8054 +3613,2929,4056,1747,2930,2968,8105,8106, 207,8107,8108,2672,4581,2514,8109,3015, # 8070 + 890,3614,3864,8110,1877,3732,3402,8111,2183,2353,3403,1652,8112,8113,8114, 941, # 8086 +2294, 208,3499,4057,2019, 330,4294,3865,2892,2492,3733,4295,8115,8116,8117,8118, # 8102 +) + diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/euctwprober.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/euctwprober.py new file mode 100644 index 00000000..35669cc4 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/euctwprober.py @@ -0,0 +1,46 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .mbcharsetprober import MultiByteCharSetProber +from .codingstatemachine import CodingStateMachine +from .chardistribution import EUCTWDistributionAnalysis +from .mbcssm import EUCTW_SM_MODEL + +class EUCTWProber(MultiByteCharSetProber): + def __init__(self): + super(EUCTWProber, self).__init__() + self.coding_sm = CodingStateMachine(EUCTW_SM_MODEL) + self.distribution_analyzer = EUCTWDistributionAnalysis() + self.reset() + + @property + def charset_name(self): + return "EUC-TW" + + @property + def language(self): + return "Taiwan" diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/gb2312freq.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/gb2312freq.py new file mode 100644 index 00000000..697837bd --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/gb2312freq.py @@ -0,0 +1,283 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +# GB2312 most frequently used character table +# +# Char to FreqOrder table , from hz6763 + +# 512 --> 0.79 -- 0.79 +# 1024 --> 0.92 -- 0.13 +# 2048 --> 0.98 -- 0.06 +# 6768 --> 1.00 -- 0.02 +# +# Ideal Distribution Ratio = 0.79135/(1-0.79135) = 3.79 +# Random Distribution Ration = 512 / (3755 - 512) = 0.157 +# +# Typical Distribution Ratio about 25% of Ideal one, still much higher that RDR + +GB2312_TYPICAL_DISTRIBUTION_RATIO = 0.9 + +GB2312_TABLE_SIZE = 3760 + +GB2312_CHAR_TO_FREQ_ORDER = ( +1671, 749,1443,2364,3924,3807,2330,3921,1704,3463,2691,1511,1515, 572,3191,2205, +2361, 224,2558, 479,1711, 963,3162, 440,4060,1905,2966,2947,3580,2647,3961,3842, +2204, 869,4207, 970,2678,5626,2944,2956,1479,4048, 514,3595, 588,1346,2820,3409, + 249,4088,1746,1873,2047,1774, 581,1813, 358,1174,3590,1014,1561,4844,2245, 670, +1636,3112, 889,1286, 953, 556,2327,3060,1290,3141, 613, 185,3477,1367, 850,3820, +1715,2428,2642,2303,2732,3041,2562,2648,3566,3946,1349, 388,3098,2091,1360,3585, + 152,1687,1539, 738,1559, 59,1232,2925,2267,1388,1249,1741,1679,2960, 151,1566, +1125,1352,4271, 924,4296, 385,3166,4459, 310,1245,2850, 70,3285,2729,3534,3575, +2398,3298,3466,1960,2265, 217,3647, 864,1909,2084,4401,2773,1010,3269,5152, 853, +3051,3121,1244,4251,1895, 364,1499,1540,2313,1180,3655,2268, 562, 715,2417,3061, + 544, 336,3768,2380,1752,4075, 950, 280,2425,4382, 183,2759,3272, 333,4297,2155, +1688,2356,1444,1039,4540, 736,1177,3349,2443,2368,2144,2225, 565, 196,1482,3406, + 927,1335,4147, 692, 878,1311,1653,3911,3622,1378,4200,1840,2969,3149,2126,1816, +2534,1546,2393,2760, 737,2494, 13, 447, 245,2747, 38,2765,2129,2589,1079, 606, + 360, 471,3755,2890, 404, 848, 699,1785,1236, 370,2221,1023,3746,2074,2026,2023, +2388,1581,2119, 812,1141,3091,2536,1519, 804,2053, 406,1596,1090, 784, 548,4414, +1806,2264,2936,1100, 343,4114,5096, 622,3358, 743,3668,1510,1626,5020,3567,2513, +3195,4115,5627,2489,2991, 24,2065,2697,1087,2719, 48,1634, 315, 68, 985,2052, + 198,2239,1347,1107,1439, 597,2366,2172, 871,3307, 919,2487,2790,1867, 236,2570, +1413,3794, 906,3365,3381,1701,1982,1818,1524,2924,1205, 616,2586,2072,2004, 575, + 253,3099, 32,1365,1182, 197,1714,2454,1201, 554,3388,3224,2748, 756,2587, 250, +2567,1507,1517,3529,1922,2761,2337,3416,1961,1677,2452,2238,3153, 615, 911,1506, +1474,2495,1265,1906,2749,3756,3280,2161, 898,2714,1759,3450,2243,2444, 563, 26, +3286,2266,3769,3344,2707,3677, 611,1402, 531,1028,2871,4548,1375, 261,2948, 835, +1190,4134, 353, 840,2684,1900,3082,1435,2109,1207,1674, 329,1872,2781,4055,2686, +2104, 608,3318,2423,2957,2768,1108,3739,3512,3271,3985,2203,1771,3520,1418,2054, +1681,1153, 225,1627,2929, 162,2050,2511,3687,1954, 124,1859,2431,1684,3032,2894, + 585,4805,3969,2869,2704,2088,2032,2095,3656,2635,4362,2209, 256, 518,2042,2105, +3777,3657, 643,2298,1148,1779, 190, 989,3544, 414, 11,2135,2063,2979,1471, 403, +3678, 126, 770,1563, 671,2499,3216,2877, 600,1179, 307,2805,4937,1268,1297,2694, + 252,4032,1448,1494,1331,1394, 127,2256, 222,1647,1035,1481,3056,1915,1048, 873, +3651, 210, 33,1608,2516, 200,1520, 415, 102, 0,3389,1287, 817, 91,3299,2940, + 836,1814, 549,2197,1396,1669,2987,3582,2297,2848,4528,1070, 687, 20,1819, 121, +1552,1364,1461,1968,2617,3540,2824,2083, 177, 948,4938,2291, 110,4549,2066, 648, +3359,1755,2110,2114,4642,4845,1693,3937,3308,1257,1869,2123, 208,1804,3159,2992, +2531,2549,3361,2418,1350,2347,2800,2568,1291,2036,2680, 72, 842,1990, 212,1233, +1154,1586, 75,2027,3410,4900,1823,1337,2710,2676, 728,2810,1522,3026,4995, 157, + 755,1050,4022, 710, 785,1936,2194,2085,1406,2777,2400, 150,1250,4049,1206, 807, +1910, 534, 529,3309,1721,1660, 274, 39,2827, 661,2670,1578, 925,3248,3815,1094, +4278,4901,4252, 41,1150,3747,2572,2227,4501,3658,4902,3813,3357,3617,2884,2258, + 887, 538,4187,3199,1294,2439,3042,2329,2343,2497,1255, 107, 543,1527, 521,3478, +3568, 194,5062, 15, 961,3870,1241,1192,2664, 66,5215,3260,2111,1295,1127,2152, +3805,4135, 901,1164,1976, 398,1278, 530,1460, 748, 904,1054,1966,1426, 53,2909, + 509, 523,2279,1534, 536,1019, 239,1685, 460,2353, 673,1065,2401,3600,4298,2272, +1272,2363, 284,1753,3679,4064,1695, 81, 815,2677,2757,2731,1386, 859, 500,4221, +2190,2566, 757,1006,2519,2068,1166,1455, 337,2654,3203,1863,1682,1914,3025,1252, +1409,1366, 847, 714,2834,2038,3209, 964,2970,1901, 885,2553,1078,1756,3049, 301, +1572,3326, 688,2130,1996,2429,1805,1648,2930,3421,2750,3652,3088, 262,1158,1254, + 389,1641,1812, 526,1719, 923,2073,1073,1902, 468, 489,4625,1140, 857,2375,3070, +3319,2863, 380, 116,1328,2693,1161,2244, 273,1212,1884,2769,3011,1775,1142, 461, +3066,1200,2147,2212, 790, 702,2695,4222,1601,1058, 434,2338,5153,3640, 67,2360, +4099,2502, 618,3472,1329, 416,1132, 830,2782,1807,2653,3211,3510,1662, 192,2124, + 296,3979,1739,1611,3684, 23, 118, 324, 446,1239,1225, 293,2520,3814,3795,2535, +3116, 17,1074, 467,2692,2201, 387,2922, 45,1326,3055,1645,3659,2817, 958, 243, +1903,2320,1339,2825,1784,3289, 356, 576, 865,2315,2381,3377,3916,1088,3122,1713, +1655, 935, 628,4689,1034,1327, 441, 800, 720, 894,1979,2183,1528,5289,2702,1071, +4046,3572,2399,1571,3281, 79, 761,1103, 327, 134, 758,1899,1371,1615, 879, 442, + 215,2605,2579, 173,2048,2485,1057,2975,3317,1097,2253,3801,4263,1403,1650,2946, + 814,4968,3487,1548,2644,1567,1285, 2, 295,2636, 97, 946,3576, 832, 141,4257, +3273, 760,3821,3521,3156,2607, 949,1024,1733,1516,1803,1920,2125,2283,2665,3180, +1501,2064,3560,2171,1592, 803,3518,1416, 732,3897,4258,1363,1362,2458, 119,1427, + 602,1525,2608,1605,1639,3175, 694,3064, 10, 465, 76,2000,4846,4208, 444,3781, +1619,3353,2206,1273,3796, 740,2483, 320,1723,2377,3660,2619,1359,1137,1762,1724, +2345,2842,1850,1862, 912, 821,1866, 612,2625,1735,2573,3369,1093, 844, 89, 937, + 930,1424,3564,2413,2972,1004,3046,3019,2011, 711,3171,1452,4178, 428, 801,1943, + 432, 445,2811, 206,4136,1472, 730, 349, 73, 397,2802,2547, 998,1637,1167, 789, + 396,3217, 154,1218, 716,1120,1780,2819,4826,1931,3334,3762,2139,1215,2627, 552, +3664,3628,3232,1405,2383,3111,1356,2652,3577,3320,3101,1703, 640,1045,1370,1246, +4996, 371,1575,2436,1621,2210, 984,4033,1734,2638, 16,4529, 663,2755,3255,1451, +3917,2257,1253,1955,2234,1263,2951, 214,1229, 617, 485, 359,1831,1969, 473,2310, + 750,2058, 165, 80,2864,2419, 361,4344,2416,2479,1134, 796,3726,1266,2943, 860, +2715, 938, 390,2734,1313,1384, 248, 202, 877,1064,2854, 522,3907, 279,1602, 297, +2357, 395,3740, 137,2075, 944,4089,2584,1267,3802, 62,1533,2285, 178, 176, 780, +2440, 201,3707, 590, 478,1560,4354,2117,1075, 30, 74,4643,4004,1635,1441,2745, + 776,2596, 238,1077,1692,1912,2844, 605, 499,1742,3947, 241,3053, 980,1749, 936, +2640,4511,2582, 515,1543,2162,5322,2892,2993, 890,2148,1924, 665,1827,3581,1032, + 968,3163, 339,1044,1896, 270, 583,1791,1720,4367,1194,3488,3669, 43,2523,1657, + 163,2167, 290,1209,1622,3378, 550, 634,2508,2510, 695,2634,2384,2512,1476,1414, + 220,1469,2341,2138,2852,3183,2900,4939,2865,3502,1211,3680, 854,3227,1299,2976, +3172, 186,2998,1459, 443,1067,3251,1495, 321,1932,3054, 909, 753,1410,1828, 436, +2441,1119,1587,3164,2186,1258, 227, 231,1425,1890,3200,3942, 247, 959, 725,5254, +2741, 577,2158,2079, 929, 120, 174, 838,2813, 591,1115, 417,2024, 40,3240,1536, +1037, 291,4151,2354, 632,1298,2406,2500,3535,1825,1846,3451, 205,1171, 345,4238, + 18,1163, 811, 685,2208,1217, 425,1312,1508,1175,4308,2552,1033, 587,1381,3059, +2984,3482, 340,1316,4023,3972, 792,3176, 519, 777,4690, 918, 933,4130,2981,3741, + 90,3360,2911,2200,5184,4550, 609,3079,2030, 272,3379,2736, 363,3881,1130,1447, + 286, 779, 357,1169,3350,3137,1630,1220,2687,2391, 747,1277,3688,2618,2682,2601, +1156,3196,5290,4034,3102,1689,3596,3128, 874, 219,2783, 798, 508,1843,2461, 269, +1658,1776,1392,1913,2983,3287,2866,2159,2372, 829,4076, 46,4253,2873,1889,1894, + 915,1834,1631,2181,2318, 298, 664,2818,3555,2735, 954,3228,3117, 527,3511,2173, + 681,2712,3033,2247,2346,3467,1652, 155,2164,3382, 113,1994, 450, 899, 494, 994, +1237,2958,1875,2336,1926,3727, 545,1577,1550, 633,3473, 204,1305,3072,2410,1956, +2471, 707,2134, 841,2195,2196,2663,3843,1026,4940, 990,3252,4997, 368,1092, 437, +3212,3258,1933,1829, 675,2977,2893, 412, 943,3723,4644,3294,3283,2230,2373,5154, +2389,2241,2661,2323,1404,2524, 593, 787, 677,3008,1275,2059, 438,2709,2609,2240, +2269,2246,1446, 36,1568,1373,3892,1574,2301,1456,3962, 693,2276,5216,2035,1143, +2720,1919,1797,1811,2763,4137,2597,1830,1699,1488,1198,2090, 424,1694, 312,3634, +3390,4179,3335,2252,1214, 561,1059,3243,2295,2561, 975,5155,2321,2751,3772, 472, +1537,3282,3398,1047,2077,2348,2878,1323,3340,3076, 690,2906, 51, 369, 170,3541, +1060,2187,2688,3670,2541,1083,1683, 928,3918, 459, 109,4427, 599,3744,4286, 143, +2101,2730,2490, 82,1588,3036,2121, 281,1860, 477,4035,1238,2812,3020,2716,3312, +1530,2188,2055,1317, 843, 636,1808,1173,3495, 649, 181,1002, 147,3641,1159,2414, +3750,2289,2795, 813,3123,2610,1136,4368, 5,3391,4541,2174, 420, 429,1728, 754, +1228,2115,2219, 347,2223,2733, 735,1518,3003,2355,3134,1764,3948,3329,1888,2424, +1001,1234,1972,3321,3363,1672,1021,1450,1584, 226, 765, 655,2526,3404,3244,2302, +3665, 731, 594,2184, 319,1576, 621, 658,2656,4299,2099,3864,1279,2071,2598,2739, + 795,3086,3699,3908,1707,2352,2402,1382,3136,2475,1465,4847,3496,3865,1085,3004, +2591,1084, 213,2287,1963,3565,2250, 822, 793,4574,3187,1772,1789,3050, 595,1484, +1959,2770,1080,2650, 456, 422,2996, 940,3322,4328,4345,3092,2742, 965,2784, 739, +4124, 952,1358,2498,2949,2565, 332,2698,2378, 660,2260,2473,4194,3856,2919, 535, +1260,2651,1208,1428,1300,1949,1303,2942, 433,2455,2450,1251,1946, 614,1269, 641, +1306,1810,2737,3078,2912, 564,2365,1419,1415,1497,4460,2367,2185,1379,3005,1307, +3218,2175,1897,3063, 682,1157,4040,4005,1712,1160,1941,1399, 394, 402,2952,1573, +1151,2986,2404, 862, 299,2033,1489,3006, 346, 171,2886,3401,1726,2932, 168,2533, + 47,2507,1030,3735,1145,3370,1395,1318,1579,3609,4560,2857,4116,1457,2529,1965, + 504,1036,2690,2988,2405, 745,5871, 849,2397,2056,3081, 863,2359,3857,2096, 99, +1397,1769,2300,4428,1643,3455,1978,1757,3718,1440, 35,4879,3742,1296,4228,2280, + 160,5063,1599,2013, 166, 520,3479,1646,3345,3012, 490,1937,1545,1264,2182,2505, +1096,1188,1369,1436,2421,1667,2792,2460,1270,2122, 727,3167,2143, 806,1706,1012, +1800,3037, 960,2218,1882, 805, 139,2456,1139,1521, 851,1052,3093,3089, 342,2039, + 744,5097,1468,1502,1585,2087, 223, 939, 326,2140,2577, 892,2481,1623,4077, 982, +3708, 135,2131, 87,2503,3114,2326,1106, 876,1616, 547,2997,2831,2093,3441,4530, +4314, 9,3256,4229,4148, 659,1462,1986,1710,2046,2913,2231,4090,4880,5255,3392, +3274,1368,3689,4645,1477, 705,3384,3635,1068,1529,2941,1458,3782,1509, 100,1656, +2548, 718,2339, 408,1590,2780,3548,1838,4117,3719,1345,3530, 717,3442,2778,3220, +2898,1892,4590,3614,3371,2043,1998,1224,3483, 891, 635, 584,2559,3355, 733,1766, +1729,1172,3789,1891,2307, 781,2982,2271,1957,1580,5773,2633,2005,4195,3097,1535, +3213,1189,1934,5693,3262, 586,3118,1324,1598, 517,1564,2217,1868,1893,4445,3728, +2703,3139,1526,1787,1992,3882,2875,1549,1199,1056,2224,1904,2711,5098,4287, 338, +1993,3129,3489,2689,1809,2815,1997, 957,1855,3898,2550,3275,3057,1105,1319, 627, +1505,1911,1883,3526, 698,3629,3456,1833,1431, 746, 77,1261,2017,2296,1977,1885, + 125,1334,1600, 525,1798,1109,2222,1470,1945, 559,2236,1186,3443,2476,1929,1411, +2411,3135,1777,3372,2621,1841,1613,3229, 668,1430,1839,2643,2916, 195,1989,2671, +2358,1387, 629,3205,2293,5256,4439, 123,1310, 888,1879,4300,3021,3605,1003,1162, +3192,2910,2010, 140,2395,2859, 55,1082,2012,2901, 662, 419,2081,1438, 680,2774, +4654,3912,1620,1731,1625,5035,4065,2328, 512,1344, 802,5443,2163,2311,2537, 524, +3399, 98,1155,2103,1918,2606,3925,2816,1393,2465,1504,3773,2177,3963,1478,4346, + 180,1113,4655,3461,2028,1698, 833,2696,1235,1322,1594,4408,3623,3013,3225,2040, +3022, 541,2881, 607,3632,2029,1665,1219, 639,1385,1686,1099,2803,3231,1938,3188, +2858, 427, 676,2772,1168,2025, 454,3253,2486,3556, 230,1950, 580, 791,1991,1280, +1086,1974,2034, 630, 257,3338,2788,4903,1017, 86,4790, 966,2789,1995,1696,1131, + 259,3095,4188,1308, 179,1463,5257, 289,4107,1248, 42,3413,1725,2288, 896,1947, + 774,4474,4254, 604,3430,4264, 392,2514,2588, 452, 237,1408,3018, 988,4531,1970, +3034,3310, 540,2370,1562,1288,2990, 502,4765,1147, 4,1853,2708, 207, 294,2814, +4078,2902,2509, 684, 34,3105,3532,2551, 644, 709,2801,2344, 573,1727,3573,3557, +2021,1081,3100,4315,2100,3681, 199,2263,1837,2385, 146,3484,1195,2776,3949, 997, +1939,3973,1008,1091,1202,1962,1847,1149,4209,5444,1076, 493, 117,5400,2521, 972, +1490,2934,1796,4542,2374,1512,2933,2657, 413,2888,1135,2762,2314,2156,1355,2369, + 766,2007,2527,2170,3124,2491,2593,2632,4757,2437, 234,3125,3591,1898,1750,1376, +1942,3468,3138, 570,2127,2145,3276,4131, 962, 132,1445,4196, 19, 941,3624,3480, +3366,1973,1374,4461,3431,2629, 283,2415,2275, 808,2887,3620,2112,2563,1353,3610, + 955,1089,3103,1053, 96, 88,4097, 823,3808,1583, 399, 292,4091,3313, 421,1128, + 642,4006, 903,2539,1877,2082, 596, 29,4066,1790, 722,2157, 130, 995,1569, 769, +1485, 464, 513,2213, 288,1923,1101,2453,4316, 133, 486,2445, 50, 625, 487,2207, + 57, 423, 481,2962, 159,3729,1558, 491, 303, 482, 501, 240,2837, 112,3648,2392, +1783, 362, 8,3433,3422, 610,2793,3277,1390,1284,1654, 21,3823, 734, 367, 623, + 193, 287, 374,1009,1483, 816, 476, 313,2255,2340,1262,2150,2899,1146,2581, 782, +2116,1659,2018,1880, 255,3586,3314,1110,2867,2137,2564, 986,2767,5185,2006, 650, + 158, 926, 762, 881,3157,2717,2362,3587, 306,3690,3245,1542,3077,2427,1691,2478, +2118,2985,3490,2438, 539,2305, 983, 129,1754, 355,4201,2386, 827,2923, 104,1773, +2838,2771, 411,2905,3919, 376, 767, 122,1114, 828,2422,1817,3506, 266,3460,1007, +1609,4998, 945,2612,4429,2274, 726,1247,1964,2914,2199,2070,4002,4108, 657,3323, +1422, 579, 455,2764,4737,1222,2895,1670, 824,1223,1487,2525, 558, 861,3080, 598, +2659,2515,1967, 752,2583,2376,2214,4180, 977, 704,2464,4999,2622,4109,1210,2961, + 819,1541, 142,2284, 44, 418, 457,1126,3730,4347,4626,1644,1876,3671,1864, 302, +1063,5694, 624, 723,1984,3745,1314,1676,2488,1610,1449,3558,3569,2166,2098, 409, +1011,2325,3704,2306, 818,1732,1383,1824,1844,3757, 999,2705,3497,1216,1423,2683, +2426,2954,2501,2726,2229,1475,2554,5064,1971,1794,1666,2014,1343, 783, 724, 191, +2434,1354,2220,5065,1763,2752,2472,4152, 131, 175,2885,3434, 92,1466,4920,2616, +3871,3872,3866, 128,1551,1632, 669,1854,3682,4691,4125,1230, 188,2973,3290,1302, +1213, 560,3266, 917, 763,3909,3249,1760, 868,1958, 764,1782,2097, 145,2277,3774, +4462, 64,1491,3062, 971,2132,3606,2442, 221,1226,1617, 218, 323,1185,3207,3147, + 571, 619,1473,1005,1744,2281, 449,1887,2396,3685, 275, 375,3816,1743,3844,3731, + 845,1983,2350,4210,1377, 773, 967,3499,3052,3743,2725,4007,1697,1022,3943,1464, +3264,2855,2722,1952,1029,2839,2467, 84,4383,2215, 820,1391,2015,2448,3672, 377, +1948,2168, 797,2545,3536,2578,2645, 94,2874,1678, 405,1259,3071, 771, 546,1315, + 470,1243,3083, 895,2468, 981, 969,2037, 846,4181, 653,1276,2928, 14,2594, 557, +3007,2474, 156, 902,1338,1740,2574, 537,2518, 973,2282,2216,2433,1928, 138,2903, +1293,2631,1612, 646,3457, 839,2935, 111, 496,2191,2847, 589,3186, 149,3994,2060, +4031,2641,4067,3145,1870, 37,3597,2136,1025,2051,3009,3383,3549,1121,1016,3261, +1301, 251,2446,2599,2153, 872,3246, 637, 334,3705, 831, 884, 921,3065,3140,4092, +2198,1944, 246,2964, 108,2045,1152,1921,2308,1031, 203,3173,4170,1907,3890, 810, +1401,2003,1690, 506, 647,1242,2828,1761,1649,3208,2249,1589,3709,2931,5156,1708, + 498, 666,2613, 834,3817,1231, 184,2851,1124, 883,3197,2261,3710,1765,1553,2658, +1178,2639,2351, 93,1193, 942,2538,2141,4402, 235,1821, 870,1591,2192,1709,1871, +3341,1618,4126,2595,2334, 603, 651, 69, 701, 268,2662,3411,2555,1380,1606, 503, + 448, 254,2371,2646, 574,1187,2309,1770, 322,2235,1292,1801, 305, 566,1133, 229, +2067,2057, 706, 167, 483,2002,2672,3295,1820,3561,3067, 316, 378,2746,3452,1112, + 136,1981, 507,1651,2917,1117, 285,4591, 182,2580,3522,1304, 335,3303,1835,2504, +1795,1792,2248, 674,1018,2106,2449,1857,2292,2845, 976,3047,1781,2600,2727,1389, +1281, 52,3152, 153, 265,3950, 672,3485,3951,4463, 430,1183, 365, 278,2169, 27, +1407,1336,2304, 209,1340,1730,2202,1852,2403,2883, 979,1737,1062, 631,2829,2542, +3876,2592, 825,2086,2226,3048,3625, 352,1417,3724, 542, 991, 431,1351,3938,1861, +2294, 826,1361,2927,3142,3503,1738, 463,2462,2723, 582,1916,1595,2808, 400,3845, +3891,2868,3621,2254, 58,2492,1123, 910,2160,2614,1372,1603,1196,1072,3385,1700, +3267,1980, 696, 480,2430, 920, 799,1570,2920,1951,2041,4047,2540,1321,4223,2469, +3562,2228,1271,2602, 401,2833,3351,2575,5157, 907,2312,1256, 410, 263,3507,1582, + 996, 678,1849,2316,1480, 908,3545,2237, 703,2322, 667,1826,2849,1531,2604,2999, +2407,3146,2151,2630,1786,3711, 469,3542, 497,3899,2409, 858, 837,4446,3393,1274, + 786, 620,1845,2001,3311, 484, 308,3367,1204,1815,3691,2332,1532,2557,1842,2020, +2724,1927,2333,4440, 567, 22,1673,2728,4475,1987,1858,1144,1597, 101,1832,3601, + 12, 974,3783,4391, 951,1412, 1,3720, 453,4608,4041, 528,1041,1027,3230,2628, +1129, 875,1051,3291,1203,2262,1069,2860,2799,2149,2615,3278, 144,1758,3040, 31, + 475,1680, 366,2685,3184, 311,1642,4008,2466,5036,1593,1493,2809, 216,1420,1668, + 233, 304,2128,3284, 232,1429,1768,1040,2008,3407,2740,2967,2543, 242,2133, 778, +1565,2022,2620, 505,2189,2756,1098,2273, 372,1614, 708, 553,2846,2094,2278, 169, +3626,2835,4161, 228,2674,3165, 809,1454,1309, 466,1705,1095, 900,3423, 880,2667, +3751,5258,2317,3109,2571,4317,2766,1503,1342, 866,4447,1118, 63,2076, 314,1881, +1348,1061, 172, 978,3515,1747, 532, 511,3970, 6, 601, 905,2699,3300,1751, 276, +1467,3725,2668, 65,4239,2544,2779,2556,1604, 578,2451,1802, 992,2331,2624,1320, +3446, 713,1513,1013, 103,2786,2447,1661, 886,1702, 916, 654,3574,2031,1556, 751, +2178,2821,2179,1498,1538,2176, 271, 914,2251,2080,1325, 638,1953,2937,3877,2432, +2754, 95,3265,1716, 260,1227,4083, 775, 106,1357,3254, 426,1607, 555,2480, 772, +1985, 244,2546, 474, 495,1046,2611,1851,2061, 71,2089,1675,2590, 742,3758,2843, +3222,1433, 267,2180,2576,2826,2233,2092,3913,2435, 956,1745,3075, 856,2113,1116, + 451, 3,1988,2896,1398, 993,2463,1878,2049,1341,2718,2721,2870,2108, 712,2904, +4363,2753,2324, 277,2872,2349,2649, 384, 987, 435, 691,3000, 922, 164,3939, 652, +1500,1184,4153,2482,3373,2165,4848,2335,3775,3508,3154,2806,2830,1554,2102,1664, +2530,1434,2408, 893,1547,2623,3447,2832,2242,2532,3169,2856,3223,2078, 49,3770, +3469, 462, 318, 656,2259,3250,3069, 679,1629,2758, 344,1138,1104,3120,1836,1283, +3115,2154,1437,4448, 934, 759,1999, 794,2862,1038, 533,2560,1722,2342, 855,2626, +1197,1663,4476,3127, 85,4240,2528, 25,1111,1181,3673, 407,3470,4561,2679,2713, + 768,1925,2841,3986,1544,1165, 932, 373,1240,2146,1930,2673, 721,4766, 354,4333, + 391,2963, 187, 61,3364,1442,1102, 330,1940,1767, 341,3809,4118, 393,2496,2062, +2211, 105, 331, 300, 439, 913,1332, 626, 379,3304,1557, 328, 689,3952, 309,1555, + 931, 317,2517,3027, 325, 569, 686,2107,3084, 60,1042,1333,2794, 264,3177,4014, +1628, 258,3712, 7,4464,1176,1043,1778, 683, 114,1975, 78,1492, 383,1886, 510, + 386, 645,5291,2891,2069,3305,4138,3867,2939,2603,2493,1935,1066,1848,3588,1015, +1282,1289,4609, 697,1453,3044,2666,3611,1856,2412, 54, 719,1330, 568,3778,2459, +1748, 788, 492, 551,1191,1000, 488,3394,3763, 282,1799, 348,2016,1523,3155,2390, +1049, 382,2019,1788,1170, 729,2968,3523, 897,3926,2785,2938,3292, 350,2319,3238, +1718,1717,2655,3453,3143,4465, 161,2889,2980,2009,1421, 56,1908,1640,2387,2232, +1917,1874,2477,4921, 148, 83,3438, 592,4245,2882,1822,1055, 741, 115,1496,1624, + 381,1638,4592,1020, 516,3214, 458, 947,4575,1432, 211,1514,2926,1865,2142, 189, + 852,1221,1400,1486, 882,2299,4036, 351, 28,1122, 700,6479,6480,6481,6482,6483, #last 512 +) + diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/gb2312prober.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/gb2312prober.py new file mode 100644 index 00000000..8446d2dd --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/gb2312prober.py @@ -0,0 +1,46 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .mbcharsetprober import MultiByteCharSetProber +from .codingstatemachine import CodingStateMachine +from .chardistribution import GB2312DistributionAnalysis +from .mbcssm import GB2312_SM_MODEL + +class GB2312Prober(MultiByteCharSetProber): + def __init__(self): + super(GB2312Prober, self).__init__() + self.coding_sm = CodingStateMachine(GB2312_SM_MODEL) + self.distribution_analyzer = GB2312DistributionAnalysis() + self.reset() + + @property + def charset_name(self): + return "GB2312" + + @property + def language(self): + return "Chinese" diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/hebrewprober.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/hebrewprober.py new file mode 100644 index 00000000..b0e1bf49 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/hebrewprober.py @@ -0,0 +1,292 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Universal charset detector code. +# +# The Initial Developer of the Original Code is +# Shy Shalom +# Portions created by the Initial Developer are Copyright (C) 2005 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .charsetprober import CharSetProber +from .enums import ProbingState + +# This prober doesn't actually recognize a language or a charset. +# It is a helper prober for the use of the Hebrew model probers + +### General ideas of the Hebrew charset recognition ### +# +# Four main charsets exist in Hebrew: +# "ISO-8859-8" - Visual Hebrew +# "windows-1255" - Logical Hebrew +# "ISO-8859-8-I" - Logical Hebrew +# "x-mac-hebrew" - ?? Logical Hebrew ?? +# +# Both "ISO" charsets use a completely identical set of code points, whereas +# "windows-1255" and "x-mac-hebrew" are two different proper supersets of +# these code points. windows-1255 defines additional characters in the range +# 0x80-0x9F as some misc punctuation marks as well as some Hebrew-specific +# diacritics and additional 'Yiddish' ligature letters in the range 0xc0-0xd6. +# x-mac-hebrew defines similar additional code points but with a different +# mapping. +# +# As far as an average Hebrew text with no diacritics is concerned, all four +# charsets are identical with respect to code points. Meaning that for the +# main Hebrew alphabet, all four map the same values to all 27 Hebrew letters +# (including final letters). +# +# The dominant difference between these charsets is their directionality. +# "Visual" directionality means that the text is ordered as if the renderer is +# not aware of a BIDI rendering algorithm. The renderer sees the text and +# draws it from left to right. The text itself when ordered naturally is read +# backwards. A buffer of Visual Hebrew generally looks like so: +# "[last word of first line spelled backwards] [whole line ordered backwards +# and spelled backwards] [first word of first line spelled backwards] +# [end of line] [last word of second line] ... etc' " +# adding punctuation marks, numbers and English text to visual text is +# naturally also "visual" and from left to right. +# +# "Logical" directionality means the text is ordered "naturally" according to +# the order it is read. It is the responsibility of the renderer to display +# the text from right to left. A BIDI algorithm is used to place general +# punctuation marks, numbers and English text in the text. +# +# Texts in x-mac-hebrew are almost impossible to find on the Internet. From +# what little evidence I could find, it seems that its general directionality +# is Logical. +# +# To sum up all of the above, the Hebrew probing mechanism knows about two +# charsets: +# Visual Hebrew - "ISO-8859-8" - backwards text - Words and sentences are +# backwards while line order is natural. For charset recognition purposes +# the line order is unimportant (In fact, for this implementation, even +# word order is unimportant). +# Logical Hebrew - "windows-1255" - normal, naturally ordered text. +# +# "ISO-8859-8-I" is a subset of windows-1255 and doesn't need to be +# specifically identified. +# "x-mac-hebrew" is also identified as windows-1255. A text in x-mac-hebrew +# that contain special punctuation marks or diacritics is displayed with +# some unconverted characters showing as question marks. This problem might +# be corrected using another model prober for x-mac-hebrew. Due to the fact +# that x-mac-hebrew texts are so rare, writing another model prober isn't +# worth the effort and performance hit. +# +#### The Prober #### +# +# The prober is divided between two SBCharSetProbers and a HebrewProber, +# all of which are managed, created, fed data, inquired and deleted by the +# SBCSGroupProber. The two SBCharSetProbers identify that the text is in +# fact some kind of Hebrew, Logical or Visual. The final decision about which +# one is it is made by the HebrewProber by combining final-letter scores +# with the scores of the two SBCharSetProbers to produce a final answer. +# +# The SBCSGroupProber is responsible for stripping the original text of HTML +# tags, English characters, numbers, low-ASCII punctuation characters, spaces +# and new lines. It reduces any sequence of such characters to a single space. +# The buffer fed to each prober in the SBCS group prober is pure text in +# high-ASCII. +# The two SBCharSetProbers (model probers) share the same language model: +# Win1255Model. +# The first SBCharSetProber uses the model normally as any other +# SBCharSetProber does, to recognize windows-1255, upon which this model was +# built. The second SBCharSetProber is told to make the pair-of-letter +# lookup in the language model backwards. This in practice exactly simulates +# a visual Hebrew model using the windows-1255 logical Hebrew model. +# +# The HebrewProber is not using any language model. All it does is look for +# final-letter evidence suggesting the text is either logical Hebrew or visual +# Hebrew. Disjointed from the model probers, the results of the HebrewProber +# alone are meaningless. HebrewProber always returns 0.00 as confidence +# since it never identifies a charset by itself. Instead, the pointer to the +# HebrewProber is passed to the model probers as a helper "Name Prober". +# When the Group prober receives a positive identification from any prober, +# it asks for the name of the charset identified. If the prober queried is a +# Hebrew model prober, the model prober forwards the call to the +# HebrewProber to make the final decision. In the HebrewProber, the +# decision is made according to the final-letters scores maintained and Both +# model probers scores. The answer is returned in the form of the name of the +# charset identified, either "windows-1255" or "ISO-8859-8". + +class HebrewProber(CharSetProber): + # windows-1255 / ISO-8859-8 code points of interest + FINAL_KAF = 0xea + NORMAL_KAF = 0xeb + FINAL_MEM = 0xed + NORMAL_MEM = 0xee + FINAL_NUN = 0xef + NORMAL_NUN = 0xf0 + FINAL_PE = 0xf3 + NORMAL_PE = 0xf4 + FINAL_TSADI = 0xf5 + NORMAL_TSADI = 0xf6 + + # Minimum Visual vs Logical final letter score difference. + # If the difference is below this, don't rely solely on the final letter score + # distance. + MIN_FINAL_CHAR_DISTANCE = 5 + + # Minimum Visual vs Logical model score difference. + # If the difference is below this, don't rely at all on the model score + # distance. + MIN_MODEL_DISTANCE = 0.01 + + VISUAL_HEBREW_NAME = "ISO-8859-8" + LOGICAL_HEBREW_NAME = "windows-1255" + + def __init__(self): + super(HebrewProber, self).__init__() + self._final_char_logical_score = None + self._final_char_visual_score = None + self._prev = None + self._before_prev = None + self._logical_prober = None + self._visual_prober = None + self.reset() + + def reset(self): + self._final_char_logical_score = 0 + self._final_char_visual_score = 0 + # The two last characters seen in the previous buffer, + # mPrev and mBeforePrev are initialized to space in order to simulate + # a word delimiter at the beginning of the data + self._prev = ' ' + self._before_prev = ' ' + # These probers are owned by the group prober. + + def set_model_probers(self, logicalProber, visualProber): + self._logical_prober = logicalProber + self._visual_prober = visualProber + + def is_final(self, c): + return c in [self.FINAL_KAF, self.FINAL_MEM, self.FINAL_NUN, + self.FINAL_PE, self.FINAL_TSADI] + + def is_non_final(self, c): + # The normal Tsadi is not a good Non-Final letter due to words like + # 'lechotet' (to chat) containing an apostrophe after the tsadi. This + # apostrophe is converted to a space in FilterWithoutEnglishLetters + # causing the Non-Final tsadi to appear at an end of a word even + # though this is not the case in the original text. + # The letters Pe and Kaf rarely display a related behavior of not being + # a good Non-Final letter. Words like 'Pop', 'Winamp' and 'Mubarak' + # for example legally end with a Non-Final Pe or Kaf. However, the + # benefit of these letters as Non-Final letters outweighs the damage + # since these words are quite rare. + return c in [self.NORMAL_KAF, self.NORMAL_MEM, + self.NORMAL_NUN, self.NORMAL_PE] + + def feed(self, byte_str): + # Final letter analysis for logical-visual decision. + # Look for evidence that the received buffer is either logical Hebrew + # or visual Hebrew. + # The following cases are checked: + # 1) A word longer than 1 letter, ending with a final letter. This is + # an indication that the text is laid out "naturally" since the + # final letter really appears at the end. +1 for logical score. + # 2) A word longer than 1 letter, ending with a Non-Final letter. In + # normal Hebrew, words ending with Kaf, Mem, Nun, Pe or Tsadi, + # should not end with the Non-Final form of that letter. Exceptions + # to this rule are mentioned above in isNonFinal(). This is an + # indication that the text is laid out backwards. +1 for visual + # score + # 3) A word longer than 1 letter, starting with a final letter. Final + # letters should not appear at the beginning of a word. This is an + # indication that the text is laid out backwards. +1 for visual + # score. + # + # The visual score and logical score are accumulated throughout the + # text and are finally checked against each other in GetCharSetName(). + # No checking for final letters in the middle of words is done since + # that case is not an indication for either Logical or Visual text. + # + # We automatically filter out all 7-bit characters (replace them with + # spaces) so the word boundary detection works properly. [MAP] + + if self.state == ProbingState.NOT_ME: + # Both model probers say it's not them. No reason to continue. + return ProbingState.NOT_ME + + byte_str = self.filter_high_byte_only(byte_str) + + for cur in byte_str: + if cur == ' ': + # We stand on a space - a word just ended + if self._before_prev != ' ': + # next-to-last char was not a space so self._prev is not a + # 1 letter word + if self.is_final(self._prev): + # case (1) [-2:not space][-1:final letter][cur:space] + self._final_char_logical_score += 1 + elif self.is_non_final(self._prev): + # case (2) [-2:not space][-1:Non-Final letter][ + # cur:space] + self._final_char_visual_score += 1 + else: + # Not standing on a space + if ((self._before_prev == ' ') and + (self.is_final(self._prev)) and (cur != ' ')): + # case (3) [-2:space][-1:final letter][cur:not space] + self._final_char_visual_score += 1 + self._before_prev = self._prev + self._prev = cur + + # Forever detecting, till the end or until both model probers return + # ProbingState.NOT_ME (handled above) + return ProbingState.DETECTING + + @property + def charset_name(self): + # Make the decision: is it Logical or Visual? + # If the final letter score distance is dominant enough, rely on it. + finalsub = self._final_char_logical_score - self._final_char_visual_score + if finalsub >= self.MIN_FINAL_CHAR_DISTANCE: + return self.LOGICAL_HEBREW_NAME + if finalsub <= -self.MIN_FINAL_CHAR_DISTANCE: + return self.VISUAL_HEBREW_NAME + + # It's not dominant enough, try to rely on the model scores instead. + modelsub = (self._logical_prober.get_confidence() + - self._visual_prober.get_confidence()) + if modelsub > self.MIN_MODEL_DISTANCE: + return self.LOGICAL_HEBREW_NAME + if modelsub < -self.MIN_MODEL_DISTANCE: + return self.VISUAL_HEBREW_NAME + + # Still no good, back to final letter distance, maybe it'll save the + # day. + if finalsub < 0.0: + return self.VISUAL_HEBREW_NAME + + # (finalsub > 0 - Logical) or (don't know what to do) default to + # Logical. + return self.LOGICAL_HEBREW_NAME + + @property + def language(self): + return 'Hebrew' + + @property + def state(self): + # Remain active as long as any of the model probers are active. + if (self._logical_prober.state == ProbingState.NOT_ME) and \ + (self._visual_prober.state == ProbingState.NOT_ME): + return ProbingState.NOT_ME + return ProbingState.DETECTING diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/jisfreq.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/jisfreq.py new file mode 100644 index 00000000..83fc082b --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/jisfreq.py @@ -0,0 +1,325 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +# Sampling from about 20M text materials include literature and computer technology +# +# Japanese frequency table, applied to both S-JIS and EUC-JP +# They are sorted in order. + +# 128 --> 0.77094 +# 256 --> 0.85710 +# 512 --> 0.92635 +# 1024 --> 0.97130 +# 2048 --> 0.99431 +# +# Ideal Distribution Ratio = 0.92635 / (1-0.92635) = 12.58 +# Random Distribution Ration = 512 / (2965+62+83+86-512) = 0.191 +# +# Typical Distribution Ratio, 25% of IDR + +JIS_TYPICAL_DISTRIBUTION_RATIO = 3.0 + +# Char to FreqOrder table , +JIS_TABLE_SIZE = 4368 + +JIS_CHAR_TO_FREQ_ORDER = ( + 40, 1, 6, 182, 152, 180, 295,2127, 285, 381,3295,4304,3068,4606,3165,3510, # 16 +3511,1822,2785,4607,1193,2226,5070,4608, 171,2996,1247, 18, 179,5071, 856,1661, # 32 +1262,5072, 619, 127,3431,3512,3230,1899,1700, 232, 228,1294,1298, 284, 283,2041, # 48 +2042,1061,1062, 48, 49, 44, 45, 433, 434,1040,1041, 996, 787,2997,1255,4305, # 64 +2108,4609,1684,1648,5073,5074,5075,5076,5077,5078,3687,5079,4610,5080,3927,3928, # 80 +5081,3296,3432, 290,2285,1471,2187,5082,2580,2825,1303,2140,1739,1445,2691,3375, # 96 +1691,3297,4306,4307,4611, 452,3376,1182,2713,3688,3069,4308,5083,5084,5085,5086, # 112 +5087,5088,5089,5090,5091,5092,5093,5094,5095,5096,5097,5098,5099,5100,5101,5102, # 128 +5103,5104,5105,5106,5107,5108,5109,5110,5111,5112,4097,5113,5114,5115,5116,5117, # 144 +5118,5119,5120,5121,5122,5123,5124,5125,5126,5127,5128,5129,5130,5131,5132,5133, # 160 +5134,5135,5136,5137,5138,5139,5140,5141,5142,5143,5144,5145,5146,5147,5148,5149, # 176 +5150,5151,5152,4612,5153,5154,5155,5156,5157,5158,5159,5160,5161,5162,5163,5164, # 192 +5165,5166,5167,5168,5169,5170,5171,5172,5173,5174,5175,1472, 598, 618, 820,1205, # 208 +1309,1412,1858,1307,1692,5176,5177,5178,5179,5180,5181,5182,1142,1452,1234,1172, # 224 +1875,2043,2149,1793,1382,2973, 925,2404,1067,1241, 960,1377,2935,1491, 919,1217, # 240 +1865,2030,1406,1499,2749,4098,5183,5184,5185,5186,5187,5188,2561,4099,3117,1804, # 256 +2049,3689,4309,3513,1663,5189,3166,3118,3298,1587,1561,3433,5190,3119,1625,2998, # 272 +3299,4613,1766,3690,2786,4614,5191,5192,5193,5194,2161, 26,3377, 2,3929, 20, # 288 +3691, 47,4100, 50, 17, 16, 35, 268, 27, 243, 42, 155, 24, 154, 29, 184, # 304 + 4, 91, 14, 92, 53, 396, 33, 289, 9, 37, 64, 620, 21, 39, 321, 5, # 320 + 12, 11, 52, 13, 3, 208, 138, 0, 7, 60, 526, 141, 151,1069, 181, 275, # 336 +1591, 83, 132,1475, 126, 331, 829, 15, 69, 160, 59, 22, 157, 55,1079, 312, # 352 + 109, 38, 23, 25, 10, 19, 79,5195, 61, 382,1124, 8, 30,5196,5197,5198, # 368 +5199,5200,5201,5202,5203,5204,5205,5206, 89, 62, 74, 34,2416, 112, 139, 196, # 384 + 271, 149, 84, 607, 131, 765, 46, 88, 153, 683, 76, 874, 101, 258, 57, 80, # 400 + 32, 364, 121,1508, 169,1547, 68, 235, 145,2999, 41, 360,3027, 70, 63, 31, # 416 + 43, 259, 262,1383, 99, 533, 194, 66, 93, 846, 217, 192, 56, 106, 58, 565, # 432 + 280, 272, 311, 256, 146, 82, 308, 71, 100, 128, 214, 655, 110, 261, 104,1140, # 448 + 54, 51, 36, 87, 67,3070, 185,2618,2936,2020, 28,1066,2390,2059,5207,5208, # 464 +5209,5210,5211,5212,5213,5214,5215,5216,4615,5217,5218,5219,5220,5221,5222,5223, # 480 +5224,5225,5226,5227,5228,5229,5230,5231,5232,5233,5234,5235,5236,3514,5237,5238, # 496 +5239,5240,5241,5242,5243,5244,2297,2031,4616,4310,3692,5245,3071,5246,3598,5247, # 512 +4617,3231,3515,5248,4101,4311,4618,3808,4312,4102,5249,4103,4104,3599,5250,5251, # 528 +5252,5253,5254,5255,5256,5257,5258,5259,5260,5261,5262,5263,5264,5265,5266,5267, # 544 +5268,5269,5270,5271,5272,5273,5274,5275,5276,5277,5278,5279,5280,5281,5282,5283, # 560 +5284,5285,5286,5287,5288,5289,5290,5291,5292,5293,5294,5295,5296,5297,5298,5299, # 576 +5300,5301,5302,5303,5304,5305,5306,5307,5308,5309,5310,5311,5312,5313,5314,5315, # 592 +5316,5317,5318,5319,5320,5321,5322,5323,5324,5325,5326,5327,5328,5329,5330,5331, # 608 +5332,5333,5334,5335,5336,5337,5338,5339,5340,5341,5342,5343,5344,5345,5346,5347, # 624 +5348,5349,5350,5351,5352,5353,5354,5355,5356,5357,5358,5359,5360,5361,5362,5363, # 640 +5364,5365,5366,5367,5368,5369,5370,5371,5372,5373,5374,5375,5376,5377,5378,5379, # 656 +5380,5381, 363, 642,2787,2878,2788,2789,2316,3232,2317,3434,2011, 165,1942,3930, # 672 +3931,3932,3933,5382,4619,5383,4620,5384,5385,5386,5387,5388,5389,5390,5391,5392, # 688 +5393,5394,5395,5396,5397,5398,5399,5400,5401,5402,5403,5404,5405,5406,5407,5408, # 704 +5409,5410,5411,5412,5413,5414,5415,5416,5417,5418,5419,5420,5421,5422,5423,5424, # 720 +5425,5426,5427,5428,5429,5430,5431,5432,5433,5434,5435,5436,5437,5438,5439,5440, # 736 +5441,5442,5443,5444,5445,5446,5447,5448,5449,5450,5451,5452,5453,5454,5455,5456, # 752 +5457,5458,5459,5460,5461,5462,5463,5464,5465,5466,5467,5468,5469,5470,5471,5472, # 768 +5473,5474,5475,5476,5477,5478,5479,5480,5481,5482,5483,5484,5485,5486,5487,5488, # 784 +5489,5490,5491,5492,5493,5494,5495,5496,5497,5498,5499,5500,5501,5502,5503,5504, # 800 +5505,5506,5507,5508,5509,5510,5511,5512,5513,5514,5515,5516,5517,5518,5519,5520, # 816 +5521,5522,5523,5524,5525,5526,5527,5528,5529,5530,5531,5532,5533,5534,5535,5536, # 832 +5537,5538,5539,5540,5541,5542,5543,5544,5545,5546,5547,5548,5549,5550,5551,5552, # 848 +5553,5554,5555,5556,5557,5558,5559,5560,5561,5562,5563,5564,5565,5566,5567,5568, # 864 +5569,5570,5571,5572,5573,5574,5575,5576,5577,5578,5579,5580,5581,5582,5583,5584, # 880 +5585,5586,5587,5588,5589,5590,5591,5592,5593,5594,5595,5596,5597,5598,5599,5600, # 896 +5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,5613,5614,5615,5616, # 912 +5617,5618,5619,5620,5621,5622,5623,5624,5625,5626,5627,5628,5629,5630,5631,5632, # 928 +5633,5634,5635,5636,5637,5638,5639,5640,5641,5642,5643,5644,5645,5646,5647,5648, # 944 +5649,5650,5651,5652,5653,5654,5655,5656,5657,5658,5659,5660,5661,5662,5663,5664, # 960 +5665,5666,5667,5668,5669,5670,5671,5672,5673,5674,5675,5676,5677,5678,5679,5680, # 976 +5681,5682,5683,5684,5685,5686,5687,5688,5689,5690,5691,5692,5693,5694,5695,5696, # 992 +5697,5698,5699,5700,5701,5702,5703,5704,5705,5706,5707,5708,5709,5710,5711,5712, # 1008 +5713,5714,5715,5716,5717,5718,5719,5720,5721,5722,5723,5724,5725,5726,5727,5728, # 1024 +5729,5730,5731,5732,5733,5734,5735,5736,5737,5738,5739,5740,5741,5742,5743,5744, # 1040 +5745,5746,5747,5748,5749,5750,5751,5752,5753,5754,5755,5756,5757,5758,5759,5760, # 1056 +5761,5762,5763,5764,5765,5766,5767,5768,5769,5770,5771,5772,5773,5774,5775,5776, # 1072 +5777,5778,5779,5780,5781,5782,5783,5784,5785,5786,5787,5788,5789,5790,5791,5792, # 1088 +5793,5794,5795,5796,5797,5798,5799,5800,5801,5802,5803,5804,5805,5806,5807,5808, # 1104 +5809,5810,5811,5812,5813,5814,5815,5816,5817,5818,5819,5820,5821,5822,5823,5824, # 1120 +5825,5826,5827,5828,5829,5830,5831,5832,5833,5834,5835,5836,5837,5838,5839,5840, # 1136 +5841,5842,5843,5844,5845,5846,5847,5848,5849,5850,5851,5852,5853,5854,5855,5856, # 1152 +5857,5858,5859,5860,5861,5862,5863,5864,5865,5866,5867,5868,5869,5870,5871,5872, # 1168 +5873,5874,5875,5876,5877,5878,5879,5880,5881,5882,5883,5884,5885,5886,5887,5888, # 1184 +5889,5890,5891,5892,5893,5894,5895,5896,5897,5898,5899,5900,5901,5902,5903,5904, # 1200 +5905,5906,5907,5908,5909,5910,5911,5912,5913,5914,5915,5916,5917,5918,5919,5920, # 1216 +5921,5922,5923,5924,5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935,5936, # 1232 +5937,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5951,5952, # 1248 +5953,5954,5955,5956,5957,5958,5959,5960,5961,5962,5963,5964,5965,5966,5967,5968, # 1264 +5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979,5980,5981,5982,5983,5984, # 1280 +5985,5986,5987,5988,5989,5990,5991,5992,5993,5994,5995,5996,5997,5998,5999,6000, # 1296 +6001,6002,6003,6004,6005,6006,6007,6008,6009,6010,6011,6012,6013,6014,6015,6016, # 1312 +6017,6018,6019,6020,6021,6022,6023,6024,6025,6026,6027,6028,6029,6030,6031,6032, # 1328 +6033,6034,6035,6036,6037,6038,6039,6040,6041,6042,6043,6044,6045,6046,6047,6048, # 1344 +6049,6050,6051,6052,6053,6054,6055,6056,6057,6058,6059,6060,6061,6062,6063,6064, # 1360 +6065,6066,6067,6068,6069,6070,6071,6072,6073,6074,6075,6076,6077,6078,6079,6080, # 1376 +6081,6082,6083,6084,6085,6086,6087,6088,6089,6090,6091,6092,6093,6094,6095,6096, # 1392 +6097,6098,6099,6100,6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,6111,6112, # 1408 +6113,6114,2044,2060,4621, 997,1235, 473,1186,4622, 920,3378,6115,6116, 379,1108, # 1424 +4313,2657,2735,3934,6117,3809, 636,3233, 573,1026,3693,3435,2974,3300,2298,4105, # 1440 + 854,2937,2463, 393,2581,2417, 539, 752,1280,2750,2480, 140,1161, 440, 708,1569, # 1456 + 665,2497,1746,1291,1523,3000, 164,1603, 847,1331, 537,1997, 486, 508,1693,2418, # 1472 +1970,2227, 878,1220, 299,1030, 969, 652,2751, 624,1137,3301,2619, 65,3302,2045, # 1488 +1761,1859,3120,1930,3694,3516, 663,1767, 852, 835,3695, 269, 767,2826,2339,1305, # 1504 + 896,1150, 770,1616,6118, 506,1502,2075,1012,2519, 775,2520,2975,2340,2938,4314, # 1520 +3028,2086,1224,1943,2286,6119,3072,4315,2240,1273,1987,3935,1557, 175, 597, 985, # 1536 +3517,2419,2521,1416,3029, 585, 938,1931,1007,1052,1932,1685,6120,3379,4316,4623, # 1552 + 804, 599,3121,1333,2128,2539,1159,1554,2032,3810, 687,2033,2904, 952, 675,1467, # 1568 +3436,6121,2241,1096,1786,2440,1543,1924, 980,1813,2228, 781,2692,1879, 728,1918, # 1584 +3696,4624, 548,1950,4625,1809,1088,1356,3303,2522,1944, 502, 972, 373, 513,2827, # 1600 + 586,2377,2391,1003,1976,1631,6122,2464,1084, 648,1776,4626,2141, 324, 962,2012, # 1616 +2177,2076,1384, 742,2178,1448,1173,1810, 222, 102, 301, 445, 125,2420, 662,2498, # 1632 + 277, 200,1476,1165,1068, 224,2562,1378,1446, 450,1880, 659, 791, 582,4627,2939, # 1648 +3936,1516,1274, 555,2099,3697,1020,1389,1526,3380,1762,1723,1787,2229, 412,2114, # 1664 +1900,2392,3518, 512,2597, 427,1925,2341,3122,1653,1686,2465,2499, 697, 330, 273, # 1680 + 380,2162, 951, 832, 780, 991,1301,3073, 965,2270,3519, 668,2523,2636,1286, 535, # 1696 +1407, 518, 671, 957,2658,2378, 267, 611,2197,3030,6123, 248,2299, 967,1799,2356, # 1712 + 850,1418,3437,1876,1256,1480,2828,1718,6124,6125,1755,1664,2405,6126,4628,2879, # 1728 +2829, 499,2179, 676,4629, 557,2329,2214,2090, 325,3234, 464, 811,3001, 992,2342, # 1744 +2481,1232,1469, 303,2242, 466,1070,2163, 603,1777,2091,4630,2752,4631,2714, 322, # 1760 +2659,1964,1768, 481,2188,1463,2330,2857,3600,2092,3031,2421,4632,2318,2070,1849, # 1776 +2598,4633,1302,2254,1668,1701,2422,3811,2905,3032,3123,2046,4106,1763,1694,4634, # 1792 +1604, 943,1724,1454, 917, 868,2215,1169,2940, 552,1145,1800,1228,1823,1955, 316, # 1808 +1080,2510, 361,1807,2830,4107,2660,3381,1346,1423,1134,4108,6127, 541,1263,1229, # 1824 +1148,2540, 545, 465,1833,2880,3438,1901,3074,2482, 816,3937, 713,1788,2500, 122, # 1840 +1575, 195,1451,2501,1111,6128, 859, 374,1225,2243,2483,4317, 390,1033,3439,3075, # 1856 +2524,1687, 266, 793,1440,2599, 946, 779, 802, 507, 897,1081, 528,2189,1292, 711, # 1872 +1866,1725,1167,1640, 753, 398,2661,1053, 246, 348,4318, 137,1024,3440,1600,2077, # 1888 +2129, 825,4319, 698, 238, 521, 187,2300,1157,2423,1641,1605,1464,1610,1097,2541, # 1904 +1260,1436, 759,2255,1814,2150, 705,3235, 409,2563,3304, 561,3033,2005,2564, 726, # 1920 +1956,2343,3698,4109, 949,3812,3813,3520,1669, 653,1379,2525, 881,2198, 632,2256, # 1936 +1027, 778,1074, 733,1957, 514,1481,2466, 554,2180, 702,3938,1606,1017,1398,6129, # 1952 +1380,3521, 921, 993,1313, 594, 449,1489,1617,1166, 768,1426,1360, 495,1794,3601, # 1968 +1177,3602,1170,4320,2344, 476, 425,3167,4635,3168,1424, 401,2662,1171,3382,1998, # 1984 +1089,4110, 477,3169, 474,6130,1909, 596,2831,1842, 494, 693,1051,1028,1207,3076, # 2000 + 606,2115, 727,2790,1473,1115, 743,3522, 630, 805,1532,4321,2021, 366,1057, 838, # 2016 + 684,1114,2142,4322,2050,1492,1892,1808,2271,3814,2424,1971,1447,1373,3305,1090, # 2032 +1536,3939,3523,3306,1455,2199, 336, 369,2331,1035, 584,2393, 902, 718,2600,6131, # 2048 +2753, 463,2151,1149,1611,2467, 715,1308,3124,1268, 343,1413,3236,1517,1347,2663, # 2064 +2093,3940,2022,1131,1553,2100,2941,1427,3441,2942,1323,2484,6132,1980, 872,2368, # 2080 +2441,2943, 320,2369,2116,1082, 679,1933,3941,2791,3815, 625,1143,2023, 422,2200, # 2096 +3816,6133, 730,1695, 356,2257,1626,2301,2858,2637,1627,1778, 937, 883,2906,2693, # 2112 +3002,1769,1086, 400,1063,1325,3307,2792,4111,3077, 456,2345,1046, 747,6134,1524, # 2128 + 884,1094,3383,1474,2164,1059, 974,1688,2181,2258,1047, 345,1665,1187, 358, 875, # 2144 +3170, 305, 660,3524,2190,1334,1135,3171,1540,1649,2542,1527, 927, 968,2793, 885, # 2160 +1972,1850, 482, 500,2638,1218,1109,1085,2543,1654,2034, 876, 78,2287,1482,1277, # 2176 + 861,1675,1083,1779, 724,2754, 454, 397,1132,1612,2332, 893, 672,1237, 257,2259, # 2192 +2370, 135,3384, 337,2244, 547, 352, 340, 709,2485,1400, 788,1138,2511, 540, 772, # 2208 +1682,2260,2272,2544,2013,1843,1902,4636,1999,1562,2288,4637,2201,1403,1533, 407, # 2224 + 576,3308,1254,2071, 978,3385, 170, 136,1201,3125,2664,3172,2394, 213, 912, 873, # 2240 +3603,1713,2202, 699,3604,3699, 813,3442, 493, 531,1054, 468,2907,1483, 304, 281, # 2256 +4112,1726,1252,2094, 339,2319,2130,2639, 756,1563,2944, 748, 571,2976,1588,2425, # 2272 +2715,1851,1460,2426,1528,1392,1973,3237, 288,3309, 685,3386, 296, 892,2716,2216, # 2288 +1570,2245, 722,1747,2217, 905,3238,1103,6135,1893,1441,1965, 251,1805,2371,3700, # 2304 +2601,1919,1078, 75,2182,1509,1592,1270,2640,4638,2152,6136,3310,3817, 524, 706, # 2320 +1075, 292,3818,1756,2602, 317, 98,3173,3605,3525,1844,2218,3819,2502, 814, 567, # 2336 + 385,2908,1534,6137, 534,1642,3239, 797,6138,1670,1529, 953,4323, 188,1071, 538, # 2352 + 178, 729,3240,2109,1226,1374,2000,2357,2977, 731,2468,1116,2014,2051,6139,1261, # 2368 +1593, 803,2859,2736,3443, 556, 682, 823,1541,6140,1369,2289,1706,2794, 845, 462, # 2384 +2603,2665,1361, 387, 162,2358,1740, 739,1770,1720,1304,1401,3241,1049, 627,1571, # 2400 +2427,3526,1877,3942,1852,1500, 431,1910,1503, 677, 297,2795, 286,1433,1038,1198, # 2416 +2290,1133,1596,4113,4639,2469,1510,1484,3943,6141,2442, 108, 712,4640,2372, 866, # 2432 +3701,2755,3242,1348, 834,1945,1408,3527,2395,3243,1811, 824, 994,1179,2110,1548, # 2448 +1453, 790,3003, 690,4324,4325,2832,2909,3820,1860,3821, 225,1748, 310, 346,1780, # 2464 +2470, 821,1993,2717,2796, 828, 877,3528,2860,2471,1702,2165,2910,2486,1789, 453, # 2480 + 359,2291,1676, 73,1164,1461,1127,3311, 421, 604, 314,1037, 589, 116,2487, 737, # 2496 + 837,1180, 111, 244, 735,6142,2261,1861,1362, 986, 523, 418, 581,2666,3822, 103, # 2512 + 855, 503,1414,1867,2488,1091, 657,1597, 979, 605,1316,4641,1021,2443,2078,2001, # 2528 +1209, 96, 587,2166,1032, 260,1072,2153, 173, 94, 226,3244, 819,2006,4642,4114, # 2544 +2203, 231,1744, 782, 97,2667, 786,3387, 887, 391, 442,2219,4326,1425,6143,2694, # 2560 + 633,1544,1202, 483,2015, 592,2052,1958,2472,1655, 419, 129,4327,3444,3312,1714, # 2576 +1257,3078,4328,1518,1098, 865,1310,1019,1885,1512,1734, 469,2444, 148, 773, 436, # 2592 +1815,1868,1128,1055,4329,1245,2756,3445,2154,1934,1039,4643, 579,1238, 932,2320, # 2608 + 353, 205, 801, 115,2428, 944,2321,1881, 399,2565,1211, 678, 766,3944, 335,2101, # 2624 +1459,1781,1402,3945,2737,2131,1010, 844, 981,1326,1013, 550,1816,1545,2620,1335, # 2640 +1008, 371,2881, 936,1419,1613,3529,1456,1395,2273,1834,2604,1317,2738,2503, 416, # 2656 +1643,4330, 806,1126, 229, 591,3946,1314,1981,1576,1837,1666, 347,1790, 977,3313, # 2672 + 764,2861,1853, 688,2429,1920,1462, 77, 595, 415,2002,3034, 798,1192,4115,6144, # 2688 +2978,4331,3035,2695,2582,2072,2566, 430,2430,1727, 842,1396,3947,3702, 613, 377, # 2704 + 278, 236,1417,3388,3314,3174, 757,1869, 107,3530,6145,1194, 623,2262, 207,1253, # 2720 +2167,3446,3948, 492,1117,1935, 536,1838,2757,1246,4332, 696,2095,2406,1393,1572, # 2736 +3175,1782, 583, 190, 253,1390,2230, 830,3126,3389, 934,3245,1703,1749,2979,1870, # 2752 +2545,1656,2204, 869,2346,4116,3176,1817, 496,1764,4644, 942,1504, 404,1903,1122, # 2768 +1580,3606,2945,1022, 515, 372,1735, 955,2431,3036,6146,2797,1110,2302,2798, 617, # 2784 +6147, 441, 762,1771,3447,3607,3608,1904, 840,3037, 86, 939,1385, 572,1370,2445, # 2800 +1336, 114,3703, 898, 294, 203,3315, 703,1583,2274, 429, 961,4333,1854,1951,3390, # 2816 +2373,3704,4334,1318,1381, 966,1911,2322,1006,1155, 309, 989, 458,2718,1795,1372, # 2832 +1203, 252,1689,1363,3177, 517,1936, 168,1490, 562, 193,3823,1042,4117,1835, 551, # 2848 + 470,4645, 395, 489,3448,1871,1465,2583,2641, 417,1493, 279,1295, 511,1236,1119, # 2864 + 72,1231,1982,1812,3004, 871,1564, 984,3449,1667,2696,2096,4646,2347,2833,1673, # 2880 +3609, 695,3246,2668, 807,1183,4647, 890, 388,2333,1801,1457,2911,1765,1477,1031, # 2896 +3316,3317,1278,3391,2799,2292,2526, 163,3450,4335,2669,1404,1802,6148,2323,2407, # 2912 +1584,1728,1494,1824,1269, 298, 909,3318,1034,1632, 375, 776,1683,2061, 291, 210, # 2928 +1123, 809,1249,1002,2642,3038, 206,1011,2132, 144, 975, 882,1565, 342, 667, 754, # 2944 +1442,2143,1299,2303,2062, 447, 626,2205,1221,2739,2912,1144,1214,2206,2584, 760, # 2960 +1715, 614, 950,1281,2670,2621, 810, 577,1287,2546,4648, 242,2168, 250,2643, 691, # 2976 + 123,2644, 647, 313,1029, 689,1357,2946,1650, 216, 771,1339,1306, 808,2063, 549, # 2992 + 913,1371,2913,2914,6149,1466,1092,1174,1196,1311,2605,2396,1783,1796,3079, 406, # 3008 +2671,2117,3949,4649, 487,1825,2220,6150,2915, 448,2348,1073,6151,2397,1707, 130, # 3024 + 900,1598, 329, 176,1959,2527,1620,6152,2275,4336,3319,1983,2191,3705,3610,2155, # 3040 +3706,1912,1513,1614,6153,1988, 646, 392,2304,1589,3320,3039,1826,1239,1352,1340, # 3056 +2916, 505,2567,1709,1437,2408,2547, 906,6154,2672, 384,1458,1594,1100,1329, 710, # 3072 + 423,3531,2064,2231,2622,1989,2673,1087,1882, 333, 841,3005,1296,2882,2379, 580, # 3088 +1937,1827,1293,2585, 601, 574, 249,1772,4118,2079,1120, 645, 901,1176,1690, 795, # 3104 +2207, 478,1434, 516,1190,1530, 761,2080, 930,1264, 355, 435,1552, 644,1791, 987, # 3120 + 220,1364,1163,1121,1538, 306,2169,1327,1222, 546,2645, 218, 241, 610,1704,3321, # 3136 +1984,1839,1966,2528, 451,6155,2586,3707,2568, 907,3178, 254,2947, 186,1845,4650, # 3152 + 745, 432,1757, 428,1633, 888,2246,2221,2489,3611,2118,1258,1265, 956,3127,1784, # 3168 +4337,2490, 319, 510, 119, 457,3612, 274,2035,2007,4651,1409,3128, 970,2758, 590, # 3184 +2800, 661,2247,4652,2008,3950,1420,1549,3080,3322,3951,1651,1375,2111, 485,2491, # 3200 +1429,1156,6156,2548,2183,1495, 831,1840,2529,2446, 501,1657, 307,1894,3247,1341, # 3216 + 666, 899,2156,1539,2549,1559, 886, 349,2208,3081,2305,1736,3824,2170,2759,1014, # 3232 +1913,1386, 542,1397,2948, 490, 368, 716, 362, 159, 282,2569,1129,1658,1288,1750, # 3248 +2674, 276, 649,2016, 751,1496, 658,1818,1284,1862,2209,2087,2512,3451, 622,2834, # 3264 + 376, 117,1060,2053,1208,1721,1101,1443, 247,1250,3179,1792,3952,2760,2398,3953, # 3280 +6157,2144,3708, 446,2432,1151,2570,3452,2447,2761,2835,1210,2448,3082, 424,2222, # 3296 +1251,2449,2119,2836, 504,1581,4338, 602, 817, 857,3825,2349,2306, 357,3826,1470, # 3312 +1883,2883, 255, 958, 929,2917,3248, 302,4653,1050,1271,1751,2307,1952,1430,2697, # 3328 +2719,2359, 354,3180, 777, 158,2036,4339,1659,4340,4654,2308,2949,2248,1146,2232, # 3344 +3532,2720,1696,2623,3827,6158,3129,1550,2698,1485,1297,1428, 637, 931,2721,2145, # 3360 + 914,2550,2587, 81,2450, 612, 827,2646,1242,4655,1118,2884, 472,1855,3181,3533, # 3376 +3534, 569,1353,2699,1244,1758,2588,4119,2009,2762,2171,3709,1312,1531,6159,1152, # 3392 +1938, 134,1830, 471,3710,2276,1112,1535,3323,3453,3535, 982,1337,2950, 488, 826, # 3408 + 674,1058,1628,4120,2017, 522,2399, 211, 568,1367,3454, 350, 293,1872,1139,3249, # 3424 +1399,1946,3006,1300,2360,3324, 588, 736,6160,2606, 744, 669,3536,3828,6161,1358, # 3440 + 199, 723, 848, 933, 851,1939,1505,1514,1338,1618,1831,4656,1634,3613, 443,2740, # 3456 +3829, 717,1947, 491,1914,6162,2551,1542,4121,1025,6163,1099,1223, 198,3040,2722, # 3472 + 370, 410,1905,2589, 998,1248,3182,2380, 519,1449,4122,1710, 947, 928,1153,4341, # 3488 +2277, 344,2624,1511, 615, 105, 161,1212,1076,1960,3130,2054,1926,1175,1906,2473, # 3504 + 414,1873,2801,6164,2309, 315,1319,3325, 318,2018,2146,2157, 963, 631, 223,4342, # 3520 +4343,2675, 479,3711,1197,2625,3712,2676,2361,6165,4344,4123,6166,2451,3183,1886, # 3536 +2184,1674,1330,1711,1635,1506, 799, 219,3250,3083,3954,1677,3713,3326,2081,3614, # 3552 +1652,2073,4657,1147,3041,1752, 643,1961, 147,1974,3955,6167,1716,2037, 918,3007, # 3568 +1994, 120,1537, 118, 609,3184,4345, 740,3455,1219, 332,1615,3830,6168,1621,2980, # 3584 +1582, 783, 212, 553,2350,3714,1349,2433,2082,4124, 889,6169,2310,1275,1410, 973, # 3600 + 166,1320,3456,1797,1215,3185,2885,1846,2590,2763,4658, 629, 822,3008, 763, 940, # 3616 +1990,2862, 439,2409,1566,1240,1622, 926,1282,1907,2764, 654,2210,1607, 327,1130, # 3632 +3956,1678,1623,6170,2434,2192, 686, 608,3831,3715, 903,3957,3042,6171,2741,1522, # 3648 +1915,1105,1555,2552,1359, 323,3251,4346,3457, 738,1354,2553,2311,2334,1828,2003, # 3664 +3832,1753,2351,1227,6172,1887,4125,1478,6173,2410,1874,1712,1847, 520,1204,2607, # 3680 + 264,4659, 836,2677,2102, 600,4660,3833,2278,3084,6174,4347,3615,1342, 640, 532, # 3696 + 543,2608,1888,2400,2591,1009,4348,1497, 341,1737,3616,2723,1394, 529,3252,1321, # 3712 + 983,4661,1515,2120, 971,2592, 924, 287,1662,3186,4349,2700,4350,1519, 908,1948, # 3728 +2452, 156, 796,1629,1486,2223,2055, 694,4126,1259,1036,3392,1213,2249,2742,1889, # 3744 +1230,3958,1015, 910, 408, 559,3617,4662, 746, 725, 935,4663,3959,3009,1289, 563, # 3760 + 867,4664,3960,1567,2981,2038,2626, 988,2263,2381,4351, 143,2374, 704,1895,6175, # 3776 +1188,3716,2088, 673,3085,2362,4352, 484,1608,1921,2765,2918, 215, 904,3618,3537, # 3792 + 894, 509, 976,3043,2701,3961,4353,2837,2982, 498,6176,6177,1102,3538,1332,3393, # 3808 +1487,1636,1637, 233, 245,3962, 383, 650, 995,3044, 460,1520,1206,2352, 749,3327, # 3824 + 530, 700, 389,1438,1560,1773,3963,2264, 719,2951,2724,3834, 870,1832,1644,1000, # 3840 + 839,2474,3717, 197,1630,3394, 365,2886,3964,1285,2133, 734, 922, 818,1106, 732, # 3856 + 480,2083,1774,3458, 923,2279,1350, 221,3086, 85,2233,2234,3835,1585,3010,2147, # 3872 +1387,1705,2382,1619,2475, 133, 239,2802,1991,1016,2084,2383, 411,2838,1113, 651, # 3888 +1985,1160,3328, 990,1863,3087,1048,1276,2647, 265,2627,1599,3253,2056, 150, 638, # 3904 +2019, 656, 853, 326,1479, 680,1439,4354,1001,1759, 413,3459,3395,2492,1431, 459, # 3920 +4355,1125,3329,2265,1953,1450,2065,2863, 849, 351,2678,3131,3254,3255,1104,1577, # 3936 + 227,1351,1645,2453,2193,1421,2887, 812,2121, 634, 95,2435, 201,2312,4665,1646, # 3952 +1671,2743,1601,2554,2702,2648,2280,1315,1366,2089,3132,1573,3718,3965,1729,1189, # 3968 + 328,2679,1077,1940,1136, 558,1283, 964,1195, 621,2074,1199,1743,3460,3619,1896, # 3984 +1916,1890,3836,2952,1154,2112,1064, 862, 378,3011,2066,2113,2803,1568,2839,6178, # 4000 +3088,2919,1941,1660,2004,1992,2194, 142, 707,1590,1708,1624,1922,1023,1836,1233, # 4016 +1004,2313, 789, 741,3620,6179,1609,2411,1200,4127,3719,3720,4666,2057,3721, 593, # 4032 +2840, 367,2920,1878,6180,3461,1521, 628,1168, 692,2211,2649, 300, 720,2067,2571, # 4048 +2953,3396, 959,2504,3966,3539,3462,1977, 701,6181, 954,1043, 800, 681, 183,3722, # 4064 +1803,1730,3540,4128,2103, 815,2314, 174, 467, 230,2454,1093,2134, 755,3541,3397, # 4080 +1141,1162,6182,1738,2039, 270,3256,2513,1005,1647,2185,3837, 858,1679,1897,1719, # 4096 +2954,2324,1806, 402, 670, 167,4129,1498,2158,2104, 750,6183, 915, 189,1680,1551, # 4112 + 455,4356,1501,2455, 405,1095,2955, 338,1586,1266,1819, 570, 641,1324, 237,1556, # 4128 +2650,1388,3723,6184,1368,2384,1343,1978,3089,2436, 879,3724, 792,1191, 758,3012, # 4144 +1411,2135,1322,4357, 240,4667,1848,3725,1574,6185, 420,3045,1546,1391, 714,4358, # 4160 +1967, 941,1864, 863, 664, 426, 560,1731,2680,1785,2864,1949,2363, 403,3330,1415, # 4176 +1279,2136,1697,2335, 204, 721,2097,3838, 90,6186,2085,2505, 191,3967, 124,2148, # 4192 +1376,1798,1178,1107,1898,1405, 860,4359,1243,1272,2375,2983,1558,2456,1638, 113, # 4208 +3621, 578,1923,2609, 880, 386,4130, 784,2186,2266,1422,2956,2172,1722, 497, 263, # 4224 +2514,1267,2412,2610, 177,2703,3542, 774,1927,1344, 616,1432,1595,1018, 172,4360, # 4240 +2325, 911,4361, 438,1468,3622, 794,3968,2024,2173,1681,1829,2957, 945, 895,3090, # 4256 + 575,2212,2476, 475,2401,2681, 785,2744,1745,2293,2555,1975,3133,2865, 394,4668, # 4272 +3839, 635,4131, 639, 202,1507,2195,2766,1345,1435,2572,3726,1908,1184,1181,2457, # 4288 +3727,3134,4362, 843,2611, 437, 916,4669, 234, 769,1884,3046,3047,3623, 833,6187, # 4304 +1639,2250,2402,1355,1185,2010,2047, 999, 525,1732,1290,1488,2612, 948,1578,3728, # 4320 +2413,2477,1216,2725,2159, 334,3840,1328,3624,2921,1525,4132, 564,1056, 891,4363, # 4336 +1444,1698,2385,2251,3729,1365,2281,2235,1717,6188, 864,3841,2515, 444, 527,2767, # 4352 +2922,3625, 544, 461,6189, 566, 209,2437,3398,2098,1065,2068,3331,3626,3257,2137, # 4368 #last 512 +) + + diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/jpcntx.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/jpcntx.py new file mode 100644 index 00000000..20044e4b --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/jpcntx.py @@ -0,0 +1,233 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + + +# This is hiragana 2-char sequence table, the number in each cell represents its frequency category +jp2CharContext = ( +(0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1), +(2,4,0,4,0,3,0,4,0,3,4,4,4,2,4,3,3,4,3,2,3,3,4,2,3,3,3,2,4,1,4,3,3,1,5,4,3,4,3,4,3,5,3,0,3,5,4,2,0,3,1,0,3,3,0,3,3,0,1,1,0,4,3,0,3,3,0,4,0,2,0,3,5,5,5,5,4,0,4,1,0,3,4), +(0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2), +(0,4,0,5,0,5,0,4,0,4,5,4,4,3,5,3,5,1,5,3,4,3,4,4,3,4,3,3,4,3,5,4,4,3,5,5,3,5,5,5,3,5,5,3,4,5,5,3,1,3,2,0,3,4,0,4,2,0,4,2,1,5,3,2,3,5,0,4,0,2,0,5,4,4,5,4,5,0,4,0,0,4,4), +(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), +(0,3,0,4,0,3,0,3,0,4,5,4,3,3,3,3,4,3,5,4,4,3,5,4,4,3,4,3,4,4,4,4,5,3,4,4,3,4,5,5,4,5,5,1,4,5,4,3,0,3,3,1,3,3,0,4,4,0,3,3,1,5,3,3,3,5,0,4,0,3,0,4,4,3,4,3,3,0,4,1,1,3,4), +(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), +(0,4,0,3,0,3,0,4,0,3,4,4,3,2,2,1,2,1,3,1,3,3,3,3,3,4,3,1,3,3,5,3,3,0,4,3,0,5,4,3,3,5,4,4,3,4,4,5,0,1,2,0,1,2,0,2,2,0,1,0,0,5,2,2,1,4,0,3,0,1,0,4,4,3,5,4,3,0,2,1,0,4,3), +(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), +(0,3,0,5,0,4,0,2,1,4,4,2,4,1,4,2,4,2,4,3,3,3,4,3,3,3,3,1,4,2,3,3,3,1,4,4,1,1,1,4,3,3,2,0,2,4,3,2,0,3,3,0,3,1,1,0,0,0,3,3,0,4,2,2,3,4,0,4,0,3,0,4,4,5,3,4,4,0,3,0,0,1,4), +(1,4,0,4,0,4,0,4,0,3,5,4,4,3,4,3,5,4,3,3,4,3,5,4,4,4,4,3,4,2,4,3,3,1,5,4,3,2,4,5,4,5,5,4,4,5,4,4,0,3,2,2,3,3,0,4,3,1,3,2,1,4,3,3,4,5,0,3,0,2,0,4,5,5,4,5,4,0,4,0,0,5,4), +(0,5,0,5,0,4,0,3,0,4,4,3,4,3,3,3,4,0,4,4,4,3,4,3,4,3,3,1,4,2,4,3,4,0,5,4,1,4,5,4,4,5,3,2,4,3,4,3,2,4,1,3,3,3,2,3,2,0,4,3,3,4,3,3,3,4,0,4,0,3,0,4,5,4,4,4,3,0,4,1,0,1,3), +(0,3,1,4,0,3,0,2,0,3,4,4,3,1,4,2,3,3,4,3,4,3,4,3,4,4,3,2,3,1,5,4,4,1,4,4,3,5,4,4,3,5,5,4,3,4,4,3,1,2,3,1,2,2,0,3,2,0,3,1,0,5,3,3,3,4,3,3,3,3,4,4,4,4,5,4,2,0,3,3,2,4,3), +(0,2,0,3,0,1,0,1,0,0,3,2,0,0,2,0,1,0,2,1,3,3,3,1,2,3,1,0,1,0,4,2,1,1,3,3,0,4,3,3,1,4,3,3,0,3,3,2,0,0,0,0,1,0,0,2,0,0,0,0,0,4,1,0,2,3,2,2,2,1,3,3,3,4,4,3,2,0,3,1,0,3,3), +(0,4,0,4,0,3,0,3,0,4,4,4,3,3,3,3,3,3,4,3,4,2,4,3,4,3,3,2,4,3,4,5,4,1,4,5,3,5,4,5,3,5,4,0,3,5,5,3,1,3,3,2,2,3,0,3,4,1,3,3,2,4,3,3,3,4,0,4,0,3,0,4,5,4,4,5,3,0,4,1,0,3,4), +(0,2,0,3,0,3,0,0,0,2,2,2,1,0,1,0,0,0,3,0,3,0,3,0,1,3,1,0,3,1,3,3,3,1,3,3,3,0,1,3,1,3,4,0,0,3,1,1,0,3,2,0,0,0,0,1,3,0,1,0,0,3,3,2,0,3,0,0,0,0,0,3,4,3,4,3,3,0,3,0,0,2,3), +(2,3,0,3,0,2,0,1,0,3,3,4,3,1,3,1,1,1,3,1,4,3,4,3,3,3,0,0,3,1,5,4,3,1,4,3,2,5,5,4,4,4,4,3,3,4,4,4,0,2,1,1,3,2,0,1,2,0,0,1,0,4,1,3,3,3,0,3,0,1,0,4,4,4,5,5,3,0,2,0,0,4,4), +(0,2,0,1,0,3,1,3,0,2,3,3,3,0,3,1,0,0,3,0,3,2,3,1,3,2,1,1,0,0,4,2,1,0,2,3,1,4,3,2,0,4,4,3,1,3,1,3,0,1,0,0,1,0,0,0,1,0,0,0,0,4,1,1,1,2,0,3,0,0,0,3,4,2,4,3,2,0,1,0,0,3,3), +(0,1,0,4,0,5,0,4,0,2,4,4,2,3,3,2,3,3,5,3,3,3,4,3,4,2,3,0,4,3,3,3,4,1,4,3,2,1,5,5,3,4,5,1,3,5,4,2,0,3,3,0,1,3,0,4,2,0,1,3,1,4,3,3,3,3,0,3,0,1,0,3,4,4,4,5,5,0,3,0,1,4,5), +(0,2,0,3,0,3,0,0,0,2,3,1,3,0,4,0,1,1,3,0,3,4,3,2,3,1,0,3,3,2,3,1,3,0,2,3,0,2,1,4,1,2,2,0,0,3,3,0,0,2,0,0,0,1,0,0,0,0,2,2,0,3,2,1,3,3,0,2,0,2,0,0,3,3,1,2,4,0,3,0,2,2,3), +(2,4,0,5,0,4,0,4,0,2,4,4,4,3,4,3,3,3,1,2,4,3,4,3,4,4,5,0,3,3,3,3,2,0,4,3,1,4,3,4,1,4,4,3,3,4,4,3,1,2,3,0,4,2,0,4,1,0,3,3,0,4,3,3,3,4,0,4,0,2,0,3,5,3,4,5,2,0,3,0,0,4,5), +(0,3,0,4,0,1,0,1,0,1,3,2,2,1,3,0,3,0,2,0,2,0,3,0,2,0,0,0,1,0,1,1,0,0,3,1,0,0,0,4,0,3,1,0,2,1,3,0,0,0,0,0,0,3,0,0,0,0,0,0,0,4,2,2,3,1,0,3,0,0,0,1,4,4,4,3,0,0,4,0,0,1,4), +(1,4,1,5,0,3,0,3,0,4,5,4,4,3,5,3,3,4,4,3,4,1,3,3,3,3,2,1,4,1,5,4,3,1,4,4,3,5,4,4,3,5,4,3,3,4,4,4,0,3,3,1,2,3,0,3,1,0,3,3,0,5,4,4,4,4,4,4,3,3,5,4,4,3,3,5,4,0,3,2,0,4,4), +(0,2,0,3,0,1,0,0,0,1,3,3,3,2,4,1,3,0,3,1,3,0,2,2,1,1,0,0,2,0,4,3,1,0,4,3,0,4,4,4,1,4,3,1,1,3,3,1,0,2,0,0,1,3,0,0,0,0,2,0,0,4,3,2,4,3,5,4,3,3,3,4,3,3,4,3,3,0,2,1,0,3,3), +(0,2,0,4,0,3,0,2,0,2,5,5,3,4,4,4,4,1,4,3,3,0,4,3,4,3,1,3,3,2,4,3,0,3,4,3,0,3,4,4,2,4,4,0,4,5,3,3,2,2,1,1,1,2,0,1,5,0,3,3,2,4,3,3,3,4,0,3,0,2,0,4,4,3,5,5,0,0,3,0,2,3,3), +(0,3,0,4,0,3,0,1,0,3,4,3,3,1,3,3,3,0,3,1,3,0,4,3,3,1,1,0,3,0,3,3,0,0,4,4,0,1,5,4,3,3,5,0,3,3,4,3,0,2,0,1,1,1,0,1,3,0,1,2,1,3,3,2,3,3,0,3,0,1,0,1,3,3,4,4,1,0,1,2,2,1,3), +(0,1,0,4,0,4,0,3,0,1,3,3,3,2,3,1,1,0,3,0,3,3,4,3,2,4,2,0,1,0,4,3,2,0,4,3,0,5,3,3,2,4,4,4,3,3,3,4,0,1,3,0,0,1,0,0,1,0,0,0,0,4,2,3,3,3,0,3,0,0,0,4,4,4,5,3,2,0,3,3,0,3,5), +(0,2,0,3,0,0,0,3,0,1,3,0,2,0,0,0,1,0,3,1,1,3,3,0,0,3,0,0,3,0,2,3,1,0,3,1,0,3,3,2,0,4,2,2,0,2,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,2,1,2,0,1,0,1,0,0,0,1,3,1,2,0,0,0,1,0,0,1,4), +(0,3,0,3,0,5,0,1,0,2,4,3,1,3,3,2,1,1,5,2,1,0,5,1,2,0,0,0,3,3,2,2,3,2,4,3,0,0,3,3,1,3,3,0,2,5,3,4,0,3,3,0,1,2,0,2,2,0,3,2,0,2,2,3,3,3,0,2,0,1,0,3,4,4,2,5,4,0,3,0,0,3,5), +(0,3,0,3,0,3,0,1,0,3,3,3,3,0,3,0,2,0,2,1,1,0,2,0,1,0,0,0,2,1,0,0,1,0,3,2,0,0,3,3,1,2,3,1,0,3,3,0,0,1,0,0,0,0,0,2,0,0,0,0,0,2,3,1,2,3,0,3,0,1,0,3,2,1,0,4,3,0,1,1,0,3,3), +(0,4,0,5,0,3,0,3,0,4,5,5,4,3,5,3,4,3,5,3,3,2,5,3,4,4,4,3,4,3,4,5,5,3,4,4,3,4,4,5,4,4,4,3,4,5,5,4,2,3,4,2,3,4,0,3,3,1,4,3,2,4,3,3,5,5,0,3,0,3,0,5,5,5,5,4,4,0,4,0,1,4,4), +(0,4,0,4,0,3,0,3,0,3,5,4,4,2,3,2,5,1,3,2,5,1,4,2,3,2,3,3,4,3,3,3,3,2,5,4,1,3,3,5,3,4,4,0,4,4,3,1,1,3,1,0,2,3,0,2,3,0,3,0,0,4,3,1,3,4,0,3,0,2,0,4,4,4,3,4,5,0,4,0,0,3,4), +(0,3,0,3,0,3,1,2,0,3,4,4,3,3,3,0,2,2,4,3,3,1,3,3,3,1,1,0,3,1,4,3,2,3,4,4,2,4,4,4,3,4,4,3,2,4,4,3,1,3,3,1,3,3,0,4,1,0,2,2,1,4,3,2,3,3,5,4,3,3,5,4,4,3,3,0,4,0,3,2,2,4,4), +(0,2,0,1,0,0,0,0,0,1,2,1,3,0,0,0,0,0,2,0,1,2,1,0,0,1,0,0,0,0,3,0,0,1,0,1,1,3,1,0,0,0,1,1,0,1,1,0,0,0,0,0,2,0,0,0,0,0,0,0,0,1,1,2,2,0,3,4,0,0,0,1,1,0,0,1,0,0,0,0,0,1,1), +(0,1,0,0,0,1,0,0,0,0,4,0,4,1,4,0,3,0,4,0,3,0,4,0,3,0,3,0,4,1,5,1,4,0,0,3,0,5,0,5,2,0,1,0,0,0,2,1,4,0,1,3,0,0,3,0,0,3,1,1,4,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0), +(1,4,0,5,0,3,0,2,0,3,5,4,4,3,4,3,5,3,4,3,3,0,4,3,3,3,3,3,3,2,4,4,3,1,3,4,4,5,4,4,3,4,4,1,3,5,4,3,3,3,1,2,2,3,3,1,3,1,3,3,3,5,3,3,4,5,0,3,0,3,0,3,4,3,4,4,3,0,3,0,2,4,3), +(0,1,0,4,0,0,0,0,0,1,4,0,4,1,4,2,4,0,3,0,1,0,1,0,0,0,0,0,2,0,3,1,1,1,0,3,0,0,0,1,2,1,0,0,1,1,1,1,0,1,0,0,0,1,0,0,3,0,0,0,0,3,2,0,2,2,0,1,0,0,0,2,3,2,3,3,0,0,0,0,2,1,0), +(0,5,1,5,0,3,0,3,0,5,4,4,5,1,5,3,3,0,4,3,4,3,5,3,4,3,3,2,4,3,4,3,3,0,3,3,1,4,4,3,4,4,4,3,4,5,5,3,2,3,1,1,3,3,1,3,1,1,3,3,2,4,5,3,3,5,0,4,0,3,0,4,4,3,5,3,3,0,3,4,0,4,3), +(0,5,0,5,0,3,0,2,0,4,4,3,5,2,4,3,3,3,4,4,4,3,5,3,5,3,3,1,4,0,4,3,3,0,3,3,0,4,4,4,4,5,4,3,3,5,5,3,2,3,1,2,3,2,0,1,0,0,3,2,2,4,4,3,1,5,0,4,0,3,0,4,3,1,3,2,1,0,3,3,0,3,3), +(0,4,0,5,0,5,0,4,0,4,5,5,5,3,4,3,3,2,5,4,4,3,5,3,5,3,4,0,4,3,4,4,3,2,4,4,3,4,5,4,4,5,5,0,3,5,5,4,1,3,3,2,3,3,1,3,1,0,4,3,1,4,4,3,4,5,0,4,0,2,0,4,3,4,4,3,3,0,4,0,0,5,5), +(0,4,0,4,0,5,0,1,1,3,3,4,4,3,4,1,3,0,5,1,3,0,3,1,3,1,1,0,3,0,3,3,4,0,4,3,0,4,4,4,3,4,4,0,3,5,4,1,0,3,0,0,2,3,0,3,1,0,3,1,0,3,2,1,3,5,0,3,0,1,0,3,2,3,3,4,4,0,2,2,0,4,4), +(2,4,0,5,0,4,0,3,0,4,5,5,4,3,5,3,5,3,5,3,5,2,5,3,4,3,3,4,3,4,5,3,2,1,5,4,3,2,3,4,5,3,4,1,2,5,4,3,0,3,3,0,3,2,0,2,3,0,4,1,0,3,4,3,3,5,0,3,0,1,0,4,5,5,5,4,3,0,4,2,0,3,5), +(0,5,0,4,0,4,0,2,0,5,4,3,4,3,4,3,3,3,4,3,4,2,5,3,5,3,4,1,4,3,4,4,4,0,3,5,0,4,4,4,4,5,3,1,3,4,5,3,3,3,3,3,3,3,0,2,2,0,3,3,2,4,3,3,3,5,3,4,1,3,3,5,3,2,0,0,0,0,4,3,1,3,3), +(0,1,0,3,0,3,0,1,0,1,3,3,3,2,3,3,3,0,3,0,0,0,3,1,3,0,0,0,2,2,2,3,0,0,3,2,0,1,2,4,1,3,3,0,0,3,3,3,0,1,0,0,2,1,0,0,3,0,3,1,0,3,0,0,1,3,0,2,0,1,0,3,3,1,3,3,0,0,1,1,0,3,3), +(0,2,0,3,0,2,1,4,0,2,2,3,1,1,3,1,1,0,2,0,3,1,2,3,1,3,0,0,1,0,4,3,2,3,3,3,1,4,2,3,3,3,3,1,0,3,1,4,0,1,1,0,1,2,0,1,1,0,1,1,0,3,1,3,2,2,0,1,0,0,0,2,3,3,3,1,0,0,0,0,0,2,3), +(0,5,0,4,0,5,0,2,0,4,5,5,3,3,4,3,3,1,5,4,4,2,4,4,4,3,4,2,4,3,5,5,4,3,3,4,3,3,5,5,4,5,5,1,3,4,5,3,1,4,3,1,3,3,0,3,3,1,4,3,1,4,5,3,3,5,0,4,0,3,0,5,3,3,1,4,3,0,4,0,1,5,3), +(0,5,0,5,0,4,0,2,0,4,4,3,4,3,3,3,3,3,5,4,4,4,4,4,4,5,3,3,5,2,4,4,4,3,4,4,3,3,4,4,5,5,3,3,4,3,4,3,3,4,3,3,3,3,1,2,2,1,4,3,3,5,4,4,3,4,0,4,0,3,0,4,4,4,4,4,1,0,4,2,0,2,4), +(0,4,0,4,0,3,0,1,0,3,5,2,3,0,3,0,2,1,4,2,3,3,4,1,4,3,3,2,4,1,3,3,3,0,3,3,0,0,3,3,3,5,3,3,3,3,3,2,0,2,0,0,2,0,0,2,0,0,1,0,0,3,1,2,2,3,0,3,0,2,0,4,4,3,3,4,1,0,3,0,0,2,4), +(0,0,0,4,0,0,0,0,0,0,1,0,1,0,2,0,0,0,0,0,1,0,2,0,1,0,0,0,0,0,3,1,3,0,3,2,0,0,0,1,0,3,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,0,2,0,0,0,0,0,0,2), +(0,2,1,3,0,2,0,2,0,3,3,3,3,1,3,1,3,3,3,3,3,3,4,2,2,1,2,1,4,0,4,3,1,3,3,3,2,4,3,5,4,3,3,3,3,3,3,3,0,1,3,0,2,0,0,1,0,0,1,0,0,4,2,0,2,3,0,3,3,0,3,3,4,2,3,1,4,0,1,2,0,2,3), +(0,3,0,3,0,1,0,3,0,2,3,3,3,0,3,1,2,0,3,3,2,3,3,2,3,2,3,1,3,0,4,3,2,0,3,3,1,4,3,3,2,3,4,3,1,3,3,1,1,0,1,1,0,1,0,1,0,1,0,0,0,4,1,1,0,3,0,3,1,0,2,3,3,3,3,3,1,0,0,2,0,3,3), +(0,0,0,0,0,0,0,0,0,0,3,0,2,0,3,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,3,0,3,0,3,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,2,0,2,3,0,0,0,0,0,0,0,0,3), +(0,2,0,3,1,3,0,3,0,2,3,3,3,1,3,1,3,1,3,1,3,3,3,1,3,0,2,3,1,1,4,3,3,2,3,3,1,2,2,4,1,3,3,0,1,4,2,3,0,1,3,0,3,0,0,1,3,0,2,0,0,3,3,2,1,3,0,3,0,2,0,3,4,4,4,3,1,0,3,0,0,3,3), +(0,2,0,1,0,2,0,0,0,1,3,2,2,1,3,0,1,1,3,0,3,2,3,1,2,0,2,0,1,1,3,3,3,0,3,3,1,1,2,3,2,3,3,1,2,3,2,0,0,1,0,0,0,0,0,0,3,0,1,0,0,2,1,2,1,3,0,3,0,0,0,3,4,4,4,3,2,0,2,0,0,2,4), +(0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2,2,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,3,1,0,0,0,0,0,0,0,3), +(0,3,0,3,0,2,0,3,0,3,3,3,2,3,2,2,2,0,3,1,3,3,3,2,3,3,0,0,3,0,3,2,2,0,2,3,1,4,3,4,3,3,2,3,1,5,4,4,0,3,1,2,1,3,0,3,1,1,2,0,2,3,1,3,1,3,0,3,0,1,0,3,3,4,4,2,1,0,2,1,0,2,4), +(0,1,0,3,0,1,0,2,0,1,4,2,5,1,4,0,2,0,2,1,3,1,4,0,2,1,0,0,2,1,4,1,1,0,3,3,0,5,1,3,2,3,3,1,0,3,2,3,0,1,0,0,0,0,0,0,1,0,0,0,0,4,0,1,0,3,0,2,0,1,0,3,3,3,4,3,3,0,0,0,0,2,3), +(0,0,0,1,0,0,0,0,0,0,2,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,0,1,0,0,0,0,0,3), +(0,1,0,3,0,4,0,3,0,2,4,3,1,0,3,2,2,1,3,1,2,2,3,1,1,1,2,1,3,0,1,2,0,1,3,2,1,3,0,5,5,1,0,0,1,3,2,1,0,3,0,0,1,0,0,0,0,0,3,4,0,1,1,1,3,2,0,2,0,1,0,2,3,3,1,2,3,0,1,0,1,0,4), +(0,0,0,1,0,3,0,3,0,2,2,1,0,0,4,0,3,0,3,1,3,0,3,0,3,0,1,0,3,0,3,1,3,0,3,3,0,0,1,2,1,1,1,0,1,2,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,2,2,1,2,0,0,2,0,0,0,0,2,3,3,3,3,0,0,0,0,1,4), +(0,0,0,3,0,3,0,0,0,0,3,1,1,0,3,0,1,0,2,0,1,0,0,0,0,0,0,0,1,0,3,0,2,0,2,3,0,0,2,2,3,1,2,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,2,0,0,0,0,2,3), +(2,4,0,5,0,5,0,4,0,3,4,3,3,3,4,3,3,3,4,3,4,4,5,4,5,5,5,2,3,0,5,5,4,1,5,4,3,1,5,4,3,4,4,3,3,4,3,3,0,3,2,0,2,3,0,3,0,0,3,3,0,5,3,2,3,3,0,3,0,3,0,3,4,5,4,5,3,0,4,3,0,3,4), +(0,3,0,3,0,3,0,3,0,3,3,4,3,2,3,2,3,0,4,3,3,3,3,3,3,3,3,0,3,2,4,3,3,1,3,4,3,4,4,4,3,4,4,3,2,4,4,1,0,2,0,0,1,1,0,2,0,0,3,1,0,5,3,2,1,3,0,3,0,1,2,4,3,2,4,3,3,0,3,2,0,4,4), +(0,3,0,3,0,1,0,0,0,1,4,3,3,2,3,1,3,1,4,2,3,2,4,2,3,4,3,0,2,2,3,3,3,0,3,3,3,0,3,4,1,3,3,0,3,4,3,3,0,1,1,0,1,0,0,0,4,0,3,0,0,3,1,2,1,3,0,4,0,1,0,4,3,3,4,3,3,0,2,0,0,3,3), +(0,3,0,4,0,1,0,3,0,3,4,3,3,0,3,3,3,1,3,1,3,3,4,3,3,3,0,0,3,1,5,3,3,1,3,3,2,5,4,3,3,4,5,3,2,5,3,4,0,1,0,0,0,0,0,2,0,0,1,1,0,4,2,2,1,3,0,3,0,2,0,4,4,3,5,3,2,0,1,1,0,3,4), +(0,5,0,4,0,5,0,2,0,4,4,3,3,2,3,3,3,1,4,3,4,1,5,3,4,3,4,0,4,2,4,3,4,1,5,4,0,4,4,4,4,5,4,1,3,5,4,2,1,4,1,1,3,2,0,3,1,0,3,2,1,4,3,3,3,4,0,4,0,3,0,4,4,4,3,3,3,0,4,2,0,3,4), +(1,4,0,4,0,3,0,1,0,3,3,3,1,1,3,3,2,2,3,3,1,0,3,2,2,1,2,0,3,1,2,1,2,0,3,2,0,2,2,3,3,4,3,0,3,3,1,2,0,1,1,3,1,2,0,0,3,0,1,1,0,3,2,2,3,3,0,3,0,0,0,2,3,3,4,3,3,0,1,0,0,1,4), +(0,4,0,4,0,4,0,0,0,3,4,4,3,1,4,2,3,2,3,3,3,1,4,3,4,0,3,0,4,2,3,3,2,2,5,4,2,1,3,4,3,4,3,1,3,3,4,2,0,2,1,0,3,3,0,0,2,0,3,1,0,4,4,3,4,3,0,4,0,1,0,2,4,4,4,4,4,0,3,2,0,3,3), +(0,0,0,1,0,4,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,3,2,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,2), +(0,2,0,3,0,4,0,4,0,1,3,3,3,0,4,0,2,1,2,1,1,1,2,0,3,1,1,0,1,0,3,1,0,0,3,3,2,0,1,1,0,0,0,0,0,1,0,2,0,2,2,0,3,1,0,0,1,0,1,1,0,1,2,0,3,0,0,0,0,1,0,0,3,3,4,3,1,0,1,0,3,0,2), +(0,0,0,3,0,5,0,0,0,0,1,0,2,0,3,1,0,1,3,0,0,0,2,0,0,0,1,0,0,0,1,1,0,0,4,0,0,0,2,3,0,1,4,1,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,1,0,0,0,0,0,0,0,2,0,0,3,0,0,0,0,0,3), +(0,2,0,5,0,5,0,1,0,2,4,3,3,2,5,1,3,2,3,3,3,0,4,1,2,0,3,0,4,0,2,2,1,1,5,3,0,0,1,4,2,3,2,0,3,3,3,2,0,2,4,1,1,2,0,1,1,0,3,1,0,1,3,1,2,3,0,2,0,0,0,1,3,5,4,4,4,0,3,0,0,1,3), +(0,4,0,5,0,4,0,4,0,4,5,4,3,3,4,3,3,3,4,3,4,4,5,3,4,5,4,2,4,2,3,4,3,1,4,4,1,3,5,4,4,5,5,4,4,5,5,5,2,3,3,1,4,3,1,3,3,0,3,3,1,4,3,4,4,4,0,3,0,4,0,3,3,4,4,5,0,0,4,3,0,4,5), +(0,4,0,4,0,3,0,3,0,3,4,4,4,3,3,2,4,3,4,3,4,3,5,3,4,3,2,1,4,2,4,4,3,1,3,4,2,4,5,5,3,4,5,4,1,5,4,3,0,3,2,2,3,2,1,3,1,0,3,3,3,5,3,3,3,5,4,4,2,3,3,4,3,3,3,2,1,0,3,2,1,4,3), +(0,4,0,5,0,4,0,3,0,3,5,5,3,2,4,3,4,0,5,4,4,1,4,4,4,3,3,3,4,3,5,5,2,3,3,4,1,2,5,5,3,5,5,2,3,5,5,4,0,3,2,0,3,3,1,1,5,1,4,1,0,4,3,2,3,5,0,4,0,3,0,5,4,3,4,3,0,0,4,1,0,4,4), +(1,3,0,4,0,2,0,2,0,2,5,5,3,3,3,3,3,0,4,2,3,4,4,4,3,4,0,0,3,4,5,4,3,3,3,3,2,5,5,4,5,5,5,4,3,5,5,5,1,3,1,0,1,0,0,3,2,0,4,2,0,5,2,3,2,4,1,3,0,3,0,4,5,4,5,4,3,0,4,2,0,5,4), +(0,3,0,4,0,5,0,3,0,3,4,4,3,2,3,2,3,3,3,3,3,2,4,3,3,2,2,0,3,3,3,3,3,1,3,3,3,0,4,4,3,4,4,1,1,4,4,2,0,3,1,0,1,1,0,4,1,0,2,3,1,3,3,1,3,4,0,3,0,1,0,3,1,3,0,0,1,0,2,0,0,4,4), +(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), +(0,3,0,3,0,2,0,3,0,1,5,4,3,3,3,1,4,2,1,2,3,4,4,2,4,4,5,0,3,1,4,3,4,0,4,3,3,3,2,3,2,5,3,4,3,2,2,3,0,0,3,0,2,1,0,1,2,0,0,0,0,2,1,1,3,1,0,2,0,4,0,3,4,4,4,5,2,0,2,0,0,1,3), +(0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,0,1,1,0,0,0,4,2,1,1,0,1,0,3,2,0,0,3,1,1,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,1,0,0,0,2,0,0,0,1,4,0,4,2,1,0,0,0,0,0,1), +(0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,3,1,0,0,0,2,0,2,1,0,0,1,2,1,0,1,1,0,0,3,0,0,0,0,0,0,0,0,0,0,0,1,3,1,0,0,0,0,0,1,0,0,2,1,0,0,0,0,0,0,0,0,2), +(0,4,0,4,0,4,0,3,0,4,4,3,4,2,4,3,2,0,4,4,4,3,5,3,5,3,3,2,4,2,4,3,4,3,1,4,0,2,3,4,4,4,3,3,3,4,4,4,3,4,1,3,4,3,2,1,2,1,3,3,3,4,4,3,3,5,0,4,0,3,0,4,3,3,3,2,1,0,3,0,0,3,3), +(0,4,0,3,0,3,0,3,0,3,5,5,3,3,3,3,4,3,4,3,3,3,4,4,4,3,3,3,3,4,3,5,3,3,1,3,2,4,5,5,5,5,4,3,4,5,5,3,2,2,3,3,3,3,2,3,3,1,2,3,2,4,3,3,3,4,0,4,0,2,0,4,3,2,2,1,2,0,3,0,0,4,1), +) + +class JapaneseContextAnalysis(object): + NUM_OF_CATEGORY = 6 + DONT_KNOW = -1 + ENOUGH_REL_THRESHOLD = 100 + MAX_REL_THRESHOLD = 1000 + MINIMUM_DATA_THRESHOLD = 4 + + def __init__(self): + self._total_rel = None + self._rel_sample = None + self._need_to_skip_char_num = None + self._last_char_order = None + self._done = None + self.reset() + + def reset(self): + self._total_rel = 0 # total sequence received + # category counters, each integer counts sequence in its category + self._rel_sample = [0] * self.NUM_OF_CATEGORY + # if last byte in current buffer is not the last byte of a character, + # we need to know how many bytes to skip in next buffer + self._need_to_skip_char_num = 0 + self._last_char_order = -1 # The order of previous char + # If this flag is set to True, detection is done and conclusion has + # been made + self._done = False + + def feed(self, byte_str, num_bytes): + if self._done: + return + + # The buffer we got is byte oriented, and a character may span in more than one + # buffers. In case the last one or two byte in last buffer is not + # complete, we record how many byte needed to complete that character + # and skip these bytes here. We can choose to record those bytes as + # well and analyse the character once it is complete, but since a + # character will not make much difference, by simply skipping + # this character will simply our logic and improve performance. + i = self._need_to_skip_char_num + while i < num_bytes: + order, char_len = self.get_order(byte_str[i:i + 2]) + i += char_len + if i > num_bytes: + self._need_to_skip_char_num = i - num_bytes + self._last_char_order = -1 + else: + if (order != -1) and (self._last_char_order != -1): + self._total_rel += 1 + if self._total_rel > self.MAX_REL_THRESHOLD: + self._done = True + break + self._rel_sample[jp2CharContext[self._last_char_order][order]] += 1 + self._last_char_order = order + + def got_enough_data(self): + return self._total_rel > self.ENOUGH_REL_THRESHOLD + + def get_confidence(self): + # This is just one way to calculate confidence. It works well for me. + if self._total_rel > self.MINIMUM_DATA_THRESHOLD: + return (self._total_rel - self._rel_sample[0]) / self._total_rel + else: + return self.DONT_KNOW + + def get_order(self, byte_str): + return -1, 1 + +class SJISContextAnalysis(JapaneseContextAnalysis): + def __init__(self): + super(SJISContextAnalysis, self).__init__() + self._charset_name = "SHIFT_JIS" + + @property + def charset_name(self): + return self._charset_name + + def get_order(self, byte_str): + if not byte_str: + return -1, 1 + # find out current char's byte length + first_char = byte_str[0] + if (0x81 <= first_char <= 0x9F) or (0xE0 <= first_char <= 0xFC): + char_len = 2 + if (first_char == 0x87) or (0xFA <= first_char <= 0xFC): + self._charset_name = "CP932" + else: + char_len = 1 + + # return its order if it is hiragana + if len(byte_str) > 1: + second_char = byte_str[1] + if (first_char == 202) and (0x9F <= second_char <= 0xF1): + return second_char - 0x9F, char_len + + return -1, char_len + +class EUCJPContextAnalysis(JapaneseContextAnalysis): + def get_order(self, byte_str): + if not byte_str: + return -1, 1 + # find out current char's byte length + first_char = byte_str[0] + if (first_char == 0x8E) or (0xA1 <= first_char <= 0xFE): + char_len = 2 + elif first_char == 0x8F: + char_len = 3 + else: + char_len = 1 + + # return its order if it is hiragana + if len(byte_str) > 1: + second_char = byte_str[1] + if (first_char == 0xA4) and (0xA1 <= second_char <= 0xF3): + return second_char - 0xA1, char_len + + return -1, char_len + + diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/langbulgarianmodel.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/langbulgarianmodel.py new file mode 100644 index 00000000..2aa4fb2e --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/langbulgarianmodel.py @@ -0,0 +1,228 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +# 255: Control characters that usually does not exist in any text +# 254: Carriage/Return +# 253: symbol (punctuation) that does not belong to word +# 252: 0 - 9 + +# Character Mapping Table: +# this table is modified base on win1251BulgarianCharToOrderMap, so +# only number <64 is sure valid + +Latin5_BulgarianCharToOrderMap = ( +255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 +252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 +253, 77, 90, 99,100, 72,109,107,101, 79,185, 81,102, 76, 94, 82, # 40 +110,186,108, 91, 74,119, 84, 96,111,187,115,253,253,253,253,253, # 50 +253, 65, 69, 70, 66, 63, 68,112,103, 92,194,104, 95, 86, 87, 71, # 60 +116,195, 85, 93, 97,113,196,197,198,199,200,253,253,253,253,253, # 70 +194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209, # 80 +210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225, # 90 + 81,226,227,228,229,230,105,231,232,233,234,235,236, 45,237,238, # a0 + 31, 32, 35, 43, 37, 44, 55, 47, 40, 59, 33, 46, 38, 36, 41, 30, # b0 + 39, 28, 34, 51, 48, 49, 53, 50, 54, 57, 61,239, 67,240, 60, 56, # c0 + 1, 18, 9, 20, 11, 3, 23, 15, 2, 26, 12, 10, 14, 6, 4, 13, # d0 + 7, 8, 5, 19, 29, 25, 22, 21, 27, 24, 17, 75, 52,241, 42, 16, # e0 + 62,242,243,244, 58,245, 98,246,247,248,249,250,251, 91,252,253, # f0 +) + +win1251BulgarianCharToOrderMap = ( +255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 +252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 +253, 77, 90, 99,100, 72,109,107,101, 79,185, 81,102, 76, 94, 82, # 40 +110,186,108, 91, 74,119, 84, 96,111,187,115,253,253,253,253,253, # 50 +253, 65, 69, 70, 66, 63, 68,112,103, 92,194,104, 95, 86, 87, 71, # 60 +116,195, 85, 93, 97,113,196,197,198,199,200,253,253,253,253,253, # 70 +206,207,208,209,210,211,212,213,120,214,215,216,217,218,219,220, # 80 +221, 78, 64, 83,121, 98,117,105,222,223,224,225,226,227,228,229, # 90 + 88,230,231,232,233,122, 89,106,234,235,236,237,238, 45,239,240, # a0 + 73, 80,118,114,241,242,243,244,245, 62, 58,246,247,248,249,250, # b0 + 31, 32, 35, 43, 37, 44, 55, 47, 40, 59, 33, 46, 38, 36, 41, 30, # c0 + 39, 28, 34, 51, 48, 49, 53, 50, 54, 57, 61,251, 67,252, 60, 56, # d0 + 1, 18, 9, 20, 11, 3, 23, 15, 2, 26, 12, 10, 14, 6, 4, 13, # e0 + 7, 8, 5, 19, 29, 25, 22, 21, 27, 24, 17, 75, 52,253, 42, 16, # f0 +) + +# Model Table: +# total sequences: 100% +# first 512 sequences: 96.9392% +# first 1024 sequences:3.0618% +# rest sequences: 0.2992% +# negative sequences: 0.0020% +BulgarianLangModel = ( +0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,2,3,3,3,3,3, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,3,3,3,2,2,3,2,2,1,2,2, +3,1,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,0,3,3,3,3,3,3,3,3,3,3,0,3,0,1, +0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,3,3,3,3,3,3,3,3,0,3,1,0, +0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, +3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,1,3,2,3,3,3,3,3,3,3,3,0,3,0,0, +0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,1,3,2,3,3,3,3,3,3,3,3,0,3,0,0, +0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,1,3,3,3,3,2,2,2,1,1,2,0,1,0,1,0,0, +0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, +3,3,3,3,3,3,3,2,3,2,2,3,3,1,1,2,3,3,2,3,3,3,3,2,1,2,0,2,0,3,0,0, +0,0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, +3,3,3,3,3,3,3,1,3,3,3,3,3,2,3,2,3,3,3,3,3,2,3,3,1,3,0,3,0,2,0,0, +0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, +3,3,3,3,3,3,3,3,1,3,3,2,3,3,3,1,3,3,2,3,2,2,2,0,0,2,0,2,0,2,0,0, +0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, +3,3,3,3,3,3,3,3,3,0,3,3,3,2,2,3,3,3,1,2,2,3,2,1,1,2,0,2,0,0,0,0, +1,0,0,0,0,0,0,0,0,0,2,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, +3,3,3,3,3,3,3,2,3,3,1,2,3,2,2,2,3,3,3,3,3,2,2,3,1,2,0,2,1,2,0,0, +0,0,0,0,0,0,0,0,0,0,3,0,0,1,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, +3,3,3,3,3,1,3,3,3,3,3,2,3,3,3,2,3,3,2,3,2,2,2,3,1,2,0,1,0,1,0,0, +0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, +3,3,3,3,3,3,3,3,3,3,3,1,1,1,2,2,1,3,1,3,2,2,3,0,0,1,0,1,0,1,0,0, +0,0,0,1,0,0,0,0,1,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, +3,3,3,3,3,2,2,3,2,2,3,1,2,1,1,1,2,3,1,3,1,2,2,0,1,1,1,1,0,1,0,0, +0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, +3,3,3,3,3,1,3,2,2,3,3,1,2,3,1,1,3,3,3,3,1,2,2,1,1,1,0,2,0,2,0,1, +0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,2,2,3,3,3,2,2,1,1,2,0,2,0,1,0,0, +0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, +3,0,1,2,1,3,3,2,3,3,3,3,3,2,3,2,1,0,3,1,2,1,2,1,2,3,2,1,0,1,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,1,1,2,3,3,3,3,3,3,3,3,3,3,3,3,0,0,3,1,3,3,2,3,3,2,2,2,0,1,0,0, +0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,3,3,3,3,0,3,3,3,3,3,2,1,1,2,1,3,3,0,3,1,1,1,1,3,2,0,1,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, +3,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,1,1,3,1,3,3,2,3,2,2,2,3,0,2,0,0, +0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,2,3,3,2,2,3,2,1,1,1,1,1,3,1,3,1,1,0,0,0,1,0,0,0,1,0,0, +0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,2,3,2,0,3,2,0,3,0,2,0,0,2,1,3,1,0,0,1,0,0,0,1,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, +3,3,3,3,2,1,1,1,1,2,1,1,2,1,1,1,2,2,1,2,1,1,1,0,1,1,0,1,0,1,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, +3,3,3,3,2,1,3,1,1,2,1,3,2,1,1,0,1,2,3,2,1,1,1,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,3,3,3,3,2,2,1,0,1,0,0,1,0,0,0,2,1,0,3,0,0,1,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, +3,3,3,2,3,2,3,3,1,3,2,1,1,1,2,1,1,2,1,3,0,1,0,0,0,1,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,1,1,2,2,3,3,2,3,2,2,2,3,1,2,2,1,1,2,1,1,2,2,0,1,1,0,1,0,2,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,2,1,3,1,0,2,2,1,3,2,1,0,0,2,0,2,0,1,0,0,0,0,0,0,0,1,0,0, +0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, +3,3,3,3,3,3,1,2,0,2,3,1,2,3,2,0,1,3,1,2,1,1,1,0,0,1,0,0,2,2,2,3, +2,2,2,2,1,2,1,1,2,2,1,1,2,0,1,1,1,0,0,1,1,0,0,1,1,0,0,0,1,1,0,1, +3,3,3,3,3,2,1,2,2,1,2,0,2,0,1,0,1,2,1,2,1,1,0,0,0,1,0,1,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, +3,3,2,3,3,1,1,3,1,0,3,2,1,0,0,0,1,2,0,2,0,1,0,0,0,1,0,1,2,1,2,2, +1,1,1,1,1,1,1,2,2,2,1,1,1,1,1,1,1,0,1,2,1,1,1,0,0,0,0,0,1,1,0,0, +3,1,0,1,0,2,3,2,2,2,3,2,2,2,2,2,1,0,2,1,2,1,1,1,0,1,2,1,2,2,2,1, +1,1,2,2,2,2,1,2,1,1,0,1,2,1,2,2,2,1,1,1,0,1,1,1,1,2,0,1,0,0,0,0, +2,3,2,3,3,0,0,2,1,0,2,1,0,0,0,0,2,3,0,2,0,0,0,0,0,1,0,0,2,0,1,2, +2,1,2,1,2,2,1,1,1,2,1,1,1,0,1,2,2,1,1,1,1,1,0,1,1,1,0,0,1,2,0,0, +3,3,2,2,3,0,2,3,1,1,2,0,0,0,1,0,0,2,0,2,0,0,0,1,0,1,0,1,2,0,2,2, +1,1,1,1,2,1,0,1,2,2,2,1,1,1,1,1,1,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0, +2,3,2,3,3,0,0,3,0,1,1,0,1,0,0,0,2,2,1,2,0,0,0,0,0,0,0,0,2,0,1,2, +2,2,1,1,1,1,1,2,2,2,1,0,2,0,1,0,1,0,0,1,0,1,0,0,1,0,0,0,0,1,0,0, +3,3,3,3,2,2,2,2,2,0,2,1,1,1,1,2,1,2,1,1,0,2,0,1,0,1,0,0,2,0,1,2, +1,1,1,1,1,1,1,2,2,1,1,0,2,0,1,0,2,0,0,1,1,1,0,0,2,0,0,0,1,1,0,0, +2,3,3,3,3,1,0,0,0,0,0,0,0,0,0,0,2,0,0,1,1,0,0,0,0,0,0,1,2,0,1,2, +2,2,2,1,1,2,1,1,2,2,2,1,2,0,1,1,1,1,1,1,0,1,1,1,1,0,0,1,1,1,0,0, +2,3,3,3,3,0,2,2,0,2,1,0,0,0,1,1,1,2,0,2,0,0,0,3,0,0,0,0,2,0,2,2, +1,1,1,2,1,2,1,1,2,2,2,1,2,0,1,1,1,0,1,1,1,1,0,2,1,0,0,0,1,1,0,0, +2,3,3,3,3,0,2,1,0,0,2,0,0,0,0,0,1,2,0,2,0,0,0,0,0,0,0,0,2,0,1,2, +1,1,1,2,1,1,1,1,2,2,2,0,1,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0, +3,3,2,2,3,0,1,0,1,0,0,0,0,0,0,0,1,1,0,3,0,0,0,0,0,0,0,0,1,0,2,2, +1,1,1,1,1,2,1,1,2,2,1,2,2,1,0,1,1,1,1,1,0,1,0,0,1,0,0,0,1,1,0,0, +3,1,0,1,0,2,2,2,2,3,2,1,1,1,2,3,0,0,1,0,2,1,1,0,1,1,1,1,2,1,1,1, +1,2,2,1,2,1,2,2,1,1,0,1,2,1,2,2,1,1,1,0,0,1,1,1,2,1,0,1,0,0,0,0, +2,1,0,1,0,3,1,2,2,2,2,1,2,2,1,1,1,0,2,1,2,2,1,1,2,1,1,0,2,1,1,1, +1,2,2,2,2,2,2,2,1,2,0,1,1,0,2,1,1,1,1,1,0,0,1,1,1,1,0,1,0,0,0,0, +2,1,1,1,1,2,2,2,2,1,2,2,2,1,2,2,1,1,2,1,2,3,2,2,1,1,1,1,0,1,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,2,2,3,2,0,1,2,0,1,2,1,1,0,1,0,1,2,1,2,0,0,0,1,1,0,0,0,1,0,0,2, +1,1,0,0,1,1,0,1,1,1,1,0,2,0,1,1,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,0, +2,0,0,0,0,1,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,0,1,1,1,1,1,2,1,1,1, +1,2,2,2,2,1,1,2,1,2,1,1,1,0,2,1,2,1,1,1,0,2,1,1,1,1,0,1,0,0,0,0, +3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0, +1,1,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,2,2,3,2,0,0,0,0,1,0,0,0,0,0,0,1,1,0,2,0,0,0,0,0,0,0,0,1,0,1,2, +1,1,1,1,1,1,0,0,2,2,2,2,2,0,1,1,0,1,1,1,1,1,0,0,1,0,0,0,1,1,0,1, +2,3,1,2,1,0,1,1,0,2,2,2,0,0,1,0,0,1,1,1,1,0,0,0,0,0,0,0,1,0,1,2, +1,1,1,1,2,1,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,0,0,1,0,0,0,0,1,0,0, +2,2,2,2,2,0,0,2,0,0,2,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,2,0,2,2, +1,1,1,1,1,0,0,1,2,1,1,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, +1,2,2,2,2,0,0,2,0,1,1,0,0,0,1,0,0,2,0,2,0,0,0,0,0,0,0,0,0,0,1,1, +0,0,0,1,1,1,1,1,1,1,1,1,1,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0, +1,2,2,3,2,0,0,1,0,0,1,0,0,0,0,0,0,1,0,2,0,0,0,1,0,0,0,0,0,0,0,2, +1,1,0,0,1,0,0,0,1,1,0,0,1,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, +2,1,2,2,2,1,2,1,2,2,1,1,2,1,1,1,0,1,1,1,1,2,0,1,0,1,1,1,1,0,1,1, +1,1,2,1,1,1,1,1,1,0,0,1,2,1,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0, +1,0,0,1,3,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,2,2,2,1,0,0,1,0,2,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,2,0,0,1, +0,2,0,1,0,0,1,1,2,0,1,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0, +1,2,2,2,2,0,1,1,0,2,1,0,1,1,1,0,0,1,0,2,0,1,0,0,0,0,0,0,0,0,0,1, +0,1,0,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, +2,2,2,2,2,0,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1, +0,1,0,1,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, +2,0,1,0,0,1,2,1,1,1,1,1,1,2,2,1,0,0,1,0,1,0,0,0,0,1,1,1,1,0,0,0, +1,1,2,1,1,1,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,2,1,2,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1, +0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,0,0,1,2,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0, +0,1,1,0,1,1,1,0,0,1,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0, +1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,2,0,0,2,0,1,0,0,1,0,0,1, +1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0, +1,1,1,1,1,1,1,2,0,0,0,0,0,0,2,1,0,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0, +2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,0,1,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, +) + +Latin5BulgarianModel = { + 'char_to_order_map': Latin5_BulgarianCharToOrderMap, + 'precedence_matrix': BulgarianLangModel, + 'typical_positive_ratio': 0.969392, + 'keep_english_letter': False, + 'charset_name': "ISO-8859-5", + 'language': 'Bulgairan', +} + +Win1251BulgarianModel = { + 'char_to_order_map': win1251BulgarianCharToOrderMap, + 'precedence_matrix': BulgarianLangModel, + 'typical_positive_ratio': 0.969392, + 'keep_english_letter': False, + 'charset_name': "windows-1251", + 'language': 'Bulgarian', +} diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/langcyrillicmodel.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/langcyrillicmodel.py new file mode 100644 index 00000000..e5f9a1fd --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/langcyrillicmodel.py @@ -0,0 +1,333 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +# KOI8-R language model +# Character Mapping Table: +KOI8R_char_to_order_map = ( +255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 +252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 +253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40 +155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50 +253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60 + 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70 +191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206, # 80 +207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222, # 90 +223,224,225, 68,226,227,228,229,230,231,232,233,234,235,236,237, # a0 +238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253, # b0 + 27, 3, 21, 28, 13, 2, 39, 19, 26, 4, 23, 11, 8, 12, 5, 1, # c0 + 15, 16, 9, 7, 6, 14, 24, 10, 17, 18, 20, 25, 30, 29, 22, 54, # d0 + 59, 37, 44, 58, 41, 48, 53, 46, 55, 42, 60, 36, 49, 38, 31, 34, # e0 + 35, 43, 45, 32, 40, 52, 56, 33, 61, 62, 51, 57, 47, 63, 50, 70, # f0 +) + +win1251_char_to_order_map = ( +255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 +252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 +253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40 +155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50 +253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60 + 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70 +191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206, +207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222, +223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238, +239,240,241,242,243,244,245,246, 68,247,248,249,250,251,252,253, + 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35, + 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43, + 3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15, + 9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27, 16, +) + +latin5_char_to_order_map = ( +255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 +252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 +253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40 +155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50 +253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60 + 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70 +191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206, +207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222, +223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238, + 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35, + 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43, + 3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15, + 9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27, 16, +239, 68,240,241,242,243,244,245,246,247,248,249,250,251,252,255, +) + +macCyrillic_char_to_order_map = ( +255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 +252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 +253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40 +155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50 +253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60 + 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70 + 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35, + 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43, +191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206, +207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222, +223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238, +239,240,241,242,243,244,245,246,247,248,249,250,251,252, 68, 16, + 3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15, + 9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27,255, +) + +IBM855_char_to_order_map = ( +255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 +252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 +253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40 +155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50 +253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60 + 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70 +191,192,193,194, 68,195,196,197,198,199,200,201,202,203,204,205, +206,207,208,209,210,211,212,213,214,215,216,217, 27, 59, 54, 70, + 3, 37, 21, 44, 28, 58, 13, 41, 2, 48, 39, 53, 19, 46,218,219, +220,221,222,223,224, 26, 55, 4, 42,225,226,227,228, 23, 60,229, +230,231,232,233,234,235, 11, 36,236,237,238,239,240,241,242,243, + 8, 49, 12, 38, 5, 31, 1, 34, 15,244,245,246,247, 35, 16,248, + 43, 9, 45, 7, 32, 6, 40, 14, 52, 24, 56, 10, 33, 17, 61,249, +250, 18, 62, 20, 51, 25, 57, 30, 47, 29, 63, 22, 50,251,252,255, +) + +IBM866_char_to_order_map = ( +255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 +252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 +253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40 +155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50 +253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60 + 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70 + 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35, + 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43, + 3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15, +191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206, +207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222, +223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238, + 9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27, 16, +239, 68,240,241,242,243,244,245,246,247,248,249,250,251,252,255, +) + +# Model Table: +# total sequences: 100% +# first 512 sequences: 97.6601% +# first 1024 sequences: 2.3389% +# rest sequences: 0.1237% +# negative sequences: 0.0009% +RussianLangModel = ( +0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,3,3,3,3,1,3,3,3,2,3,2,3,3, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,3,2,2,2,2,2,0,0,2, +3,3,3,2,3,3,3,3,3,3,3,3,3,3,2,3,3,0,0,3,3,3,3,3,3,3,3,3,2,3,2,0, +0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,2,2,3,3,3,3,3,3,3,3,3,2,3,3,0,0,3,3,3,3,3,3,3,3,2,3,3,1,0, +0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,3,3,3,3,3,3,3,3,3,3,3,2,1, +0,0,0,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,0,0,3,3,3,3,3,3,3,3,3,3,3,2,1, +0,0,0,0,0,1,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,3,3,2,2,2,3,1,3,3,1,3,3,3,3,2,2,3,0,2,2,2,3,3,2,1,0, +0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,2,3,3,3,3,3,2,2,3,2,3,3,3,2,1,2,2,0,1,2,2,2,2,2,2,0, +0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,3,0,2,2,3,3,2,1,2,0, +0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,2,3,3,1,2,3,2,2,3,2,3,3,3,3,2,2,3,0,3,2,2,3,1,1,1,0, +0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,2,3,3,3,3,2,2,2,0,3,3,3,2,2,2,2,0, +0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,3,3,3,3,2,3,2,3,3,3,3,3,3,2,3,2,2,0,1,3,2,1,2,2,1,0, +0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,3,3,3,3,3,2,1,1,3,0,1,1,1,1,2,1,1,0,2,2,2,1,2,0,1,0, +0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,2,3,3,2,2,2,2,1,3,2,3,2,3,2,1,2,2,0,1,1,2,1,2,1,2,0, +0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,3,3,3,2,2,2,2,0,2,2,2,2,3,1,1,0, +0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, +3,2,3,2,2,3,3,3,3,3,3,3,3,3,1,3,2,0,0,3,3,3,3,2,3,3,3,3,2,3,2,0, +0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,3,3,3,3,3,2,2,3,3,0,2,1,0,3,2,3,2,3,0,0,1,2,0,0,1,0,1,2,1,1,0, +0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,0,3,0,2,3,3,3,3,2,3,3,3,3,1,2,2,0,0,2,3,2,2,2,3,2,3,2,2,3,0,0, +0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,2,3,0,2,3,2,3,0,1,2,3,3,2,0,2,3,0,0,2,3,2,2,0,1,3,1,3,2,2,1,0, +0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,1,3,0,2,3,3,3,3,3,3,3,3,2,1,3,2,0,0,2,2,3,3,3,2,3,3,0,2,2,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,2,2,3,3,2,2,2,3,3,0,0,1,1,1,1,1,2,0,0,1,1,1,1,0,1,0, +0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,0,3,2,3,3,2,3,2,0,2,1,0,1,1,0,1,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,2,3,3,3,2,2,2,2,3,1,3,2,3,1,1,2,1,0,2,2,2,2,1,3,1,0, +0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, +2,2,3,3,3,3,3,1,2,2,1,3,1,0,3,0,0,3,0,0,0,1,1,0,1,2,1,0,0,0,0,0, +0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,2,2,1,1,3,3,3,2,2,1,2,2,3,1,1,2,0,0,2,2,1,3,0,0,2,1,1,2,1,1,0, +0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,2,3,3,3,3,1,2,2,2,1,2,1,3,3,1,1,2,1,2,1,2,2,0,2,0,0,1,1,0,1,0, +0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,3,3,3,3,3,2,1,3,2,2,3,2,0,3,2,0,3,0,1,0,1,1,0,0,1,1,1,1,0,1,0, +0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,2,3,3,3,2,2,2,3,3,1,2,1,2,1,0,1,0,1,1,0,1,0,0,2,1,1,1,0,1,0, +0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, +3,1,1,2,1,2,3,3,2,2,1,2,2,3,0,2,1,0,0,2,2,3,2,1,2,2,2,2,2,3,1,0, +0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,1,1,0,1,1,2,2,1,1,3,0,0,1,3,1,1,1,0,0,0,1,0,1,1,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,1,3,3,3,2,0,0,0,2,1,0,1,0,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,0,1,0,0,2,3,2,2,2,1,2,2,2,1,2,1,0,0,1,1,1,0,2,0,1,1,1,0,0,1,1, +1,0,0,0,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0, +2,3,3,3,3,0,0,0,0,1,0,0,0,0,3,0,1,2,1,0,0,0,0,0,0,0,1,1,0,0,1,1, +1,0,1,0,1,2,0,0,1,1,2,1,0,1,1,1,1,0,1,1,1,1,0,1,0,0,1,0,0,1,1,0, +2,2,3,2,2,2,3,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,0,1,1,1,0,2,1, +1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,0,1,1,0, +3,3,3,2,2,2,2,3,2,2,1,1,2,2,2,2,1,1,3,1,2,1,2,0,0,1,1,0,1,0,2,1, +1,1,1,1,1,2,1,0,1,1,1,1,0,1,0,0,1,1,0,0,1,0,1,0,0,1,0,0,0,1,1,0, +2,0,0,1,0,3,2,2,2,2,1,2,1,2,1,2,0,0,0,2,1,2,2,1,1,2,2,0,1,1,0,2, +1,1,1,1,1,0,1,1,1,2,1,1,1,2,1,0,1,2,1,1,1,1,0,1,1,1,0,0,1,0,0,1, +1,3,2,2,2,1,1,1,2,3,0,0,0,0,2,0,2,2,1,0,0,0,0,0,0,1,0,0,0,0,1,1, +1,0,1,1,0,1,0,1,1,0,1,1,0,2,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0, +2,3,2,3,2,1,2,2,2,2,1,0,0,0,2,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,2,1, +1,1,2,1,0,2,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0, +3,0,0,1,0,2,2,2,3,2,2,2,2,2,2,2,0,0,0,2,1,2,1,1,1,2,2,0,0,0,1,2, +1,1,1,1,1,0,1,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,0,1, +2,3,2,3,3,2,0,1,1,1,0,0,1,0,2,0,1,1,3,1,0,0,0,0,0,0,0,1,0,0,2,1, +1,1,1,1,1,1,1,0,1,0,1,1,1,1,0,1,1,1,0,0,1,1,0,1,0,0,0,0,0,0,1,0, +2,3,3,3,3,1,2,2,2,2,0,1,1,0,2,1,1,1,2,1,0,1,1,0,0,1,0,1,0,0,2,0, +0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,3,3,3,2,0,0,1,1,2,2,1,0,0,2,0,1,1,3,0,0,1,0,0,0,0,0,1,0,1,2,1, +1,1,2,0,1,1,1,0,1,0,1,1,0,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,0,1,1,0, +1,3,2,3,2,1,0,0,2,2,2,0,1,0,2,0,1,1,1,0,1,0,0,0,3,0,1,1,0,0,2,1, +1,1,1,0,1,1,0,0,0,0,1,1,0,1,0,0,2,1,1,0,1,0,0,0,1,0,1,0,0,1,1,0, +3,1,2,1,1,2,2,2,2,2,2,1,2,2,1,1,0,0,0,2,2,2,0,0,0,1,2,1,0,1,0,1, +2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,2,1,1,1,0,1,0,1,1,0,1,1,1,0,0,1, +3,0,0,0,0,2,0,1,1,1,1,1,1,1,0,1,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,1, +1,1,0,0,1,0,0,0,1,0,1,1,0,0,1,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1, +1,3,3,2,2,0,0,0,2,2,0,0,0,1,2,0,1,1,2,0,0,0,0,0,0,0,0,1,0,0,2,1, +0,1,1,0,0,1,1,0,0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0, +2,3,2,3,2,0,0,0,0,1,1,0,0,0,2,0,2,0,2,0,0,0,0,0,1,0,0,1,0,0,1,1, +1,1,2,0,1,2,1,0,1,1,2,1,1,1,1,1,2,1,1,0,1,0,0,1,1,1,1,1,0,1,1,0, +1,3,2,2,2,1,0,0,2,2,1,0,1,2,2,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,1, +0,0,1,1,0,1,1,0,0,1,1,0,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0, +1,0,0,1,0,2,3,1,2,2,2,2,2,2,1,1,0,0,0,1,0,1,0,2,1,1,1,0,0,0,0,1, +1,1,0,1,1,0,1,1,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0, +2,0,2,0,0,1,0,3,2,1,2,1,2,2,0,1,0,0,0,2,1,0,0,2,1,1,1,1,0,2,0,2, +2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,0,1,1,1,1,0,0,0,1,1,1,1,0,1,0,0,1, +1,2,2,2,2,1,0,0,1,0,0,0,0,0,2,0,1,1,1,1,0,0,0,0,1,0,1,2,0,0,2,0, +1,0,1,1,1,2,1,0,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,1,0,0,1,0,1,1,0, +2,1,2,2,2,0,3,0,1,1,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, +0,0,0,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0, +1,2,2,3,2,2,0,0,1,1,2,0,1,2,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1, +0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0, +2,2,1,1,2,1,2,2,2,2,2,1,2,2,0,1,0,0,0,1,2,2,2,1,2,1,1,1,1,1,2,1, +1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,0,0,0,0,1,1,1,0,1,1,0,0,1, +1,2,2,2,2,0,1,0,2,2,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0, +0,0,1,0,0,1,0,0,0,0,1,0,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0, +0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,2,2,2,2,0,0,0,2,2,2,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1, +0,1,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,2,2,2,2,0,0,0,0,1,0,0,1,1,2,0,0,0,0,1,0,1,0,0,1,0,0,2,0,0,0,1, +0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, +1,2,2,2,1,1,2,0,2,1,1,1,1,0,2,2,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1, +0,0,1,0,1,1,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0, +1,0,2,1,2,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0, +0,0,1,0,1,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0, +1,0,0,0,0,2,0,1,2,1,0,1,1,1,0,1,0,0,0,1,0,1,0,0,1,0,1,0,0,0,0,1, +0,0,0,0,0,1,0,0,1,1,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1, +2,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, +1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0, +2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, +1,1,1,0,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0, +1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, +1,1,0,1,1,0,1,0,1,0,0,0,0,1,1,0,1,1,0,0,0,0,0,1,0,1,1,0,1,0,0,0, +0,1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0, +) + +Koi8rModel = { + 'char_to_order_map': KOI8R_char_to_order_map, + 'precedence_matrix': RussianLangModel, + 'typical_positive_ratio': 0.976601, + 'keep_english_letter': False, + 'charset_name': "KOI8-R", + 'language': 'Russian', +} + +Win1251CyrillicModel = { + 'char_to_order_map': win1251_char_to_order_map, + 'precedence_matrix': RussianLangModel, + 'typical_positive_ratio': 0.976601, + 'keep_english_letter': False, + 'charset_name': "windows-1251", + 'language': 'Russian', +} + +Latin5CyrillicModel = { + 'char_to_order_map': latin5_char_to_order_map, + 'precedence_matrix': RussianLangModel, + 'typical_positive_ratio': 0.976601, + 'keep_english_letter': False, + 'charset_name': "ISO-8859-5", + 'language': 'Russian', +} + +MacCyrillicModel = { + 'char_to_order_map': macCyrillic_char_to_order_map, + 'precedence_matrix': RussianLangModel, + 'typical_positive_ratio': 0.976601, + 'keep_english_letter': False, + 'charset_name': "MacCyrillic", + 'language': 'Russian', +} + +Ibm866Model = { + 'char_to_order_map': IBM866_char_to_order_map, + 'precedence_matrix': RussianLangModel, + 'typical_positive_ratio': 0.976601, + 'keep_english_letter': False, + 'charset_name': "IBM866", + 'language': 'Russian', +} + +Ibm855Model = { + 'char_to_order_map': IBM855_char_to_order_map, + 'precedence_matrix': RussianLangModel, + 'typical_positive_ratio': 0.976601, + 'keep_english_letter': False, + 'charset_name': "IBM855", + 'language': 'Russian', +} diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/langgreekmodel.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/langgreekmodel.py new file mode 100644 index 00000000..53322216 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/langgreekmodel.py @@ -0,0 +1,225 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +# 255: Control characters that usually does not exist in any text +# 254: Carriage/Return +# 253: symbol (punctuation) that does not belong to word +# 252: 0 - 9 + +# Character Mapping Table: +Latin7_char_to_order_map = ( +255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 +252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 +253, 82,100,104, 94, 98,101,116,102,111,187,117, 92, 88,113, 85, # 40 + 79,118,105, 83, 67,114,119, 95, 99,109,188,253,253,253,253,253, # 50 +253, 72, 70, 80, 81, 60, 96, 93, 89, 68,120, 97, 77, 86, 69, 55, # 60 + 78,115, 65, 66, 58, 76,106,103, 87,107,112,253,253,253,253,253, # 70 +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 80 +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 90 +253,233, 90,253,253,253,253,253,253,253,253,253,253, 74,253,253, # a0 +253,253,253,253,247,248, 61, 36, 46, 71, 73,253, 54,253,108,123, # b0 +110, 31, 51, 43, 41, 34, 91, 40, 52, 47, 44, 53, 38, 49, 59, 39, # c0 + 35, 48,250, 37, 33, 45, 56, 50, 84, 57,120,121, 17, 18, 22, 15, # d0 +124, 1, 29, 20, 21, 3, 32, 13, 25, 5, 11, 16, 10, 6, 30, 4, # e0 + 9, 8, 14, 7, 2, 12, 28, 23, 42, 24, 64, 75, 19, 26, 27,253, # f0 +) + +win1253_char_to_order_map = ( +255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 +252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 +253, 82,100,104, 94, 98,101,116,102,111,187,117, 92, 88,113, 85, # 40 + 79,118,105, 83, 67,114,119, 95, 99,109,188,253,253,253,253,253, # 50 +253, 72, 70, 80, 81, 60, 96, 93, 89, 68,120, 97, 77, 86, 69, 55, # 60 + 78,115, 65, 66, 58, 76,106,103, 87,107,112,253,253,253,253,253, # 70 +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 80 +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 90 +253,233, 61,253,253,253,253,253,253,253,253,253,253, 74,253,253, # a0 +253,253,253,253,247,253,253, 36, 46, 71, 73,253, 54,253,108,123, # b0 +110, 31, 51, 43, 41, 34, 91, 40, 52, 47, 44, 53, 38, 49, 59, 39, # c0 + 35, 48,250, 37, 33, 45, 56, 50, 84, 57,120,121, 17, 18, 22, 15, # d0 +124, 1, 29, 20, 21, 3, 32, 13, 25, 5, 11, 16, 10, 6, 30, 4, # e0 + 9, 8, 14, 7, 2, 12, 28, 23, 42, 24, 64, 75, 19, 26, 27,253, # f0 +) + +# Model Table: +# total sequences: 100% +# first 512 sequences: 98.2851% +# first 1024 sequences:1.7001% +# rest sequences: 0.0359% +# negative sequences: 0.0148% +GreekLangModel = ( +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,3,2,2,3,3,3,3,3,3,3,3,1,3,3,3,0,2,2,3,3,0,3,0,3,2,0,3,3,3,0, +3,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,3,3,3,3,0,3,3,0,3,2,3,3,0,3,2,3,3,3,0,0,3,0,3,0,3,3,2,0,0,0, +2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0, +0,2,3,2,2,3,3,3,3,3,3,3,3,0,3,3,3,3,0,2,3,3,0,3,3,3,3,2,3,3,3,0, +2,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,0,2,1,3,3,3,3,2,3,3,2,3,3,2,0, +0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,3,3,3,0,3,3,3,3,3,3,0,3,3,0,3,3,3,3,3,3,3,3,3,3,0,3,2,3,3,0, +2,0,1,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, +0,3,3,3,3,3,2,3,0,0,0,0,3,3,0,3,1,3,3,3,0,3,3,0,3,3,3,3,0,0,0,0, +2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,3,3,3,3,0,3,0,3,3,3,3,3,0,3,2,2,2,3,0,2,3,3,3,3,3,2,3,3,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,3,3,3,3,3,2,2,2,3,3,3,3,0,3,1,3,3,3,3,2,3,3,3,3,3,3,3,2,2,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,3,3,3,3,2,0,3,0,0,0,3,3,2,3,3,3,3,3,0,0,3,2,3,0,2,3,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,0,3,3,3,3,0,0,3,3,0,2,3,0,3,0,3,3,3,0,0,3,0,3,0,2,2,3,3,0,0, +0,0,1,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,3,3,3,3,2,0,3,2,3,3,3,3,0,3,3,3,3,3,0,3,3,2,3,2,3,3,2,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,3,2,3,2,3,3,3,3,3,3,0,2,3,2,3,2,2,2,3,2,3,3,2,3,0,2,2,2,3,0, +2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,3,0,0,0,3,3,3,2,3,3,0,0,3,0,3,0,0,0,3,2,0,3,0,3,0,0,2,0,2,0, +0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,3,3,3,0,3,3,3,3,3,3,0,3,3,0,3,0,0,0,3,3,0,3,3,3,0,0,1,2,3,0, +3,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,3,3,3,3,2,0,0,3,2,2,3,3,0,3,3,3,3,3,2,1,3,0,3,2,3,3,2,1,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,3,3,0,2,3,3,3,3,3,3,0,0,3,0,3,0,0,0,3,3,0,3,2,3,0,0,3,3,3,0, +3,0,0,0,2,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,3,3,3,0,3,3,3,3,3,3,0,0,3,0,3,0,0,0,3,2,0,3,2,3,0,0,3,2,3,0, +2,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,3,1,2,2,3,3,3,3,3,3,0,2,3,0,3,0,0,0,3,3,0,3,0,2,0,0,2,3,1,0, +2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,0,3,3,3,3,0,3,0,3,3,2,3,0,3,3,3,3,3,3,0,3,3,3,0,2,3,0,0,3,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,0,3,3,3,0,0,3,0,0,0,3,3,0,3,0,2,3,3,0,0,3,0,3,0,3,3,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,3,0,0,0,3,3,3,3,3,3,0,0,3,0,2,0,0,0,3,3,0,3,0,3,0,0,2,0,2,0, +0,0,0,0,1,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,3,3,3,3,3,0,3,0,2,0,3,2,0,3,2,3,2,3,0,0,3,2,3,2,3,3,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,3,0,0,2,3,3,3,3,3,0,0,0,3,0,2,1,0,0,3,2,2,2,0,3,0,0,2,2,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,0,3,3,3,2,0,3,0,3,0,3,3,0,2,1,2,3,3,0,0,3,0,3,0,3,3,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,2,3,3,3,0,3,3,3,3,3,3,0,2,3,0,3,0,0,0,2,1,0,2,2,3,0,0,2,2,2,0, +0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,3,0,0,2,3,3,3,2,3,0,0,1,3,0,2,0,0,0,0,3,0,1,0,2,0,0,1,1,1,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,3,3,3,3,1,0,3,0,0,0,3,2,0,3,2,3,3,3,0,0,3,0,3,2,2,2,1,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,0,3,3,3,0,0,3,0,0,0,0,2,0,2,3,3,2,2,2,2,3,0,2,0,2,2,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,3,3,3,2,0,0,0,0,0,0,2,3,0,2,0,2,3,2,0,0,3,0,3,0,3,1,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,3,2,3,3,2,2,3,0,2,0,3,0,0,0,2,0,0,0,0,1,2,0,2,0,2,0, +0,2,0,2,0,2,2,0,0,1,0,2,2,2,0,2,2,2,0,2,2,2,0,0,2,0,0,1,0,0,0,0, +0,2,0,3,3,2,0,0,0,0,0,0,1,3,0,2,0,2,2,2,0,0,2,0,3,0,0,2,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,0,2,3,2,0,2,2,0,2,0,2,2,0,2,0,2,2,2,0,0,0,0,0,0,2,3,0,0,0,2, +0,1,2,0,0,0,0,2,2,0,0,0,2,1,0,2,2,0,0,0,0,0,0,1,0,2,0,0,0,0,0,0, +0,0,2,1,0,2,3,2,2,3,2,3,2,0,0,3,3,3,0,0,3,2,0,0,0,1,1,0,2,0,2,2, +0,2,0,2,0,2,2,0,0,2,0,2,2,2,0,2,2,2,2,0,0,2,0,0,0,2,0,1,0,0,0,0, +0,3,0,3,3,2,2,0,3,0,0,0,2,2,0,2,2,2,1,2,0,0,1,2,2,0,0,3,0,0,0,2, +0,1,2,0,0,0,1,2,0,0,0,0,0,0,0,2,2,0,1,0,0,2,0,0,0,2,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,2,3,3,2,2,0,0,0,2,0,2,3,3,0,2,0,0,0,0,0,0,2,2,2,0,2,2,0,2,0,2, +0,2,2,0,0,2,2,2,2,1,0,0,2,2,0,2,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0, +0,2,0,3,2,3,0,0,0,3,0,0,2,2,0,2,0,2,2,2,0,0,2,0,0,0,0,0,0,0,0,2, +0,0,2,2,0,0,2,2,2,0,0,0,0,0,0,2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,2,0,0,3,2,0,2,2,2,2,2,0,0,0,2,0,0,0,0,2,0,1,0,0,2,0,1,0,0,0, +0,2,2,2,0,2,2,0,1,2,0,2,2,2,0,2,2,2,2,1,2,2,0,0,2,0,0,0,0,0,0,0, +0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, +0,2,0,2,0,2,2,0,0,0,0,1,2,1,0,0,2,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,3,2,3,0,0,2,0,0,0,2,2,0,2,0,0,0,1,0,0,2,0,2,0,2,2,0,0,0,0, +0,0,2,0,0,0,0,2,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0, +0,2,2,3,2,2,0,0,0,0,0,0,1,3,0,2,0,2,2,0,0,0,1,0,2,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,2,0,2,0,3,2,0,2,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, +0,0,2,0,0,0,0,1,1,0,0,2,1,2,0,2,2,0,1,0,0,1,0,0,0,2,0,0,0,0,0,0, +0,3,0,2,2,2,0,0,2,0,0,0,2,0,0,0,2,3,0,2,0,0,0,0,0,0,2,2,0,0,0,2, +0,1,2,0,0,0,1,2,2,1,0,0,0,2,0,0,2,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,2,1,2,0,2,2,0,2,0,0,2,0,0,0,0,1,2,1,0,2,1,0,0,0,0,0,0,0,0,0,0, +0,0,2,0,0,0,3,1,2,2,0,2,0,0,0,0,2,0,0,0,2,0,0,3,0,0,0,0,2,2,2,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,2,1,0,2,0,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,1,0,0,0,0,0,0,2, +0,2,2,0,0,2,2,2,2,2,0,1,2,0,0,0,2,2,0,1,0,2,0,0,2,2,0,0,0,0,0,0, +0,0,0,0,1,0,0,0,0,0,0,0,3,0,0,2,0,0,0,0,0,0,0,0,2,0,2,0,0,0,0,2, +0,1,2,0,0,0,0,2,2,1,0,1,0,1,0,2,2,2,1,0,0,0,0,0,0,1,0,0,0,0,0,0, +0,2,0,1,2,0,0,0,0,0,0,0,0,0,0,2,0,0,2,2,0,0,0,0,1,0,0,0,0,0,0,2, +0,2,2,0,0,0,0,2,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,2,0,0,0, +0,2,2,2,2,0,0,0,3,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0,1, +0,0,2,0,0,0,0,1,2,0,0,0,0,0,0,2,2,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0, +0,2,0,2,2,2,0,0,2,0,0,0,0,0,0,0,2,2,2,0,0,0,2,0,0,0,0,0,0,0,0,2, +0,0,1,0,0,0,0,2,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0, +0,3,0,2,0,0,0,0,0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,2, +0,0,2,0,0,0,0,2,2,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,2,0,2,2,1,0,0,0,0,0,0,2,0,0,2,0,2,2,2,0,0,0,0,0,0,2,0,0,0,0,2, +0,0,2,0,0,2,0,2,2,0,0,0,0,2,0,2,0,0,0,0,0,2,0,0,0,2,0,0,0,0,0,0, +0,0,3,0,0,0,2,2,0,2,2,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,2,0,0,0,0,0, +0,2,2,2,2,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1, +0,0,0,0,0,0,0,2,1,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,2,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, +0,2,0,0,0,2,0,0,0,0,0,1,0,0,0,0,2,2,0,0,0,1,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,2,0,0,0, +0,2,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,2,0,2,0,0,0, +0,0,0,0,0,0,0,0,2,1,0,0,0,0,0,0,2,0,0,0,1,2,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +) + +Latin7GreekModel = { + 'char_to_order_map': Latin7_char_to_order_map, + 'precedence_matrix': GreekLangModel, + 'typical_positive_ratio': 0.982851, + 'keep_english_letter': False, + 'charset_name': "ISO-8859-7", + 'language': 'Greek', +} + +Win1253GreekModel = { + 'char_to_order_map': win1253_char_to_order_map, + 'precedence_matrix': GreekLangModel, + 'typical_positive_ratio': 0.982851, + 'keep_english_letter': False, + 'charset_name': "windows-1253", + 'language': 'Greek', +} diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/langhebrewmodel.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/langhebrewmodel.py new file mode 100644 index 00000000..58f4c875 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/langhebrewmodel.py @@ -0,0 +1,200 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Universal charset detector code. +# +# The Initial Developer of the Original Code is +# Simon Montagu +# Portions created by the Initial Developer are Copyright (C) 2005 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# Shy Shalom - original C code +# Shoshannah Forbes - original C code (?) +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +# 255: Control characters that usually does not exist in any text +# 254: Carriage/Return +# 253: symbol (punctuation) that does not belong to word +# 252: 0 - 9 + +# Windows-1255 language model +# Character Mapping Table: +WIN1255_CHAR_TO_ORDER_MAP = ( +255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 +252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 +253, 69, 91, 79, 80, 92, 89, 97, 90, 68,111,112, 82, 73, 95, 85, # 40 + 78,121, 86, 71, 67,102,107, 84,114,103,115,253,253,253,253,253, # 50 +253, 50, 74, 60, 61, 42, 76, 70, 64, 53,105, 93, 56, 65, 54, 49, # 60 + 66,110, 51, 43, 44, 63, 81, 77, 98, 75,108,253,253,253,253,253, # 70 +124,202,203,204,205, 40, 58,206,207,208,209,210,211,212,213,214, +215, 83, 52, 47, 46, 72, 32, 94,216,113,217,109,218,219,220,221, + 34,116,222,118,100,223,224,117,119,104,125,225,226, 87, 99,227, +106,122,123,228, 55,229,230,101,231,232,120,233, 48, 39, 57,234, + 30, 59, 41, 88, 33, 37, 36, 31, 29, 35,235, 62, 28,236,126,237, +238, 38, 45,239,240,241,242,243,127,244,245,246,247,248,249,250, + 9, 8, 20, 16, 3, 2, 24, 14, 22, 1, 25, 15, 4, 11, 6, 23, + 12, 19, 13, 26, 18, 27, 21, 17, 7, 10, 5,251,252,128, 96,253, +) + +# Model Table: +# total sequences: 100% +# first 512 sequences: 98.4004% +# first 1024 sequences: 1.5981% +# rest sequences: 0.087% +# negative sequences: 0.0015% +HEBREW_LANG_MODEL = ( +0,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,2,3,2,1,2,0,1,0,0, +3,0,3,1,0,0,1,3,2,0,1,1,2,0,2,2,2,1,1,1,1,2,1,1,1,2,0,0,2,2,0,1, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2, +1,2,1,2,1,2,0,0,2,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2, +1,2,1,3,1,1,0,0,2,0,0,0,1,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,0,1,2,2,1,3, +1,2,1,1,2,2,0,0,2,2,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,1,0, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,3,2, +1,2,1,2,2,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,3,2,2,3,2,2,2,1,2,2,2,2, +1,2,1,1,2,2,0,1,2,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,0,2,2,2,2,2, +0,2,0,2,2,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,0,2,2,2, +0,2,1,2,2,2,0,0,2,1,0,0,0,0,1,0,1,0,0,0,0,0,0,2,0,0,0,0,0,0,1,0, +3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,1,2,3,2,2,2, +1,2,1,2,2,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0, +3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,1,0,2,0,2, +0,2,1,2,2,2,0,0,1,2,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,2,0,0,1,0, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,3,2,2,3,2,1,2,1,1,1, +0,1,1,1,1,1,3,0,1,0,0,0,0,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, +3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,0, +0,0,1,0,0,0,0,0,2,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2, +0,2,0,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, +3,3,3,3,3,3,3,3,3,2,3,3,3,2,1,2,3,3,2,3,3,3,3,2,3,2,1,2,0,2,1,2, +0,2,0,2,2,2,0,0,1,2,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0, +3,3,3,3,3,3,3,3,3,2,3,3,3,1,2,2,3,3,2,3,2,3,2,2,3,1,2,2,0,2,2,2, +0,2,1,2,2,2,0,0,1,2,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,1,0, +3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,2,2,2,3,3,3,3,1,3,2,2,2, +0,2,0,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,2,3,2,2,2,1,2,2,0,2,2,2,2, +0,2,0,2,2,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, +3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,1,3,2,3,3,2,3,3,2,2,1,2,2,2,2,2,2, +0,2,1,2,1,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0, +3,3,3,3,3,3,2,3,2,3,3,2,3,3,3,3,2,3,2,3,3,3,3,3,2,2,2,2,2,2,2,1, +0,2,0,1,2,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, +3,3,3,3,3,3,3,3,3,2,1,2,3,3,3,3,3,3,3,2,3,2,3,2,1,2,3,0,2,1,2,2, +0,2,1,1,2,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,2,0, +3,3,3,3,3,3,3,3,3,2,3,3,3,3,2,1,3,1,2,2,2,1,2,3,3,1,2,1,2,2,2,2, +0,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,3,3,3,3,0,2,3,3,3,1,3,3,3,1,2,2,2,2,1,1,2,2,2,2,2,2, +0,2,0,1,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, +3,3,3,3,3,3,2,3,3,3,2,2,3,3,3,2,1,2,3,2,3,2,2,2,2,1,2,1,1,1,2,2, +0,2,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, +3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,1,0,0,0,0,0, +1,0,1,0,0,0,0,0,2,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,2,3,3,2,3,1,2,2,2,2,3,2,3,1,1,2,2,1,2,2,1,1,0,2,2,2,2, +0,1,0,1,2,2,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, +3,0,0,1,1,0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,2,0, +0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,0,1,0,1,0,1,1,0,1,1,0,0,0,1,1,0,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0, +0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, +3,2,2,1,2,2,2,2,2,2,2,1,2,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,0,3,3,3, +0,3,0,2,2,2,2,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, +2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,1,1,1,2,0,1, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,0,0,0,0,0, +0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,3,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,0,2,1,0, +0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, +0,3,1,1,2,2,2,2,2,1,2,2,2,1,1,2,2,2,2,2,2,2,1,2,2,1,0,1,1,1,1,0, +0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,2,1,1,1,1,2,1,1,2,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0, +0,0,2,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,0,0, +2,1,1,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,1,2,1,2,1,1,1,1,0,0,0,0, +0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,2,1,2,2,2,2,2,2,2,2,2,2,1,2,1,2,1,1,2,1,1,1,2,1,2,1,2,0,1,0,1, +0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,3,1,2,2,2,1,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,2,1,2,1,1,0,1,0,1, +0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,1,2,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2, +0,2,0,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, +3,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,1,1,1,1,1,1,1,0,1,1,0,1,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,2,0,1,1,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,0,1,1,0,0, +0,1,1,1,2,1,2,2,2,0,2,0,2,0,1,1,2,1,1,1,1,2,1,0,1,1,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,0,1,0,0,0,0,0,1,0,1,2,2,0,1,0,0,1,1,2,2,1,2,0,2,0,0,0,1,2,0,1, +2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,2,0,2,1,2,0,2,0,0,1,1,1,1,1,1,0,1,0,0,0,1,0,0,1, +2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,1,0,0,0,0,0,1,0,2,1,1,0,1,0,0,1,1,1,2,2,0,0,1,0,0,0,1,0,0,1, +1,1,2,1,0,1,1,1,0,1,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,2,2,1, +0,2,0,1,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,1,0,0,1,0,1,1,1,1,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,1,1,1,1,1,1,1,1,2,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,1,1,0,1,0,0,0,1,1,0,1, +2,0,1,0,1,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,2,1,1,2,0,1,0,0,0,1,1,0,1, +1,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,1,0,1,1,2,0,1,0,0,0,0,2,1,1,2,0,2,0,0,0,1,1,0,1, +1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,1,0,2,1,1,0,1,0,0,2,2,1,2,1,1,0,1,0,0,0,1,1,0,1, +2,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,1,2,2,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,1,0,1, +1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,1,2,2,0,0,0,0,2,1,1,1,0,2,1,1,0,0,0,2,1,0,1, +1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,1,0,1,1,2,0,1,0,0,1,1,0,2,1,1,0,1,0,0,0,1,1,0,1, +2,2,1,1,1,0,1,1,0,1,1,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,1,0,2,1,1,0,1,0,0,1,1,0,1,2,1,0,2,0,0,0,1,1,0,1, +2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0, +0,1,0,0,2,0,2,1,1,0,1,0,1,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,1,0,1,1,2,0,1,0,0,1,1,1,0,1,0,0,1,0,0,0,1,0,0,1, +1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,0,2,1,1,1,1,1,0,1,0,0,0,0,1,0,1, +0,1,1,1,2,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,1,2,1,0,0,0,0,0,1,1,1,1,1,0,1,0,0,0,1,1,0,0, +) + +Win1255HebrewModel = { + 'char_to_order_map': WIN1255_CHAR_TO_ORDER_MAP, + 'precedence_matrix': HEBREW_LANG_MODEL, + 'typical_positive_ratio': 0.984004, + 'keep_english_letter': False, + 'charset_name': "windows-1255", + 'language': 'Hebrew', +} diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/langhungarianmodel.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/langhungarianmodel.py new file mode 100644 index 00000000..bb7c095e --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/langhungarianmodel.py @@ -0,0 +1,225 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +# 255: Control characters that usually does not exist in any text +# 254: Carriage/Return +# 253: symbol (punctuation) that does not belong to word +# 252: 0 - 9 + +# Character Mapping Table: +Latin2_HungarianCharToOrderMap = ( +255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 +252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 +253, 28, 40, 54, 45, 32, 50, 49, 38, 39, 53, 36, 41, 34, 35, 47, + 46, 71, 43, 33, 37, 57, 48, 64, 68, 55, 52,253,253,253,253,253, +253, 2, 18, 26, 17, 1, 27, 12, 20, 9, 22, 7, 6, 13, 4, 8, + 23, 67, 10, 5, 3, 21, 19, 65, 62, 16, 11,253,253,253,253,253, +159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174, +175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190, +191,192,193,194,195,196,197, 75,198,199,200,201,202,203,204,205, + 79,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220, +221, 51, 81,222, 78,223,224,225,226, 44,227,228,229, 61,230,231, +232,233,234, 58,235, 66, 59,236,237,238, 60, 69, 63,239,240,241, + 82, 14, 74,242, 70, 80,243, 72,244, 15, 83, 77, 84, 30, 76, 85, +245,246,247, 25, 73, 42, 24,248,249,250, 31, 56, 29,251,252,253, +) + +win1250HungarianCharToOrderMap = ( +255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 +252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 +253, 28, 40, 54, 45, 32, 50, 49, 38, 39, 53, 36, 41, 34, 35, 47, + 46, 72, 43, 33, 37, 57, 48, 64, 68, 55, 52,253,253,253,253,253, +253, 2, 18, 26, 17, 1, 27, 12, 20, 9, 22, 7, 6, 13, 4, 8, + 23, 67, 10, 5, 3, 21, 19, 65, 62, 16, 11,253,253,253,253,253, +161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176, +177,178,179,180, 78,181, 69,182,183,184,185,186,187,188,189,190, +191,192,193,194,195,196,197, 76,198,199,200,201,202,203,204,205, + 81,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220, +221, 51, 83,222, 80,223,224,225,226, 44,227,228,229, 61,230,231, +232,233,234, 58,235, 66, 59,236,237,238, 60, 70, 63,239,240,241, + 84, 14, 75,242, 71, 82,243, 73,244, 15, 85, 79, 86, 30, 77, 87, +245,246,247, 25, 74, 42, 24,248,249,250, 31, 56, 29,251,252,253, +) + +# Model Table: +# total sequences: 100% +# first 512 sequences: 94.7368% +# first 1024 sequences:5.2623% +# rest sequences: 0.8894% +# negative sequences: 0.0009% +HungarianLangModel = ( +0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, +3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,2,2,3,3,1,1,2,2,2,2,2,1,2, +3,2,2,3,3,3,3,3,2,3,3,3,3,3,3,1,2,3,3,3,3,2,3,3,1,1,3,3,0,1,1,1, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0, +3,2,1,3,3,3,3,3,2,3,3,3,3,3,1,1,2,3,3,3,3,3,3,3,1,1,3,2,0,1,1,1, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, +3,3,3,3,3,3,3,3,3,3,3,1,1,2,3,3,3,1,3,3,3,3,3,1,3,3,2,2,0,3,2,3, +0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0, +3,3,3,3,3,3,2,3,3,3,2,3,3,2,3,3,3,3,3,2,3,3,2,2,3,2,3,2,0,3,2,2, +0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0, +3,3,3,3,3,3,2,3,3,3,3,3,2,3,3,3,1,2,3,2,2,3,1,2,3,3,2,2,0,3,3,3, +0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, +3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,2,3,3,3,3,2,3,3,3,3,0,2,3,2, +0,0,0,1,1,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, +3,3,3,3,3,3,3,3,3,3,3,1,1,1,3,3,2,1,3,2,2,3,2,1,3,2,2,1,0,3,3,1, +0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, +3,2,2,3,3,3,3,3,1,2,3,3,3,3,1,2,1,3,3,3,3,2,2,3,1,1,3,2,0,1,1,1, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, +3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,2,1,3,3,3,3,3,2,2,1,3,3,3,0,1,1,2, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,2,3,3,3,2,0,3,2,3, +0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,1,0, +3,3,3,3,3,3,2,3,3,3,2,3,2,3,3,3,1,3,2,2,2,3,1,1,3,3,1,1,0,3,3,2, +0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, +3,3,3,3,3,3,3,2,3,3,3,2,3,2,3,3,3,2,3,3,3,3,3,1,2,3,2,2,0,2,2,2, +0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, +3,3,3,2,2,2,3,1,3,3,2,2,1,3,3,3,1,1,3,1,2,3,2,3,2,2,2,1,0,2,2,2, +0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0, +3,1,1,3,3,3,3,3,1,2,3,3,3,3,1,2,1,3,3,3,2,2,3,2,1,0,3,2,0,1,1,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,1,1,3,3,3,3,3,1,2,3,3,3,3,1,1,0,3,3,3,3,0,2,3,0,0,2,1,0,1,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,2,2,3,3,2,2,2,2,3,3,0,1,2,3,2,3,2,2,3,2,1,2,0,2,2,2, +0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0, +3,3,3,3,3,3,1,2,3,3,3,2,1,2,3,3,2,2,2,3,2,3,3,1,3,3,1,1,0,2,3,2, +0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, +3,3,3,1,2,2,2,2,3,3,3,1,1,1,3,3,1,1,3,1,1,3,2,1,2,3,1,1,0,2,2,2, +0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, +3,3,3,2,1,2,1,1,3,3,1,1,1,1,3,3,1,1,2,2,1,2,1,1,2,2,1,1,0,2,2,1, +0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, +3,3,3,1,1,2,1,1,3,3,1,0,1,1,3,3,2,0,1,1,2,3,1,0,2,2,1,0,0,1,3,2, +0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, +3,2,1,3,3,3,3,3,1,2,3,2,3,3,2,1,1,3,2,3,2,1,2,2,0,1,2,1,0,0,1,1, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, +3,3,3,3,2,2,2,2,3,1,2,2,1,1,3,3,0,3,2,1,2,3,2,1,3,3,1,1,0,2,1,3, +0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, +3,3,3,2,2,2,3,2,3,3,3,2,1,1,3,3,1,1,1,2,2,3,2,3,2,2,2,1,0,2,2,1, +0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, +1,0,0,3,3,3,3,3,0,0,3,3,2,3,0,0,0,2,3,3,1,0,1,2,0,0,1,1,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,1,2,3,3,3,3,3,1,2,3,3,2,2,1,1,0,3,3,2,2,1,2,2,1,0,2,2,0,1,1,1, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,2,2,1,3,1,2,3,3,2,2,1,1,2,2,1,1,1,1,3,2,1,1,1,1,2,1,0,1,2,1, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0, +2,3,3,1,1,1,1,1,3,3,3,0,1,1,3,3,1,1,1,1,1,2,2,0,3,1,1,2,0,2,1,1, +0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, +3,1,0,1,2,1,2,2,0,1,2,3,1,2,0,0,0,2,1,1,1,1,1,2,0,0,1,1,0,0,0,0, +1,2,1,2,2,2,1,2,1,2,0,2,0,2,2,1,1,2,1,1,2,1,1,1,0,1,0,0,0,1,1,0, +1,1,1,2,3,2,3,3,0,1,2,2,3,1,0,1,0,2,1,2,2,0,1,1,0,0,1,1,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,0,0,3,3,2,2,1,0,0,3,2,3,2,0,0,0,1,1,3,0,0,1,1,0,0,2,1,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,1,1,2,2,3,3,1,0,1,3,2,3,1,1,1,0,1,1,1,1,1,3,1,0,0,2,2,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,1,1,1,2,2,2,1,0,1,2,3,3,2,0,0,0,2,1,1,1,2,1,1,1,0,1,1,1,0,0,0, +1,2,2,2,2,2,1,1,1,2,0,2,1,1,1,1,1,2,1,1,1,1,1,1,0,1,1,1,0,0,1,1, +3,2,2,1,0,0,1,1,2,2,0,3,0,1,2,1,1,0,0,1,1,1,0,1,1,1,1,0,2,1,1,1, +2,2,1,1,1,2,1,2,1,1,1,1,1,1,1,2,1,1,1,2,3,1,1,1,1,1,1,1,1,1,0,1, +2,3,3,0,1,0,0,0,3,3,1,0,0,1,2,2,1,0,0,0,0,2,0,0,1,1,1,0,2,1,1,1, +2,1,1,1,1,1,1,2,1,1,0,1,1,0,1,1,1,0,1,2,1,1,0,1,1,1,1,1,1,1,0,1, +2,3,3,0,1,0,0,0,2,2,0,0,0,0,1,2,2,0,0,0,0,1,0,0,1,1,0,0,2,0,1,0, +2,1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,2,0,1,1,1,1,1,0,1, +3,2,2,0,1,0,1,0,2,3,2,0,0,1,2,2,1,0,0,1,1,1,0,0,2,1,0,1,2,2,1,1, +2,1,1,1,1,1,1,2,1,1,1,1,1,1,0,2,1,0,1,1,0,1,1,1,0,1,1,2,1,1,0,1, +2,2,2,0,0,1,0,0,2,2,1,1,0,0,2,1,1,0,0,0,1,2,0,0,2,1,0,0,2,1,1,1, +2,1,1,1,1,2,1,2,1,1,1,2,2,1,1,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,0,1, +1,2,3,0,0,0,1,0,3,2,1,0,0,1,2,1,1,0,0,0,0,2,1,0,1,1,0,0,2,1,2,1, +1,1,0,0,0,1,0,1,1,1,1,1,2,0,0,1,0,0,0,2,0,0,1,1,1,1,1,1,1,1,0,1, +3,0,0,2,1,2,2,1,0,0,2,1,2,2,0,0,0,2,1,1,1,0,1,1,0,0,1,1,2,0,0,0, +1,2,1,2,2,1,1,2,1,2,0,1,1,1,1,1,1,1,1,1,2,1,1,0,0,1,1,1,1,0,0,1, +1,3,2,0,0,0,1,0,2,2,2,0,0,0,2,2,1,0,0,0,0,3,1,1,1,1,0,0,2,1,1,1, +2,1,0,1,1,1,0,1,1,1,1,1,1,1,0,2,1,0,0,1,0,1,1,0,1,1,1,1,1,1,0,1, +2,3,2,0,0,0,1,0,2,2,0,0,0,0,2,1,1,0,0,0,0,2,1,0,1,1,0,0,2,1,1,0, +2,1,1,1,1,2,1,2,1,2,0,1,1,1,0,2,1,1,1,2,1,1,1,1,0,1,1,1,1,1,0,1, +3,1,1,2,2,2,3,2,1,1,2,2,1,1,0,1,0,2,2,1,1,1,1,1,0,0,1,1,0,1,1,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,2,2,0,0,0,0,0,2,2,0,0,0,0,2,2,1,0,0,0,1,1,0,0,1,2,0,0,2,1,1,1, +2,2,1,1,1,2,1,2,1,1,0,1,1,1,1,2,1,1,1,2,1,1,1,1,0,1,2,1,1,1,0,1, +1,0,0,1,2,3,2,1,0,0,2,0,1,1,0,0,0,1,1,1,1,0,1,1,0,0,1,0,0,0,0,0, +1,2,1,2,1,2,1,1,1,2,0,2,1,1,1,0,1,2,0,0,1,1,1,0,0,0,0,0,0,0,0,0, +2,3,2,0,0,0,0,0,1,1,2,1,0,0,1,1,1,0,0,0,0,2,0,0,1,1,0,0,2,1,1,1, +2,1,1,1,1,1,1,2,1,0,1,1,1,1,0,2,1,1,1,1,1,1,0,1,0,1,1,1,1,1,0,1, +1,2,2,0,1,1,1,0,2,2,2,0,0,0,3,2,1,0,0,0,1,1,0,0,1,1,0,1,1,1,0,0, +1,1,0,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,0,0,1,1,1,0,1,0,1, +2,1,0,2,1,1,2,2,1,1,2,1,1,1,0,0,0,1,1,0,1,1,1,1,0,0,1,1,1,0,0,0, +1,2,2,2,2,2,1,1,1,2,0,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,1,0, +1,2,3,0,0,0,1,0,2,2,0,0,0,0,2,2,0,0,0,0,0,1,0,0,1,0,0,0,2,0,1,0, +2,1,1,1,1,1,0,2,0,0,0,1,2,1,1,1,1,0,1,2,0,1,0,1,0,1,1,1,0,1,0,1, +2,2,2,0,0,0,1,0,2,1,2,0,0,0,1,1,2,0,0,0,0,1,0,0,1,1,0,0,2,1,0,1, +2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,0,1,1,1,1,1,0,1, +1,2,2,0,0,0,1,0,2,2,2,0,0,0,1,1,0,0,0,0,0,1,1,0,2,0,0,1,1,1,0,1, +1,0,1,1,1,1,1,1,0,1,1,1,1,0,0,1,0,0,1,1,0,1,0,1,1,1,1,1,0,0,0,1, +1,0,0,1,0,1,2,1,0,0,1,1,1,2,0,0,0,1,1,0,1,0,1,1,0,0,1,0,0,0,0,0, +0,2,1,2,1,1,1,1,1,2,0,2,0,1,1,0,1,2,1,0,1,1,1,0,0,0,0,0,0,1,0,0, +2,1,1,0,1,2,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,0,1,0,0,0,2,1,0,1, +2,2,1,1,1,1,1,2,1,1,0,1,1,1,1,2,1,1,1,2,1,1,0,1,0,1,1,1,1,1,0,1, +1,2,2,0,0,0,0,0,1,1,0,0,0,0,2,1,0,0,0,0,0,2,0,0,2,2,0,0,2,0,0,1, +2,1,1,1,1,1,1,1,0,1,1,0,1,1,0,1,0,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1, +1,1,2,0,0,3,1,0,2,1,1,1,0,0,1,1,1,0,0,0,1,1,0,0,0,1,0,0,1,0,1,0, +1,2,1,0,1,1,1,2,1,1,0,1,1,1,1,1,0,0,0,1,1,1,1,1,0,1,0,0,0,1,0,0, +2,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,2,0,0,0, +2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,1,1,0,0,1,1,1,1,1,0,1, +2,1,1,1,2,1,1,1,0,1,1,2,1,0,0,0,0,1,1,1,1,0,1,0,0,0,0,1,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,1,0,1,1,1,1,1,0,0,1,1,2,1,0,0,0,1,1,0,0,0,1,1,0,0,1,0,1,0,0,0, +1,2,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,0,1,1,1,0,0,0,0,0,0,1,0,0, +2,0,0,0,1,1,1,1,0,0,1,1,0,0,0,0,0,1,1,1,2,0,0,1,0,0,1,0,1,0,0,0, +0,1,1,1,1,1,1,1,1,2,0,1,1,1,1,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0, +1,0,0,1,1,1,1,1,0,0,2,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0, +0,1,1,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0, +1,0,0,1,1,1,0,0,0,0,1,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, +0,1,1,1,1,1,0,0,1,1,0,1,0,1,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0, +0,0,0,1,0,0,0,0,0,0,1,1,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,1,1,1,0,1,0,0,1,1,0,1,0,1,1,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0, +2,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,0,1,0,0,1,0,1,0,1,1,1,0,0,1,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,0,0,1,1,1,1,0,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0, +0,1,1,1,1,1,1,0,1,1,0,1,0,1,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0, +) + +Latin2HungarianModel = { + 'char_to_order_map': Latin2_HungarianCharToOrderMap, + 'precedence_matrix': HungarianLangModel, + 'typical_positive_ratio': 0.947368, + 'keep_english_letter': True, + 'charset_name': "ISO-8859-2", + 'language': 'Hungarian', +} + +Win1250HungarianModel = { + 'char_to_order_map': win1250HungarianCharToOrderMap, + 'precedence_matrix': HungarianLangModel, + 'typical_positive_ratio': 0.947368, + 'keep_english_letter': True, + 'charset_name': "windows-1250", + 'language': 'Hungarian', +} diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/langthaimodel.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/langthaimodel.py new file mode 100644 index 00000000..15f94c2d --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/langthaimodel.py @@ -0,0 +1,199 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +# 255: Control characters that usually does not exist in any text +# 254: Carriage/Return +# 253: symbol (punctuation) that does not belong to word +# 252: 0 - 9 + +# The following result for thai was collected from a limited sample (1M). + +# Character Mapping Table: +TIS620CharToOrderMap = ( +255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 +252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 +253,182,106,107,100,183,184,185,101, 94,186,187,108,109,110,111, # 40 +188,189,190, 89, 95,112,113,191,192,193,194,253,253,253,253,253, # 50 +253, 64, 72, 73,114, 74,115,116,102, 81,201,117, 90,103, 78, 82, # 60 + 96,202, 91, 79, 84,104,105, 97, 98, 92,203,253,253,253,253,253, # 70 +209,210,211,212,213, 88,214,215,216,217,218,219,220,118,221,222, +223,224, 99, 85, 83,225,226,227,228,229,230,231,232,233,234,235, +236, 5, 30,237, 24,238, 75, 8, 26, 52, 34, 51,119, 47, 58, 57, + 49, 53, 55, 43, 20, 19, 44, 14, 48, 3, 17, 25, 39, 62, 31, 54, + 45, 9, 16, 2, 61, 15,239, 12, 42, 46, 18, 21, 76, 4, 66, 63, + 22, 10, 1, 36, 23, 13, 40, 27, 32, 35, 86,240,241,242,243,244, + 11, 28, 41, 29, 33,245, 50, 37, 6, 7, 67, 77, 38, 93,246,247, + 68, 56, 59, 65, 69, 60, 70, 80, 71, 87,248,249,250,251,252,253, +) + +# Model Table: +# total sequences: 100% +# first 512 sequences: 92.6386% +# first 1024 sequences:7.3177% +# rest sequences: 1.0230% +# negative sequences: 0.0436% +ThaiLangModel = ( +0,1,3,3,3,3,0,0,3,3,0,3,3,0,3,3,3,3,3,3,3,3,0,0,3,3,3,0,3,3,3,3, +0,3,3,0,0,0,1,3,0,3,3,2,3,3,0,1,2,3,3,3,3,0,2,0,2,0,0,3,2,1,2,2, +3,0,3,3,2,3,0,0,3,3,0,3,3,0,3,3,3,3,3,3,3,3,3,0,3,2,3,0,2,2,2,3, +0,2,3,0,0,0,0,1,0,1,2,3,1,1,3,2,2,0,1,1,0,0,1,0,0,0,0,0,0,0,1,1, +3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,3,3,2,3,2,3,3,2,2,2, +3,1,2,3,0,3,3,2,2,1,2,3,3,1,2,0,1,3,0,1,0,0,1,0,0,0,0,0,0,0,1,1, +3,3,2,2,3,3,3,3,1,2,3,3,3,3,3,2,2,2,2,3,3,2,2,3,3,2,2,3,2,3,2,2, +3,3,1,2,3,1,2,2,3,3,1,0,2,1,0,0,3,1,2,1,0,0,1,0,0,0,0,0,0,1,0,1, +3,3,3,3,3,3,2,2,3,3,3,3,2,3,2,2,3,3,2,2,3,2,2,2,2,1,1,3,1,2,1,1, +3,2,1,0,2,1,0,1,0,1,1,0,1,1,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0, +3,3,3,2,3,2,3,3,2,2,3,2,3,3,2,3,1,1,2,3,2,2,2,3,2,2,2,2,2,1,2,1, +2,2,1,1,3,3,2,1,0,1,2,2,0,1,3,0,0,0,1,1,0,0,0,0,0,2,3,0,0,2,1,1, +3,3,2,3,3,2,0,0,3,3,0,3,3,0,2,2,3,1,2,2,1,1,1,0,2,2,2,0,2,2,1,1, +0,2,1,0,2,0,0,2,0,1,0,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0, +3,3,2,3,3,2,0,0,3,3,0,2,3,0,2,1,2,2,2,2,1,2,0,0,2,2,2,0,2,2,1,1, +0,2,1,0,2,0,0,2,0,1,1,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0, +3,3,2,3,2,3,2,0,2,2,1,3,2,1,3,2,1,2,3,2,2,3,0,2,3,2,2,1,2,2,2,2, +1,2,2,0,0,0,0,2,0,1,2,0,1,1,1,0,1,0,3,1,1,0,0,0,0,0,0,0,0,0,1,0, +3,3,2,3,3,2,3,2,2,2,3,2,2,3,2,2,1,2,3,2,2,3,1,3,2,2,2,3,2,2,2,3, +3,2,1,3,0,1,1,1,0,2,1,1,1,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,2,0,0, +1,0,0,3,0,3,3,3,3,3,0,0,3,0,2,2,3,3,3,3,3,0,0,0,1,1,3,0,0,0,0,2, +0,0,1,0,0,0,0,0,0,0,2,3,0,0,0,3,0,2,0,0,0,0,0,3,0,0,0,0,0,0,0,0, +2,0,3,3,3,3,0,0,2,3,0,0,3,0,3,3,2,3,3,3,3,3,0,0,3,3,3,0,0,0,3,3, +0,0,3,0,0,0,0,2,0,0,2,1,1,3,0,0,1,0,0,2,3,0,1,0,0,0,0,0,0,0,1,0, +3,3,3,3,2,3,3,3,3,3,3,3,1,2,1,3,3,2,2,1,2,2,2,3,1,1,2,0,2,1,2,1, +2,2,1,0,0,0,1,1,0,1,0,1,1,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0, +3,0,2,1,2,3,3,3,0,2,0,2,2,0,2,1,3,2,2,1,2,1,0,0,2,2,1,0,2,1,2,2, +0,1,1,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,2,1,3,3,1,1,3,0,2,3,1,1,3,2,1,1,2,0,2,2,3,2,1,1,1,1,1,2, +3,0,0,1,3,1,2,1,2,0,3,0,0,0,1,0,3,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0, +3,3,1,1,3,2,3,3,3,1,3,2,1,3,2,1,3,2,2,2,2,1,3,3,1,2,1,3,1,2,3,0, +2,1,1,3,2,2,2,1,2,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2, +3,3,2,3,2,3,3,2,3,2,3,2,3,3,2,1,0,3,2,2,2,1,2,2,2,1,2,2,1,2,1,1, +2,2,2,3,0,1,3,1,1,1,1,0,1,1,0,2,1,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,2,3,2,2,1,1,3,2,3,2,3,2,0,3,2,2,1,2,0,2,2,2,1,2,2,2,2,1, +3,2,1,2,2,1,0,2,0,1,0,0,1,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,1, +3,3,3,3,3,2,3,1,2,3,3,2,2,3,0,1,1,2,0,3,3,2,2,3,0,1,1,3,0,0,0,0, +3,1,0,3,3,0,2,0,2,1,0,0,3,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,2,3,2,3,3,0,1,3,1,1,2,1,2,1,1,3,1,1,0,2,3,1,1,1,1,1,1,1,1, +3,1,1,2,2,2,2,1,1,1,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, +3,2,2,1,1,2,1,3,3,2,3,2,2,3,2,2,3,1,2,2,1,2,0,3,2,1,2,2,2,2,2,1, +3,2,1,2,2,2,1,1,1,1,0,0,1,1,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,3,3,1,3,3,0,2,1,0,3,2,0,0,3,1,0,1,1,0,1,0,0,0,0,0,1, +1,0,0,1,0,3,2,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,0,2,2,2,3,0,0,1,3,0,3,2,0,3,2,2,3,3,3,3,3,1,0,2,2,2,0,2,2,1,2, +0,2,3,0,0,0,0,1,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, +3,0,2,3,1,3,3,2,3,3,0,3,3,0,3,2,2,3,2,3,3,3,0,0,2,2,3,0,1,1,1,3, +0,0,3,0,0,0,2,2,0,1,3,0,1,2,2,2,3,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1, +3,2,3,3,2,0,3,3,2,2,3,1,3,2,1,3,2,0,1,2,2,0,2,3,2,1,0,3,0,0,0,0, +3,0,0,2,3,1,3,0,0,3,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,1,3,2,2,2,1,2,0,1,3,1,1,3,1,3,0,0,2,1,1,1,1,2,1,1,1,0,2,1,0,1, +1,2,0,0,0,3,1,1,0,0,0,0,1,0,1,0,0,1,0,1,0,0,0,0,0,3,1,0,0,0,1,0, +3,3,3,3,2,2,2,2,2,1,3,1,1,1,2,0,1,1,2,1,2,1,3,2,0,0,3,1,1,1,1,1, +3,1,0,2,3,0,0,0,3,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,2,3,0,3,3,0,2,0,0,0,0,0,0,0,3,0,0,1,0,0,0,0,0,0,0,0,0,0,0, +0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,2,3,1,3,0,0,1,2,0,0,2,0,3,3,2,3,3,3,2,3,0,0,2,2,2,0,0,0,2,2, +0,0,1,0,0,0,0,3,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, +0,0,0,3,0,2,0,0,0,0,0,0,0,0,0,0,1,2,3,1,3,3,0,0,1,0,3,0,0,0,0,0, +0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,1,2,3,1,2,3,1,0,3,0,2,2,1,0,2,1,1,2,0,1,0,0,1,1,1,1,0,1,0,0, +1,0,0,0,0,1,1,0,3,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,2,1,0,1,1,1,3,1,2,2,2,2,2,2,1,1,1,1,0,3,1,0,1,3,1,1,1,1, +1,1,0,2,0,1,3,1,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0,1, +3,0,2,2,1,3,3,2,3,3,0,1,1,0,2,2,1,2,1,3,3,1,0,0,3,2,0,0,0,0,2,1, +0,1,0,0,0,0,1,2,0,1,1,3,1,1,2,2,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, +0,0,3,0,0,1,0,0,0,3,0,0,3,0,3,1,0,1,1,1,3,2,0,0,0,3,0,0,0,0,2,0, +0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0, +3,3,1,3,2,1,3,3,1,2,2,0,1,2,1,0,1,2,0,0,0,0,0,3,0,0,0,3,0,0,0,0, +3,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,0,1,2,0,3,3,3,2,2,0,1,1,0,1,3,0,0,0,2,2,0,0,0,0,3,1,0,1,0,0,0, +0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,0,2,3,1,2,0,0,2,1,0,3,1,0,1,2,0,1,1,1,1,3,0,0,3,1,1,0,2,2,1,1, +0,2,0,0,0,0,0,1,0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,0,0,3,1,2,0,0,2,2,0,1,2,0,1,0,1,3,1,2,1,0,0,0,2,0,3,0,0,0,1,0, +0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,0,1,1,2,2,0,0,0,2,0,2,1,0,1,1,0,1,1,1,2,1,0,0,1,1,1,0,2,1,1,1, +0,1,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1, +0,0,0,2,0,1,3,1,1,1,1,0,0,0,0,3,2,0,1,0,0,0,1,2,0,0,0,1,0,0,0,0, +0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,3,3,3,3,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,0,2,3,2,2,0,0,0,1,0,0,0,0,2,3,2,1,2,2,3,0,0,0,2,3,1,0,0,0,1,1, +0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0, +3,3,2,2,0,1,0,0,0,0,2,0,2,0,1,0,0,0,1,1,0,0,0,2,1,0,1,0,1,1,0,0, +0,1,0,2,0,0,1,0,3,0,1,0,0,0,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,1,0,0,1,0,0,0,0,0,1,1,2,0,0,0,0,1,0,0,1,3,1,0,0,0,0,1,1,0,0, +0,1,0,0,0,0,3,0,0,0,0,0,0,3,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0, +3,3,1,1,1,1,2,3,0,0,2,1,1,1,1,1,0,2,1,1,0,0,0,2,1,0,1,2,1,1,0,1, +2,1,0,3,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,3,1,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1, +0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,2,0,0,0,0,0,0,1,2,1,0,1,1,0,2,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,2,0,0,0,1,3,0,1,0,0,0,2,0,0,0,0,0,0,0,1,2,0,0,0,0,0, +3,3,0,0,1,1,2,0,0,1,2,1,0,1,1,1,0,1,1,0,0,2,1,1,0,1,0,0,1,1,1,0, +0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,2,2,1,0,0,0,0,1,0,0,0,0,3,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0, +2,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,3,0,0,1,1,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,1,0,1,2,0,1,2,0,0,1,1,0,2,0,1,0,0,1,0,0,0,0,1,0,0,0,2,0,0,0,0, +1,0,0,1,0,1,1,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,1,0,0,0,0,0,0,0,1,1,0,1,1,0,2,1,3,0,0,0,0,1,1,0,0,0,0,0,0,0,3, +1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,0,1,0,1,0,0,2,0,0,2,0,0,1,1,2,0,0,1,1,0,0,0,1,0,0,0,1,1,0,0,0, +1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, +1,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,1,1,0,0,0, +2,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,0,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,3,0,0,0, +2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,1,0,0,0,0, +1,0,0,0,0,0,0,0,0,1,0,0,0,0,2,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,1,1,0,0,2,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +) + +TIS620ThaiModel = { + 'char_to_order_map': TIS620CharToOrderMap, + 'precedence_matrix': ThaiLangModel, + 'typical_positive_ratio': 0.926386, + 'keep_english_letter': False, + 'charset_name': "TIS-620", + 'language': 'Thai', +} diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/langturkishmodel.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/langturkishmodel.py new file mode 100644 index 00000000..a427a457 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/langturkishmodel.py @@ -0,0 +1,193 @@ +# -*- coding: utf-8 -*- +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# Özgür Baskın - Turkish Language Model +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +# 255: Control characters that usually does not exist in any text +# 254: Carriage/Return +# 253: symbol (punctuation) that does not belong to word +# 252: 0 - 9 + +# Character Mapping Table: +Latin5_TurkishCharToOrderMap = ( +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255, 23, 37, 47, 39, 29, 52, 36, 45, 53, 60, 16, 49, 20, 46, 42, + 48, 69, 44, 35, 31, 51, 38, 62, 65, 43, 56,255,255,255,255,255, +255, 1, 21, 28, 12, 2, 18, 27, 25, 3, 24, 10, 5, 13, 4, 15, + 26, 64, 7, 8, 9, 14, 32, 57, 58, 11, 22,255,255,255,255,255, +180,179,178,177,176,175,174,173,172,171,170,169,168,167,166,165, +164,163,162,161,160,159,101,158,157,156,155,154,153,152,151,106, +150,149,148,147,146,145,144,100,143,142,141,140,139,138,137,136, + 94, 80, 93,135,105,134,133, 63,132,131,130,129,128,127,126,125, +124,104, 73, 99, 79, 85,123, 54,122, 98, 92,121,120, 91,103,119, + 68,118,117, 97,116,115, 50, 90,114,113,112,111, 55, 41, 40, 86, + 89, 70, 59, 78, 71, 82, 88, 33, 77, 66, 84, 83,110, 75, 61, 96, + 30, 67,109, 74, 87,102, 34, 95, 81,108, 76, 72, 17, 6, 19,107, +) + +TurkishLangModel = ( +3,2,3,3,3,1,3,3,3,3,3,3,3,3,2,1,1,3,3,1,3,3,0,3,3,3,3,3,0,3,1,3, +3,2,1,0,0,1,1,0,0,0,1,0,0,1,1,1,1,0,0,0,0,0,0,0,2,2,0,0,1,0,0,1, +3,2,2,3,3,0,3,3,3,3,3,3,3,2,3,1,0,3,3,1,3,3,0,3,3,3,3,3,0,3,0,3, +3,1,1,0,1,0,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,2,2,0,0,0,1,0,1, +3,3,2,3,3,0,3,3,3,3,3,3,3,2,3,1,1,3,3,0,3,3,1,2,3,3,3,3,0,3,0,3, +3,1,1,0,0,0,1,0,0,0,0,1,1,0,1,2,1,0,0,0,1,0,0,0,0,2,0,0,0,0,0,1, +3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,1,3,3,2,0,3,2,1,2,2,1,3,3,0,0,0,2, +2,2,0,1,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,1, +3,3,3,2,3,3,1,2,3,3,3,3,3,3,3,1,3,2,1,0,3,2,0,1,2,3,3,2,1,0,0,2, +2,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0,2,0,0,0, +1,0,1,3,3,1,3,3,3,3,3,3,3,1,2,0,0,2,3,0,2,3,0,0,2,2,2,3,0,3,0,1, +2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,3,3,3,0,3,2,0,2,3,2,3,3,1,0,0,2, +3,2,0,0,1,0,0,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,1,1,1,0,2,0,0,1, +3,3,3,2,3,3,2,3,3,3,3,2,3,3,3,0,3,3,0,0,2,1,0,0,2,3,2,2,0,0,0,2, +2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,1,0,2,0,0,1, +3,3,3,2,3,3,3,3,3,3,3,2,3,3,3,0,3,2,0,1,3,2,1,1,3,2,3,2,1,0,0,2, +2,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, +3,3,3,2,3,3,3,3,3,3,3,2,3,3,3,0,3,2,2,0,2,3,0,0,2,2,2,2,0,0,0,2, +3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,2,0,1,0,0,0, +3,3,3,3,3,3,3,2,2,2,2,3,2,3,3,0,3,3,1,1,2,2,0,0,2,2,3,2,0,0,1,3, +0,3,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1, +3,3,3,2,3,3,3,2,1,2,2,3,2,3,3,0,3,2,0,0,1,1,0,1,1,2,1,2,0,0,0,1, +0,3,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0, +3,3,3,2,3,3,2,3,2,2,2,3,3,3,3,1,3,1,1,0,3,2,1,1,3,3,2,3,1,0,0,1, +1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,2,0,0,1, +3,2,2,3,3,0,3,3,3,3,3,3,3,2,2,1,0,3,3,1,3,3,0,1,3,3,2,3,0,3,0,3, +2,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0, +2,2,2,3,3,0,3,3,3,3,3,3,3,3,3,0,0,3,2,0,3,3,0,3,2,3,3,3,0,3,1,3, +2,0,0,0,0,0,0,0,0,0,0,1,0,1,2,0,1,0,0,0,0,0,0,0,2,2,0,0,1,0,0,1, +3,3,3,1,2,3,3,1,0,0,1,0,0,3,3,2,3,0,0,2,0,0,2,0,2,0,0,0,2,0,2,0, +0,3,1,0,1,0,0,0,2,2,1,0,1,1,2,1,2,2,2,0,2,1,1,0,0,0,2,0,0,0,0,0, +1,2,1,3,3,0,3,3,3,3,3,2,3,0,0,0,0,2,3,0,2,3,1,0,2,3,1,3,0,3,0,2, +3,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,1,3,3,2,2,3,2,2,0,1,2,3,0,1,2,1,0,1,0,0,0,1,0,2,2,0,0,0,1, +1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0, +3,3,3,1,3,3,1,1,3,3,1,1,3,3,1,0,2,1,2,0,2,1,0,0,1,1,2,1,0,0,0,2, +2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,1,0,2,1,3,0,0,2,0,0,3,3,0,3,0,0,1,0,1,2,0,0,1,1,2,2,0,1,0, +0,1,2,1,1,0,1,0,1,1,1,1,1,0,1,1,1,2,2,1,2,0,1,0,0,0,0,0,0,1,0,0, +3,3,3,2,3,2,3,3,0,2,2,2,3,3,3,0,3,0,0,0,2,2,0,1,2,1,1,1,0,0,0,1, +0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, +3,3,3,3,3,3,2,1,2,2,3,3,3,3,2,0,2,0,0,0,2,2,0,0,2,1,3,3,0,0,1,1, +1,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0, +1,1,2,3,3,0,3,3,3,3,3,3,2,2,0,2,0,2,3,2,3,2,2,2,2,2,2,2,1,3,2,3, +2,0,2,1,2,2,2,2,1,1,2,2,1,2,2,1,2,0,0,2,1,1,0,2,1,0,0,1,0,0,0,1, +2,3,3,1,1,1,0,1,1,1,2,3,2,1,1,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0, +0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,2,2,2,3,2,3,2,2,1,3,3,3,0,2,1,2,0,2,1,0,0,1,1,1,1,1,0,0,1, +2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,2,0,1,0,0,0, +3,3,3,2,3,3,3,3,3,2,3,1,2,3,3,1,2,0,0,0,0,0,0,0,3,2,1,1,0,0,0,0, +2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0, +3,3,3,2,2,3,3,2,1,1,1,1,1,3,3,0,3,1,0,0,1,1,0,0,3,1,2,1,0,0,0,0, +0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0, +3,3,3,2,2,3,2,2,2,3,2,1,1,3,3,0,3,0,0,0,0,1,0,0,3,1,1,2,0,0,0,1, +1,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, +1,1,1,3,3,0,3,3,3,3,3,2,2,2,1,2,0,2,1,2,2,1,1,0,1,2,2,2,2,2,2,2, +0,0,2,1,2,1,2,1,0,1,1,3,1,2,1,1,2,0,0,2,0,1,0,1,0,1,0,0,0,1,0,1, +3,3,3,1,3,3,3,0,1,1,0,2,2,3,1,0,3,0,0,0,1,0,0,0,1,0,0,1,0,1,0,0, +1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,2,0,0,2,2,1,0,0,1,0,0,3,3,1,3,0,0,1,1,0,2,0,3,0,0,0,2,0,1,1, +0,1,2,0,1,2,2,0,2,2,2,2,1,0,2,1,1,0,2,0,2,1,2,0,0,0,0,0,0,0,0,0, +3,3,3,1,3,2,3,2,0,2,2,2,1,3,2,0,2,1,2,0,1,2,0,0,1,0,2,2,0,0,0,2, +1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0, +3,3,3,0,3,3,1,1,2,3,1,0,3,2,3,0,3,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0, +1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,3,3,0,3,3,2,3,3,2,2,0,0,0,0,1,2,0,1,3,0,0,0,3,1,1,0,3,0,2, +2,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,1,2,2,1,0,3,1,1,1,1,3,3,2,3,0,0,1,0,1,2,0,2,2,0,2,2,0,2,1, +0,2,2,1,1,1,1,0,2,1,1,0,1,1,1,1,2,1,2,1,2,0,1,0,1,0,0,0,0,0,0,0, +3,3,3,0,1,1,3,0,0,1,1,0,0,2,2,0,3,0,0,1,1,0,1,0,0,0,0,0,2,0,0,0, +0,3,1,0,1,0,1,0,2,0,0,1,0,1,0,1,1,1,2,1,1,0,2,0,0,0,0,0,0,0,0,0, +3,3,3,0,2,0,2,0,1,1,1,0,0,3,3,0,2,0,0,1,0,0,2,1,1,0,1,0,1,0,1,0, +0,2,0,1,2,0,2,0,2,1,1,0,1,0,2,1,1,0,2,1,1,0,1,0,0,0,1,1,0,0,0,0, +3,2,3,0,1,0,0,0,0,0,0,0,0,1,2,0,1,0,0,1,0,0,1,0,0,0,0,0,2,0,0,0, +0,0,1,1,0,0,1,0,1,0,0,1,0,0,0,2,1,0,1,0,2,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,0,0,2,3,0,0,1,0,1,0,2,3,2,3,0,0,1,3,0,2,1,0,0,0,0,2,0,1,0, +0,2,1,0,0,1,1,0,2,1,0,0,1,0,0,1,1,0,1,1,2,0,1,0,0,0,0,1,0,0,0,0, +3,2,2,0,0,1,1,0,0,0,0,0,0,3,1,1,1,0,0,0,0,0,1,0,0,0,0,0,2,0,1,0, +0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0, +0,0,0,3,3,0,2,3,2,2,1,2,2,1,1,2,0,1,3,2,2,2,0,0,2,2,0,0,0,1,2,1, +3,0,2,1,1,0,1,1,1,0,1,2,2,2,1,1,2,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0, +0,1,1,2,3,0,3,3,3,2,2,2,2,1,0,1,0,1,0,1,2,2,0,0,2,2,1,3,1,1,2,1, +0,0,1,1,2,0,1,1,0,0,1,2,0,2,1,1,2,0,0,1,0,0,0,1,0,1,0,1,0,0,0,0, +3,3,2,0,0,3,1,0,0,0,0,0,0,3,2,1,2,0,0,1,0,0,2,0,0,0,0,0,2,0,1,0, +0,2,1,1,0,0,1,0,1,2,0,0,1,1,0,0,2,1,1,1,1,0,2,0,0,0,0,0,0,0,0,0, +3,3,2,0,0,1,0,0,0,0,1,0,0,3,3,2,2,0,0,1,0,0,2,0,1,0,0,0,2,0,1,0, +0,0,1,1,0,0,2,0,2,1,0,0,1,1,2,1,2,0,2,1,2,1,1,1,0,0,1,1,0,0,0,0, +3,3,2,0,0,2,2,0,0,0,1,1,0,2,2,1,3,1,0,1,0,1,2,0,0,0,0,0,1,0,1,0, +0,1,1,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,2,0,0,0,1,0,0,1,0,0,2,3,1,2,0,0,1,0,0,2,0,0,0,1,0,2,0,2,0, +0,1,1,2,2,1,2,0,2,1,1,0,0,1,1,0,1,1,1,1,2,1,1,0,0,0,0,0,0,0,0,0, +3,3,3,0,2,1,2,1,0,0,1,1,0,3,3,1,2,0,0,1,0,0,2,0,2,0,1,1,2,0,0,0, +0,0,1,1,1,1,2,0,1,1,0,1,1,1,1,0,0,0,1,1,1,0,1,0,0,0,1,0,0,0,0,0, +3,3,3,0,2,2,3,2,0,0,1,0,0,2,3,1,0,0,0,0,0,0,2,0,2,0,0,0,2,0,0,0, +0,1,1,0,0,0,1,0,0,1,0,1,1,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0, +3,2,3,0,0,0,0,0,0,0,1,0,0,2,2,2,2,0,0,1,0,0,2,0,0,0,0,0,2,0,1,0, +0,0,2,1,1,0,1,0,2,1,1,0,0,1,1,2,1,0,2,0,2,0,1,0,0,0,2,0,0,0,0,0, +0,0,0,2,2,0,2,1,1,1,1,2,2,0,0,1,0,1,0,0,1,3,0,0,0,0,1,0,0,2,1,0, +0,0,1,0,1,0,0,0,0,0,2,1,0,1,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0, +2,0,0,2,3,0,2,3,1,2,2,0,2,0,0,2,0,2,1,1,1,2,1,0,0,1,2,1,1,2,1,0, +1,0,2,0,1,0,1,1,0,0,2,2,1,2,1,1,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0, +3,3,3,0,2,1,2,0,0,0,1,0,0,3,2,0,1,0,0,1,0,0,2,0,0,0,1,2,1,0,1,0, +0,0,0,0,1,0,1,0,0,1,0,0,0,0,1,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0, +0,0,0,2,2,0,2,2,1,1,0,1,1,1,1,1,0,0,1,2,1,1,1,0,1,0,0,0,1,1,1,1, +0,0,2,1,0,1,1,1,0,1,1,2,1,2,1,1,2,0,1,1,2,1,0,2,0,0,0,0,0,0,0,0, +3,2,2,0,0,2,0,0,0,0,0,0,0,2,2,0,2,0,0,1,0,0,2,0,0,0,0,0,2,0,0,0, +0,2,1,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0, +0,0,0,3,2,0,2,2,0,1,1,0,1,0,0,1,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0, +2,0,1,0,1,0,1,1,0,0,1,2,0,1,0,1,1,0,0,1,0,1,0,2,0,0,0,0,0,0,0,0, +2,2,2,0,1,1,0,0,0,1,0,0,0,1,2,0,1,0,0,1,0,0,1,0,0,0,0,1,2,0,1,0, +0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,1,0,2,0,0,0,0,0,0,0,0,0,0,0, +2,2,2,2,1,0,1,1,1,0,0,0,0,1,2,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0, +1,1,2,0,1,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,2,0,0,0,0,0,1, +0,0,1,2,2,0,2,1,2,1,1,2,2,0,0,0,0,1,0,0,1,1,0,0,2,0,0,0,0,1,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, +2,2,2,0,0,0,1,0,0,0,0,0,0,2,2,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, +0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,2,2,0,1,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,1,0,0,0,0,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +) + +Latin5TurkishModel = { + 'char_to_order_map': Latin5_TurkishCharToOrderMap, + 'precedence_matrix': TurkishLangModel, + 'typical_positive_ratio': 0.970290, + 'keep_english_letter': True, + 'charset_name': "ISO-8859-9", + 'language': 'Turkish', +} diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/latin1prober.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/latin1prober.py new file mode 100644 index 00000000..7d1e8c20 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/latin1prober.py @@ -0,0 +1,145 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Universal charset detector code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 2001 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# Shy Shalom - original C code +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .charsetprober import CharSetProber +from .enums import ProbingState + +FREQ_CAT_NUM = 4 + +UDF = 0 # undefined +OTH = 1 # other +ASC = 2 # ascii capital letter +ASS = 3 # ascii small letter +ACV = 4 # accent capital vowel +ACO = 5 # accent capital other +ASV = 6 # accent small vowel +ASO = 7 # accent small other +CLASS_NUM = 8 # total classes + +Latin1_CharToClass = ( + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 00 - 07 + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 08 - 0F + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 10 - 17 + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 18 - 1F + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 20 - 27 + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 28 - 2F + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 30 - 37 + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 38 - 3F + OTH, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 40 - 47 + ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 48 - 4F + ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 50 - 57 + ASC, ASC, ASC, OTH, OTH, OTH, OTH, OTH, # 58 - 5F + OTH, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 60 - 67 + ASS, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 68 - 6F + ASS, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 70 - 77 + ASS, ASS, ASS, OTH, OTH, OTH, OTH, OTH, # 78 - 7F + OTH, UDF, OTH, ASO, OTH, OTH, OTH, OTH, # 80 - 87 + OTH, OTH, ACO, OTH, ACO, UDF, ACO, UDF, # 88 - 8F + UDF, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 90 - 97 + OTH, OTH, ASO, OTH, ASO, UDF, ASO, ACO, # 98 - 9F + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # A0 - A7 + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # A8 - AF + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # B0 - B7 + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # B8 - BF + ACV, ACV, ACV, ACV, ACV, ACV, ACO, ACO, # C0 - C7 + ACV, ACV, ACV, ACV, ACV, ACV, ACV, ACV, # C8 - CF + ACO, ACO, ACV, ACV, ACV, ACV, ACV, OTH, # D0 - D7 + ACV, ACV, ACV, ACV, ACV, ACO, ACO, ACO, # D8 - DF + ASV, ASV, ASV, ASV, ASV, ASV, ASO, ASO, # E0 - E7 + ASV, ASV, ASV, ASV, ASV, ASV, ASV, ASV, # E8 - EF + ASO, ASO, ASV, ASV, ASV, ASV, ASV, OTH, # F0 - F7 + ASV, ASV, ASV, ASV, ASV, ASO, ASO, ASO, # F8 - FF +) + +# 0 : illegal +# 1 : very unlikely +# 2 : normal +# 3 : very likely +Latin1ClassModel = ( +# UDF OTH ASC ASS ACV ACO ASV ASO + 0, 0, 0, 0, 0, 0, 0, 0, # UDF + 0, 3, 3, 3, 3, 3, 3, 3, # OTH + 0, 3, 3, 3, 3, 3, 3, 3, # ASC + 0, 3, 3, 3, 1, 1, 3, 3, # ASS + 0, 3, 3, 3, 1, 2, 1, 2, # ACV + 0, 3, 3, 3, 3, 3, 3, 3, # ACO + 0, 3, 1, 3, 1, 1, 1, 3, # ASV + 0, 3, 1, 3, 1, 1, 3, 3, # ASO +) + + +class Latin1Prober(CharSetProber): + def __init__(self): + super(Latin1Prober, self).__init__() + self._last_char_class = None + self._freq_counter = None + self.reset() + + def reset(self): + self._last_char_class = OTH + self._freq_counter = [0] * FREQ_CAT_NUM + CharSetProber.reset(self) + + @property + def charset_name(self): + return "ISO-8859-1" + + @property + def language(self): + return "" + + def feed(self, byte_str): + byte_str = self.filter_with_english_letters(byte_str) + for c in byte_str: + char_class = Latin1_CharToClass[c] + freq = Latin1ClassModel[(self._last_char_class * CLASS_NUM) + + char_class] + if freq == 0: + self._state = ProbingState.NOT_ME + break + self._freq_counter[freq] += 1 + self._last_char_class = char_class + + return self.state + + def get_confidence(self): + if self.state == ProbingState.NOT_ME: + return 0.01 + + total = sum(self._freq_counter) + if total < 0.01: + confidence = 0.0 + else: + confidence = ((self._freq_counter[3] - self._freq_counter[1] * 20.0) + / total) + if confidence < 0.0: + confidence = 0.0 + # lower the confidence of latin1 so that other more accurate + # detector can take priority. + confidence = confidence * 0.73 + return confidence diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/mbcharsetprober.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/mbcharsetprober.py new file mode 100644 index 00000000..6256ecfd --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/mbcharsetprober.py @@ -0,0 +1,91 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Universal charset detector code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 2001 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# Shy Shalom - original C code +# Proofpoint, Inc. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .charsetprober import CharSetProber +from .enums import ProbingState, MachineState + + +class MultiByteCharSetProber(CharSetProber): + """ + MultiByteCharSetProber + """ + + def __init__(self, lang_filter=None): + super(MultiByteCharSetProber, self).__init__(lang_filter=lang_filter) + self.distribution_analyzer = None + self.coding_sm = None + self._last_char = [0, 0] + + def reset(self): + super(MultiByteCharSetProber, self).reset() + if self.coding_sm: + self.coding_sm.reset() + if self.distribution_analyzer: + self.distribution_analyzer.reset() + self._last_char = [0, 0] + + @property + def charset_name(self): + raise NotImplementedError + + @property + def language(self): + raise NotImplementedError + + def feed(self, byte_str): + for i in range(len(byte_str)): + coding_state = self.coding_sm.next_state(byte_str[i]) + if coding_state == MachineState.ERROR: + self.logger.debug('%s %s prober hit error at byte %s', + self.charset_name, self.language, i) + self._state = ProbingState.NOT_ME + break + elif coding_state == MachineState.ITS_ME: + self._state = ProbingState.FOUND_IT + break + elif coding_state == MachineState.START: + char_len = self.coding_sm.get_current_charlen() + if i == 0: + self._last_char[1] = byte_str[0] + self.distribution_analyzer.feed(self._last_char, char_len) + else: + self.distribution_analyzer.feed(byte_str[i - 1:i + 1], + char_len) + + self._last_char[0] = byte_str[-1] + + if self.state == ProbingState.DETECTING: + if (self.distribution_analyzer.got_enough_data() and + (self.get_confidence() > self.SHORTCUT_THRESHOLD)): + self._state = ProbingState.FOUND_IT + + return self.state + + def get_confidence(self): + return self.distribution_analyzer.get_confidence() diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/mbcsgroupprober.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/mbcsgroupprober.py new file mode 100644 index 00000000..530abe75 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/mbcsgroupprober.py @@ -0,0 +1,54 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Universal charset detector code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 2001 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# Shy Shalom - original C code +# Proofpoint, Inc. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .charsetgroupprober import CharSetGroupProber +from .utf8prober import UTF8Prober +from .sjisprober import SJISProber +from .eucjpprober import EUCJPProber +from .gb2312prober import GB2312Prober +from .euckrprober import EUCKRProber +from .cp949prober import CP949Prober +from .big5prober import Big5Prober +from .euctwprober import EUCTWProber + + +class MBCSGroupProber(CharSetGroupProber): + def __init__(self, lang_filter=None): + super(MBCSGroupProber, self).__init__(lang_filter=lang_filter) + self.probers = [ + UTF8Prober(), + SJISProber(), + EUCJPProber(), + GB2312Prober(), + EUCKRProber(), + CP949Prober(), + Big5Prober(), + EUCTWProber() + ] + self.reset() diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/mbcssm.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/mbcssm.py new file mode 100644 index 00000000..8360d0f2 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/mbcssm.py @@ -0,0 +1,572 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .enums import MachineState + +# BIG5 + +BIG5_CLS = ( + 1,1,1,1,1,1,1,1, # 00 - 07 #allow 0x00 as legal value + 1,1,1,1,1,1,0,0, # 08 - 0f + 1,1,1,1,1,1,1,1, # 10 - 17 + 1,1,1,0,1,1,1,1, # 18 - 1f + 1,1,1,1,1,1,1,1, # 20 - 27 + 1,1,1,1,1,1,1,1, # 28 - 2f + 1,1,1,1,1,1,1,1, # 30 - 37 + 1,1,1,1,1,1,1,1, # 38 - 3f + 2,2,2,2,2,2,2,2, # 40 - 47 + 2,2,2,2,2,2,2,2, # 48 - 4f + 2,2,2,2,2,2,2,2, # 50 - 57 + 2,2,2,2,2,2,2,2, # 58 - 5f + 2,2,2,2,2,2,2,2, # 60 - 67 + 2,2,2,2,2,2,2,2, # 68 - 6f + 2,2,2,2,2,2,2,2, # 70 - 77 + 2,2,2,2,2,2,2,1, # 78 - 7f + 4,4,4,4,4,4,4,4, # 80 - 87 + 4,4,4,4,4,4,4,4, # 88 - 8f + 4,4,4,4,4,4,4,4, # 90 - 97 + 4,4,4,4,4,4,4,4, # 98 - 9f + 4,3,3,3,3,3,3,3, # a0 - a7 + 3,3,3,3,3,3,3,3, # a8 - af + 3,3,3,3,3,3,3,3, # b0 - b7 + 3,3,3,3,3,3,3,3, # b8 - bf + 3,3,3,3,3,3,3,3, # c0 - c7 + 3,3,3,3,3,3,3,3, # c8 - cf + 3,3,3,3,3,3,3,3, # d0 - d7 + 3,3,3,3,3,3,3,3, # d8 - df + 3,3,3,3,3,3,3,3, # e0 - e7 + 3,3,3,3,3,3,3,3, # e8 - ef + 3,3,3,3,3,3,3,3, # f0 - f7 + 3,3,3,3,3,3,3,0 # f8 - ff +) + +BIG5_ST = ( + MachineState.ERROR,MachineState.START,MachineState.START, 3,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#00-07 + MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,#08-0f + MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START#10-17 +) + +BIG5_CHAR_LEN_TABLE = (0, 1, 1, 2, 0) + +BIG5_SM_MODEL = {'class_table': BIG5_CLS, + 'class_factor': 5, + 'state_table': BIG5_ST, + 'char_len_table': BIG5_CHAR_LEN_TABLE, + 'name': 'Big5'} + +# CP949 + +CP949_CLS = ( + 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,0,0, # 00 - 0f + 1,1,1,1,1,1,1,1, 1,1,1,0,1,1,1,1, # 10 - 1f + 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, # 20 - 2f + 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, # 30 - 3f + 1,4,4,4,4,4,4,4, 4,4,4,4,4,4,4,4, # 40 - 4f + 4,4,5,5,5,5,5,5, 5,5,5,1,1,1,1,1, # 50 - 5f + 1,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5, # 60 - 6f + 5,5,5,5,5,5,5,5, 5,5,5,1,1,1,1,1, # 70 - 7f + 0,6,6,6,6,6,6,6, 6,6,6,6,6,6,6,6, # 80 - 8f + 6,6,6,6,6,6,6,6, 6,6,6,6,6,6,6,6, # 90 - 9f + 6,7,7,7,7,7,7,7, 7,7,7,7,7,8,8,8, # a0 - af + 7,7,7,7,7,7,7,7, 7,7,7,7,7,7,7,7, # b0 - bf + 7,7,7,7,7,7,9,2, 2,3,2,2,2,2,2,2, # c0 - cf + 2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2, # d0 - df + 2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2, # e0 - ef + 2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,0, # f0 - ff +) + +CP949_ST = ( +#cls= 0 1 2 3 4 5 6 7 8 9 # previous state = + MachineState.ERROR,MachineState.START, 3,MachineState.ERROR,MachineState.START,MachineState.START, 4, 5,MachineState.ERROR, 6, # MachineState.START + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, # MachineState.ERROR + MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME, # MachineState.ITS_ME + MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START, # 3 + MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START, # 4 + MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START, # 5 + MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START, # 6 +) + +CP949_CHAR_LEN_TABLE = (0, 1, 2, 0, 1, 1, 2, 2, 0, 2) + +CP949_SM_MODEL = {'class_table': CP949_CLS, + 'class_factor': 10, + 'state_table': CP949_ST, + 'char_len_table': CP949_CHAR_LEN_TABLE, + 'name': 'CP949'} + +# EUC-JP + +EUCJP_CLS = ( + 4,4,4,4,4,4,4,4, # 00 - 07 + 4,4,4,4,4,4,5,5, # 08 - 0f + 4,4,4,4,4,4,4,4, # 10 - 17 + 4,4,4,5,4,4,4,4, # 18 - 1f + 4,4,4,4,4,4,4,4, # 20 - 27 + 4,4,4,4,4,4,4,4, # 28 - 2f + 4,4,4,4,4,4,4,4, # 30 - 37 + 4,4,4,4,4,4,4,4, # 38 - 3f + 4,4,4,4,4,4,4,4, # 40 - 47 + 4,4,4,4,4,4,4,4, # 48 - 4f + 4,4,4,4,4,4,4,4, # 50 - 57 + 4,4,4,4,4,4,4,4, # 58 - 5f + 4,4,4,4,4,4,4,4, # 60 - 67 + 4,4,4,4,4,4,4,4, # 68 - 6f + 4,4,4,4,4,4,4,4, # 70 - 77 + 4,4,4,4,4,4,4,4, # 78 - 7f + 5,5,5,5,5,5,5,5, # 80 - 87 + 5,5,5,5,5,5,1,3, # 88 - 8f + 5,5,5,5,5,5,5,5, # 90 - 97 + 5,5,5,5,5,5,5,5, # 98 - 9f + 5,2,2,2,2,2,2,2, # a0 - a7 + 2,2,2,2,2,2,2,2, # a8 - af + 2,2,2,2,2,2,2,2, # b0 - b7 + 2,2,2,2,2,2,2,2, # b8 - bf + 2,2,2,2,2,2,2,2, # c0 - c7 + 2,2,2,2,2,2,2,2, # c8 - cf + 2,2,2,2,2,2,2,2, # d0 - d7 + 2,2,2,2,2,2,2,2, # d8 - df + 0,0,0,0,0,0,0,0, # e0 - e7 + 0,0,0,0,0,0,0,0, # e8 - ef + 0,0,0,0,0,0,0,0, # f0 - f7 + 0,0,0,0,0,0,0,5 # f8 - ff +) + +EUCJP_ST = ( + 3, 4, 3, 5,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#00-07 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f + MachineState.ITS_ME,MachineState.ITS_ME,MachineState.START,MachineState.ERROR,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#10-17 + MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 3,MachineState.ERROR,#18-1f + 3,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START#20-27 +) + +EUCJP_CHAR_LEN_TABLE = (2, 2, 2, 3, 1, 0) + +EUCJP_SM_MODEL = {'class_table': EUCJP_CLS, + 'class_factor': 6, + 'state_table': EUCJP_ST, + 'char_len_table': EUCJP_CHAR_LEN_TABLE, + 'name': 'EUC-JP'} + +# EUC-KR + +EUCKR_CLS = ( + 1,1,1,1,1,1,1,1, # 00 - 07 + 1,1,1,1,1,1,0,0, # 08 - 0f + 1,1,1,1,1,1,1,1, # 10 - 17 + 1,1,1,0,1,1,1,1, # 18 - 1f + 1,1,1,1,1,1,1,1, # 20 - 27 + 1,1,1,1,1,1,1,1, # 28 - 2f + 1,1,1,1,1,1,1,1, # 30 - 37 + 1,1,1,1,1,1,1,1, # 38 - 3f + 1,1,1,1,1,1,1,1, # 40 - 47 + 1,1,1,1,1,1,1,1, # 48 - 4f + 1,1,1,1,1,1,1,1, # 50 - 57 + 1,1,1,1,1,1,1,1, # 58 - 5f + 1,1,1,1,1,1,1,1, # 60 - 67 + 1,1,1,1,1,1,1,1, # 68 - 6f + 1,1,1,1,1,1,1,1, # 70 - 77 + 1,1,1,1,1,1,1,1, # 78 - 7f + 0,0,0,0,0,0,0,0, # 80 - 87 + 0,0,0,0,0,0,0,0, # 88 - 8f + 0,0,0,0,0,0,0,0, # 90 - 97 + 0,0,0,0,0,0,0,0, # 98 - 9f + 0,2,2,2,2,2,2,2, # a0 - a7 + 2,2,2,2,2,3,3,3, # a8 - af + 2,2,2,2,2,2,2,2, # b0 - b7 + 2,2,2,2,2,2,2,2, # b8 - bf + 2,2,2,2,2,2,2,2, # c0 - c7 + 2,3,2,2,2,2,2,2, # c8 - cf + 2,2,2,2,2,2,2,2, # d0 - d7 + 2,2,2,2,2,2,2,2, # d8 - df + 2,2,2,2,2,2,2,2, # e0 - e7 + 2,2,2,2,2,2,2,2, # e8 - ef + 2,2,2,2,2,2,2,2, # f0 - f7 + 2,2,2,2,2,2,2,0 # f8 - ff +) + +EUCKR_ST = ( + MachineState.ERROR,MachineState.START, 3,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#00-07 + MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START #08-0f +) + +EUCKR_CHAR_LEN_TABLE = (0, 1, 2, 0) + +EUCKR_SM_MODEL = {'class_table': EUCKR_CLS, + 'class_factor': 4, + 'state_table': EUCKR_ST, + 'char_len_table': EUCKR_CHAR_LEN_TABLE, + 'name': 'EUC-KR'} + +# EUC-TW + +EUCTW_CLS = ( + 2,2,2,2,2,2,2,2, # 00 - 07 + 2,2,2,2,2,2,0,0, # 08 - 0f + 2,2,2,2,2,2,2,2, # 10 - 17 + 2,2,2,0,2,2,2,2, # 18 - 1f + 2,2,2,2,2,2,2,2, # 20 - 27 + 2,2,2,2,2,2,2,2, # 28 - 2f + 2,2,2,2,2,2,2,2, # 30 - 37 + 2,2,2,2,2,2,2,2, # 38 - 3f + 2,2,2,2,2,2,2,2, # 40 - 47 + 2,2,2,2,2,2,2,2, # 48 - 4f + 2,2,2,2,2,2,2,2, # 50 - 57 + 2,2,2,2,2,2,2,2, # 58 - 5f + 2,2,2,2,2,2,2,2, # 60 - 67 + 2,2,2,2,2,2,2,2, # 68 - 6f + 2,2,2,2,2,2,2,2, # 70 - 77 + 2,2,2,2,2,2,2,2, # 78 - 7f + 0,0,0,0,0,0,0,0, # 80 - 87 + 0,0,0,0,0,0,6,0, # 88 - 8f + 0,0,0,0,0,0,0,0, # 90 - 97 + 0,0,0,0,0,0,0,0, # 98 - 9f + 0,3,4,4,4,4,4,4, # a0 - a7 + 5,5,1,1,1,1,1,1, # a8 - af + 1,1,1,1,1,1,1,1, # b0 - b7 + 1,1,1,1,1,1,1,1, # b8 - bf + 1,1,3,1,3,3,3,3, # c0 - c7 + 3,3,3,3,3,3,3,3, # c8 - cf + 3,3,3,3,3,3,3,3, # d0 - d7 + 3,3,3,3,3,3,3,3, # d8 - df + 3,3,3,3,3,3,3,3, # e0 - e7 + 3,3,3,3,3,3,3,3, # e8 - ef + 3,3,3,3,3,3,3,3, # f0 - f7 + 3,3,3,3,3,3,3,0 # f8 - ff +) + +EUCTW_ST = ( + MachineState.ERROR,MachineState.ERROR,MachineState.START, 3, 3, 3, 4,MachineState.ERROR,#00-07 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f + MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.START,MachineState.ERROR,#10-17 + MachineState.START,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#18-1f + 5,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.ERROR,MachineState.START,MachineState.START,#20-27 + MachineState.START,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START #28-2f +) + +EUCTW_CHAR_LEN_TABLE = (0, 0, 1, 2, 2, 2, 3) + +EUCTW_SM_MODEL = {'class_table': EUCTW_CLS, + 'class_factor': 7, + 'state_table': EUCTW_ST, + 'char_len_table': EUCTW_CHAR_LEN_TABLE, + 'name': 'x-euc-tw'} + +# GB2312 + +GB2312_CLS = ( + 1,1,1,1,1,1,1,1, # 00 - 07 + 1,1,1,1,1,1,0,0, # 08 - 0f + 1,1,1,1,1,1,1,1, # 10 - 17 + 1,1,1,0,1,1,1,1, # 18 - 1f + 1,1,1,1,1,1,1,1, # 20 - 27 + 1,1,1,1,1,1,1,1, # 28 - 2f + 3,3,3,3,3,3,3,3, # 30 - 37 + 3,3,1,1,1,1,1,1, # 38 - 3f + 2,2,2,2,2,2,2,2, # 40 - 47 + 2,2,2,2,2,2,2,2, # 48 - 4f + 2,2,2,2,2,2,2,2, # 50 - 57 + 2,2,2,2,2,2,2,2, # 58 - 5f + 2,2,2,2,2,2,2,2, # 60 - 67 + 2,2,2,2,2,2,2,2, # 68 - 6f + 2,2,2,2,2,2,2,2, # 70 - 77 + 2,2,2,2,2,2,2,4, # 78 - 7f + 5,6,6,6,6,6,6,6, # 80 - 87 + 6,6,6,6,6,6,6,6, # 88 - 8f + 6,6,6,6,6,6,6,6, # 90 - 97 + 6,6,6,6,6,6,6,6, # 98 - 9f + 6,6,6,6,6,6,6,6, # a0 - a7 + 6,6,6,6,6,6,6,6, # a8 - af + 6,6,6,6,6,6,6,6, # b0 - b7 + 6,6,6,6,6,6,6,6, # b8 - bf + 6,6,6,6,6,6,6,6, # c0 - c7 + 6,6,6,6,6,6,6,6, # c8 - cf + 6,6,6,6,6,6,6,6, # d0 - d7 + 6,6,6,6,6,6,6,6, # d8 - df + 6,6,6,6,6,6,6,6, # e0 - e7 + 6,6,6,6,6,6,6,6, # e8 - ef + 6,6,6,6,6,6,6,6, # f0 - f7 + 6,6,6,6,6,6,6,0 # f8 - ff +) + +GB2312_ST = ( + MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START, 3,MachineState.ERROR,#00-07 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f + MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.START,#10-17 + 4,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#18-1f + MachineState.ERROR,MachineState.ERROR, 5,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,#20-27 + MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START #28-2f +) + +# To be accurate, the length of class 6 can be either 2 or 4. +# But it is not necessary to discriminate between the two since +# it is used for frequency analysis only, and we are validating +# each code range there as well. So it is safe to set it to be +# 2 here. +GB2312_CHAR_LEN_TABLE = (0, 1, 1, 1, 1, 1, 2) + +GB2312_SM_MODEL = {'class_table': GB2312_CLS, + 'class_factor': 7, + 'state_table': GB2312_ST, + 'char_len_table': GB2312_CHAR_LEN_TABLE, + 'name': 'GB2312'} + +# Shift_JIS + +SJIS_CLS = ( + 1,1,1,1,1,1,1,1, # 00 - 07 + 1,1,1,1,1,1,0,0, # 08 - 0f + 1,1,1,1,1,1,1,1, # 10 - 17 + 1,1,1,0,1,1,1,1, # 18 - 1f + 1,1,1,1,1,1,1,1, # 20 - 27 + 1,1,1,1,1,1,1,1, # 28 - 2f + 1,1,1,1,1,1,1,1, # 30 - 37 + 1,1,1,1,1,1,1,1, # 38 - 3f + 2,2,2,2,2,2,2,2, # 40 - 47 + 2,2,2,2,2,2,2,2, # 48 - 4f + 2,2,2,2,2,2,2,2, # 50 - 57 + 2,2,2,2,2,2,2,2, # 58 - 5f + 2,2,2,2,2,2,2,2, # 60 - 67 + 2,2,2,2,2,2,2,2, # 68 - 6f + 2,2,2,2,2,2,2,2, # 70 - 77 + 2,2,2,2,2,2,2,1, # 78 - 7f + 3,3,3,3,3,2,2,3, # 80 - 87 + 3,3,3,3,3,3,3,3, # 88 - 8f + 3,3,3,3,3,3,3,3, # 90 - 97 + 3,3,3,3,3,3,3,3, # 98 - 9f + #0xa0 is illegal in sjis encoding, but some pages does + #contain such byte. We need to be more error forgiven. + 2,2,2,2,2,2,2,2, # a0 - a7 + 2,2,2,2,2,2,2,2, # a8 - af + 2,2,2,2,2,2,2,2, # b0 - b7 + 2,2,2,2,2,2,2,2, # b8 - bf + 2,2,2,2,2,2,2,2, # c0 - c7 + 2,2,2,2,2,2,2,2, # c8 - cf + 2,2,2,2,2,2,2,2, # d0 - d7 + 2,2,2,2,2,2,2,2, # d8 - df + 3,3,3,3,3,3,3,3, # e0 - e7 + 3,3,3,3,3,4,4,4, # e8 - ef + 3,3,3,3,3,3,3,3, # f0 - f7 + 3,3,3,3,3,0,0,0) # f8 - ff + + +SJIS_ST = ( + MachineState.ERROR,MachineState.START,MachineState.START, 3,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#00-07 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f + MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START #10-17 +) + +SJIS_CHAR_LEN_TABLE = (0, 1, 1, 2, 0, 0) + +SJIS_SM_MODEL = {'class_table': SJIS_CLS, + 'class_factor': 6, + 'state_table': SJIS_ST, + 'char_len_table': SJIS_CHAR_LEN_TABLE, + 'name': 'Shift_JIS'} + +# UCS2-BE + +UCS2BE_CLS = ( + 0,0,0,0,0,0,0,0, # 00 - 07 + 0,0,1,0,0,2,0,0, # 08 - 0f + 0,0,0,0,0,0,0,0, # 10 - 17 + 0,0,0,3,0,0,0,0, # 18 - 1f + 0,0,0,0,0,0,0,0, # 20 - 27 + 0,3,3,3,3,3,0,0, # 28 - 2f + 0,0,0,0,0,0,0,0, # 30 - 37 + 0,0,0,0,0,0,0,0, # 38 - 3f + 0,0,0,0,0,0,0,0, # 40 - 47 + 0,0,0,0,0,0,0,0, # 48 - 4f + 0,0,0,0,0,0,0,0, # 50 - 57 + 0,0,0,0,0,0,0,0, # 58 - 5f + 0,0,0,0,0,0,0,0, # 60 - 67 + 0,0,0,0,0,0,0,0, # 68 - 6f + 0,0,0,0,0,0,0,0, # 70 - 77 + 0,0,0,0,0,0,0,0, # 78 - 7f + 0,0,0,0,0,0,0,0, # 80 - 87 + 0,0,0,0,0,0,0,0, # 88 - 8f + 0,0,0,0,0,0,0,0, # 90 - 97 + 0,0,0,0,0,0,0,0, # 98 - 9f + 0,0,0,0,0,0,0,0, # a0 - a7 + 0,0,0,0,0,0,0,0, # a8 - af + 0,0,0,0,0,0,0,0, # b0 - b7 + 0,0,0,0,0,0,0,0, # b8 - bf + 0,0,0,0,0,0,0,0, # c0 - c7 + 0,0,0,0,0,0,0,0, # c8 - cf + 0,0,0,0,0,0,0,0, # d0 - d7 + 0,0,0,0,0,0,0,0, # d8 - df + 0,0,0,0,0,0,0,0, # e0 - e7 + 0,0,0,0,0,0,0,0, # e8 - ef + 0,0,0,0,0,0,0,0, # f0 - f7 + 0,0,0,0,0,0,4,5 # f8 - ff +) + +UCS2BE_ST = ( + 5, 7, 7,MachineState.ERROR, 4, 3,MachineState.ERROR,MachineState.ERROR,#00-07 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f + MachineState.ITS_ME,MachineState.ITS_ME, 6, 6, 6, 6,MachineState.ERROR,MachineState.ERROR,#10-17 + 6, 6, 6, 6, 6,MachineState.ITS_ME, 6, 6,#18-1f + 6, 6, 6, 6, 5, 7, 7,MachineState.ERROR,#20-27 + 5, 8, 6, 6,MachineState.ERROR, 6, 6, 6,#28-2f + 6, 6, 6, 6,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START #30-37 +) + +UCS2BE_CHAR_LEN_TABLE = (2, 2, 2, 0, 2, 2) + +UCS2BE_SM_MODEL = {'class_table': UCS2BE_CLS, + 'class_factor': 6, + 'state_table': UCS2BE_ST, + 'char_len_table': UCS2BE_CHAR_LEN_TABLE, + 'name': 'UTF-16BE'} + +# UCS2-LE + +UCS2LE_CLS = ( + 0,0,0,0,0,0,0,0, # 00 - 07 + 0,0,1,0,0,2,0,0, # 08 - 0f + 0,0,0,0,0,0,0,0, # 10 - 17 + 0,0,0,3,0,0,0,0, # 18 - 1f + 0,0,0,0,0,0,0,0, # 20 - 27 + 0,3,3,3,3,3,0,0, # 28 - 2f + 0,0,0,0,0,0,0,0, # 30 - 37 + 0,0,0,0,0,0,0,0, # 38 - 3f + 0,0,0,0,0,0,0,0, # 40 - 47 + 0,0,0,0,0,0,0,0, # 48 - 4f + 0,0,0,0,0,0,0,0, # 50 - 57 + 0,0,0,0,0,0,0,0, # 58 - 5f + 0,0,0,0,0,0,0,0, # 60 - 67 + 0,0,0,0,0,0,0,0, # 68 - 6f + 0,0,0,0,0,0,0,0, # 70 - 77 + 0,0,0,0,0,0,0,0, # 78 - 7f + 0,0,0,0,0,0,0,0, # 80 - 87 + 0,0,0,0,0,0,0,0, # 88 - 8f + 0,0,0,0,0,0,0,0, # 90 - 97 + 0,0,0,0,0,0,0,0, # 98 - 9f + 0,0,0,0,0,0,0,0, # a0 - a7 + 0,0,0,0,0,0,0,0, # a8 - af + 0,0,0,0,0,0,0,0, # b0 - b7 + 0,0,0,0,0,0,0,0, # b8 - bf + 0,0,0,0,0,0,0,0, # c0 - c7 + 0,0,0,0,0,0,0,0, # c8 - cf + 0,0,0,0,0,0,0,0, # d0 - d7 + 0,0,0,0,0,0,0,0, # d8 - df + 0,0,0,0,0,0,0,0, # e0 - e7 + 0,0,0,0,0,0,0,0, # e8 - ef + 0,0,0,0,0,0,0,0, # f0 - f7 + 0,0,0,0,0,0,4,5 # f8 - ff +) + +UCS2LE_ST = ( + 6, 6, 7, 6, 4, 3,MachineState.ERROR,MachineState.ERROR,#00-07 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f + MachineState.ITS_ME,MachineState.ITS_ME, 5, 5, 5,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,#10-17 + 5, 5, 5,MachineState.ERROR, 5,MachineState.ERROR, 6, 6,#18-1f + 7, 6, 8, 8, 5, 5, 5,MachineState.ERROR,#20-27 + 5, 5, 5,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 5, 5,#28-2f + 5, 5, 5,MachineState.ERROR, 5,MachineState.ERROR,MachineState.START,MachineState.START #30-37 +) + +UCS2LE_CHAR_LEN_TABLE = (2, 2, 2, 2, 2, 2) + +UCS2LE_SM_MODEL = {'class_table': UCS2LE_CLS, + 'class_factor': 6, + 'state_table': UCS2LE_ST, + 'char_len_table': UCS2LE_CHAR_LEN_TABLE, + 'name': 'UTF-16LE'} + +# UTF-8 + +UTF8_CLS = ( + 1,1,1,1,1,1,1,1, # 00 - 07 #allow 0x00 as a legal value + 1,1,1,1,1,1,0,0, # 08 - 0f + 1,1,1,1,1,1,1,1, # 10 - 17 + 1,1,1,0,1,1,1,1, # 18 - 1f + 1,1,1,1,1,1,1,1, # 20 - 27 + 1,1,1,1,1,1,1,1, # 28 - 2f + 1,1,1,1,1,1,1,1, # 30 - 37 + 1,1,1,1,1,1,1,1, # 38 - 3f + 1,1,1,1,1,1,1,1, # 40 - 47 + 1,1,1,1,1,1,1,1, # 48 - 4f + 1,1,1,1,1,1,1,1, # 50 - 57 + 1,1,1,1,1,1,1,1, # 58 - 5f + 1,1,1,1,1,1,1,1, # 60 - 67 + 1,1,1,1,1,1,1,1, # 68 - 6f + 1,1,1,1,1,1,1,1, # 70 - 77 + 1,1,1,1,1,1,1,1, # 78 - 7f + 2,2,2,2,3,3,3,3, # 80 - 87 + 4,4,4,4,4,4,4,4, # 88 - 8f + 4,4,4,4,4,4,4,4, # 90 - 97 + 4,4,4,4,4,4,4,4, # 98 - 9f + 5,5,5,5,5,5,5,5, # a0 - a7 + 5,5,5,5,5,5,5,5, # a8 - af + 5,5,5,5,5,5,5,5, # b0 - b7 + 5,5,5,5,5,5,5,5, # b8 - bf + 0,0,6,6,6,6,6,6, # c0 - c7 + 6,6,6,6,6,6,6,6, # c8 - cf + 6,6,6,6,6,6,6,6, # d0 - d7 + 6,6,6,6,6,6,6,6, # d8 - df + 7,8,8,8,8,8,8,8, # e0 - e7 + 8,8,8,8,8,9,8,8, # e8 - ef + 10,11,11,11,11,11,11,11, # f0 - f7 + 12,13,13,13,14,15,0,0 # f8 - ff +) + +UTF8_ST = ( + MachineState.ERROR,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 12, 10,#00-07 + 9, 11, 8, 7, 6, 5, 4, 3,#08-0f + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#10-17 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#18-1f + MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#20-27 + MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#28-2f + MachineState.ERROR,MachineState.ERROR, 5, 5, 5, 5,MachineState.ERROR,MachineState.ERROR,#30-37 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#38-3f + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 5, 5, 5,MachineState.ERROR,MachineState.ERROR,#40-47 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#48-4f + MachineState.ERROR,MachineState.ERROR, 7, 7, 7, 7,MachineState.ERROR,MachineState.ERROR,#50-57 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#58-5f + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 7, 7,MachineState.ERROR,MachineState.ERROR,#60-67 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#68-6f + MachineState.ERROR,MachineState.ERROR, 9, 9, 9, 9,MachineState.ERROR,MachineState.ERROR,#70-77 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#78-7f + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 9,MachineState.ERROR,MachineState.ERROR,#80-87 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#88-8f + MachineState.ERROR,MachineState.ERROR, 12, 12, 12, 12,MachineState.ERROR,MachineState.ERROR,#90-97 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#98-9f + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 12,MachineState.ERROR,MachineState.ERROR,#a0-a7 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#a8-af + MachineState.ERROR,MachineState.ERROR, 12, 12, 12,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#b0-b7 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#b8-bf + MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,#c0-c7 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR #c8-cf +) + +UTF8_CHAR_LEN_TABLE = (0, 1, 0, 0, 0, 0, 2, 3, 3, 3, 4, 4, 5, 5, 6, 6) + +UTF8_SM_MODEL = {'class_table': UTF8_CLS, + 'class_factor': 16, + 'state_table': UTF8_ST, + 'char_len_table': UTF8_CHAR_LEN_TABLE, + 'name': 'UTF-8'} diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/sbcharsetprober.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/sbcharsetprober.py new file mode 100644 index 00000000..0adb51de --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/sbcharsetprober.py @@ -0,0 +1,132 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Universal charset detector code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 2001 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# Shy Shalom - original C code +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .charsetprober import CharSetProber +from .enums import CharacterCategory, ProbingState, SequenceLikelihood + + +class SingleByteCharSetProber(CharSetProber): + SAMPLE_SIZE = 64 + SB_ENOUGH_REL_THRESHOLD = 1024 # 0.25 * SAMPLE_SIZE^2 + POSITIVE_SHORTCUT_THRESHOLD = 0.95 + NEGATIVE_SHORTCUT_THRESHOLD = 0.05 + + def __init__(self, model, reversed=False, name_prober=None): + super(SingleByteCharSetProber, self).__init__() + self._model = model + # TRUE if we need to reverse every pair in the model lookup + self._reversed = reversed + # Optional auxiliary prober for name decision + self._name_prober = name_prober + self._last_order = None + self._seq_counters = None + self._total_seqs = None + self._total_char = None + self._freq_char = None + self.reset() + + def reset(self): + super(SingleByteCharSetProber, self).reset() + # char order of last character + self._last_order = 255 + self._seq_counters = [0] * SequenceLikelihood.get_num_categories() + self._total_seqs = 0 + self._total_char = 0 + # characters that fall in our sampling range + self._freq_char = 0 + + @property + def charset_name(self): + if self._name_prober: + return self._name_prober.charset_name + else: + return self._model['charset_name'] + + @property + def language(self): + if self._name_prober: + return self._name_prober.language + else: + return self._model.get('language') + + def feed(self, byte_str): + if not self._model['keep_english_letter']: + byte_str = self.filter_international_words(byte_str) + if not byte_str: + return self.state + char_to_order_map = self._model['char_to_order_map'] + for i, c in enumerate(byte_str): + # XXX: Order is in range 1-64, so one would think we want 0-63 here, + # but that leads to 27 more test failures than before. + order = char_to_order_map[c] + # XXX: This was SYMBOL_CAT_ORDER before, with a value of 250, but + # CharacterCategory.SYMBOL is actually 253, so we use CONTROL + # to make it closer to the original intent. The only difference + # is whether or not we count digits and control characters for + # _total_char purposes. + if order < CharacterCategory.CONTROL: + self._total_char += 1 + if order < self.SAMPLE_SIZE: + self._freq_char += 1 + if self._last_order < self.SAMPLE_SIZE: + self._total_seqs += 1 + if not self._reversed: + i = (self._last_order * self.SAMPLE_SIZE) + order + model = self._model['precedence_matrix'][i] + else: # reverse the order of the letters in the lookup + i = (order * self.SAMPLE_SIZE) + self._last_order + model = self._model['precedence_matrix'][i] + self._seq_counters[model] += 1 + self._last_order = order + + charset_name = self._model['charset_name'] + if self.state == ProbingState.DETECTING: + if self._total_seqs > self.SB_ENOUGH_REL_THRESHOLD: + confidence = self.get_confidence() + if confidence > self.POSITIVE_SHORTCUT_THRESHOLD: + self.logger.debug('%s confidence = %s, we have a winner', + charset_name, confidence) + self._state = ProbingState.FOUND_IT + elif confidence < self.NEGATIVE_SHORTCUT_THRESHOLD: + self.logger.debug('%s confidence = %s, below negative ' + 'shortcut threshhold %s', charset_name, + confidence, + self.NEGATIVE_SHORTCUT_THRESHOLD) + self._state = ProbingState.NOT_ME + + return self.state + + def get_confidence(self): + r = 0.01 + if self._total_seqs > 0: + r = ((1.0 * self._seq_counters[SequenceLikelihood.POSITIVE]) / + self._total_seqs / self._model['typical_positive_ratio']) + r = r * self._freq_char / self._total_char + if r >= 1.0: + r = 0.99 + return r diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/sbcsgroupprober.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/sbcsgroupprober.py new file mode 100644 index 00000000..98e95dc1 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/sbcsgroupprober.py @@ -0,0 +1,73 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Universal charset detector code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 2001 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# Shy Shalom - original C code +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .charsetgroupprober import CharSetGroupProber +from .sbcharsetprober import SingleByteCharSetProber +from .langcyrillicmodel import (Win1251CyrillicModel, Koi8rModel, + Latin5CyrillicModel, MacCyrillicModel, + Ibm866Model, Ibm855Model) +from .langgreekmodel import Latin7GreekModel, Win1253GreekModel +from .langbulgarianmodel import Latin5BulgarianModel, Win1251BulgarianModel +# from .langhungarianmodel import Latin2HungarianModel, Win1250HungarianModel +from .langthaimodel import TIS620ThaiModel +from .langhebrewmodel import Win1255HebrewModel +from .hebrewprober import HebrewProber +from .langturkishmodel import Latin5TurkishModel + + +class SBCSGroupProber(CharSetGroupProber): + def __init__(self): + super(SBCSGroupProber, self).__init__() + self.probers = [ + SingleByteCharSetProber(Win1251CyrillicModel), + SingleByteCharSetProber(Koi8rModel), + SingleByteCharSetProber(Latin5CyrillicModel), + SingleByteCharSetProber(MacCyrillicModel), + SingleByteCharSetProber(Ibm866Model), + SingleByteCharSetProber(Ibm855Model), + SingleByteCharSetProber(Latin7GreekModel), + SingleByteCharSetProber(Win1253GreekModel), + SingleByteCharSetProber(Latin5BulgarianModel), + SingleByteCharSetProber(Win1251BulgarianModel), + # TODO: Restore Hungarian encodings (iso-8859-2 and windows-1250) + # after we retrain model. + # SingleByteCharSetProber(Latin2HungarianModel), + # SingleByteCharSetProber(Win1250HungarianModel), + SingleByteCharSetProber(TIS620ThaiModel), + SingleByteCharSetProber(Latin5TurkishModel), + ] + hebrew_prober = HebrewProber() + logical_hebrew_prober = SingleByteCharSetProber(Win1255HebrewModel, + False, hebrew_prober) + visual_hebrew_prober = SingleByteCharSetProber(Win1255HebrewModel, True, + hebrew_prober) + hebrew_prober.set_model_probers(logical_hebrew_prober, visual_hebrew_prober) + self.probers.extend([hebrew_prober, logical_hebrew_prober, + visual_hebrew_prober]) + + self.reset() diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/sjisprober.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/sjisprober.py new file mode 100644 index 00000000..9e29623b --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/sjisprober.py @@ -0,0 +1,92 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .mbcharsetprober import MultiByteCharSetProber +from .codingstatemachine import CodingStateMachine +from .chardistribution import SJISDistributionAnalysis +from .jpcntx import SJISContextAnalysis +from .mbcssm import SJIS_SM_MODEL +from .enums import ProbingState, MachineState + + +class SJISProber(MultiByteCharSetProber): + def __init__(self): + super(SJISProber, self).__init__() + self.coding_sm = CodingStateMachine(SJIS_SM_MODEL) + self.distribution_analyzer = SJISDistributionAnalysis() + self.context_analyzer = SJISContextAnalysis() + self.reset() + + def reset(self): + super(SJISProber, self).reset() + self.context_analyzer.reset() + + @property + def charset_name(self): + return self.context_analyzer.charset_name + + @property + def language(self): + return "Japanese" + + def feed(self, byte_str): + for i in range(len(byte_str)): + coding_state = self.coding_sm.next_state(byte_str[i]) + if coding_state == MachineState.ERROR: + self.logger.debug('%s %s prober hit error at byte %s', + self.charset_name, self.language, i) + self._state = ProbingState.NOT_ME + break + elif coding_state == MachineState.ITS_ME: + self._state = ProbingState.FOUND_IT + break + elif coding_state == MachineState.START: + char_len = self.coding_sm.get_current_charlen() + if i == 0: + self._last_char[1] = byte_str[0] + self.context_analyzer.feed(self._last_char[2 - char_len:], + char_len) + self.distribution_analyzer.feed(self._last_char, char_len) + else: + self.context_analyzer.feed(byte_str[i + 1 - char_len:i + 3 + - char_len], char_len) + self.distribution_analyzer.feed(byte_str[i - 1:i + 1], + char_len) + + self._last_char[0] = byte_str[-1] + + if self.state == ProbingState.DETECTING: + if (self.context_analyzer.got_enough_data() and + (self.get_confidence() > self.SHORTCUT_THRESHOLD)): + self._state = ProbingState.FOUND_IT + + return self.state + + def get_confidence(self): + context_conf = self.context_analyzer.get_confidence() + distrib_conf = self.distribution_analyzer.get_confidence() + return max(context_conf, distrib_conf) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/universaldetector.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/universaldetector.py new file mode 100644 index 00000000..7b4e92d6 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/universaldetector.py @@ -0,0 +1,286 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Universal charset detector code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 2001 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# Shy Shalom - original C code +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### +""" +Module containing the UniversalDetector detector class, which is the primary +class a user of ``chardet`` should use. + +:author: Mark Pilgrim (initial port to Python) +:author: Shy Shalom (original C code) +:author: Dan Blanchard (major refactoring for 3.0) +:author: Ian Cordasco +""" + + +import codecs +import logging +import re + +from .charsetgroupprober import CharSetGroupProber +from .enums import InputState, LanguageFilter, ProbingState +from .escprober import EscCharSetProber +from .latin1prober import Latin1Prober +from .mbcsgroupprober import MBCSGroupProber +from .sbcsgroupprober import SBCSGroupProber + + +class UniversalDetector(object): + """ + The ``UniversalDetector`` class underlies the ``chardet.detect`` function + and coordinates all of the different charset probers. + + To get a ``dict`` containing an encoding and its confidence, you can simply + run: + + .. code:: + + u = UniversalDetector() + u.feed(some_bytes) + u.close() + detected = u.result + + """ + + MINIMUM_THRESHOLD = 0.20 + HIGH_BYTE_DETECTOR = re.compile(b'[\x80-\xFF]') + ESC_DETECTOR = re.compile(b'(\033|~{)') + WIN_BYTE_DETECTOR = re.compile(b'[\x80-\x9F]') + ISO_WIN_MAP = {'iso-8859-1': 'Windows-1252', + 'iso-8859-2': 'Windows-1250', + 'iso-8859-5': 'Windows-1251', + 'iso-8859-6': 'Windows-1256', + 'iso-8859-7': 'Windows-1253', + 'iso-8859-8': 'Windows-1255', + 'iso-8859-9': 'Windows-1254', + 'iso-8859-13': 'Windows-1257'} + + def __init__(self, lang_filter=LanguageFilter.ALL): + self._esc_charset_prober = None + self._charset_probers = [] + self.result = None + self.done = None + self._got_data = None + self._input_state = None + self._last_char = None + self.lang_filter = lang_filter + self.logger = logging.getLogger(__name__) + self._has_win_bytes = None + self.reset() + + def reset(self): + """ + Reset the UniversalDetector and all of its probers back to their + initial states. This is called by ``__init__``, so you only need to + call this directly in between analyses of different documents. + """ + self.result = {'encoding': None, 'confidence': 0.0, 'language': None} + self.done = False + self._got_data = False + self._has_win_bytes = False + self._input_state = InputState.PURE_ASCII + self._last_char = b'' + if self._esc_charset_prober: + self._esc_charset_prober.reset() + for prober in self._charset_probers: + prober.reset() + + def feed(self, byte_str): + """ + Takes a chunk of a document and feeds it through all of the relevant + charset probers. + + After calling ``feed``, you can check the value of the ``done`` + attribute to see if you need to continue feeding the + ``UniversalDetector`` more data, or if it has made a prediction + (in the ``result`` attribute). + + .. note:: + You should always call ``close`` when you're done feeding in your + document if ``done`` is not already ``True``. + """ + if self.done: + return + + if not len(byte_str): + return + + if not isinstance(byte_str, bytearray): + byte_str = bytearray(byte_str) + + # First check for known BOMs, since these are guaranteed to be correct + if not self._got_data: + # If the data starts with BOM, we know it is UTF + if byte_str.startswith(codecs.BOM_UTF8): + # EF BB BF UTF-8 with BOM + self.result = {'encoding': "UTF-8-SIG", + 'confidence': 1.0, + 'language': ''} + elif byte_str.startswith((codecs.BOM_UTF32_LE, + codecs.BOM_UTF32_BE)): + # FF FE 00 00 UTF-32, little-endian BOM + # 00 00 FE FF UTF-32, big-endian BOM + self.result = {'encoding': "UTF-32", + 'confidence': 1.0, + 'language': ''} + elif byte_str.startswith(b'\xFE\xFF\x00\x00'): + # FE FF 00 00 UCS-4, unusual octet order BOM (3412) + self.result = {'encoding': "X-ISO-10646-UCS-4-3412", + 'confidence': 1.0, + 'language': ''} + elif byte_str.startswith(b'\x00\x00\xFF\xFE'): + # 00 00 FF FE UCS-4, unusual octet order BOM (2143) + self.result = {'encoding': "X-ISO-10646-UCS-4-2143", + 'confidence': 1.0, + 'language': ''} + elif byte_str.startswith((codecs.BOM_LE, codecs.BOM_BE)): + # FF FE UTF-16, little endian BOM + # FE FF UTF-16, big endian BOM + self.result = {'encoding': "UTF-16", + 'confidence': 1.0, + 'language': ''} + + self._got_data = True + if self.result['encoding'] is not None: + self.done = True + return + + # If none of those matched and we've only see ASCII so far, check + # for high bytes and escape sequences + if self._input_state == InputState.PURE_ASCII: + if self.HIGH_BYTE_DETECTOR.search(byte_str): + self._input_state = InputState.HIGH_BYTE + elif self._input_state == InputState.PURE_ASCII and \ + self.ESC_DETECTOR.search(self._last_char + byte_str): + self._input_state = InputState.ESC_ASCII + + self._last_char = byte_str[-1:] + + # If we've seen escape sequences, use the EscCharSetProber, which + # uses a simple state machine to check for known escape sequences in + # HZ and ISO-2022 encodings, since those are the only encodings that + # use such sequences. + if self._input_state == InputState.ESC_ASCII: + if not self._esc_charset_prober: + self._esc_charset_prober = EscCharSetProber(self.lang_filter) + if self._esc_charset_prober.feed(byte_str) == ProbingState.FOUND_IT: + self.result = {'encoding': + self._esc_charset_prober.charset_name, + 'confidence': + self._esc_charset_prober.get_confidence(), + 'language': + self._esc_charset_prober.language} + self.done = True + # If we've seen high bytes (i.e., those with values greater than 127), + # we need to do more complicated checks using all our multi-byte and + # single-byte probers that are left. The single-byte probers + # use character bigram distributions to determine the encoding, whereas + # the multi-byte probers use a combination of character unigram and + # bigram distributions. + elif self._input_state == InputState.HIGH_BYTE: + if not self._charset_probers: + self._charset_probers = [MBCSGroupProber(self.lang_filter)] + # If we're checking non-CJK encodings, use single-byte prober + if self.lang_filter & LanguageFilter.NON_CJK: + self._charset_probers.append(SBCSGroupProber()) + self._charset_probers.append(Latin1Prober()) + for prober in self._charset_probers: + if prober.feed(byte_str) == ProbingState.FOUND_IT: + self.result = {'encoding': prober.charset_name, + 'confidence': prober.get_confidence(), + 'language': prober.language} + self.done = True + break + if self.WIN_BYTE_DETECTOR.search(byte_str): + self._has_win_bytes = True + + def close(self): + """ + Stop analyzing the current document and come up with a final + prediction. + + :returns: The ``result`` attribute, a ``dict`` with the keys + `encoding`, `confidence`, and `language`. + """ + # Don't bother with checks if we're already done + if self.done: + return self.result + self.done = True + + if not self._got_data: + self.logger.debug('no data received!') + + # Default to ASCII if it is all we've seen so far + elif self._input_state == InputState.PURE_ASCII: + self.result = {'encoding': 'ascii', + 'confidence': 1.0, + 'language': ''} + + # If we have seen non-ASCII, return the best that met MINIMUM_THRESHOLD + elif self._input_state == InputState.HIGH_BYTE: + prober_confidence = None + max_prober_confidence = 0.0 + max_prober = None + for prober in self._charset_probers: + if not prober: + continue + prober_confidence = prober.get_confidence() + if prober_confidence > max_prober_confidence: + max_prober_confidence = prober_confidence + max_prober = prober + if max_prober and (max_prober_confidence > self.MINIMUM_THRESHOLD): + charset_name = max_prober.charset_name + lower_charset_name = max_prober.charset_name.lower() + confidence = max_prober.get_confidence() + # Use Windows encoding name instead of ISO-8859 if we saw any + # extra Windows-specific bytes + if lower_charset_name.startswith('iso-8859'): + if self._has_win_bytes: + charset_name = self.ISO_WIN_MAP.get(lower_charset_name, + charset_name) + self.result = {'encoding': charset_name, + 'confidence': confidence, + 'language': max_prober.language} + + # Log all prober confidences if none met MINIMUM_THRESHOLD + if self.logger.getEffectiveLevel() == logging.DEBUG: + if self.result['encoding'] is None: + self.logger.debug('no probers hit minimum threshold') + for group_prober in self._charset_probers: + if not group_prober: + continue + if isinstance(group_prober, CharSetGroupProber): + for prober in group_prober.probers: + self.logger.debug('%s %s confidence = %s', + prober.charset_name, + prober.language, + prober.get_confidence()) + else: + self.logger.debug('%s %s confidence = %s', + prober.charset_name, + prober.language, + prober.get_confidence()) + return self.result diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/utf8prober.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/utf8prober.py new file mode 100644 index 00000000..6c3196cc --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/utf8prober.py @@ -0,0 +1,82 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .charsetprober import CharSetProber +from .enums import ProbingState, MachineState +from .codingstatemachine import CodingStateMachine +from .mbcssm import UTF8_SM_MODEL + + + +class UTF8Prober(CharSetProber): + ONE_CHAR_PROB = 0.5 + + def __init__(self): + super(UTF8Prober, self).__init__() + self.coding_sm = CodingStateMachine(UTF8_SM_MODEL) + self._num_mb_chars = None + self.reset() + + def reset(self): + super(UTF8Prober, self).reset() + self.coding_sm.reset() + self._num_mb_chars = 0 + + @property + def charset_name(self): + return "utf-8" + + @property + def language(self): + return "" + + def feed(self, byte_str): + for c in byte_str: + coding_state = self.coding_sm.next_state(c) + if coding_state == MachineState.ERROR: + self._state = ProbingState.NOT_ME + break + elif coding_state == MachineState.ITS_ME: + self._state = ProbingState.FOUND_IT + break + elif coding_state == MachineState.START: + if self.coding_sm.get_current_charlen() >= 2: + self._num_mb_chars += 1 + + if self.state == ProbingState.DETECTING: + if self.get_confidence() > self.SHORTCUT_THRESHOLD: + self._state = ProbingState.FOUND_IT + + return self.state + + def get_confidence(self): + unlike = 0.99 + if self._num_mb_chars < 6: + unlike *= self.ONE_CHAR_PROB ** self._num_mb_chars + return 1.0 - unlike + else: + return unlike diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/version.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/version.py new file mode 100644 index 00000000..bb2a34a7 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/chardet/version.py @@ -0,0 +1,9 @@ +""" +This module exists only to simplify retrieving the version number of chardet +from within setup.py and from chardet subpackages. + +:author: Dan Blanchard (dan.blanchard@gmail.com) +""" + +__version__ = "3.0.4" +VERSION = __version__.split('.') diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/colorama/__init__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/colorama/__init__.py new file mode 100644 index 00000000..2a3bf471 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/colorama/__init__.py @@ -0,0 +1,6 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +from .initialise import init, deinit, reinit, colorama_text +from .ansi import Fore, Back, Style, Cursor +from .ansitowin32 import AnsiToWin32 + +__version__ = '0.4.1' diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/colorama/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/colorama/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c08fce921b5881030f16c973e226af2da1a8ebaf GIT binary patch literal 394 zcmX|+y-ve05XbGrNz<eeYhNKllhQI)h%Yg+6bZ=!S!rzv3p)-@3bb#;!UK6_Vq#~) z*9t7%@6P}G(A_-G)BBI|;Ts|J>FxgoK05Q(U3qZCu|gVCtOFY8kcOI2f<X^dq+=TE z0UhXsCVEJRdp%UC&S>UiLPtDWq9XpnepEpmk&WzK%*DamgU{DS8C&a`_2R9EvTI|7 zBNz4h$wkY4tAvX$H?}jjz%Dy)I(cjEWHX=bqG@?j9^VwXOJSs}mF$Ft3v37=fXKs< z+PB#l{sTY)7(yn4OmALcpiTD*V=uyX(lm^{BYOm;fS*Ox>$YlTJ6Ua{;*;s~<H}5D m9HhPZzJ?oH{asWs27579wp*7hwBZ{iPGP?eRvF_l9tFQp6lh2Q literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/colorama/__pycache__/ansi.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/colorama/__pycache__/ansi.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9b139a9c7c14b69e2ff4a65c06f04a0e3d3f4efd GIT binary patch literal 3292 zcmcguTXWM!6xPi*`5GrAh2GrK3vP=|X&*Y!VPZQb2{=w_CzB#bRpAwhz_HCr;gSh6 zoiRV8uYKtc+UZ-L^cQ&Q`PRAEA)S(!O0%DI_DJXKxqK^qmrk1x{w!_%l~9zwm9fL1 z`*|Av?*vS-6sB4#(=3hYmd*?od97Fmi?SG9BkVnvVCHMpin5C=$x?I|TU1z@WnL>R z<Hm=&l^{9GawO-ZY?3_1@+9Zo1nH9`PqP`4XQZ4W`2w3Ic~;74H#t<SjGH3Nx@p3k zYZ6YexwcZgwEvsAzT^3Y-9Fpvx`l1G=W-`-{X(VLUM_TY9PV@imlryHMw3CmFyLM< z@Os-c)9rIPMfzQ@=XCv&*>>F<g`FT6+$fjbUg^2_#2dKGb4q=_U4~SKUEB3L&cL-{ z)ZEwJzfWW9jT-BylrtQ->NILJ{2W1`1nPk@ROcw2a|$h7YYKI@s0qE+UKY9^@S-XV z*!x4_QF`Ic59MHYP#$=Ls}J|QF1vc|>CVIcwd)L1a@fz@9_#b6jKkS=%1+PsN`sdo z4KsGow-LRc!V)wBMdfkAi8W$=Y>imkfig#HJzV3ycKs$6x!SG?y;^V3A|rtpbX~c| z5yZ%bNce7GOHG!<BY*H6!pDTu|4z)EqQ>zQM>8TZRNc2+raE2M;kMu5uG`DggGXMG z?{hl5JL!-kh|?jOBY$15=Uy1|2G1QD#|Pq_r{T{KxC)U+A@UG~h%h?SsrH6QRH#-p z3d%oTDB?xoYk2hr!He$$D#lP<P`0kTQV-O}DpQB5ZwA_da-a^iS6ZOsE-((Xp*qx6 z<*B(zj6G~FyBHBV^SChmz~O=a+zWO@Y}*Z-AmAcK^}>y8iJ~qH-|apUM$g%GMdX>& z-FqwDaohHKUSQjout0Q@Vq{d4&i(vxG^L}5niM3x0eiMBOxqsulkQWt{dCXijx_uO zGBcKFB!Hu#_%y*q8nUQyRmu}-M!x3pz%7E~G^ZKuQ?v`|EF<?SmG-Kv+^tmFt#T~R z5^}eiVkS#sw_+*ES6-Mhggx%}c?j}$P(>WL!j&w`F_Wnf6HKm5^pD1|a-sIdB9ko9 zHr75T&0(YNr%#-gHrCGRvU-L~ewnPFc4{oFZZ^LhbDJG=3*9*#*WT4}?DlGFv(j29 zj`<$7ip+EAP<>AK3-9XQs8(uszaH~F9yfFy)D;J=7&RI`I#TY|M5<AZY3Cl*Ta&w@ z-h89p6zbB%I`qSmzYyxn(*@AiR@+x$TK1H>pBc+PshUNVe?scBFPhYi9*FY~={f!p z;A6mNfG+@70AB&h0Lh~hkc=vj0x$R`L0mPp(aAC2p>cem|L1A=YXry40;e=$lTJJ` z=zAX_?nJFPi&+U4w@j9>lFYPHENP`#%F3{`m1P+#$FlUL&RKajWlgg@acx?}5&!Kz zcSA%HB9gEGKo-JJ0ha+-YzV%D=-$u*+y^`WYyo}&*nnRF4neaxb1F?DQf*MVh2E+! zh{$5AUT=!%y?Udux+#omW1}u&E0x81bG;&r+Pz9sL^hX}*XttEs<-RwBHdVCTw0eV z?E23lDMc~`VWg8LA!ej*WEyhn@YRhvq^y(<U7e`m64J<)bWP%!CA>!QeM`eflH#gy z`qU?9IG+FiOIvk1PeL?g2<C_A$`CvZzX5;=VF`dv4G~Vr050GWU>mRl@BohiPYB*F zEw9ov2XFZTpboeVSOhEqmH~GFcL5E+3ZMyC1)$OSPk<KSggEj}vZqZ7*nHR2<N32w zj}7MESw#$qj(!i?!Attj0w;KyAe;rzpftozcX+hgLX!%8VR=PFo2#vrN<$=M|Js#C z<IISVZ;(iS%a59gV-`CSTpnHWB4*pH-?8n{Us-~5+yuk{_{-xt0RDwUwEyt2+X>_s zTW&704LK4btqTL(C+1O`h=`0*L~HVsaMn6S{KwJ1!>tHe@CyWnCi`5E(`o9akxS;% Lxmh}+Q5EMuW-xY< literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/colorama/__pycache__/ansitowin32.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/colorama/__pycache__/ansitowin32.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2340e2c0c654b85e05c1b119707df427ca8b708c GIT binary patch literal 7567 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 SMb9HMSg=vwML}xe#{U2l+S>d8 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/colorama/__pycache__/initialise.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/colorama/__pycache__/initialise.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ed8ff698deb2932e25803e025e32620f6aa7824b GIT binary patch literal 1615 zcma)6OK&4Z5bo}Icszb2SweUy2rCC9OYCN~xgf-@K!_YT_=2^IEWqlx2WPxvkEw2N z$l|@=hyxP*4=((mxpLaSz=^NgYbRNO#Eh!CtGl|p`m3+{q}58l`SaelKh=czOWgQE z^go4I2W5njg&3?`Igs8~17(y6ieMTJLJ1EYL1IV^l9*7}O=RLLF-XlFlbHII95hU7 z8W?G2a?&zQ)4CEXIcS@<*}>?J*)@A;ca8i?bl-T1lSS{Pgzn0!@!8Dg{qjjZJ9%(A z;;GH2(D@u<--dDs@@bv+op5p`Cu$`Sn!t9l*9|CuN7X1P9}lfF<-%2U%53I_x+wk- z6l2<}zaJgD>HK(}&+ncs^1|G`|HJuNdH;doAuq#c+02x5JSvNl^i&_`v)tvn$Zd9S zen}B_x&yI{qmYU8BmI##F~TjM=Hvbqon_Dzbm+uVEag&-gO!9O4es!>bZQdl5IWK^ z_i@97J~BerW(O{DA+Nx?U=@YJsbQdN?CZV0gIC>q#jklqy6#f@i)&1puC<atN$J!h z74)8ectLvp@KhHz>x|0T_eDN(wsVoY^NyZfc1m}iQAgAGVV@RRzuT??3|Hx6T`aOM zh)Svgdugk94Knd<y^#@J!_P*W51MCYla2=4Feua0Ta$jJcG-`)8=7*KRq@)W63WK8 zb(m+&yJ1z=3s?HARyD-_EF)J%*fF11A@6>jWdi9%6>{d@LeIVnCDgu5qFBZ%m2q$& zy$(XO#Ps@i;&m|dig;}%-cUJCQXMG_V1*k3Mji=D;Z6-!EmlodTk5TQKC;+k9NP)z zZ34wSikVCApudfT>CZcs5PJl*CeiOm>2oCXF$&-bN&w}6-q+h=Q2suCtFEd-Boq01 zdcp0DV0;{{4atYV-+j#I_;3J`lBuFYjBLX}Uu-L~1LOYz(}w2_V0PL3Z(zs+<BR7O zFz;d6h<U&tL%OZ84`3`qI@(m&GBEPD@I|zYCIE(x(5e@xKD-o)Uy3*3PY0~_p|($l zJuer988VNU&`i^AOz*Sb?G?m~s%mR`(`$&*4ko{ZSiYi=A^xUMuAk|Kr@dakyGQ(j zR4GWzxEJ}E2dHXjyo9d2;Fr+9Xlqt^E_oO|czamuOX51uRr}ReQ$5pTR17DM7&CwD pjUYW6eeRP_rlnaF*(1)W<pl`>O;ih^c15~YVptzA!Q{{ZpsOy~dr literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/colorama/__pycache__/win32.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/colorama/__pycache__/win32.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1251004238eb29121cba137679877d9e59978fae GIT binary patch literal 3817 zcmai0TXPf16`t<7Xe7%<Ha7!a5U{W)0YRWrsiX)6*yfVb%9Q0@?@sO3)L7lJM~pP0 zXN0j!Jek*|@|NF_m;8wQjCsuy@5#%)kni-!vbZ=IsZV#GbEf;ucP`!cW@k%3{iFW# z(rLr^mofFsVf+v+`6n|B@s($Yiyqsn3oguvdmOzL@t*0K%#fz!UF(2(Hn=vpj^{9A z)9BYNLl≷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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/colorama/__pycache__/winterm.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/colorama/__pycache__/winterm.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..abaf3d026632467a5930184438bd97d7ecbb3f20 GIT binary patch literal 4555 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/colorama/ansi.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/colorama/ansi.py new file mode 100644 index 00000000..78776588 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/colorama/ansi.py @@ -0,0 +1,102 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +''' +This module generates ANSI character codes to printing colors to terminals. +See: http://en.wikipedia.org/wiki/ANSI_escape_code +''' + +CSI = '\033[' +OSC = '\033]' +BEL = '\007' + + +def code_to_chars(code): + return CSI + str(code) + 'm' + +def set_title(title): + return OSC + '2;' + title + BEL + +def clear_screen(mode=2): + return CSI + str(mode) + 'J' + +def clear_line(mode=2): + return CSI + str(mode) + 'K' + + +class AnsiCodes(object): + def __init__(self): + # the subclasses declare class attributes which are numbers. + # Upon instantiation we define instance attributes, which are the same + # as the class attributes but wrapped with the ANSI escape sequence + for name in dir(self): + if not name.startswith('_'): + value = getattr(self, name) + setattr(self, name, code_to_chars(value)) + + +class AnsiCursor(object): + def UP(self, n=1): + return CSI + str(n) + 'A' + def DOWN(self, n=1): + return CSI + str(n) + 'B' + def FORWARD(self, n=1): + return CSI + str(n) + 'C' + def BACK(self, n=1): + return CSI + str(n) + 'D' + def POS(self, x=1, y=1): + return CSI + str(y) + ';' + str(x) + 'H' + + +class AnsiFore(AnsiCodes): + BLACK = 30 + RED = 31 + GREEN = 32 + YELLOW = 33 + BLUE = 34 + MAGENTA = 35 + CYAN = 36 + WHITE = 37 + RESET = 39 + + # These are fairly well supported, but not part of the standard. + LIGHTBLACK_EX = 90 + LIGHTRED_EX = 91 + LIGHTGREEN_EX = 92 + LIGHTYELLOW_EX = 93 + LIGHTBLUE_EX = 94 + LIGHTMAGENTA_EX = 95 + LIGHTCYAN_EX = 96 + LIGHTWHITE_EX = 97 + + +class AnsiBack(AnsiCodes): + BLACK = 40 + RED = 41 + GREEN = 42 + YELLOW = 43 + BLUE = 44 + MAGENTA = 45 + CYAN = 46 + WHITE = 47 + RESET = 49 + + # These are fairly well supported, but not part of the standard. + LIGHTBLACK_EX = 100 + LIGHTRED_EX = 101 + LIGHTGREEN_EX = 102 + LIGHTYELLOW_EX = 103 + LIGHTBLUE_EX = 104 + LIGHTMAGENTA_EX = 105 + LIGHTCYAN_EX = 106 + LIGHTWHITE_EX = 107 + + +class AnsiStyle(AnsiCodes): + BRIGHT = 1 + DIM = 2 + NORMAL = 22 + RESET_ALL = 0 + +Fore = AnsiFore() +Back = AnsiBack() +Style = AnsiStyle() +Cursor = AnsiCursor() diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/colorama/ansitowin32.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/colorama/ansitowin32.py new file mode 100644 index 00000000..359c92be --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/colorama/ansitowin32.py @@ -0,0 +1,257 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +import re +import sys +import os + +from .ansi import AnsiFore, AnsiBack, AnsiStyle, Style +from .winterm import WinTerm, WinColor, WinStyle +from .win32 import windll, winapi_test + + +winterm = None +if windll is not None: + winterm = WinTerm() + + +class StreamWrapper(object): + ''' + Wraps a stream (such as stdout), acting as a transparent proxy for all + attribute access apart from method 'write()', which is delegated to our + Converter instance. + ''' + def __init__(self, wrapped, converter): + # double-underscore everything to prevent clashes with names of + # attributes on the wrapped stream object. + self.__wrapped = wrapped + self.__convertor = converter + + def __getattr__(self, name): + return getattr(self.__wrapped, name) + + def __enter__(self, *args, **kwargs): + # special method lookup bypasses __getattr__/__getattribute__, see + # https://stackoverflow.com/questions/12632894/why-doesnt-getattr-work-with-exit + # thus, contextlib magic methods are not proxied via __getattr__ + return self.__wrapped.__enter__(*args, **kwargs) + + def __exit__(self, *args, **kwargs): + return self.__wrapped.__exit__(*args, **kwargs) + + def write(self, text): + self.__convertor.write(text) + + def isatty(self): + stream = self.__wrapped + if 'PYCHARM_HOSTED' in os.environ: + if stream is not None and (stream is sys.__stdout__ or stream is sys.__stderr__): + return True + try: + stream_isatty = stream.isatty + except AttributeError: + return False + else: + return stream_isatty() + + @property + def closed(self): + stream = self.__wrapped + try: + return stream.closed + except AttributeError: + return True + + +class AnsiToWin32(object): + ''' + Implements a 'write()' method which, on Windows, will strip ANSI character + sequences from the text, and if outputting to a tty, will convert them into + win32 function calls. + ''' + ANSI_CSI_RE = re.compile('\001?\033\\[((?:\\d|;)*)([a-zA-Z])\002?') # Control Sequence Introducer + ANSI_OSC_RE = re.compile('\001?\033\\]((?:.|;)*?)(\x07)\002?') # Operating System Command + + def __init__(self, wrapped, convert=None, strip=None, autoreset=False): + # The wrapped stream (normally sys.stdout or sys.stderr) + self.wrapped = wrapped + + # should we reset colors to defaults after every .write() + self.autoreset = autoreset + + # create the proxy wrapping our output stream + self.stream = StreamWrapper(wrapped, self) + + on_windows = os.name == 'nt' + # We test if the WinAPI works, because even if we are on Windows + # we may be using a terminal that doesn't support the WinAPI + # (e.g. Cygwin Terminal). In this case it's up to the terminal + # to support the ANSI codes. + conversion_supported = on_windows and winapi_test() + + # should we strip ANSI sequences from our output? + if strip is None: + strip = conversion_supported or (not self.stream.closed and not self.stream.isatty()) + self.strip = strip + + # should we should convert ANSI sequences into win32 calls? + if convert is None: + convert = conversion_supported and not self.stream.closed and self.stream.isatty() + self.convert = convert + + # dict of ansi codes to win32 functions and parameters + self.win32_calls = self.get_win32_calls() + + # are we wrapping stderr? + self.on_stderr = self.wrapped is sys.stderr + + def should_wrap(self): + ''' + True if this class is actually needed. If false, then the output + stream will not be affected, nor will win32 calls be issued, so + wrapping stdout is not actually required. This will generally be + False on non-Windows platforms, unless optional functionality like + autoreset has been requested using kwargs to init() + ''' + return self.convert or self.strip or self.autoreset + + def get_win32_calls(self): + if self.convert and winterm: + return { + AnsiStyle.RESET_ALL: (winterm.reset_all, ), + AnsiStyle.BRIGHT: (winterm.style, WinStyle.BRIGHT), + AnsiStyle.DIM: (winterm.style, WinStyle.NORMAL), + AnsiStyle.NORMAL: (winterm.style, WinStyle.NORMAL), + AnsiFore.BLACK: (winterm.fore, WinColor.BLACK), + AnsiFore.RED: (winterm.fore, WinColor.RED), + AnsiFore.GREEN: (winterm.fore, WinColor.GREEN), + AnsiFore.YELLOW: (winterm.fore, WinColor.YELLOW), + AnsiFore.BLUE: (winterm.fore, WinColor.BLUE), + AnsiFore.MAGENTA: (winterm.fore, WinColor.MAGENTA), + AnsiFore.CYAN: (winterm.fore, WinColor.CYAN), + AnsiFore.WHITE: (winterm.fore, WinColor.GREY), + AnsiFore.RESET: (winterm.fore, ), + AnsiFore.LIGHTBLACK_EX: (winterm.fore, WinColor.BLACK, True), + AnsiFore.LIGHTRED_EX: (winterm.fore, WinColor.RED, True), + AnsiFore.LIGHTGREEN_EX: (winterm.fore, WinColor.GREEN, True), + AnsiFore.LIGHTYELLOW_EX: (winterm.fore, WinColor.YELLOW, True), + AnsiFore.LIGHTBLUE_EX: (winterm.fore, WinColor.BLUE, True), + AnsiFore.LIGHTMAGENTA_EX: (winterm.fore, WinColor.MAGENTA, True), + AnsiFore.LIGHTCYAN_EX: (winterm.fore, WinColor.CYAN, True), + AnsiFore.LIGHTWHITE_EX: (winterm.fore, WinColor.GREY, True), + AnsiBack.BLACK: (winterm.back, WinColor.BLACK), + AnsiBack.RED: (winterm.back, WinColor.RED), + AnsiBack.GREEN: (winterm.back, WinColor.GREEN), + AnsiBack.YELLOW: (winterm.back, WinColor.YELLOW), + AnsiBack.BLUE: (winterm.back, WinColor.BLUE), + AnsiBack.MAGENTA: (winterm.back, WinColor.MAGENTA), + AnsiBack.CYAN: (winterm.back, WinColor.CYAN), + AnsiBack.WHITE: (winterm.back, WinColor.GREY), + AnsiBack.RESET: (winterm.back, ), + AnsiBack.LIGHTBLACK_EX: (winterm.back, WinColor.BLACK, True), + AnsiBack.LIGHTRED_EX: (winterm.back, WinColor.RED, True), + AnsiBack.LIGHTGREEN_EX: (winterm.back, WinColor.GREEN, True), + AnsiBack.LIGHTYELLOW_EX: (winterm.back, WinColor.YELLOW, True), + AnsiBack.LIGHTBLUE_EX: (winterm.back, WinColor.BLUE, True), + AnsiBack.LIGHTMAGENTA_EX: (winterm.back, WinColor.MAGENTA, True), + AnsiBack.LIGHTCYAN_EX: (winterm.back, WinColor.CYAN, True), + AnsiBack.LIGHTWHITE_EX: (winterm.back, WinColor.GREY, True), + } + return dict() + + def write(self, text): + if self.strip or self.convert: + self.write_and_convert(text) + else: + self.wrapped.write(text) + self.wrapped.flush() + if self.autoreset: + self.reset_all() + + + def reset_all(self): + if self.convert: + self.call_win32('m', (0,)) + elif not self.strip and not self.stream.closed: + self.wrapped.write(Style.RESET_ALL) + + + def write_and_convert(self, text): + ''' + Write the given text to our wrapped stream, stripping any ANSI + sequences from the text, and optionally converting them into win32 + calls. + ''' + cursor = 0 + text = self.convert_osc(text) + for match in self.ANSI_CSI_RE.finditer(text): + start, end = match.span() + self.write_plain_text(text, cursor, start) + self.convert_ansi(*match.groups()) + cursor = end + self.write_plain_text(text, cursor, len(text)) + + + def write_plain_text(self, text, start, end): + if start < end: + self.wrapped.write(text[start:end]) + self.wrapped.flush() + + + def convert_ansi(self, paramstring, command): + if self.convert: + params = self.extract_params(command, paramstring) + self.call_win32(command, params) + + + def extract_params(self, command, paramstring): + if command in 'Hf': + params = tuple(int(p) if len(p) != 0 else 1 for p in paramstring.split(';')) + while len(params) < 2: + # defaults: + params = params + (1,) + else: + params = tuple(int(p) for p in paramstring.split(';') if len(p) != 0) + if len(params) == 0: + # defaults: + if command in 'JKm': + params = (0,) + elif command in 'ABCD': + params = (1,) + + return params + + + def call_win32(self, command, params): + if command == 'm': + for param in params: + if param in self.win32_calls: + func_args = self.win32_calls[param] + func = func_args[0] + args = func_args[1:] + kwargs = dict(on_stderr=self.on_stderr) + func(*args, **kwargs) + elif command in 'J': + winterm.erase_screen(params[0], on_stderr=self.on_stderr) + elif command in 'K': + winterm.erase_line(params[0], on_stderr=self.on_stderr) + elif command in 'Hf': # cursor position - absolute + winterm.set_cursor_position(params, on_stderr=self.on_stderr) + elif command in 'ABCD': # cursor position - relative + n = params[0] + # A - up, B - down, C - forward, D - back + x, y = {'A': (0, -n), 'B': (0, n), 'C': (n, 0), 'D': (-n, 0)}[command] + winterm.cursor_adjust(x, y, on_stderr=self.on_stderr) + + + def convert_osc(self, text): + for match in self.ANSI_OSC_RE.finditer(text): + start, end = match.span() + text = text[:start] + text[end:] + paramstring, command = match.groups() + if command in '\x07': # \x07 = BEL + params = paramstring.split(";") + # 0 - change title and icon (we will only change title) + # 1 - change icon (we don't support this) + # 2 - change title + if params[0] in '02': + winterm.set_title(params[1]) + return text diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/colorama/initialise.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/colorama/initialise.py new file mode 100644 index 00000000..430d0668 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/colorama/initialise.py @@ -0,0 +1,80 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +import atexit +import contextlib +import sys + +from .ansitowin32 import AnsiToWin32 + + +orig_stdout = None +orig_stderr = None + +wrapped_stdout = None +wrapped_stderr = None + +atexit_done = False + + +def reset_all(): + if AnsiToWin32 is not None: # Issue #74: objects might become None at exit + AnsiToWin32(orig_stdout).reset_all() + + +def init(autoreset=False, convert=None, strip=None, wrap=True): + + if not wrap and any([autoreset, convert, strip]): + raise ValueError('wrap=False conflicts with any other arg=True') + + global wrapped_stdout, wrapped_stderr + global orig_stdout, orig_stderr + + orig_stdout = sys.stdout + orig_stderr = sys.stderr + + if sys.stdout is None: + wrapped_stdout = None + else: + sys.stdout = wrapped_stdout = \ + wrap_stream(orig_stdout, convert, strip, autoreset, wrap) + if sys.stderr is None: + wrapped_stderr = None + else: + sys.stderr = wrapped_stderr = \ + wrap_stream(orig_stderr, convert, strip, autoreset, wrap) + + global atexit_done + if not atexit_done: + atexit.register(reset_all) + atexit_done = True + + +def deinit(): + if orig_stdout is not None: + sys.stdout = orig_stdout + if orig_stderr is not None: + sys.stderr = orig_stderr + + +@contextlib.contextmanager +def colorama_text(*args, **kwargs): + init(*args, **kwargs) + try: + yield + finally: + deinit() + + +def reinit(): + if wrapped_stdout is not None: + sys.stdout = wrapped_stdout + if wrapped_stderr is not None: + sys.stderr = wrapped_stderr + + +def wrap_stream(stream, convert, strip, autoreset, wrap): + if wrap: + wrapper = AnsiToWin32(stream, + convert=convert, strip=strip, autoreset=autoreset) + if wrapper.should_wrap(): + stream = wrapper.stream + return stream diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/colorama/win32.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/colorama/win32.py new file mode 100644 index 00000000..c2d83603 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/colorama/win32.py @@ -0,0 +1,152 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. + +# from winbase.h +STDOUT = -11 +STDERR = -12 + +try: + import ctypes + from ctypes import LibraryLoader + windll = LibraryLoader(ctypes.WinDLL) + from ctypes import wintypes +except (AttributeError, ImportError): + windll = None + SetConsoleTextAttribute = lambda *_: None + winapi_test = lambda *_: None +else: + from ctypes import byref, Structure, c_char, POINTER + + COORD = wintypes._COORD + + class CONSOLE_SCREEN_BUFFER_INFO(Structure): + """struct in wincon.h.""" + _fields_ = [ + ("dwSize", COORD), + ("dwCursorPosition", COORD), + ("wAttributes", wintypes.WORD), + ("srWindow", wintypes.SMALL_RECT), + ("dwMaximumWindowSize", COORD), + ] + def __str__(self): + return '(%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d)' % ( + self.dwSize.Y, self.dwSize.X + , self.dwCursorPosition.Y, self.dwCursorPosition.X + , self.wAttributes + , self.srWindow.Top, self.srWindow.Left, self.srWindow.Bottom, self.srWindow.Right + , self.dwMaximumWindowSize.Y, self.dwMaximumWindowSize.X + ) + + _GetStdHandle = windll.kernel32.GetStdHandle + _GetStdHandle.argtypes = [ + wintypes.DWORD, + ] + _GetStdHandle.restype = wintypes.HANDLE + + _GetConsoleScreenBufferInfo = windll.kernel32.GetConsoleScreenBufferInfo + _GetConsoleScreenBufferInfo.argtypes = [ + wintypes.HANDLE, + POINTER(CONSOLE_SCREEN_BUFFER_INFO), + ] + _GetConsoleScreenBufferInfo.restype = wintypes.BOOL + + _SetConsoleTextAttribute = windll.kernel32.SetConsoleTextAttribute + _SetConsoleTextAttribute.argtypes = [ + wintypes.HANDLE, + wintypes.WORD, + ] + _SetConsoleTextAttribute.restype = wintypes.BOOL + + _SetConsoleCursorPosition = windll.kernel32.SetConsoleCursorPosition + _SetConsoleCursorPosition.argtypes = [ + wintypes.HANDLE, + COORD, + ] + _SetConsoleCursorPosition.restype = wintypes.BOOL + + _FillConsoleOutputCharacterA = windll.kernel32.FillConsoleOutputCharacterA + _FillConsoleOutputCharacterA.argtypes = [ + wintypes.HANDLE, + c_char, + wintypes.DWORD, + COORD, + POINTER(wintypes.DWORD), + ] + _FillConsoleOutputCharacterA.restype = wintypes.BOOL + + _FillConsoleOutputAttribute = windll.kernel32.FillConsoleOutputAttribute + _FillConsoleOutputAttribute.argtypes = [ + wintypes.HANDLE, + wintypes.WORD, + wintypes.DWORD, + COORD, + POINTER(wintypes.DWORD), + ] + _FillConsoleOutputAttribute.restype = wintypes.BOOL + + _SetConsoleTitleW = windll.kernel32.SetConsoleTitleW + _SetConsoleTitleW.argtypes = [ + wintypes.LPCWSTR + ] + _SetConsoleTitleW.restype = wintypes.BOOL + + def _winapi_test(handle): + csbi = CONSOLE_SCREEN_BUFFER_INFO() + success = _GetConsoleScreenBufferInfo( + handle, byref(csbi)) + return bool(success) + + def winapi_test(): + return any(_winapi_test(h) for h in + (_GetStdHandle(STDOUT), _GetStdHandle(STDERR))) + + def GetConsoleScreenBufferInfo(stream_id=STDOUT): + handle = _GetStdHandle(stream_id) + csbi = CONSOLE_SCREEN_BUFFER_INFO() + success = _GetConsoleScreenBufferInfo( + handle, byref(csbi)) + return csbi + + def SetConsoleTextAttribute(stream_id, attrs): + handle = _GetStdHandle(stream_id) + return _SetConsoleTextAttribute(handle, attrs) + + def SetConsoleCursorPosition(stream_id, position, adjust=True): + position = COORD(*position) + # If the position is out of range, do nothing. + if position.Y <= 0 or position.X <= 0: + return + # Adjust for Windows' SetConsoleCursorPosition: + # 1. being 0-based, while ANSI is 1-based. + # 2. expecting (x,y), while ANSI uses (y,x). + adjusted_position = COORD(position.Y - 1, position.X - 1) + if adjust: + # Adjust for viewport's scroll position + sr = GetConsoleScreenBufferInfo(STDOUT).srWindow + adjusted_position.Y += sr.Top + adjusted_position.X += sr.Left + # Resume normal processing + handle = _GetStdHandle(stream_id) + return _SetConsoleCursorPosition(handle, adjusted_position) + + def FillConsoleOutputCharacter(stream_id, char, length, start): + handle = _GetStdHandle(stream_id) + char = c_char(char.encode()) + length = wintypes.DWORD(length) + num_written = wintypes.DWORD(0) + # Note that this is hard-coded for ANSI (vs wide) bytes. + success = _FillConsoleOutputCharacterA( + handle, char, length, start, byref(num_written)) + return num_written.value + + def FillConsoleOutputAttribute(stream_id, attr, length, start): + ''' FillConsoleOutputAttribute( hConsole, csbi.wAttributes, dwConSize, coordScreen, &cCharsWritten )''' + handle = _GetStdHandle(stream_id) + attribute = wintypes.WORD(attr) + length = wintypes.DWORD(length) + num_written = wintypes.DWORD(0) + # Note that this is hard-coded for ANSI (vs wide) bytes. + return _FillConsoleOutputAttribute( + handle, attribute, length, start, byref(num_written)) + + def SetConsoleTitle(title): + return _SetConsoleTitleW(title) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/colorama/winterm.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/colorama/winterm.py new file mode 100644 index 00000000..0fdb4ec4 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/colorama/winterm.py @@ -0,0 +1,169 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +from . import win32 + + +# from wincon.h +class WinColor(object): + BLACK = 0 + BLUE = 1 + GREEN = 2 + CYAN = 3 + RED = 4 + MAGENTA = 5 + YELLOW = 6 + GREY = 7 + +# from wincon.h +class WinStyle(object): + NORMAL = 0x00 # dim text, dim background + BRIGHT = 0x08 # bright text, dim background + BRIGHT_BACKGROUND = 0x80 # dim text, bright background + +class WinTerm(object): + + def __init__(self): + self._default = win32.GetConsoleScreenBufferInfo(win32.STDOUT).wAttributes + self.set_attrs(self._default) + self._default_fore = self._fore + self._default_back = self._back + self._default_style = self._style + # In order to emulate LIGHT_EX in windows, we borrow the BRIGHT style. + # So that LIGHT_EX colors and BRIGHT style do not clobber each other, + # we track them separately, since LIGHT_EX is overwritten by Fore/Back + # and BRIGHT is overwritten by Style codes. + self._light = 0 + + def get_attrs(self): + return self._fore + self._back * 16 + (self._style | self._light) + + def set_attrs(self, value): + self._fore = value & 7 + self._back = (value >> 4) & 7 + self._style = value & (WinStyle.BRIGHT | WinStyle.BRIGHT_BACKGROUND) + + def reset_all(self, on_stderr=None): + self.set_attrs(self._default) + self.set_console(attrs=self._default) + self._light = 0 + + def fore(self, fore=None, light=False, on_stderr=False): + if fore is None: + fore = self._default_fore + self._fore = fore + # Emulate LIGHT_EX with BRIGHT Style + if light: + self._light |= WinStyle.BRIGHT + else: + self._light &= ~WinStyle.BRIGHT + self.set_console(on_stderr=on_stderr) + + def back(self, back=None, light=False, on_stderr=False): + if back is None: + back = self._default_back + self._back = back + # Emulate LIGHT_EX with BRIGHT_BACKGROUND Style + if light: + self._light |= WinStyle.BRIGHT_BACKGROUND + else: + self._light &= ~WinStyle.BRIGHT_BACKGROUND + self.set_console(on_stderr=on_stderr) + + def style(self, style=None, on_stderr=False): + if style is None: + style = self._default_style + self._style = style + self.set_console(on_stderr=on_stderr) + + def set_console(self, attrs=None, on_stderr=False): + if attrs is None: + attrs = self.get_attrs() + handle = win32.STDOUT + if on_stderr: + handle = win32.STDERR + win32.SetConsoleTextAttribute(handle, attrs) + + def get_position(self, handle): + position = win32.GetConsoleScreenBufferInfo(handle).dwCursorPosition + # Because Windows coordinates are 0-based, + # and win32.SetConsoleCursorPosition expects 1-based. + position.X += 1 + position.Y += 1 + return position + + def set_cursor_position(self, position=None, on_stderr=False): + if position is None: + # I'm not currently tracking the position, so there is no default. + # position = self.get_position() + return + handle = win32.STDOUT + if on_stderr: + handle = win32.STDERR + win32.SetConsoleCursorPosition(handle, position) + + def cursor_adjust(self, x, y, on_stderr=False): + handle = win32.STDOUT + if on_stderr: + handle = win32.STDERR + position = self.get_position(handle) + adjusted_position = (position.Y + y, position.X + x) + win32.SetConsoleCursorPosition(handle, adjusted_position, adjust=False) + + def erase_screen(self, mode=0, on_stderr=False): + # 0 should clear from the cursor to the end of the screen. + # 1 should clear from the cursor to the beginning of the screen. + # 2 should clear the entire screen, and move cursor to (1,1) + handle = win32.STDOUT + if on_stderr: + handle = win32.STDERR + csbi = win32.GetConsoleScreenBufferInfo(handle) + # get the number of character cells in the current buffer + cells_in_screen = csbi.dwSize.X * csbi.dwSize.Y + # get number of character cells before current cursor position + cells_before_cursor = csbi.dwSize.X * csbi.dwCursorPosition.Y + csbi.dwCursorPosition.X + if mode == 0: + from_coord = csbi.dwCursorPosition + cells_to_erase = cells_in_screen - cells_before_cursor + elif mode == 1: + from_coord = win32.COORD(0, 0) + cells_to_erase = cells_before_cursor + elif mode == 2: + from_coord = win32.COORD(0, 0) + cells_to_erase = cells_in_screen + else: + # invalid mode + return + # fill the entire screen with blanks + win32.FillConsoleOutputCharacter(handle, ' ', cells_to_erase, from_coord) + # now set the buffer's attributes accordingly + win32.FillConsoleOutputAttribute(handle, self.get_attrs(), cells_to_erase, from_coord) + if mode == 2: + # put the cursor where needed + win32.SetConsoleCursorPosition(handle, (1, 1)) + + def erase_line(self, mode=0, on_stderr=False): + # 0 should clear from the cursor to the end of the line. + # 1 should clear from the cursor to the beginning of the line. + # 2 should clear the entire line. + handle = win32.STDOUT + if on_stderr: + handle = win32.STDERR + csbi = win32.GetConsoleScreenBufferInfo(handle) + if mode == 0: + from_coord = csbi.dwCursorPosition + cells_to_erase = csbi.dwSize.X - csbi.dwCursorPosition.X + elif mode == 1: + from_coord = win32.COORD(0, csbi.dwCursorPosition.Y) + cells_to_erase = csbi.dwCursorPosition.X + elif mode == 2: + from_coord = win32.COORD(0, csbi.dwCursorPosition.Y) + cells_to_erase = csbi.dwSize.X + else: + # invalid mode + return + # fill the entire screen with blanks + win32.FillConsoleOutputCharacter(handle, ' ', cells_to_erase, from_coord) + # now set the buffer's attributes accordingly + win32.FillConsoleOutputAttribute(handle, self.get_attrs(), cells_to_erase, from_coord) + + def set_title(self, title): + win32.SetConsoleTitle(title) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/__init__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/__init__.py new file mode 100644 index 00000000..a786b4d3 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2012-2017 Vinay Sajip. +# Licensed to the Python Software Foundation under a contributor agreement. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +import logging + +__version__ = '0.2.8' + +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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b690f95ba1541e100e4268209423f5f50f3c7ad8 GIT binary patch literal 992 zcma)4&2G~`5T3QyKXKa16ohyHgych$s9cahC=x_~ROJ8%zyhrj?~=OpPr7yxt+=Hx z!-WUhD<@uo6Eo|!35Wx`+VSkpH}lPm=i%;d^x^y9<HP~@0b8q&`WR1Bp^zY10Vzl) zWiLRwl3#-4%2~Uqdmf|JE1={lXYdxP2ON}l8tK;zXd~X20pbG%Cq8=c_fR?S0B?Z` z*DUR+-btkR8rF;<&l^a>pU4T*3vV<y96ZYCa=jQTV?50c3I!>XkUG}MG4b=fX^VV5 z`I4z+o7dGeaZM;hH7k`6CK95o<*FckM~Ji4tmrJ?K>HZYieHb1ZMhsS^X0*Ol^610 zbap(iM~9N0>=B<;C2KvD9obNbyvkc42Fr7eO$2IOLrTc(Jz=IlT@}U4StSdl|EPvw zW5VA@v8hHnmyo($n^P`5>Eqp#0kuYl2+hcm7JaED&+s%Hg#-k#sjVe(3~yBN$@p4j zwU(PIb%0RgAKR4n$rle?>~G~c=#2l%q<a`ZM<i}~*|Bg{=Iw1XbR6+E2bnU;pB8<o z9$O1VlJFJ8bw$`lUewuX!aAzISfWg;S*wl^aR*&HuDjb@8^AR2wTmE44bvV8`e~X* zO7D@_1h*P>%l7>iDh)k_jJADC`X(sq#Uig3rY~?hbc3UZGuFGALpui+Z2GUtWv$zZ z*0nal)l8V)LbXR2Lus3s@hPCvCYnikh51)bCVbLO^i#^Pi77FMJF)AqnC-E9Uc`O_ DGMCJv literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/__pycache__/compat.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/__pycache__/compat.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bd56894f4617b114dbec2d0f7a39e2ad05e27a49 GIT binary patch literal 32018 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 IZyhfDA7U8uT>t<8 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/__pycache__/database.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/__pycache__/database.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2c700a54041c621f9cf2df8cfbfc6d12c05f516d GIT binary patch literal 42595 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/__pycache__/index.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/__pycache__/index.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..07637d6a87f8272c098974e5ee3c654e90d4d5dd GIT binary patch literal 17323 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 OU9((!#il@1u>S|_3~z-1 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/__pycache__/locators.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/__pycache__/locators.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..764bbccd2ed8c4de2edbf943ac6bf1f7ef1d2452 GIT binary patch literal 38803 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 acZSXnJv4N9=zR%@e6+ad5}8Ck`F{X`#dy*H literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/__pycache__/manifest.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/__pycache__/manifest.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..15a7aea41da70ecd782ceaeb36ecb1c58009365b GIT binary patch literal 10311 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/__pycache__/markers.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/__pycache__/markers.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0d18ace82b8f4953c23c9260c0fcd60465f76c10 GIT binary patch literal 4430 zcmb7HPjlPG6~`_>0E8%tmRu#CW>VCSn=p+f*J-D&YJ2j}_GH?sp0P7=*>n(y3t5mr z0A7Hq!~rv%((R##eu8{}_R`PNLr;6{$=4ozX@74)Qmn1f$RPLOVgI~+yZhezz5Q@` z+574r8^619!7%=9EIbzYk5G!gfC!^!2qt*KdQ880kL$PDGxgi*S;7=n(iqr1d*Jk( zf!lMLfx1T09C$r%u+&?^xBZ0mTEY?TGo!bB-w;jVJu`$CwI^n8MJ$OH>N`<qV)QQj zwiB)3y(-#bS=i55Z%y!rMt5a&-+K_sB9i`YCjD|R@}u-HmRUN8($XJ<@*t9hKZyG> zyOxCMlVSKI@<p^8r;+gE)PHdIf&Y{1H#fZJSeUW>oPl;t^_~2<+{@A+9^^?xqQWxH zQsoY1lGAjmRg^MLp9JM`9u-}#oHz{*F|}&x_Mo0wHRH65WG<t!Pm<}Ow~6v8N^u#a zG%BNH6W%h4)yilYa$T^8s1y7Ww(P*hGOg`<lE#hryO%MU7Z-6_lwsPBWCPV*rdalO zLoR`Tv9(za^36QXuk8%uL|nW6bZ;lSenU`|E~KZ(<fe#=GKqIKr<=5qAFHJxE`lV6 z%3*Q|!U`M2V5`hxav5BoK4%YAe1uZ$f<y*v!5}+;4RB%N9AN{X4NYxL9Zg+Lo0@u> zE@|4*bXn83rYqmJU`ZWu0d~+3tJsJ&)x3KcCd07I<ml&~kLS@|T=@MYED9gYu)w*N znIF}?qNxe^(Gkw6z!?@BdQ_i7X?o~QMIVO?rZOsaK(@uU^@d`<*^y$$`lBW-bW`rF zBpmFB@XkB<Do~8k>Rh*tS>x->BUd0qc8JhPp3EiTj>c6KJ<aJNX;`g#-qvqxaS3OO z{=wOz=euH_U*x;z6lt7a<a=j}d}RY(Lv;6S(en*>jXiz;Y>}^M`x>Huc&ccM4+}<| z*%hM5i4mV|0Uw-4Wd2$rubnFLRac|<Hg~nNwcI$TNay?_H)kTdtr5R{dt}}Q;oqQq z|Mm-ZYs7Eib!Wuy+*W3o3dJ+2c$|*xG%JB0eG}v9X`)al)+g{UFo^1mqPqN~0!Si~ z^8;JH1Kt$gpAgx{=F@*xtl|fbyjgN#Rczguus@=vLhrGe{#8pbC%kx2TBv8DfqJX5 zDr3KaQE6!lyRxREm~hbAKra_>yL7;zX2Rs(G>=-%bJ46CkYVqd(~-u$iyA)RV+WGm z%GSI~vsBh4qjD-2ZDvKzzciZY=t*&R8tWoIT!^u<4zfM~Zzu_3caAkEZ|x4#{?^wu zHp=MfFqRrtzn+Vu4ur7;$^_#@9`)nh7$W)^F!ZRb<2KDaheAo#G`cuU57O-Ssec&C zINV91E&pnPgUUziS?=p|nxS|kbeoy%70Q%*#pta#1yIB^$pFg5MV3;J`v3gDc)CqV zXRC2mEj>I&DsXgHN|=Eq;(n>x9~a0zNb|bZ%W|M6eHUtNJ1ajwnOk?zII7$kK6RVQ zDxzdpSwJYMoathfjh!4OrF;W(_pAsCgF<8ZCMiSM{4z%PsJnqu5FQx~kF{8vyPzI# zGndh~i{G1UmAAlm*dkob)Y<OZ$_;`v97I8&ydW54Vwe!$3WBG@FqyVEK_Iez5XiSN zm-LC8K$hkRBV`+edK7PgxTa;=?6hCY)IIy?q#w#QDZ9|l^an7MRX#JuaH<jx1gCnB zQl@>rZ%)`4ZU)X8^VAjA7;ZA=<V0m--zx2WXJUZ5nl?4{G&Mn&%GLyKf%aux2P%-2 zl6yj?Eu3##Q^R++=lPoneMrHFD8((U9DD`XyU$QK`PG;>lhlCMoAM_4xiBGA`|gCj zVf>W(P<*zwNAA^PL;qC+X=#{f^Ts(e2H`%;tTBkw`h^@;wPch;AuJ|3j1pxc3spAk zFAfuAtyY}wX39B4$_x8b)<K+#g>%tq%Np|JL0AU6!z4i_sC#bHQaliYUBm&oY@Llh zK$0B70)v_R-Ab~4m=t$5P7$EmFD1(Cx-y>APIX&q?f=`fajEr}DrY)7Sy6ZB<Vjf4 zR7j=!dq~&S+w+>!lk<}i(>+ov^AW{yQAPuG(q%ed@1$myz^_fEFK&=(Pb+6?wjeN= zN$<9mvlkX&iNi3_Ab*U7%O8O#i~I$#s8H^#w{oTnlC(d{nJH`6I!XdLNqM*Y7^G{- z4~hR7k()%wy<a}mm6s0dSLjnvR%bBRA<y@?#VnIEj!gc<16}ZKw8>wf=RB>XxmQuN z_x%~nafhxb6ZRD!0|>q}(i;~1<G_=jFaQ!WM(Y4Dn0#gJ@)}gWG=2lX6MSraV?8!f z{@AEYDJqkkKv-}Ife{UiFlQr5v$WvL05CbK8h{=)VT?T2fiE{El#kn^|7f)Me0HVs z=g0$Oo<a`l>d1*pUXFVX?r1(hW#Lk|;b|#b2>0P&3SC>cMa-`XxIN5oZ8hj@(JgP@ z6+X8pAv%isLyGq^PpO4X-KM^f(A|_Q!B4X6V3;pTJ!SYH%ya0iCmD6WND0&EPBYhP z2DpVrBLXZc+d6Q(U{^-(4^z7D^h>%6$uLf67erWw1g`aUZ#JmwN(V=bYt>Od%4r$$ zyZDwAu+_?Eckg}t#V;QPpZ<FL(cQ<7ls(KLCQ{8QUSv|oegrGK7Tde<%6jBw5@q33 zO2s01g`}Tgg@y^rub-k67eS0B2RL=uWldcetjCZbb}vf00LXhpJ|l7;L~$7@TZ4D0 z{Yg@2uEE;EsU)>0=_LZQLd3kFMqoSJ*~boP;L-LkDGJI5L`a_n9p`w4J70~5cPJ&$ Zpk~<ws`&AXtix^YHaeT`_iV<&{|`Ud{LcUY literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/__pycache__/metadata.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/__pycache__/metadata.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..859eb933fe062bdb33c1a357a183ec1836c89951 GIT binary patch literal 27670 zcmchAdvqMvdEd^?zOi@^d{Y#)qDYEM0T2n%vP@AFK@yZGkxQC@NNM$0E^!Cs0*hVn z&VU3r3%{s1PGZ%H>pZKZId0m-Y3j6%o2G7#|H!*Znx;NEY0oq#ZJj=xoV0b5v}xHi z?eF*9nb`**#Y)d9sQu>7ojZ5#>wACq>WRU@+-qN)c>NFGiN$^|*7f%g(kJnA_rzl{ z6)VS-rQ&sKDPE3SOxtz4Y~z}!Czg`sWRRCCr{r0>oR({*oKZ=Ys%MvS<=oOhc>v{- zDqYVn4VDL&hRQ=r!{uSg%hX4fHkCI?I$IxI+Fahew57a7?sN66OWVrZmbRC-TQMiS zu*2DT&noYFE~W-l{>_-mJGpyy`2pMysv+DD$^CBJ533Q}kI4OlxZk8kaX%{ed(>vN zMQy!dmmgBw$_2H({IHW**sFG+?nflWuk2Ij%KOy|<pb))@}uf}`JlQ`E~--bkh)lY z%sHekZI6}5)Q8LC&cwY~`Elp*g~QJNdluTs)PX2<FiIVYQe%?hH$Q|g9Z|>B({IMg zlj^v72G=LlF7<%gtsYeS)gJYbDyWCmUiFB2OpU31>VSGwjjPAiVf6uZL`|wgs;CaC z3H5|Js-9FIR43lqQ$DILmp`Cp%1^4<@(0yR<)_q@@`u#b@-g*t`Dy1k+WU<3^I3fT zgnC6ysZ(!S<!3QYr_~vZ(;1Yp%O}-zc}krvpHk12PvhD1YBQc~mS<;_JrgUITOU2Q zv|M+VoQ7BRYRyKWIbZN@I)w|4S5;N7T9|L@!lk?3O*~qz&Mj7NIBwz6^d)y9mz!Bx zUT$j7EmZ6E!cx}@OI2hZJTh^3tZ-!F2*Ko7q1sS|$%(@SXLZ@pHTht@IFb8(uH2&K zkE}Fmb4}$`>NU^N)w)|k=B6dbb@9o{ylyU4=4*B5_bnEW`y*#+u2-*JpI)7Fmf3KB zpi;T*Xcx&!rD*$^8Bf<5H_l!3^RA>S-rZ%#^|PL{>PZ^)XKM|7Y*{-VsvN=tU7hnP z*Y8#qox6VShT~Nv&&5-@bLVbisQgVBfTKqbSFTK7o;i21RJlAo$6kbgY~o4$+z|jL zR<?kIab*GN;uvz<-x3b)g_`T4jni5;b!*R5K|8lrYT8kq!K}H3B~z$WO!%2frBPjS zDiuFhsVp_sN}cI^rE+VfS`VJ2D;3q8t5m)a(_8R)0r#JN+*?|He7Uwfeto4@SL26o z-MrpBJgJx^KMY+%HTC1ljOydzY)&lS)x)S}H@gFJ63bX}|GxUWHSF){W@ElyoAXSE zPfU59v$X6Lye4{HRRyfHI~ud!>Hd7psVf%?vg#G8+9}Kh6`;El7!b_?)|&`M2{sc% zy*8<>%-aS~z%T3q@84G!B7AtMp`E$rjYh5Is4Hf<ncfs$YAiOIcN(3>2dlBrSXsL6 z==as$?P%Y=uJ-c&eYH1QV&@vStM!^PZG2#=t98}-ic`S)s+kh+XE=ADIS0F%$9q2$ z&N9&B#pf#LN@p)trc0+Uo;g=~&fgVfUAjDdcKY(==`$hrw2~{{{P<HX8>FI@%N5Mu zYwcDxOc(BtgmsSxW9}zPKm<P>-exY<s~$+zlAoSgSz4;<yZ*o#$DPwPLmV<MI(P3h zwQ}!gpKmTX<I5l_erjq3bWPvSo9no<RISzh^!eJH({P>pqXB($)Ob{T?sUBhoW;7t zYiBUs^=4I#zjXP$pS^h9ZPpzRBqno7H*ePzQ<n`!yMFFM6|@FFyg1THn{VD9ie4Tk zUAsSk8Wx;6k2T*P468HG2E#hd?QnE!sPz3!QO5Kth+Cstzdw9Q*KSumCmg-|`S5#c z{M6n1n`azvWqCY$k4^Bie7iw%dVeTt0P=M8{*JDZ9S2UMoHsrT>e|{X<nlH5&@;~f z9Nc^G)i?IO{#bEu`%$DGMe5Pw9H}G!c(w66jh}lSpbg<<F|PAoY=-GL(mOm$(l*lj zJWx;Mrx#QDs2BI_?WSA`&rW)YnV6Ss$L?950JQ~`&6K#H4x3el)Z~4DC+^#mSY!Z) zi*fxlzNwD`6jNXxlShwK&Yqh-e`W?ZPaHYgb#wFsotqCl`DEwj=wx`KiJ@R9=>X}w zs1ON|KN|9;Ng-)<jBo?_E(uZ0%2<i6Uq;fJ;}Q*44mT<MWUww%u7gbXW^B#65nGF| zPPAhSv3s#IvDf#$7GJa1679r|n6g!3-o{`}+}hTTFIa7xGRv)PS1HG(R9a<JR^@J_ z){<|>R{yLW$J>9hX18rGzL?e@QOR}^?|!76T(DJ=Z+eM^q#8gikRnkkg;GDFQc~(i zq*N*@m5)lLQR-J!T1x$@luAdX2BT6Ll=_CsNU3i~sZ3OAsJm42&sC14-nR7KwylO2 zZAr0>x#*3N=#4DuomE+>cUJ1nMx{2HQnzNW#yr${&r+j{anyFbom885VhIJgn<e*6 z>HQWgF!bIVP+Mi8N$=mbn%~p5+Ho&`FTRFxHSKHuxa18YFCDhI`4!0<LLSCGDEC## z8%AE%8);(<0Wn6~W4K}z<cd~rhwQtUcss7+`1&?}y`9R(aDTX+4z8Ktnl)E%lY9Xs zyiGuy6v`e`DWuX!ol$9|GDwwFZYHL(K$-2W51ax0ngc_I0C?STy+X*sl(P)^0HR6( zVj!OejCsX%)WjU+0{#)3`J2Jd-2<??qitbXjjYAn@pcT$2`a`+>{bd(P$Z$!>{&q+ z$V3T9T&|x6<z56=^;0I%k46KPn^m`Bo_&O0$pFNx955zhwf0un=n&H;j@O%WkRwk_ zbiL%KUn;#=x_GtJPaa4po)F4FaHO^Mva{5@4N(k4q@chlA*AegyR(mMoISa5_7k0K z{V>|xsR>`}JnPQx`mRpk6-|oSDqdXiD5N)qvAKou!b-p3;X2+iHg?N8kpxd#W3Mz< z3Y<7_{<-GTGQ|Gtb%%ob;~<ldgEr!KB$(misGo#HwuBj}E^`g&XV3^grDb&dRK0oQ zhNJzYa;~r3&?nf+X9-RcOab_I-D!yY1v!;u^}^KU7a=zD4s^A1N5a~<BV`TmY%os! z0O~5{{FGUE`Z?BrM(U@io`jII;*>WnH^H3In{W-d<y6hB9H|@$u9I?|4DKf@hx-@U zV9ye2;{)zBfLJ_}N?4=TkQKLv;v;t68o{F52#z8@d@^DWVOb8LT*lsFnSTeYOu7)y zf#9b)zqr1NZxr|VBca?KcEC?itk<XT*v~8nGERBaHJX>BDq)_Vc0;)bf=5U0!RUzG z<7aO|?x`5Lrz&!fpEuWvk$ZBGegX*v?TFIB(=_CEN=1HdE|P%!yb2_s%8IW0L(NbE zs!)ya2bTjeD7e*uEM#ssV=b;MS9&vtquXUsIsHvh1|$m+X8cT;g#iiWtZejYe*l>j zo!F%E@Ujtn!r?6E!-5K0o}Xo<BIA^Y!n%yc*BW~Djj8c+b-Z<W{6iD3KX!JGgpGf^ zCh<FspL-afP0=K_U@42-VJ#M<t%bOXD{xEX!Pe4_wXOO1Hi{<6*3HZ4yEc@RL#1oi zS48>dWEbw#yqh8Ag_ccu_}o18a8ZDz2*h?zuQ+4So1`MB>Clb&XdIJYT?TSf7@oLq zjo-HlzBSQG?sv!cyCAe#h%e`-XQs|h`?kAs-A`)=YiQ0X+WHmrMwVJR-~F|I9NAi- zV$6?Kpwov#`==ZaA;*bCB9GOs?;vLmzvz!d>?D3}4wS4%FMd`fR1yY^1O*cqP?8i* za80S48o)KJ@@f#*j2cqIxMtOe+JtLPjnbr19-ui0*Sy-Mw&OaecBq}W4yltg#GvM3 z7-RMzXN2Y$TsP4qgX<{FGW&4d3=_(JbpR!|s8cY|97Jj>j44HR2&ru}-JsNVXUDt+ z<IM!}cB(Tp;vlt4P1BHr)B`l)pxkblcAmubL6~!%!gY`OkUECzL+WXD9M^(+MxDU* zVc~;k{h{;Djq2RpP|K-SF+j6mvvtYtC~ctoRm^$ask%<EG$JERz^h$yEU~+Y#RVk2 za1eOj99P2I9aWqtkORzB8?v-&4cDtSyc*O4;p~FmW(_tQPGAml9jM<oR%o<=VF!A8 z1J8=bq=NCnA@Go!hsNY}Cdn(SoknwMh9#M9USBv=xKX=}I%V08*K3RT&~;+1`EW=D z3ssjYKlO{Sf+esa$RUTQxmF7b#)R(I!&1gh6BG)C7?WAx!j*C*Kdqek>Pp?4BSQ0! zR~x_6__-|r3TJKmhP?noDnvwUF{XEW5WOjY)u4@3;x`CwMF_DQFxiF%vY6G+Lnu$R zEef2CiFRD_UPE5Gjkl4v3j!?5-9}yp!YJ~P%HD%wBpQre`h5yktw%YeV=_`0Bbn4- z5X2<ntj^U}T#P2TV{)#!(tzqlT}(87KMk5e6H0j~q?$rRTz{})WICrYSA(LO3M^X* z8e;q`p%nB}E6XqgI{p@r>q<B;A<h?*e!_L?^L~PD^wYuYQjC*X(jP?!`pE~3ShYsY zt5im?$lYBi5sPmDpG*b+GUS)?%UP}My@)Xpz8fh<sG~DuH2ruSMT|P3vW}avjF(#L zObE~b$#wM_K+)1~GTpHqiP`8L@(OIFNVrz(k-pY!G$wPTa{S|!KUquE^V$|xk*p^& z0?xP0GuoEk?^0mPL4iz)1q`MwY0oF|njy<qnCfjFL?|h2rudPrc0SP8&hB!Nw9Y>9 zC+(wti4j8^??FN@S~R}eAoCa`X^60fzR$zpiV~C#E0qIXU*FaL^-i%KE^3D#&qp5z zYEUsSpU3EeDRn--(GZ{wC}!GFe9tyS#i9Y=_Xol@JQcO!p0yUgo9FUr$DfH^jWu>B zV$g|mdeQ=FLi>wzkUn9(5^Ka?HdBc9+Q2A~D$p9k8f97eG&>0*c6Y?j2~G+J?VnQg zM>({BV@$``A5IJvoH#II$ZD-0+o*Wdubzn|eu0Q#Y8O+>JET_zIdE@AIxbDspFzR* znr&E_Ns1vCx|PZkY#J9go7P&l+`3Bkv?`i$8V}o+N0l(&risTQvVyF}7vlF|)$r_v z1X^v$YOqWC7Rvip1@va1GIjoZV1d!MnVqaR??45?gW1{3lVZZr--!qB(HZIN2iXUs zKhpj(VzqYnFWl}4?deE_H?(}3j<_SZTIkT08xZoS=N987{k${;jXQsCW;QS{4OOPk zPhXfW&CW>1d$iLZ!fFr>RS^Z}88(?_pctB)uv!oHH@K&CPm80WKfo4aIj98My3M1Q zYMX(^phsz;Ovw_BW`_xm_*M=L{cCtxzXJdQ^)fF07IdsMU7=C;+{?T`*_zZVd^FPY z2-#srH^Sr1Pz0!N!~4^KmZF{c+UluJZ=q4eTYLL^yZ)7)E=Q9@=S8sEMkt4ib%(1f zG!_DX<NABq=ppzdL>f2zGi>s^lfNp;S1QkUnktrv^=Jx8X^NihX(MsyG=6T#x)fSR z<0qhXj~+Vv{c8&a{83|otmRhc#mN6nX$$&6v_#Wz1Aa*9J?MTp6IRtvuJY6b=2z<C ze461PaL{9kbtIv?T+aYRlSBs&*CnTA4U<D$B7tf>7U(#$P<RTpd6D0Y^e3K;j+_Zq z7Y!yI)87s7UUQd$RX~XFD{Qk6GU(*%q>ZrD`)e^5leFUd{(@Evq5dU^pEc8#H=?$X zsP^M_Z`r6t#B1^hSws^^Q2m4i3Sz44x9qieYY3wX`y1sA*xeE^1>2M{!Mb2GhcbHT zGK4*m-9z!NAjHNk(CJz*GCF*}-pvW$(t)=I;z0(YW0N*PdL~nJ-Ojmwq6s6B{y5qJ zVYJ?KsaBGM`?7>YN{r7h_bns+F_gH@-U~U7kBF6}wYd-9DU?S2CKZg3=X1D$+{cxJ zo*EPaLx~@ct*&};SRj{a*lyFXedyM17_Vs-zlo7ZQ0|7g-1cbfF1HiPhD2T#Z8X+S zoPm^vr<CLEc7mo~ybXO|XKW4TaVfhS*VLk|cL$}CrW8h+$eV7BeN&@rl%I)KWd9it zl$P~kYbg?ai8@qR#N0|gPgUggQE*QT1-g&M-?P3eev8v=-M7Zz#7@HGQg{5My9^lv z_wk9tdINHNKX;rS3R(wG+~K_NQ>j>MY=apQHKAi`?YwAsUs`j88WDq7sfiSRn)Cos z1HvR`W@lfzbRG<Z&KLa_o)=THXv(nmQC;-yCHID(6omCtW^r!RY*}{;Y_HKOV0*J^ z8jf2TVD|{*ry)B-M!)0T`Vq;eTv`!Y(aO_@R(1=V1Zagt#R(V0vilJ0z*TW((_9{5 zmeIzjAhT-$Qr(G=O8+Q6MNjOH;i|s?;O9aazwYQCM@Fa`{B1tWyNk8uN?-uiKf#xJ zg>?Px$oqINYK_EOTlxk-z7chvxW%8)lwU^zU4?teimiUdgD6S-x@Q5az6h+6K@co~ zdja?ZeHcGW98bsKcrv*5GRje)vz5J&1SWyC(G?ZAkv@z31iW~kMya$K1SWp0omj}w zMFrzoqLB~ovb=+9%V2C4<$lcAheAwU-Nh780G>eeJveswr7vDJj;}mWVW@SuGcj;W zkJD2v<}w5sNXUzrFE~GeQ37~*A&71XJ*cv{_20qRh&8_>C+QzVUYF~-lWg}OE*F>} z?lvR@afe_g4ESG&wDJLv+QdS$)&N)eyZqh;_^SUN9{gYzqK<Dgzwe5vWLRHj)&Cfv znA7)|=H!bUt-qhC?;!YD0wS;oe<FVCpTcc`uT*TryaPjy{zokK4+wsmV53(53?6(t zTfGknnAqbqo^K(#1~7yBp?Ka(#evFX&^zC?Up<V0RFRsU`w4(=i_Hr=d^3aPYPqA0 z=Sd%Fnbjv&kCRf0=X8{800tbZoxt)YsXsv74@-(meH4Dx1eO&`7!rTxDlNYsS=|FR z0-a^UGB-&V$YiVEif+z0UWX8Lvsh9H+QS+JD1N$1Z_KqOGW9jF_AK6k?TztPl<W9+ z%DGv+U4s=4HZZZBU85ar!dPmq9i!|Qz7Ka<p<1|h4YHAY?HWISv#G|Sn(&dkVnwPq z!MG8D1GXdIympOtomcVN>v)Z}HaJ#pG*IN4sXBNx5mhx^cVUkXo(Au9bqJQrYu65< zzA+<R6j>zbZFk>ZL_;Br5EYw^M=@YkZ|)|#&`UuXDkOz45Dpq#U>wn1Q#1P$wMywG z+*Yd7%xImErP=sx<~rF6&<2eMN!io3^qx;ah{6v}OBj-%g$AY?>iME42$u>~=9loY ztnVHx(pKd930fz9f=itE9)k|Q&W2=Wt;0b1hIqDUQ%Ga}s5VH3K8GqoR7=VN@l$4T z=&$f=)}n9S76uTugpJTdg3q%JBsH;IK9PvWiCET_I5=XQey!HlKEyJun&SZRuZJTv zP#5THkEHGbO(c5b63ior&F~WQV2t^gHupdo{Q@P@H-R(@DFqH7vQ_-nM;O2W`>5qH zuHz$pZ<~9*-D-oYpd<nt*5Y1fA?xK92JTsK*q;JNN<t#DJsNEWg%?@g5Ni7xWWf~V zxv#B$woNJUAP_jQFpNL|co|^L&5)0|UqWpoaL3ziSZ?nnfcRem;$K6HHZ7)_-!OIH zJEM4alydajmU~Lx$&vk=cN&LLezOE7oQmE!g*Udm+Z!mqRm$T_YCwVvuA%)1)j$t0 zhDdL3(|$=UDBs$98paphtW!{L6tG6t;lzYy;O`tJNB+X~Elh?&fiRgoRVy-c!(xKP z0)Y@(?{dgtejcU!<p^?^U*sZUy$}Tt^eq^)sI!K<gg{}D)GJH(t*4C#d*7q`-A9iV z2uWEQO~e^6My+sAq$7DyY)z~$RSn982L0~x!iI}GjN(O(<>zXMt)y>b&hZlzXZ076 zt*K(@pCk}Q#=s*#UvsA$q`T^DQ~PN;wV~Je>8n$hONd_6gDg&4w!eusjx*;@Pt8t; zVL&6$%%uH@O8~8cDJl(u-CzYHVT{{MSa?TN7`7!eiEdWdJm4)I4$Fo`JM{+rg*E7< z(m4dwg`)Bgvsq%kHu7@EQtanLFDSho#tgsFtWwzi3TO2s60vv=suvyG+u|wkV5Tzh z1c-zYpK~zNC%~OYz^B2J@!KNT95^%n#apB6*F+BmAzMC;pZgmC-4q0Ai@F&oM|?4( z58$3QDZv982R+)VPO=n@H`L`Mmpa=Ib?1TtW%L`gzky05R-bI!!1@Vby(QsFlqwOP zLrwVBO_LTw3pBZ%G0-c?2U`cr#v2*b{tKPjJx~ZQ2TJq{ZF^yW6bz+;7Lmobwm!EJ zQkG=RoA?dlLNRZaD5nkaycf>R%y5PM0B-eH31n4LsM0SGi177GOhpSfU;$>f@A46a zE8o`e<Jee<{isW0=pS&BX&%5Nb6W9Z$XN(!08L1K-ri*;Aa2Q&TI;41dRxRnDPfT@ z*!a15d;r5CYQhZ+e;j0b&0gK31~CQOD7GU2D6MyZ{6oT$q27U^w)89rdkhNnEaTOT zp<)}<YY*g@_Bqrr)Kf#btA;XaKtSNmn987rPf<0WhyTE%%8s|c-N=53a)a!bT2)@E zotlq(X>j%ou321j^YM8ulCzNS(rX#WgK69yUCW||fp%66K;_7_;e=kyHoxA^v=L<n zruHjX0+!0Rvu(U@TsgOX1uDjuDHEDD6o*@jr*ArQi!@nLz>5SJkUT2Z^%}gc6O`3R zd*S&+zL>a#z=JTr=USVO1er#&Py#Ab@VR2bjzw+@q83!gbk}+?2pC@<O)fz}@v%Zz z46LT;y<WXxG}L4dE1~=%qS7HGR`<0j@a|rtkc3I3@gDpXMoaM16fGYT<0YbRN&h0= z5G*)53l2klQs^(zq7;xWL0;*&3Pp0-3Mnois~t+|J`C;?#eC6e*m|Om=70dtEp|B3 zhP9MhJFe;`g4sj}mmLm<*&sk7-Wf@x{{<V%Ap+XoV_I-h)SzMBMvOuK8gEJ0^gko` zO@e<;K<q0H7$aE9Of~$YCZ^xd1e^kfGZFK?#5evW!7Kn`Z4A?g>Tgu3NQ(*wOvWlH zolbLXCh=O#&e){M)S2isBK4*z1a4JO_<V{6kraN^w(@|x*4qQ5!U)kxd4}*4+Wm(} zgov(At;K7g$E#x^U+oK&B%p{p0cna<9X<w_+##P)bviCuI8YWVMLhtSC#FBIUIc1> zPdgPLA(bq?--zD70;|FS1bW8wCwpqTg3UDJkSC>fN|V7Cu0VP_8+>CzzVUT+aV@<% zDX4v@)5f=B?r(=*LG54euKjI;%(UTMYJE8f*9nX_qEd;*)ltdL(#tNUX%`_3*bZ}D zHY<R0d(fF+P(Z+)kb#wk0{YH1wKFb$t2sn+fCAhNLL{i(QEH({7An)tyUP&w#+PcV zs6~n%tW7u*g(#M*yKofPj$JjZhkv4|-(PROcm=a)R{ANXX!F;v5)=sD0O%$X6=o6* z^ff-|iI>-N%s)Wz8o|Q^uM_MgC=*aH^#?kEW3E2PYzLq>ieBiBzRCRFFn7Jcy#82s zy~y140q^>T)Nm;X50gN7J<q(pKzrR}W_Pr`t|CW|6I|!Bb+P*EsG<niRIUC3D~?!C zKvQVM@vW79E=>XZ8c`TO3fRRy!sfx&4kbSdYVF9_9JC{P39sqL2<il51PuZb>@UQP z#pYj|bTs?OKgBYff25-ofHc>D{x>E+nt$Y9WB$K2`O(xPKbm}`qv=OFS^!9Yjqh^m zk>=#<-vcNPYSI+_p9ual!G9t62El(N_#=WpCioMA|3>iN3I3Gee*mC5t{MIBOqy#& z|9g|>3eo?;q`4~ee>7>X2K{xD<|5GChlYBh=|}oH^Zx*#n9=`}>H7r#i{Q@){x`v& z6Z{_n7)V(|G!aNgQ-O3e8L%N(D5_yqh-n+37&pv?G9f<oCN5=T*$wzac_0X=fp_(= zpP-Razr;^|7mId1ob0|i(znF?lvzVhV1>Dt@MbKPvC-%a|0V1MSO?UB_)xsJ1Qi0R z21D`P!87J;u}0(TtO(|N5g)Pf$pn6<@pF#@fJ#H2mz^F5S9d9jUZYX0_$cTx0x)ik zijbE|#^@6LAf(OXCg=h?Jl4@Qg9=>n1_6i<tzJrk(eHgOqZGQS@<EuCM7kNCOWoOw zq%hl&s#0Ops+4MQICCfj^Nw&@*eM_CL*D*(A|is>?+nQZZoF8>#4e#Y?-IK7%P1>0 z+R)U~+e|SS-DS)0L(A4V(`XQkTEQ~>5ue@N0IOiy!H$v~Ee2Px1a9SE&4g+t(K%8- z)-BhnS&F^i=T=3U_bQb(8^KwRVLh$$u!g0grf@*GPWTgpRmXfwS(AoV85X<O55^CO zc*<skmX1$h!R+j|beO3Q?C3<Gp26eviY5KyY%<4V12QZkqq`9qMqOw6stl`_ntvJ( zKNi-E8R<8<nVSD!2O^2D$Uy8sLIz@l6KIBFKHg>a`6dVB&9KQBjDvm4nsG{hsj;9X z^Iljn#-iUJB^CD!1t(bO201N5trw_!i-~r@p0_2i8mN*xzTZV89sWB3uXGkMON>^p zRLo9M;d`f0K{zq%7cHWpv1mWZwwXl>lkNH-L{qAmD3wb3uGDw7Xqo>IIVXv|8*Wbh z6bc(+{~b(yn&7Vxe3sy^5`2b0>;XT_)aMEQ2EmUI{7r(75qzA0?mhi81fL*yi{Q5i zzLVg039!LGrqcvmo;t%6*P@t{HAArtb?Y4qy^10*hQ{0zNMy1JaEjb;2C9YpOJ@?9 zR3?evK#tc$CX?Bo%j9<Ec4x-&59Y>lPiF>DGQrYPS8HJTE@Ry%7Tji|H5jVHa*MsA z)3Z}&re>$+@UiG`2&t3!xt~Qly5q$iZbgH=rks+L4Vb<cFK3)=IVU+VFd!y8iFojo zGq??L;PbKhm^!C2@7Rb0&msyuSKj2LkQ;Y0>IJ}@dJ%9you7}Zfp-#!3%`Jv@RA%m zfS7P+tGb9fx2a)g`+U5-1J|9n?ovB=uXYkTJNQrSiqg9r90MTFFR2f!J?{*bA9!`g ztGj{-^xf*R#GqS<5;rmEdz^<P1|1ZxTtJ#p=uAKCJdA?|a7ci;Q!_X+;4ws-KY}u% z1EI`5q$kwlQewZeALS2+cM_W(!!ZaZHvQ2cHvM1_n_gsWI^)t2ll}k>A4uVVglE-B zM5jNdX5}~m3&$i(tFy=%SI?>Eah*`ZU<5DeotT~0uZp%Y+im0MiBm7k-h^$V)_cqV z^dVP{1337?%*9esstDIa;SQ{*P9faPBSsQhiNlOBc#g1Byt+)^Rxe4CdP1`=>Z!qb zbQ8N25D6vf7uepo(fXs0aic`lGb&SS@Qv5hV+UWG04yHb*LwJkSF!&C8$n(_7$hna z<F6kIGmFpeYh@?C<;d9N;iDg1GrPy~T;w>Ipl}e@1Z<F!2!4nc5$zEvyLF3(*>IN! zym+#?rV#AmDRgb&DVR+<!Nu&xDWDs&tEUid|LM{QyVNZB(98~HZiZ>yk<GboL9aAI z0S1G@9dlu9ctK7F=-evjcIPJCAS0HnPImW(8noY>2vKnww`(x5h=3Ht3igcvLetII z_{oY0v>(M<GSoB*$4?_`6h9&Shd~73orQgE<8XWl!AF=q!|^2$AO2hkuy5U^G$X!S zdh%c<KnWNL4k4~Lg}C0^L0oT|1_T66!Szz1`z6DW2NUJn`1^_>KbHPH%)r>qb1(jx zp*2_&7jlSJO;RrUaO^Tdst~FW*I$H%Qt}ZR6oWzfS5VggetDIAhjrTx<qfuz9`=E{ zzXNB~u)?m-wdCDB-pB&>Y%+8mJz$Gz2A8lSwDvGsJGz*IBkEAtUT?FMPN?)oZ5CNA zQ_?Ns=r_HIAg;d+<&Cog8W2RhmvQfBZ#dYwUiENJh1sr;2cHZJ7PshcVY*E)NQN>* zzzK!J1n5@71Uqn#m`wrOS&Zz(&xFq;)J52uKN7Nn&>!MwpPMdCU!I!1cv=4vU(NE> z6vE9Aa)!_duoK1rR~0tdU*R@D3Aol=JH@mSP`{P0NpqvlY4SGTn(yL$BBhZ*f0^8$ z`bpQu1enAbf=#z6)E_ua6XO4%5j{gy$)>@aB}T20G|lI&O&5Zgk!aIG7Y2~e88w+Y zcb|&V+Gs<5t8W*+=+V8_ll69<;-H`JMt6Ux7sIiGuM5S?gFV#17bYEHx}P%i1J+A9 zc?82v8s_3u7&so%IM#({!T1>%x0gV1UD5W-Ik&l@=Nu9sSxJ#HNR26lpWt>GlOYjS z5ba=bj|XYEkQuYlMz|i<Jp%VA&j$uPh<^GF;43lgQh;gCt5}2a8L_n#FcBpLe=OYn zY*1n$Dv<^r=i!m~6v`#&Zo;l>?B8yD)`OC<mTALdV4ffd$$~#1ixwbO9YKExmT70P z<2)O@aT&R3<o>SY!b8B)`geF2)jA>1;INjOV($H*?l6aSca?9a+L^@+zIdgbMw^b2 z?k%Qqf7FZ&V-k?RmwiO;3%v4csNeKldc?an-N%C^Sl=)$I2wm~pDz{zY#!x}-bY-0 zgy3O<y#!yw#Q3>rccj}IHv2Ir!pUt71sT{?hC?&l=ss8m#pJuziy;1#iFbs5lv_h+ z`Q`>loMmIEhsdrZA&5nK6D<)1lOd+;0k?)Tq{ENb7yaZ?72CzR9oa=3t?`3pTx=IZ z6nWjZR6llei^!i7yU(IphGP(;>B~gK5sVq5Vi_N?Q-a;h<py3l$ryb^k0*ajkq#L9 zdTVDFp7-`<PBaL7h_r}lS?kXuf%$|21LOD^Ub|Mcy<9+!g`N9pJPZ6`oJIGHhcmmt z{bUzu6uAzSM;zr6qJwZ7bCye&V}q_I@w9_|<J=|hF4Uq;Gq03pr(UjHnL2+CLifeX zGlo`UG~vM3JJ7(8a#Be)ZW^KHX+$h?8!p#|Y&(M!+qahbh8e!>kgzkcf*@cFIjtMq zE<yszA*Cz1wWBk5y{|-$;|$)4=mc0F_&Z0;#9eax0*y$d6G56ZL!!7ax?f>Dmr#tP zV6zQ;GCcVOFM$&j$mQW@JRWPz1BVAO<_nSsPLI6Hc*;<bOpW_`NiT@|-+>ZomBsVP z0PlaSokpo#Pzq1w?Jbf!(3g7?Ew}NV-$rZGFmSOSHZ}uZLS1<Y0?Bw8xWN(X2)ss0 zBngCr;Eti&1E5Vo5DeRnTm~eIyBsabby_dnf2gGQ6P>v`>s|3tKZ>XC8^MKny%(0} z^^^SSK?0(kptirc)byeQ#~gDkkw^=E4iO~5_7!ZGVH6bU0!YFyaS3u2=wBfCNr1pe zY79?Tn9GHsA0yzdDg8O-QDE#_nfgP>dxEQxTCE`fX15`coh+TMvApctr_&6`4i_3z zBOm}Q3DgJk#}hcsI%~Jn+>MPE#<GWb5|ahiD;-Pm(k%1>?z89!2Jd2+7$K+a-fdlG zA3(?;qI40U{!&q6P+BZ%r*Re9ho<1nEJ9jf*Q^G232-kEobg!fSn9av4{=;@$1@&@ z5gMo9>rFC331T#NI3-H0-qVT1`px}}qW&OKp(74H#p&p1K`)>wfz?${;E`{+{gXvY z`Wx&h4FNI4q~yi)+$UXydPyW%a9G%3>1+WBb`zZyn#(Prz!RorgMi?Py<s;X;zq3x zO`WpX`Ya`EW{u4xnKI3cC_kkfQh#X+xvI1Uas<MfzsevLSbO8kJ7}mw6e%R1)q2~4 z8C<O;LG8%}PO5ltwZYq;3UW(|cSCZf4Y)p}gA}=hUX>h%kfqycy^2T(Xf>#p&klf} zaN7doTQPx*Z(S{^0XklB9t|WOOf)1H)}=oOT9azaX*p<FTBIF3H;Y5+;ihF$P@KH; zmN{AIb1>A?<)5#9C+1T$@dEx%(ZjhUfv0qYf<;2T<xwJL>+x6+`dXEsHW&_!lo`E_ zR}cbObLSDLiW3A8>uF9tsn!c!N~YN+z8a|U{Oqyis;(|E2*ShW+9{~muAH0V;us7M z#}B&WcMyO9w`xygqR+C5&L24EO`03RvZx6$r#uV`CJ3~ut0f)ZYtRByth)(O2O!Zb zV<SB`)n9iIFeV`zP{_LjR>N8vw^7BrbRH%Q1j_Q{oPtA!D<?U28saCV4gNq^GiSv& z<tIfS@NK98euC0}D{%~)ky``%-AM4q+Ak16ZM+VQJwZHvmf$2nF>8<{kF_nujOCH* zUK9o%8S^5aQJ(WhF#BP>#x`IiJU=P(WGa|q-6RP@!TmIjsj08PYfhQXh=P{WPbyBM z_%d<uFbc)8*h>y7O)u3*9KqxG4I!$DQU`wweBd^{oXtQscqKX_Tz~r_3X1w+4G0jK z1V9j3sOCL5MTovw`Vt^aqJh2Ha%813aY*Oig|z4B*2O7nII`{sx`_y4TQ)}wrc<V; zK`3u1%bu`7c@HsDjUj~52IQMNXhW|}(o7XMzUl$IVdiA`%=D${(it4p_e$l(=~rgn zrJc|eJ4pM(-7QVQ@z-f-SE(L~OsaeuKk+Zg;F-3DdK#!$C(1g})lx1Tv2MQ?4SoTI zezdnykpxM50o@|<bsF0l0n30Tw8BE%*ftOG`=8)RYWC`3j@v>);`#RmnkHmO(BT81 zb)?4!5c?%tSPTVi+j^dX&D<h(&jJNad1;>Fg~+wN_>QS*8)`yy8S2h}9z&{=O)1NP zKP^!b&A7Gef{6<13KgS&C5+kvrio&-nd3nlia&H=swDEenK)z6Cto!iHHMj@5QaBJ zjp`Ubd_EG{{wQnv5^sNw;O7bY_#004jeU`0OT~aYkEtFp_=@Tgy~G({6j~pdJ0eLw zu=qr47L|1Lpi{V!bs(qLnGiCJ6N5f27rQF-2@g6gxL+tEbH|lL_Tid}V)E_MZ0nKm z+sDGwQaNa2g)q8`chG2rn~P86Jie{}DFHhtcpxfJD3Hkb{3|~18;emC|5=U&>0JyX zF@oMxChRizgx!z2&85$-pT^HU2q4`S>C1E*A&XrIOMhK}v=k8otQ9v-2WxZZfU++e zgbm!VLNfc>%eQ`!?WF+C_ELmu4Ts}35qRiPO8!W;BW3G1aU(4iDu<Y?Q7;aqDIhG$ zdIyum=f)QU(PdI?hA?r6@wp;IOhP!wKxI0wvJiJ*j)h_dfq{N}i3OWvxFl645i2N~ z4BX%ekS(Ah?x+&M*S`(%VUrRc#@MYi>c9yq5K%sjx)A!QKdm;IRL#19k&~J~&6oiw zSUA-0cnlG0P~jljP-5NA%}z9FY92o_+a-|BF_YFf6Uw5P`WnGr06(zS-DJjYys2wU zJ;+p@DGGrQcRTX!2GxBb2vgzvNJllGMI}~r5df-9By?goy6Zw`2X`<wO+kGetQ|P@ zgdE6+13L*<K-sP@DM4mG-dObGi+9BD=f|6iy26%L3Hp}Fb9nLBxlDw8B9sG+5{eIZ zV)370rc{Ke`osk3N33mfk7Ecr)W3)6J;)D{GnweH0#gqIyw@;sz$3ijnvKjRpT|vj z=%uVm8ub||xQnaO!=7dk4y;BH@k6*m)D<GW8*7F!g;;%9Ggy(_-bGT5SVXQru3#Ga z(%T^vLrms933XQPp`tJ3^d~)<?_t=(&JO!Hj(;S9M>-+tw4_mAn-V~(6PLi|6Paf4 zbH5KjEQ{7EwmAY#-lS4x&>slH6s2|`2!qkrlB+m}5~a#$QUVdjrM4}Q_6~d;yk}A+ zAmiKm4V=^o_cziBNdIZ=;Y?1Th^TF8ARS9lv4ac`t0MBbE12&iUOCSJK%?O$IF1#d zdA@{M&KHns4T{)Uc;=bH-u>?0)&M<PBJS>YC8!sUowv{}VN1S^7#9=bmVq%CdsT3( zkUql-&k{)el<dk$Et@g^7T*++u6Hf^IJ2z@i?RzJl2r1?T$jW_k}ngMP7M&YJF&u> z&~<KO+HJMQBEnYjnt^|*6RXizalb|Vo3X+p4p`(7!O=_X*eV)^^Sh>>n}YmwVd~N) zhV!3e=Y&i=#4<uA_An)abjpRL90zfkP%nLj4-D!yfVv;%?F>LUu8-h1*@vt+`#b8} zA8~9Lu!A#Xw~k_bQo@+Ii-T;MM-ReK(UBuNZ=Rivylh;j)UZ$E=l&c3kRW~|4jBn3 zfh`rb-W48s1vG%HL?4>IhP17Z60Rj1L>b6B;v<7K9ug7=F@0%RX<xy83Md!cH{Osp zmjTmwBh?`K(b^u@Z+qE=99Ah%3un~gFu1qCzZw(XzydAr+zxDiX4hIeD3$Im)$zfJ zw3{u-mWx(#dKD+S*Y84Kle5gY<64$*uv1kwAUTf0Y*?~obyoak*m{@8!GJ4>L9e=V zwVI!*QD4Q;TAVs#H~)tisn8iVXdGZWICT^e3=QYu5?v7*B(i4pY(olRd@D=KosHh% zYUuc?xTQkcRL&YTqJq^SMy;KE(u+3oo$a8O?g6wb28oP>o2N`>;JSh?6o)1RqHavv z+~|YAmZ1n;%m(l{U&SA(7FL#75uZi^GlUNk!h$9Aqv7F>@)_i2+AZK8wIT7wL9=$P zVH<cm0a<wrW+b_S3fY%px5hwkZ1LFK#6c8R%@WFoxu%T*GhM(D&e#P)`vg+>&MB-Y z?AoAD6!}5mU#etKOQ@C572&`b6Pm3BGbP+b5S3OZ&K~)wp;j*=C)`4l;y@BlalC2$ zP8F_^B&p8bazeuZ*+0ar^$3S}7d}O5G(@!$w1|iC(11vfz?N=x@?GQpIJ%KeatJpZ z+vSYn(I*(=<x#~kr2&q99m>7H$@zqYIl<_bJ&64vwDuKSIi!LOVy)pQ`bo@hCm=g^ z1d=TKN<*ZGKcS@CdEU34awvX^oh5mo-JUvgmy`?3tb|GdZ@5r5zStdM#>m&5h^g+T z&9PMyG)(ym;?OSCNI~rZxk9UsmvAaVse~OQk8c!L<s+WhPt%-&4d~?^{VrtC<=NBE zPha+}bLD(#>cVuGp-K13!{PtOAt+WJo_Xm4PM;+`m-n;?Uc?G5($|Y<mOf8#j^GFY zW6j)p(_^gJr&v%pqgda6ncv9r#6+{xFF|cS$Y9c#=fy@YCUe@T<!n>&*XU#X1f@J2 z(&y0oqE9o2M-FMKy+(x*sv|mrkeRD|(4jwq51i4iB`xzUKJT5V{B7XAOJ0^q!cYQV z7$G)-*>OsNHqP`+ngjasb^-yxxiONJ3_NArNy2~O)uix7Jo8vCmw7aw$PWyqbBFS& ze0nII8Omfc>C7JUj;TAdKesEh343J7$U56^WY>T$Fz;akiU9f%f_()02}tXTn>Kv$ zQ9dsayyx5EM%P7_BO00r`Z1({JG~j5lErO**)NXs6B7h%d8bDGIBzL@>mvl*#-pDg zI0^vP(3dO4`N-^4kQ(`R@qz!pEz=)h8=fTiAi+}v9|FMW$s?xwo&&9qF;@oJk~D~s z^jNyZu7aAd_qb4hC=QvmaFDObr0`ucRnaS^1{o6>N11<Vl(c~@Lv=DpI6R(r3A2!7 zP717$3x&~})ABzO;s0Z0eg((t(l1TUD7+dB0%s%F&8arz<NBZQQI#nQ&6-qQlT?Vq z8uErjq8JBOmd~aMax9R*p}%!wiOVzd6u}??$r593yz_Ftwjp`v`DB=28v#u~;;Tg@ z70=Q^E6JDSq-=eiP5JA*{UL&92u=`OBzTtK62TO~WrC9gA0~K<;JXPv0Z`6NzdU<+ z3jdEAb0o-BKKNdOUnBSpg5M<gK7yYj_<n+~5{UQjx0vz>?hug3ls82rnx_$yB$u~e zeSUiSd}aNE9iea?#E4>pw0T9s4>zJ{e&)D|Q8~d8cfSq*-yR4SJ$NKrBeHdwyBl)$ zNW%Qfk;uVD3^FPINai}J&K>j2U2k5PpGa`ibf~JJK70dY@A(eNd%r0L81Y}!9(<qw SQm8pMIP%dL|K+5N{eJ<k{fh4Z literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/__pycache__/resources.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/__pycache__/resources.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2e24370a412166b2c53efbd5184e1e8db6534dde GIT binary patch literal 10859 zcmbVSU2GiJb)NqnE|(NV$&x6^@+$tz+7hM4sgnw-VoS0T8xG^xsx5DAte1O-<SduF zt2;wUTr3OQbYdq+oi;#$0xjA;7${m40a~EwOW*t4hrY~H0YCY<=!<}&{l0T|W|!pJ zaY||K-h1c%oO}Myx%1rIT=|_}FTXqgjAeapP5d22{RKS9C$?oNOW7T3%dXot>rTh1 zJM!z+UHSFup8WcCUw(snAit%0Nq)n6D8DoH8Tl>O%gR+=XLhSnuV77A`JK6~`TG3U zk@}IXh5EwQ(fU!_ioEt>bZpPAA6HKEk?&h7P^FJ7Rf>-8x%CrhhiV4xndl_ir_e5| zS+r-PQ)n-tT~Tvr&q@0<+VkoN+DByk8MGJFQM8XnXE6S3^r&+7?C4BXZl8<J#!mgQ zom)E<#q(C{=ijor=R7O=#%B3XZ2g37@t?eVyng;|tLxmcF!QnKeEW&3dF{!o)*o`- zY0itDT61LX9W&R=QH$!>M^^pm*s6b19aoQ_UW;bh&qU9v6MHsJenFj7r_g&*Id53C zr7uXLnw>3dcjH!1MU76JM!MNaR=xn8<ju`ENjvfCOAlI6KaG3cnwK4EHCr2zYV>ul zAL(=_n_rL8hIBSon@N-%?KjhnM%o+osaR+J4bEwCzx>Y|Rgz^?BCBpI3w#iMY^~YK zQSL`G;090mfYvjVs{0>Xo>dP3`AjzVdX)6Gbt{sES6a?!HU4sC7f*5-#SrUmhWc!3 zwe7Z(x_egYDd1wy*|k$Y4Tjd9(=H9sLkeJRXJs(2M~h#SQ`N%E=_Q%RV`W~u7k71l zl`}U<ak69^SkN=<2pf&K8>fv%&B?qZ>a1lR5dsX)G#af=Gf5hazq1}*y_9bCFZJX8 z#ntV&qb^>)yRq84{4K>Uc^dbkuIlMa${_zz4o<S%-_b{~)1!D2!eH5<bKD-B*oTef z9E=vRz(4+yqBrm)M31t0(!uBD>gey~q?&F-RXJ}pNt>Ohy4KUuw;ltWY7WEq%Eg>3 z{ibei6>qLoZ)1fka?UI7<q*ABU5(=Ix>;E*ADm2_nu)Acduy^~zF9Tyj=`FktD|&V zcQH?IN7dNOF`&nZfqp#rwmyaf*Id1TpDfIm*0X5JD^nbow{g;t!#|EzB0M#75V`q~ zg5^StCHV!pe}l@<ZiCs#Qtvps&aOLjlnoX<H*|Ns?jNO2+iiP8tL@_nhENhicMor* zzclpr>|I~#;n3f+lRK!-ux4A*Tjq$Qt(@JUTfqvmL(WHQ80f!DD??AA^~=TG(y-K? z10?gD`4$NNW9xP6jy3c^cyI7oL5J^0X|-9<5C~6uW0YU`3Sz%Fh178u*z2~UG4`(% zqyle{#NFmr^fk%6ayxVGuhx!a!CKr^k)BjEaTn}a2C@wuE3DDVWOIETt;G+heyDg# zD7a<j#|hivR&z5#CCP&50mLiOCpgQ4D(hzceGLVe`Kvo=l+;4u82t#}2WC~-EDOLx z+nrRO;TvE0C9~HK@{$X!NY$2{MPZc|?9dLJQ+5Ua%6I~&VtaT_*n^|FtlXfIT*kbb zy;3Vtoe=a!BP%x=TRpYiVZG95+}&<=%p1`Las>Spp_v=$nO4;4G#X=&YPMd)drdAE zT}7ZogM{{c5Y9?p3w^~Ong0bm38xh58LAly*;OvND68avUx$|4r))S|<bgs54z(KA z&_M}hjF~u{qfg;Y=J6OK*_0lA0o`M`4Zu`+FXIu_W!Zr}cw}<tLf@^_JpDB1f0IRx z1*c9dM^#|fd=|AI;1MYgZO!&R1i0vUfdg2K5rD%xut=~?K!hI!%2&Zh7Hn$?^^yvu z9-=;@%2J<Evp8}k3v-YM|0crsVpTLHL=U``MBS8Hve|_MUhFqpo6Ys8kje|yWV^Ld zZ6?)bRW;LQbuI2h%TTw_c5x!Bb$e;G+tXXkPG<*8Pz=+!nMSI*x>MawB3-3{zffJ> zPOBPXhz`7H%G`r0`<6)Cd)50JF?QW*b^(hq4**n*u95FsE!q_R@wXs3Wf6*rDiC-f zxd*@6r*3Fy@|Db?U`V6p*78`}jE;sQQ9I?HMish=@>`A5YH#&k+}kEt&6I7UXNaM0 zbRRZ=3l_UZ5Ugq%Z%rtsoCC{rUd(U^3E6dmUBoENG-(vL-kW%9tU_t9n3Hq4cs(5* z<nt7+1uVdPYVTQ1wAzpbgPN6^oB3k8L<B{OzYGpiy+Iw?ARJ=;T__cM0+wRPbXX3P zrjW!L;=w4ssc6vWvFTcY0B0~?AV6mQ)*FU`_;>*KXe!#h1n=4t8x}6#GT*G!$_HdU zD>WLb*P@Dqjc)b2X*2G^HM@j0w9n#qSnwSB+bl#Gj0@3?7x7{RPeN3Mz6Tv0&QwYj zPxDO+Px0rX_5vPJ@RJH6^2C9qQt%b+t)Gomd=A#_-x^_aL|862$(LYlrWl|J8imqw z24`|w-N?6JF2=3Yf&+-u&tsCo*zd76M$uS(eg`jlctj<Kz>;Rqbo~4ZZ}#J-?Y9Gl zNBW$4tX}GRs*2D~!ZCz)5{4nPlkf|norGQWSrcy6D<;gU&y9ke`B9*AM4eD4p^_KW zDYb;(qw2IegI|Pv(ed^pZ3IB|lj^K`6n&@EIZ)+%R<N+qc!O_?!pLz2ElaOM{9wve zHQ7nhXzcGMMhhY$Xx?i+^x&Jfr0hKmmPNG}9wMng2E2hs!X0A~Q}~Dq7IDvoWkhJw z_S(MmA^h2M;TKvB1ipaOTcHQg=`{fk*c*O<$ay2P;3WjcGssF{k7kO9BrpRfydyd) z;vGThiH5t*jxkw<^JytRAb=*W2<&-#a5Be*K~Q06_nnNVlao<oOqfOAmx>?SZ43r| z?`DVkD+gnm3tnk7ReL*0MbZ6~@CXmvV;;_7nHX2VLo8D+1s<L<h4%rii*qY`*8!)& zBZpV)(C>z4?zZ8}z*u>E4*Y9yB|<^>Q)`$0c}P!Nu>W7QZ<ik0mozJgKFe{EySk!J z;05*(J7)oU5fTfo#|PI$jK0OGzTiKb%cV~oJOq+aKl2ey!5w{^WA~E=#HZC0jQk9* zlX(=DTZRwm!IzweH#t~3NU35*fg9rS>(WY}!{DzXlMfc`sz1Z1oIb}7LcjsjH>cmO zBurXk9s+D)i)Wp0NSFHn4)hZG{(NG)M-OaA<tTO(A^2La*f-Aw2t(Y&e0nBiPp|<! z6tF>ZT3Nep_bIf6E%fCSEP*iy-MZxztYGSJVBLm4r0WZa1N|dH`5Fp%-7q)^Dxy}} z(>tOG#ax&}c}C`5<#6HnX(aZDt-rvKgaT@TtRyc21w63u#}1tK5N=&ek~1111dBtp z>=C=pO6KTQp!P8g`Hg61#PYXza;hHWD>2&Q3>7Hm)<yhVMT0VDw*O@rXm;Ap9<-Q= zKSwDR{RYNCITSEu9+ZR1BLQK6Co$w87kmqSe~)Jr2|z`iI)E7hXdDvJ8yLHf?<qRD zj%rWUQq-e#FusZzpTjD@CK$5EVLd5W!WspRI4)<!<QX(RwvpyyG!^~~@JP~&Aw`%{ zH`#4y|C{h1MF03Jhg=2fhlGLa5P|)s+dEFK{sjEIXID%PE1PXJV2~J4N;)b;Mk%=; zBZ0M;Y{vaQ@^{gLH0mbE>Cu-UviG?Z;`){lPW0|a>YunD;YYs79$cJ)ay^O+lI5$N zUJEJ2Ys;g#1@Jiz1bBMI>j3}Vg<bm-5lHO~?LT$y!e1H_9eFfo`Em~2+n8hC5x9rt zs~rUJt=?Au+CQT$v<R%h<*x_bcrpT6DBx7|bynh<5asED0-g{c#E6R3{4RF>NA7O0 zQ*j4pziR(|3_*kxGHdkGm?a(kW4xXY#uy3Ws{IT1A8}&g>D?0NWqHyQE;eVzitx5L z@fRq}=Asmlir<{kpA4OK*vALmp{suiD@kQSmFc{RSdS8|PoqTE>cJ22>)o{8y|(KQ zz2vo_kG#~pa**BfhW<LOEK;mcxdCd-NjZ9e^@3rEd8xbChb69f_xfAb-P6cYk$K$} zF|(S{d99>h$4}<=dwt`UUO-ceTS`rr1x@gBSLMl?SNWFOBlFUp>Sewpe<Z1pg$N9d zz4cog$h(f&OfmvlD9LYV@PEbpq>6%Sm;qKmWi0=Yvw>Qkmv+TD<R9fL(C@j5`TF-+ zTtflQDLQIP2OaL;#RxFrPLhTFPBTSnYbz@whKEBynbmi=3>`G_BF2_StfF8@Q*mpm zM@{9V$(Mq#tb%pYxV06f8$C7QlrRHicucWIshlW;xv!w_KAz+oC_<O%D!3d@=!b4t z!DC7fzd`6$9L@3Msp5~Ofq%(+C?-RIBFi5lmtwN~$fKwdobzB50F*`nKsX8jW<~)( zc@zN5jsk#++zQNragJw4>v4a-_zj-_QlDPuDvMd><w4w+w93e<FJy&B$e*N+Mry%F z=cNJkG<g`@4bOcSIo{N#J8=>{jUX+tA2E)jugQoIy<xYK&a}%zXNhCNbQW(y@$+#p zWH_H&Wr6tjNo`KkT<MsFQ2!?1mYN#;doRk|4sw=dlbLL=UfO6T3;{I5=4=K>insbb zoo2@ysE<7q<0xf8f_ITZY7}wKgWUFB=Wd%QU=9{p7tRoVAPoP3$2g!iQ=0SOi3*;< z=|iZW9xc#=zQHx9fQBYYkS%h1J0&O(uK!O?8fm$6Q#P9x4sZ{u3EA*7R2X=*p=N#p z66_-ULd)I^5QZ{1xHGi%6@+BLlBC)<UACBXKZ&uaH%i)zU${ey3tw=FDST0lxS2cU zS!rprtkcnbp1bRqd%2;Le42*s83hxEdFA%(o@-m(Md|Y=`-b$`N-MWD`QX;zn0VRM zwI;$(b*1{G#{azYeorHlJ?i}8fALqV=q*eW>Kj4-A(~mR8Y4RkuHd_M_LN^H!C%t4 zC(+{iI&$m2idMJRH91UE+>uHZD_3}|nH?Y053ga|=Xgwt8-WOY)<u-_wqqZcwr3wl z&*0<~g6;ERNhv-;si#mOo!T@xaEKsUxJ037jVOoK(3RN1SrJqLT7jH=Yn<#3YWW#x z5adwi)mYUDS2MEsZ#<*GH)Kk_dKg~%bS?3x_5~Q^NIn8M#nk{#u*WelVap`p#q{lO zH0o625Ao#eer7r}huvIqjQ~Q@(ai-gqNWN^GAHh3rR%)lc=<<SFLJpPBppBvjmrN_ z0CILZASOF{NM#Bn3?zXJq6MiAkvm3Sa3z-DyDk}T^$P+H1tiQ?@Nlk?1hQ#r;W^A= z?s?>VElkxyhkWr8CKasq85)PcbMyt=*+IA|{7?gEvGyHn*FiW)pT<r7J!A>e0OD^U zX8=9F>pysN=rdew!?)SA^k2yvA1Wf`oTU94kx&|<XXuVl5ez-t?gi~K*Jr?{fEKYT zzOu2OfA^KQMt63G(T!`A0P5Q81iBbeYf8H&-|Kf+q%6il?>3dvub>Y;l}L7hR@`jE zdYH_^0}ROQ<e;R}o$!e1)2LX`{FHLKM)RmIK-w2=UTqB?o6aDGsV#Vf1RzO;M`*4N zYG(ZmG%-m4K>`WTVht#PE@(^2Mxt^@G%<(*G((e;G$TzMKohHxCPpMb(!_FcWl(ub z3mQvCX^t_tA8&daz~zcWn2;!%mZlMB>KKtkvuOb}`&HpI<m^iv)aIx8g%f@s^{sLF zs3DBYM;S2Qp2Q2!uz4&mauY6kj&8)i<B=OZcyo4T7M|Opcyn&(g-68EC@4gwR)`51 z1{5%^kA2lR>b%Cw7Q{p$FR7z-gid+~p7&0l(eq8r$tu+Hc*}H@9s_1P?jvRnUYk*u zi9GIW*?JFU5jrv@S-|oOG=|V_u-l7BHCVLd-FxUEr<C*)%-&FhB$Vb`5n2Y@xMoMn zPdT`Xc_sCcWVJtpU5BV6Ehty;NdKjh_5&aJLtjQdz(`!xpTL?Q+Cy>i=s9rbtH25D zbujqrk(0@<5~|Jd<(4^?WRP)-Wp4FM)_C;o#Hi1F0l~Y_{Azsv;QSK(@SXcDLGOE` zE5FwGtBrjNFl8(kM~#)ici--9<7<pAuhyU&0q#C1O*Z*Lwb#W(B0m8s0N39G;s@vc zpxazUG8|WN4D?g%C?Lq#CpACK$vHx-rH(KwE16{z=CO@WireWMc%w;H{XPp?ef<H7 zT9B1S;2Sx+&Nm`^<SG3ji-O0^b?zzjJx}(by|IGOE+cV<5=tq=H!>ASV`%EOxp~GH zIcj@rYX=wRm?nSwlE<&33tl1UZ0<2fpI<<|gEt(cilO|e)~Rt2B(J0;m;?BDaPRSr z*Pb)<8nf_Hyhdf{%10gG8M^p`fB1U5l5SiWUBD(Az3q+yQ;qJ4L6PEeYjkB=aMR?+ zG$Tg)fALPbVP>!B7lDV`90;<xzMaOMtU`NgNC<%z;vN&$%KMCyWT^Q*CJRZy6b9Rd z4<^D;y65@@7Gy6Z$c4_2vqOkY!fIiF{S?oR7`|(OM}@avC-tf5tda-Xlj69&gK-K# zdHpH+Ys+N6wQWc#l46>Q#u&)~YRLTb*4J?dZ(#d5yMkncXEvwwsn!zR<18XYI5+cT z069m#3Da~gH1jJNFH~Q}lEBi_?7YX~G7Bb4v!J)yrdR$fdoHrz1)7A=CgA&kqh<$r z42NajXV2-zn(hsv?uZ8XHct|H$a8e+E+j9TeOY3@m&Ch2dT4aE@P=IB-$F?7s@y1L zW!8-%$>v`~{21dafk+k*HLQO^$ViB+{6qN+<u*{E=h*wlEQs6*ffPcK5?OfF(EA$E zk}#oDaUhQS|3NrUIc3*#7cMLW3+ER?e6hI#(RCfi0T~xSNXdpHq6m<4@Z4}|-u*vg CV{G66 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/__pycache__/scripts.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/__pycache__/scripts.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a1a5ad899d10cd3b0e68f4aeaeaf8f6eaad5d15d GIT binary patch literal 11046 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/__pycache__/util.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/__pycache__/util.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6b3109deee3542b83b8cced34b99c4e8ab7defd4 GIT binary patch literal 48029 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/__pycache__/version.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/__pycache__/version.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..22e737982f84629ee84b7d51ff4e815577ef0caf GIT binary patch literal 20638 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/__pycache__/wheel.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/__pycache__/wheel.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e79e517836b68cdb01ae8bd31242f6238d6b7308 GIT binary patch literal 25402 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/_backport/__init__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/_backport/__init__.py new file mode 100644 index 00000000..f7dbf4c9 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/_backport/__init__.py @@ -0,0 +1,6 @@ +"""Modules copied from Python 3 standard libraries, for internal use only. + +Individual classes and functions are found in d2._backport.misc. Intended +usage is to always import things missing from 3.1 from that module: the +built-in/stdlib objects will be used if found. +""" diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/_backport/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/_backport/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..79590bae8382f57e1e3f18f6e62b1fc332f56411 GIT binary patch literal 434 zcmYjOy-ve05OzC271V_%xU~{>O1mM1SQt8hkk}B&a&k^{;Ml=-TIG>gc%ZJl1rwK6 zLRk7vcc1U)J9{;qW-njz^?W46xA=EB7PpKzVT0mX;OI%r#`=se?mc$aL@0er2B8YR zfyX}8-oXlD(hhY%uv7#c$ixe%d;oIE1g9-@(SUchmsz%UNL#{=+0yD5xhEGx)wwc} zcN_)7#T|3x0GCn~x_obaNV1_=N`N(Yb!af_qTU#w2+4!CJKaa1X2^t8liNh#g2>KM z?MhxAomA@t&0(J_&NNxkkxg@Qc}&O~fG^%mnIi1SS}4q*p2bv0RWf^+jrONXp)ZyC z6k*Jdbud47d1~6crFK4a#QEZ*F8pGN19gDfvTz@Aq?mY6{<m7L6gf&t$+q85u8-nw JPKLi=h+mP(iX8v| literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/_backport/__pycache__/misc.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/_backport/__pycache__/misc.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6827308ebcbd4e4ef82f36dbc2a08d06a71b863e GIT binary patch literal 1031 zcmZ8f-EPw`6t<nDP17H35<eG1C_(~JiLDddPKYsafrNU)Bp?DsiS2gjk~rAzv`&Q! zx@SQ`Lc9oX;9IVE1+F-Dix?#G@$vEb`ObIzsNav?e%pKZ-9zXHy7KLS{sfl#3WA{o zG0aGb6YO@95auzT1ye8a7F%Fzm3|c@0Y<M-ecMO8bsEVR7}=loSjfCfoCI%BO<to# z$lFO9{O*Ha2!0<oewcO2P8B5)#6--$L`i!S5pg{0CS8cR1u;E{`MingvH<+LYd=O_ zqGA7H^faTVjgVT!6CvZGX2n^-=2;ojGE<7HIICGanb%YoqE>r9p+z({+ccvmJe^2U zrAo{t<tC(AS!Q_&+C=f13dV<65^z7JR@x7kLsmb6rLKWkVi_{rM2vhOOSB|65uozM z22+E@7f_RSvq&ceWDOY4=TqbHb1mBt>cp?Zk*=CiQ#8BzyeQf3{`-?$>_24I<W_pd zYbNA~6-t*yK1%aV!=tKDbgx-Bh}#yB4+7yH9%2(7ZJMFj8sW3Mh3}w8plGy28m}yk zcswK~DpXM`oz;}fF5E*FPvo<|Sf!1UHivyM%5j4K$!`I;{0E@?$u9>>AjO@?ipYCQ zH1o7S3sz`_!QNt6x0j&L!W$qzVP+{L<BJ`B-f*hpe4$~AFk7YNgSZwtzN>~E*@F@$ zaF@n|E7Mxf3=Ruru1~qPtb?w3<!*|4YC6Y@hCh>1NaJfzO_-*2R`E2ooY??-`oCq{ z)*V>N)<ihMKCA)pf#~C5-?Y<|37V#c2qo<xtOe)?i&s>Qn~&)}uk0&zwH=41Glo)Y zEL|$f5_+{S)NwCuNi#UqS{C_SuidV|a_`5E!-NNwVDpkcZox^#Abb+ykVGEATX=xC P0)j)>dt~4f3mg9i@q_gf literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/_backport/__pycache__/shutil.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/_backport/__pycache__/shutil.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..57425e339ae6a918b13eca684cf3b495083db5e6 GIT binary patch literal 21387 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/_backport/__pycache__/sysconfig.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/_backport/__pycache__/sysconfig.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e2de81a829fb4abb2c738fd945d7f869d0a8f8d0 GIT binary patch literal 15988 zcmdUWeQaA<cHjHr<0C~;v@FXX<BvD;muOp*$M$$V9*<{aNuJTfmR(6R_Q>+k&%93- zDT<`;d$c7Ex!bI~(`}k2gKakrf;32XlcG(Kbb$tGx=n+kDN>+FlXQztx9_i_ErL1- z@<-4v7Dj{gcg`g#%Jy#3qW@I(yYGIz`+4rU=lss$+5Z0I(y!+3E)+HGziK^yI}v{e zPw?}GrU`9P6S^?U`l8NnW6|KZxoGm+TD0&s%ds_k(O!!$#&vBY#U;+7b4#o2w=_So znv_erM*p}Zx#)bPRgBx3utZGQA}$<}5J}M|Qlej^AM`Eui2;#$qAjL;tJE)l#y3jo z(tyvYO?^{e%v4fH8KoVY8l?~$6gyT8`MDVMGh$j8UorM-rJbAFsx3d~n(5MzpYiQY zqqlzbPX%(t)!zD_=`z{-1->zRzd`vsVi;e&``lOWyzDEnN9@HscKN$DwZ&nv&)Y3t z5&My|$9GD5k+;t`ORtCn=wZJ&C=Q|I0OowKbZ8T6wO3noDJ2Zy(u@{g^<BzE`08G5 zx3)OKD{~lij-Z93-PAFpjtj#Z6~<y#jEKW%_k=hij^ce%923X!J|#v)7Vj}}LY%}q zCr*hmyvN0RA}7Y5=!>VtX%R=xYvMI=2JbWCtT>1FSurDC7irWuC(a8CIj@T^h<?1! ziwh!w_ZR#e#&3u>mQ8U{BvJE1PtKddLCzcElCV+tqIgTh@P1QV7JYbM5^swX-fxL_ z#01`##T7A$_uKwEVrtd+%#c6pzr9JcWXx;X_Zwpqg@PXhZdi41ZiFk<%JIN0R4dEH z2X*O%#cIVZR+g)BjpMneMCr3xBeH9r6h#?1()Y?WFI<UsJ@CW4`ZB+gUoMvYinr!R z>7MLIo{R>zrvvrfnz!oHCtKe+RF50x7ATgd27@TkDG8z!N6TJFBa8+)#goWC@@0U* zM;Xcs3M>Aa-~K#}kq3Tvqy?R(gg<)s;hDq}j3C%>Lam7dGOt-$sN)dsSBJ2v&1*P( z2(vntLYk->#c#|{OIej!J+f%5|4@@VkpJxJc(_&@uN7-!_v^*77(4xN<$m?_89`b6 zV5AjMmE)oqgyrJ>@%(+Suv)9ia6H%u)N<x(8&NtRc*}miv)VMiz(JtthVJNTT@v4k zj7qo|uNAnfr&QdCE!7H3kDeweo<^LDmb^7_{@l|vG7EV4kEU<q;pyiPSsxYlly=u` zX`xoqO9qE#XbBUGf-@~`Va;m~?OU3NVJYIX&yw?gSg+-1CeQj*yj(4K<tTo=D(YoF zSh$Mi+Jm;`UIf`#WK;v0K{T?90d0R|m8!)`)StgOcjNu($%XutiTP<Psj*z)<y65S zeKAlB@-?;BJg1AuY_CXC--9)gE^@AR=SOo(;o<px4Utd_euDX_zGk$r`=MFF+=R7h zh}d4Or8l)EcxB6I8YOU9#LT7{Tn@o+H}x;;O|ul=)P6G4vO=enXj+@Pu3;s#zoN~7 zIKrg-F|6MJuU`x``kFD~(3>XuQ7Q0hN<Cc0S7}d?Q)c!lE)9@XWG@#h!k3YrdrBK4 zDQNU>QAA<+L1SoJ()HJ|?l=;)YEWFy*Cfu<dX!YDl`2kRyjUre>%wnjJ_%$2hqpC8 zqjI9Y8qQFsc;J(otd{&jc;5^B)_86Kn|722ag4^6iV}JBPLwF3g!F@IU4nr~qR7a} z^C8RUBU=Wwaxsi7nn;wM2m)UcH{nAPCA=UXglJ+7pUh9bH+_A29-pAe<r?k&M+@)W zn9X1LVCLFXWCnhiwYmMpOy_WbGZa?62mWFl9D`PB(V<Z>4e3E-s}uh`&1CX^C8$dr z{`Lf>Fz8?(0?n}Wl%4_EB=Jt_L%M}9tq&UVJW3m>rB6oheEiAX6K`jiT3wbAM-iPe z6HoA61ffQpwTbg0Ks$0jVz}=?J9@<q%}u7Nl7+XiKGifp9hZozgpRxS^25{Xr<ywQ zjw~51s};kyv8D;iGUVdJDWq&lHDgRQQ@6B-r*BbDacW=J)^8(@mht_ymKi!o8BLth zP5rNHe@$D43?j@YPRm9g?Gn^H*zJki4ilwh(?$;l_wlRf;|b9;PPa81#UGTb_q}q^ zojs8%J;Zr}BM8tkZe5yfQ~xT-4*R}}Gqe}qa|vVzv}Ddos>>7&LXSO=)p`vVih~=b zuu{EWiY#LDC`#bED0=t7H+qhJ0)z)*E%>rZ-6|HC#J)LtV<hjd*Sw0zw?~@0#Ox=y zoa=s+?c@E7`c{YnLF05s#EPN67DO>HFR&n|ogG9;s#L8}9eEbLMQQ1;RUi4?4=qtF zgg6f$PR!-!rf*&Yt=8{n<B_fSw)_H3^d0&#-s#I$?M1OiUb*heOH_j{imWc*q`2a3 z&rRebl<*2`x=jRX*ai`*1Kytoxf=Sgp0v_>+DO?$x_lqCpAt#RR}mCwi|CJXI!{1M zn8^Z!0kUA`-Za42NhmNI|7@n>hAX~{Gg_=XaPQHLcJGwiUV6w1t2jt*xwz`Pp9J77 zxo`#bTJGawxI!N$UHlcQ66~Q?tq5v^=j$%Z>KeDa=GEMLyghkrb8s)0<Zot{sZ{!I zF>ou@mo;(9E&JXhpBv$Exb;e5#j8B<MNV}~ypsO5(dPwZ{1E!oL)>tn*c`ooIL(@p z+LEszh~j?bQBhVa;E-=nCS5|H+~n58wn&%v`fs2@K-ZAQ`$xN&)Efu$pqn7%m3SG^ z8j={5oJNo}`NEXfDWjKqID@IDucx)Ipju!d(Ck!P&f?vrhZqu6GKnWRhk%xcS<|tm zUecMB>;r=^TNW4(EzXgLgJ3{f)4ZfT9BeZNl7J#>)!zu@Wwe1iy)X1630-_Pl2zJH z74H;K<;X-RXYj@IJURv14<QoqH(#f*k?f*@*aw;5<pNUMCP5S7NeD!W;H^zvXseFQ zAg)7%!`?#AF~B3Qghq*^7vi$#)YL)?x4VhST}8|;#px!;olbEl#Jvs~0DKEagC;!+ zj!Opw+%U!$s~kd?*!&OhQt>2@Pm;7DPg6jv!o<SFp`@Lp;!}0piIG!*=t}2{cPAT@ zuj7NrqC*jxI6rcp8u&pg#q5si{$11xX!|wXTn?U;F$B^|>HBoKh}`aqbyxts{{l8J z`~Q^H^Rd}}P~>e4;<*#@%QUWSZ2gc@KX5w0G5_M@!Ar#r_Z|<<;Ny|%ZSI$-H$ESF zDkkqBRlw8zBNoD>Mf*$wFkjVaQk^KJt~1{Jqo{z%5m!(fO-%iH+TNMxgW)fG^>Rlm z`Nyai5V?ROKnRgbh;_$6Bcrw8F?<aXC5l6A1wpq+MKqr<k(VI2LWsE1E{|>Mki%^p z1x;QceWeK!hTux$CW3cRw+T@;p~PC*M7?{e9sq?TM3O$#iwjMpNO2z4HX-Vx&XaDP zerk(FgY;~aRs!1x^V4%zAh36bPn_7qa|=(<S;CGc(bRr|l`B%BEVXc?3dj#BIDi0* z)B-DM-~POwynzns2y}M-IW^1I8?jI<EoG9>x<w?Ns(d)3_{7bdQxgjl&-5=ww$gSZ zTX^y@bdCWvhpTfF*QamYnER0^eyw<4dUB%?J1TNV1z)BOJIAa&>!<-=!w4c1J@cO9 z`UhuoNR}oVlf;;!R9h3xlNz11A_rFnbUchSPsJ8Rqr|d=%=5S^SDz=DRPVgLO%onL zpy94}tRw_hOSg=qL9zg16o<%4Z@GqA-9tZ&1c_-(M<du0Ma$TIzWD`M9E3)qZ-|WG z_d2M_ktc|O;)&t073)-h)890IGTn+d<1ESorV^G?d)B|vbii7Frj=+Wh{`tgU<olB zU`7HIxBhSm%2d2bRF`Z5)M_S64y#25m~me#)l5-cekTBCB|zi-qQBV>_WYa86hzZL zFyW<*RG4h0&_)UX*%9dGebCMSxUHL~O7tbDvl*k>AEEwj4c~I=;nFQFL_4K^0=`;l zG29yXOke*zOgGb;Iv_9$@W_8b&ToYSlryD$rr-TmD}$ahPziTH>B}^CZ0euswfCEr ziqlN6S_yplJ8C{?xlatX2Afd&R&4-Y&2R_xznA*lS@|mRZO;F3v9mQ;S#S1*gQcCE z^9vNCny7aV^#(Zi`^^kibBOwt-)UyVE@9EBY?ppVBvAW^7;5(I*4i!qA-9~NepP<E zZ>*`MskLbBYz|_~-)-)|sE4pa+-7U2xkFgU0pP}c>_nSGyD@j{!w^Pe$gB7Q>v2h| ze35qo>(SbQofuI&ff`|ZFLuywqBqn9V41`|&^jR1OqYh68B$xiGoz7gpV_t?>_G;r z8E=o6Td54b*xqM4UD62Cx3u+KGgjKoa?A+mYga23?rEmN9h(G#{fVMAjAz#+?K9)y zpWtfOOM9XG(5Q&B?{56=O+t!X&%NG8r^bSCqwKq+Wwzzj375niC<tH_1e=9ku|m== zsW9V8<gIx{8IU|H!JuRXVyf#x%=IcPttxfEEBCg8x-}09vjFtwdVuCg68F)%aKR7j zYknm><rYJ<$xVRkQOzKP`s`NGvRm;V_q3<P;>O769dE2LF}8TO{XRYRM*i-}>{4*z zEj**S6WPXrr6WtDqjyjVRqwXnT<=77Dcg8u=?K)|mzK6>8?k!0Ja!=(fQBur54_O# zgMwG{Nw@PWg(_(Qk?j*m7Ch4rN1D<DNk?fIM~*zxk3{z5)oT;)&V%(%sfaUq^Crhw zU0k>tnKwVm%OAlfkb^_KWSxRXl(8=|BtVWrb*)B75_B-(7lO#D*8B<q6`m*;D}WD^ z0R+@AAXO!bk%Ci;Vyt_zfD*;qN={@JD`AxUkc18eT3BTOEb<2WicEl;@@<OQf$zz} z3Rr(Ad+!8Du+%zwB3y&CMwSGlWHF$v@+t)kv0f8crtEO!5J?fuutXH4NE2YyH!s(b zB8USyuWd`6p_C=66->HP4LPDOM=>=^3>F3YTBKJZ{ZV8Ag?z*sX0$_cPompLpad3@ zo1)lqwT_Wnq!C9kZ#g6k>V->b0PqW8s2$YyKjPEi#}Q}=(r1#;PStHRh}$R$?bJZ7 zMevG|BF)t>Aeg3&VIyUxY|B6`++WaPxfa1LNyCN!o5Hs#l-WjFx6MHldN118!#z+7 z8MIEVp$;B=9YZVTAbn#db@_7`Pk{zSe<X@@wVf#>Lg?D0?3D=8gpd!(C<ckh0Nip) zm|;AG0<dfhYb~u}2@4>os+$nt5KV$POz;T1;m+}?<}*rCJRLwfuN{_=i=0k0a=iP+ z<+Ar6X!I$7VC-mcG>}&@8qiS)`n;b_$}>pzh(ja^$%9lS4miRKL1qsqwF4+w{=@0H z`57Q(^Y7i5TaZ6bRY_cg<TRjqfEFbgl6y|BkOW;_$D$}@6e0r_UC-d%mH9~~J%ncx zPw?Ln5V+OSH_{>C9YP8S@T|NKu5aM}{aA<MrE86xKq*$u452gfYF>pjiFnBxhRFr_ z3`>1kzlA#i1}v*(d=aKBGG~P`v~O*Ugf=N*fL3E+9Q?W6Q%A<=>GL~1eWLZAKEM5! z?$eR~4Z8`z7omL#Bf_r68()~I6vLudE;ba<u*Uc`@nWwAaI}WQ8R8zOO84fC`I*}; z<UWFsa*bTE0<K>aZCeVnWv@)&YPE6^NCm-JWNIO%<Q|2v2)4m2u@Q4ej|SP<C~@W5 z)ckuBbJJ6i(}`shykAVwQGDhG^CS5U?1}tE3W%`fClnB*&lCj2lvEyq)s$r=(*4L> z3m!yHn=)1;DHPAqMbrm5wFtutfylRsK8~T1X4(ujDSR}o@54c)BfW=?G~URupt}4D zYIezo4xEXH$%kb6kg-85vvG;y5Hu0DIIfNqEq@$&4&Dj8lPIG)5aUSrELn6wfw}`> zL~aVT`mtH*#>v0*X3Z|hzlV|Fewn#4H9fxocpO`!PF|F}GBexGm&d7AVrF*o+6Pn9 zH$Q4vFu{n(n7@ITzmA2RzC9hq+ovzG@#WOa+$^*LI(^Ze7mj9r_C|i{#=_RIj^a3& z%<xGpS0@^%fM2MGL?S=~w^ZXT&1XPuPNiB=8w5d13uwzVGX<`f!e-Dv`A?D4mHlZ* zUAq?XL`e5Kr2CYDM<DZ)^sn>)lK##0bs#|ooyDdVoW2Rj1E2}PBC%#nHXu{s)Pf6= z%x<^hkO5;&Y)UJRlQ{%#V1pY}lmw{E)Xg~f1vdBL2;}FjmPUk)d~R)1r&5x@`1Ez< zE=8%imH(gRuGz-OVF6oA#dleB+9p+<%(^6ZB^$@a@0_^n9>(44FTcDV%EyyiB9p?; z<8mDvDmM_YC6+}T`6bG`K*5hv@MQ#92R5{tVhIT~91<TK?hrBgx2fjWDflT0{tg9O z5C-Yp%v+ui#f>7R#p#ZxyPoWiR`-VIo1IW<+}#%L?rj%vmmd&LiVOG%U8)SJ97K#y zI9(Yn?cu2~hKtw1g-j$#moG|j>R}B5iNqQQUvll%Hahf@Q|i8Pb5hb+8_BJrY`o`! zrC}&IwR_8U?oTq7(dGI4A`q+nCM^PkxVSIr)+9K-J5f~FVtj;Xgcv?CFw!~M1fn-i zwTJJyY;)+<99Y<Ado>VnNQ6NS=tx`CgjLuV3RZjv4fl+#%Ohkz3jPrdkbx0n+ps8W z5)VVF9S8vHX*5p!@Bxuz(-{ui0s(aqx*5fl{?d!lYz-xW8o$;Zin&mr{ii>A)5Bw- z3#M&1Gvp9)e8OBIju~W;CA5|nO%Q7^8sF-U69$ADX<FFxj?(3kuL5N2a@ke(zqXQg z@19EDyGLpmE%5egyv{jN${<I(xZfWYg)dmedR#1*S;>-HVjhkU;dkvmSPGyv3s8HY znYkVKN2y)2Ky=Szh77_=n(!7Z3>}8RUUe#Mg$eiUDIYolzrRguNNilQZ8~&DfvAxF z=uHnVq@p!K`e672%uR;3tlqfOT{4zWw_9Z(ifj?w|Iu>ss^FfY0fIvLD0OEe|0Qyt zp9;<3Uw6qNRzQ;f=mOh?=UqI(Z-PciQdo7Mq<>n}JUTo|X22CCOvnNNs#tEY@QzVh z*n26AlTQ!wAV2Uo36dL-COIO8H{=KiuaF=RhxCB!3f@(rgX;=hjsA&#RidsfvWAMo zfS!Ij>;ruQ7T}x=fUI8%Q|%l;Nq~)F^0&hDCiOiCsbpuUt;XdaaGyH?lVrjHl<Xu3 zhTa%WruxU7wgBlYf!FD{Mib<Z)iN-yeHho^Y7%Ap+9SgS-5u4=(om<p6rc{kXxQ>q zlUquZc9wR*;-UJ3@dmB#1lR&D+V0yf?G{7q2lOe*_5k?7y20YH7l772u?sL5R#RQ} zVtAF>|Go8#;s{{9GXMbrFrjule5JHs>=y@c@tf_`!A`1)^`+|`Ak0r;F25lTp`QZ` z9UY{YID{6Q^$X%C+C2S(+HA(f0YFa<R0aTz-4_1{0G<YquDt~DwGtS|A>jg0G#G}{ z8HW25@D)6~Fo!;#{j1GBKxanq>G~;g41FGXuFsJdMs7U(7{Ul(A^B?$07tGLY?57l zxYZBPXoUK2_7hjq2{^(Wn<+8}w0YEVZv!-biwvPKV0Q4DfQ+XE|F~WcGQ(&MxRtuM z+WuC2usZrbp+;r@kq5p)+Q!TI41aN>;(kymuAf33Fu66~gMrou>aYRJtHKgob?-B( z)OGc0b3!0U9X0jMPII?_I#eG+<pJ(=-7B~^<^ejvJIr&}>V*|ISOcT=C6KAG%{X|{ zFPkv|Cp1?E#E1iXA?6hj6J>*NxmsN%US6+p-@b?DJMDm1t7&iZN!yxJ7k+E=TX?1^ z*OxvLr?>oIHnv>CYTbA~SizmjvJ~U{QKqM?QWe!uu7WEmOrMeZz8>EgrEp7BQ1XUZ z4bHGBuwkCboriGMHb+3YXMY<>EKeS$fcPC_S5P}9=BE|z#fVmvfL`BD|9#YI^p6q1 zv=p3NdVF#T$eG*7j1{49$|^3aJ0H7=yC)VC6LXXAF;Ldn(JjO$qf7HAvn(_=cJ<~X zdvqyi9?9Y!C%cUNHwbW3)hYgODPVBz_b5h#_`fVV4D4$1#_ZLZcgaNpxE}nvrmxQ2 zMm7|v$xf=TM_-cPq&^AnV5Nwc816%WJ&O11p+e%68pSsbX*#TTM)9_tg$*C<4ab6B zWWzdBcr4@q)ubyD?jC`6KVTD+yhXVyoD1a~_}h<ioPC#+Y&}gi$j&2|DfkKnBwGW@ zR1Q}*1QDQp*|hwa%9vhE>hX7xTuiU}z<kSH;_F}YN>$lOvT+xn8-YS(>?*9Nh5tHz zY6fDJ48i3#K=+(DZllic({=hOB3d8BZA+<t4!oCCjNC)gMjE0xY3XDzB4{pYWNb1V zDF}^xos!ldq*ziQ0oTP0lfK56dL~Y=8q)ZR98J<Gs)JUL>g1+@1&|ax45QOF<-aRz zlB7%mUJ0UITmJo9ZJC7l88Zdugf5`b2f#<Vhr3Q0eENG(cEv}*u<ma#w>VBVRmDNs zfnqd!yv>iMAJ&U#orE&TIWJVpA!n2}J<ILjDA1DfHbbsq@_KH`$)Gofc`4c2rsK?i zRE<vbB%a`&Nz-kciYo%zj6yGH^5hvME<%DBMIO8+RS66(ka(ejlcKEy{z6UMeaZ_v z4w-;_#A5hrN!T#MLefEeML7IDwL-lmR?Xl^2$xln+%!^}{IPZqS}C!qEyc*AjMVj( zgL@urLbidwIC{034&v||N8I5!yvI3iiHz7mMj$bW{{FMr32z97L@|b~GLj{9Ioh<v zF4P=ejeTayIkCHCi9I0<U6c!%V(%Wv1Y)1aP<srk!jx1w!R@@leeCCUu5vFn)oAy! zmrD<D>9RP8F~pnpve_*^#N{rRe?z#CWKxjH==LWgWV%V7n=sMQs2~>%U^QWqt9*-l zR^N``Ta<<wl=U_HN;|}1d;?=-s~=L?pg4jQ%t@7DNM$=&D*K}@yz%~Rtucfihs04B zwO};E$|YeC&5((Ud;wwfN{S52CFjJk(ry|9>9nOi0$%1=;e9lI^Z?lcGRoy<KlRL` zO|@)s9Q)HRj_uaOD6j0W$kI45#uK!A<O2`M%9O+6WXtK4ptS*vX`eXNq@B!!uY~)< z17vWce@Mf8hrUhB+mOFbW;c?^Djy^ECg=SQwN{x$`Vyx<7pIZFjPzTa{zLH^(mA9r zbNYMYEYb&&ej8~Mp26pkPKO7@>&?tE;9&BYtz2q4VvNhrfHn__ciOZvj=C<&CU_=u zTy}-aX2ltlSt8eR#2eUo8}!FJpPlr68ON-v*#JdVoC1Ocbhk=aTrT=b)q7Db<I}!C zQWE~N@oWuNyYdDx3G!V=OZ8%~(pBWff|_4Ig9VozjZsI!aj+_>2gpX;Tu15KUN_|S z_~rus8^G|luu&_*BO0Bxy=~PXAzBe5;-*O4YTsondJ&JLn*k=70whSlNPwY(dJXQi z%mm%z)gZ^07dT(`lxm|4PyYG?_Qiu^uvfscY<cl_`WBD~>FNqxc==N|H|F1T{RcS~ zHD~5#ZgX2N^j{1r$D!uJv{fwB%bujktdYk$NvWgs9oj>ttV0Av%k%Hfa6>Ej#lT}v z`q@)hNF~o+gCoZ}cdf3;?!;g0gPZ8~)8X*z-Wq&1(amyOzQ&R$Df1$K;JWZqL?2_t z*Dsvko`at)ta$F|+lu?6Vo=3oioqCUx3QpJIalx0FUsQj*z38oz3KDk#?I%?D5u4a zpiE#vdl;Cvk3n?@0S}WgcDi>*&!4*w+im9?tk1;tsq^QstE-;7e&Kxn{JB%^OeOTo z6q&w${@lVT7a~k|nAB9!qc2`)X$D(RtgrP}J$nW%V_58m7r0|?hnR^7Pm$pw*P-2B z8+BIA>?(8){t~)OWlY&RI@O`lw9gjyx>SdRuWshRJ>J_YE@P~%%VK83c4_XTERjCb zv#>DI4-p!P?()D%UCp84bmpm?>%NPt^_e~{S=#=6BqBZkOdp$lN_R3FJ?rc6)Cpix zgWa`W!4C@{8==<g@V!+Vs~mX(HXpOJ|CFE;*gCPjk?9rJ8xDV;I~qJCNdP9~jRzP- z!@jd5a(7R%_#W-KJ~4S?{&pUAfonHDx;{O-kYAXXdv|)Fae927%|PRA$D#4bs`Tf5 z`KSp0_;%Tc>Srlfb1<65TbJMkdHJS<b*T`30BzwzScd`sw`*M*r()RVFDd?Z8Cdb# z*-PW?6l)TZz2+6F0p|YN>D;+oBgWc-(j?4fFWgceSQo%-&t5nmnYCIWvK6&K9wusA zv{3sj{2FV8^XDLvdLdqkdZkFb$SXIFPT{9Pp}ShCK6cS1{Czv38!4v5pn|uK%BL<Z zT>NJBu`h2<!l{ZPd1#O5qZ+KVR~Vc0^w04Jk?Vh;zWkpEI`QvO+}z5SoMFiCQ$>zj zJ%!!eGOh#uv#6#2MV0>yL2tI(qc@NVRsIJG#wZ{SKt4eLN}>@f+ZxfF{Hqj@R<H%N z_W<l&iBXx~{sGk^6(O?t_Ytu|xr%LNbooC~*%zrSPWF79KZbSXzo7iH6nvQr*Sz%r zcE{`v`P-D%i;)hWcv6ugyBg3n5m_tMAS6!(xI&|Onnx6GZwk2^l;Q8rVE$qpzjS~& z9pJ}>UI9C~n8dsD-Ph<lyTIDVVvM)&dCZOsM|Vi#{RSf1-Xs8TvNG9F0QTXnTup6b z*o1xF%AhP|WGu4Tr%`qUmVFf;WECNa?~sneI$&ECs~@Hf`vF>mijve1!pvx~I$^=$ zzb8&ktg!MUPNn4ezU{%6_zu0<MiTZf+kgT>qwM_A`JcoS&@m@`hCB^*rC@Fe_8eoV zmGqQ9>q_@}*MLSGh8}L~eMHu$2-1hU5R7CbQ4x*>V;C94$XVK8i^drsl5oEy*@u2x z1QR$+UnJL3y6Zk|%`%&6SVx14ZX=mE8n|z{BS(V~cnT)`3VeO=BRpTx$Ypem^9e~O zgqw9NEQa)hDR_{0bcBV!{)1hG`+$SsGxn+0O)QCnwlw`9wlJm3L9Eoal|v0R+c`v_ zQLqPfdnUkQL(IFIf}wvaMG`OEDPXB3Nf>edJq&VSxm7u&!N9<NVyXxo+uLyIZt4|H zaCInM4zda1`mm{|Z?+vOFY?MXh7@?!krmpxuTHk{_co%Xe!HlEe^n)l-6S(cl=!go zyOLR0gVLD1Br=z@|LlIt3&Oy*(g<HdEKv;3FU5*OYsm&!5Gnm50=IR!3yso`p{Pzi zU;I9JUGaMq{3&rgBE#A21mKXos21{h*`S`;b$Fd(#GGJR!Ocu=;h;!O{l+k*R)&3V zWYjmqLYMMQN=-66#tv(e8pgV!VKy%R1~ov)hx{iLFt+kJ#aPAtbBZy8aw&F(f-D8+ z5kv!X-s9e;mGOe?jp`=}bQ}~PW%l;(Dfvwbew_kFSALsf|BixxMZtF{_yYt{GEWY} z{1ZR+eOI3Ii&RdI*lH`*DE4y{#3}d{3K;aERacG={S+fxliD&OZMAQ7XnVGn$eedZ zo}_}8?W%K0d3szXzRn&^7N8IHFT;QdHW{4j#ecTtfUgZ%DdQkO6jvWIM)V=mv56}= zg9N%bhZ#~~GJ$uL>0}(o>30%N+&PeZ<n%fFolNqOlX7B?J=j0!IA78%lzvG&?4WH2 H0MGvhbWN#% literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/_backport/__pycache__/tarfile.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/_backport/__pycache__/tarfile.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..941c9dcf9830c45464b2bd13ac8e29289025e9d3 GIT binary patch literal 62998 zcmcG%37j0)ec#!4_w*bX3<ftyHbH>EkiZZCFNh{7kT^()-~a}OSBp}kXQ~J2!JubQ z-2=?DXDFJWwMuL$w4+rVM=L9d){(uoH;1qF$LqD^tdlsGHoMt4oy1m-k2lES_*%uQ z-B|nm{a;me^<Y2}-p>wDud80YdiCnP|NGzX{~jG2EWY{E<DdB7>dC~vPQ?E1;rtj! zb0U*ScnL2#m$;fNCzA;;RZe;7a@xz3GhViw^>XE$moMijQ<y813-;Sr?z7)wxoE%r z<$n7eC=b~0V0qAfhss0tyP>>cdDPB^%ft4&vAprML}OPbQ5(5Z^go|W=$}`}B+A3( zjc+6xsn-*=O|{XPRC)9AP;GN<%S`ggM0qpMjPlG@p7|B`j4SK)c}1_^8@QAyZ>tq% zw|j~032*R9!vAf1+m7<ihHLrG^3K}M*<Iy(yrJ^F-iGphwfnr`(L}lAZ7kpKjg)tL zo5~Mx?D0m+d%ex&2PwDD+fv@|Z7q*^+sY4l+shAoJIV*Vo#lhxuJX8dPx%q=-tr;u zzVczOR6gR}Uw+ivU4G0<lppsVC_mxtDL+|zqI|UWU~OM*e{HOGpmwk}UVEtaaP5)W zq1xe@f$~S}-Z<x(@>4->y8K<<_m-coJ>$J|Gg*GN_EGzHtj0g@;1_e{=e+Uq^WG!n z<KCh23GZ<Eq<5rz%6qi@g7;YYMep(QX};}a-V^1QyeG?Nyrbopy^oY9yr;@%z3(cY z^PVn$H|;u4`!3Y_W+%OyS90&A{2}k7<yRU7`tQ}7iSjGnG4Hu|6Xn;u=e^_nzV4my zPV)PP_g%H4Gb!(s_rkl$a@l*)J5BD#y?4Ejc`uRkX6<?J%uK3w+<Teygf~HY(mP9f z$~#B;g7@7sshM2uCGR}H$=Vt3g8jZ+d-3^%H%W;Xy;n$I_Fg4FU7HBXoej#JtDO$Y zowjo4f^y#-lsg}kyHNWW<zAzvk9n_?UU21RisesuZ+K<e{K*#*-p9RxcN5+~t#UJ6 zzR2~P-Y2;JMC~HiRjxnjRk*I$^%U0^y(-sLyPoEH%A4kT+O9pWJ+H=f&8}-)&v=)( zzErDG-wfB6y*k%*yS~KrtapX$D|UUE>pAZ#*H`Vj&UM3^=X&0*XSrVRu5o>>c7^)p zxc0p!*G;>=%5}?I<a*Jr8(d%aZg73WuIIU4@|L+?w(AA1+urwZ{XKSljq4S!$aT@K zeXdu%KCb)hy2<rh-lw?!lwG&Hx4nM)aj~|me7)9WR_*c%7ZPLNcT0$7EZG@a@av6M zWoEH4-Kx(w+QmKRYuD>dPWQC4hsHlLerRzwCC^m-X6c2+X6skKGF6)^?VscN*d?y3 zHLl0K+F1MXJtwNI+Eb+?hYlY;c<9K%BafF3Kl#*SN1i%#xb*O$BZm%^_Mh_W2TJ6h zs!dt3vC^LQNB5leo+`Df{!D$YHomZ2I(qc+qfhkI^0=#|T)JBIrw>*eo?jcEt6iO1 z^e>h6EIvl_)UxXJ`O-wacD1%#^AG53F4p1$rStXa%T?biP0rtFG;0lSe4>+|too;T ztDT%~%*=O+^=2h#N~gfxlfFOi-%9g_KS+`!>WNe$ach*bW`RU+^-HDLMdHw*TON0A z{RI+x=8&a_Ej?oCqn18q>Eo6@Vd;~Wp0V^LOD|ZuWa%YKU%#bx+@ckUPG+Iny4)$u z)f-prEYqyFYn|-XR{d(NlU}TQo%AJ=>|&!zM)s0^#&Vr()e2-8@2fTcK5FtyO72&3 zFG)S|WhHMbxv1orl9G~PC46~30ZF<AIY`{1SmG8X61Pf9D3Q3OzPUw-L?_i~byCx{ zc6PBfbMWZ2^7N-)9mhGE`$<+3vx$||O8RDMm2)q-lKj5Z_QXoEm0U^OOm0iGQlp8j z2>>_MK6-q<alPiZO4U-c1@K-fwdOf*EY8gxY}Nd$^#)+*m8O<kwPtC4YPL4r8ZVak zn;1)Xa<#_vyhr!U)f%1j#4BgUGM!|zljHJ|I@4}bCj~Y1%^y$rPtd$?pLnEob>WeP z`oh7f#rm9g@X)o(Q}c(8c*?S)avhkO_aE`<&DLCf>XFJ+b^6M}yx)2xfG0q^lWw*e z|ARi+`XN1#^pA2iohH$ra&>;3qxletdc{lLOs=L^Aof?%{=M`K=jt2v(=7e8lDe6q zU$XIjdB47Jz2$n&^^33J@^_F--1-iGW2sJNrrz*6Ij^S98q4@cR6-NYf1IR~T(Dko z$&<=SH(JgAi4&U^iF7epNb+^hkTWfS)t|nspToZHGn{Cgw<lV#GdGib+sBr7w34lq zzR=6uOfT&AU~GVg<ZFp*?`9IMGz`Tl$56B~UjAnCo#Y$bc|Fm1%1f>$mmX_nTRB0C zSJ*~+BJqjRYHB6v<z7mx(oe1Y3J~TMw!(JYgi%>dUc2}j5JuniwIAuiRAce#RLw8V zfImFfR}0In%kvEYOgDlq(?|LHNSIE|>3Y4BQ;$x!I>|%+!(_LI>W%Bwxw==nT&sG( zlDc=S&`D2U_B&}XuJui)_-b`-v1VANGjiHJ@uEH8^0I!lajE7X(u>mbzBiV(q39$V zon(ETF{uA7N;ZX`64~KoD!C&$lpIcFl3N&$ZAt$$`4O~bRfxmJ<5xIg)&YX)#Fgay z4o^Lo-j>*uxRPjOQp|M!X)ojQRuVI*ErQJKP3Gs;#A>?n_DZUix{_{AGJ3h_$*lio zEA2)~V-2gf(#p(cy#i^@>tn2dUBSR=qLsf%Jxd2#1^2X#->%inN_w_W?edDpD4i6{ zq|Q+O+Ix(h-She_Kg~D}#K*B`)It=|9oqOfYQSuO+L^tF9-8-`)%AlU?QQd5nwh!z z8>M;(01h%b$uphg+^z4Zq`+XT=s%+K!z7*J3lpzYPMtmf@^h2Ede?ws5#Y!zHWok& z!rY{NLQz%UuP*y1tyCSt<hRDM5OqD|)i2ds;HH^*|7x}6=HQFmxozC*t;TPV-`qx$ z=qn|6rM4vtsX}^NDwiBd4l@&(i?496XD({i+t^>`#7njkt>kQqaku#=40AJOIazWL zFI>)6<_;sCjLH{oE6=#zRvu_tNzDjP6{}xm?i{bqO)t)Yr%SENwbJzE+Vqv?;?)vg zTB??=LfUKozGg6Wz~m)vg4ZvV78gp@xjDn;AaoJ*>NGgNS*k5f*A`k<fveHgXOsBG zWk`Ri-Ym8JnvsTTvs9l6E2+0iH^_kdn1gEEsJAYcnhZ~^IbM2hdYU;GP#9IqxQbIL zHRl(7N*oC5XwF~dOT;4Wzp&US!J(8UYOha@m8PTboW5)=a`o3QHF%erA64NRd4pDz zrfMaxJ~LDEYmF8SRTufSQk6qb(DsJ)+SH=TSc}7UsEwEFmoAs4_^M{DHD0<fU%J6_ zQ8QXM=A-Uz9w;p~nyxK0IjqFx1oK0)pqx4U*wN=FZhhX)AAS6Z=Wl(HQ{#o~-c&h5 z?iA!T%|Q7R-1N_qD1%mZHiWOKxL)WCx_1PZYvFl7%?<7~|A2a$Ig&)*q2!^Y|0ZV< z3KIyYISh<{ffEpX@=D4d@BlT=Q&$T9(Ito`$SUW^X!F5yAbkjD`X-X}wJooKP%b3A z{Avc$lUm8#Oud;}&93H_j<(V(AUMd#fmKKc>`6v7v_MHWlPejJ+4WXdDDWMKOH|(^ zXemb<(*DobGxpZtnH<mj#O=@M{bPmp?D2V+U&n_8%*%{F&zyikg^MXQ{b^yb@X~7r zTn+Q!^i231Kt3_ws2wOxt1^KDFjN=h%r{z`#<1RmFAl>Px%MV_m(u)<RbFC}Fd@Bw z?K{RW<~kWN;UsVP^;S)Y>H5`q&ybcQP5IMjjb4es(auhq*7=W8z5fPDIsg1Cr!Jf> zpX}tO=H{8{oj$*IwF-w(^E=6@wZq@9wg;an4zqcHIue;eG6NAyC5!x~AZr=O+7SPW zAh$wtC{+l~ib;P)Z+?m7+sT7|jo(hv>m;ZBr|pz?-Uz7Zg-&v*lZ0qbMwn3)G2%?m zad8Q3w{)zP01%F@rk0MZq{LYOBx$G<H0T%yAUA420Ei?L=MvXO#aYaPB@M`m0<u|f z;7xHG>GpJ&+t7D{>F7=nh}hVGrDZTQdP4o-ygcaNSaSc}C^GP`G>y?MO*%Pdd=BPw z|Cl}CU(&~F3J&QVdI6Hn6v9rfy0E}_cQUi{^~PAXlhM6$W&zf@lXXSX;Ezs5*k<kE z6vE1mYGlOhC$brOeuz;hCUdEwq`ySov~Gldl#~eJiq{h5q?bT{l|+9f$WQy4-R%v} zSDQeqp>c%I@d+67LZu>^rBdk>D-~L~IH&W0O6A&ObuPG*uT;GG=}INmP%-SjxKgY6 z1vOM7Dge5hc6A0$F118o47A&OU#K-|es!+fMx!=0SEf`maY4=Ym-XtllJ8NnqQu(N zO{{gR-1u0$b-r@$s)>E)nU}7851tJB&f2xu(3I7H8^uC!zFbEEa90g{i{`xC(?I3i zRRf2Q&tF~eYfUK>Tsz0twzGP@TA#CqPIt?~1i*BAch}xe(YkXz?N!cQwYUF*n1rjY zsn4u!YIAWxA{~=%p6P-dJ>NjYY-rN*(80O-m0CC#@2=%<)6NS$EmzLnwLB&_wD0eo zO$HH85c!h;>i5!?S9@BgoV#k>@X4zSt>t(VclCB|P4@$i@9z5U9oq6nPwSL(SFIbJ z^wEEbH;lKi)Z4;VSmsaE%A2(5&7M{&=dM~gbn@(}c>8wuwl7Y@-B{mUKfX(QDm^V! z&fT=oKfwd-dwZMJD+k|QlT_bSPm`2$H%;nnzOXpetX*4#`HA=4qrHv1S_eZRUx;%L z8w_TrOPT9`lFs}-+F9#qxpI11o+9HIM^n;$FIn``sBAMH#vOjqf_Qm;b6!D;Ud%j2 z$Yy_MuySVp#+lmn+T1A!eEUyvb#P9Xj*Sa6U!@BUXEnvwnJlAk6eGv?MvTO11dV2C zQS1alC{n4hgH@ingqS962z12NXt=~7JZcD;lj=0`P}9{no#un|r{4_6agOFGk`@{( zjuc1wd0k~t|0ll)<Bbj=h5kmmpp*}f#l75F<t1kGk{!MD&Gbs5Qt+e$%uI}>{8{Sr zuaI;KXDiR2o_Oy38}*-~$H)3QsrjZd&!0Fuapn!3y>{Nt@@Ff@&!2p5vct*b`Bx^6 zck-93&1$RV`~Q_H%7E1yozx6!mQJQwo15um#AWy`y{eaZi#Mq^>Ma-#jq(5`5-_Br z$sBA@G1=bIGdSa6;fT%TA*qsG*NBbcLs4_gq6)*trjJabuJk{{olbUoZXU(JpW%Eg z>A%O%n#TBlmb~v#J5*&N+1}Lqc6)x>?r~ec8W|gvAx^?q!=H*Fi(c%1f}8HODfe1w zhu6Mah2Dz2d!+Z>g1YrzJ+kK2Yrot7<l5Jp7P5C7tkCzyUcctkO=6iCE3C_u{g7Uu zzH?t{@9S1?XU3>~nj&+0N0F04CX*`k71D*Yul#9_=uh2xjH4-txw|QCR+@r0;0-dx z`@A7<1HVOY*xSf&zqiZV<c(sv8}RP&ws>1P8}zn$+qpO7?eKQ;yTRMc;N9EFR~!pd z{b5>se6HF=?{T>*b$}25S3=cMMML3L7touaYG~c4)fyqwBK#N4=pL>n#3rRlq>?zh z6Cj28#@urFWTRH|c<FrUa`ifT3qw5n$4cmSY&1A^%$>uww8wBqEqb#Fi8t!a+PFzL z5=<|(>kF!2ir*s$vk^}zw6!n~@`llku-S9#wQzcV5rr<g6)Bl&OVz6ja~P|d%gym- z3%nR9VuGCc#nu7Z-b7xl*;%W)fL;dM*fe5FYkIsGes0j;Y6*H>M>6<$-emYxJ!3cg z2CA#&07XjX(VsLJ+c}PNG|w|)Qg&9*HJI+=Ud$h+;9t$4_E)~l04e_obQRJ@WL7e> zX(>)uk_%6JDC#O1bQp<Bc15LgD+s8S{EG4msAUtCJ`YVsrD%2aFaHv?6{zjkmj}GO zmzo<`%{hC2YY<iY7XwxMkk{u_?Xvf;sFs11-0TMFQ#c<6H5aMl>)@`9HxbtxC<JFm zbVlv{S5ogK{XIebn^yC&`v0G({()HiRvXXku=b9w<YzbEMCn`E(kODi)tytzgYIeR zSl&xEkMWzI-KMu%|MkC<2z(BN&<5Lk5V!$aRIm(bI9>rrhr?K!oH*4<KIAVj5>h%P zgxE1)U23;?wXx_(Mn?eEFgNC@CzM)@5TWO4A8GF-xl^&R?VbJ#EQKg3Z#LY4DC_3x zIe&g>xzm3MxB|3W%Lo@gs1^u~bP8c!Cm%fA$)i=1vCq^ioir1mlQSfbRIj#n`cGe# zpkiW-FChpb;!i(%1p5Q(nL$Uogqkat+MOYHX_J#{|A$pR<C*5}`SOty7=he;o5yr9 zeRZKTNbd0{&oC$$)(BJ7Y+ouu|G!c4B_)4RiE3U;KZJz;3|-wk$4MfcLzyE*0tglz zHfQmFsg$XJ22AmjGsRCarBW%*oid1Aln_BJ$@Xy2!|PMvG;g$-C&Jb;gB0w?4xlMH zfJK1cl);qfacaW<GNmBOpXJBS-IuRRl0m~2uQpey{Hi`pOi%(<e0xK;Id(VV2Sk*G z6Rb7wa3aW-0?B@v(_E$dT`sucrsg!}uGzeoZWUU6vwb&F%*$9t$)XH3TQSc_Suc~x zZ2#<l=Bq!WbLM)#8CMgPewDWSgYwQn;XmY_@$!7}K>LZ)usC(hSZ#+k1Gdp=$qgrm zpdpn_G?Q-i@c}k{+Nr0{*w^3p{e^;YC#mnW)8m)g6MmjDZS3vy2Qm16<lx~>-mfjp zp?JUbUu1*aU=Y(m85qFc)NH44;^e6_&rO~@(dm2nxz{VNJ%4)gLT8Z7%F8ETuADjf z>d7<ykL%T@ffhXZ&y#dAX7C;g`o2;zNVgd#gRj?=Qod`xfwvSWclz`c27cb(WeSWR z_%Uw(Esd*Km_&LApcKH3GQtCx+hG3Ov>xxBSUqe|#225Z3Wfm01sdJO8CDpOKEr)e zs2oI|flqE_r9FHS<_#3D(pcO46Py78x?=;6?abIm*}^jI2Vax6R-{mpjS*z26uCxM z(H$)R&(VNR8tcWxSf87<Hdp^L+5T6Q{HT&cO4PXyA4#R-{|uKwZ#nDKntl>P^^et0 z#vZ4O^v?*Bdmz~!4136i;{7^?k4KeiAD&oxR_*|^Ks9OVO2$9KZ+g~sh~=4)%E7!k z6)j@`>4|H@C}E|3O|?JqejOu&OSN?4@;s=%QM*wxW+Z~_Qc3t<h!gF)(Rh6TM8Dgg z6WH&h^>#gGxX-YlI^%shO9;a{<G0jdVha+PA-Zc@57KbmMG5=Uuk_W1G=7>Bb&g-u zXL6PVMkGtA8`3}vXLKg;G>Z-PX2QBuSFYUWIZOLW1yO=Nx)DTT5J(MK>I&|*3fN>} z1VA)-S!Dwx!*kIckWB2(K=UhB@1P-57=(%&ioW*8k4v;MRd)app~nVxjINTc)Vv&U zZ}E}vuyjcKhOMhQ12=mE_ntrmWt>VACLQ`ePrvwIP$EDVLYhl+@|{n8=Tqs#<k*n^ zW!*Co&q$VyodJ4wW^S>0+0ihKUJR{t=f$7b4apGiBbxnN4XGRe5}6!!i_zq0Y8Y~b zsF>f8+<}p{nCi|5C#;1-EHn`f@wd33BN;MFQ~fp*Drw_+Gz+qFrLe(1)XL#RA={L4 zu~K<CK;Tp>@0sHSX7(UIKphz6Z5WeY-?4=MUi`jSj9<wO2e*pEY#)v%fC%RLexCRR zv$ENn<g7A~X#Vw;bW5D!k6;e@5t&200m^;zwsM`I+}A1hbt{*m-0z290}u`}YlqrT zt)WGlgr>4_!a+zU&|m~yQg=$a;onK`840@Y``a6gg>z4;xLN<r!K%={7i(pt=MAfc zz6DatEs<$oHYsxvFmDetrA>_WJDN2px0#4)`F~ACjV%2Y&S1VAaX@px7x-`Kt~fOR zloAuU<wSrT!KhGXX0CdvlUc$rxGs+UZz+p^Mxr^+Ng|B`!srn+2{s7kC|LsII=h); zi)2A_XYI`)7VhB(Bc4PssKd~UzM3&H%|!dr^R?EZ@66DSo?ydLKO&1s2J$77!8yd4 z0_KMZ$@<d-5?z~{dqCg8!FRMn)_7bujF*V0gyw^$u(j(=PK;b8wuyvh{RxwqXz4b! z7j+V*I*fHoyRhd1u^8`$Ww<k{VGw+69H`T^p}a-`3oZFJbM&?8_UjjFEkjZ3e=2l< zuN}wYe+i2K5^u9syAo542^T>$5Id*pxSqyHg=3Mz@+EnU84inNj5$0{YTj7Rk>CoS z>X_-1Ix|ptn==TGK*bfB)|sc|MJ2rySz4{ymHq1GA?}L8YylYX5CKrSU9LhCQFjXk z>9FoDbHY?kVpx9)%V=t;B%t6B55mN6mN2i&)@hx2ZOAO2*70}=iPhw3D;aV%lnb~T zaV_cg7h<5*Kwc_I&Ix?4qzQ0teP$V7kDH;dv4-0-fuQEq@MWuc2cX&pvk2j#Z=kcW zx>1c27Q9RtRJ83~6f$9QA(rs0o3=*ReLBN$Dv4O6VA`4=rQgskqbI$?U_<w~Mqvvj z5?NU$CBZnu_5kt>qCzwQgeH0hqn~GNFuux(y3|<5Q4NAR_X5t6oYS!k&kXtiIbOYM zcY*R?n4UV9SRN)XJDbx`t)>IXJdfl*6G-L-HxHa79WW2+fNj9tOV8m(m%3K6`IAPg zVB8j9AT|R!6!2bv1w)%@KO79Ljm`&*qmk|Q)=(E8;#07@S8Y`zPW6}R0mo<wx4Ow; zw7b~F!Tv?v5}xfDoVs$?8=PO|#tRyp5+`zHEHWVCS~WZ=CW{13O&T3tx@~aLGfrt9 zw{g16iKI)LB&nsRf-yNkPRcQ4!KmzK@@Qh<onrlr?uX~Xejc!XmQ2{~XU-!Ym#66G zRJ(bHes+L9t_fmD8hunLa3W%^m;o-*f(dB}@X*oCGtbbx$#bK0$9X5N*F*&CQDb-w zKWUzPsBZ7%96@|jJwM7*iHv$3KM(pm>g`a5L!4LZASNPEQdtk*S;PC^QN)+b<}}KZ zTAbEbwA25ZlCLYV25a<v1FP<wwX-L6<MSl%@=D|83VmpTA1h=ELxmz5;a!FM3fbad zaip->%1u)?`s1q-$2k6k#vcDic(&cVa8=lALE56ybXT=oYsh>q|F&ua-!=0a3ug>8 zI7Dq;t%WbNI2oxxg*`8rEa;$N2GP5;U%nuveg4Wr`^Fsdiy&HGpu-?~8z-W=Xe7Zu z7<HhS5*0$rMaFT>>d{W$^JmT;e@Xs7Hr+xQ$Y7+~$JV_+MEPsHBv6>-k`aqy8nUhu zM-9<mPosv(aLu79VtgZOhP}&%SKt}8;9kzx5J-c8#cm6*<ZKL>B-a8%#)3Kh=~peV zF4@D0d%L`T{9$uJv(CYGmGnzq1~;=T6Eru`Oj8z(h)E<(u`|z?FMs5)Q;+>Tm$Xm~ z?G&}Xpk?}r_4y`W%M6y)UYRBmhNOh3+S__s9aAi>&)ta|aE*`jUCgPJ8^sThZr;}G z)eRV)MtWXrqRjgmUu;bD4Q@hq!J#|l1o?B}7Z%b?xeWjEHY3)bVrO`w$M~}8{cNcp zV0al}#6~-P6;z%E0o7qf{R8HqEXUIJ$IYhUBn(6gn}WOjr_dPhHap1f8}3{a5N2}n zGANn<xF6x`)U~aknwa;mRQ>rythk!S)zV!3YQ1H?C`@E5B%ul#mYhbPf-4W-?NEmE zG~K`0Fn1Mc@y1^uQNb}xHd1fnZ)=V&dPDedHU2etqh4CP+I1+5TnX2={qAQ(0(2pr zmU;P$ZSfLj)is?&1b8S~rA3CI*tC^o-pK>OW~bGiPDYkj6tTwjMupZ+Wg(N#32+LW zButGAy&j21vWrc^`79vTVe|O}Cu-rGc{_&~#dIo9;M<4Ug*+3w@nvVmBdGEnl{{Q- za<<^^2G(jLQqExg1!_gjW{PlQ8ufX;7&)9H+ec&>un+pWvW=Ghgq{fOuj}d0f1UfE z*Jm0>Z>mVgt`t)3q3*}3%OYGZVJ>3nKg~sqJ2@3_C+CDfZ|6=Tj*(9{P9+oLRNyX+ zBMdne23<VhD%xuCrd}f82tm#~o9C@)ChU2vR7^B*PGLPZ0#|u+9F@uA@6ufVZz?fy zGUuScaQRhoJ88dq1M3A`;=0_OFwU3MT_Rx#IE;|TkO5&BnR!^ucdX+K;|nVEr(Yp& zgOCR~aiS*-_J}@FFsyD11yX|w6PabqxAE3+8I=jg)N;Fs&*<RSDfClnqy|cjL^_K# zN%GnHcwFUaK=8`<lemrV`RjUzz6sPFt6w5_1S|U72v)|ee#VZ)0+Kas?Cg`p@k`?1 z?Wh->ZYbmi0{PYWLmR$dpc)6~pX4l@$^SsPe_zR(?ogqh?RJN>>{wDlj6B|}6xHYG zup!#RiTcANq!MQ+*Rhw1IgsAiO<VOANaqS=K{_@et(Ct>My!>=99*w~qL9DXZJ>ZE z-atnO&7pd1U|l}-@99-SSbhW_jwk(^^7Q?8CXj!dyYK4dBb*d+_(i7*IXKb{g)Bz2 ztgrji9MPXf^cY9;X_6j7IjE&q_!i)J<mK=w$YLuh@XKNytvSW@Xh<u#DS>QAuWi7l zDY|jGp|t&}=in-#K{tH47(<&JnZn<owuEQ0v~@F-3mu8%mJm`Gc-rfAC|{{sf`M&G z(r4|9344Ld0`B5<ia-smlJLQ}6?bA<yp;ZAT+&=HAka9*sgD`QQ>HXcV`xvH%Xo;Z z^i1j!CUvJwy#&})vR=}mE|vpKu4GUhopH(}P-GVK!z^Hg0L_{i0NzW?fc|X$D-WFq z|I%AAnFsj@+91cA%U#W0JB2tW#Fzqm{9LRia>Bae^yAdzSl*zqlbfHJVR47)7&?Ve z)7I&`T3tYq=hc=vX-<8g&*qUXk^BZ3?jeUx>ss-eM~rC6fQ<RAI>*V{$tS4%I|47w zB}YcF$;#axTP^Br4jI5ku~cZyACNy9gNfUTtca~3(1vCQCyw?&LQ~C<X|`Dke5EHk z1tB|$H<O{|)#&3t;lVqw#Jcs(?qnQD!4CH{DXj5>QE2<2m^Ny9(KpG;KsfC6u7-%# z{4aNIl;-hot5F<$KX&QvyfGDLgl|<qhxJd969>A1?P~u8y2Gs$2%8|TPr{tq)osp1 z*q#7wscmbA_Uq*Rd)~Efqm0O?A^H;w6%m0y;v&!iZUJtEU|FHNnrw`q6cTC;a%7J7 zP`)nxnv_Azm)~D1bJw`N?TI%tT0x<uHgZ#$O$I9uFEX>j6^FB!1dbZ3fG?zx8kLkS z)YMxT7mgawmAQ8GH7UK4HlJt<Z_clz{eM6?S+iuTV#&_7L|_mXk;=^$RxpK#U1<!U zX6akWk75(kiqVz)Q6mw?-sBy7V@hJ7ylnga^U{lm!RV?(*7UtII0(|+y3eB12WkwM zoArkOzv|XMQes50%kqgmu|<TTLxnLm#t4c$cCscBqQ`B`FZed0AJr3U2&QWJT@CDh zP7-)h45dbx2J({_Wld<t*qkD)j#h?_q_ltrrl$uc#rB9F<A2|}BujX~*IZkxLFu-| z&Yo0}e@ODHYLG0!@}Mhjg+^tePP#MA5&a1_9OG!VNqVSL3c4ivB)a726OOS)pYj2H zDtJ51gDzR_tM%bMcaOKh8-`l-dmFtGo*OVPx<q-fHZ;3oCh2YVws3dY+v;uO?nZCB zw}amiub+XwSL;7CNzYDc33<D!bLZmkXpV_r>L#;7;Zx_9SOm)#qnUVG_F`$C(Ot5V zF<h#HjHtCG0-XJUs>Rk~^$1WRXNCt(Z~~r80>)CVi!V>1%Vj#C=t#kD8L=W2F_O=h zaqj42B$5=&j7u~af$xOLA*Y;3@&&48<*LTOk(Pc(S}Mjq3-nmJ3O&YmP=c4^jlQfi z1Ld649tQkdClAZ5@39jRm$hIikQrrsoqo@Vhk#Pv6ZlVH2W@YTclr9XL$k{IMEJ;I z#feFK)B5zFQ_vWRg50lH8%A6EqOipJ6e0GaQ}6pCF`|0Wo;$uMEV2HJ4BLY~B}gz< zOuaw@qiMGO*Vzo*cgOdIq^@htp=j5jtN{TRCj6lmYGfI`gs;g-;aVY_UGT?swaQXT z04debQcAoD0<q3Ys$3w}fjjLP4<5%DY<U@gU$=$Vtim_ZK<o1j*Gde`xje(Oa7TQ2 zrv27=#;k<b>ecyXU;<iWFc6@bDm!ND33);(ueIn1{e+xG-HJ$!u@(<I%)Q96$T^vK z0)Gyzc#NiOslDs;BWGjo2dGSqhj+GR!|oHXR$r$3Y=O7`n>sTrZV23vx~51d+H|pa z7dskaRPl#2e7iW2dq4p^EoUN~Ngyq7Y)gTiH}*^oeT~tUh;I;->Nw8P{1p<0AU3cX zxLH=*$v<GL$Xv=iN!v^3xg&{<fiNqCh6KjdhJ#-$`R5t@^p%{y{|<Gu6k0)^>#HdU z_I}t}=WXx<TFkHT6b_{DPfeLNKn#H1pN+sq@9d)%vvlC%)Mu8AeEY8&7|6|oq0}-~ zVx7R~XjyE;@x<+Y!Jx<CK&u@Z^NoXzz&hKt1BRYawj?_QwYW?oFcNefz#T{{$gftH z<<*NgQzwXs{D*O`Qj0z;;FyC!(T2_N?}Yym#t8)cWqx9S^pq~U&}71)fz)s4hQXEd z4sdLRX%LJ>=mjo^`P9IZg0MY2oX85UhB;(Zab_&@vJ^ibDnELWupmu!L?}xbL|D`S zO*#-;AuG?d1fn$q+Z+v+SOXF)vBs&`qHHAFhXQU|I!mUt>v(3QTMaBSsu#svc))-E zh8H+d#_9VyIVSev9LrNxb`6Em!eZCj=9E6!RAOmakT9_(^vUflw@o8^XY_R<FVWYH za-r|);zxll7%Fu)lEM396HvsL^^NMz50W6{x#V<0@{>)i!3n0ep@jYEH$n%0m5Vjs zfdO|`>z2n`=35A25Y8svir9z7tm1jh$~k<N$t($V(ztGX4RI{BvX%U`A7){@t<OQq z?LIqh&-U@`d#vbD2_k}oCBkQMvj7np#Ss(ZoKOc;o9WEVPSXC+!p{5mu+6pha1dT4 zQe6jVd@$DipP`>Rg$pN7zErtza?;mylPtXyW8dA~<FA|#%AK4z5ySpp=ZO&KYg%@4 zH!c%WXf2$YZl|TelmKi_&)Ar^7%w!M((f+Zn&F3fk-mv!0#N<+0IE0#Q(Q1OfM>dW z-|@(?PLwkAs*5n=q~yad^VA*K3Td?dlp1LKQo23TGi{6*MpH&b)S79IrYPOgHU?72 z03Bg-Sjga23S3J?9+;23fJcq+D0Y%+3lgm`D-lY^aIpptsIfu>q0aQTIbS>VwIGY? zDwWTv+3Ju)+U7m8|8~C8O2T0|44ia7o7NR{y1Kc4sn`B1CI3W;Xm=+ojC0tbssBT{ zUsEDL^8c+8L4?!Y{YRa3F|?gMsl0ziGNeX}2f)IGd{!9L0;58@xE)dH9+Y{7q0I<O zDyd$M{)C{8aWp^20Q3k;b%do^6Ks-*OHQ!KAs+2Qz{%GNwOlQKGsQxqd%SzeDSG#L zC4T$4Q>+nD2T|#MZ#OxE-UHqqeurusYQx^%nY8zyw-2FdqqpB1BY(tu$a|RIP2K_T zAitxv&EB~8$h&ZO<t^SJ?=X2=Yumgd-lLYco%6@M$L)LvWuNe#wDX;uAN4+B=esz6 z%KI)mzlZauy=UzFUhi4&qttg_5caU-xv+=#2VoC)TfoBv!69A1!#x)6FhP*WGv3QQ z_n<f7o#l6*ch386e)oIly$k$~d6V8N{66Hp>b=JA!`|!O8~h&d%HGHMJ?KIX5=hcQ z4H8W9qCyN3P|`vR5>(Pc3KCe-LJ1OF@-ma~iZA?IEif{QEvFbh*xpfJ#?5f}8EdT+ z>Km-{tb<1ZI>pi>CPz3`d&SDqB|OZq@-3IDwyxi;O?BQG5gUSxsW%3bo+{y-){{Xo zs<~J@`^O^3k5E31?loDjB_=9%136FPU2uci!?rFq%~)BQW>RRCeCTEpE_;eektO=3 z8*<LV(6NTag5=-~$O;%2*v{5p?pE0cNIC@;U|p@wvJl12>Wz8dX+i$E?)EQKmny+( zUH@O`q2E&WhKiG6D>%Tg1gOcf8}Q2&1^VMF&9N)uqEkGe<2XlimP86Ixhs=G2uYnN z1SicoD=|p%7bMMz3r5zK#NB6Uu+GZv5|M`dK}&}$-C$Dra2?WF*(m1#R7<bN*D2BA zu~8f^sVgL{2w3J90$5UJ*!$vF(VOeO8`cOQO7*V*g-+&Q;G-tSM&5rY{QpF$PX7GK z7bf30chdh|uKeFq5)Fm_`?~xCCErk@0dRf(hn$6o`UjQU#d(JABy|3Gn(kFy5_#_M z5BirA4IB<S;sewHYfWEz_4>q(wY!YFLMHyInxWyw{?&a=aC3c_Fd5y!L}X>NR|R_3 zb-tMQp|02a{^xby7u<~KDMMxS)L?M!XZ_xtKWjjrCCJvR{!Z*wqfrmW3Vis_vsVV6 zr}H%f%5>rj!uS5&b>AB+(DRv*f@>S~YLW%c?J1mfp&&EqEzUUC9(sCjv$PkJQmeH0 zfu&~&4%1hu7$U_JY*~#`$9Gb7`Gmc<P9tFtSYHHt@DF1R?2dVGGiscGLehhcL4y-D zjRQ5wG5s=|og$lGlb!jM6fD1b0-(87Rs1sVzc?s9$V(IIa4=w~GusohL-NXJm6;gq zOjfawvrl3edD;m}x%Nk5riWnsV2tDhQJ-2=XiKf+B~X}obXEOeVX1IH{W}`~{lO10 z!#`kR+q74|emnUH3$k?PRDdO&-LJ$H8~5o<7~}ox>*P<IK5zKsXDJ(?2sv}yrYY<c z090&QGxPsQqgA4KBBSt6@J6@&E2ej8(N#2-;iH`mO)NI^IAzyr&1qKePKzGvPf!=h zMw47HP-0gx2)DEf%d}irB~W|Z#HEs4NlK4ViUqf^T&;<Dkz83Ykcn`-&4*evW5S<~ z<lR=)52M-HutA9=?t-l!KYYa8ksS$-$-dnPl8$$fYXkuh6P<xqE=)dmK8P>a+2m+# z#X`{r#Ls`3Z|ZCe?p$gt2Kk-hIhM`2z=YB5F3mI%G;}6cw{#<Z`bp7`UPMl?sCg8? z|4t(`Olj;4Xc1%!)G@%4mJsb&xv2Nm^U=I7b0NjHmweh>3OvOf#6JjYQHj`*CLzkz zz+=jgpCSKa^f;^GT+W-)Ic7C!ybP(ynh;`*oJeY}XQ@J<x3>{+p?lY5pGw5gtzN26 z8^vpn3bRGDcYeM!H{ZDAuuTqq(@cGdsAv7>&R#hEdgbNkUO0W+Ogf$ZGbblrn0&Ev z=Jdo%*0E8}#B(p7>};&ae76K=GDi>zRo@w^1Ow(8<!9*f&~?_j|1tW?;;*h52tP~7 zKhiMBx}sr_f@heOMeUv85Uc|w(ST?$L}re2G#5z10YMp@vCao~1%vXK8SBiu8+_&_ z1E#s4oEs#W#@~#}kw;io8xWPVeAEc&1})Em`exft#jss`m=tj_K1eK<P%M|}n9j{F z3O2t$yB&)nG(`}QJ_X_I4v0TUsm|80k2NVYkm1Z2rnFE~<;>ZM7i`RiRK6!$1Lw>A z&*oP+QPvF2I(j%i$1_>LKF~)=#XFqb#t3aowYRSsq3&#rEJ0#9G_p26k5N}RK7hOP zXGt%;>!Fr!r4i5Y-DqX_#kMsgmxar3hGtfx0-(h`cJ072!Rl5-gR*YbZ!&@R|LzRq zg!ljTU}e3Pz*U0Db>o0r1Hi<xTzq|VjPU_?<;q+;@LFPN&fCcwJ)9&m7+_gZ!~1^0 z+o*C+C$4?Tm0vB8!!80AXtv`GtmM6sc%a#V#CwV6?*JdHYi2d}ms-UY)~4|m>gd*m zQZY@O0I41OSwV&g_hx#vuaWUKt@f>m0uKUX#4hkgZ)Oa}cD4V;9bjx7RA4^xt<rS0 zp@m{oJuJ4^2(v99;Nb4kEZwLsACSF4QT0mlUs=N6r6+b!1hsKi-Gu_h(URzVvQ!uy zbV6d6ad*INlvmmT2jTbV%sBBeojsuBStTD;Qd07;lKYj2Lf;bjxKQ7Kk26ZU8S_(I zqOh{cq8iDtIxW#FemvE!m2<0CZ{XY*fX&p(x$yxy2W@TP$KR@Co09Fy-QW-CTmk~o z1&Q+LYm(W_wB^^GkyjdZMVvlqLAqV^f<r3JI&sA%sxt9AEX$m)wiHX-@9YTYv#8i5 z1?a0!hf_NL`im!w+psBX*tF<a!|s$-QyebOUKSE|K`Srlm1)8^uj@f5fqs)_v+%JN z?-Vmy6*7XxE``Qv6!M2bo!LFi@+y(U6vsGu11N0?#(evn?~>piraWR%#E1gXVniU6 zVo6XyKX(Uc7WiG7o1a3_@BxUklOZVk(J{u2FY4r9f8mU}i|F6!>A9wj(i%e3*%puy z>uq~S(Ag){AL5x4nYJ_q5?sgcR5<#`w90cF=P<$p6(>HFm)dHMqPDs$<sXu%2=-WO zn01bE$;?QpYa_BOK%ivQa*n2)b3gCyucR<uU389$#!*~`qrgXtrG0P>7LB;je&vEF zaEbWw60b!POcRN6@-RCVgaLP14#vbbY9F7%(u)L7%4@AVZ6}<O=R15@d-yiyK~^8r zI6AdsrZX5Y3+K+CJazhY=M!R6Lp>AflMM;<Yr^#MVg3g4KBfUME-WJl)?vVJ0IMN> zqY;6*jpK+I0C~%8;?Ucg3iJnoF;Pd_dQ=%ksBKXhToz(W%F7)iWG?QL=^(dYx$&I7 z+j5GQ(;s_kpqt|j+8c*jL_G-Jz9Ig0yF1(>Ja2G!qum_|+UDB3sV7e&TGAW6tsR?V zIqtbF_S{xi*QE_GGxFfu*2-^5c-s-_fEkRKS$u@Dt$csN+adS@=737Pm$C$4x=%UY zu9X~d(Q!LbjBN5tt|aExthqPe-+nie2;y^d+;G3S`^N-2XCIUHJ`Qp*Dsey_C=iU& zRVbJ&leQk-DS#dd*n9>472a&cBnv0ViP7`LS~!u8QBRoQ=txINH||#wA$UXY=1gA- z{$k>u@n8`Fapa?`Au_1#r?z%_uh(>jm%1WqwX=H<Ju&a7S6%V)>YxAP?|i5J7f4u5 zeUvBI!vY<hf|vXMS&31Q37wr&@@q<(O5RlR2nmLHL-3Qz5RP_x7GyO;n+~I!th#0v ziAuboS@a-}Byywjj0*l~$@Hil3h_ZqhV&NhK8P_fM0Ft<a-$k)5z^G8!zR`^CknDI z#Rlu8QgBJ~mj+?MOFgtA2euR&U8Kzo4Zt)k@5QiuAT%yimmz@WiV#IC$1k2}6oiv+ z#$jdA*0D+-Xe(*Eq9#$z!<`H?l%^PjW>;vTLq686hq)vYUOsrCKdsxIlHRUE!5X1@ zYuci^u|UB@Rw#&77hBhMR8VK+uq*i^5(>|Afv*!Bp5k%a76ZvTlL!S7x>m$I9B#cd z0wZV~&M+&{Ptm$f5R{Of#aO9l1LLEnqX~nP(e#V6`{L{6Clb$-2(T{K#*{Ns(Z%)c z!SP4NA31gg(s2e+(ao;k<rCc0(aZoO1)1j9=Q?;JxlWc4W8y!oLOFl0&JEAo^AYf_ zCw}`Q6#kTYdYG!&?g6QSkV)b_hyc*OZ*7mSk$58HFV--UE}o)JoSrjF$JGBf6L9m7 z0jD@=vRXK&P$7uqXd&2=V+eU6g}iXg$qQa)HFGY(h8#n$b71MqN&@g-g}cuo_vM$q z9M$-FSK~@n_2D&=rQEx!eMOr^q*ik*p|N*yFXy7Llj5C%>6z_2kRSRoiPgT<;?izp z1Vv;of}pu;oWEjD{2De#?qB;!7=*kTp(&yGMqa-VGxZGco8xzIYeKElRv<uFzc;kf z?`<#$>-UBYsxU~Cw~_N4zayq($glLb3hZXK$si2Z(E!3m+kY{FFw+Q(A3n&&M@PHz z0MOIRoQ3jieBN5TJ`gtsA>s=M-V*4FuGE%U{l!vtSkpyfEmZ5iEfuS|jGnn4(gcSz zV%Yzb|A3%OqQazM;^t;fj~p&t_Hba7uV3pK7f!S2r&UtifioRQ#`puW5+zHY@&7gF z?I8pIbJe96v4qzA82lRPFv?(JMzNE{LVLC8=E6?ZeMoiR%ULID*vp~!h+%j0V!+Ld zKUCRhUa(w>jeh*)PCn?BPS$!we(c({p=kl&Z6^)?X+3E)p%-x(<NKbbkV@c}3T}4` zyfbi5Xc}SZ6|g9i9!eDn+oCWUs8-CK<RQ~XM$>Kg+UaI2a*sd~%{a01(Tr=sHA|is z3k&3q!r?O~-hmBPo;FqS_lJrwW)Q52<)-{+!w4^u%H<F1m=bAN<afoEI(dJpMZ`a2 zc%|OVB1!WWub`5~?0_>X{q{U_$~{lcfaS2_Bgz@H9Cq)Ea)vC2wIET>2Frn^i*kn1 z0Awpj{{*ldR4!K|)`mfE$gag$stubg7hm0;+)>LV0%lL{W_u6*yvh~!uWYfL5pPqJ zv(=s?VrKVAF>13Tt!);O@Y9_4vjgGgn@MyCpKk3?%k2J6?h{|p+p?O+t*Nl&w|043 zEo#WjYTxo9y=f&6PTS^06fjiL<tc~!?NNR|I+bnU$a}67dB^WMEGZ0WaTE))_pTII z`e)2VO3w)ky_dZ96&%^`qsMmW+g9C3V6=B%wmP^{SQ%IuoKc^ZXz%?u6SQ{1zGk<+ zhW!2&?Gw0QU-Q6~yq)K~&BA-LhW#iZ_nLd!&)wPD=zQ#|G3~T?i`%?N3@x+=;<3Bi z!)xPYw@0KG0ezVxisO*{S2ZPHBWVvz!OMg@z!*b%YmWR|EhQ^T<V<l(?r?R@;d-Bv zF(s#!e76$C|E~Wbi7%0>{*KNLaOO)JaZARf`oB_<f34&{k&NwexaS=eGH&N4XGBS4 zVQtIN>34POv=U=2Pw4C!B}SmtJf{@7UuTBu?$g<au!9ty3k|C>g!nS{b%sLj<HEV; z&R;m`HrF_=+dfGrGc`Xy=l`EN&DNV<-Nz43sC~idIVHGXAeNOe5T=6c@(yYcn@6#- z)Y$MJ)n%S%WeRseV!olQg7&x4C`;KA>aRM5dB1*1PLOMPzP!9JQUCv{(5JNciHw#J z=#bV!n-0l?smnx<VCPl18T}IzJ(}5(%w@G$UHf=QZ-N=eo|gWE=hLjrOl$k1_J$C- z2Jeg%2)w(iK#;T`9>YZ=FrQP2uHa0LEZRY|*4)kAgl{1>P#Q1!G{PO2lG%`KpN(<a z#x4gh4Ogp~*C~0Yy6#jxG&|V9Fv?@ugkaW1l`sfn^Rk#g;v9vn>jx?<f19p2qdk1M zjpA?VVH?Wl^jt6H>h!BQE%(k8jB~(l574o6*rs@g1*M`+lbS{yC*W#Mk{~A|mb6kc zDb%%c-Lj>e7DEmdKSb#Oc@}>#$ivm4RhW@-_Y`;fTo-Z%c~NHuOO@U@etA9&?gkKD zZlOS#SCnvBzJdtAo+(Yu6xN7(4v9oEi=05r^Mvhy=5Q73a@>lvWsJb6dS;WR&!Fo< zm|Qc@JgvN-TZ07*C6(Qy{0$e*o_X&4=?j%WL5L~Y`X7=V)}u}SSg(j~>^(Zj+(_1p zfUkW;wyNhv&J{^Xt3I`+hG1@8gL`aXqX9^(JckWHDC@}QA5Rb|Eu6nJ3(T8)xPszC z$sYrfW!y3cNoWPK;!3jOtj$SvJX-MN?7&SpHj^Ba?U{3~w@X!myx7;c9)$x%xwVK* zi;XZ{mbo{_yFc89O5s7|$72?=cr5ttSYT&1F#j4KWKJN$PZYHQqN`syckb+YLUvXR zMG@u2R&qOhX~4gs!eY_6<%$?4Q*QjBYKqWTsQt3(pa<5DgElDH(;bHa(98(vCzlyb zwKs?JzzuNF579tq5F$qG(_9#WkQahF8`~o!IJG>)xh)lrf+S@Td!7w~B-z@3?L=r~ zT}}W(EI0zR<N-SaBO(+O3=a1O8!}lGT0`7@=eD~Wf)G9z!okx-aBJV06R3LRFUE*M zEKFA^)na_$7+k@>OqRF#0JTfuE(eqn(QQUMBLtdag6MQn);aps4bzJ{`(AbZ_bIVK z_+6dZ^fQte4VNR1nv!O!2<?{<G9#kCRzCG&Ghc-KagE^?s!e1@QKOr8I-5Q@&CAGb zV;Ri!Xe@h-WWPx*^l}2zSFlgh#l+GVSJM7ZG8UN3&@v)+BIxFpuCtdUOc;Xh>}nnc z4^18G1zEovF>(ZiQ=W22F(w7fSRV}DmcVG%Ud!J3KeW=vkpdnHD}4c*$J0#R+_gh6 zc?GE}jLA!z9vg^b*@IeFG(@1#ygK9)Jt*;#={_XmX$4KGDKn0SFyg?$p}A1!zd-0p zNu7Q*$cagS#<ks&)MxCG{}Fn>{zoJjXvAT}fWYY1N#z+MB#dSJi2sa6_+RMqYfApP zk}kvuL|E4Fo^oyIpI7k{N=_;<vi768`=SzqsN=e^1};8E-b;du{S*^}k->x_mLX&q z<Y^#=LkvTXb&T47VJ-G`9TNdckMvc77_K+z>2%@Ul>Z=ia~8UeU!2p4wQfO9-MSWJ zEu7=~{MU)Yj<?@UCb|p^=rQDykjDE5X-&#sqHm^rpSlLoZm^gYy+#2KAY`*uRxl!G z{3W8BZva&k(0@>C^M}!3WM+qNCeW3j$!Kj{AqqSC4dTAfjwm9#fn#QNlis@0hbDu~ zIt7@k0-DhkVn8bjG||&DtHqUKYYV%FCw-x{(G?^FwIsOP-%#iZa$`^QQzpGq<Qo89 zK(=u0)2}5A5pETUUnRar<6c02o5?nl0V>>%h6Tyhp+b)u?41p2-+|O(dZWgR*n3_6 zXUN~Fd|7UZ8$WLS1*m(VM%wywcD;e?;ov$kyUWUBcCcmknbtk6d&RUM<8Wv8KI#g; z%atgt3{==P-rnfS+>Z=3FuPlFQ!~d|rsZU$Ei1}TanPT9@gUbpWUK+E+DQA=XsRic zL15awO_c+cB!a;-{#oYw8pq3VWl)!PHn#)SZ+Z{MRWJKL{>e8RpLlre%|>8DdVo35 zDRz}Jot)Fo7~ip<r^iY>^9+wX<Fqt8sq}+!eOm&@xSJc}gbQeIh+T`}Z_D?gTR=Xy z$-}*w=6-vO*BPBaq*{-97^M*3<t&Oj^f@V?ZRncpeL8)aeW{5OvEYA~s@bn%q9vWY z7FfY)%N3_ZshpK+x_I7c1WNy(s@O(?tjl0*+=Fe|>y-T)<me>5ZspYJlV?s`@Ox=k zXCz`5T@O?a9bPBz(CvAL5BbJOzND5)^o)7GPU!M134&M`^%<@+p627a&twTck(C3N zYD+FE%%l4H!@6}u$$2G)71todGu*f&gm{q$64}u#t7lWiyreEW=PHv!VTC*;G?}uc z-Fy19##Rvwi>xw{MS8#pED;RTEc!yVHJmE(J1m1?s)$GK7DK1)jlJv>99pEql2VX% zI39L^6SO6nrTyAU1}!~v9fG<|nq3iFG!I5(#Za*h1hXxrb3tjMLq?@@>y$nQvDC)S z88pBUYG!3V@Rt5)G%KTxS)<9>Lk&@wvPY}}-yIr16q|nc&~8n?7@)iL&(GMrdb43x z+~$3^7Yk+Ou%MjtUSn)J?2kyC5>}TuGWk4@`ch74xmpva1p;ju*$e}7*hm|62u?bA z_x`4DuyR~rum%FE<o$g?fQcPxsVuiK(iSLuNAGySB8AX>C~_te&#S>R;o}%5C<IgQ zYO_?Fya<#7`8pxhQ`+|8hLD+Rk$Y0khv&gSa2NDgX#a@@;&68$ruioO3q{ilTs22Y z6o%y!1FL~H^aoSdaO$%j!OK^Di?c#%{E&Z@(={FS?c&qwaiNiC|C#zrb>|Z8@jLd> z;qj*lGF6>xKFdk?=vp-S?c{+8Ul`Uv12^QXdGPr)4Hbb?9a9vtz1`6@R%y*pUZnVM zsA(FLM4CwNcOJmQ(ae)wEgHa|<N`J}!+gTx73n@;V71m)wi@^caU1Xy3~FZSV`65R zMQ{hBZ0+q|XDvbw`SMkGg6MfMsXaC1O?#?Z;8<)9D`v9F!x2diZS^6_z)<rq^L+vq z>~rCH04)8c7RdfdfaP#})=rq!!TDEcAc&~cB|FBiUePev%sa$=Hxa+4GviX%j8w31 zNq3~gud?U1c8+d34%cR8&Tap`2Fm;?-u0UrL+Kb3Oh+sSAWy~9kl}NfUxHQLaa<1{ zipDj^^Mf2VG4&lwKL<DCY;ZqeqX;%N8^M0rkQq00T42*6xpGf_-g32zG2<KE5fA(3 zdUtSX&iOoxf+y#HVHwv7c?9a&)oh@-mYDl_$J=?i)odW*isMcBUj?TVeM6;HyEOgo zoxnxXph9b53ZRF+_WXIbu?GrZb*l4gP=rC}_=clW%&8&NJmYM0y*|I#W7C2F-I@LB zqLUt0#=N?A(VacHrqPtnw!JBa{LyyI*&PPeX_6KEWSlD$ra=Hg!ByZ#ZJb4Cqp=#V zy!`x0e6k(0VPeupdCV8LV|)+B-S<?fq58*k_PCNR$zOvT#9I80;A%I;5*b00WF7tL zaF!_PoJ831e(xICd$lQ%ft|V%^1v|g8s}trK;R|!19`5)%qJOc7%=^_J7#>pka#^@ zQhNA=v09}ni{eo+DBuvo8I2cX<1BC8fiNSZf>?;Ti=6vhHRjwG`p_OxH>p=T8)s1V zDG+)EC*OI6R_Sc$X4xLQYp38Rc{t1LaVk(a8%6Sqxjn7r5F<%YXgAGaU7~)L&8<au zFxyZYpf1><?g1O3ZEGb*okvFHyv5#JWG8y(xNjx{t;mbw+?v+Xcj3nCt!QZ-dd*U8 z{L*;I>A?0Mee|)h(lgKEXm;eWSf^=8Fnw0x$1D>eF_CTljy@PBd=EywfI3p%0PUfO z+L;n5BD7T1UFK#>noI|LCC7wKYQ%n*0-Zt36tAEvb-KIt7uNXVdbjAsDIQ@RRpj+= zYQUa1>aEt<qG5=CAUF5Eq}8(i3p%-aQ<kG`v3EqD<!<%7M9r|5#6C-FqNC3;d&~Oo zl2$LVBle=$$6#~0yZ3bR7v6Z;JSx{;k%XSKxqNlk`fuaT-M;P2#7po0wz<ZYd)I#( zckcFW$6vIiJnQ$PbimV>{nGkx<Idf_?fEkw@NH9bS9Y)eHtyWz+X|;npE~<KU1<P0 zGruSHz8-*_nScKm5^=CEgnRLYcj&_c@L{o+9*n&xTICep?0J<in!)~XFu}ycYgIrv zu`|wYg1VA@$(6iCa)<ZJ&RDy?KlbwYY^YtI7#scnYzmD@&qf)IO%?~{6p`O@y|bX7 z$JSe%uT_A}x%pO;)qOvt$Nosk|3yMzL|>b9x0ZcTfB)M`{%<AsDEVV0DL%e4#QtH= zy>ezUTo+Y1IdS~#iPIA=_%bxx+8SHH;TKf8-_{&D>y`hY3dsAmGk}j}t3Dm%oBztg zx;dgm?$y2-|4a)Z!;vqmg{i%L={SAK^}a+qUqXR#l}@`L;^q{qrd?RnrI3_=L&>rd zZT#x5D*2R>x0QUak}gYOXSVoO5b_t&VC##VC|Ib`duTp!26mttKp7CE>B6?*A>t4W z6%G&N3L6G?4HO494m>*W(Sgn6ZY*pe;QdUYpD=F2g{_4G0r2g~csk8HqCXj0j&U@9 zfVTC7DzLb21Sv=pXEdYW1VnEu60<E^9;gi}@Bk6oUbW4S2|G|5kr3)-Ynx^=cwqIv zi#$Tmff4UD7x|5=&0M|iBEKmJ0atHW{5O@{st9me8}r3<d0P<oZF>+NfqhghJi^W( zD8eq5|0^s)vV4#Cac{Tx0B83S3Sf`7m$Uo4PXwV5N`wU%^ByAaey?I-5R&EHE(ijl z2rgO>gk*V-XCV*>MquF&2u5I`4+utJVGjsKU?C3(MquF%2u9$79XuQaJ2(&oJ2)5w zI~ez>7VaQPI06^$K;Z~J=DkEa4tp-(!I2=~!J|RIgU5n^2ag8<51udqe%c2h676Ru zu{FUjn1TDa?JmF+3Zk+q<`G&A+av&I_*NAwqKkJI7#4g+HF3(sG8baboX4gm(dcgj z#}*F5PG5vZ!)u|<k?(7B6fP@;47w`}34@kf>+CHGt(X5I8e$|9ZA6xCF2FXVY}e8^ zTSTo=Xc=2Y`=-a5AD+QNT1lHnjtqEkaUP*%Duu=&d}{g$XZ9JKxYOPM>xw>u{8~h_ zpzA@de}rqjH;oS<Ppl;UziMxg!+NrT=ODR7G|bxnG(%l|{;vn-n5<p>hJsIGqRH9S zZzE49DjV?ZQOQ5VXGnXc7IcMfJA+=GRsUM2gx?WRY`OdSw!zjW({}I2J19{ZZR9LI zfVA_j%(H0b6P3*?1HttK8gX_<wXfW2L2I|!`F83WnB8Hfq@7mBuH`?rzT05+zh~cb z4>|W*8J$_bqD$Yi^l5wgKGL0%_LpU{9GWf3a~VBDVs_i?{gM=I-Pk0e!)~(!{7xV| z=*`iy=J9lhG7nG&9efhqdNR=-Y3*t4T|wI~i@|G&Hxk4Z?q3~zYw&e5q~ZznB_v6; zY1s7p4I34G)hM;drZ6=7psr^3Y3IvT8EFS*_pc18RV#=yvpaz>t}Kq(P9$28wTU(u zU(x;lX)8ZwLFYBzTcaIg75i~x^?wJP&$6IPwsJz{hr4O88B-kgOBW?x?i(*%RM`G~ z^5Czrmn17l_WApW(i%4bAY6vRQY;>FFo_P7_Eq&jNr98`ma^!gy6hH>*JYkm*dO-Y zu!o%Yb%~WIY*^^-q3~3!L3vih>d*>-u(9#_*dwV*OfB0Zl9qRck&<nvbWwHUKx7|i z0Z0y%STn=d+78EZiPqPd8;9HES*Q92x7kb-<(cZVrcP@Wv>Ay{C{*pt)a^aR0rG8^ zED2Q6dz-`o^kPdssV2IoW@wR~3(%)nZH!uo#<=J5yPxDVM}Hq&)ZS&gorIpUe7GA1 z*RdEWrrK%$;i*pQ#uQ!%vpmsBR^6t8e_HhQ3OT3TW(Br}V$zjKRd0+v<h;v-?d%rY zM(JHHE|B<<PR>GNHx=2w)u?FWdH>I=^k<dG!>p69PQm}NGpVV!CYAq9<@ZxhZH7aO z;RfoLh=Ee8XaPX8>owu$)j+XSovc@zTD;UL(y{aYT<v;o&i}IV^UmFfz|Sm%#c|hj zmfUaXUJlC+rYyXS@GuTy#5kkG*SYPCDRN8m-&OLxO5Rd(uik20ktsetsk}c+f?@eR zop(LwdcVnkPY?c}5@`XPZp0YEA5z|*CFvyHZpSgM#uyrLeW%2usws(nIqAv)B*WTT z#TAhknmo^>D3M(wM=;zVykhWcTMQF(3vV^7BPyA*z}DJGIA_`f?a$~eCekfPsi*z( zMv{B5t|$<;RD9HIs+b^NiD+myUWs%s`V%qS$ng?K^Jn;|6$OA8Rggs-e^KO`tFECu z|0_#vP!ziOPb{Fmg)r%AC5Oj=#Wp5*V;`{x(%Oe&wSaTJoPcqsm22qd@WBG%V!*~Y zTJ-6{Ran{f4hWr|dYh+mT2h-#+}LBNR|e_6xB770-=hPAi&lAonBPlctY-1H8FKk$ zyJ0E)q#!Ax5-u+MO_qq`tiSO0Fk+)JRvS?#{=2p9Z49ufUY}M+*%!)*7E&6v6@um7 z@B{V+b`|Zu;l1R-e)kT}j@Vm7E^(D*GfUj~RiE6QsSgD<O784xKg*lxS#z(o-Y|3Z zmH_?tYpdjBB0~3=eIe_Zd0|3^>^r~8S3vY(LZTM(CJfO;M^#LLjnx&nXh$4+h(Qbw zf`$U@3o>yy9h5j;az2J})C)G`KB9_W$JHuATqb68_m~&r6aslF{-|h-aFzemL!5|M z#aiIBtRJu=l&a<NefqV(+iIyTP2)*I%qcdpkCVaPc06^d9oBJM4YtgA?OxGq9%tv1 z;Q93*pTcZ*gr#h5Q_a|xR%)~;r@Eo4?}(m{I{ko)MkR_QXDTC)?D0!LOI#6IK+w|^ z=&51<o~pv3)R!nW*PYsNW4&&OKis=h>Dte*4S?2mL(k*4cSBF(wQH9f#-Jan!Di1E z6$*|$a3r%4`B0Ft64mEA7GRA7!TQz5fN)Lo)<8+Mw?A;2z$=-(se7Bdrj9kBf)2I^ zHa<)xH$LQN=|h74?`g!1l@I$Ncdp?>f5v)M*!Hz-v;johCdmzBJieU<5lpoA8ib>i zMmO(*7ueXTV-}|c^D~R=C-v>*Q;re(d1z64XXp+Z18wITy4U}9as^iCMtkd8X35Qz zeW(2Ihmy5N*pLdPANyX_iGXd$3N^BrCjZZKA1j@hp-$h~b0;U*u6^=F|L^GD*OVCV z@F|@cdvS&Gwu7FFn<%!(LW*l{<8Er+(Q7z~FR4sUyQf}i+8*Ye%nXp)>1$T6*F3F! z_J3HlE?GGTW^Q}Vu9C#qiO*5suZf+Q;3Tn4>_Y)EFN>bDxro6iVsh6motDcsg^Hj* zY}a@In~TM;Ikbx<5W9hHg);4dfGZu>heUQiF$dDh7*n7%3-2o#i?BJulo6RHRQB<+ z!u&ncGA5n7W$m#ksZk4n`tEsRM)VLZ3<CwNHxfUpZeG)=Un1|ns8c!Q-btsJPrq?V zG*<oL%ak2itNOUu#9^KCA2@lxPFWt2s$h<VgECs1P+E%dKPb-hkL6M<Aq?Hq;DxeR z`tbOCNYAKKy*xga+60(=Dc}IaqeL9QY5@WAlhj#&pZev1lgPuhebv>YU&mM2b;1AZ z?<879ZK-YV!~049R`dkhUF*&I?d3$^;0i3waVFC%HmE&RlL>s+;|eu+&IC%~ia<`n zzNSru*AD&{8KXPSaZ~P0w0Bv9zypiS@UXh;M6FcNd%wmo-L|nd^FD%@PDamn3NMgq z=>5OM6P=;w!jNWW5_EfE3u63>+;%9y5QOjm=Gb+Bt}__oEhpa?4E|-RC>L=E5<b-G zmxikAg-qPa+5)~T4i#<#?JU4aY;4W(5q8bcoYzWlc_TXvApdfA4y!M<zX7qUCIVmC zw?;V}qtD6vg6}{Gz5v-SfGiD=;VY|uFyglXtzWj)&8#5DFIB5@(SZS~8881?*0?Nd zOO{^X%~S7w0dEUOWa|EE0FLOt#0t0iBS1}I>}5488m>IJrP!V`FuaYz{{Ie#+wMSX z#sfgy3HcO>Sq~1eX8f37d050RWDf)br=T4XEV>=|1b`0U{x)Zwe6U}lAAw(|z!m`x zE+xl0N@ajpSPu~G&Ax%(53BfkAeX1@g1J3{xe}#t<1?6(*;)`cfFoWCm~%FNpiIl3 z49bEhUGx5mrpQl_pqmg8x6MTDvm%pFnrx94QQqd;B!C7nALNL`8S)~s+6-qz0++Pt zrAL9<NP)(_49ao)GN4jr`AG}+WMn@Vwm`Aix=$0%Yg_d6Y+v)b)oTDo;C~CD3P|PJ zbKSty;b)ajYs)a4<_>Du50qLr=3&zt^`@~nF0_Gd|EEB<aZb$f_(F_mq~YxYWm*@t zO&D+D{I%$*#3T!czRa%+d0{#T(@`8&-mfY7h7y_HJH_)SkDon%!uG8-&5S8Bf=wr< zRm@Y;i%<+*y{M7h!c7G?740W#L|VMUC@Kl|$C4S%#?yt-PN^h+8Z8|*TDv)+2O;+; zH(ij3f`6|T2d^XpDOyJDbXAI;Xw5klEAmdXWDQ#Hv^<fblD(gu&eHU7w+FYHG3SP0 zN2y3T`BH7!CV`N?UuAiqXNtXQSo{1mn`22y*E>F}SZSbgoQ7DqEvljlwYQr#9xK_C zrpi*?)n=1jMQuD$5i+Fl(YCEX78ee-<`1G;WX-$t>5Pqbd$Z=bh1=Onlm_O%eGX27 zMTJInUC}9oUlT4ZGG6kVboiRV?DRzsy{RD;R!`tvt5uHX8*76Ym5HXEAWer2q?COc zNMTxjlTG1g_8_z?MRH2EKNnkh7%1gT1nNSxTYzPoCa{jSca&WOfOtn)Ic?;sInh*D zBa8Q;N|Y16qIXQX-H20Tu3`&v{r{TJKy@kopgh6uWGOC2ebBrVbrfrNY>$GG5Zb$i zdU{IWZ#^}_N#KlX{UtY4fq47-@3MdR$hr&CLEoHa%~Z9=i){T~u}<@28#Q&C8}82} z**a>vnyuM-fx~uQG*?v&O7flRbyO96!8u>115Jaw2F(0AHx|`zsuLI0J+U4WFgMq8 zOohz-wL6c9;-}i9*TQ-U%q8D}5M=FUB!l$xVzJvc4hu9x5G!>gP>LTZ?CLhy)g&J$ zOI^X=vjS4m1`;fc!-{9#i6E)jEO{)Hf-})oUTaf0!{Vao11ROP+S$cw_<>fjg@q5h z+uPjlhcSMeXK_j6iQKgx;hgmsI&TbdKE&HMn4Jg9FL6b3v%{-}*5E901Z@SsxS$b^ zO*5>P3F`Y6*Q2bv$@t&0cz~NBcHe?eO3ZFv>D!(luEMukTTosG*Q@!)w$@gziI}iG zfqHQ%Ec<k#ahZ2*3*NQ6wSBeNc$J(TLC#~Xo#dP#XIGGOu5}M<c2cbI*Ei%F`?+^t zaBr$rqVyJW?hkTWt=;6{S1BbVeU!vHn5{fO`}gp>m){5Z-N!1Pt!BIXDmnYf8Ec@7 z)i2i%@%u0;&urxYf<(4*ur<y%d~112Ykc+*d^PuCYvsGR!{RerwszQTc7N!2LFe1q zI)ZKOA)Yxh`zX)si=KHb_Dm{t5)Ax7i>*>?cd!a)&PEj`fqL9I5ghG2HTyWNd;-to zY~@LM=4f>F5sOAptZL!JanwIx_UalGXL`-Ru%_87EFY3FNL-i|$AK{XY}yvH675He zi4Zj39G{V|24o2nR?}7GR_!dX5yjYe>5chC(Z+aXuqE}G<x+EAsMN*R3UF|5MCPd) zf_AO6Obu0!==Uw`W4tt875QpCC`BPA16$ff=%Oa%zEYDY#dZ8DA%*CL=P;2q@GH4a z04JewiSc}FyguuSJ7IF;ekLp=LMJ<?&$eLqPVqx`gWFv&{Vaw!KK?2HzbDsOX+Fbk z^PFK5dPT_de463^lpabqYYUwm^$~u+AvE*YG0T-1a{dOjXp2IkG-j>0<xdS^X1CF1 z%M4-o##K&Vz`c-VKnnCcZ@;)3vEL`*aJ7Eb|AN}Gq~t&At@Z=~q+Pg#f}WS3mU%F_ zn>fHJdMU0yvPP;7myfHOFOMg8g)5nJeQK#zy?(Lo`K9pU5*PQ|`?wRi30t$Sw(3NP zypNmCi|Y4OEWL2UvvAc5H&oAV-Tf)OEPcsG)&&n=@>S;px*?m7^#Sp>uDb~OKTDQ{ z(T6pCPh~_cu>CoRFxy`z?fKW8?T`Lr5Nl0aT&pg=>fviAW1VYKFE`o|VQ#t28g7UX zNRCeAiz3a$tyC0RT!?kWffXw?z!p#$m{ej_a=i_A_5s4&XyuT^UU$gBJ-A9`EPB5L zV=2CzT}@Uui7zb3?4D8YHi<XvzaAq(LDME9k6aN{>4=ODDbgF***K>qd>1f<eG6)m z^ncQpra*n<KjNi6iyN0bN1!;Fg(pOXIC2ZeM1f{fgzyW>a19-5zR52pAivEssExS7 z{4`4>mMu7_gk{;vl&Cf24|Ma$$%D0r$knREAYxAZK6i#WHd6a9dqw$-ur4!vd(!`7 z?u~Hox2cJEwXEILy)-m7H9JcFACo^A&&L-TKGC9SNi8(g{-tw-4VP4F+YAa9DM}Q< zW6g5kTyBmxTOK9~LoOGYuTunIFsuD3Jlhei<{NW81`nZ5V+BII7BYuOT7+wm&yQpE zow<L~U!)RH(?vEaIXJh^w!@60Bi_A$g#=a}la{wQ9oI8`J6VEh`2?d%)W7B<dz<ad z-ouBQTzCiedUoNpckcBL?mcwGB_*9b6(tk?F992d&J2&WQwN`I=WVTfYkq9AA+Ju> zT5XD6C*|3UEa^d;g7@pJ>oWKIy8Htr_bT}tB%MB62GpJGCLcVjd1_8~n)c>-7swBt ze9+PBGIv^T@=rDQ9^^5i#Uc)BwU#2GXohHOzf5vh>Rv3?S}<bK@*+jCEkiP;DbGqL zDiOpchZG^2908N&*s?8R%TNS~VLQhHoYWi)6oeK=ix5(_Km!dYEQx=PXU)CJq)8@_ zF&_#Dt!LkEvDDdxMxmURkcdfBc@#@XpWX5qPXSc8=02;}VFqQL&KryOGxiMAq~{s; zhHv65rNtv**>48*qsofapO=CPHm2CZ9;@(etGG?UB%&#`cNSO~&je|BES?^+lAgQo z7+0QbEWOCLY|uA@KF00&Vf#7-rKXnP+!kKTe$2w9{?BHUyj8382}Eb_Q+>9v)<E?w zxZ~#_?jh3=@*!(f5Mg$-XW()WeZz%8iqDz-c$UMf%=<)<o~h5wA1LAcJvBd9pVl^5 zR}PeFt?BXg`Gt5jABuHw{LY>D1>~C(L0gOk0SCaZAdk~N<a=iY#xEyu7aA{3D*Sce z&{MrW&j#)uemgy_f&hu{x)@bq9!rLf@I*56a^N||cFI^Ww66`F3y0Rk*gEIMD|6ym zNm$6SgjIHBG|ocY5hH-oAgB?nb&)$TP=@}xb;s+o*VLBaxj>+|F`d|wP(}#d;*jND z?F49|<Pjyfr)2><7${!wj?(t^(L>sR)BvWp7$$lG+w=w(51ZfJ<TB8ibmjAas{;Wf z+V|mr6@nt)iUurbv!Z3g1exlqJqn>!H$7E4DRaI?X|Lbj6y;vHQpZZ5Ok)k(yP`X< zG_+1@-d7M9i^oHe&+z84q_K3olAVOaG<FKu-WrT_vy;(TXXJ#!q)*$PSFgESolM1> za$6^K9ijX`!_)phR$?B`pHpS|fK7JVf1zIXsb@(hGo_Q}o<)4c77#H^{x?*nF9Nbo zKIljmtyA+qQ}RtZtdpEsD}Db<?tM!L`ULkA{rEo<Wy0C*l(I*5T7juDxBv}sPuI$K zXNvgamQ~AjXgIkmIht<wGt8&x?r~Zgt-BQ#k94s=!v&Znz}~GSo;?y2r8|&-D*KZ{ zmx8g)7NtGRVRnRNaco45uPf8bqIETl{S}KOqX0pKpwL1*0^)Pl!m-tabA_PL4(vZf zt<=^UY7MSrBYiFYKP+<MjjEj`frEk8SJ-v~EDdc7@L#qn`u$vh|M<?hy73}lqm_I% z!-XG1(3Pm8*%<l|#^+!l0tJtbi{rLsRZK|Gj~ID36_`#IZQJnC8e|)<FA(2?Ey&gg zl5$uSHtMp)aorB+?`)&=8Vk7RZ@|FJRa*#LSDW}JMs0UE3CWC@|4j?Ij3%GCVJ;QY zUdNlV&!4icFw9u0<JbuEF7)QMc#9~AzIom0ZL@J~qm#<aqt2EjOaeVIKe?_N+mzRb zbazIHaWv9pJJt4Kok@#lD`LY1iQiPNRq=+-rj@Lx*#0dZd<^!(?O2(|%uPT{qy#2| zJmOGpb716-j1|EY?j*;fIlwG4|2N}cv>=0J%dqV@ffxMY6_(j8omfdhr=L~`6fyq( z(^5NW=`s+VVs6+XW^~{goWV6m;AULO0Ro_imA<yc7A6xC*vr0~@N%Ektij(+d;)IG zX=;Cq_}*|g#;*{z1+F5yEZ6IPQU8FK!Nof|9}Le4dfUn*h}=|EILFl-K6QIEL%cjQ z>l^PRFvcZjhqWcWdAh+BnRgvR%4+Vd9G-P89j`I#Vdnd)S^{#??E-K6QirU!1)7UZ zpU}Di2}V)Qwz>2El{H$0h=Z^>!cx@|vAt^k0olk<Cpauz5=UzVSQcZUpa>0)L=Xqr zup%S>GoW{HxrY|@q8w3s)Dr|MpD`!Y7H8mH@h|b3n4;KTwZ%Q{r-I<?j2cI~*J(zF z?zdGJkBX+7h9zFtht$nZ)PIF8g*5fi0~PI*)r{1&+yDXsb**qQLlrGP6oZdwVotql zB<RA^bJeR;UiDc|uur*|dN%kz4C-+Ott(C|(gdb;^t2!B=IHO<CeztO37@Lm@?g_L zK(DN`km;ee3SuksM$BQ@1vyts2~v5P;q7D>HK4j;l>JrJCr4TTH`NJwM;mSFljb~L z!(GlU&?S&#{>A1Qv*x>HIM?9uaTEIThp0Z0Cm=3_P%%VA_;RToGHa#f2qVu}=NpTB zlj=(O-D=!Eiz0#g(-3UrFjP>aff^4d%&?x^;-mW|@+=hLYNo+NH>8jODLkw2{E$S@ z01~~BLEo~<YBhWJ4x5-t*DRy}BmZMe+yN%;-(=##-nTzS`9ULzZ!vM7K-)Qlb8Nx? zBKaG%!ibz<CyKCry~{(d3NfUlbOk~bk@IZ!tt{&np64AKO{<y--Xioch`UF||2F}8 z2<l$<d0F4(U|Oh3>vb|j4WW_kL*j+*bnIDp><FK!Jn{cBp<l+4Km#hW9c)l4;XN2N z2%94R$+(AFwpVk&4ZNzFa`uX5_r7S0^e$J9%5p7dy{?Yci7(pLbREPJkZp&B#!F(Z zO0k{r_B(7BM;WH8GyGR$`%*XwA;rbU9R6>mixGP0szze;S3YZCgWqNhoV&s8lej$; zo6)e%0TZm%ErApKPwUK<=Y59i+!92g54VBOw>Tqee$dT9;7_Od8$Q{%Uiar4k~{*( z1FBM78E4tF=`D4nUz0<>&HI3scXAHNy0=;Tzo}QQGr#>?RNB(SevlHV1ewr8yoQ*M z;Cmp#P8>^{>Z7Uss4HwzN2EPycaPdGO*J-|<v|D7-+3~pY%<G0q{)1gvN8>!Igt4S zAA>wg!6w$^N^$o|?n-g@X$72^MJIsqsMTVFMR{3W(}EuDA%c2Ni;6BJFsNW&)iIW- z{(C<6gC~@L-5@uR<8A}&IE1;9rk7tA#>Mlx@dzZ)c>GM1Xz{u<xTZ@BUTk*uz!vFr zc|A2bwSa5D?J78D`H*0)tv?jzmw6l^4?T<30{DdqzOC+t+d?GXHseI5SeSF5WO6JO zhi205q=9vw3=A{3e@E3jD7~X&J;D`*#{JIA7i|qM<JQnNpEBN`jfw4-R%0{ip0g=2 zYLZ&*O0Wkp*lBM6Sk!FuJ8kbnGa)B{09;G^(W{K<`-Roi<w0*xusp>KA8V$s<k3!1 z1)Vj?so2kw>t?oT1C4e5JTULSP15NPUZ$srPNry3@y&)qmxFJql5gs%Ub^f55jXyv z=B1)QB>IARX<k9aG@d~y<csN%j79i8#XH7h?~Ba2aw*ke^Kp_InK?Ee%`6K)3NLL& zT7FqXsTm{U>L0UfLT%ZSN?oyqgUOvqQ=Okfrqm3a)%;U<A<38=10g|dXc-=Nly96g z;rJ;3Ih&WJ9YkCAIqqW2^}j+cvZZD|xl80qasG?sjzqar<Zfc_|2n@?k^csFH%E6* zkSomaZ~0ZbzQtX1ph1lflDm}<g<2~j&U|}xM=>>r!YkWGPWsRtQI6I2Ub3m&ol&mB z4+eDy0m$AAQHp?hvR4>pf{Cb#d1vRS%gar;@VN*;nJ)%_3T-Uaip@qbW8Ep`^xOi2 zc7eTb4?bJk+ngA?$N#86M|L=;L-~1K+KRF~{G8B{|5>s+g{##oHFBCUSQTgJtb4zw z=MBECoZ4b+DXYTVW44yuRU(~aS7RQOkflyVHJ!TiqSLRuz?t0t4|?72DEW^hVXT*L z^6E~p`^83RJAJ5`YQD91&5Zbcp8X#+BOc>HC>25LBz6+Cjtws5FDGwIcgUQj15Y|k zSu$8jJ7ckNY_6;!xRG2crgWIY=F2Hg2#18LjwDmZ<~6i{HQ4NA6^63Snk{_haDULA zWbZge5KYW#`mMBEz-rp!bo;=||8HgIA6n;C#_{_rH*ap!^tRn%)~z*5xBg-aThVUT zTDP@H4V$;6y<KY<+_lMV*EPw_-rTIowbi<H1OJh+3BtfBf*`0v6o>vJA~KXQ{8P9J zMyVje1|n=u=8w<!Ip_V6o4Yy_a&qqb<J|Xs&N<I{p6~PHKo150FXmJv(9#d=aZ_I^ z&`BZ#rrC?!75<&qZ}+g)%SJjjc6#DOHA)Dx!ewC&Ji6-&|1WNQOLQx7Stg%DR98~= zL_zmG9aBNtdCWDg@`2GW{ahM2xRmMOrmdqfBaSPjAGU(yOZTgeUcC*ZiH%|q$}#fW z)wT%_Y5Sy?lQ0Zd4tIo9syb#@sxBS9prldupBe4ZrhIFsr{DjaEMMkrm8{9w@h^CI zm+b2+9Ck^(&gqyCk#@kEIEPAHH*_)5lvZ?J#Ka`rSPZ8~Q0c~~a|tvorDJ5iPvid( zg$KDeW0`5C7D;m2guzou855ryQCn{jlRM8nF(5d?2a!8sFx1VqDZ+b$hzT;S&!q`s zi+ZPY?XW0|)Jal&rx_2>dNTV`{Ki<#Cpe|Y+&_HMX9zdad+Zlmgwsl#W{{R>Mk}ms zqKFBo#uB2%ZiSa~<Ftc-S;!q=*79)yMlhwWAJ@Vrf_YA|ie{plO;piL`)O&ChJ%2p zh?E*ibL<J^ghD6$r3MlF_y+S2`T3%lUF$ZL=0BLA-<UnHud;njh3RLm4w|K5iC1tk zxc3ZQ(NUX}9WVQDXj6_~7NwaTl4Fl7H#$fhqqozKMuv1`d(*R2qBmtr!y&7)Y~nRF zj29JPFk2dCpL9DMNT}Y=j;LtDN148uuvG6=9U9rLyZl$GY0DZ<c0Q(}U(gQt(WQNW zQ2sF}Alh2g7&f1$FHF^MNIp0go(SQ8c+u8Q)8|O-=I(PL+FhyHpQ5IL7{WtbK9ir) zk~wXR<Fw%_^5s}3n(JGf2ZgM+YgwYT($NLFXGmQjX0L>c+Mz-Y*8=@J7-RkEReiCU z8>}yWNoDyFs3&-Gi;X%c??sM#_$-0Sm|A#0pD>sL$~zH9d6osKLwo$7>=;b(AWKUL zWCHX_zrN+G*3vpF1?7_|fzmQs%n9VDukpXycRFMK{%c!R9D#t!pSf0>8-%Sy!7qMs z`myhA$;D=G+-(NOE`2<VG6Mkb<!P*JF5^Jj1hy-}%V}fQ1Kr5zm+HgK5Zh-1XuwuN zZTlKI8^mGk=qF716qEAiD_yAVujVc$e5!Tl;+*15)Fz%VjTyY7OsMA`43Lr0p+Yiy z6VPoj?d26sR58KFP%%kK;XCxEQnMn&NX`h~qiApR7b7lA)#ruSJMitFx<Uw?Irz9) zUvN0vijLZ>->O>2xKpaNof>x|oXqrSKiD#Rw3P`PL!1$At_X7!Z})jMThPPBLs2YY zm_Hkef1%RMgxBQ`V@&Y6$@N&OvDjZ<zDemz7%Hr<%I#{q7i?iz^fD|+MC1osU;_#0 ziR*1>f{4583k=TadH^YZ{kkg!=lHjLkhc4o1h3fl%a!vLz8?n`@N%|wf)Nij2Lz@e zBfZ8MTw|g$w7iEW0W1su<e{>G<|Y^FVxU^@bng`hstFWRFiOzccOt^IZT!R{vj8d_ zoMqQxNU(lM?oP%_yB9^bF5fJ=FJlH#oYx$LT5K%rt<NsC29t0}XWVu8d1d$J@C|i( z!tXbV_q@q5@7jgH?fgo<uj_8-8@w}^PN=)XVHGwKH*qh{bIS|lrt-!mCnHP7O9MGh zGc;i&d%m4r>?+?$x<0Hyr7y_jw-|0CsUzBgILEM3RHE$&lf)bdJC4WGD#`Z|+KHB# z@H5M}Kxs*JY{x)U^;v;F8>i3cUr;c-ImA}1&+^kSrC9!T;>v^SGm{`z*&IOlKWz7z z0@1p8O$W)?Rsr}*y2dmOWBUm`*G$iDSeR~{6eXRcT!Mm~G~?U4)9ld{%@zj4SeJ(q zx`}q|{a{eBjd)S-Sc-bKbQ|^7Y7d3hL!#bV6OIfdADVnpy(+DdZuDDi8Cpe4-Q_$T z|4&-##wpRV-$o_4A=Df~CQhPW%xp2mb@rnX7#jk9!cmFATC7+KB?L>y5R8s>99$uT zb2Qi<pFuDv4V^&mV#9!?$CkCgDkW3~JR^4sA0C6`#qVDBG~de=K`5-S5C5owS|H1V z7qQL$U1*lfvR=5fzoTE?Vf3$~Ed)6m{W2j0hDdyfw&oP}flU(5{C2Y+>pMLk&zz+1 zU*tPjwm~d*c#iAu;>ZYCXA}(hB-d@Q>mK({vn^_$E05ja8>GpW?M`$fdyh>wxEk(z zEb|nUaDE1~{VLzH5roEx+Hye8)HYvc+{2;2bKK=T6&zw)XgSm}TJF6&fD2|p%%2cG z;-EE`wkIV32u_h2AS6`La)L0CMdc3wqmL44ctp|+hG6_$JBOgr5ruRnicn3h3Ayl$ zOXJ-N?peC?^nS1vTOL{^x0jt*R+apQ1`B>olOa(o&C0&QuyuKGuBm3JYYbj_T^|pt z_=1XUy7w8?o>lRjir5Bk@iks_ZD(g4+waDqj?>DVX4N?NXGr=lZxdq65F(Uu+VLx; zw;3?b<!W-=mFJ3c=Iy7xDZ34$9U=#*Zjxwp^;8TU3Ix!UGyy~5i*z@VE($*)22*ha z_d=Q6CBM2Y*O@@!UI`vdC5H5s?9x8ed?qH4z#e5K53BwxQ<L*W<X36{1*EfKIvkMy z|5FFNSv=ReG7e@6RvZa(k@*V+%)oY2de1hR&Bm;)_l^0aUxC$-RAG(=y)hitCaVJa z)$qiRIyA?$`36p|NedP50L9hFt9qK<8BEDDcrCy~epV2j+{?{4J8i;X1R$7TxB|u6 zeY*0@j5f`)t`^t}GFG2GTMui7&~?a%-{XRBsCx&w9UoCM!{BEvZ)}!u<rqpVs!1eU z%tMhYl5D;bI+nz3)NOD}^RCD-i{XflgPQ+AzIE!joNLH0)mS|Lgb@Xk6F5~&cw4t+ zqMvCrF2>VOvUhr-y7x+LFI1@#?4%LvhPU5BZH33`l#74BMX$vRZ$V+#3K~n63X438 z%}jdDJbyMe_fyeJO7mw#+JXR5Vw$im8v8iLh{Tw*k1K4kaOX|?DYWJeJyD;!C{Mi< zt66BuB~J`TZq9^o7;Di1ETAX?SWYB(q~9Oe6E$SMF-K-|<WJw2zc3kCt$sjUMx;we zR%zX$9k}9ljk;=C#>5^Mqxv{+7{0G!S%oAU2>U`*?<A&J)z3xDfGZSvT4uf{5$Z0Y zFQ(-x6TxY2Kva=NyF<c@tnOM`r)}G*C)qFgiY-xK3GAdOAAIMQhH!|`H(em^9P<HG z518w05^-4zs(M1!>|$%uX0&D<lMZ1#n$f1*d0k6D1E7ONZA9mtn`)ZYkwaO0%s_G* za4Wn+_)&&P>t<<8#wzYi2Z08OI_M0fi8^OWp(ddzc4?s6#aZ;2N*kKdreo?#Vf?kI zuIR-~A;=98OrfY>xkQ1s-r~o@=o(W{JbP&&nZ05)Hmu8L<%G$e(AMUVGu~J6j$_V- zCLXDsM$X`R<CoE7xCy1Q=*@y{Mq(}?y*$eVH(=bhQPlA&Z}HW?*Q-d$6r9OMhA}`@ ztErt@EtY~c5#xozo?4SIb1@qt|B^19K{TCJXod$HMo%fi8#st$bmyh3`A`9-jE`FY z<4&F*|CxgLkKW@&^~`To4AQ>}+0i!Bk@tO%<$P%8XBW<QP6;i@*Y!qv&<v1UvgpYZ zbyW|j7mTq;aMhbUi^l7=QmjBQ&93frQwm}jr-<{{_`B%*BtkeoAFr}{9&t1K!n^c^ zS&~8rp#)g_ViOm$3nP5Sbf-rVk0Up!e3o(y_=0ndwZL=}O}<GhUX*b5n7ur4yH8F$ zb>-9VpiMjAsg^D@Yqhua(5CtD(AxY5GNroRU9`L3C3UUXPnf4|YOo_YO9=V3|CYn0 z<AW~C^1PL*D!S#*x|#p;+*;MSTxDEm?(3G|*>(O4+~Q=cmsGo^qRQ>zbE<tzwU4V1 zU7Zy5JJsIR*%wuNUbXM4kb6Q$0)_DFI`NWDysDbk|L}(@%q_XD+8<T?LB-!x$bG_W zwGK9tt;K=gg0!U}cz{y9++hcEOQUfct$$9$6dMUO0Udh2OSkP&k<3x6-KR@5_3mPl zF3eD2!zcab`7Kz@J`1fWT>uGq7*MH~zis^8nnO|~U-M05Z7v1H(%I71(!tV}(vH&h zU`Od5j+V*e90VJJtz>uZ<MX|xj|8PsU$B{@#h@_7_r*UvUFHG)7BqfW=X0LUU&~D5 zR4f-v@;aj=@V{6uPU0HL`0Wd~b93vn;zh>1EZK09>`sC{D}|Hc;#{7)Mn^|?ugZV7 zun0%tsI3O^%BJVipUtf@7354yKOyDOGow2?cfRIH*09i!KCyvn(T%s!X0-g;fuv`w zQ#8ynOe4>0kYY56^omIyNHwS*{nwv8qQ<P>vUS+&PrO!lu5QDjI~%gm)1wE_%V+Yd zzMl4A-O<<U0!4h=*Po>#u0v)5soC%wCpIn|GpP!iHS^D8=k7A)S`rm1Hee!<kL_+= zL?Ny?RaMvdm|#{0g%X(}4FpM_=UZ1hl|$Zg);o6jMG~P&$_PFk&Iu%04iM~5DX%NW zQ!gDXATEIXo~?6KTA|!QnvwJ+71L)mP1>kBcj{iZBc&Ecn~LrACz_3Ub(BeXPGnba zw@VXJ0mkHJ74`fI)Jn}s^}IN#p1M{miTZ;a%JeEAQUP5>P&oyA3Fb}rh`T|%hM8>F zQnQ~|aao12EaL`u^Bj(0B*QIX1e!+gMeIB1!8@~u-<xcDb?@y_nitS(5Q!`b7GWrb z09Zf<?p>}gHBSIu9f)_%_ngJuAQ78vWqOlIyk|67W2M1jYA(eRvRv<^F-SBfY-V}} zH=;VBi1b-=F`OHAfj~BctK(Woj6WMMmKXxvO|OzB+CleFBJ6gNTq}0QYY*BQ6sk%f zaf$xTaBDHU!#Z}miV+ptDOfO*E0d$S@NQipVrgNzMEa20xkaA0&Nc(k9Br;vlM0AN zP^($|pQ^g-%py4=nQR&r%2GlN`C#g4OcPYO4a*7p!)d<)2{TT=l$|T=(Z?U@dn+o; z-T#zMys6?172nc{Z&Pb;t~8nxvwj1m`m~MFuuKb+{XTxd4z>F#IE1)rFAp~}!$b5( zPc8<lNAlYu>!E#h!McIWAJT-vd-b)itFRSxqaLMS#ej<SDt4-PSC@QJHOvKUEvBNS z;<5^HJQu7T96DO5YJUy4f$(OXIG|!!#T_ahR)H5S8zrbw%Vun=zIk6Yb>aaP4GP7h zH^Z7fZdLJ+?wHpJg^Z6A749lTn}_|7$bC{I`TF=1f#j1t)e|Qt4(s0$_wUi_>B(aC z<ngfw4^Q@1Po6qHQ61BPvD0IR_<zKoI1-&W;!hm)CyquZj_QOP$P!rEH=_hexOE0) zask>#N8$Z?@K33jP;pYlV=B(6cuIxkFYF_V%iE<iN6d1N%At5w$G)WE85Pf}xTfN; z3L#MKqC?%n=XK<(DqdFcD;2*{Vd9fXQ+a(9qp|rG0ve_#V$6%$!2#4)@^Ky1gjzVr zW&JQDp;PutxcRDIZ><;r>d1j&kx&`$Huxmj7K=T)L*eQE{-l+tHFqRkW(!3jVrX8p z#NGTA^XzJo4|*i^xL@|Wh+6pIwtEO}&mrv;k$E-_+#0MeZF4QFBpalp<PWIz=YtL9 je3#$e@=*DUnG2MkE<a3dfWPQ>Fjd#FYI#qvu8{pNOAPi& literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/_backport/misc.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/_backport/misc.py new file mode 100644 index 00000000..cfb318d3 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/_backport/misc.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2012 The Python Software Foundation. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +"""Backports for individual classes and functions.""" + +import os +import sys + +__all__ = ['cache_from_source', 'callable', 'fsencode'] + + +try: + from imp import cache_from_source +except ImportError: + def cache_from_source(py_file, debug=__debug__): + ext = debug and 'c' or 'o' + return py_file + ext + + +try: + callable = callable +except NameError: + from collections import Callable + + def callable(obj): + return isinstance(obj, Callable) + + +try: + fsencode = os.fsencode +except AttributeError: + def fsencode(filename): + if isinstance(filename, bytes): + return filename + elif isinstance(filename, str): + return filename.encode(sys.getfilesystemencoding()) + else: + raise TypeError("expect bytes or str, not %s" % + type(filename).__name__) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/_backport/shutil.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/_backport/shutil.py new file mode 100644 index 00000000..159e49ee --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/_backport/shutil.py @@ -0,0 +1,761 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2012 The Python Software Foundation. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +"""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 +from os.path import abspath +import fnmatch +import collections +import errno +from . import tarfile + +try: + import bz2 + _BZ2_SUPPORTED = True +except ImportError: + _BZ2_SUPPORTED = False + +try: + from pwd import getpwnam +except ImportError: + getpwnam = None + +try: + from grp import getgrnam +except ImportError: + getgrnam = None + +__all__ = ["copyfileobj", "copyfile", "copymode", "copystat", "copy", "copy2", + "copytree", "move", "rmtree", "Error", "SpecialFileError", + "ExecError", "make_archive", "get_archive_formats", + "register_archive_format", "unregister_archive_format", + "get_unpack_formats", "register_unpack_format", + "unregister_unpack_format", "unpack_archive", "ignore_patterns"] + +class Error(EnvironmentError): + pass + +class SpecialFileError(EnvironmentError): + """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 ExecError(EnvironmentError): + """Raised when a command could not be executed""" + +class ReadError(EnvironmentError): + """Raised when an archive cannot be read""" + +class RegistryError(Exception): + """Raised when a registry operation with the archiving + and unpacking registries fails""" + + +try: + WindowsError +except NameError: + WindowsError = None + +def copyfileobj(fsrc, fdst, length=16*1024): + """copy data from file-like object fsrc to file-like object fdst""" + while 1: + buf = fsrc.read(length) + if not buf: + break + fdst.write(buf) + +def _samefile(src, dst): + # Macintosh, Unix. + 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 copyfile(src, dst): + """Copy data from src to dst""" + if _samefile(src, dst): + raise Error("`%s` and `%s` are the same file" % (src, dst)) + + for fn in [src, dst]: + try: + st = os.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): + raise SpecialFileError("`%s` is a named pipe" % fn) + + with open(src, 'rb') as fsrc: + with open(dst, 'wb') as fdst: + copyfileobj(fsrc, fdst) + +def copymode(src, dst): + """Copy mode bits from src to dst""" + if hasattr(os, 'chmod'): + st = os.stat(src) + mode = stat.S_IMODE(st.st_mode) + os.chmod(dst, mode) + +def copystat(src, dst): + """Copy all stat info (mode bits, atime, mtime, flags) from src to dst""" + st = os.stat(src) + mode = stat.S_IMODE(st.st_mode) + if hasattr(os, 'utime'): + os.utime(dst, (st.st_atime, st.st_mtime)) + if hasattr(os, 'chmod'): + os.chmod(dst, mode) + if hasattr(os, 'chflags') and hasattr(st, 'st_flags'): + try: + os.chflags(dst, st.st_flags) + except OSError as why: + if (not hasattr(errno, 'EOPNOTSUPP') or + why.errno != errno.EOPNOTSUPP): + raise + +def copy(src, dst): + """Copy data and mode bits ("cp src dst"). + + The destination may be a directory. + + """ + if os.path.isdir(dst): + dst = os.path.join(dst, os.path.basename(src)) + copyfile(src, dst) + copymode(src, dst) + +def copy2(src, dst): + """Copy data and all stat info ("cp -p src dst"). + + The destination may be a directory. + + """ + if os.path.isdir(dst): + dst = os.path.join(dst, os.path.basename(src)) + copyfile(src, dst) + copystat(src, 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(src, dst, symlinks=False, ignore=None, copy_function=copy2, + ignore_dangling_symlinks=False): + """Recursively copy a directory tree. + + The destination directory must not already exist. + 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 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. + + """ + names = os.listdir(src) + if ignore is not None: + ignored_names = ignore(src, names) + else: + ignored_names = set() + + os.makedirs(dst) + errors = [] + for name in names: + if name in ignored_names: + continue + srcname = os.path.join(src, name) + dstname = os.path.join(dst, name) + try: + if os.path.islink(srcname): + linkto = os.readlink(srcname) + if symlinks: + os.symlink(linkto, dstname) + else: + # ignore dangling symlink if the flag is on + if not os.path.exists(linkto) and ignore_dangling_symlinks: + continue + # otherwise let the copy occurs. copy2 will raise an error + copy_function(srcname, dstname) + elif os.path.isdir(srcname): + copytree(srcname, dstname, symlinks, ignore, copy_function) + else: + # Will raise a SpecialFileError for unsupported file types + copy_function(srcname, 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 EnvironmentError as why: + errors.append((srcname, dstname, str(why))) + try: + copystat(src, dst) + except OSError as why: + if WindowsError is not None and isinstance(why, WindowsError): + # Copying file access times may fail on Windows + pass + else: + errors.extend((src, dst, str(why))) + if errors: + raise Error(errors) + +def rmtree(path, ignore_errors=False, onerror=None): + """Recursively delete a directory tree. + + If ignore_errors is set, errors are ignored; otherwise, if onerror + is set, it is called to handle the error with arguments (func, + path, exc_info) where func is os.listdir, os.remove, or os.rmdir; + path is the argument to that function that caused it to fail; and + exc_info is a tuple returned by sys.exc_info(). If ignore_errors + is false and onerror is None, an exception is raised. + + """ + if ignore_errors: + def onerror(*args): + pass + elif onerror is None: + def onerror(*args): + raise + try: + if os.path.islink(path): + # symlinks to directories are forbidden, see bug #1669 + raise OSError("Cannot call rmtree on a symbolic link") + except OSError: + onerror(os.path.islink, path, sys.exc_info()) + # can't continue even if onerror hook returns + return + names = [] + try: + names = os.listdir(path) + except os.error: + onerror(os.listdir, path, sys.exc_info()) + for name in names: + fullname = os.path.join(path, name) + try: + mode = os.lstat(fullname).st_mode + except os.error: + mode = 0 + if stat.S_ISDIR(mode): + rmtree(fullname, ignore_errors, onerror) + else: + try: + os.remove(fullname) + except os.error: + onerror(os.remove, fullname, sys.exc_info()) + try: + os.rmdir(path) + except os.error: + onerror(os.rmdir, path, sys.exc_info()) + + +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. + return os.path.basename(path.rstrip(os.path.sep)) + +def move(src, dst): + """Recursively move a file or directory to another location. This is + similar to the Unix "mv" command. + + If the destination is a directory or a symlink to a directory, the source + is moved inside the directory. The destination path must not already + exist. + + If the destination 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. + A lot more could be done here... A look at a mv.c shows a lot of + the issues this implementation glosses over. + + """ + real_dst = dst + if os.path.isdir(dst): + if _samefile(src, dst): + # We might be on a case insensitive filesystem, + # perform the rename anyway. + os.rename(src, dst) + return + + 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.isdir(src): + if _destinsrc(src, dst): + raise Error("Cannot move a directory '%s' into itself '%s'." % (src, dst)) + copytree(src, real_dst, symlinks=True) + rmtree(src) + else: + copy2(src, real_dst) + os.unlink(src) + +def _destinsrc(src, dst): + src = abspath(src) + dst = 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 _get_gid(name): + """Returns a gid, given a group name.""" + if getgrnam is None or name is None: + 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 getpwnam is None or name is None: + 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): + """Create a (possibly compressed) tar file from all the files under + 'base_dir'. + + 'compress' must be "gzip" (the default), "bzip2", 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", or ".bz2"). + + Returns the output filename. + """ + tar_compression = {'gzip': 'gz', None: ''} + compress_ext = {'gzip': '.gz'} + + if _BZ2_SUPPORTED: + tar_compression['bzip2'] = 'bz2' + compress_ext['bzip2'] = '.bz2' + + # flags for compression program, each element of list will be an argument + if compress is not None and compress not in compress_ext: + raise ValueError("bad value for 'compress', or compression format not " + "supported : {0}".format(compress)) + + archive_name = base_name + '.tar' + compress_ext.get(compress, '') + archive_dir = os.path.dirname(archive_name) + + if 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[compress]) + try: + tar.add(base_dir, filter=_set_uid_gid) + finally: + tar.close() + + return archive_name + +def _call_external_zip(base_dir, zip_filename, verbose=False, dry_run=False): + # XXX see if we want to keep an external call here + if verbose: + zipoptions = "-r" + else: + zipoptions = "-rq" + from distutils.errors import DistutilsExecError + from distutils.spawn import spawn + try: + spawn(["zip", zipoptions, zip_filename, base_dir], dry_run=dry_run) + except DistutilsExecError: + # XXX really should distinguish between "couldn't find + # external 'zip' command" and "zip failed". + raise ExecError("unable to create zip file '%s': " + "could neither import the 'zipfile' module nor " + "find a standalone zip utility") % zip_filename + +def _make_zipfile(base_name, base_dir, verbose=0, dry_run=0, logger=None): + """Create a zip file from all the files under 'base_dir'. + + The output zip file will be named 'base_name' + ".zip". Uses either the + "zipfile" Python module (if available) or the InfoZIP "zip" utility + (if installed and found on the default search path). If neither tool is + available, raises ExecError. Returns the name of the output zip + file. + """ + zip_filename = base_name + ".zip" + archive_dir = os.path.dirname(base_name) + + if 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 zipfile module is not available, try spawning an external 'zip' + # command. + try: + import zipfile + except ImportError: + zipfile = None + + if zipfile is None: + _call_external_zip(base_dir, zip_filename, verbose, dry_run) + else: + if logger is not None: + logger.info("creating '%s' and adding '%s' to it", + zip_filename, base_dir) + + if not dry_run: + zip = zipfile.ZipFile(zip_filename, "w", + compression=zipfile.ZIP_DEFLATED) + + for dirpath, dirnames, filenames in os.walk(base_dir): + for name in filenames: + path = os.path.normpath(os.path.join(dirpath, name)) + if os.path.isfile(path): + zip.write(path, path) + if logger is not None: + logger.info("adding '%s'", path) + zip.close() + + return zip_filename + +_ARCHIVE_FORMATS = { + 'gztar': (_make_tarball, [('compress', 'gzip')], "gzip'ed tar-file"), + 'bztar': (_make_tarball, [('compress', 'bzip2')], "bzip2'ed tar-file"), + 'tar': (_make_tarball, [('compress', None)], "uncompressed tar file"), + 'zip': (_make_zipfile, [], "ZIP file"), + } + +if _BZ2_SUPPORTED: + _ARCHIVE_FORMATS['bztar'] = (_make_tarball, [('compress', 'bzip2')], + "bzip2'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 isinstance(function, collections.Callable): + 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", "bztar" + or "gztar". + + '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. + """ + save_cwd = os.getcwd() + if root_dir is not None: + 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) + + if base_dir is None: + base_dir = os.curdir + + kwargs = {'dry_run': dry_run, 'logger': logger} + + try: + format_info = _ARCHIVE_FORMATS[format] + except KeyError: + raise ValueError("unknown archive format '%s'" % format) + + func = format_info[0] + for arg, val in format_info[1]: + kwargs[arg] = val + + if format != 'zip': + kwargs['owner'] = owner + kwargs['group'] = group + + try: + filename = func(base_name, base_dir, **kwargs) + finally: + if root_dir 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 isinstance(function, collections.Callable): + 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` + """ + try: + import zipfile + except ImportError: + raise ReadError('zlib not supported, cannot unpack this archive.') + + 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 + + target = os.path.join(extract_dir, *name.split('/')) + if not target: + continue + + _ensure_directory(target) + if not name.endswith('/'): + # file + data = zip.read(info.filename) + f = open(target, 'wb') + try: + f.write(data) + finally: + f.close() + del data + finally: + zip.close() + +def _unpack_tarfile(filename, extract_dir): + """Unpack tar/tar.gz/tar.bz2 `filename` to `extract_dir` + """ + 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) + finally: + tarobj.close() + +_UNPACK_FORMATS = { + 'gztar': (['.tar.gz', '.tgz'], _unpack_tarfile, [], "gzip'ed tar-file"), + 'tar': (['.tar'], _unpack_tarfile, [], "uncompressed tar file"), + 'zip': (['.zip'], _unpack_zipfile, [], "ZIP file") + } + +if _BZ2_SUPPORTED: + _UNPACK_FORMATS['bztar'] = (['.bz2'], _unpack_tarfile, [], + "bzip2'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): + """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", or "gztar". 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 extract_dir is None: + extract_dir = os.getcwd() + + if format is not None: + try: + format_info = _UNPACK_FORMATS[format] + except KeyError: + raise ValueError("Unknown unpack format '{0}'".format(format)) + + func = format_info[1] + func(filename, extract_dir, **dict(format_info[2])) + 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]) + func(filename, extract_dir, **kwargs) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/_backport/sysconfig.cfg b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/_backport/sysconfig.cfg new file mode 100644 index 00000000..1746bd01 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/_backport/sysconfig.cfg @@ -0,0 +1,84 @@ +[posix_prefix] +# Configuration directories. Some of these come straight out of the +# configure script. They are for implementing the other variables, not to +# be used directly in [resource_locations]. +confdir = /etc +datadir = /usr/share +libdir = /usr/lib +statedir = /var +# User resource directory +local = ~/.local/{distribution.name} + +stdlib = {base}/lib/python{py_version_short} +platstdlib = {platbase}/lib/python{py_version_short} +purelib = {base}/lib/python{py_version_short}/site-packages +platlib = {platbase}/lib/python{py_version_short}/site-packages +include = {base}/include/python{py_version_short}{abiflags} +platinclude = {platbase}/include/python{py_version_short}{abiflags} +data = {base} + +[posix_home] +stdlib = {base}/lib/python +platstdlib = {base}/lib/python +purelib = {base}/lib/python +platlib = {base}/lib/python +include = {base}/include/python +platinclude = {base}/include/python +scripts = {base}/bin +data = {base} + +[nt] +stdlib = {base}/Lib +platstdlib = {base}/Lib +purelib = {base}/Lib/site-packages +platlib = {base}/Lib/site-packages +include = {base}/Include +platinclude = {base}/Include +scripts = {base}/Scripts +data = {base} + +[os2] +stdlib = {base}/Lib +platstdlib = {base}/Lib +purelib = {base}/Lib/site-packages +platlib = {base}/Lib/site-packages +include = {base}/Include +platinclude = {base}/Include +scripts = {base}/Scripts +data = {base} + +[os2_home] +stdlib = {userbase}/lib/python{py_version_short} +platstdlib = {userbase}/lib/python{py_version_short} +purelib = {userbase}/lib/python{py_version_short}/site-packages +platlib = {userbase}/lib/python{py_version_short}/site-packages +include = {userbase}/include/python{py_version_short} +scripts = {userbase}/bin +data = {userbase} + +[nt_user] +stdlib = {userbase}/Python{py_version_nodot} +platstdlib = {userbase}/Python{py_version_nodot} +purelib = {userbase}/Python{py_version_nodot}/site-packages +platlib = {userbase}/Python{py_version_nodot}/site-packages +include = {userbase}/Python{py_version_nodot}/Include +scripts = {userbase}/Scripts +data = {userbase} + +[posix_user] +stdlib = {userbase}/lib/python{py_version_short} +platstdlib = {userbase}/lib/python{py_version_short} +purelib = {userbase}/lib/python{py_version_short}/site-packages +platlib = {userbase}/lib/python{py_version_short}/site-packages +include = {userbase}/include/python{py_version_short} +scripts = {userbase}/bin +data = {userbase} + +[osx_framework_user] +stdlib = {userbase}/lib/python +platstdlib = {userbase}/lib/python +purelib = {userbase}/lib/python/site-packages +platlib = {userbase}/lib/python/site-packages +include = {userbase}/include +scripts = {userbase}/bin +data = {userbase} diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/_backport/sysconfig.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/_backport/sysconfig.py new file mode 100644 index 00000000..1df3aba1 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/_backport/sysconfig.py @@ -0,0 +1,788 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2012 The Python Software Foundation. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +"""Access to Python's configuration information.""" + +import codecs +import os +import re +import sys +from os.path import pardir, realpath +try: + import configparser +except ImportError: + import ConfigParser as configparser + + +__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', +] + + +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()) + +if os.name == "nt" and "pcbuild" in _PROJECT_BASE[-8:].lower(): + _PROJECT_BASE = _safe_realpath(os.path.join(_PROJECT_BASE, pardir)) +# PC/VS7.1 +if os.name == "nt" and "\\pc\\v" in _PROJECT_BASE[-10:].lower(): + _PROJECT_BASE = _safe_realpath(os.path.join(_PROJECT_BASE, pardir, pardir)) +# PC/AMD64 +if os.name == "nt" and "\\pcbuild\\amd64" in _PROJECT_BASE[-14:].lower(): + _PROJECT_BASE = _safe_realpath(os.path.join(_PROJECT_BASE, pardir, pardir)) + + +def is_python_build(): + for fn in ("Setup.dist", "Setup.local"): + if os.path.isfile(os.path.join(_PROJECT_BASE, "Modules", fn)): + return True + return False + +_PYTHON_BUILD = is_python_build() + +_cfg_read = False + +def _ensure_cfg_read(): + global _cfg_read + if not _cfg_read: + from ..resources import finder + backport_package = __name__.rsplit('.', 1)[0] + _finder = finder(backport_package) + _cfgfile = _finder.find('sysconfig.cfg') + assert _cfgfile, 'sysconfig.cfg exists' + with _cfgfile.as_stream() as s: + _SCHEMES.readfp(s) + if _PYTHON_BUILD: + for scheme in ('posix_prefix', 'posix_home'): + _SCHEMES.set(scheme, 'include', '{srcdir}/Include') + _SCHEMES.set(scheme, 'platinclude', '{projectbase}/.') + + _cfg_read = True + + +_SCHEMES = configparser.RawConfigParser() +_VAR_REPL = re.compile(r'\{([^{]*?)\}') + +def _expand_globals(config): + _ensure_cfg_read() + if config.has_section('globals'): + globals = config.items('globals') + else: + globals = tuple() + + sections = config.sections() + for section in sections: + if section == 'globals': + continue + for option, value in globals: + if config.has_option(section, option): + continue + config.set(section, option, value) + config.remove_section('globals') + + # now expanding local variables defined in the cfg file + # + for section in config.sections(): + variables = dict(config.items(section)) + + def _replacer(matchobj): + name = matchobj.group(1) + if name in variables: + return variables[name] + return matchobj.group(0) + + for option, value in config.items(section): + config.set(section, option, _VAR_REPL.sub(_replacer, value)) + +#_expand_globals(_SCHEMES) + + # FIXME don't rely on sys.version here, its format is an implementation detail + # of CPython, use sys.version_info or sys.hexversion +_PY_VERSION = sys.version.split()[0] +_PY_VERSION_SHORT = sys.version[:3] +_PY_VERSION_SHORT_NO_DOT = _PY_VERSION[0] + _PY_VERSION[2] +_PREFIX = os.path.normpath(sys.prefix) +_EXEC_PREFIX = os.path.normpath(sys.exec_prefix) +_CONFIG_VARS = None +_USER_BASE = None + + +def _subst_vars(path, local_vars): + """In the string `path`, replace tokens like {some.thing} with the + corresponding value from the map `local_vars`. + + If there is no corresponding value, leave the token unchanged. + """ + def _replacer(matchobj): + name = matchobj.group(1) + if name in local_vars: + return local_vars[name] + elif name in os.environ: + return os.environ[name] + return matchobj.group(0) + return _VAR_REPL.sub(_replacer, path) + + +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()) + + for key, value in _SCHEMES.items(scheme): + if os.name in ('posix', 'nt'): + value = os.path.expanduser(value) + res[key] = os.path.normpath(_subst_vars(value, vars)) + return res + + +def format_value(value, vars): + def _replacer(matchobj): + name = matchobj.group(1) + if name in vars: + return vars[name] + return matchobj.group(0) + return _VAR_REPL.sub(_replacer, value) + + +def _get_default_scheme(): + if os.name == 'posix': + # the default scheme for posix is posix_prefix + return 'posix_prefix' + return os.name + + +def _getuserbase(): + env_base = os.environ.get("PYTHONUSERBASE", None) + + def joinuser(*args): + return os.path.expanduser(os.path.join(*args)) + + # what about 'os2emx', 'riscos' ? + if os.name == "nt": + base = os.environ.get("APPDATA") or "~" + if env_base: + return env_base + else: + return joinuser(base, "Python") + + if sys.platform == "darwin": + framework = get_config_var("PYTHONFRAMEWORK") + if framework: + if env_base: + return env_base + else: + return joinuser("~", "Library", framework, "%d.%d" % + sys.version_info[:2]) + + if env_base: + return env_base + else: + return joinuser("~", ".local") + + +def _parse_makefile(filename, vars=None): + """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. + """ + # Regexes needed for parsing Makefile (and similar syntaxes, + # like old-style Setup files). + _variable_rx = re.compile(r"([a-zA-Z][a-zA-Z0-9_]+)\s*=\s*(.*)") + _findvar1_rx = re.compile(r"\$\(([A-Za-z][A-Za-z0-9_]*)\)") + _findvar2_rx = re.compile(r"\${([A-Za-z][A-Za-z0-9_]*)}") + + if vars is None: + vars = {} + done = {} + notdone = {} + + with codecs.open(filename, encoding='utf-8', errors="surrogateescape") as f: + lines = f.readlines() + + for line in lines: + if line.startswith('#') or line.strip() == '': + continue + m = _variable_rx.match(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: + 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] + m = _findvar1_rx.search(value) or _findvar2_rx.search(value) + 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: + 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: + # bogus variable reference (e.g. "prefix=$/opt/python"); + # just drop it since we can't deal + done[name] = value + 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 get_makefile_filename(): + """Return the path of the Makefile.""" + if _PYTHON_BUILD: + return os.path.join(_PROJECT_BASE, "Makefile") + if hasattr(sys, 'abiflags'): + config_dir_name = 'config-%s%s' % (_PY_VERSION_SHORT, sys.abiflags) + else: + config_dir_name = 'config' + return os.path.join(get_path('stdlib'), config_dir_name, 'Makefile') + + +def _init_posix(vars): + """Initialize the module as appropriate for POSIX systems.""" + # load the installed Makefile: + makefile = get_makefile_filename() + try: + _parse_makefile(makefile, vars) + except IOError as e: + msg = "invalid Python installation: unable to open %s" % makefile + if hasattr(e, "strerror"): + msg = msg + " (%s)" % e.strerror + raise IOError(msg) + # load the installed pyconfig.h: + config_h = get_config_h_filename() + try: + with open(config_h) as f: + parse_config_h(f, vars) + except IOError as e: + msg = "invalid Python installation: unable to open %s" % config_h + if hasattr(e, "strerror"): + msg = msg + " (%s)" % e.strerror + raise IOError(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['LDSHARED'] = vars['BLDSHARED'] + + +def _init_non_posix(vars): + """Initialize the module as appropriate for NT""" + # set basic install directories + vars['LIBDEST'] = get_path('stdlib') + vars['BINLIBDEST'] = get_path('platstdlib') + vars['INCLUDEPY'] = get_path('include') + vars['SO'] = '.pyd' + vars['EXE'] = '.exe' + vars['VERSION'] = _PY_VERSION_SHORT_NO_DOT + vars['BINDIR'] = os.path.dirname(_safe_realpath(sys.executable)) + +# +# 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 = {} + 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: + 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(_SCHEMES.sections())) + + +def get_path_names(): + """Return a tuple containing the paths names.""" + # xxx see if we want a static list + return _SCHEMES.options('posix_prefix') + + +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. + """ + _ensure_cfg_read() + if expand: + return _expand_vars(scheme, vars) + else: + return dict(_SCHEMES.items(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 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 and Mac OS 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 + if _CONFIG_VARS is None: + _CONFIG_VARS = {} + # Normalized versions of prefix and exec_prefix are handy to have; + # in fact, these are the standard versions used most places in the + # distutils2 module. + _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[0] + _PY_VERSION[2] + _CONFIG_VARS['base'] = _PREFIX + _CONFIG_VARS['platbase'] = _EXEC_PREFIX + _CONFIG_VARS['projectbase'] = _PROJECT_BASE + try: + _CONFIG_VARS['abiflags'] = sys.abiflags + except AttributeError: + # sys.abiflags may not be defined on all platforms. + _CONFIG_VARS['abiflags'] = '' + + if os.name in ('nt', 'os2'): + _init_non_posix(_CONFIG_VARS) + if os.name == 'posix': + _init_posix(_CONFIG_VARS) + # Setting 'userbase' is done below the call to the + # init function to enable using 'get_config_var' in + # the init-function. + if sys.version >= '2.6': + _CONFIG_VARS['userbase'] = _getuserbase() + + if 'srcdir' not in _CONFIG_VARS: + _CONFIG_VARS['srcdir'] = _PROJECT_BASE + else: + _CONFIG_VARS['srcdir'] = _safe_realpath(_CONFIG_VARS['srcdir']) + + # Convert srcdir into an absolute path if it appears necessary. + # Normally it is relative to the build directory. However, during + # testing, for example, we might be running a non-installed python + # from a different directory. + if _PYTHON_BUILD and os.name == "posix": + base = _PROJECT_BASE + try: + cwd = os.getcwd() + except OSError: + cwd = None + if (not os.path.isabs(_CONFIG_VARS['srcdir']) and + base != cwd): + # srcdir is relative and we are not in the same directory + # as the executable. Assume executable is in the build + # directory and make srcdir absolute. + srcdir = os.path.join(base, _CONFIG_VARS['srcdir']) + _CONFIG_VARS['srcdir'] = os.path.normpath(srcdir) + + if sys.platform == 'darwin': + kernel_version = os.uname()[2] # Kernel version (8.4.3) + major_version = int(kernel_version.split('.')[0]) + + if major_version < 8: + # 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. + for key in ('LDFLAGS', 'BASECFLAGS', + # a number of derived variables. These need to be + # patched up as well. + 'CFLAGS', 'PY_CFLAGS', 'BLDSHARED'): + flags = _CONFIG_VARS[key] + flags = re.sub(r'-arch\s+\w+\s', ' ', flags) + flags = re.sub('-isysroot [^ \t]*', ' ', flags) + _CONFIG_VARS[key] = flags + else: + # Allow the user to override the architecture flags using + # an environment variable. + # 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 key in ('LDFLAGS', 'BASECFLAGS', + # a number of derived variables. These need to be + # patched up as well. + 'CFLAGS', 'PY_CFLAGS', 'BLDSHARED'): + + flags = _CONFIG_VARS[key] + flags = re.sub(r'-arch\s+\w+\s', ' ', flags) + flags = flags + ' ' + arch + _CONFIG_VARS[key] = flags + + # If we're on OSX 10.5 or later and the user tries to + # compiles an extension using an SDK that is not present + # on the current machine it is better to not use an SDK + # than to fail. + # + # The major usecase for this is users using a Python.org + # binary installer on OSX 10.6: that installer uses + # the 10.4u SDK, but that SDK is not installed by default + # when you install 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 key in ('LDFLAGS', 'BASECFLAGS', + # a number of derived variables. These need to be + # patched up as well. + 'CFLAGS', 'PY_CFLAGS', 'BLDSHARED'): + + flags = _CONFIG_VARS[key] + flags = re.sub(r'-isysroot\s+\S+(\s|$)', ' ', flags) + _CONFIG_VARS[key] = flags + + 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; eg. for IRIX + the architecture isn't particularly important (IRIX only runs on SGI + hardware), but for Linux the kernel version isn't particularly + important. + + Examples of returned values: + linux-i586 + linux-alpha (?) + solaris-2.6-sun4u + irix-5.3 + irix64-6.2 + + Windows will return one of: + win-amd64 (64bit Windows on AMD64 (aka x86_64, Intel64, EM64T, etc) + win-ia64 (64bit Windows on Itanium) + win32 (all others - specifically, sys.platform is returned) + + For other non-POSIX platforms, currently just returns 'sys.platform'. + """ + if os.name == 'nt': + # sniff sys.version for architecture. + prefix = " bit (" + i = sys.version.find(prefix) + if i == -1: + return sys.platform + j = sys.version.find(")", i) + look = sys.version[i+len(prefix):j].lower() + if look == 'amd64': + return 'win-amd64' + if look == 'itanium': + return 'win-ia64' + return sys.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 + # (to accommodate BSD/OS), and translate spaces (for "Power Macintosh") + osname = osname.lower().replace('/', '') + machine = machine.replace(' ', '_') + machine = machine.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:]) + # fall through to standard osname-release-machine representation + elif osname[:4] == "irix": # could be "irix64"! + return "%s-%s" % (osname, release) + elif osname[:3] == "aix": + return "%s-%s.%s" % (osname, version, release) + elif osname[:6] == "cygwin": + osname = "cygwin" + rel_re = re.compile(r'[\d.]+') + m = rel_re.match(release) + if m: + release = m.group() + elif osname[:6] == "darwin": + # + # 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. + cfgvars = get_config_vars() + macver = cfgvars.get('MACOSX_DEPLOYMENT_TARGET') + + if True: + # Always calculate the release of the running machine, + # needed to determine if we can build fat binaries or not. + + macrelease = macver + # Get the system version. Reading this plist is a documented + # way to get the system version (see the documentation for + # the Gestalt Manager) + try: + f = open('/System/Library/CoreServices/SystemVersion.plist') + except IOError: + # 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: + macrelease = '.'.join(m.group(1).split('.')[:2]) + # else: fall back to the default behaviour + + if not macver: + macver = macrelease + + if macver: + release = macver + osname = "macosx" + + if ((macrelease + '.') >= '10.4.' and + '-arch' in get_config_vars().get('CFLAGS', '').strip()): + # The universal build will build fat binaries, but not on + # systems before 10.4 + # + # Try to detect 4-way universal builds, those have machine-type + # 'universal' instead of 'fat'. + + machine = 'fat' + cflags = get_config_vars().get('CFLAGS') + + archs = re.findall(r'-arch\s+(\S+)', cflags) + archs = tuple(sorted(set(archs))) + + if len(archs) == 1: + machine = archs[0] + 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 "%s-%s-%s" % (osname, release, machine) + + +def get_python_version(): + return _PY_VERSION_SHORT + + +def _print_dict(title, data): + for index, (key, value) in enumerate(sorted(data.items())): + if index == 0: + print('%s: ' % (title)) + print('\t%s = "%s"' % (key, value)) + + +def _main(): + """Display all information sysconfig detains.""" + print('Platform: "%s"' % get_platform()) + print('Python version: "%s"' % get_python_version()) + print('Current installation scheme: "%s"' % _get_default_scheme()) + print() + _print_dict('Paths', get_paths()) + print() + _print_dict('Variables', get_config_vars()) + + +if __name__ == '__main__': + _main() diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/_backport/tarfile.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/_backport/tarfile.py new file mode 100644 index 00000000..d66d8566 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/_backport/tarfile.py @@ -0,0 +1,2607 @@ +#------------------------------------------------------------------- +# 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. +# +from __future__ import print_function + +"""Read from and write to tar format archives. +""" + +__version__ = "$Revision$" + +version = "0.9.0" +__author__ = "Lars Gust\u00e4bel (lars@gustaebel.de)" +__date__ = "$Date: 2011-02-25 17:42:01 +0200 (Fri, 25 Feb 2011) $" +__cvsid__ = "$Id: tarfile.py 88586 2011-02-25 15:42:01Z marc-andre.lemburg $" +__credits__ = "Gustavo Niemeyer, Niels Gust\u00e4bel, Richard Townsend." + +#--------- +# Imports +#--------- +import sys +import os +import stat +import errno +import time +import struct +import copy +import re + +try: + import grp, pwd +except ImportError: + grp = pwd = None + +# os.symlink on Windows prior to 6.0 raises NotImplementedError +symlink_exception = (AttributeError, NotImplementedError) +try: + # WindowsError (1314) will be raised if the caller does not hold the + # SeCreateSymbolicLinkPrivilege privilege + symlink_exception += (WindowsError,) +except NameError: + pass + +# from tarfile import * +__all__ = ["TarFile", "TarInfo", "is_tarfile", "TarError"] + +if sys.version_info[0] < 3: + import __builtin__ as builtins +else: + import builtins + +_open = builtins.open # Since 'open' is TarFile.open + +#--------------------------------------------------------- +# 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 = GNU_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 = set(("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 +} + +#--------------------------------------------------------- +# Bits used in the mode field, values in octal. +#--------------------------------------------------------- +S_IFLNK = 0o120000 # symbolic link +S_IFREG = 0o100000 # regular file +S_IFBLK = 0o060000 # block device +S_IFDIR = 0o040000 # directory +S_IFCHR = 0o020000 # character device +S_IFIFO = 0o010000 # fifo + +TSUID = 0o4000 # set UID on execution +TSGID = 0o2000 # set GID on execution +TSVTX = 0o1000 # reserved + +TUREAD = 0o400 # read by owner +TUWRITE = 0o200 # write by owner +TUEXEC = 0o100 # execute/search by owner +TGREAD = 0o040 # read by group +TGWRITE = 0o020 # write by group +TGEXEC = 0o010 # execute/search by group +TOREAD = 0o004 # read by other +TOWRITE = 0o002 # write by other +TOEXEC = 0o001 # execute/search by other + +#--------------------------------------------------------- +# initialization +#--------------------------------------------------------- +if os.name in ("nt", "ce"): + 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. + """ + 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] != chr(0o200): + try: + n = int(nts(s, "ascii", "strict") or "0", 8) + except ValueError: + raise InvalidHeaderError("invalid header") + else: + n = 0 + for i in range(len(s) - 1): + n <<= 8 + n += ord(s[i + 1]) + 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 byte indicates this particular + # encoding, the following digits-1 bytes are a big-endian + # representation. This allows values up to (256**(digits-1))-1. + if 0 <= n < 8 ** (digits - 1): + s = ("%0*o" % (digits - 1, n)).encode("ascii") + NUL + else: + if format != GNU_FORMAT or n >= 256 ** (digits - 1): + raise ValueError("overflow in number field") + + if n < 0: + # XXX We mimic GNU tar's behaviour with negative numbers, + # this could raise OverflowError. + n = struct.unpack("L", struct.pack("l", n))[0] + + s = bytearray() + for i in range(digits - 1): + s.insert(0, n & 0o377) + n >>= 8 + s.insert(0, 0o200) + 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("148B", buf[:148]) + struct.unpack("356B", buf[156:512])) + signed_chksum = 256 + sum(struct.unpack("148b", buf[:148]) + struct.unpack("356b", buf[156:512])) + return unsigned_chksum, signed_chksum + +def copyfileobj(src, dst, length=None): + """Copy length bytes from fileobj src to fileobj dst. + If length is None, copy the entire content. + """ + if length == 0: + return + if length is None: + while True: + buf = src.read(16*1024) + if not buf: + break + dst.write(buf) + return + + BUFSIZE = 16 * 1024 + blocks, remainder = divmod(length, BUFSIZE) + for b in range(blocks): + buf = src.read(BUFSIZE) + if len(buf) < BUFSIZE: + raise IOError("end of file reached") + dst.write(buf) + + if remainder != 0: + buf = src.read(remainder) + if len(buf) < remainder: + raise IOError("end of file reached") + dst.write(buf) + return + +filemode_table = ( + ((S_IFLNK, "l"), + (S_IFREG, "-"), + (S_IFBLK, "b"), + (S_IFDIR, "d"), + (S_IFCHR, "c"), + (S_IFIFO, "p")), + + ((TUREAD, "r"),), + ((TUWRITE, "w"),), + ((TUEXEC|TSUID, "s"), + (TSUID, "S"), + (TUEXEC, "x")), + + ((TGREAD, "r"),), + ((TGWRITE, "w"),), + ((TGEXEC|TSGID, "s"), + (TSGID, "S"), + (TGEXEC, "x")), + + ((TOREAD, "r"),), + ((TOWRITE, "w"),), + ((TOEXEC|TSVTX, "t"), + (TSVTX, "T"), + (TOEXEC, "x")) +) + +def filemode(mode): + """Convert a file's mode to a string of the form + -rwxrwxrwx. + Used by TarFile.list() + """ + perm = [] + for table in filemode_table: + for bit, char in table: + if mode & bit == bit: + perm.append(char) + break + else: + perm.append("-") + return "".join(perm) + +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(object): + """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(object): + """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 and is accessed + blockwise. Use of gzip or bzip2 compression is possible. + A stream-like object could be for example: sys.stdin, + sys.stdout, a socket, a tape device etc. + + _Stream is intended to be used only internally. + """ + + def __init__(self, name, mode, comptype, fileobj, bufsize): + """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 = name or "" + 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") + self.zlib = zlib + self.crc = zlib.crc32(b"") + if mode == "r": + self._init_read_gz() + else: + self._init_write_gz() + + if comptype == "bz2": + try: + import bz2 + except ImportError: + raise CompressionError("bz2 module is not available") + if mode == "r": + self.dbuf = b"" + self.cmp = bz2.BZ2Decompressor() + else: + self.cmp = bz2.BZ2Compressor() + 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): + """Initialize for writing with gzip compression. + """ + self.cmp = self.zlib.compressobj(9, 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] + # 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 + + 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": + # The native zlib crc is an unsigned 32-bit integer, but + # the Python wrapper implicitly casts that to a signed C + # long. So, on a 32-bit box self.crc may "look negative", + # while the same crc on a 64-bit box may "look positive". + # To avoid irksome warnings from the `struct` module, force + # it to look positive on all boxes. + self.fileobj.write(struct.pack("<L", self.crc & 0xffffffff)) + self.fileobj.write(struct.pack("<L", self.pos & 0xffffFFFF)) + + if not self._extfileobj: + self.fileobj.close() + + self.closed = True + + 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=None): + """Return the next size number of bytes from the stream. + If size is not defined, return all bytes of the stream + up to EOF. + """ + if size is None: + t = [] + while True: + buf = self._read(self.bufsize) + if not buf: + break + t.append(buf) + buf = "".join(t) + else: + 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) + while c < size: + buf = self.__read(self.bufsize) + if not buf: + break + try: + buf = self.cmp.decompress(buf) + except IOError: + raise ReadError("invalid compressed data") + self.dbuf += buf + c += len(buf) + buf = self.dbuf[:size] + self.dbuf = self.dbuf[size:] + return buf + + def __read(self, size): + """Return size bytes from stream. If internal buffer is empty, + read another block from the stream. + """ + c = len(self.buf) + while c < size: + buf = self.fileobj.read(self.bufsize) + if not buf: + break + self.buf += buf + c += len(buf) + buf = self.buf[:size] + self.buf = self.buf[size:] + return buf +# 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"\037\213\010"): + return "gz" + if self.buf.startswith(b"BZh91"): + return "bz2" + return "tar" + + def close(self): + self.fileobj.close() +# class StreamProxy + +class _BZ2Proxy(object): + """Small proxy class that enables external file object + support for "r:bz2" and "w:bz2" modes. This is actually + a workaround for a limitation in bz2 module's BZ2File + class which (unlike gzip.GzipFile) has no support for + a file object argument. + """ + + blocksize = 16 * 1024 + + def __init__(self, fileobj, mode): + self.fileobj = fileobj + self.mode = mode + self.name = getattr(self.fileobj, "name", None) + self.init() + + def init(self): + import bz2 + self.pos = 0 + if self.mode == "r": + self.bz2obj = bz2.BZ2Decompressor() + self.fileobj.seek(0) + self.buf = b"" + else: + self.bz2obj = bz2.BZ2Compressor() + + def read(self, size): + x = len(self.buf) + while x < size: + raw = self.fileobj.read(self.blocksize) + if not raw: + break + data = self.bz2obj.decompress(raw) + self.buf += data + x += len(data) + + buf = self.buf[:size] + self.buf = self.buf[size:] + self.pos += len(buf) + return buf + + def seek(self, pos): + if pos < self.pos: + self.init() + self.read(pos - self.pos) + + def tell(self): + return self.pos + + def write(self, data): + self.pos += len(data) + raw = self.bz2obj.compress(data) + self.fileobj.write(raw) + + def close(self): + if self.mode == "w": + raw = self.bz2obj.flush() + self.fileobj.write(raw) +# class _BZ2Proxy + +#------------------------ +# 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, blockinfo=None): + self.fileobj = fileobj + self.offset = offset + self.size = size + self.position = 0 + + 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 seekable(self): + if not hasattr(self.fileobj, "seekable"): + # XXX gzip.GzipFile and bz2.BZ2File + return True + return self.fileobj.seekable() + + def tell(self): + """Return the current file position. + """ + return self.position + + def seek(self, position): + """Seek to a position in the file. + """ + self.position = 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)) + buf += self.fileobj.read(length) + else: + buf += NUL * length + size -= length + self.position += length + return buf +#class _FileInFile + + +class ExFileObject(object): + """File-like object for reading an archive member. + Is returned by TarFile.extractfile(). + """ + blocksize = 1024 + + def __init__(self, tarfile, tarinfo): + self.fileobj = _FileInFile(tarfile.fileobj, + tarinfo.offset_data, + tarinfo.size, + tarinfo.sparse) + self.name = tarinfo.name + self.mode = "r" + self.closed = False + self.size = tarinfo.size + + self.position = 0 + self.buffer = b"" + + def readable(self): + return True + + def writable(self): + return False + + def seekable(self): + return self.fileobj.seekable() + + def read(self, size=None): + """Read at most size bytes from the file. If size is not + present or None, read all data until EOF is reached. + """ + if self.closed: + raise ValueError("I/O operation on closed file") + + buf = b"" + if self.buffer: + if size is None: + buf = self.buffer + self.buffer = b"" + else: + buf = self.buffer[:size] + self.buffer = self.buffer[size:] + + if size is None: + buf += self.fileobj.read() + else: + buf += self.fileobj.read(size - len(buf)) + + self.position += len(buf) + return buf + + # XXX TextIOWrapper uses the read1() method. + read1 = read + + def readline(self, size=-1): + """Read one entire line from the file. If size is present + and non-negative, return a string with at most that + size, which may be an incomplete line. + """ + if self.closed: + raise ValueError("I/O operation on closed file") + + pos = self.buffer.find(b"\n") + 1 + if pos == 0: + # no newline found. + while True: + buf = self.fileobj.read(self.blocksize) + self.buffer += buf + if not buf or b"\n" in buf: + pos = self.buffer.find(b"\n") + 1 + if pos == 0: + # no newline found. + pos = len(self.buffer) + break + + if size != -1: + pos = min(size, pos) + + buf = self.buffer[:pos] + self.buffer = self.buffer[pos:] + self.position += len(buf) + return buf + + def readlines(self): + """Return a list with all remaining lines. + """ + result = [] + while True: + line = self.readline() + if not line: break + result.append(line) + return result + + def tell(self): + """Return the current file position. + """ + if self.closed: + raise ValueError("I/O operation on closed file") + + return self.position + + def seek(self, pos, whence=os.SEEK_SET): + """Seek to a position in the file. + """ + if self.closed: + raise ValueError("I/O operation on closed file") + + if whence == os.SEEK_SET: + self.position = min(max(pos, 0), self.size) + elif whence == os.SEEK_CUR: + if pos < 0: + self.position = max(self.position + pos, 0) + else: + self.position = min(self.position + pos, self.size) + elif whence == os.SEEK_END: + self.position = max(min(self.size + pos, self.size), 0) + else: + raise ValueError("Invalid argument") + + self.buffer = b"" + self.fileobj.seek(self.position) + + def close(self): + """Close the file object. + """ + self.closed = True + + def __iter__(self): + """Get an iterator over the file's lines. + """ + while True: + line = self.readline() + if not line: + break + yield line +#class ExFileObject + +#------------------ +# Exported Classes +#------------------ +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__ = ("name", "mode", "uid", "gid", "size", "mtime", + "chksum", "type", "linkname", "uname", "gname", + "devmajor", "devminor", + "offset", "offset_data", "pax_headers", "sparse", + "tarfile", "_sparse_structs", "_link_target") + + 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 + + # In pax headers the "name" and "linkname" field are called + # "path" and "linkpath". + def _getpath(self): + return self.name + def _setpath(self, name): + self.name = name + path = property(_getpath, _setpath) + + def _getlinkpath(self): + return self.linkname + def _setlinkpath(self, linkname): + self.linkname = linkname + linkpath = property(_getlinkpath, _setlinkpath) + + def __repr__(self): + return "<%s %r at %#x>" % (self.__class__.__name__,self.name,id(self)) + + def get_info(self): + """Return the TarInfo's attributes as a dictionary. + """ + info = { + "name": self.name, + "mode": self.mode & 0o7777, + "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() + + 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"]) > LENGTH_LINK: + raise ValueError("linkname is too long") + + if len(info["name"]) > LENGTH_NAME: + info["prefix"], info["name"] = self._posix_split_name(info["name"]) + + 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"]) > LENGTH_LINK: + buf += self._create_gnu_long_header(info["linkname"], GNUTYPE_LONGLINK, encoding, errors) + + if len(info["name"]) > 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)): + if name in pax_headers: + # The pax header has priority. Avoid overflow. + info[name] = 0 + continue + + val = info[name] + if not 0 <= val < 8 ** (digits - 1) or isinstance(val, float): + pax_headers[name] = str(val) + info[name] = 0 + + # 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, "utf8") + + def _posix_split_name(self, name): + """Split a name longer than 100 chars into a prefix + and a name part. + """ + prefix = name[:LENGTH_PREFIX + 1] + while prefix and prefix[-1] != "/": + prefix = prefix[:-1] + + name = name[len(prefix):] + prefix = prefix[:-1] + + if not prefix or len(name) > LENGTH_NAME: + 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. + """ + 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 + info.get("type", REGTYPE), + 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), + itn(info.get("devmajor", 0), 8, format), + itn(info.get("devminor", 0), 8, format), + stn(info.get("prefix", ""), 155, encoding, errors) + ] + + buf = struct.pack("%ds" % BLOCKSIZE, b"".join(parts)) + chksum = calc_chksums(buf[-BLOCKSIZE:])[0] + buf = buf[:-364] + ("%06o\0" % chksum).encode("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("utf8", "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("utf8") + 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("utf8") + + 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. + """ + 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 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 the 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. + """ + buf = tarfile.fileobj.read(BLOCKSIZE) + obj = cls.frombuf(buf, tarfile.encoding, tarfile.errors) + 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) + + 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) + except HeaderError: + raise SubsequentHeaderError("missing or bad subsequent header") + + # 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) + + 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() + + # 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. + match = re.search(br"\d+ hdrcharset=([^\n]+)\n", buf) + if match is not None: + pax_headers["hdrcharset"] = match.group(1).decode("utf8") + + # 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. + hdrcharset = pax_headers.get("hdrcharset") + if hdrcharset == "BINARY": + encoding = tarfile.encoding + else: + encoding = "utf8" + + # 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. keyword and value are both UTF-8 encoded strings. + regex = re.compile(br"(\d+) ([^=]+)=") + pos = 0 + while True: + match = regex.match(buf, pos) + if not match: + break + + length, keyword = match.groups() + length = int(length) + value = buf[match.end(2) + 1:match.start(1) + length - 1] + + # Normally, we could just use "utf8" 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(keyword, "utf8", "utf8", + tarfile.errors) + if keyword in PAX_NAME_FIELDS: + value = self._decode_pax_field(value, encoding, tarfile.encoding, + tarfile.errors) + else: + value = self._decode_pax_field(value, "utf8", "utf8", + tarfile.errors) + + pax_headers[keyword] = value + pos += length + + # Fetch the next header. + try: + next = self.fromtarfile(tarfile) + except HeaderError: + raise SubsequentHeaderError("missing or bad subsequent header") + + # 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, pax_headers, buf) + + 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, pax_headers, buf): + """Process a GNU tar extended sparse header, version 0.0. + """ + offsets = [] + for match in re.finditer(br"\d+ GNU.sparse.offset=(\d+)\n", buf): + offsets.append(int(match.group(1))) + numbytes = [] + for match in re.finditer(br"\d+ GNU.sparse.numbytes=(\d+)\n", buf): + numbytes.append(int(match.group(1))) + 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. + """ + blocks, remainder = divmod(count, BLOCKSIZE) + if remainder: + blocks += 1 + return blocks * BLOCKSIZE + + def isreg(self): + return self.type in REGULAR_TYPES + def isfile(self): + return self.isreg() + def isdir(self): + return self.type == DIRTYPE + def issym(self): + return self.type == SYMTYPE + def islnk(self): + return self.type == LNKTYPE + def ischr(self): + return self.type == CHRTYPE + def isblk(self): + return self.type == BLKTYPE + def isfifo(self): + return self.type == FIFOTYPE + def issparse(self): + return self.sparse is not None + def isdev(self): + 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 default ExFileObject class to use. + + 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): + """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. + """ + if len(mode) > 1 or mode not in "raw": + raise ValueError("mode must be 'r', 'a' or 'w'") + self.mode = mode + self._mode = {"r": "rb", "a": "r+b", "w": "wb"}[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"): + 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 + + # 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.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 + + 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)) + + if self.mode in "aw": + 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 + '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 + + '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 + '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 + """ + + 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. + for comptype in cls.OPEN_METH: + 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: + if fileobj is not None: + fileobj.seek(saved_pos) + continue + raise ReadError("file could not be opened successfully") + + 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 "rw": + raise ValueError("mode must be 'r' or 'w'") + + stream = _Stream(name, filemode, comptype, fileobj, bufsize) + try: + t = cls(name, filemode, stream, **kwargs) + except: + stream.close() + raise + t._extfileobj = False + return t + + elif mode in "aw": + 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 len(mode) > 1 or mode not in "raw": + raise ValueError("mode must be 'r', 'a' or 'w'") + 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 len(mode) > 1 or mode not in "rw": + raise ValueError("mode must be 'r' or 'w'") + + try: + import gzip + gzip.GzipFile + except (ImportError, AttributeError): + raise CompressionError("gzip module is not available") + + extfileobj = fileobj is not None + try: + fileobj = gzip.GzipFile(name, mode + "b", compresslevel, fileobj) + t = cls.taropen(name, mode, fileobj, **kwargs) + except IOError: + if not extfileobj and fileobj is not None: + fileobj.close() + if fileobj is None: + raise + raise ReadError("not a gzip file") + except: + if not extfileobj and fileobj is not None: + fileobj.close() + raise + t._extfileobj = extfileobj + 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 len(mode) > 1 or mode not in "rw": + raise ValueError("mode must be 'r' or 'w'.") + + try: + import bz2 + except ImportError: + raise CompressionError("bz2 module is not available") + + if fileobj is not None: + fileobj = _BZ2Proxy(fileobj, mode) + else: + fileobj = bz2.BZ2File(name, mode, compresslevel=compresslevel) + + try: + t = cls.taropen(name, mode, fileobj, **kwargs) + except (IOError, EOFError): + fileobj.close() + raise ReadError("not a bzip2 file") + 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 + } + + #-------------------------------------------------------------------------- + # 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 + + if self.mode in "aw": + 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)) + + if not self._extfileobj: + self.fileobj.close() + self.closed = True + + 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) + 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 for either the file `name' or the file + object `fileobj' (using os.fstat on its file descriptor). You can + modify some of the TarInfo's attributes before you add it using + addfile(). If given, `arcname' specifies an alternative name for the + file in the archive. + """ + self._check("aw") + + # 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 + + # Use os.stat or os.lstat, depending on platform + # and if symlinks shall be resolved. + if fileobj is None: + if hasattr(os, "lstat") and 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 + if pwd: + try: + tarinfo.uname = pwd.getpwuid(tarinfo.uid)[0] + except KeyError: + pass + if grp: + try: + tarinfo.gname = grp.getgrgid(tarinfo.gid)[0] + except KeyError: + pass + + 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): + """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. + """ + self._check() + + for tarinfo in self: + if verbose: + print(filemode(tarinfo.mode), end=' ') + print("%s/%s" % (tarinfo.uname or tarinfo.uid, + tarinfo.gname or tarinfo.gid), end=' ') + if tarinfo.ischr() or tarinfo.isblk(): + print("%10s" % ("%d,%d" \ + % (tarinfo.devmajor, tarinfo.devminor)), end=' ') + else: + print("%10d" % tarinfo.size, end=' ') + print("%d-%02d-%02d %02d:%02d:%02d" \ + % time.localtime(tarinfo.mtime)[:6], end=' ') + + print(tarinfo.name + ("/" if tarinfo.isdir() else ""), end=' ') + + if verbose: + if tarinfo.issym(): + print("->", tarinfo.linkname, end=' ') + if tarinfo.islnk(): + print("link to", tarinfo.linkname, end=' ') + print() + + def add(self, name, arcname=None, recursive=True, exclude=None, 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. `exclude' is a function that should + return True for each filename to be excluded. `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("aw") + + if arcname is None: + arcname = name + + # Exclude pathnames. + if exclude is not None: + import warnings + warnings.warn("use the filter argument instead", + DeprecationWarning, 2) + if exclude(name): + self._dbg(2, "tarfile: Excluded %r" % name) + return + + # 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(): + f = bltn_open(name, "rb") + self.addfile(tarinfo, f) + f.close() + + elif tarinfo.isdir(): + self.addfile(tarinfo) + if recursive: + for f in os.listdir(name): + self.add(os.path.join(name, f), os.path.join(arcname, f), + recursive, exclude, filter=filter) + + else: + self.addfile(tarinfo) + + def addfile(self, tarinfo, fileobj=None): + """Add the TarInfo object `tarinfo' to the archive. If `fileobj' is + given, tarinfo.size bytes are read from it and added to the archive. + You can create TarInfo objects using gettarinfo(). + On Windows platforms, `fileobj' should always be opened with mode + 'rb' to avoid irritation about the file size. + """ + self._check("aw") + + tarinfo = copy.copy(tarinfo) + + buf = tarinfo.tobuf(self.format, self.encoding, self.errors) + self.fileobj.write(buf) + self.offset += len(buf) + + # If there's data to follow, append it. + if fileobj is not None: + copyfileobj(fileobj, self.fileobj, tarinfo.size) + 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 extractall(self, path=".", members=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(). + """ + directories = [] + + if members is None: + members = self + + for tarinfo in members: + if tarinfo.isdir(): + # Extract directories with a safe mode. + directories.append(tarinfo) + tarinfo = copy.copy(tarinfo) + tarinfo.mode = 0o700 + # Do not set_attrs directories, as we will do that further down + self.extract(tarinfo, path, set_attrs=not tarinfo.isdir()) + + # Reverse sort directories. + directories.sort(key=lambda a: a.name) + directories.reverse() + + # Set correct owner, mtime and filemode on directories. + for tarinfo in directories: + dirpath = os.path.join(path, tarinfo.name) + try: + self.chown(tarinfo, dirpath) + self.utime(tarinfo, dirpath) + self.chmod(tarinfo, dirpath) + except ExtractError as e: + if self.errorlevel > 1: + raise + else: + self._dbg(1, "tarfile: %s" % e) + + def extract(self, member, path="", set_attrs=True): + """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. + """ + self._check("r") + + if isinstance(member, str): + tarinfo = self.getmember(member) + else: + tarinfo = member + + # Prepare the link target for makelink(). + if tarinfo.islnk(): + tarinfo._link_target = os.path.join(path, tarinfo.linkname) + + try: + self._extract_member(tarinfo, os.path.join(path, tarinfo.name), + set_attrs=set_attrs) + except EnvironmentError as e: + if self.errorlevel > 0: + raise + else: + if e.filename is None: + self._dbg(1, "tarfile: %s" % e.strerror) + else: + self._dbg(1, "tarfile: %s %r" % (e.strerror, e.filename)) + except ExtractError as e: + if self.errorlevel > 1: + raise + else: + self._dbg(1, "tarfile: %s" % 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, a + file-like object is returned. If `member' is a link, a file-like + object is constructed from the link's target. If `member' is none of + the above, None is returned. + The file-like object is read-only and provides the following + methods: read(), readline(), readlines(), seek() and tell() + """ + self._check("r") + + if isinstance(member, str): + tarinfo = self.getmember(member) + else: + tarinfo = member + + if tarinfo.isreg(): + return self.fileobject(self, tarinfo) + + elif tarinfo.type not in SUPPORTED_TYPES: + # If a member's type is unknown, it is treated as a + # regular file. + 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): + """Extract the TarInfo object tarinfo to a physical + file called targetpath. + """ + # 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) + + 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(tarinfo, targetpath) + elif tarinfo.type not in SUPPORTED_TYPES: + self.makeunknown(tarinfo, targetpath) + else: + self.makefile(tarinfo, targetpath) + + if set_attrs: + self.chown(tarinfo, targetpath) + 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: + # Use a safe mode for the directory, the real mode is set + # later in _extract_member(). + os.mkdir(targetpath, 0o700) + except EnvironmentError as e: + if e.errno != errno.EEXIST: + raise + + def makefile(self, tarinfo, targetpath): + """Make a file called targetpath. + """ + source = self.fileobj + source.seek(tarinfo.offset_data) + target = bltn_open(targetpath, "wb") + if tarinfo.sparse is not None: + for offset, size in tarinfo.sparse: + target.seek(offset) + copyfileobj(source, target, size) + else: + copyfileobj(source, target, tarinfo.size) + target.seek(tarinfo.size) + target.truncate() + target.close() + + 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 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): + """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. + """ + try: + # For systems that support symbolic and hard links. + if tarinfo.issym(): + os.symlink(tarinfo.linkname, targetpath) + else: + # See extract(). + if os.path.exists(tarinfo._link_target): + os.link(tarinfo._link_target, targetpath) + else: + self._extract_member(self._find_link_target(tarinfo), + targetpath) + except symlink_exception: + if tarinfo.issym(): + linkpath = os.path.join(os.path.dirname(tarinfo.name), + tarinfo.linkname) + else: + linkpath = tarinfo.linkname + else: + try: + self._extract_member(self._find_link_target(tarinfo), + targetpath) + except KeyError: + raise ExtractError("unable to resolve link inside archive") + + def chown(self, tarinfo, targetpath): + """Set owner of targetpath according to tarinfo. + """ + if pwd and hasattr(os, "geteuid") and os.geteuid() == 0: + # We have to be root to do so. + try: + g = grp.getgrnam(tarinfo.gname)[2] + except KeyError: + g = tarinfo.gid + try: + u = pwd.getpwnam(tarinfo.uname)[2] + except KeyError: + u = tarinfo.uid + try: + if tarinfo.issym() and hasattr(os, "lchown"): + os.lchown(targetpath, u, g) + else: + if sys.platform != "os2emx": + os.chown(targetpath, u, g) + except EnvironmentError as e: + raise ExtractError("could not change owner") + + def chmod(self, tarinfo, targetpath): + """Set file permissions of targetpath according to tarinfo. + """ + if hasattr(os, 'chmod'): + try: + os.chmod(targetpath, tarinfo.mode) + except EnvironmentError as e: + raise ExtractError("could not change mode") + + def utime(self, tarinfo, targetpath): + """Set modification time of targetpath according to tarinfo. + """ + if not hasattr(os, 'utime'): + return + try: + os.utime(targetpath, (tarinfo.mtime, tarinfo.mtime)) + except EnvironmentError as e: + raise ExtractError("could not change modification time") + + #-------------------------------------------------------------------------- + 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 + + # Read the next block. + self.fileobj.seek(self.offset) + 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)) + except EmptyHeaderError: + if self.offset == 0: + raise ReadError("empty file") + except TruncatedHeaderError as e: + if self.offset == 0: + raise ReadError(str(e)) + except SubsequentHeaderError as e: + raise ReadError(str(e)) + break + + if tarinfo is not None: + 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. + if tarinfo is not None: + members = members[:members.index(tarinfo)] + + if normalize: + name = os.path.normpath(name) + + for member in reversed(members): + if normalize: + member_name = os.path.normpath(member.name) + else: + member_name = member.name + + if name == member_name: + return member + + def _load(self): + """Read through the entire archive file and look for readable + members. + """ + while True: + tarinfo = self.next() + if tarinfo is None: + break + 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 IOError("%s is closed" % self.__class__.__name__) + if mode is not None and self.mode not in mode: + raise IOError("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 = 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: + return iter(self.members) + else: + return TarIter(self) + + 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 +# class TarFile + +class TarIter(object): + """Iterator Class. + + for tarinfo in TarFile(...): + suite... + """ + + def __init__(self, tarfile): + """Construct a TarIter object. + """ + self.tarfile = tarfile + self.index = 0 + def __iter__(self): + """Return iterator object. + """ + return self + + def __next__(self): + """Return the next item using TarFile's next() method. + When all members have been read, set TarFile as _loaded. + """ + # Fix for SF #1100429: Under rare circumstances it can + # happen that getmembers() is called during iteration, + # which will cause TarIter to stop prematurely. + if not self.tarfile._loaded: + tarinfo = self.tarfile.next() + if not tarinfo: + self.tarfile._loaded = True + raise StopIteration + else: + try: + tarinfo = self.tarfile.members[self.index] + except IndexError: + raise StopIteration + self.index += 1 + return tarinfo + + next = __next__ # for Python 2.x + +#-------------------- +# exported functions +#-------------------- +def is_tarfile(name): + """Return True if name points to a tar archive that we + are able to handle, else return False. + """ + try: + t = open(name) + t.close() + return True + except TarError: + return False + +bltn_open = open +open = TarFile.open diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/compat.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/compat.py new file mode 100644 index 00000000..ff328c8e --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/compat.py @@ -0,0 +1,1120 @@ +# -*- 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 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 ._backport import shutil + 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 + + _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 + import shutil + from urllib.parse import (urlparse, urlunparse, urljoin, splituser, 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 not os.curdir 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 not normdir 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' + +try: + import sysconfig +except ImportError: # pragma: no cover + from ._backport import sysconfig + +try: + callable = callable +except NameError: # pragma: no cover + from collections 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 + import re + + 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 & <-> & 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 + try: + from imp import cache_from_source + 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]] + #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): + 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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/database.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/database.py new file mode 100644 index 00000000..b13cdac9 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/database.py @@ -0,0 +1,1339 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2012-2017 The Python Software Foundation. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +"""PEP 376 implementation.""" + +from __future__ import unicode_literals + +import base64 +import codecs +import contextlib +import hashlib +import logging +import os +import posixpath +import sys +import zipimport + +from . import DistlibException, resources +from .compat import StringIO +from .version import get_scheme, UnsupportedVersionError +from .metadata import (Metadata, METADATA_FILENAME, WHEEL_METADATA_FILENAME, + LEGACY_METADATA_FILENAME) +from .util import (parse_requirement, cached_property, parse_name_and_version, + read_exports, write_exports, CSVReader, CSVWriter) + + +__all__ = ['Distribution', 'BaseInstalledDistribution', + 'InstalledDistribution', 'EggInfoDistribution', + 'DistributionPath'] + + +logger = logging.getLogger(__name__) + +EXPORTS_FILENAME = 'pydist-exports.json' +COMMANDS_FILENAME = 'pydist-commands.json' + +DIST_FILES = ('INSTALLER', METADATA_FILENAME, 'RECORD', 'REQUESTED', + 'RESOURCES', EXPORTS_FILENAME, 'SHARED') + +DISTINFO_EXT = '.dist-info' + + +class _Cache(object): + """ + A simple cache mapping names and .dist-info paths to distributions + """ + def __init__(self): + """ + Initialise an instance. There is normally one for each DistributionPath. + """ + self.name = {} + self.path = {} + self.generated = False + + def clear(self): + """ + Clear the cache, setting it to its initial state. + """ + self.name.clear() + self.path.clear() + self.generated = False + + def add(self, dist): + """ + Add a distribution to the cache. + :param dist: The distribution to add. + """ + if dist.path not in self.path: + self.path[dist.path] = dist + self.name.setdefault(dist.key, []).append(dist) + + +class DistributionPath(object): + """ + Represents a set of distributions installed on a path (typically sys.path). + """ + def __init__(self, path=None, include_egg=False): + """ + Create an instance from a path, optionally including legacy (distutils/ + setuptools/distribute) distributions. + :param path: The path to use, as a list of directories. If not specified, + sys.path is used. + :param include_egg: If True, this instance will look for and return legacy + distributions as well as those based on PEP 376. + """ + if path is None: + path = sys.path + self.path = path + self._include_dist = True + self._include_egg = include_egg + + self._cache = _Cache() + self._cache_egg = _Cache() + self._cache_enabled = True + self._scheme = get_scheme('default') + + def _get_cache_enabled(self): + return self._cache_enabled + + def _set_cache_enabled(self, value): + self._cache_enabled = value + + cache_enabled = property(_get_cache_enabled, _set_cache_enabled) + + def clear_cache(self): + """ + Clears the internal cache. + """ + self._cache.clear() + self._cache_egg.clear() + + + def _yield_distributions(self): + """ + Yield .dist-info and/or .egg(-info) distributions. + """ + # We need to check if we've seen some resources already, because on + # some Linux systems (e.g. some Debian/Ubuntu variants) there are + # symlinks which alias other files in the environment. + seen = set() + for path in self.path: + finder = resources.finder_for_path(path) + if finder is None: + continue + r = finder.find('') + if not r or not r.is_container: + continue + rset = sorted(r.resources) + for entry in rset: + r = finder.find(entry) + if not r or r.path in seen: + continue + if self._include_dist and entry.endswith(DISTINFO_EXT): + possible_filenames = [METADATA_FILENAME, + WHEEL_METADATA_FILENAME, + LEGACY_METADATA_FILENAME] + for metadata_filename in possible_filenames: + metadata_path = posixpath.join(entry, metadata_filename) + pydist = finder.find(metadata_path) + if pydist: + break + else: + continue + + with contextlib.closing(pydist.as_stream()) as stream: + metadata = Metadata(fileobj=stream, scheme='legacy') + logger.debug('Found %s', r.path) + seen.add(r.path) + yield new_dist_class(r.path, metadata=metadata, + env=self) + elif self._include_egg and entry.endswith(('.egg-info', + '.egg')): + logger.debug('Found %s', r.path) + seen.add(r.path) + yield old_dist_class(r.path, self) + + def _generate_cache(self): + """ + Scan the path for distributions and populate the cache with + those that are found. + """ + gen_dist = not self._cache.generated + gen_egg = self._include_egg and not self._cache_egg.generated + if gen_dist or gen_egg: + for dist in self._yield_distributions(): + if isinstance(dist, InstalledDistribution): + self._cache.add(dist) + else: + self._cache_egg.add(dist) + + if gen_dist: + self._cache.generated = True + if gen_egg: + self._cache_egg.generated = True + + @classmethod + def distinfo_dirname(cls, name, version): + """ + The *name* and *version* parameters are converted into their + filename-escaped form, i.e. any ``'-'`` characters are replaced + with ``'_'`` other than the one in ``'dist-info'`` and the one + separating the name from the version number. + + :parameter name: is converted to a standard distribution name by replacing + any runs of non- alphanumeric characters with a single + ``'-'``. + :type name: string + :parameter version: is converted to a standard version string. Spaces + become dots, and all other non-alphanumeric characters + (except dots) become dashes, with runs of multiple + dashes condensed to a single dash. + :type version: string + :returns: directory name + :rtype: string""" + name = name.replace('-', '_') + return '-'.join([name, version]) + DISTINFO_EXT + + def get_distributions(self): + """ + Provides an iterator that looks for distributions and returns + :class:`InstalledDistribution` or + :class:`EggInfoDistribution` instances for each one of them. + + :rtype: iterator of :class:`InstalledDistribution` and + :class:`EggInfoDistribution` instances + """ + if not self._cache_enabled: + for dist in self._yield_distributions(): + yield dist + else: + self._generate_cache() + + for dist in self._cache.path.values(): + yield dist + + if self._include_egg: + for dist in self._cache_egg.path.values(): + yield dist + + def get_distribution(self, name): + """ + Looks for a named distribution on the path. + + This function only returns the first result found, as no more than one + value is expected. If nothing is found, ``None`` is returned. + + :rtype: :class:`InstalledDistribution`, :class:`EggInfoDistribution` + or ``None`` + """ + result = None + name = name.lower() + if not self._cache_enabled: + for dist in self._yield_distributions(): + if dist.key == name: + result = dist + break + else: + self._generate_cache() + + if name in self._cache.name: + result = self._cache.name[name][0] + elif self._include_egg and name in self._cache_egg.name: + result = self._cache_egg.name[name][0] + return result + + def provides_distribution(self, name, version=None): + """ + Iterates over all distributions to find which distributions provide *name*. + If a *version* is provided, it will be used to filter the results. + + This function only returns the first result found, since no more than + one values are expected. If the directory is not found, returns ``None``. + + :parameter version: a version specifier that indicates the version + required, conforming to the format in ``PEP-345`` + + :type name: string + :type version: string + """ + matcher = None + if version is not None: + try: + matcher = self._scheme.matcher('%s (%s)' % (name, version)) + except ValueError: + raise DistlibException('invalid name or version: %r, %r' % + (name, version)) + + for dist in self.get_distributions(): + # We hit a problem on Travis where enum34 was installed and doesn't + # have a provides attribute ... + if not hasattr(dist, 'provides'): + logger.debug('No "provides": %s', dist) + else: + provided = dist.provides + + for p in provided: + p_name, p_ver = parse_name_and_version(p) + if matcher is None: + if p_name == name: + yield dist + break + else: + if p_name == name and matcher.match(p_ver): + yield dist + break + + def get_file_path(self, name, relative_path): + """ + Return the path to a resource file. + """ + dist = self.get_distribution(name) + if dist is None: + raise LookupError('no distribution named %r found' % name) + return dist.get_resource_path(relative_path) + + def get_exported_entries(self, category, name=None): + """ + Return all of the exported entries in a particular category. + + :param category: The category to search for entries. + :param name: If specified, only entries with that name are returned. + """ + for dist in self.get_distributions(): + r = dist.exports + if category in r: + d = r[category] + if name is not None: + if name in d: + yield d[name] + else: + for v in d.values(): + yield v + + +class Distribution(object): + """ + A base class for distributions, whether installed or from indexes. + Either way, it must have some metadata, so that's all that's needed + for construction. + """ + + build_time_dependency = False + """ + Set to True if it's known to be only a build-time dependency (i.e. + not needed after installation). + """ + + requested = False + """A boolean that indicates whether the ``REQUESTED`` metadata file is + present (in other words, whether the package was installed by user + request or it was installed as a dependency).""" + + def __init__(self, metadata): + """ + Initialise an instance. + :param metadata: The instance of :class:`Metadata` describing this + distribution. + """ + self.metadata = metadata + self.name = metadata.name + self.key = self.name.lower() # for case-insensitive comparisons + self.version = metadata.version + self.locator = None + self.digest = None + self.extras = None # additional features requested + self.context = None # environment marker overrides + self.download_urls = set() + self.digests = {} + + @property + def source_url(self): + """ + The source archive download URL for this distribution. + """ + return self.metadata.source_url + + download_url = source_url # Backward compatibility + + @property + def name_and_version(self): + """ + A utility property which displays the name and version in parentheses. + """ + return '%s (%s)' % (self.name, self.version) + + @property + def provides(self): + """ + A set of distribution names and versions provided by this distribution. + :return: A set of "name (version)" strings. + """ + plist = self.metadata.provides + s = '%s (%s)' % (self.name, self.version) + if s not in plist: + plist.append(s) + return plist + + def _get_requirements(self, req_attr): + md = self.metadata + logger.debug('Getting requirements from metadata %r', md.todict()) + reqts = getattr(md, req_attr) + return set(md.get_requirements(reqts, extras=self.extras, + env=self.context)) + + @property + def run_requires(self): + return self._get_requirements('run_requires') + + @property + def meta_requires(self): + return self._get_requirements('meta_requires') + + @property + def build_requires(self): + return self._get_requirements('build_requires') + + @property + def test_requires(self): + return self._get_requirements('test_requires') + + @property + def dev_requires(self): + return self._get_requirements('dev_requires') + + def matches_requirement(self, req): + """ + Say if this instance matches (fulfills) a requirement. + :param req: The requirement to match. + :rtype req: str + :return: True if it matches, else False. + """ + # Requirement may contain extras - parse to lose those + # from what's passed to the matcher + r = parse_requirement(req) + scheme = get_scheme(self.metadata.scheme) + try: + matcher = scheme.matcher(r.requirement) + except UnsupportedVersionError: + # XXX compat-mode if cannot read the version + logger.warning('could not read version %r - using name only', + req) + name = req.split()[0] + matcher = scheme.matcher(name) + + name = matcher.key # case-insensitive + + result = False + for p in self.provides: + p_name, p_ver = parse_name_and_version(p) + if p_name != name: + continue + try: + result = matcher.match(p_ver) + break + except UnsupportedVersionError: + pass + return result + + def __repr__(self): + """ + Return a textual representation of this instance, + """ + if self.source_url: + suffix = ' [%s]' % self.source_url + else: + suffix = '' + return '<Distribution %s (%s)%s>' % (self.name, self.version, suffix) + + def __eq__(self, other): + """ + See if this distribution is the same as another. + :param other: The distribution to compare with. To be equal to one + another. distributions must have the same type, name, + version and source_url. + :return: True if it is the same, else False. + """ + if type(other) is not type(self): + result = False + else: + result = (self.name == other.name and + self.version == other.version and + self.source_url == other.source_url) + return result + + def __hash__(self): + """ + Compute hash in a way which matches the equality test. + """ + return hash(self.name) + hash(self.version) + hash(self.source_url) + + +class BaseInstalledDistribution(Distribution): + """ + This is the base class for installed distributions (whether PEP 376 or + legacy). + """ + + hasher = None + + def __init__(self, metadata, path, env=None): + """ + Initialise an instance. + :param metadata: An instance of :class:`Metadata` which describes the + distribution. This will normally have been initialised + from a metadata file in the ``path``. + :param path: The path of the ``.dist-info`` or ``.egg-info`` + directory for the distribution. + :param env: This is normally the :class:`DistributionPath` + instance where this distribution was found. + """ + super(BaseInstalledDistribution, self).__init__(metadata) + self.path = path + self.dist_path = env + + def get_hash(self, data, hasher=None): + """ + Get the hash of some data, using a particular hash algorithm, if + specified. + + :param data: The data to be hashed. + :type data: bytes + :param hasher: The name of a hash implementation, supported by hashlib, + or ``None``. Examples of valid values are ``'sha1'``, + ``'sha224'``, ``'sha384'``, '``sha256'``, ``'md5'`` and + ``'sha512'``. If no hasher is specified, the ``hasher`` + attribute of the :class:`InstalledDistribution` instance + is used. If the hasher is determined to be ``None``, MD5 + is used as the hashing algorithm. + :returns: The hash of the data. If a hasher was explicitly specified, + the returned hash will be prefixed with the specified hasher + followed by '='. + :rtype: str + """ + if hasher is None: + hasher = self.hasher + if hasher is None: + hasher = hashlib.md5 + prefix = '' + else: + hasher = getattr(hashlib, hasher) + prefix = '%s=' % self.hasher + digest = hasher(data).digest() + digest = base64.urlsafe_b64encode(digest).rstrip(b'=').decode('ascii') + return '%s%s' % (prefix, digest) + + +class InstalledDistribution(BaseInstalledDistribution): + """ + Created with the *path* of the ``.dist-info`` directory provided to the + constructor. It reads the metadata contained in ``pydist.json`` when it is + instantiated., or uses a passed in Metadata instance (useful for when + dry-run mode is being used). + """ + + hasher = 'sha256' + + def __init__(self, path, metadata=None, env=None): + self.modules = [] + self.finder = finder = resources.finder_for_path(path) + if finder is None: + raise ValueError('finder unavailable for %s' % path) + if env and env._cache_enabled and path in env._cache.path: + metadata = env._cache.path[path].metadata + elif metadata is None: + r = finder.find(METADATA_FILENAME) + # Temporary - for Wheel 0.23 support + if r is None: + r = finder.find(WHEEL_METADATA_FILENAME) + # Temporary - for legacy support + if r is None: + r = finder.find('METADATA') + if r is None: + raise ValueError('no %s found in %s' % (METADATA_FILENAME, + path)) + with contextlib.closing(r.as_stream()) as stream: + metadata = Metadata(fileobj=stream, scheme='legacy') + + super(InstalledDistribution, self).__init__(metadata, path, env) + + if env and env._cache_enabled: + env._cache.add(self) + + r = finder.find('REQUESTED') + self.requested = r is not None + p = os.path.join(path, 'top_level.txt') + if os.path.exists(p): + with open(p, 'rb') as f: + data = f.read() + self.modules = data.splitlines() + + def __repr__(self): + return '<InstalledDistribution %r %s at %r>' % ( + self.name, self.version, self.path) + + def __str__(self): + return "%s %s" % (self.name, self.version) + + def _get_records(self): + """ + Get the list of installed files for the distribution + :return: A list of tuples of path, hash and size. Note that hash and + size might be ``None`` for some entries. The path is exactly + as stored in the file (which is as in PEP 376). + """ + results = [] + r = self.get_distinfo_resource('RECORD') + with contextlib.closing(r.as_stream()) as stream: + with CSVReader(stream=stream) as record_reader: + # Base location is parent dir of .dist-info dir + #base_location = os.path.dirname(self.path) + #base_location = os.path.abspath(base_location) + for row in record_reader: + missing = [None for i in range(len(row), 3)] + path, checksum, size = row + missing + #if not os.path.isabs(path): + # path = path.replace('/', os.sep) + # path = os.path.join(base_location, path) + results.append((path, checksum, size)) + return results + + @cached_property + def exports(self): + """ + Return the information exported by this distribution. + :return: A dictionary of exports, mapping an export category to a dict + of :class:`ExportEntry` instances describing the individual + export entries, and keyed by name. + """ + result = {} + r = self.get_distinfo_resource(EXPORTS_FILENAME) + if r: + result = self.read_exports() + return result + + def read_exports(self): + """ + Read exports data from a file in .ini format. + + :return: A dictionary of exports, mapping an export category to a list + of :class:`ExportEntry` instances describing the individual + export entries. + """ + result = {} + r = self.get_distinfo_resource(EXPORTS_FILENAME) + if r: + with contextlib.closing(r.as_stream()) as stream: + result = read_exports(stream) + return result + + def write_exports(self, exports): + """ + Write a dictionary of exports to a file in .ini format. + :param exports: A dictionary of exports, mapping an export category to + a list of :class:`ExportEntry` instances describing the + individual export entries. + """ + rf = self.get_distinfo_file(EXPORTS_FILENAME) + with open(rf, 'w') as f: + write_exports(exports, f) + + def get_resource_path(self, relative_path): + """ + NOTE: This API may change in the future. + + Return the absolute path to a resource file with the given relative + path. + + :param relative_path: The path, relative to .dist-info, of the resource + of interest. + :return: The absolute path where the resource is to be found. + """ + r = self.get_distinfo_resource('RESOURCES') + with contextlib.closing(r.as_stream()) as stream: + with CSVReader(stream=stream) as resources_reader: + for relative, destination in resources_reader: + if relative == relative_path: + return destination + raise KeyError('no resource file with relative path %r ' + 'is installed' % relative_path) + + def list_installed_files(self): + """ + Iterates over the ``RECORD`` entries and returns a tuple + ``(path, hash, size)`` for each line. + + :returns: iterator of (path, hash, size) + """ + for result in self._get_records(): + yield result + + def write_installed_files(self, paths, prefix, dry_run=False): + """ + Writes the ``RECORD`` file, using the ``paths`` iterable passed in. Any + existing ``RECORD`` file is silently overwritten. + + prefix is used to determine when to write absolute paths. + """ + prefix = os.path.join(prefix, '') + base = os.path.dirname(self.path) + base_under_prefix = base.startswith(prefix) + base = os.path.join(base, '') + record_path = self.get_distinfo_file('RECORD') + logger.info('creating %s', record_path) + if dry_run: + return None + with CSVWriter(record_path) as writer: + for path in paths: + if os.path.isdir(path) or path.endswith(('.pyc', '.pyo')): + # do not put size and hash, as in PEP-376 + hash_value = size = '' + else: + size = '%d' % os.path.getsize(path) + with open(path, 'rb') as fp: + hash_value = self.get_hash(fp.read()) + if path.startswith(base) or (base_under_prefix and + path.startswith(prefix)): + path = os.path.relpath(path, base) + writer.writerow((path, hash_value, size)) + + # add the RECORD file itself + if record_path.startswith(base): + record_path = os.path.relpath(record_path, base) + writer.writerow((record_path, '', '')) + return record_path + + def check_installed_files(self): + """ + Checks that the hashes and sizes of the files in ``RECORD`` are + matched by the files themselves. Returns a (possibly empty) list of + mismatches. Each entry in the mismatch list will be a tuple consisting + of the path, 'exists', 'size' or 'hash' according to what didn't match + (existence is checked first, then size, then hash), the expected + value and the actual value. + """ + mismatches = [] + base = os.path.dirname(self.path) + record_path = self.get_distinfo_file('RECORD') + for path, hash_value, size in self.list_installed_files(): + if not os.path.isabs(path): + path = os.path.join(base, path) + if path == record_path: + continue + if not os.path.exists(path): + mismatches.append((path, 'exists', True, False)) + elif os.path.isfile(path): + actual_size = str(os.path.getsize(path)) + if size and actual_size != size: + mismatches.append((path, 'size', size, actual_size)) + elif hash_value: + if '=' in hash_value: + hasher = hash_value.split('=', 1)[0] + else: + hasher = None + + with open(path, 'rb') as f: + actual_hash = self.get_hash(f.read(), hasher) + if actual_hash != hash_value: + mismatches.append((path, 'hash', hash_value, actual_hash)) + return mismatches + + @cached_property + def shared_locations(self): + """ + A dictionary of shared locations whose keys are in the set 'prefix', + 'purelib', 'platlib', 'scripts', 'headers', 'data' and 'namespace'. + The corresponding value is the absolute path of that category for + this distribution, and takes into account any paths selected by the + user at installation time (e.g. via command-line arguments). In the + case of the 'namespace' key, this would be a list of absolute paths + for the roots of namespace packages in this distribution. + + The first time this property is accessed, the relevant information is + read from the SHARED file in the .dist-info directory. + """ + result = {} + shared_path = os.path.join(self.path, 'SHARED') + if os.path.isfile(shared_path): + with codecs.open(shared_path, 'r', encoding='utf-8') as f: + lines = f.read().splitlines() + for line in lines: + key, value = line.split('=', 1) + if key == 'namespace': + result.setdefault(key, []).append(value) + else: + result[key] = value + return result + + def write_shared_locations(self, paths, dry_run=False): + """ + Write shared location information to the SHARED file in .dist-info. + :param paths: A dictionary as described in the documentation for + :meth:`shared_locations`. + :param dry_run: If True, the action is logged but no file is actually + written. + :return: The path of the file written to. + """ + shared_path = os.path.join(self.path, 'SHARED') + logger.info('creating %s', shared_path) + if dry_run: + return None + lines = [] + for key in ('prefix', 'lib', 'headers', 'scripts', 'data'): + path = paths[key] + if os.path.isdir(paths[key]): + lines.append('%s=%s' % (key, path)) + for ns in paths.get('namespace', ()): + lines.append('namespace=%s' % ns) + + with codecs.open(shared_path, 'w', encoding='utf-8') as f: + f.write('\n'.join(lines)) + return shared_path + + def get_distinfo_resource(self, path): + if path not in DIST_FILES: + raise DistlibException('invalid path for a dist-info file: ' + '%r at %r' % (path, self.path)) + finder = resources.finder_for_path(self.path) + if finder is None: + raise DistlibException('Unable to get a finder for %s' % self.path) + return finder.find(path) + + def get_distinfo_file(self, path): + """ + Returns a path located under the ``.dist-info`` directory. Returns a + string representing the path. + + :parameter path: a ``'/'``-separated path relative to the + ``.dist-info`` directory or an absolute path; + If *path* is an absolute path and doesn't start + with the ``.dist-info`` directory path, + a :class:`DistlibException` is raised + :type path: str + :rtype: str + """ + # Check if it is an absolute path # XXX use relpath, add tests + if path.find(os.sep) >= 0: + # it's an absolute path? + distinfo_dirname, path = path.split(os.sep)[-2:] + if distinfo_dirname != self.path.split(os.sep)[-1]: + raise DistlibException( + 'dist-info file %r does not belong to the %r %s ' + 'distribution' % (path, self.name, self.version)) + + # The file must be relative + if path not in DIST_FILES: + raise DistlibException('invalid path for a dist-info file: ' + '%r at %r' % (path, self.path)) + + return os.path.join(self.path, path) + + def list_distinfo_files(self): + """ + Iterates over the ``RECORD`` entries and returns paths for each line if + the path is pointing to a file located in the ``.dist-info`` directory + or one of its subdirectories. + + :returns: iterator of paths + """ + base = os.path.dirname(self.path) + for path, checksum, size in self._get_records(): + # XXX add separator or use real relpath algo + if not os.path.isabs(path): + path = os.path.join(base, path) + if path.startswith(self.path): + yield path + + def __eq__(self, other): + return (isinstance(other, InstalledDistribution) and + self.path == other.path) + + # See http://docs.python.org/reference/datamodel#object.__hash__ + __hash__ = object.__hash__ + + +class EggInfoDistribution(BaseInstalledDistribution): + """Created with the *path* of the ``.egg-info`` directory or file provided + to the constructor. It reads the metadata contained in the file itself, or + if the given path happens to be a directory, the metadata is read from the + file ``PKG-INFO`` under that directory.""" + + requested = True # as we have no way of knowing, assume it was + shared_locations = {} + + def __init__(self, path, env=None): + def set_name_and_version(s, n, v): + s.name = n + s.key = n.lower() # for case-insensitive comparisons + s.version = v + + self.path = path + self.dist_path = env + if env and env._cache_enabled and path in env._cache_egg.path: + metadata = env._cache_egg.path[path].metadata + set_name_and_version(self, metadata.name, metadata.version) + else: + metadata = self._get_metadata(path) + + # Need to be set before caching + set_name_and_version(self, metadata.name, metadata.version) + + if env and env._cache_enabled: + env._cache_egg.add(self) + super(EggInfoDistribution, self).__init__(metadata, path, env) + + def _get_metadata(self, path): + requires = None + + def parse_requires_data(data): + """Create a list of dependencies from a requires.txt file. + + *data*: the contents of a setuptools-produced requires.txt file. + """ + reqs = [] + lines = data.splitlines() + for line in lines: + line = line.strip() + if line.startswith('['): + logger.warning('Unexpected line: quitting requirement scan: %r', + line) + break + r = parse_requirement(line) + if not r: + logger.warning('Not recognised as a requirement: %r', line) + continue + if r.extras: + logger.warning('extra requirements in requires.txt are ' + 'not supported') + if not r.constraints: + reqs.append(r.name) + else: + cons = ', '.join('%s%s' % c for c in r.constraints) + reqs.append('%s (%s)' % (r.name, cons)) + return reqs + + def parse_requires_path(req_path): + """Create a list of dependencies from a requires.txt file. + + *req_path*: the path to a setuptools-produced requires.txt file. + """ + + reqs = [] + try: + with codecs.open(req_path, 'r', 'utf-8') as fp: + reqs = parse_requires_data(fp.read()) + except IOError: + pass + return reqs + + tl_path = tl_data = None + if path.endswith('.egg'): + if os.path.isdir(path): + p = os.path.join(path, 'EGG-INFO') + meta_path = os.path.join(p, 'PKG-INFO') + metadata = Metadata(path=meta_path, scheme='legacy') + req_path = os.path.join(p, 'requires.txt') + tl_path = os.path.join(p, 'top_level.txt') + requires = parse_requires_path(req_path) + else: + # FIXME handle the case where zipfile is not available + zipf = zipimport.zipimporter(path) + fileobj = StringIO( + zipf.get_data('EGG-INFO/PKG-INFO').decode('utf8')) + metadata = Metadata(fileobj=fileobj, scheme='legacy') + try: + data = zipf.get_data('EGG-INFO/requires.txt') + tl_data = zipf.get_data('EGG-INFO/top_level.txt').decode('utf-8') + requires = parse_requires_data(data.decode('utf-8')) + except IOError: + requires = None + elif path.endswith('.egg-info'): + if os.path.isdir(path): + req_path = os.path.join(path, 'requires.txt') + requires = parse_requires_path(req_path) + path = os.path.join(path, 'PKG-INFO') + tl_path = os.path.join(path, 'top_level.txt') + metadata = Metadata(path=path, scheme='legacy') + else: + raise DistlibException('path must end with .egg-info or .egg, ' + 'got %r' % path) + + if requires: + metadata.add_requirements(requires) + # look for top-level modules in top_level.txt, if present + if tl_data is None: + if tl_path is not None and os.path.exists(tl_path): + with open(tl_path, 'rb') as f: + tl_data = f.read().decode('utf-8') + if not tl_data: + tl_data = [] + else: + tl_data = tl_data.splitlines() + self.modules = tl_data + return metadata + + def __repr__(self): + return '<EggInfoDistribution %r %s at %r>' % ( + self.name, self.version, self.path) + + def __str__(self): + return "%s %s" % (self.name, self.version) + + def check_installed_files(self): + """ + Checks that the hashes and sizes of the files in ``RECORD`` are + matched by the files themselves. Returns a (possibly empty) list of + mismatches. Each entry in the mismatch list will be a tuple consisting + of the path, 'exists', 'size' or 'hash' according to what didn't match + (existence is checked first, then size, then hash), the expected + value and the actual value. + """ + mismatches = [] + record_path = os.path.join(self.path, 'installed-files.txt') + if os.path.exists(record_path): + for path, _, _ in self.list_installed_files(): + if path == record_path: + continue + if not os.path.exists(path): + mismatches.append((path, 'exists', True, False)) + return mismatches + + def list_installed_files(self): + """ + Iterates over the ``installed-files.txt`` entries and returns a tuple + ``(path, hash, size)`` for each line. + + :returns: a list of (path, hash, size) + """ + + def _md5(path): + f = open(path, 'rb') + try: + content = f.read() + finally: + f.close() + return hashlib.md5(content).hexdigest() + + def _size(path): + return os.stat(path).st_size + + record_path = os.path.join(self.path, 'installed-files.txt') + result = [] + if os.path.exists(record_path): + with codecs.open(record_path, 'r', encoding='utf-8') as f: + for line in f: + line = line.strip() + p = os.path.normpath(os.path.join(self.path, line)) + # "./" is present as a marker between installed files + # and installation metadata files + if not os.path.exists(p): + logger.warning('Non-existent file: %s', p) + if p.endswith(('.pyc', '.pyo')): + continue + #otherwise fall through and fail + if not os.path.isdir(p): + result.append((p, _md5(p), _size(p))) + result.append((record_path, None, None)) + return result + + def list_distinfo_files(self, absolute=False): + """ + Iterates over the ``installed-files.txt`` entries and returns paths for + each line if the path is pointing to a file located in the + ``.egg-info`` directory or one of its subdirectories. + + :parameter absolute: If *absolute* is ``True``, each returned path is + transformed into a local absolute path. Otherwise the + raw value from ``installed-files.txt`` is returned. + :type absolute: boolean + :returns: iterator of paths + """ + record_path = os.path.join(self.path, 'installed-files.txt') + if os.path.exists(record_path): + skip = True + with codecs.open(record_path, 'r', encoding='utf-8') as f: + for line in f: + line = line.strip() + if line == './': + skip = False + continue + if not skip: + p = os.path.normpath(os.path.join(self.path, line)) + if p.startswith(self.path): + if absolute: + yield p + else: + yield line + + def __eq__(self, other): + return (isinstance(other, EggInfoDistribution) and + self.path == other.path) + + # See http://docs.python.org/reference/datamodel#object.__hash__ + __hash__ = object.__hash__ + +new_dist_class = InstalledDistribution +old_dist_class = EggInfoDistribution + + +class DependencyGraph(object): + """ + Represents a dependency graph between distributions. + + The dependency relationships are stored in an ``adjacency_list`` that maps + distributions to a list of ``(other, label)`` tuples where ``other`` + is a distribution and the edge is labeled with ``label`` (i.e. the version + specifier, if such was provided). Also, for more efficient traversal, for + every distribution ``x``, a list of predecessors is kept in + ``reverse_list[x]``. An edge from distribution ``a`` to + distribution ``b`` means that ``a`` depends on ``b``. If any missing + dependencies are found, they are stored in ``missing``, which is a + dictionary that maps distributions to a list of requirements that were not + provided by any other distributions. + """ + + def __init__(self): + self.adjacency_list = {} + self.reverse_list = {} + self.missing = {} + + def add_distribution(self, distribution): + """Add the *distribution* to the graph. + + :type distribution: :class:`distutils2.database.InstalledDistribution` + or :class:`distutils2.database.EggInfoDistribution` + """ + self.adjacency_list[distribution] = [] + self.reverse_list[distribution] = [] + #self.missing[distribution] = [] + + def add_edge(self, x, y, label=None): + """Add an edge from distribution *x* to distribution *y* with the given + *label*. + + :type x: :class:`distutils2.database.InstalledDistribution` or + :class:`distutils2.database.EggInfoDistribution` + :type y: :class:`distutils2.database.InstalledDistribution` or + :class:`distutils2.database.EggInfoDistribution` + :type label: ``str`` or ``None`` + """ + self.adjacency_list[x].append((y, label)) + # multiple edges are allowed, so be careful + if x not in self.reverse_list[y]: + self.reverse_list[y].append(x) + + def add_missing(self, distribution, requirement): + """ + Add a missing *requirement* for the given *distribution*. + + :type distribution: :class:`distutils2.database.InstalledDistribution` + or :class:`distutils2.database.EggInfoDistribution` + :type requirement: ``str`` + """ + logger.debug('%s missing %r', distribution, requirement) + self.missing.setdefault(distribution, []).append(requirement) + + def _repr_dist(self, dist): + return '%s %s' % (dist.name, dist.version) + + def repr_node(self, dist, level=1): + """Prints only a subgraph""" + output = [self._repr_dist(dist)] + for other, label in self.adjacency_list[dist]: + dist = self._repr_dist(other) + if label is not None: + dist = '%s [%s]' % (dist, label) + output.append(' ' * level + str(dist)) + suboutput = self.repr_node(other, level + 1) + subs = suboutput.split('\n') + output.extend(subs[1:]) + return '\n'.join(output) + + def to_dot(self, f, skip_disconnected=True): + """Writes a DOT output for the graph to the provided file *f*. + + If *skip_disconnected* is set to ``True``, then all distributions + that are not dependent on any other distribution are skipped. + + :type f: has to support ``file``-like operations + :type skip_disconnected: ``bool`` + """ + disconnected = [] + + f.write("digraph dependencies {\n") + for dist, adjs in self.adjacency_list.items(): + if len(adjs) == 0 and not skip_disconnected: + disconnected.append(dist) + for other, label in adjs: + if not label is None: + f.write('"%s" -> "%s" [label="%s"]\n' % + (dist.name, other.name, label)) + else: + f.write('"%s" -> "%s"\n' % (dist.name, other.name)) + if not skip_disconnected and len(disconnected) > 0: + f.write('subgraph disconnected {\n') + f.write('label = "Disconnected"\n') + f.write('bgcolor = red\n') + + for dist in disconnected: + f.write('"%s"' % dist.name) + f.write('\n') + f.write('}\n') + f.write('}\n') + + def topological_sort(self): + """ + Perform a topological sort of the graph. + :return: A tuple, the first element of which is a topologically sorted + list of distributions, and the second element of which is a + list of distributions that cannot be sorted because they have + circular dependencies and so form a cycle. + """ + result = [] + # Make a shallow copy of the adjacency list + alist = {} + for k, v in self.adjacency_list.items(): + alist[k] = v[:] + while True: + # See what we can remove in this run + to_remove = [] + for k, v in list(alist.items())[:]: + if not v: + to_remove.append(k) + del alist[k] + if not to_remove: + # What's left in alist (if anything) is a cycle. + break + # Remove from the adjacency list of others + for k, v in alist.items(): + alist[k] = [(d, r) for d, r in v if d not in to_remove] + logger.debug('Moving to result: %s', + ['%s (%s)' % (d.name, d.version) for d in to_remove]) + result.extend(to_remove) + return result, list(alist.keys()) + + def __repr__(self): + """Representation of the graph""" + output = [] + for dist, adjs in self.adjacency_list.items(): + output.append(self.repr_node(dist)) + return '\n'.join(output) + + +def make_graph(dists, scheme='default'): + """Makes a dependency graph from the given distributions. + + :parameter dists: a list of distributions + :type dists: list of :class:`distutils2.database.InstalledDistribution` and + :class:`distutils2.database.EggInfoDistribution` instances + :rtype: a :class:`DependencyGraph` instance + """ + scheme = get_scheme(scheme) + graph = DependencyGraph() + provided = {} # maps names to lists of (version, dist) tuples + + # first, build the graph and find out what's provided + for dist in dists: + graph.add_distribution(dist) + + for p in dist.provides: + name, version = parse_name_and_version(p) + logger.debug('Add to provided: %s, %s, %s', name, version, dist) + provided.setdefault(name, []).append((version, dist)) + + # now make the edges + for dist in dists: + requires = (dist.run_requires | dist.meta_requires | + dist.build_requires | dist.dev_requires) + for req in requires: + try: + matcher = scheme.matcher(req) + except UnsupportedVersionError: + # XXX compat-mode if cannot read the version + logger.warning('could not read version %r - using name only', + req) + name = req.split()[0] + matcher = scheme.matcher(name) + + name = matcher.key # case-insensitive + + matched = False + if name in provided: + for version, provider in provided[name]: + try: + match = matcher.match(version) + except UnsupportedVersionError: + match = False + + if match: + graph.add_edge(dist, provider, req) + matched = True + break + if not matched: + graph.add_missing(dist, req) + return graph + + +def get_dependent_dists(dists, dist): + """Recursively generate a list of distributions from *dists* that are + dependent on *dist*. + + :param dists: a list of distributions + :param dist: a distribution, member of *dists* for which we are interested + """ + if dist not in dists: + raise DistlibException('given distribution %r is not a member ' + 'of the list' % dist.name) + graph = make_graph(dists) + + dep = [dist] # dependent distributions + todo = graph.reverse_list[dist] # list of nodes we should inspect + + while todo: + d = todo.pop() + dep.append(d) + for succ in graph.reverse_list[d]: + if succ not in dep: + todo.append(succ) + + dep.pop(0) # remove dist from dep, was there to prevent infinite loops + return dep + + +def get_required_dists(dists, dist): + """Recursively generate a list of distributions from *dists* that are + required by *dist*. + + :param dists: a list of distributions + :param dist: a distribution, member of *dists* for which we are interested + """ + if dist not in dists: + raise DistlibException('given distribution %r is not a member ' + 'of the list' % dist.name) + graph = make_graph(dists) + + req = [] # required distributions + todo = graph.adjacency_list[dist] # list of nodes we should inspect + + while todo: + d = todo.pop()[0] + req.append(d) + for pred in graph.adjacency_list[d]: + if pred not in req: + todo.append(pred) + + return req + + +def make_dist(name, version, **kwargs): + """ + A convenience method for making a dist given just a name and version. + """ + summary = kwargs.pop('summary', 'Placeholder for summary') + md = Metadata(**kwargs) + md.name = name + md.version = version + md.summary = summary or 'Placeholder for summary' + return Distribution(md) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/index.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/index.py new file mode 100644 index 00000000..2406be21 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/index.py @@ -0,0 +1,516 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2013 Vinay Sajip. +# Licensed to the Python Software Foundation under a contributor agreement. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +import hashlib +import logging +import os +import shutil +import subprocess +import tempfile +try: + from threading import Thread +except ImportError: + from dummy_threading import Thread + +from . import DistlibException +from .compat import (HTTPBasicAuthHandler, Request, HTTPPasswordMgr, + urlparse, build_opener, string_types) +from .util import cached_property, zip_dir, ServerProxy + +logger = logging.getLogger(__name__) + +DEFAULT_INDEX = 'https://pypi.python.org/pypi' +DEFAULT_REALM = 'pypi' + +class PackageIndex(object): + """ + This class represents a package index compatible with PyPI, the Python + Package Index. + """ + + boundary = b'----------ThIs_Is_tHe_distlib_index_bouNdaRY_$' + + def __init__(self, url=None): + """ + Initialise an instance. + + :param url: The URL of the index. If not specified, the URL for PyPI is + used. + """ + self.url = url or DEFAULT_INDEX + self.read_configuration() + scheme, netloc, path, params, query, frag = urlparse(self.url) + if params or query or frag or scheme not in ('http', 'https'): + raise DistlibException('invalid repository: %s' % self.url) + self.password_handler = None + self.ssl_verifier = None + self.gpg = None + self.gpg_home = None + with open(os.devnull, 'w') as sink: + # Use gpg by default rather than gpg2, as gpg2 insists on + # prompting for passwords + for s in ('gpg', 'gpg2'): + try: + rc = subprocess.check_call([s, '--version'], stdout=sink, + stderr=sink) + if rc == 0: + self.gpg = s + break + except OSError: + pass + + def _get_pypirc_command(self): + """ + 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) + + def read_configuration(self): + """ + Read the PyPI access configuration as supported by distutils, getting + PyPI to do the actual work. This populates ``username``, ``password``, + ``realm`` and ``url`` attributes from the configuration. + """ + # get distutils to do the work + c = self._get_pypirc_command() + c.repository = self.url + cfg = c._read_pypirc() + self.username = cfg.get('username') + self.password = cfg.get('password') + self.realm = cfg.get('realm', 'pypi') + self.url = cfg.get('repository', self.url) + + def save_configuration(self): + """ + Save the PyPI access configuration. You must have set ``username`` and + ``password`` attributes before calling this method. + + Again, distutils is used to do the actual work. + """ + self.check_credentials() + # get distutils to do the work + c = self._get_pypirc_command() + c._store_pypirc(self.username, self.password) + + def check_credentials(self): + """ + Check that ``username`` and ``password`` have been set, and raise an + exception if not. + """ + if self.username is None or self.password is None: + raise DistlibException('username and password must be set') + pm = HTTPPasswordMgr() + _, netloc, _, _, _, _ = urlparse(self.url) + pm.add_password(self.realm, netloc, self.username, self.password) + self.password_handler = HTTPBasicAuthHandler(pm) + + def register(self, metadata): + """ + Register a distribution on PyPI, using the provided metadata. + + :param metadata: A :class:`Metadata` instance defining at least a name + and version number for the distribution to be + registered. + :return: The HTTP response received from PyPI upon submission of the + request. + """ + self.check_credentials() + metadata.validate() + d = metadata.todict() + d[':action'] = 'verify' + request = self.encode_request(d.items(), []) + response = self.send_request(request) + d[':action'] = 'submit' + request = self.encode_request(d.items(), []) + return self.send_request(request) + + def _reader(self, name, stream, outbuf): + """ + Thread runner for reading lines of from a subprocess into a buffer. + + :param name: The logical name of the stream (used for logging only). + :param stream: The stream to read from. This will typically a pipe + connected to the output stream of a subprocess. + :param outbuf: The list to append the read lines to. + """ + while True: + s = stream.readline() + if not s: + break + s = s.decode('utf-8').rstrip() + outbuf.append(s) + logger.debug('%s: %s' % (name, s)) + stream.close() + + def get_sign_command(self, filename, signer, sign_password, + keystore=None): + """ + Return a suitable command for signing a file. + + :param filename: The pathname to the file to be signed. + :param signer: The identifier of the signer of the file. + :param sign_password: The passphrase for the signer's + private key used for signing. + :param keystore: The path to a directory which contains the keys + used in verification. If not specified, the + instance's ``gpg_home`` attribute is used instead. + :return: The signing command as a list suitable to be + passed to :class:`subprocess.Popen`. + """ + cmd = [self.gpg, '--status-fd', '2', '--no-tty'] + if keystore is None: + keystore = self.gpg_home + if keystore: + cmd.extend(['--homedir', keystore]) + if sign_password is not None: + cmd.extend(['--batch', '--passphrase-fd', '0']) + td = tempfile.mkdtemp() + sf = os.path.join(td, os.path.basename(filename) + '.asc') + cmd.extend(['--detach-sign', '--armor', '--local-user', + signer, '--output', sf, filename]) + logger.debug('invoking: %s', ' '.join(cmd)) + return cmd, sf + + def run_command(self, cmd, input_data=None): + """ + Run a command in a child process , passing it any input data specified. + + :param cmd: The command to run. + :param input_data: If specified, this must be a byte string containing + data to be sent to the child process. + :return: A tuple consisting of the subprocess' exit code, a list of + lines read from the subprocess' ``stdout``, and a list of + lines read from the subprocess' ``stderr``. + """ + kwargs = { + 'stdout': subprocess.PIPE, + 'stderr': subprocess.PIPE, + } + if input_data is not None: + kwargs['stdin'] = subprocess.PIPE + stdout = [] + stderr = [] + p = subprocess.Popen(cmd, **kwargs) + # We don't use communicate() here because we may need to + # get clever with interacting with the command + t1 = Thread(target=self._reader, args=('stdout', p.stdout, stdout)) + t1.start() + t2 = Thread(target=self._reader, args=('stderr', p.stderr, stderr)) + t2.start() + if input_data is not None: + p.stdin.write(input_data) + p.stdin.close() + + p.wait() + t1.join() + t2.join() + return p.returncode, stdout, stderr + + def sign_file(self, filename, signer, sign_password, keystore=None): + """ + Sign a file. + + :param filename: The pathname to the file to be signed. + :param signer: The identifier of the signer of the file. + :param sign_password: The passphrase for the signer's + private key used for signing. + :param keystore: The path to a directory which contains the keys + used in signing. If not specified, the instance's + ``gpg_home`` attribute is used instead. + :return: The absolute pathname of the file where the signature is + stored. + """ + cmd, sig_file = self.get_sign_command(filename, signer, sign_password, + keystore) + rc, stdout, stderr = self.run_command(cmd, + sign_password.encode('utf-8')) + if rc != 0: + raise DistlibException('sign command failed with error ' + 'code %s' % rc) + return sig_file + + def upload_file(self, metadata, filename, signer=None, sign_password=None, + filetype='sdist', pyversion='source', keystore=None): + """ + Upload a release file to the index. + + :param metadata: A :class:`Metadata` instance defining at least a name + and version number for the file to be uploaded. + :param filename: The pathname of the file to be uploaded. + :param signer: The identifier of the signer of the file. + :param sign_password: The passphrase for the signer's + private key used for signing. + :param filetype: The type of the file being uploaded. This is the + distutils command which produced that file, e.g. + ``sdist`` or ``bdist_wheel``. + :param pyversion: The version of Python which the release relates + to. For code compatible with any Python, this would + be ``source``, otherwise it would be e.g. ``3.2``. + :param keystore: The path to a directory which contains the keys + used in signing. If not specified, the instance's + ``gpg_home`` attribute is used instead. + :return: The HTTP response received from PyPI upon submission of the + request. + """ + self.check_credentials() + if not os.path.exists(filename): + raise DistlibException('not found: %s' % filename) + metadata.validate() + d = metadata.todict() + sig_file = None + if signer: + if not self.gpg: + logger.warning('no signing program available - not signed') + else: + sig_file = self.sign_file(filename, signer, sign_password, + keystore) + with open(filename, 'rb') as f: + file_data = f.read() + md5_digest = hashlib.md5(file_data).hexdigest() + sha256_digest = hashlib.sha256(file_data).hexdigest() + d.update({ + ':action': 'file_upload', + 'protocol_version': '1', + 'filetype': filetype, + 'pyversion': pyversion, + 'md5_digest': md5_digest, + 'sha256_digest': sha256_digest, + }) + files = [('content', os.path.basename(filename), file_data)] + if sig_file: + with open(sig_file, 'rb') as f: + sig_data = f.read() + files.append(('gpg_signature', os.path.basename(sig_file), + sig_data)) + shutil.rmtree(os.path.dirname(sig_file)) + request = self.encode_request(d.items(), files) + return self.send_request(request) + + def upload_documentation(self, metadata, doc_dir): + """ + Upload documentation to the index. + + :param metadata: A :class:`Metadata` instance defining at least a name + and version number for the documentation to be + uploaded. + :param doc_dir: The pathname of the directory which contains the + documentation. This should be the directory that + contains the ``index.html`` for the documentation. + :return: The HTTP response received from PyPI upon submission of the + request. + """ + self.check_credentials() + if not os.path.isdir(doc_dir): + raise DistlibException('not a directory: %r' % doc_dir) + fn = os.path.join(doc_dir, 'index.html') + if not os.path.exists(fn): + raise DistlibException('not found: %r' % fn) + metadata.validate() + name, version = metadata.name, metadata.version + zip_data = zip_dir(doc_dir).getvalue() + fields = [(':action', 'doc_upload'), + ('name', name), ('version', version)] + files = [('content', name, zip_data)] + request = self.encode_request(fields, files) + return self.send_request(request) + + def get_verify_command(self, signature_filename, data_filename, + keystore=None): + """ + Return a suitable command for verifying a file. + + :param signature_filename: The pathname to the file containing the + signature. + :param data_filename: The pathname to the file containing the + signed data. + :param keystore: The path to a directory which contains the keys + used in verification. If not specified, the + instance's ``gpg_home`` attribute is used instead. + :return: The verifying command as a list suitable to be + passed to :class:`subprocess.Popen`. + """ + cmd = [self.gpg, '--status-fd', '2', '--no-tty'] + if keystore is None: + keystore = self.gpg_home + if keystore: + cmd.extend(['--homedir', keystore]) + cmd.extend(['--verify', signature_filename, data_filename]) + logger.debug('invoking: %s', ' '.join(cmd)) + return cmd + + def verify_signature(self, signature_filename, data_filename, + keystore=None): + """ + Verify a signature for a file. + + :param signature_filename: The pathname to the file containing the + signature. + :param data_filename: The pathname to the file containing the + signed data. + :param keystore: The path to a directory which contains the keys + used in verification. If not specified, the + instance's ``gpg_home`` attribute is used instead. + :return: True if the signature was verified, else False. + """ + if not self.gpg: + raise DistlibException('verification unavailable because gpg ' + 'unavailable') + cmd = self.get_verify_command(signature_filename, data_filename, + keystore) + rc, stdout, stderr = self.run_command(cmd) + if rc not in (0, 1): + raise DistlibException('verify command failed with error ' + 'code %s' % rc) + return rc == 0 + + def download_file(self, url, destfile, digest=None, reporthook=None): + """ + This is a convenience method for downloading a file from an URL. + Normally, this will be a file from the index, though currently + no check is made for this (i.e. a file can be downloaded from + anywhere). + + The method is just like the :func:`urlretrieve` function in the + standard library, except that it allows digest computation to be + done during download and checking that the downloaded data + matched any expected value. + + :param url: The URL of the file to be downloaded (assumed to be + available via an HTTP GET request). + :param destfile: The pathname where the downloaded file is to be + saved. + :param digest: If specified, this must be a (hasher, value) + tuple, where hasher is the algorithm used (e.g. + ``'md5'``) and ``value`` is the expected value. + :param reporthook: The same as for :func:`urlretrieve` in the + standard library. + """ + if digest is None: + digester = None + logger.debug('No digest specified') + else: + if isinstance(digest, (list, tuple)): + hasher, digest = digest + else: + hasher = 'md5' + digester = getattr(hashlib, hasher)() + logger.debug('Digest specified: %s' % digest) + # The following code is equivalent to urlretrieve. + # We need to do it this way so that we can compute the + # digest of the file as we go. + with open(destfile, 'wb') as dfp: + # addinfourl is not a context manager on 2.x + # so we have to use try/finally + sfp = self.send_request(Request(url)) + try: + headers = sfp.info() + blocksize = 8192 + size = -1 + read = 0 + blocknum = 0 + if "content-length" in headers: + size = int(headers["Content-Length"]) + if reporthook: + reporthook(blocknum, blocksize, size) + while True: + block = sfp.read(blocksize) + if not block: + break + read += len(block) + dfp.write(block) + if digester: + digester.update(block) + blocknum += 1 + if reporthook: + reporthook(blocknum, blocksize, size) + finally: + sfp.close() + + # check that we got the whole file, if we can + if size >= 0 and read < size: + raise DistlibException( + 'retrieval incomplete: got only %d out of %d bytes' + % (read, size)) + # if we have a digest, it must match. + if digester: + actual = digester.hexdigest() + if digest != actual: + raise DistlibException('%s digest mismatch for %s: expected ' + '%s, got %s' % (hasher, destfile, + digest, actual)) + logger.debug('Digest verified: %s', digest) + + def send_request(self, req): + """ + Send a standard library :class:`Request` to PyPI and return its + response. + + :param req: The request to send. + :return: The HTTP response from PyPI (a standard library HTTPResponse). + """ + handlers = [] + if self.password_handler: + handlers.append(self.password_handler) + if self.ssl_verifier: + handlers.append(self.ssl_verifier) + opener = build_opener(*handlers) + return opener.open(req) + + def encode_request(self, fields, files): + """ + Encode fields and files for posting to an HTTP server. + + :param fields: The fields to send as a list of (fieldname, value) + tuples. + :param files: The files to send as a list of (fieldname, filename, + file_bytes) tuple. + """ + # Adapted from packaging, which in turn was adapted from + # http://code.activestate.com/recipes/146306 + + parts = [] + boundary = self.boundary + for k, values in fields: + if not isinstance(values, (list, tuple)): + values = [values] + + for v in values: + parts.extend(( + b'--' + boundary, + ('Content-Disposition: form-data; name="%s"' % + k).encode('utf-8'), + b'', + v.encode('utf-8'))) + for key, filename, value in files: + parts.extend(( + b'--' + boundary, + ('Content-Disposition: form-data; name="%s"; filename="%s"' % + (key, filename)).encode('utf-8'), + b'', + value)) + + parts.extend((b'--' + boundary + b'--', b'')) + + body = b'\r\n'.join(parts) + ct = b'multipart/form-data; boundary=' + boundary + headers = { + 'Content-type': ct, + 'Content-length': str(len(body)) + } + return Request(self.url, body, headers) + + def search(self, terms, operator=None): + if isinstance(terms, string_types): + terms = {'name': terms} + rpc_proxy = ServerProxy(self.url, timeout=3.0) + try: + return rpc_proxy.search(terms, operator or 'and') + finally: + rpc_proxy('close')() diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/locators.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/locators.py new file mode 100644 index 00000000..5c655c3e --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/locators.py @@ -0,0 +1,1295 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2012-2015 Vinay Sajip. +# Licensed to the Python Software Foundation under a contributor agreement. +# See LICENSE.txt and CONTRIBUTORS.txt. +# + +import gzip +from io import BytesIO +import json +import logging +import os +import posixpath +import re +try: + import threading +except ImportError: # pragma: no cover + import dummy_threading as threading +import zlib + +from . import DistlibException +from .compat import (urljoin, urlparse, urlunparse, url2pathname, pathname2url, + queue, quote, unescape, string_types, build_opener, + HTTPRedirectHandler as BaseRedirectHandler, text_type, + Request, HTTPError, URLError) +from .database import Distribution, DistributionPath, make_dist +from .metadata import Metadata, MetadataInvalidError +from .util import (cached_property, parse_credentials, ensure_slash, + split_filename, get_project_data, parse_requirement, + parse_name_and_version, ServerProxy, normalize_name) +from .version import get_scheme, UnsupportedVersionError +from .wheel import Wheel, is_compatible + +logger = logging.getLogger(__name__) + +HASHER_HASH = re.compile(r'^(\w+)=([a-f0-9]+)') +CHARSET = re.compile(r';\s*charset\s*=\s*(.*)\s*$', re.I) +HTML_CONTENT_TYPE = re.compile('text/html|application/x(ht)?ml') +DEFAULT_INDEX = 'https://pypi.python.org/pypi' + +def get_all_distribution_names(url=None): + """ + Return all distribution names known by an index. + :param url: The URL of the index. + :return: A list of all known distribution names. + """ + if url is None: + url = DEFAULT_INDEX + client = ServerProxy(url, timeout=3.0) + try: + return client.list_packages() + finally: + client('close')() + +class RedirectHandler(BaseRedirectHandler): + """ + A class to work around a bug in some Python 3.2.x releases. + """ + # There's a bug in the base version for some 3.2.x + # (e.g. 3.2.2 on Ubuntu Oneiric). If a Location header + # returns e.g. /abc, it bails because it says the scheme '' + # is bogus, when actually it should use the request's + # URL for the scheme. See Python issue #13696. + 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. + newurl = None + for key in ('location', 'uri'): + if key in headers: + newurl = headers[key] + break + if newurl is None: # pragma: no cover + return + urlparts = urlparse(newurl) + if urlparts.scheme == '': + newurl = urljoin(req.get_full_url(), newurl) + if hasattr(headers, 'replace_header'): + headers.replace_header(key, newurl) + else: + headers[key] = newurl + return BaseRedirectHandler.http_error_302(self, req, fp, code, msg, + headers) + + http_error_301 = http_error_303 = http_error_307 = http_error_302 + +class Locator(object): + """ + A base class for locators - things that locate distributions. + """ + source_extensions = ('.tar.gz', '.tar.bz2', '.tar', '.zip', '.tgz', '.tbz') + binary_extensions = ('.egg', '.exe', '.whl') + excluded_extensions = ('.pdf',) + + # A list of tags indicating which wheels you want to match. The default + # value of None matches against the tags compatible with the running + # Python. If you want to match other values, set wheel_tags on a locator + # instance to a list of tuples (pyver, abi, arch) which you want to match. + wheel_tags = None + + downloadable_extensions = source_extensions + ('.whl',) + + def __init__(self, scheme='default'): + """ + Initialise an instance. + :param scheme: Because locators look for most recent versions, they + need to know the version scheme to use. This specifies + the current PEP-recommended scheme - use ``'legacy'`` + if you need to support existing distributions on PyPI. + """ + self._cache = {} + self.scheme = scheme + # Because of bugs in some of the handlers on some of the platforms, + # we use our own opener rather than just using urlopen. + self.opener = build_opener(RedirectHandler()) + # If get_project() is called from locate(), the matcher instance + # is set from the requirement passed to locate(). See issue #18 for + # why this can be useful to know. + self.matcher = None + self.errors = queue.Queue() + + def get_errors(self): + """ + Return any errors which have occurred. + """ + result = [] + while not self.errors.empty(): # pragma: no cover + try: + e = self.errors.get(False) + result.append(e) + except self.errors.Empty: + continue + self.errors.task_done() + return result + + def clear_errors(self): + """ + Clear any errors which may have been logged. + """ + # Just get the errors and throw them away + self.get_errors() + + def clear_cache(self): + self._cache.clear() + + def _get_scheme(self): + return self._scheme + + def _set_scheme(self, value): + self._scheme = value + + scheme = property(_get_scheme, _set_scheme) + + def _get_project(self, name): + """ + For a given project, get a dictionary mapping available versions to Distribution + instances. + + This should be implemented in subclasses. + + If called from a locate() request, self.matcher will be set to a + matcher for the requirement to satisfy, otherwise it will be None. + """ + raise NotImplementedError('Please implement in the subclass') + + def get_distribution_names(self): + """ + Return all the distribution names known to this locator. + """ + raise NotImplementedError('Please implement in the subclass') + + def get_project(self, name): + """ + For a given project, get a dictionary mapping available versions to Distribution + instances. + + This calls _get_project to do all the work, and just implements a caching layer on top. + """ + if self._cache is None: # pragma: no cover + result = self._get_project(name) + elif name in self._cache: + result = self._cache[name] + else: + self.clear_errors() + result = self._get_project(name) + self._cache[name] = result + return result + + def score_url(self, url): + """ + Give an url a score which can be used to choose preferred URLs + for a given project release. + """ + t = urlparse(url) + basename = posixpath.basename(t.path) + compatible = True + is_wheel = basename.endswith('.whl') + is_downloadable = basename.endswith(self.downloadable_extensions) + if is_wheel: + compatible = is_compatible(Wheel(basename), self.wheel_tags) + return (t.scheme == 'https', 'pypi.python.org' in t.netloc, + is_downloadable, is_wheel, compatible, basename) + + def prefer_url(self, url1, url2): + """ + Choose one of two URLs where both are candidates for distribution + archives for the same version of a distribution (for example, + .tar.gz vs. zip). + + The current implementation favours https:// URLs over http://, archives + from PyPI over those from other locations, wheel compatibility (if a + wheel) and then the archive name. + """ + result = url2 + if url1: + s1 = self.score_url(url1) + s2 = self.score_url(url2) + if s1 > s2: + result = url1 + if result != url2: + logger.debug('Not replacing %r with %r', url1, url2) + else: + logger.debug('Replacing %r with %r', url1, url2) + return result + + def split_filename(self, filename, project_name): + """ + Attempt to split a filename in project name, version and Python version. + """ + return split_filename(filename, project_name) + + def convert_url_to_download_info(self, url, project_name): + """ + See if a URL is a candidate for a download URL for a project (the URL + has typically been scraped from an HTML page). + + If it is, a dictionary is returned with keys "name", "version", + "filename" and "url"; otherwise, None is returned. + """ + def same_project(name1, name2): + return normalize_name(name1) == normalize_name(name2) + + result = None + scheme, netloc, path, params, query, frag = urlparse(url) + if frag.lower().startswith('egg='): # pragma: no cover + logger.debug('%s: version hint in fragment: %r', + project_name, frag) + m = HASHER_HASH.match(frag) + if m: + algo, digest = m.groups() + else: + algo, digest = None, None + origpath = path + if path and path[-1] == '/': # pragma: no cover + path = path[:-1] + if path.endswith('.whl'): + try: + wheel = Wheel(path) + if not is_compatible(wheel, self.wheel_tags): + logger.debug('Wheel not compatible: %s', path) + else: + if project_name is None: + include = True + else: + include = same_project(wheel.name, project_name) + if include: + result = { + 'name': wheel.name, + 'version': wheel.version, + 'filename': wheel.filename, + 'url': urlunparse((scheme, netloc, origpath, + params, query, '')), + 'python-version': ', '.join( + ['.'.join(list(v[2:])) for v in wheel.pyver]), + } + except Exception as e: # pragma: no cover + logger.warning('invalid path for wheel: %s', path) + elif not path.endswith(self.downloadable_extensions): # pragma: no cover + logger.debug('Not downloadable: %s', path) + else: # downloadable extension + path = filename = posixpath.basename(path) + for ext in self.downloadable_extensions: + if path.endswith(ext): + path = path[:-len(ext)] + t = self.split_filename(path, project_name) + if not t: # pragma: no cover + logger.debug('No match for project/version: %s', path) + else: + name, version, pyver = t + if not project_name or same_project(project_name, name): + result = { + 'name': name, + 'version': version, + 'filename': filename, + 'url': urlunparse((scheme, netloc, origpath, + params, query, '')), + #'packagetype': 'sdist', + } + if pyver: # pragma: no cover + result['python-version'] = pyver + break + if result and algo: + result['%s_digest' % algo] = digest + return result + + def _get_digest(self, info): + """ + Get a digest from a dictionary by looking at keys of the form + 'algo_digest'. + + Returns a 2-tuple (algo, digest) if found, else None. Currently + looks only for SHA256, then MD5. + """ + result = None + for algo in ('sha256', 'md5'): + key = '%s_digest' % algo + if key in info: + result = (algo, info[key]) + break + return result + + def _update_version_data(self, result, info): + """ + Update a result dictionary (the final result from _get_project) with a + dictionary for a specific version, which typically holds information + gleaned from a filename or URL for an archive for the distribution. + """ + name = info.pop('name') + version = info.pop('version') + if version in result: + dist = result[version] + md = dist.metadata + else: + dist = make_dist(name, version, scheme=self.scheme) + md = dist.metadata + dist.digest = digest = self._get_digest(info) + url = info['url'] + result['digests'][url] = digest + if md.source_url != info['url']: + md.source_url = self.prefer_url(md.source_url, url) + result['urls'].setdefault(version, set()).add(url) + dist.locator = self + result[version] = dist + + def locate(self, requirement, prereleases=False): + """ + Find the most recent distribution which matches the given + requirement. + + :param requirement: A requirement of the form 'foo (1.0)' or perhaps + 'foo (>= 1.0, < 2.0, != 1.3)' + :param prereleases: If ``True``, allow pre-release versions + to be located. Otherwise, pre-release versions + are not returned. + :return: A :class:`Distribution` instance, or ``None`` if no such + distribution could be located. + """ + result = None + r = parse_requirement(requirement) + if r is None: # pragma: no cover + raise DistlibException('Not a valid requirement: %r' % requirement) + scheme = get_scheme(self.scheme) + self.matcher = matcher = scheme.matcher(r.requirement) + logger.debug('matcher: %s (%s)', matcher, type(matcher).__name__) + versions = self.get_project(r.name) + if len(versions) > 2: # urls and digests keys are present + # sometimes, versions are invalid + slist = [] + vcls = matcher.version_class + for k in versions: + if k in ('urls', 'digests'): + continue + try: + if not matcher.match(k): + logger.debug('%s did not match %r', matcher, k) + else: + if prereleases or not vcls(k).is_prerelease: + slist.append(k) + else: + logger.debug('skipping pre-release ' + 'version %s of %s', k, matcher.name) + except Exception: # pragma: no cover + logger.warning('error matching %s with %r', matcher, k) + pass # slist.append(k) + if len(slist) > 1: + slist = sorted(slist, key=scheme.key) + if slist: + logger.debug('sorted list: %s', slist) + version = slist[-1] + result = versions[version] + if result: + if r.extras: + result.extras = r.extras + result.download_urls = versions.get('urls', {}).get(version, set()) + d = {} + sd = versions.get('digests', {}) + for url in result.download_urls: + if url in sd: # pragma: no cover + d[url] = sd[url] + result.digests = d + self.matcher = None + return result + + +class PyPIRPCLocator(Locator): + """ + This locator uses XML-RPC to locate distributions. It therefore + cannot be used with simple mirrors (that only mirror file content). + """ + def __init__(self, url, **kwargs): + """ + Initialise an instance. + + :param url: The URL to use for XML-RPC. + :param kwargs: Passed to the superclass constructor. + """ + super(PyPIRPCLocator, self).__init__(**kwargs) + self.base_url = url + self.client = ServerProxy(url, timeout=3.0) + + def get_distribution_names(self): + """ + Return all the distribution names known to this locator. + """ + return set(self.client.list_packages()) + + def _get_project(self, name): + result = {'urls': {}, 'digests': {}} + versions = self.client.package_releases(name, True) + for v in versions: + urls = self.client.release_urls(name, v) + data = self.client.release_data(name, v) + metadata = Metadata(scheme=self.scheme) + metadata.name = data['name'] + metadata.version = data['version'] + metadata.license = data.get('license') + metadata.keywords = data.get('keywords', []) + metadata.summary = data.get('summary') + dist = Distribution(metadata) + if urls: + info = urls[0] + metadata.source_url = info['url'] + dist.digest = self._get_digest(info) + dist.locator = self + result[v] = dist + for info in urls: + url = info['url'] + digest = self._get_digest(info) + result['urls'].setdefault(v, set()).add(url) + result['digests'][url] = digest + return result + +class PyPIJSONLocator(Locator): + """ + This locator uses PyPI's JSON interface. It's very limited in functionality + and probably not worth using. + """ + def __init__(self, url, **kwargs): + super(PyPIJSONLocator, self).__init__(**kwargs) + self.base_url = ensure_slash(url) + + def get_distribution_names(self): + """ + Return all the distribution names known to this locator. + """ + raise NotImplementedError('Not available from this locator') + + def _get_project(self, name): + result = {'urls': {}, 'digests': {}} + url = urljoin(self.base_url, '%s/json' % quote(name)) + try: + resp = self.opener.open(url) + data = resp.read().decode() # for now + d = json.loads(data) + md = Metadata(scheme=self.scheme) + data = d['info'] + md.name = data['name'] + md.version = data['version'] + md.license = data.get('license') + md.keywords = data.get('keywords', []) + md.summary = data.get('summary') + dist = Distribution(md) + dist.locator = self + urls = d['urls'] + result[md.version] = dist + for info in d['urls']: + url = info['url'] + dist.download_urls.add(url) + dist.digests[url] = self._get_digest(info) + result['urls'].setdefault(md.version, set()).add(url) + result['digests'][url] = self._get_digest(info) + # Now get other releases + for version, infos in d['releases'].items(): + if version == md.version: + continue # already done + omd = Metadata(scheme=self.scheme) + omd.name = md.name + omd.version = version + odist = Distribution(omd) + odist.locator = self + result[version] = odist + for info in infos: + url = info['url'] + odist.download_urls.add(url) + odist.digests[url] = self._get_digest(info) + result['urls'].setdefault(version, set()).add(url) + result['digests'][url] = self._get_digest(info) +# for info in urls: +# md.source_url = info['url'] +# dist.digest = self._get_digest(info) +# dist.locator = self +# for info in urls: +# url = info['url'] +# result['urls'].setdefault(md.version, set()).add(url) +# result['digests'][url] = self._get_digest(info) + except Exception as e: + self.errors.put(text_type(e)) + logger.exception('JSON fetch failed: %s', e) + return result + + +class Page(object): + """ + This class represents a scraped HTML page. + """ + # The following slightly hairy-looking regex just looks for the contents of + # an anchor link, which has an attribute "href" either immediately preceded + # or immediately followed by a "rel" attribute. The attribute values can be + # declared with double quotes, single quotes or no quotes - which leads to + # the length of the expression. + _href = re.compile(""" +(rel\\s*=\\s*(?:"(?P<rel1>[^"]*)"|'(?P<rel2>[^']*)'|(?P<rel3>[^>\\s\n]*))\\s+)? +href\\s*=\\s*(?:"(?P<url1>[^"]*)"|'(?P<url2>[^']*)'|(?P<url3>[^>\\s\n]*)) +(\\s+rel\\s*=\\s*(?:"(?P<rel4>[^"]*)"|'(?P<rel5>[^']*)'|(?P<rel6>[^>\\s\n]*)))? +""", re.I | re.S | re.X) + _base = re.compile(r"""<base\s+href\s*=\s*['"]?([^'">]+)""", re.I | re.S) + + def __init__(self, data, url): + """ + Initialise an instance with the Unicode page contents and the URL they + came from. + """ + self.data = data + self.base_url = self.url = url + m = self._base.search(self.data) + if m: + self.base_url = m.group(1) + + _clean_re = re.compile(r'[^a-z0-9$&+,/:;=?@.#%_\\|-]', re.I) + + @cached_property + def links(self): + """ + Return the URLs of all the links on a page together with information + about their "rel" attribute, for determining which ones to treat as + downloads and which ones to queue for further scraping. + """ + def clean(url): + "Tidy up an URL." + scheme, netloc, path, params, query, frag = urlparse(url) + return urlunparse((scheme, netloc, quote(path), + params, query, frag)) + + result = set() + for match in self._href.finditer(self.data): + d = match.groupdict('') + rel = (d['rel1'] or d['rel2'] or d['rel3'] or + d['rel4'] or d['rel5'] or d['rel6']) + url = d['url1'] or d['url2'] or d['url3'] + url = urljoin(self.base_url, url) + url = unescape(url) + url = self._clean_re.sub(lambda m: '%%%2x' % ord(m.group(0)), url) + result.add((url, rel)) + # We sort the result, hoping to bring the most recent versions + # to the front + result = sorted(result, key=lambda t: t[0], reverse=True) + return result + + +class SimpleScrapingLocator(Locator): + """ + A locator which scrapes HTML pages to locate downloads for a distribution. + This runs multiple threads to do the I/O; performance is at least as good + as pip's PackageFinder, which works in an analogous fashion. + """ + + # These are used to deal with various Content-Encoding schemes. + decoders = { + 'deflate': zlib.decompress, + 'gzip': lambda b: gzip.GzipFile(fileobj=BytesIO(d)).read(), + 'none': lambda b: b, + } + + def __init__(self, url, timeout=None, num_workers=10, **kwargs): + """ + Initialise an instance. + :param url: The root URL to use for scraping. + :param timeout: The timeout, in seconds, to be applied to requests. + This defaults to ``None`` (no timeout specified). + :param num_workers: The number of worker threads you want to do I/O, + This defaults to 10. + :param kwargs: Passed to the superclass. + """ + super(SimpleScrapingLocator, self).__init__(**kwargs) + self.base_url = ensure_slash(url) + self.timeout = timeout + self._page_cache = {} + self._seen = set() + self._to_fetch = queue.Queue() + self._bad_hosts = set() + self.skip_externals = False + self.num_workers = num_workers + self._lock = threading.RLock() + # See issue #45: we need to be resilient when the locator is used + # in a thread, e.g. with concurrent.futures. We can't use self._lock + # as it is for coordinating our internal threads - the ones created + # in _prepare_threads. + self._gplock = threading.RLock() + self.platform_check = False # See issue #112 + + def _prepare_threads(self): + """ + Threads are created only when get_project is called, and terminate + before it returns. They are there primarily to parallelise I/O (i.e. + fetching web pages). + """ + self._threads = [] + for i in range(self.num_workers): + t = threading.Thread(target=self._fetch) + t.setDaemon(True) + t.start() + self._threads.append(t) + + def _wait_threads(self): + """ + Tell all the threads to terminate (by sending a sentinel value) and + wait for them to do so. + """ + # Note that you need two loops, since you can't say which + # thread will get each sentinel + for t in self._threads: + self._to_fetch.put(None) # sentinel + for t in self._threads: + t.join() + self._threads = [] + + def _get_project(self, name): + result = {'urls': {}, 'digests': {}} + with self._gplock: + self.result = result + self.project_name = name + url = urljoin(self.base_url, '%s/' % quote(name)) + self._seen.clear() + self._page_cache.clear() + self._prepare_threads() + try: + logger.debug('Queueing %s', url) + self._to_fetch.put(url) + self._to_fetch.join() + finally: + self._wait_threads() + del self.result + return result + + platform_dependent = re.compile(r'\b(linux_(i\d86|x86_64|arm\w+)|' + r'win(32|_amd64)|macosx_?\d+)\b', re.I) + + def _is_platform_dependent(self, url): + """ + Does an URL refer to a platform-specific download? + """ + return self.platform_dependent.search(url) + + def _process_download(self, url): + """ + See if an URL is a suitable download for a project. + + If it is, register information in the result dictionary (for + _get_project) about the specific version it's for. + + Note that the return value isn't actually used other than as a boolean + value. + """ + if self.platform_check and self._is_platform_dependent(url): + info = None + else: + info = self.convert_url_to_download_info(url, self.project_name) + logger.debug('process_download: %s -> %s', url, info) + if info: + with self._lock: # needed because self.result is shared + self._update_version_data(self.result, info) + return info + + def _should_queue(self, link, referrer, rel): + """ + Determine whether a link URL from a referring page and with a + particular "rel" attribute should be queued for scraping. + """ + scheme, netloc, path, _, _, _ = urlparse(link) + if path.endswith(self.source_extensions + self.binary_extensions + + self.excluded_extensions): + result = False + elif self.skip_externals and not link.startswith(self.base_url): + result = False + elif not referrer.startswith(self.base_url): + result = False + elif rel not in ('homepage', 'download'): + result = False + elif scheme not in ('http', 'https', 'ftp'): + result = False + elif self._is_platform_dependent(link): + result = False + else: + host = netloc.split(':', 1)[0] + if host.lower() == 'localhost': + result = False + else: + result = True + logger.debug('should_queue: %s (%s) from %s -> %s', link, rel, + referrer, result) + return result + + def _fetch(self): + """ + Get a URL to fetch from the work queue, get the HTML page, examine its + links for download candidates and candidates for further scraping. + + This is a handy method to run in a thread. + """ + while True: + url = self._to_fetch.get() + try: + if url: + page = self.get_page(url) + if page is None: # e.g. after an error + continue + for link, rel in page.links: + if link not in self._seen: + try: + self._seen.add(link) + if (not self._process_download(link) and + self._should_queue(link, url, rel)): + logger.debug('Queueing %s from %s', link, url) + self._to_fetch.put(link) + except MetadataInvalidError: # e.g. invalid versions + pass + except Exception as e: # pragma: no cover + self.errors.put(text_type(e)) + finally: + # always do this, to avoid hangs :-) + self._to_fetch.task_done() + if not url: + #logger.debug('Sentinel seen, quitting.') + break + + def get_page(self, url): + """ + Get the HTML for an URL, possibly from an in-memory cache. + + XXX TODO Note: this cache is never actually cleared. It's assumed that + the data won't get stale over the lifetime of a locator instance (not + necessarily true for the default_locator). + """ + # http://peak.telecommunity.com/DevCenter/EasyInstall#package-index-api + scheme, netloc, path, _, _, _ = urlparse(url) + if scheme == 'file' and os.path.isdir(url2pathname(path)): + url = urljoin(ensure_slash(url), 'index.html') + + if url in self._page_cache: + result = self._page_cache[url] + logger.debug('Returning %s from cache: %s', url, result) + else: + host = netloc.split(':', 1)[0] + result = None + if host in self._bad_hosts: + logger.debug('Skipping %s due to bad host %s', url, host) + else: + req = Request(url, headers={'Accept-encoding': 'identity'}) + try: + logger.debug('Fetching %s', url) + resp = self.opener.open(req, timeout=self.timeout) + logger.debug('Fetched %s', url) + headers = resp.info() + content_type = headers.get('Content-Type', '') + if HTML_CONTENT_TYPE.match(content_type): + final_url = resp.geturl() + data = resp.read() + encoding = headers.get('Content-Encoding') + if encoding: + decoder = self.decoders[encoding] # fail if not found + data = decoder(data) + encoding = 'utf-8' + m = CHARSET.search(content_type) + if m: + encoding = m.group(1) + try: + data = data.decode(encoding) + except UnicodeError: # pragma: no cover + data = data.decode('latin-1') # fallback + result = Page(data, final_url) + self._page_cache[final_url] = result + except HTTPError as e: + if e.code != 404: + logger.exception('Fetch failed: %s: %s', url, e) + except URLError as e: # pragma: no cover + logger.exception('Fetch failed: %s: %s', url, e) + with self._lock: + self._bad_hosts.add(host) + except Exception as e: # pragma: no cover + logger.exception('Fetch failed: %s: %s', url, e) + finally: + self._page_cache[url] = result # even if None (failure) + return result + + _distname_re = re.compile('<a href=[^>]*>([^<]+)<') + + def get_distribution_names(self): + """ + Return all the distribution names known to this locator. + """ + result = set() + page = self.get_page(self.base_url) + if not page: + raise DistlibException('Unable to get %s' % self.base_url) + for match in self._distname_re.finditer(page.data): + result.add(match.group(1)) + return result + +class DirectoryLocator(Locator): + """ + This class locates distributions in a directory tree. + """ + + def __init__(self, path, **kwargs): + """ + Initialise an instance. + :param path: The root of the directory tree to search. + :param kwargs: Passed to the superclass constructor, + except for: + * recursive - if True (the default), subdirectories are + recursed into. If False, only the top-level directory + is searched, + """ + self.recursive = kwargs.pop('recursive', True) + super(DirectoryLocator, self).__init__(**kwargs) + path = os.path.abspath(path) + if not os.path.isdir(path): # pragma: no cover + raise DistlibException('Not a directory: %r' % path) + self.base_dir = path + + def should_include(self, filename, parent): + """ + Should a filename be considered as a candidate for a distribution + archive? As well as the filename, the directory which contains it + is provided, though not used by the current implementation. + """ + return filename.endswith(self.downloadable_extensions) + + def _get_project(self, name): + result = {'urls': {}, 'digests': {}} + for root, dirs, files in os.walk(self.base_dir): + for fn in files: + if self.should_include(fn, root): + fn = os.path.join(root, fn) + url = urlunparse(('file', '', + pathname2url(os.path.abspath(fn)), + '', '', '')) + info = self.convert_url_to_download_info(url, name) + if info: + self._update_version_data(result, info) + if not self.recursive: + break + return result + + def get_distribution_names(self): + """ + Return all the distribution names known to this locator. + """ + result = set() + for root, dirs, files in os.walk(self.base_dir): + for fn in files: + if self.should_include(fn, root): + fn = os.path.join(root, fn) + url = urlunparse(('file', '', + pathname2url(os.path.abspath(fn)), + '', '', '')) + info = self.convert_url_to_download_info(url, None) + if info: + result.add(info['name']) + if not self.recursive: + break + return result + +class JSONLocator(Locator): + """ + This locator uses special extended metadata (not available on PyPI) and is + the basis of performant dependency resolution in distlib. Other locators + require archive downloads before dependencies can be determined! As you + might imagine, that can be slow. + """ + def get_distribution_names(self): + """ + Return all the distribution names known to this locator. + """ + raise NotImplementedError('Not available from this locator') + + def _get_project(self, name): + result = {'urls': {}, 'digests': {}} + data = get_project_data(name) + if data: + for info in data.get('files', []): + if info['ptype'] != 'sdist' or info['pyversion'] != 'source': + continue + # We don't store summary in project metadata as it makes + # the data bigger for no benefit during dependency + # resolution + dist = make_dist(data['name'], info['version'], + summary=data.get('summary', + 'Placeholder for summary'), + scheme=self.scheme) + md = dist.metadata + md.source_url = info['url'] + # TODO SHA256 digest + if 'digest' in info and info['digest']: + dist.digest = ('md5', info['digest']) + md.dependencies = info.get('requirements', {}) + dist.exports = info.get('exports', {}) + result[dist.version] = dist + result['urls'].setdefault(dist.version, set()).add(info['url']) + return result + +class DistPathLocator(Locator): + """ + This locator finds installed distributions in a path. It can be useful for + adding to an :class:`AggregatingLocator`. + """ + def __init__(self, distpath, **kwargs): + """ + Initialise an instance. + + :param distpath: A :class:`DistributionPath` instance to search. + """ + super(DistPathLocator, self).__init__(**kwargs) + assert isinstance(distpath, DistributionPath) + self.distpath = distpath + + def _get_project(self, name): + dist = self.distpath.get_distribution(name) + if dist is None: + result = {'urls': {}, 'digests': {}} + else: + result = { + dist.version: dist, + 'urls': {dist.version: set([dist.source_url])}, + 'digests': {dist.version: set([None])} + } + return result + + +class AggregatingLocator(Locator): + """ + This class allows you to chain and/or merge a list of locators. + """ + def __init__(self, *locators, **kwargs): + """ + Initialise an instance. + + :param locators: The list of locators to search. + :param kwargs: Passed to the superclass constructor, + except for: + * merge - if False (the default), the first successful + search from any of the locators is returned. If True, + the results from all locators are merged (this can be + slow). + """ + self.merge = kwargs.pop('merge', False) + self.locators = locators + super(AggregatingLocator, self).__init__(**kwargs) + + def clear_cache(self): + super(AggregatingLocator, self).clear_cache() + for locator in self.locators: + locator.clear_cache() + + def _set_scheme(self, value): + self._scheme = value + for locator in self.locators: + locator.scheme = value + + scheme = property(Locator.scheme.fget, _set_scheme) + + def _get_project(self, name): + result = {} + for locator in self.locators: + d = locator.get_project(name) + if d: + if self.merge: + files = result.get('urls', {}) + digests = result.get('digests', {}) + # next line could overwrite result['urls'], result['digests'] + result.update(d) + df = result.get('urls') + if files and df: + for k, v in files.items(): + if k in df: + df[k] |= v + else: + df[k] = v + dd = result.get('digests') + if digests and dd: + dd.update(digests) + else: + # See issue #18. If any dists are found and we're looking + # for specific constraints, we only return something if + # a match is found. For example, if a DirectoryLocator + # returns just foo (1.0) while we're looking for + # foo (>= 2.0), we'll pretend there was nothing there so + # that subsequent locators can be queried. Otherwise we + # would just return foo (1.0) which would then lead to a + # failure to find foo (>= 2.0), because other locators + # weren't searched. Note that this only matters when + # merge=False. + if self.matcher is None: + found = True + else: + found = False + for k in d: + if self.matcher.match(k): + found = True + break + if found: + result = d + break + return result + + def get_distribution_names(self): + """ + Return all the distribution names known to this locator. + """ + result = set() + for locator in self.locators: + try: + result |= locator.get_distribution_names() + except NotImplementedError: + pass + return result + + +# We use a legacy scheme simply because most of the dists on PyPI use legacy +# versions which don't conform to PEP 426 / PEP 440. +default_locator = AggregatingLocator( + JSONLocator(), + SimpleScrapingLocator('https://pypi.python.org/simple/', + timeout=3.0), + scheme='legacy') + +locate = default_locator.locate + +NAME_VERSION_RE = re.compile(r'(?P<name>[\w-]+)\s*' + r'\(\s*(==\s*)?(?P<ver>[^)]+)\)$') + +class DependencyFinder(object): + """ + Locate dependencies for distributions. + """ + + def __init__(self, locator=None): + """ + Initialise an instance, using the specified locator + to locate distributions. + """ + self.locator = locator or default_locator + self.scheme = get_scheme(self.locator.scheme) + + def add_distribution(self, dist): + """ + Add a distribution to the finder. This will update internal information + about who provides what. + :param dist: The distribution to add. + """ + logger.debug('adding distribution %s', dist) + name = dist.key + self.dists_by_name[name] = dist + self.dists[(name, dist.version)] = dist + for p in dist.provides: + name, version = parse_name_and_version(p) + logger.debug('Add to provided: %s, %s, %s', name, version, dist) + self.provided.setdefault(name, set()).add((version, dist)) + + def remove_distribution(self, dist): + """ + Remove a distribution from the finder. This will update internal + information about who provides what. + :param dist: The distribution to remove. + """ + logger.debug('removing distribution %s', dist) + name = dist.key + del self.dists_by_name[name] + del self.dists[(name, dist.version)] + for p in dist.provides: + name, version = parse_name_and_version(p) + logger.debug('Remove from provided: %s, %s, %s', name, version, dist) + s = self.provided[name] + s.remove((version, dist)) + if not s: + del self.provided[name] + + def get_matcher(self, reqt): + """ + Get a version matcher for a requirement. + :param reqt: The requirement + :type reqt: str + :return: A version matcher (an instance of + :class:`distlib.version.Matcher`). + """ + try: + matcher = self.scheme.matcher(reqt) + except UnsupportedVersionError: # pragma: no cover + # XXX compat-mode if cannot read the version + name = reqt.split()[0] + matcher = self.scheme.matcher(name) + return matcher + + def find_providers(self, reqt): + """ + Find the distributions which can fulfill a requirement. + + :param reqt: The requirement. + :type reqt: str + :return: A set of distribution which can fulfill the requirement. + """ + matcher = self.get_matcher(reqt) + name = matcher.key # case-insensitive + result = set() + provided = self.provided + if name in provided: + for version, provider in provided[name]: + try: + match = matcher.match(version) + except UnsupportedVersionError: + match = False + + if match: + result.add(provider) + break + return result + + def try_to_replace(self, provider, other, problems): + """ + Attempt to replace one provider with another. This is typically used + when resolving dependencies from multiple sources, e.g. A requires + (B >= 1.0) while C requires (B >= 1.1). + + For successful replacement, ``provider`` must meet all the requirements + which ``other`` fulfills. + + :param provider: The provider we are trying to replace with. + :param other: The provider we're trying to replace. + :param problems: If False is returned, this will contain what + problems prevented replacement. This is currently + a tuple of the literal string 'cantreplace', + ``provider``, ``other`` and the set of requirements + that ``provider`` couldn't fulfill. + :return: True if we can replace ``other`` with ``provider``, else + False. + """ + rlist = self.reqts[other] + unmatched = set() + for s in rlist: + matcher = self.get_matcher(s) + if not matcher.match(provider.version): + unmatched.add(s) + if unmatched: + # can't replace other with provider + problems.add(('cantreplace', provider, other, + frozenset(unmatched))) + result = False + else: + # can replace other with provider + self.remove_distribution(other) + del self.reqts[other] + for s in rlist: + self.reqts.setdefault(provider, set()).add(s) + self.add_distribution(provider) + result = True + return result + + def find(self, requirement, meta_extras=None, prereleases=False): + """ + Find a distribution and all distributions it depends on. + + :param requirement: The requirement specifying the distribution to + find, or a Distribution instance. + :param meta_extras: A list of meta extras such as :test:, :build: and + so on. + :param prereleases: If ``True``, allow pre-release versions to be + returned - otherwise, don't return prereleases + unless they're all that's available. + + Return a set of :class:`Distribution` instances and a set of + problems. + + The distributions returned should be such that they have the + :attr:`required` attribute set to ``True`` if they were + from the ``requirement`` passed to ``find()``, and they have the + :attr:`build_time_dependency` attribute set to ``True`` unless they + are post-installation dependencies of the ``requirement``. + + The problems should be a tuple consisting of the string + ``'unsatisfied'`` and the requirement which couldn't be satisfied + by any distribution known to the locator. + """ + + self.provided = {} + self.dists = {} + self.dists_by_name = {} + self.reqts = {} + + meta_extras = set(meta_extras or []) + if ':*:' in meta_extras: + meta_extras.remove(':*:') + # :meta: and :run: are implicitly included + meta_extras |= set([':test:', ':build:', ':dev:']) + + if isinstance(requirement, Distribution): + dist = odist = requirement + logger.debug('passed %s as requirement', odist) + else: + dist = odist = self.locator.locate(requirement, + prereleases=prereleases) + if dist is None: + raise DistlibException('Unable to locate %r' % requirement) + logger.debug('located %s', odist) + dist.requested = True + problems = set() + todo = set([dist]) + install_dists = set([odist]) + while todo: + dist = todo.pop() + name = dist.key # case-insensitive + if name not in self.dists_by_name: + self.add_distribution(dist) + else: + #import pdb; pdb.set_trace() + other = self.dists_by_name[name] + if other != dist: + self.try_to_replace(dist, other, problems) + + ireqts = dist.run_requires | dist.meta_requires + sreqts = dist.build_requires + ereqts = set() + if meta_extras and dist in install_dists: + for key in ('test', 'build', 'dev'): + e = ':%s:' % key + if e in meta_extras: + ereqts |= getattr(dist, '%s_requires' % key) + all_reqts = ireqts | sreqts | ereqts + for r in all_reqts: + providers = self.find_providers(r) + if not providers: + logger.debug('No providers found for %r', r) + provider = self.locator.locate(r, prereleases=prereleases) + # If no provider is found and we didn't consider + # prereleases, consider them now. + if provider is None and not prereleases: + provider = self.locator.locate(r, prereleases=True) + if provider is None: + logger.debug('Cannot satisfy %r', r) + problems.add(('unsatisfied', r)) + else: + n, v = provider.key, provider.version + if (n, v) not in self.dists: + todo.add(provider) + providers.add(provider) + if r in ireqts and dist in install_dists: + install_dists.add(provider) + logger.debug('Adding %s to install_dists', + provider.name_and_version) + for p in providers: + name = p.key + if name not in self.dists_by_name: + self.reqts.setdefault(p, set()).add(r) + else: + other = self.dists_by_name[name] + if other != p: + # see if other can be replaced by p + self.try_to_replace(p, other, problems) + + dists = set(self.dists.values()) + for dist in dists: + dist.build_time_dependency = dist not in install_dists + if dist.build_time_dependency: + logger.debug('%s is a build-time dependency only.', + dist.name_and_version) + logger.debug('find done for %s', odist) + return dists, problems diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/manifest.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/manifest.py new file mode 100644 index 00000000..ca0fe442 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/manifest.py @@ -0,0 +1,393 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2012-2013 Python Software Foundation. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +""" +Class representing the list of files in a distribution. + +Equivalent to distutils.filelist, but fixes some problems. +""" +import fnmatch +import logging +import os +import re +import sys + +from . import DistlibException +from .compat import fsdecode +from .util import convert_path + + +__all__ = ['Manifest'] + +logger = logging.getLogger(__name__) + +# a \ followed by some spaces + EOL +_COLLAPSE_PATTERN = re.compile('\\\\w*\n', re.M) +_COMMENTED_LINE = re.compile('#.*?(?=\n)|\n(?=$)', re.M | re.S) + +# +# Due to the different results returned by fnmatch.translate, we need +# to do slightly different processing for Python 2.7 and 3.2 ... this needed +# to be brought in for Python 3.6 onwards. +# +_PYTHON_VERSION = sys.version_info[:2] + +class Manifest(object): + """A list of files built by on exploring the filesystem and filtered by + applying various patterns to what we find there. + """ + + def __init__(self, base=None): + """ + Initialise an instance. + + :param base: The base directory to explore under. + """ + self.base = os.path.abspath(os.path.normpath(base or os.getcwd())) + self.prefix = self.base + os.sep + self.allfiles = None + self.files = set() + + # + # Public API + # + + def findall(self): + """Find all files under the base and set ``allfiles`` to the absolute + pathnames of files found. + """ + from stat import S_ISREG, S_ISDIR, S_ISLNK + + self.allfiles = allfiles = [] + root = self.base + stack = [root] + pop = stack.pop + push = stack.append + + while stack: + root = pop() + names = os.listdir(root) + + for name in names: + fullname = os.path.join(root, name) + + # Avoid excess stat calls -- just one will do, thank you! + stat = os.stat(fullname) + mode = stat.st_mode + if S_ISREG(mode): + allfiles.append(fsdecode(fullname)) + elif S_ISDIR(mode) and not S_ISLNK(mode): + push(fullname) + + def add(self, item): + """ + Add a file to the manifest. + + :param item: The pathname to add. This can be relative to the base. + """ + if not item.startswith(self.prefix): + item = os.path.join(self.base, item) + self.files.add(os.path.normpath(item)) + + def add_many(self, items): + """ + Add a list of files to the manifest. + + :param items: The pathnames to add. These can be relative to the base. + """ + for item in items: + self.add(item) + + def sorted(self, wantdirs=False): + """ + Return sorted files in directory order + """ + + def add_dir(dirs, d): + dirs.add(d) + logger.debug('add_dir added %s', d) + if d != self.base: + parent, _ = os.path.split(d) + assert parent not in ('', '/') + add_dir(dirs, parent) + + result = set(self.files) # make a copy! + if wantdirs: + dirs = set() + for f in result: + add_dir(dirs, os.path.dirname(f)) + result |= dirs + return [os.path.join(*path_tuple) for path_tuple in + sorted(os.path.split(path) for path in result)] + + def clear(self): + """Clear all collected files.""" + self.files = set() + self.allfiles = [] + + def process_directive(self, directive): + """ + Process a directive which either adds some files from ``allfiles`` to + ``files``, or removes some files from ``files``. + + :param directive: The directive to process. This should be in a format + compatible with distutils ``MANIFEST.in`` files: + + http://docs.python.org/distutils/sourcedist.html#commands + """ + # Parse the line: split it up, make sure the right number of words + # is there, and return the relevant words. 'action' is always + # defined: it's the first word of the line. Which of the other + # three are defined depends on the action; it'll be either + # patterns, (dir and patterns), or (dirpattern). + action, patterns, thedir, dirpattern = self._parse_directive(directive) + + # OK, now we know that the action is valid and we have the + # right number of words on the line for that action -- so we + # can proceed with minimal error-checking. + if action == 'include': + for pattern in patterns: + if not self._include_pattern(pattern, anchor=True): + logger.warning('no files found matching %r', pattern) + + elif action == 'exclude': + for pattern in patterns: + found = self._exclude_pattern(pattern, anchor=True) + #if not found: + # logger.warning('no previously-included files ' + # 'found matching %r', pattern) + + elif action == 'global-include': + for pattern in patterns: + if not self._include_pattern(pattern, anchor=False): + logger.warning('no files found matching %r ' + 'anywhere in distribution', pattern) + + elif action == 'global-exclude': + for pattern in patterns: + found = self._exclude_pattern(pattern, anchor=False) + #if not found: + # logger.warning('no previously-included files ' + # 'matching %r found anywhere in ' + # 'distribution', pattern) + + elif action == 'recursive-include': + for pattern in patterns: + if not self._include_pattern(pattern, prefix=thedir): + logger.warning('no files found matching %r ' + 'under directory %r', pattern, thedir) + + elif action == 'recursive-exclude': + for pattern in patterns: + found = self._exclude_pattern(pattern, prefix=thedir) + #if not found: + # logger.warning('no previously-included files ' + # 'matching %r found under directory %r', + # pattern, thedir) + + elif action == 'graft': + if not self._include_pattern(None, prefix=dirpattern): + logger.warning('no directories found matching %r', + dirpattern) + + elif action == 'prune': + if not self._exclude_pattern(None, prefix=dirpattern): + logger.warning('no previously-included directories found ' + 'matching %r', dirpattern) + else: # pragma: no cover + # This should never happen, as it should be caught in + # _parse_template_line + raise DistlibException( + 'invalid action %r' % action) + + # + # Private API + # + + def _parse_directive(self, directive): + """ + Validate a directive. + :param directive: The directive to validate. + :return: A tuple of action, patterns, thedir, dir_patterns + """ + words = directive.split() + if len(words) == 1 and words[0] not in ('include', 'exclude', + 'global-include', + 'global-exclude', + 'recursive-include', + 'recursive-exclude', + 'graft', 'prune'): + # no action given, let's use the default 'include' + words.insert(0, 'include') + + action = words[0] + patterns = thedir = dir_pattern = None + + if action in ('include', 'exclude', + 'global-include', 'global-exclude'): + if len(words) < 2: + raise DistlibException( + '%r expects <pattern1> <pattern2> ...' % action) + + patterns = [convert_path(word) for word in words[1:]] + + elif action in ('recursive-include', 'recursive-exclude'): + if len(words) < 3: + raise DistlibException( + '%r expects <dir> <pattern1> <pattern2> ...' % action) + + thedir = convert_path(words[1]) + patterns = [convert_path(word) for word in words[2:]] + + elif action in ('graft', 'prune'): + if len(words) != 2: + raise DistlibException( + '%r expects a single <dir_pattern>' % action) + + dir_pattern = convert_path(words[1]) + + else: + raise DistlibException('unknown action %r' % action) + + return action, patterns, thedir, dir_pattern + + def _include_pattern(self, pattern, anchor=True, prefix=None, + is_regex=False): + """Select strings (presumably filenames) from 'self.files' that + match 'pattern', a Unix-style wildcard (glob) pattern. + + Patterns are not quite the same as implemented by the 'fnmatch' + module: '*' and '?' match non-special characters, where "special" + is platform-dependent: slash on Unix; colon, slash, and backslash on + DOS/Windows; and colon on Mac OS. + + If 'anchor' is true (the default), then the pattern match is more + stringent: "*.py" will match "foo.py" but not "foo/bar.py". If + 'anchor' is false, both of these will match. + + If 'prefix' is supplied, then only filenames starting with 'prefix' + (itself a pattern) and ending with 'pattern', with anything in between + them, will match. 'anchor' is ignored in this case. + + If 'is_regex' is true, 'anchor' and 'prefix' are ignored, and + 'pattern' is assumed to be either a string containing a regex or a + regex object -- no translation is done, the regex is just compiled + and used as-is. + + Selected strings will be added to self.files. + + Return True if files are found. + """ + # XXX docstring lying about what the special chars are? + found = False + pattern_re = self._translate_pattern(pattern, anchor, prefix, is_regex) + + # delayed loading of allfiles list + if self.allfiles is None: + self.findall() + + for name in self.allfiles: + if pattern_re.search(name): + self.files.add(name) + found = True + return found + + def _exclude_pattern(self, pattern, anchor=True, prefix=None, + is_regex=False): + """Remove strings (presumably filenames) from 'files' that match + 'pattern'. + + Other parameters are the same as for 'include_pattern()', above. + The list 'self.files' is modified in place. Return True if files are + found. + + This API is public to allow e.g. exclusion of SCM subdirs, e.g. when + packaging source distributions + """ + found = False + pattern_re = self._translate_pattern(pattern, anchor, prefix, is_regex) + for f in list(self.files): + if pattern_re.search(f): + self.files.remove(f) + found = True + return found + + def _translate_pattern(self, pattern, anchor=True, prefix=None, + is_regex=False): + """Translate a shell-like wildcard pattern to a compiled regular + expression. + + Return the compiled regex. If 'is_regex' true, + then 'pattern' is directly compiled to a regex (if it's a string) + or just returned as-is (assumes it's a regex object). + """ + if is_regex: + if isinstance(pattern, str): + return re.compile(pattern) + else: + return pattern + + if _PYTHON_VERSION > (3, 2): + # ditch start and end characters + start, _, end = self._glob_to_re('_').partition('_') + + if pattern: + pattern_re = self._glob_to_re(pattern) + if _PYTHON_VERSION > (3, 2): + assert pattern_re.startswith(start) and pattern_re.endswith(end) + else: + pattern_re = '' + + base = re.escape(os.path.join(self.base, '')) + if prefix is not None: + # ditch end of pattern character + if _PYTHON_VERSION <= (3, 2): + empty_pattern = self._glob_to_re('') + prefix_re = self._glob_to_re(prefix)[:-len(empty_pattern)] + else: + prefix_re = self._glob_to_re(prefix) + assert prefix_re.startswith(start) and prefix_re.endswith(end) + prefix_re = prefix_re[len(start): len(prefix_re) - len(end)] + sep = os.sep + if os.sep == '\\': + sep = r'\\' + if _PYTHON_VERSION <= (3, 2): + pattern_re = '^' + base + sep.join((prefix_re, + '.*' + pattern_re)) + else: + pattern_re = pattern_re[len(start): len(pattern_re) - len(end)] + pattern_re = r'%s%s%s%s.*%s%s' % (start, base, prefix_re, sep, + pattern_re, end) + else: # no prefix -- respect anchor flag + if anchor: + if _PYTHON_VERSION <= (3, 2): + pattern_re = '^' + base + pattern_re + else: + pattern_re = r'%s%s%s' % (start, base, pattern_re[len(start):]) + + return re.compile(pattern_re) + + def _glob_to_re(self, pattern): + """Translate a shell-like glob pattern to a regular expression. + + Return a string containing the regex. Differs from + 'fnmatch.translate()' in that '*' does not match "special characters" + (which are platform-specific). + """ + pattern_re = fnmatch.translate(pattern) + + # '?' and '*' in the glob pattern become '.' and '.*' in the RE, which + # IMHO is wrong -- '?' and '*' aren't supposed to match slash in Unix, + # and by extension they shouldn't match such "special characters" under + # any OS. So change all non-escaped dots in the RE to match any + # character except the special characters (currently: just os.sep). + sep = os.sep + if os.sep == '\\': + # we're using a regex to manipulate a regex, so we need + # to escape the backslash twice + sep = r'\\\\' + escaped = r'\1[^%s]' % sep + pattern_re = re.sub(r'((?<!\\)(\\\\)*)\.', escaped, pattern_re) + return pattern_re diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/markers.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/markers.py new file mode 100644 index 00000000..ee1f3e23 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/markers.py @@ -0,0 +1,131 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2012-2017 Vinay Sajip. +# Licensed to the Python Software Foundation under a contributor agreement. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +""" +Parser for the environment markers micro-language defined in PEP 508. +""" + +# Note: In PEP 345, the micro-language was Python compatible, so the ast +# module could be used to parse it. However, PEP 508 introduced operators such +# as ~= and === which aren't in Python, necessitating a different approach. + +import os +import sys +import platform +import re + +from .compat import python_implementation, urlparse, string_types +from .util import in_venv, parse_marker + +__all__ = ['interpret'] + +def _is_literal(o): + if not isinstance(o, string_types) or not o: + return False + return o[0] in '\'"' + +class Evaluator(object): + """ + This class is used to evaluate marker expessions. + """ + + operations = { + '==': lambda x, y: x == y, + '===': lambda x, y: x == y, + '~=': lambda x, y: x == y or x > y, + '!=': lambda x, y: x != y, + '<': lambda x, y: x < y, + '<=': lambda x, y: x == y or x < y, + '>': lambda x, y: x > y, + '>=': lambda x, y: x == y or x > y, + 'and': lambda x, y: x and y, + 'or': lambda x, y: x or y, + 'in': lambda x, y: x in y, + 'not in': lambda x, y: x not in y, + } + + def evaluate(self, expr, context): + """ + Evaluate a marker expression returned by the :func:`parse_requirement` + function in the specified context. + """ + if isinstance(expr, string_types): + if expr[0] in '\'"': + result = expr[1:-1] + else: + if expr not in context: + raise SyntaxError('unknown variable: %s' % expr) + result = context[expr] + else: + assert isinstance(expr, dict) + op = expr['op'] + if op not in self.operations: + raise NotImplementedError('op not implemented: %s' % op) + elhs = expr['lhs'] + erhs = expr['rhs'] + if _is_literal(expr['lhs']) and _is_literal(expr['rhs']): + raise SyntaxError('invalid comparison: %s %s %s' % (elhs, op, erhs)) + + lhs = self.evaluate(elhs, context) + rhs = self.evaluate(erhs, context) + result = self.operations[op](lhs, rhs) + return result + +def default_context(): + def format_full_version(info): + version = '%s.%s.%s' % (info.major, info.minor, info.micro) + kind = info.releaselevel + if kind != 'final': + version += kind[0] + str(info.serial) + return version + + if hasattr(sys, 'implementation'): + implementation_version = format_full_version(sys.implementation.version) + implementation_name = sys.implementation.name + else: + implementation_version = '0' + implementation_name = '' + + result = { + 'implementation_name': implementation_name, + 'implementation_version': implementation_version, + 'os_name': os.name, + 'platform_machine': platform.machine(), + 'platform_python_implementation': platform.python_implementation(), + 'platform_release': platform.release(), + 'platform_system': platform.system(), + 'platform_version': platform.version(), + 'platform_in_venv': str(in_venv()), + 'python_full_version': platform.python_version(), + 'python_version': platform.python_version()[:3], + 'sys_platform': sys.platform, + } + return result + +DEFAULT_CONTEXT = default_context() +del default_context + +evaluator = Evaluator() + +def interpret(marker, execution_context=None): + """ + Interpret a marker and return a result depending on environment. + + :param marker: The marker to interpret. + :type marker: str + :param execution_context: The context used for name lookup. + :type execution_context: mapping + """ + try: + expr, rest = parse_marker(marker) + except Exception as e: + raise SyntaxError('Unable to interpret marker syntax: %s: %s' % (marker, e)) + if rest and rest[0] != '#': + raise SyntaxError('unexpected trailing data in marker: %s: %s' % (marker, rest)) + context = dict(DEFAULT_CONTEXT) + if execution_context: + context.update(execution_context) + return evaluator.evaluate(expr, context) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/metadata.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/metadata.py new file mode 100644 index 00000000..77eed7f9 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/metadata.py @@ -0,0 +1,1094 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2012 The Python Software Foundation. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +"""Implementation of the Metadata for Python packages PEPs. + +Supports all metadata formats (1.0, 1.1, 1.2, and 2.0 experimental). +""" +from __future__ import unicode_literals + +import codecs +from email import message_from_file +import json +import logging +import re + + +from . import DistlibException, __version__ +from .compat import StringIO, string_types, text_type +from .markers import interpret +from .util import extract_by_key, get_extras +from .version import get_scheme, PEP440_VERSION_RE + +logger = logging.getLogger(__name__) + + +class MetadataMissingError(DistlibException): + """A required metadata is missing""" + + +class MetadataConflictError(DistlibException): + """Attempt to read or write metadata fields that are conflictual.""" + + +class MetadataUnrecognizedVersionError(DistlibException): + """Unknown metadata version number.""" + + +class MetadataInvalidError(DistlibException): + """A metadata value is invalid""" + +# public API of this module +__all__ = ['Metadata', 'PKG_INFO_ENCODING', 'PKG_INFO_PREFERRED_VERSION'] + +# Encoding used for the PKG-INFO files +PKG_INFO_ENCODING = 'utf-8' + +# preferred version. Hopefully will be changed +# to 1.2 once PEP 345 is supported everywhere +PKG_INFO_PREFERRED_VERSION = '1.1' + +_LINE_PREFIX_1_2 = re.compile('\n \\|') +_LINE_PREFIX_PRE_1_2 = re.compile('\n ') +_241_FIELDS = ('Metadata-Version', 'Name', 'Version', 'Platform', + 'Summary', 'Description', + 'Keywords', 'Home-page', 'Author', 'Author-email', + 'License') + +_314_FIELDS = ('Metadata-Version', 'Name', 'Version', 'Platform', + 'Supported-Platform', 'Summary', 'Description', + 'Keywords', 'Home-page', 'Author', 'Author-email', + 'License', 'Classifier', 'Download-URL', 'Obsoletes', + 'Provides', 'Requires') + +_314_MARKERS = ('Obsoletes', 'Provides', 'Requires', 'Classifier', + 'Download-URL') + +_345_FIELDS = ('Metadata-Version', 'Name', 'Version', 'Platform', + 'Supported-Platform', 'Summary', 'Description', + 'Keywords', 'Home-page', 'Author', 'Author-email', + 'Maintainer', 'Maintainer-email', 'License', + 'Classifier', 'Download-URL', 'Obsoletes-Dist', + 'Project-URL', 'Provides-Dist', 'Requires-Dist', + 'Requires-Python', 'Requires-External') + +_345_MARKERS = ('Provides-Dist', 'Requires-Dist', 'Requires-Python', + 'Obsoletes-Dist', 'Requires-External', 'Maintainer', + 'Maintainer-email', 'Project-URL') + +_426_FIELDS = ('Metadata-Version', 'Name', 'Version', 'Platform', + 'Supported-Platform', 'Summary', 'Description', + 'Keywords', 'Home-page', 'Author', 'Author-email', + 'Maintainer', 'Maintainer-email', 'License', + 'Classifier', 'Download-URL', 'Obsoletes-Dist', + 'Project-URL', 'Provides-Dist', 'Requires-Dist', + 'Requires-Python', 'Requires-External', 'Private-Version', + 'Obsoleted-By', 'Setup-Requires-Dist', 'Extension', + 'Provides-Extra') + +_426_MARKERS = ('Private-Version', 'Provides-Extra', 'Obsoleted-By', + 'Setup-Requires-Dist', 'Extension') + +# See issue #106: Sometimes 'Requires' occurs wrongly in the metadata. Include +# it in the tuple literal below to allow it (for now) +_566_FIELDS = _426_FIELDS + ('Description-Content-Type', 'Requires') + +_566_MARKERS = ('Description-Content-Type',) + +_ALL_FIELDS = set() +_ALL_FIELDS.update(_241_FIELDS) +_ALL_FIELDS.update(_314_FIELDS) +_ALL_FIELDS.update(_345_FIELDS) +_ALL_FIELDS.update(_426_FIELDS) +_ALL_FIELDS.update(_566_FIELDS) + +EXTRA_RE = re.compile(r'''extra\s*==\s*("([^"]+)"|'([^']+)')''') + + +def _version2fieldlist(version): + if version == '1.0': + return _241_FIELDS + elif version == '1.1': + return _314_FIELDS + elif version == '1.2': + return _345_FIELDS + elif version in ('1.3', '2.1'): + return _345_FIELDS + _566_FIELDS + elif version == '2.0': + return _426_FIELDS + raise MetadataUnrecognizedVersionError(version) + + +def _best_version(fields): + """Detect the best version depending on the fields used.""" + def _has_marker(keys, markers): + for marker in markers: + if marker in keys: + return True + return False + + keys = [] + for key, value in fields.items(): + if value in ([], 'UNKNOWN', None): + continue + keys.append(key) + + possible_versions = ['1.0', '1.1', '1.2', '1.3', '2.0', '2.1'] + + # first let's try to see if a field is not part of one of the version + for key in keys: + if key not in _241_FIELDS and '1.0' in possible_versions: + possible_versions.remove('1.0') + logger.debug('Removed 1.0 due to %s', key) + if key not in _314_FIELDS and '1.1' in possible_versions: + possible_versions.remove('1.1') + logger.debug('Removed 1.1 due to %s', key) + if key not in _345_FIELDS and '1.2' in possible_versions: + possible_versions.remove('1.2') + logger.debug('Removed 1.2 due to %s', key) + if key not in _566_FIELDS and '1.3' in possible_versions: + possible_versions.remove('1.3') + logger.debug('Removed 1.3 due to %s', key) + if key not in _566_FIELDS and '2.1' in possible_versions: + if key != 'Description': # In 2.1, description allowed after headers + possible_versions.remove('2.1') + logger.debug('Removed 2.1 due to %s', key) + if key not in _426_FIELDS and '2.0' in possible_versions: + possible_versions.remove('2.0') + logger.debug('Removed 2.0 due to %s', key) + + # possible_version contains qualified versions + if len(possible_versions) == 1: + return possible_versions[0] # found ! + elif len(possible_versions) == 0: + logger.debug('Out of options - unknown metadata set: %s', fields) + raise MetadataConflictError('Unknown metadata set') + + # let's see if one unique marker is found + is_1_1 = '1.1' in possible_versions and _has_marker(keys, _314_MARKERS) + is_1_2 = '1.2' in possible_versions and _has_marker(keys, _345_MARKERS) + is_2_1 = '2.1' in possible_versions and _has_marker(keys, _566_MARKERS) + is_2_0 = '2.0' in possible_versions and _has_marker(keys, _426_MARKERS) + if int(is_1_1) + int(is_1_2) + int(is_2_1) + int(is_2_0) > 1: + raise MetadataConflictError('You used incompatible 1.1/1.2/2.0/2.1 fields') + + # we have the choice, 1.0, or 1.2, or 2.0 + # - 1.0 has a broken Summary field but works with all tools + # - 1.1 is to avoid + # - 1.2 fixes Summary but has little adoption + # - 2.0 adds more features and is very new + if not is_1_1 and not is_1_2 and not is_2_1 and not is_2_0: + # we couldn't find any specific marker + if PKG_INFO_PREFERRED_VERSION in possible_versions: + return PKG_INFO_PREFERRED_VERSION + if is_1_1: + return '1.1' + if is_1_2: + return '1.2' + if is_2_1: + return '2.1' + + return '2.0' + +_ATTR2FIELD = { + 'metadata_version': 'Metadata-Version', + 'name': 'Name', + 'version': 'Version', + 'platform': 'Platform', + 'supported_platform': 'Supported-Platform', + 'summary': 'Summary', + 'description': 'Description', + 'keywords': 'Keywords', + 'home_page': 'Home-page', + 'author': 'Author', + 'author_email': 'Author-email', + 'maintainer': 'Maintainer', + 'maintainer_email': 'Maintainer-email', + 'license': 'License', + 'classifier': 'Classifier', + 'download_url': 'Download-URL', + 'obsoletes_dist': 'Obsoletes-Dist', + 'provides_dist': 'Provides-Dist', + 'requires_dist': 'Requires-Dist', + 'setup_requires_dist': 'Setup-Requires-Dist', + 'requires_python': 'Requires-Python', + 'requires_external': 'Requires-External', + 'requires': 'Requires', + 'provides': 'Provides', + 'obsoletes': 'Obsoletes', + 'project_url': 'Project-URL', + 'private_version': 'Private-Version', + 'obsoleted_by': 'Obsoleted-By', + 'extension': 'Extension', + 'provides_extra': 'Provides-Extra', +} + +_PREDICATE_FIELDS = ('Requires-Dist', 'Obsoletes-Dist', 'Provides-Dist') +_VERSIONS_FIELDS = ('Requires-Python',) +_VERSION_FIELDS = ('Version',) +_LISTFIELDS = ('Platform', 'Classifier', 'Obsoletes', + 'Requires', 'Provides', 'Obsoletes-Dist', + 'Provides-Dist', 'Requires-Dist', 'Requires-External', + 'Project-URL', 'Supported-Platform', 'Setup-Requires-Dist', + 'Provides-Extra', 'Extension') +_LISTTUPLEFIELDS = ('Project-URL',) + +_ELEMENTSFIELD = ('Keywords',) + +_UNICODEFIELDS = ('Author', 'Maintainer', 'Summary', 'Description') + +_MISSING = object() + +_FILESAFE = re.compile('[^A-Za-z0-9.]+') + + +def _get_name_and_version(name, version, for_filename=False): + """Return the distribution name with version. + + If for_filename is true, return a filename-escaped form.""" + if for_filename: + # For both name and version any runs of non-alphanumeric or '.' + # characters are replaced with a single '-'. Additionally any + # spaces in the version string become '.' + name = _FILESAFE.sub('-', name) + version = _FILESAFE.sub('-', version.replace(' ', '.')) + return '%s-%s' % (name, version) + + +class LegacyMetadata(object): + """The legacy metadata of a release. + + Supports versions 1.0, 1.1 and 1.2 (auto-detected). You can + instantiate the class with one of these arguments (or none): + - *path*, the path to a metadata file + - *fileobj* give a file-like object with metadata as content + - *mapping* is a dict-like object + - *scheme* is a version scheme name + """ + # TODO document the mapping API and UNKNOWN default key + + def __init__(self, path=None, fileobj=None, mapping=None, + scheme='default'): + if [path, fileobj, mapping].count(None) < 2: + raise TypeError('path, fileobj and mapping are exclusive') + self._fields = {} + self.requires_files = [] + self._dependencies = None + self.scheme = scheme + if path is not None: + self.read(path) + elif fileobj is not None: + self.read_file(fileobj) + elif mapping is not None: + self.update(mapping) + self.set_metadata_version() + + def set_metadata_version(self): + self._fields['Metadata-Version'] = _best_version(self._fields) + + def _write_field(self, fileobj, name, value): + fileobj.write('%s: %s\n' % (name, value)) + + def __getitem__(self, name): + return self.get(name) + + def __setitem__(self, name, value): + return self.set(name, value) + + def __delitem__(self, name): + field_name = self._convert_name(name) + try: + del self._fields[field_name] + except KeyError: + raise KeyError(name) + + def __contains__(self, name): + return (name in self._fields or + self._convert_name(name) in self._fields) + + def _convert_name(self, name): + if name in _ALL_FIELDS: + return name + name = name.replace('-', '_').lower() + return _ATTR2FIELD.get(name, name) + + def _default_value(self, name): + if name in _LISTFIELDS or name in _ELEMENTSFIELD: + return [] + return 'UNKNOWN' + + def _remove_line_prefix(self, value): + if self.metadata_version in ('1.0', '1.1'): + return _LINE_PREFIX_PRE_1_2.sub('\n', value) + else: + return _LINE_PREFIX_1_2.sub('\n', value) + + def __getattr__(self, name): + if name in _ATTR2FIELD: + return self[name] + raise AttributeError(name) + + # + # Public API + # + +# dependencies = property(_get_dependencies, _set_dependencies) + + def get_fullname(self, filesafe=False): + """Return the distribution name with version. + + If filesafe is true, return a filename-escaped form.""" + return _get_name_and_version(self['Name'], self['Version'], filesafe) + + def is_field(self, name): + """return True if name is a valid metadata key""" + name = self._convert_name(name) + return name in _ALL_FIELDS + + def is_multi_field(self, name): + name = self._convert_name(name) + return name in _LISTFIELDS + + def read(self, filepath): + """Read the metadata values from a file path.""" + fp = codecs.open(filepath, 'r', encoding='utf-8') + try: + self.read_file(fp) + finally: + fp.close() + + def read_file(self, fileob): + """Read the metadata values from a file object.""" + msg = message_from_file(fileob) + self._fields['Metadata-Version'] = msg['metadata-version'] + + # When reading, get all the fields we can + for field in _ALL_FIELDS: + if field not in msg: + continue + if field in _LISTFIELDS: + # we can have multiple lines + values = msg.get_all(field) + if field in _LISTTUPLEFIELDS and values is not None: + values = [tuple(value.split(',')) for value in values] + self.set(field, values) + else: + # single line + value = msg[field] + if value is not None and value != 'UNKNOWN': + self.set(field, value) + # logger.debug('Attempting to set metadata for %s', self) + # self.set_metadata_version() + + def write(self, filepath, skip_unknown=False): + """Write the metadata fields to filepath.""" + fp = codecs.open(filepath, 'w', encoding='utf-8') + try: + self.write_file(fp, skip_unknown) + finally: + fp.close() + + def write_file(self, fileobject, skip_unknown=False): + """Write the PKG-INFO format data to a file object.""" + self.set_metadata_version() + + for field in _version2fieldlist(self['Metadata-Version']): + values = self.get(field) + if skip_unknown and values in ('UNKNOWN', [], ['UNKNOWN']): + continue + if field in _ELEMENTSFIELD: + self._write_field(fileobject, field, ','.join(values)) + continue + if field not in _LISTFIELDS: + if field == 'Description': + if self.metadata_version in ('1.0', '1.1'): + values = values.replace('\n', '\n ') + else: + values = values.replace('\n', '\n |') + values = [values] + + if field in _LISTTUPLEFIELDS: + values = [','.join(value) for value in values] + + for value in values: + self._write_field(fileobject, field, value) + + def update(self, other=None, **kwargs): + """Set metadata values from the given iterable `other` and kwargs. + + Behavior is like `dict.update`: If `other` has a ``keys`` method, + they are looped over and ``self[key]`` is assigned ``other[key]``. + Else, ``other`` is an iterable of ``(key, value)`` iterables. + + Keys that don't match a metadata field or that have an empty value are + dropped. + """ + def _set(key, value): + if key in _ATTR2FIELD and value: + self.set(self._convert_name(key), value) + + if not other: + # other is None or empty container + pass + elif hasattr(other, 'keys'): + for k in other.keys(): + _set(k, other[k]) + else: + for k, v in other: + _set(k, v) + + if kwargs: + for k, v in kwargs.items(): + _set(k, v) + + def set(self, name, value): + """Control then set a metadata field.""" + name = self._convert_name(name) + + if ((name in _ELEMENTSFIELD or name == 'Platform') and + not isinstance(value, (list, tuple))): + if isinstance(value, string_types): + value = [v.strip() for v in value.split(',')] + else: + value = [] + elif (name in _LISTFIELDS and + not isinstance(value, (list, tuple))): + if isinstance(value, string_types): + value = [value] + else: + value = [] + + if logger.isEnabledFor(logging.WARNING): + project_name = self['Name'] + + scheme = get_scheme(self.scheme) + if name in _PREDICATE_FIELDS and value is not None: + for v in value: + # check that the values are valid + if not scheme.is_valid_matcher(v.split(';')[0]): + logger.warning( + "'%s': '%s' is not valid (field '%s')", + project_name, v, name) + # FIXME this rejects UNKNOWN, is that right? + elif name in _VERSIONS_FIELDS and value is not None: + if not scheme.is_valid_constraint_list(value): + logger.warning("'%s': '%s' is not a valid version (field '%s')", + project_name, value, name) + elif name in _VERSION_FIELDS and value is not None: + if not scheme.is_valid_version(value): + logger.warning("'%s': '%s' is not a valid version (field '%s')", + project_name, value, name) + + if name in _UNICODEFIELDS: + if name == 'Description': + value = self._remove_line_prefix(value) + + self._fields[name] = value + + def get(self, name, default=_MISSING): + """Get a metadata field.""" + name = self._convert_name(name) + if name not in self._fields: + if default is _MISSING: + default = self._default_value(name) + return default + if name in _UNICODEFIELDS: + value = self._fields[name] + return value + elif name in _LISTFIELDS: + value = self._fields[name] + if value is None: + return [] + res = [] + for val in value: + if name not in _LISTTUPLEFIELDS: + res.append(val) + else: + # That's for Project-URL + res.append((val[0], val[1])) + return res + + elif name in _ELEMENTSFIELD: + value = self._fields[name] + if isinstance(value, string_types): + return value.split(',') + return self._fields[name] + + def check(self, strict=False): + """Check if the metadata is compliant. If strict is True then raise if + no Name or Version are provided""" + self.set_metadata_version() + + # XXX should check the versions (if the file was loaded) + missing, warnings = [], [] + + for attr in ('Name', 'Version'): # required by PEP 345 + if attr not in self: + missing.append(attr) + + if strict and missing != []: + msg = 'missing required metadata: %s' % ', '.join(missing) + raise MetadataMissingError(msg) + + for attr in ('Home-page', 'Author'): + if attr not in self: + missing.append(attr) + + # checking metadata 1.2 (XXX needs to check 1.1, 1.0) + if self['Metadata-Version'] != '1.2': + return missing, warnings + + scheme = get_scheme(self.scheme) + + def are_valid_constraints(value): + for v in value: + if not scheme.is_valid_matcher(v.split(';')[0]): + return False + return True + + for fields, controller in ((_PREDICATE_FIELDS, are_valid_constraints), + (_VERSIONS_FIELDS, + scheme.is_valid_constraint_list), + (_VERSION_FIELDS, + scheme.is_valid_version)): + for field in fields: + value = self.get(field, None) + if value is not None and not controller(value): + warnings.append("Wrong value for '%s': %s" % (field, value)) + + return missing, warnings + + def todict(self, skip_missing=False): + """Return fields as a dict. + + Field names will be converted to use the underscore-lowercase style + instead of hyphen-mixed case (i.e. home_page instead of Home-page). + """ + self.set_metadata_version() + + mapping_1_0 = ( + ('metadata_version', 'Metadata-Version'), + ('name', 'Name'), + ('version', 'Version'), + ('summary', 'Summary'), + ('home_page', 'Home-page'), + ('author', 'Author'), + ('author_email', 'Author-email'), + ('license', 'License'), + ('description', 'Description'), + ('keywords', 'Keywords'), + ('platform', 'Platform'), + ('classifiers', 'Classifier'), + ('download_url', 'Download-URL'), + ) + + data = {} + for key, field_name in mapping_1_0: + if not skip_missing or field_name in self._fields: + data[key] = self[field_name] + + if self['Metadata-Version'] == '1.2': + mapping_1_2 = ( + ('requires_dist', 'Requires-Dist'), + ('requires_python', 'Requires-Python'), + ('requires_external', 'Requires-External'), + ('provides_dist', 'Provides-Dist'), + ('obsoletes_dist', 'Obsoletes-Dist'), + ('project_url', 'Project-URL'), + ('maintainer', 'Maintainer'), + ('maintainer_email', 'Maintainer-email'), + ) + for key, field_name in mapping_1_2: + if not skip_missing or field_name in self._fields: + if key != 'project_url': + data[key] = self[field_name] + else: + data[key] = [','.join(u) for u in self[field_name]] + + elif self['Metadata-Version'] == '1.1': + mapping_1_1 = ( + ('provides', 'Provides'), + ('requires', 'Requires'), + ('obsoletes', 'Obsoletes'), + ) + for key, field_name in mapping_1_1: + if not skip_missing or field_name in self._fields: + data[key] = self[field_name] + + return data + + def add_requirements(self, requirements): + if self['Metadata-Version'] == '1.1': + # we can't have 1.1 metadata *and* Setuptools requires + for field in ('Obsoletes', 'Requires', 'Provides'): + if field in self: + del self[field] + self['Requires-Dist'] += requirements + + # Mapping API + # TODO could add iter* variants + + def keys(self): + return list(_version2fieldlist(self['Metadata-Version'])) + + def __iter__(self): + for key in self.keys(): + yield key + + def values(self): + return [self[key] for key in self.keys()] + + def items(self): + return [(key, self[key]) for key in self.keys()] + + def __repr__(self): + return '<%s %s %s>' % (self.__class__.__name__, self.name, + self.version) + + +METADATA_FILENAME = 'pydist.json' +WHEEL_METADATA_FILENAME = 'metadata.json' +LEGACY_METADATA_FILENAME = 'METADATA' + + +class Metadata(object): + """ + The metadata of a release. This implementation uses 2.0 (JSON) + metadata where possible. If not possible, it wraps a LegacyMetadata + instance which handles the key-value metadata format. + """ + + METADATA_VERSION_MATCHER = re.compile(r'^\d+(\.\d+)*$') + + NAME_MATCHER = re.compile('^[0-9A-Z]([0-9A-Z_.-]*[0-9A-Z])?$', re.I) + + VERSION_MATCHER = PEP440_VERSION_RE + + SUMMARY_MATCHER = re.compile('.{1,2047}') + + METADATA_VERSION = '2.0' + + GENERATOR = 'distlib (%s)' % __version__ + + MANDATORY_KEYS = { + 'name': (), + 'version': (), + 'summary': ('legacy',), + } + + INDEX_KEYS = ('name version license summary description author ' + 'author_email keywords platform home_page classifiers ' + 'download_url') + + DEPENDENCY_KEYS = ('extras run_requires test_requires build_requires ' + 'dev_requires provides meta_requires obsoleted_by ' + 'supports_environments') + + SYNTAX_VALIDATORS = { + 'metadata_version': (METADATA_VERSION_MATCHER, ()), + 'name': (NAME_MATCHER, ('legacy',)), + 'version': (VERSION_MATCHER, ('legacy',)), + 'summary': (SUMMARY_MATCHER, ('legacy',)), + } + + __slots__ = ('_legacy', '_data', 'scheme') + + def __init__(self, path=None, fileobj=None, mapping=None, + scheme='default'): + if [path, fileobj, mapping].count(None) < 2: + raise TypeError('path, fileobj and mapping are exclusive') + self._legacy = None + self._data = None + self.scheme = scheme + #import pdb; pdb.set_trace() + if mapping is not None: + try: + self._validate_mapping(mapping, scheme) + self._data = mapping + except MetadataUnrecognizedVersionError: + self._legacy = LegacyMetadata(mapping=mapping, scheme=scheme) + self.validate() + else: + data = None + if path: + with open(path, 'rb') as f: + data = f.read() + elif fileobj: + data = fileobj.read() + if data is None: + # Initialised with no args - to be added + self._data = { + 'metadata_version': self.METADATA_VERSION, + 'generator': self.GENERATOR, + } + else: + if not isinstance(data, text_type): + data = data.decode('utf-8') + try: + self._data = json.loads(data) + self._validate_mapping(self._data, scheme) + except ValueError: + # Note: MetadataUnrecognizedVersionError does not + # inherit from ValueError (it's a DistlibException, + # which should not inherit from ValueError). + # The ValueError comes from the json.load - if that + # succeeds and we get a validation error, we want + # that to propagate + self._legacy = LegacyMetadata(fileobj=StringIO(data), + scheme=scheme) + self.validate() + + common_keys = set(('name', 'version', 'license', 'keywords', 'summary')) + + none_list = (None, list) + none_dict = (None, dict) + + mapped_keys = { + 'run_requires': ('Requires-Dist', list), + 'build_requires': ('Setup-Requires-Dist', list), + 'dev_requires': none_list, + 'test_requires': none_list, + 'meta_requires': none_list, + 'extras': ('Provides-Extra', list), + 'modules': none_list, + 'namespaces': none_list, + 'exports': none_dict, + 'commands': none_dict, + 'classifiers': ('Classifier', list), + 'source_url': ('Download-URL', None), + 'metadata_version': ('Metadata-Version', None), + } + + del none_list, none_dict + + def __getattribute__(self, key): + common = object.__getattribute__(self, 'common_keys') + mapped = object.__getattribute__(self, 'mapped_keys') + if key in mapped: + lk, maker = mapped[key] + if self._legacy: + if lk is None: + result = None if maker is None else maker() + else: + result = self._legacy.get(lk) + else: + value = None if maker is None else maker() + if key not in ('commands', 'exports', 'modules', 'namespaces', + 'classifiers'): + result = self._data.get(key, value) + else: + # special cases for PEP 459 + sentinel = object() + result = sentinel + d = self._data.get('extensions') + if d: + if key == 'commands': + result = d.get('python.commands', value) + elif key == 'classifiers': + d = d.get('python.details') + if d: + result = d.get(key, value) + else: + d = d.get('python.exports') + if not d: + d = self._data.get('python.exports') + if d: + result = d.get(key, value) + if result is sentinel: + result = value + elif key not in common: + result = object.__getattribute__(self, key) + elif self._legacy: + result = self._legacy.get(key) + else: + result = self._data.get(key) + return result + + def _validate_value(self, key, value, scheme=None): + if key in self.SYNTAX_VALIDATORS: + pattern, exclusions = self.SYNTAX_VALIDATORS[key] + if (scheme or self.scheme) not in exclusions: + m = pattern.match(value) + if not m: + raise MetadataInvalidError("'%s' is an invalid value for " + "the '%s' property" % (value, + key)) + + def __setattr__(self, key, value): + self._validate_value(key, value) + common = object.__getattribute__(self, 'common_keys') + mapped = object.__getattribute__(self, 'mapped_keys') + if key in mapped: + lk, _ = mapped[key] + if self._legacy: + if lk is None: + raise NotImplementedError + self._legacy[lk] = value + elif key not in ('commands', 'exports', 'modules', 'namespaces', + 'classifiers'): + self._data[key] = value + else: + # special cases for PEP 459 + d = self._data.setdefault('extensions', {}) + if key == 'commands': + d['python.commands'] = value + elif key == 'classifiers': + d = d.setdefault('python.details', {}) + d[key] = value + else: + d = d.setdefault('python.exports', {}) + d[key] = value + elif key not in common: + object.__setattr__(self, key, value) + else: + if key == 'keywords': + if isinstance(value, string_types): + value = value.strip() + if value: + value = value.split() + else: + value = [] + if self._legacy: + self._legacy[key] = value + else: + self._data[key] = value + + @property + def name_and_version(self): + return _get_name_and_version(self.name, self.version, True) + + @property + def provides(self): + if self._legacy: + result = self._legacy['Provides-Dist'] + else: + result = self._data.setdefault('provides', []) + s = '%s (%s)' % (self.name, self.version) + if s not in result: + result.append(s) + return result + + @provides.setter + def provides(self, value): + if self._legacy: + self._legacy['Provides-Dist'] = value + else: + self._data['provides'] = value + + def get_requirements(self, reqts, extras=None, env=None): + """ + Base method to get dependencies, given a set of extras + to satisfy and an optional environment context. + :param reqts: A list of sometimes-wanted dependencies, + perhaps dependent on extras and environment. + :param extras: A list of optional components being requested. + :param env: An optional environment for marker evaluation. + """ + if self._legacy: + result = reqts + else: + result = [] + extras = get_extras(extras or [], self.extras) + for d in reqts: + if 'extra' not in d and 'environment' not in d: + # unconditional + include = True + else: + if 'extra' not in d: + # Not extra-dependent - only environment-dependent + include = True + else: + include = d.get('extra') in extras + if include: + # Not excluded because of extras, check environment + marker = d.get('environment') + if marker: + include = interpret(marker, env) + if include: + result.extend(d['requires']) + for key in ('build', 'dev', 'test'): + e = ':%s:' % key + if e in extras: + extras.remove(e) + # A recursive call, but it should terminate since 'test' + # has been removed from the extras + reqts = self._data.get('%s_requires' % key, []) + result.extend(self.get_requirements(reqts, extras=extras, + env=env)) + return result + + @property + def dictionary(self): + if self._legacy: + return self._from_legacy() + return self._data + + @property + def dependencies(self): + if self._legacy: + raise NotImplementedError + else: + return extract_by_key(self._data, self.DEPENDENCY_KEYS) + + @dependencies.setter + def dependencies(self, value): + if self._legacy: + raise NotImplementedError + else: + self._data.update(value) + + def _validate_mapping(self, mapping, scheme): + if mapping.get('metadata_version') != self.METADATA_VERSION: + raise MetadataUnrecognizedVersionError() + missing = [] + for key, exclusions in self.MANDATORY_KEYS.items(): + if key not in mapping: + if scheme not in exclusions: + missing.append(key) + if missing: + msg = 'Missing metadata items: %s' % ', '.join(missing) + raise MetadataMissingError(msg) + for k, v in mapping.items(): + self._validate_value(k, v, scheme) + + def validate(self): + if self._legacy: + missing, warnings = self._legacy.check(True) + if missing or warnings: + logger.warning('Metadata: missing: %s, warnings: %s', + missing, warnings) + else: + self._validate_mapping(self._data, self.scheme) + + def todict(self): + if self._legacy: + return self._legacy.todict(True) + else: + result = extract_by_key(self._data, self.INDEX_KEYS) + return result + + def _from_legacy(self): + assert self._legacy and not self._data + result = { + 'metadata_version': self.METADATA_VERSION, + 'generator': self.GENERATOR, + } + lmd = self._legacy.todict(True) # skip missing ones + for k in ('name', 'version', 'license', 'summary', 'description', + 'classifier'): + if k in lmd: + if k == 'classifier': + nk = 'classifiers' + else: + nk = k + result[nk] = lmd[k] + kw = lmd.get('Keywords', []) + if kw == ['']: + kw = [] + result['keywords'] = kw + keys = (('requires_dist', 'run_requires'), + ('setup_requires_dist', 'build_requires')) + for ok, nk in keys: + if ok in lmd and lmd[ok]: + result[nk] = [{'requires': lmd[ok]}] + result['provides'] = self.provides + author = {} + maintainer = {} + return result + + LEGACY_MAPPING = { + 'name': 'Name', + 'version': 'Version', + 'license': 'License', + 'summary': 'Summary', + 'description': 'Description', + 'classifiers': 'Classifier', + } + + def _to_legacy(self): + def process_entries(entries): + reqts = set() + for e in entries: + extra = e.get('extra') + env = e.get('environment') + rlist = e['requires'] + for r in rlist: + if not env and not extra: + reqts.add(r) + else: + marker = '' + if extra: + marker = 'extra == "%s"' % extra + if env: + if marker: + marker = '(%s) and %s' % (env, marker) + else: + marker = env + reqts.add(';'.join((r, marker))) + return reqts + + assert self._data and not self._legacy + result = LegacyMetadata() + nmd = self._data + for nk, ok in self.LEGACY_MAPPING.items(): + if nk in nmd: + result[ok] = nmd[nk] + r1 = process_entries(self.run_requires + self.meta_requires) + r2 = process_entries(self.build_requires + self.dev_requires) + if self.extras: + result['Provides-Extra'] = sorted(self.extras) + result['Requires-Dist'] = sorted(r1) + result['Setup-Requires-Dist'] = sorted(r2) + # TODO: other fields such as contacts + return result + + def write(self, path=None, fileobj=None, legacy=False, skip_unknown=True): + if [path, fileobj].count(None) != 1: + raise ValueError('Exactly one of path and fileobj is needed') + self.validate() + if legacy: + if self._legacy: + legacy_md = self._legacy + else: + legacy_md = self._to_legacy() + if path: + legacy_md.write(path, skip_unknown=skip_unknown) + else: + legacy_md.write_file(fileobj, skip_unknown=skip_unknown) + else: + if self._legacy: + d = self._from_legacy() + else: + d = self._data + if fileobj: + json.dump(d, fileobj, ensure_ascii=True, indent=2, + sort_keys=True) + else: + with codecs.open(path, 'w', 'utf-8') as f: + json.dump(d, f, ensure_ascii=True, indent=2, + sort_keys=True) + + def add_requirements(self, requirements): + if self._legacy: + self._legacy.add_requirements(requirements) + else: + run_requires = self._data.setdefault('run_requires', []) + always = None + for entry in run_requires: + if 'environment' not in entry and 'extra' not in entry: + always = entry + break + if always is None: + always = { 'requires': requirements } + run_requires.insert(0, always) + else: + rset = set(always['requires']) | set(requirements) + always['requires'] = sorted(rset) + + def __repr__(self): + name = self.name or '(no name)' + version = self.version or 'no version' + return '<%s %s %s (%s)>' % (self.__class__.__name__, + self.metadata_version, name, version) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/resources.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/resources.py new file mode 100644 index 00000000..18840167 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/resources.py @@ -0,0 +1,355 @@ +# -*- 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 shutil +import sys +import types +import zipimport + +from . import DistlibException +from .util import cached_property, get_cache_base, path_to_cache_dir, 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 + 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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/scripts.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/scripts.py new file mode 100644 index 00000000..8e22cb91 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/scripts.py @@ -0,0 +1,417 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2013-2015 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 + +from .compat import sysconfig, detect_encoding, ZipFile +from .resources import finder +from .util import (FileOperator, get_export_entry, convert_path, + get_executable, 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 -*- +if __name__ == '__main__': + import sys, re + + def _resolve(module, func): + __import__(module) + mod = sys.modules[module] + parts = func.split('.') + result = getattr(mod, parts.pop(0)) + for p in parts: + result = getattr(result, p) + return result + + try: + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + + func = _resolve('%(module)s', '%(func)s') + rc = func() # None interpreted as 0 + except Exception as e: # only supporting Python >= 2.6 + sys.stderr.write('%%s\n' %% e) + rc = 1 + sys.exit(rc) +''' + + +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 + + +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') + + 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 + 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"' '''" + 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 + 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 + executable = os.path.normcase(executable) + # 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, + 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 + linesep = os.linesep.encode('utf-8') + if not shebang.endswith(linesep): + shebang += linesep + 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: + 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) + + 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') + name = entry.name + scriptnames = set() + if '' in self.variants: + scriptnames.add(name) + if 'X' in self.variants: + scriptnames.add('%s%s' % (name, sys.version[0])) + if 'X.Y' in self.variants: + scriptnames.add('%s-%s' % (name, sys.version[:3])) + 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: %s is an empty file (skipping)', + self.get_command_name(), 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' + name = '%s%s.exe' % (kind, bits) + # Issue 31: don't hardcode an absolute package name, but + # determine it relative to the current package + distlib_package = __name__.rsplit('.', 1)[0] + result = finder(distlib_package).find(name).bytes + return result + + # 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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/t32.exe b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/t32.exe new file mode 100644 index 0000000000000000000000000000000000000000..a09d926872d84ae22a617dfe9ebb560d420b37de GIT binary patch literal 92672 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/t64.exe b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/t64.exe new file mode 100644 index 0000000000000000000000000000000000000000..9da9b40de922fb203df6b9a1d0ad4139af536850 GIT binary patch literal 102400 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�vlnW`{LoXpTySn$@;x8yoz96jn?+Kk z+8+$D$B^0(dpJ6<hZa-dac!=Dhn7&}Ml@L8?2`HV^PF4PZHDWFvVxb6nK^I63}Ihy z5|`ET>A18uUe?`-6oJ;)kr577Q&Vi><kIszZ_Qr$uhe^fsNOTolL}S>eB)*fB=t!> z-VTs@&yaf8Q*)_o#I@2F(QesP)-{|(k4g>Cwre=A!xmwMY;-K8yUmySJ@MCm|CJ}& zc_7=d`c9fRLg$#ug2UUQz30hw(;n+0IrXqxE4M$qE!^uU@ncbAh1*({4{wX~#v7|h zt!Ft>u19Wbj`B@4NCff}+~v}ieMORYgqxzJ`{&g7c6~pRG;{)TWAZbx<ie!<90O}9 zFuPst_a~ifU7)u$k|UHeV&x#2(^Kba%8_f6es?Tqy=O2BmwS}1RxI0mFO%57W>(dK zj`6KWJ}w7wdDMsql_NPa){*Rv&G4++R*ji#uw-r)A6qgo=lJ7HdO42m-T9`*@Q7Dz zf+UuVF*`x*lEuy`b}3{lL+qQx-V%G0F)qPi+bXtgzTai9vLpp|U<Ej8B$MXm=2j~8 z#PV~8bbWRN7g3L|ARg-t){(9tPfc@phf2~Fgk5B)l7bbK*Iq$2%`9=Gq9I(EFH}L% zrh*VWhLZT6_2Z6h6H2s_uv8FF<8p763W9KbOfoJW-bwWRO;=Bqsh;-w*7d^;>m{as zs0*o<P&JwQ+18<ca_sbkzHLHZ2%ZxQ>1V`BC1hJ-*Ccia#IBKi=^B#in@UCIn4Fmk zior7R+v?|Wna0Stc!;T_-oKJ_$^PsZYv(fQ1ujjn{%Vk9>tTa9t=}6Y#k$KNsn#7D z>0#YsEHbRM2Ju)c4U%UqHppyip+WMkB7-cjt};lPHO(LuR<=QwS{WMg3(c%?245?9 ziow?lKEUA8&sYft-za#b!KE9r+HRE6_%{pwp}}QbvYHIuAo$A$-!1rVgEtEPguxF8 zzS-bSg5P6sOYqwb-YWRb25%F*+TbFcu)GG35qyEc(VnQRIR;M_JkQ`x!QBRz*{79e z@KnKv8(fYKTTX+sfK^r>gL?#zF?gQfM{m$&uMoV|;Bs!(I%M!_!4DXGt>AkNzFzPK zgWoRr!v<d<_$GsI5`2TfHw(Vr;9CT*HF$&IOAWqT@G^rp3Z8H9je^fG_yNH^25%Dl zB7<9kry9If@WBRe6Fk}ABIdH<3?3u6GI)aEpI@)(kSw@maHrsJ7(7MrMuVpczQf>Y zf^RW6q5)++U~rG%8x5W(_-zKCE%;i4=L^2f;0pw=FnERFMFw9g_-un$3!Y=}wSs3D ze7)e~41T-dDF)vt_yB`%5<J1+n+1<F_!hz2mQwZ_`wj)?KT6u$dUsEH{NL_G91~@| zD8BrcqOvvqIb+jcY}f&g-)3z7Xl!O<bHvzeFgDy)iT}vhtP>lZn(kW^HPoJ7b}}B9 z8IJ`fs1ut?V>89rq+qka*o-$eXnlyk#@GxqHfh+*FgE>+O$IiTjZL(%@nDl-Y`$2c z3%3B9%Z$yt#-;)rx3Sr8Y?fkkp|N>N+vpAm%Mr%%cg9kBA}pQ8@~6g9x+E-n8_R03 zwCQfn2S5?@&$E{%8|J<N?zLgou%ETBlOOvjQ!$P}NmZf0Bp00|>s01iG?D}w*pSou zNIoLCujkrC>z{ZwSCF3JqS>>diBbD}gUJvNhszwO|GKb=>-u!R@M+)WoJJ?AS)L=? z5Ed)n`|GoLl1KkmO|I|Ly=2up0Y}NIui6|-o?|kMf)-fhY2Q=Xj|YzF--?`w7d<tt z6bwxfW1r4mv)zlf0#APyeg^{ESqaN5r}jnfP_{bH^lbYe0lYtWUmJIT_b}FxwTFFv z*+sAen<8|`KP&npuX%ne8D++{ejQ4q8i;Q0rfA0REx`=67XW4dOa?e$6O$A1tmnv! z*<<%-pZSuPIaOX8;ii)GC3ZG003T)JgCu(<OR;2WD;sxV9G>RyG5z-&{r9N;`?dc2 zmHzvs{@d1RR@x!|!$c8BOywC;1%1eW*oBd?zTrlv26n!W?Wv1zAnf3E7<X3oTIa^6 z9Dd%;)q1G9o|$O4_k8NZlTHj*p+10S$~45614{dJ$0qp3gVMU(vB|!XGNBYT9?#3X zBsf3%WiWhyU3WNtEK^u?Oi`7g&mV`5j@=%|9#mGE)I*%rxqc+mKEq_~bs%LOXxNQ{ zz;UzWjNN7M+~gq7z1@k?_IF^kXLR0bteAF&TZ~qc)&Oj0v)i_oI3Z1tYra3Pt(9OD zLiVYw*EyE$@voIZURq^jV1J9UuDlpijn;jNA5VS!ex`JRq_G~X>!L)txN#+py7=W{ ztczb^z)AzE0XhwT{6et_3^|6hUHof(zoIg&!vZyxr`1JST>jX@{{1x{aC!Y1@&n?X zCx3F~&+M8HBD~XUK8W;=tofju_msf1-gB)lZV^fUDR{P4gSK#|YseSu{&E)LV?eWr z60!QHv1$RdEW>=zm|qfenKc8Y!sgJKIi4d@==NhkIfYT@&*Sp%6_N7F(>4~_4W4aH zJjVL8oCvaxGgd{3w{XsF))&O&`iBp0agy2`liEx`@G?PuAnD^tvJ$bfMWdb^c|A&2 zb2$?c>#EO<u!;~|?nN3DgSxNehtP*s^L30jvF7U@UY-t&<WL4;#*~)fIsPX%NfBj{ z?y0#?aD`7_Z@2%^&EUIklD|TQmMAyt$9!?Tz#o4_0n5_;$V#04sHxx)yVLhCKZgfj zv=+IWHWGl1-`z313d31yr$0UgPc1K5<L_icvo3NlIg2J|D;`8ue+-_}-(q{=XOfnG zABtdFqWsSR(%(X<K3VQgmK|%7VWFHlo!|7g9BaB`bl2%zHh&{Ca72&`f+t{)d!!TQ za#1p5JO-LEL?5fHpUmA~HpbXJLYfpvx+RN@*G2t;<30et0Ct3;>e0~1Ywc&66Jh$i z8GIO{<u)SO2<qk4=V3mz_R%KR!$Q*uA4tj~&K!Re=5%d7SJGg6JAH>^^)H1`{<iF4 zM|0}SW2nm*$Lb$qCz>{Ari)u^cKS0_Gxa-t3?LrI#70j<BWfHf6UEOX<XuEw4Zc&g z?5qBArU9>1W{cY$QZBldi#*%7`&mDrO>dF?3F$3G+wzbkg3hd8YcuY=29b2Dar}vP z{JX?xIduDGKUSY95j9G1j);0g$4N{-&>~eJI!uln2rzUQy~nm}+sWC3`H1hHiq*yK z5lA}QPE`)t@{Ci9M4u{=YT48D&~`OlOdj&wyKW-Wa_^IyH!eTxIJuT;wf<5U{({r0 z?$cCstl?w|Vv_iDHu3^VZ%P_S>qL(E6KRt5Nxg8;R2U>~;&6jF$hpj)XKEi!*N7Pj zX4L6K8c1prYjIy<+&6{XyJ`0WLHAk4eL=|m<9j9imZ1CjASfOo;`eZndO3p(4Km)5 z8wdS41fhQL)WRA$>Q9371i24{M^^8b(43)|$H@jSr#8vjp^1{m_<C{iw+514#w-lS znWc*)q4NW;2td4yjMJrGwvbC9X<E$5^|&vH#T9rNFVTlNFU`qFZcHS#WDw^do!UO{ zxIoehNd-S=%Tu0O@H!9=F}8=^=)<%<#Be6f`0>ZTc8?Gt({@SV2sUCiF1c$j@K=Kz zp!UdpoS|j#4@cL7NByt9%GQ^yudT`{$rE(YrE#Y=cxqsWzkSNbVVy+Y(UZ*s6wiGs z6TNPtc&_F7@1vdW9bz)`!A;Bu|G+qB`U_Fz*eKWEQH7`fyy$b{0gb$Sn3ORW?In)f z8|>F&=~*e5^;3yVh8J$>59*LbL~LC8&F1ivZ$R#_gB%(OFUhQn?48YShuj_*C9<#P zmXw@f`!hL)e=4tRMP$o4B-}&*=Z%tS$sv6kAGiJ_=vcFe9#Kcxqoi)m)MFeR&1+dN zxo`xF)a=8HZm%5ub=G_tz9PQn%Lv~o{-`|8bG8ifM|psC@e{?=+j@0fXml(Bl|xn1 zu=So*NM`LcH!p-Jv2uLtcVwgG2SW5{Yv;A#b38R)H7&`6S*}IAAgfyVNN#u{d*Rd* z(&|9c1uo6I@RzUrf~c?WWTHyDf6m%-mp=G1%v1Aq)8fC1&12YD7we405tBLmlq&sx zn(05RK{)Epe82>Tlik*yI(E(@TK;Cm1RWxb!)EOuhpGNz_Tk#gB$}YPPa?cyo-e(m z$#dkh?DPhnFWpA4(DS9^Q4>dF*yD|{?mbt^Krj1}oY{I+4@vs0*D0dwAkj076LN9U zQsC`Y9Rr^z!_(bfd*03b#u@7VIIUCvz~DwS5^PEB&m3jmp9sdDh(BumDiYH-;hm?- zNghtVpx9y%SFt$sodp?XO7LDcJW&w?tr6sTP@2_EXI)Qse!>YNDzteUescUAV0#z! zE4TihQDNIr&Y%BdpeXH?^J#gxoC0^P^E%RGmXMzjemJA?7$+{n^|?#V!E^pY>udUj z>#*B__P%(u_dTbz_g&kY3V6;Mmt?k`o((5E^-&{8WU@c93GdOOap)net=oRC`*QU8 z&0#j#AUskZ6@kwSuIM8<VK3F;xNSS<#Hc&zxR(<ONj|6W4?Ai_6c9){da+VafPL3D z87SstaXPa$7Z>rerWU?i$Dz&YFJsvm#XW}v?qX^wT8mvZ%lhUiuaoCO`{u088C>9! z1;1L0#!**I5l*6LFu#Qx?|ZEKlJ$<jxNNF#*!JuQX4<?Q@uNQwzn0LOpm2dT9H08! zz@Np9qo)JxopLxtWcgN)pod$;0~^3;`fsYDQ=G%PiMNya!<A#4)z}wh7d1*K!=g&0 z{eh%sIRv5A>NsjIlPCzs&|EawDb#yLPaETQ%aKg>+bDn#G0VS$_oE0WM3n74be0eM zCIZHhmnmmEZbsL#Vn;X!uAuVGOga?jb;QZ7*8F(Q9mhp%$`(j^<suXJPI5{-v%?%W z{~45f!*1U9y8+G#)0`9TJKgbE1ovUM{}Nk5c`{s%+jhtiOWA+Pk@+T|gZB#^j|tIk z;y6Z0I^KQrd9hXwJ`A$ePWktuzorN;g&{8_DGBSM$nNeluJoN%XElGo83qpB)+haj zd0}7|g?Y!d*6qlFE#GnNa!2P0!D*X0&0lKHdhtSx2bw>`plw?~pl~6fg%FzY;pAgj z%P{et=D6pGL-XKi5xmVXJ>Jd4$?d6s#7T?eu^aymJ3B*N>mmnd2X<T(>+7-h6c-nP z0y|mq@qcYML05elpdD4d;2Fe@l&5};ghy43dsu^95MxI%{`LE%?&G%UtC%vg*EKEm z?(x+BRQv~$CNP_nDj&rNKyBloBk~Mu^%OFz@}%!{+#E;#$=Bm@^2ub*v3e5zn?Hjd z(&Qa$4g?D&k~{73WW^f8phmfBc7#g>`*?Tr6c-gHcZ~JW%<x=N$D|tLsxOa83AdlT zgkRqG-6g!5N|F-h((|6Igy&F@&LvEj63Vkgy0R+7hkid?+9;dE?G-iZ_!7mzZTcxu zIiet+y$8l-(k4h=xwB)7meyP`jJ61nc03arbIep8mAzvaigEV0p~E&<C#G?Kbb-_} zm)eXbI?*vN)oq%0;R~Mn+v25av)FX3k3S&uFjzqR&}&G|`{QEV!*;U%AReX-JtCOA zyVH-Y+|t5KU!@60i!q7&Xr{pQ1FrOAj@1zmL~{|RP}ax_g?@HU&DT-BORZ<v+%^}8 ztb?HFq1^H%zLOq2U!rT-BR!0VKA2@IS;*3Jy+G1-5|d&)bd*V&+(v)B<sQa`EyU2g zl<+}5?yU<ExlNA@8QvbQ>g5WZU1RWKU8++aKyIvj&>E*|9*_Mn+LY|N*2^#`^T@Xf zB)$!U*D_vmcvObX;C}mDo^jRk1J<oE!2_|ZFgX6e;MsmZR+;#%1FM3C)kkj3{n%N| zXgl4HorBfM?#K2Sbi(~u9@OE&SMN4xA@^e|L#bFl1f^i+e(Y*O>ie<R8Cxs6-Qz3l zHQPtrySN|Q=?<9Ib(LVnhJrW$O6n8^S8IUj<Ja6xiI&R&ew5DJ_rI{ROT<|xx&LKu z{EFJDiO$gdFS+qM46DBk6y{?kvJN(2?!o1@jZB8j<u;fn$@&8sW(s^0z_5=g<DJAs z8GBm`Lk`wgD??>7%S?SQ43$GU_Pn#>-Crk~in#piKbWzunb{=TrZUz&A9&8%FPF<E zpy7PY>ns0Z&$7C_>-X*YhR#_kO!Zy*hQ6e|ev7`LtOD5gW=h3M##5KIQ6vh(tsAkh zB~LNh?L@^rGCg}8p{<K|A#8m^`?&_(u5W16!|-~2(#@;!lfKiN(m~(QCOl?;yS||{ zcnRqn+W9^84eeMF%Jx*yuJsM=Y#vOurMRMQK<3c9&^d6NzM(8s9tHIc9ikU&*EbYY zO(6P){(?&<eM67l9J8MDNA3EC(1IU_f|CYL=udJyTHAdyuC8rXq?=k{_SP2TsFg9y z<=@S;*il<Z&g2;A&4`@@j<exsw*B92xWR_CWI+@V4VJ9@`xOvHXV>iduPPuKTq|^Z z&Wf|>SO3POqm$Yo|3JF;jtYo&eX9bZH*0isT`C|7h13d&rf?Fbg94%_Xw_6cW6p63 zh%WhmO##u%v@7WO?^HlEL8{xTLN2BW#z@Z)iCz>gto@f15NY;l87Z;qSlSg3U1Agv z0YVChz)?VS$^U;85Y@2NM-RMN#8}aY2#!}kgiZXXt5^UF@j5CXsvQL%{I?Vk{h4Ta ze@@5Kl>(x5+I>Jr_Y)Klop*={gVBpa&-Op6fM_Li6^}n_qfF{DWLlipK>^Vpkx9U7 zCs9D;mTAtvrhsTUlRVuTzK;T;R8kkuwgRHVZccliTmezI@hxOLxdNhFj)VwJp*6E` zD0;W`<!qf)Pyvx1+uSnU4rw47dl6d_>(0;`h|Xnl%7EjIWeAE!?HP3Vc7;S|%`y|$ zZ&OG#9)&jxyd(J=R7kX5wA=J(sjI%QjPufgr^Oi8%!aur!bxZrksye(xfo=fQ9y)J zqCV9(h)yC|v`7F)vy71FBocd664~~sBpNC9MJUu0Sn8-fU0}JR_7s7rB<d*;l|<bH zqLN7N9EkRu{Nq&;ox@<-l}e&>&=G6s_?;?=0uO|0rFj*pKm)CkNcW%!rnE{TIsDFJ ze!>Lq=1L5mRT5pJJ=iLVrUs)yC6VqpX;)e$QJOf^oLnVQvI+PtDv1swU?7H==8p^# z*?h<#Va=}#0@0(J_ZzG5=G`DdwJuc>nbH`QM8C$P<wA&S&m3Ry+A4`|Jlydvfhd09 z@UUojN@G4Spb!0*-1A7ZqIB5q%=<meE>S~^4_T95B+Auf20we4K1-Y?-jV6QcD79D zwNj#3g0^rUnBxrFnRL$oIdO0wLM{k&R7xakxwPZ9bIhLYcdWT?rX(zVtRkSTq2g9@ z$(n0%`uKO*JE~fAoK7MOtFG2u+={g}B24I@lc<;0s~glwM7Q74*ZPJthW0wPmr2=U zRwQvkE0!b!tgrAQIeM|(>s(Nwn-s6py36bl1fp7Rl<=<^RkFQ*jDOJ{3kl<S%_YWG z8QanuL!{`I#UflPLp;gjExi2ZLA3=NVYW_-nlF#};;qX<d1#pkNk*o}H~tio@IV== zHj~}}KmKZ&)QICrcMQ+JWVH0M9HHRW25xO2GY{?0C5z4#r>!s~1Htn7*Aki8YD*PW zv*`SFJoc$$&6+St<XP)4Tv_7r+vLTFjq8ULkTk5~Jy+8mCs~4|h~X#V52h+KuP4-E z?C^R*Zp45$S|W1%Z}M_N+TfKJv12dlI3?hfIu<+1+>TLZ93SQAZ;z5k3LY2I5@oa< z<!CW{b)U&4FEH%0KEePD=JM|t{g%At$vd9e5yRg&oFx+KI*A7X>R=iBoG8zG!L=m{ zJL|<H5%@_jzeR2yH;cy$kkYNVSWe6j=7EQ$=ofT|4tO4^h;}^6Zf6539$I>GA&soP zYBeGE_U~pN$op5Mx`AiX3B7EW<FTD=zZFiA<0QxGro>R^XAw_H-RPDiPvIq4Hyo>z z*DaPZGDVlvv2_}a${>9!{8h4N{q-~{Ioo|A64{$4h18EZm+2GWTnyK`wEXeer4#^m z*c0ZtAbtkfM>fu0udVN)BEeI)l*79D&YAXmW{7Kz9%wn?%DS$%oL%YZMk&G&*#wD1 zBsR!w$>htH%mRIzNu;lG@SNA#nMNVX-*1hcCL*S*o3bt_?BhF=6)`tiAEh7>?zG}I zt#r4wX5((C`HkK$YWaiXQ3pdxlhuTsEaT{XC}3`r+g~TQQCu}&hOJ0-rGL6?n5Y4v z0Nfb)X#*mG$GhW`jy-sw|C7NcAYzJMp2AfU*puE`d6qkEewf$k*A|iqN9}oxX(SPR z*uMEJ%+`)_={U|I&J%Jf%k^;lh``Y30MdD2gOy{>yL1-(T%MJC1%6LtAgP#~P!xTT zq2)gI8Mz?VT+Ps;`;rU@EZk;wn=08r-0yZgiYlbF8RU2(qSY&gsA_INqFLHL?4KGu z>|e7ZgWkj5w+zO^CBP>%AN=bvnZB(nz0;>yTfUZe|KNSpo%y1;%iTfI^moZ@9FN&D z8^>cJvte@n{bV+ry9mjE<PeY+;e8+7)tQ{&AX670$L*lJ`ZUrN-Tlamd`Y6cy3f`L z)UOsN{Y~FdLxJ_)@1ek2s<yK{$;o<->-J5N!gWyxive1m)X4H&8j99mz0_03s-Ql1 zy-{C{%AUb_@Jj_-J2EBFI;>^KNAB~N@wu%}FM}7;7U~HpE1E4vrZf}_duH%(nYf8e zX_IbF8|~&KOge|<ChrMWOWS=8RRt+r$IJ46mBsx)L^4boGD>)l(@{GJf5>GT5I@yl zc7?nCnnBrU+RCZRs+I>u+Gto1@|hCXu<ca-k|d<i?~FHgjz@E1nobbWY(qrDuE}5V z1TV*hxwbVUrQu08S}#(XPb5PB9v*#j)K0dgGP&4^l%~x#-)qD5Hq5f&P$R8blV@jY zYY{cbrO+SuVtD0I6R53KMen8YXjRcuHG-;Wx$~n{ML(#K>5kfM1l8)IZzOC@+m+ra zT3z%8?T)%=*)(&bY{UK32z-hn*fK5|i+Jepjtn+f7#Wz~9g1<(9H!Pwn48WC9^1-k zPQukzGo8aMHBY7n7X)=pr|K9baF41}&^zs}FMs(CxxnWZjnnJ}wA|u$Je7u~N|_G2 z<yFhmMpa5BJ!kcO#jH;JZOwC~6FRa(>z<Ct>hUfwb9>M}%@D<t1a7q5@8q%tX=l~G z>!_VhY2Y5}pB?$r-o8#^6ZOwO>W6oC+9{6O1Q5rgXup}c-YTHE8_^CbYj&EwDtCHd z*(=Q-$eg%CqOgWmrtSJG2|xwbNxCG#l)dBFT`gjPwcfpU#^B<d!fNS?xs$tIM%p4; zL!(tCYbX&UUEf2(mbFBd)MYiIqPj85|4s99QrwlbR!5%|(Xw?u>1<Kd8P7MfO1-+# z-zsWKMRT?5DXK@w_L!&nSGrcwWG%CN9VmU<id|bv@c_eUHOE?`^$skymfN;>0Y$5I zf!1pMdkN{Yo!%6G$cZKNnlFgF-u0&z4<t1u7pnfGLK3GMWo8){*vA2t1W|k45YD<4 zwb$FxgGlW*|DNf6P^a~WMyIvWXASi#o|K|x)t8Eb+v}H=)HF<Guq_)rNAz0@d9P`? zHmKnG(DhTbZ+DOPc^kxNZPj$Qy0Z+`6m`^ALlTCSjI8=AiSk_$I7OrJI-1?7GNEbn zdXXSPN~7^wN9g)%DlRM<g37O(coWjrdQGqT_@TH;ZVT;<k@))Q6s1iB6<`lA3b2#3 zT?Yl&?H)U7!Tt~}*iBjsHnASB1-m;BZyaH#YRWM=lUN}~DC>W<k4&FL3AVFKCD;+J z2wMyGOF2ZtM(P@gLzsjb32diE+-u&4|LMYMrQO|W!yL5{(w_%7oVd%qc3ATlGzVW| zi95a7H^HSFdGpVy!}K=SQ+Gos$CNgS4YltphPJE0{)X)(`fL#_IBFN*T}z^58`aZ- zl1jw(T%U}e59@_mD&nYbj6Up!K++e;M`W;&<6EizT<-hs153e*`3^@)UJ^cciZ1M< zwk~X*S2l{S&mq!4(!)A}nd|8`0*$%_=n@3AVSlqoJpH(%C*3b)q@`<>*dH>9Wsdlq zb<cjyOwun!nZ8hZ#pVybq9-`KBh2gA!eUZ4{W;BF8Ov~QZ+*p17<Nwm(znTJPD^)+ zo};a$I=O4kJ;khHN8H1X5KT}UwtqK;Ll=p4AL1FhjV&Qz)SM2&s5fyWP>i=fe<OWK z+S68HT08UtJji3yjBtS!1t>j4X|;4hrsK(B@6>ce%*}b%;-8=E66y=xD~5=qVyPTL z$k)d*tV1livm?Hd_H=mV<2u_dBQ)SHxeTK%XNEGWlYdoK&y?J0oh#YkoD81Uyts6( zWY&9y$*i+IvwtB0&6;?1{Y4xk0C5`LnNEiwf~ovTtRdhYe8~XLa4p_UfaY`Yq~kE= z7Ew_2Oif$1H?O8`fj4t&8L^_rBYEp=keaq7jx~vdpe=vcqd6L^#C1W8b_;2${xGij zW7-K_LqhX=AdE20a^Fb8I7(bKY3KQP7`0|;xY2qYsqLE|#fLbKwH=M-YjOPC(R>Gv zTV%*4HHPbTVw4Wq7)8Cu7U_wNQF^B>()-qX-ZeIJv8i`CjbR!FFeVfpFc~OWg-~(k zC=F9hIykMZ-WvRcu7u_n=+4R7H|O}6327DAy1=?ylJ+a3$WhYsA7j+?=*I}PT<NiA zY*p8u<^wpp{93N$X?{*;RpJ|N>$>g`pDki~Kmye4Me8;EFkA1)(it1&*TfrCeqAlz zs4y35L@%ysJJUO6tF$R9?98n)`vB>q**krksiav%8q+dWqHdYQ->{Ypp?@@b_G<Qq zw~Tey&0H%qDU&}z#n<ncl9@?Gg0K=iq#xUrX`+r;ripr1xTa00##*l%v$km8c!ZjI zhMBw3UViwW_W0{%dMiuMsS~BKZWx@(w1?eznFe><jkkRBLNnHI(5_~z9MAisITzP) z-Y;{0j_9#4o}V7Sy%u4}Tokq<nAiu-Mz&}#WiMMan6h~K0&&+x(E(q2&G^f%L}86@ z2n9F=B~(2)McHpFtvt{Yx0QkgTB5en=s3}^D_P=^kaYt%OUFk29`<o<nbF@tYn&Zk zXzX%t+2mI%Un8H_rN{S|e3t5m#zzd*`TSaI6$y~f*Cn6d@Cu)7s%Mei<N!53{?}JX zc87MzZvQT_JNCsu(kUjx-%!-J2xL6uxNm!ohj*1@#7wrnjueqIC0X5!FYE95!J@Ws z#B}NC^!WT5vVOLw5ak5%W#Gr_a6#U*?XWw6oHKMqCLld~f*7EXbz3MVYY?cGo{8|O z3mJp!a$Tu~oQ!=}4k4llDx8!;QoeET>k+nQ+1NPc8&^N2yETE4biFa3%3^tJg8feX zcEmCqMSt<kuLAC|app<+-m4hJdBN{ef86`{?U%rQ4Bq6-fE+z%%t30oY;cAMD?B2A zbD@nEzSAYXVRcs}CYl7UQVlsOGQ*SH2goo@>3!ait-nT8_ugHtH8Mr}cj_(?o9oHh zdJde{NA)HdI-J2Zfec5zpWZ8{@W^EUfL0M^)P72HmsC<Yq}J+*Qav!HA8^#{!TxY& z49^Pw9<1g@h;xxCvQr|~7K1q6A0*Cw<QCya4|n~7FquH6v_u3lZ6bZVQrh-MKBnK7 zLZJS5m8j8@qRqWAGqt625Kj|!;^e6t%X@NHuHs?5VPtg6-Tsk}TX*?KdXBVkq=ssY z%tjcq&6<!C(d6H?ttkrCL0X*{Px;ntM~M1@6#P`eHxH!Qxzpcwtht491a>vcje^Hz zRH~o6+uUWPt4x&zQ<bOiRZ=}v%@nCFvau#=8yH7H;u^WJZwRxk>eQVXB1}!)nbAGA zCO?j5(J)&E-_({@w*4bYrbxU=Vk^6`wcK#lrC}#h(=a51S1~bTg63w5`492D6?!Y{ z`4!ABC=fi8FFa!eT(C=qIk#@kMl&%-a>FTJBQ?uMH!AvqjmXSrL}nr_3m=3w)aG@> zE2fB=?g1|ULxh!!ldL&cw;vq0<}ki*Z(*@ClXXpQll9rfMtbI|xv`IOtobuBpj;|# zD`FUt!z`XGNB?_?GMIRz7;+5b1*`8GBnI7x)kv?buZgsJd7JVpkq?BVT+&%r6AeYm z*XN~(37Q9dXIpy+Q9t(#j`7R_LqiiXGTBz@5W0CLW=<`NJa1P749x49Z4Bs1+FMpo zrq>*Wxu!UUA@fqi;91D#WYa)vK+37lN(&x%h3+_^p9XzQy@YGMy=#`IP~x!?ABp^i zbKSq<URk0{U2br!>96fiD0_djfmpF*TA%Bu06)9R6y8yL4@|~{DwMO^#9Z^C&J5kx z2yH||QK-LKfK0Rksrgc;evppW>g8oTR^<M-<+*xpYM@<cx3!kG$Gl$7R%#x}M+Xjc zZWN(&nRG?3d!3YL00mFcDm-@j|AvYgTT#z6O54(R*a59&tlo3X;n}A3j?)jgIpU|U z;*`k|zfM}$%{ZCN(4Nro3^@w*$A0AhD#!n+|4mqpj{ch~L*wo`(B`kGsvQ3y)W{l@ zxsM~GK~AyPI+QM~X6d!cv*Ibe$w){_E?5xm@t@nefH{_*Cwy<)<w-yH15Cd1vFs9k z%$-xwd)sm)Cp=>idSB4f_eG!~q|1KkVxbSsg3b-qAN8K@)|-e{sR|lHgSWqD*e5cz zU4wi_R3ft_&%nZ6iw2)H_9IW-D7tE-X6If<f}|5X5*0NSGi;wNak#Dfe?yFQQDyUJ zxrH00Jzsylb?dJM@m5%0UJ;~$-qH#2ef!-p&I__k@J2G2z9mVYS?`IlF81k2|ADwc zQlZ7CKnF`35Br>2Gqu&vczV(Hbf@vOU5x&ZrFGuy@psD|_MyjrEPMYq@<?h$ZXs8a z8@yRh3h8r2cYUK&z}P$4u-QZ6{Y26~@q%#+9JRl}2WT89+hDX+p^m8b_c5BCd$pu8 z?3mp8I`S6d4%64Qa)U4Df`v3ih8UDPvF6G7LRn{BDE)oFTat4@*%!)t8Y9{lL>0yv zWVy>)C)1z6PVMNk=yZchRz-tvqod|liOV1VVF|OkE!32<{vhS16gRe1l9QKkuyfMP z78JMlioQ^}bt79io6j+}uL;4^R^dn9s=p*WeV5~AFRd+ylUyRHlHb6b^ae+b?AaQ= zp&QFF2{5^rmRYzjr*80W$hSL&XsPM~QgmOyE{E4A#9Q~PK;X%6$z^?9H`b2f?DYxP zk;9qd{sY`|r90=b?>^nE=;gv1zNsQ^uP~OE(3hX%iFkz!XFIa~7D#%kryf3gvR!CB zHY?bjO0#|~%@C89-q>@&K$g(fcGovDuic{+EpoAws&-nHm$O|f-tINtnty?(PIpi; z<N}J;1?6=4zvPIjbrjE%wG`P2aMdo0IL$W@R!R~(XUCm^Gk40>Dhe5;cTc+7BcKn- zlkS5NSSxMw?{{sDgiw;rJ<X!pjlKlRbfx!O&uBgV55@*W=kX<B{!gt{Z<}sH_5$;; z3ukTnf^{vnvhnO4@1f%v#yy$W9Y5MeDuJX;45zNAL}g3;EI4jAr<emtcgvhccQ(G! z)|Jr6T(hyJfckOivfp#Eptu@M$B(OOrgJY?e<ywf=WhS@?DV%h{=a28a(7{U_g;n^ zvJ&UH-Q;9N|CZOSBx0^fi}LlbT4qXea`N57+XeE5%?s8~bXLF7;&R&KZkc8u!PGMI z`l}%nk>ly6CR0fBW(yX7U^#*3K+*;-C>=TA>Ce5$x47l#sX<sY#9AFn$oe@bg9PvY z5UFhYB52h|Du`TOf_=d{I~4g5_?_8;06o{tDdgbeX>Tu)zCu4MnQcES$%TaHCa!ab zrEwZ^PFPHMgKO2hPzI6vlZ~$ZU!mzJgWFZJf!KOQ^AV~gyeR_1mDec{ZJnNp)j44? z)yy@YL(`#3TZLJrg|(!1vR|$3!&{Q^6&ACyB_ZfeCa_7XMgg)fTI&er5yB$}`!@_x z4GN{XWI`%5hDkQ#ZHf#_eXWui!7kbQY&w^oPEim$)*tmWQi{4TC@xC}bKmscZ4d$$ zkKHPstV0+NM@^kWA$WC9v;E^t?=xKWo^b0iw$QXHVk@^)+L@hRKkG1w*c&D_prO@? z){_|jL;-s=C~4S{!X*C_`Zv}CdKhjVBhl<FVU~v!m&t-ZzUeAq92QY=RyG|DHZK^P z0Hv4xv6dm`<h}@bxO^c38l6kt0ip6K$ZL+rkj9dls6!0)1!aSigO7PI!C?QLHLsP% z)h++@WK{GWetI?9U{iG|*!fT#D{$)6n$wtk9e$d31+8A%^$ek8)7Ze_r^CGc>TZlV z{B#0x7A*C#gLjT`>Y#3VvOhB!x0<F;YIcX$WhVbtMDo5-){oB@+BBd&<bb!QwaS?C zG5LDHqch*qy(X>rIqQqR2LeYjS;ES$iwrvcVIKeVgkjevp!Sg0u_OGMgV7eoyB%vj zTG7w#e}?d-jTEP?Wme6zPO{K^5q%G@iJ`Lj*fH<vau*k&W_{8TFU8}m2}e$}LduA^ zr(2>~jQ)5g1$A-ltgm!A`r6seZ%TGWVe5y|S~yohC+=(+@K-8^kzmGPA|+`oS?XCI z?33ivzj3U265j}0^z1%E)Twtkf8M^nlirW@BHQ14yg63N&l#LdydJjrTdm$>B}qNR zjP%rBj%Ih}j=QY~7HcB$bil5bWWx#VgMu}WomqK^#Po0onP3C0vR-%<LlFu(`NM=+ z&j{td2Ng;Lk5i%yH<L)F$nQl{y1J;#kr)u%6MPdTK1*A0!XQo<)Z2}9T{rC|WqV-A zQqaJV8}wf}>J00l`;SzebnwjV^Q;T0?)60IL|vhFq4468Z#iw3)Q&D&$%V4+z0L#* zIoZ*rS}o^wiq5z|yZ!zc>y}@1;ks3NWow!pWhfsKP+w-Y&hOGmhZ@kqNy^q<I1}_} zMHdOy{I!}CSs0ng+<~tA=pBCRuU$EL3UkRD^Yo<EFs;Ym=UL0uq0~AX$K{09qO8g; zqw>f9ak`9`w=*~&R|`^lsh+DoX)k~sbBFrlJ%Uwf$le+pw{7$DuX8=tEJyR}SQeHQ zHOt4LvDs6|9bT>fmGyNkn}Hox#zy~ZtkwLnN%6S4ty!M0w6clcGmAeVqt>4ME^Pg| z8P*0nvg2!&9#L5ZUBzT18<RRX=|YE!Y?kR~b#RxO{J;BG?Gy%3>PI%*Xv06+aJLN) z+VEo=Mh-IJoHo43hSO}gz=pLp{DlqwXu~IM_<{}Jw_%$Nm&rRr{C;4=;j;71FU^K- z8_uzz*M>LQ@OB$MV8h)ueBXv&*|6uCCf*bqUSz|`HmtPaY8&2a!%a4P)P_53*l5Fp zHhkZPZ8q#S*reCThNs(bqz&CR%(LM<8!ootY8&2W!@F$wunqUx@MRkwvSF(Y!-tsk z2iWjD8|K(>o(-4T@Mas{Wy2?I_^b^N+R(CLn+;>_dOO{QBW;*r!z*pL)`q%r`P0X) zm!SD%@FJ%ueV6y74XpURZC+zw=Ww$>F!lomb?x5K|K@97zEaFGwC3`)azV2-!qBZL zGfbyj?KZGb6{;%y%v3YfBsD^=HtJu{JX)Qna#WUWEB-E1*(y^_QEqMPQ66=nTFAc( ziAQ2GzanM+4OdR`VE#F^o!DG&|C9XXs!`g0l(v)5dDzL%WkbQ;s+gP>lg>Q;R*IGW zU8c&_;x6o`;M<E^(D!uwRAAFN2AA@w`FvHl$!{`v89535#Jq@5!Jms*Dpe_d%r93J zU@lb1PV{dQe&=E1)Ak+XDIlJ9TT>ndH6{NFdP;s#Q>XJOWtV&f^J5@;%TT01=g#EA zn1vc9UGXRBNIV6^=OZUYb_gu_P13n<x0^xE#aC4)f3wI(kuLf1E;I05+`)G)`Crr_ z>~!3ZH%mT(=_<HP(o@RBFJ_5P$|3Pcz9l>(zvse*3oon+F;o%1;m%xsPC>5chcCkA zjw&h|Wej<+jmxl(au*jCFPv8#VwB6u7awPyQs^xg=jp{2-k^iaH{Vx9W+(f~bmWtL zi*&`iDk@8*zH<vI3q$o>Jg?GMP#LP=$pwqFk#rSlDdLy76>&;@e2WNwy&^7&M@=f8 zrwF5_7kGV@ML6)AR9R|c&}D(IvMOYPUd2U=iaS`$@EKEX`6BIWy3d9MUWrG-OBjVe zg&&2xB%#8>BO;@^MaOiH?GYE>(~*$at9PHIQ~D<NJGK9S(@r1g9CXH+gNK|oH0A7b zh7BJva#ZT*F=NM_d*1nJ7hITr(fEreWVj|~y0a!-;>n(TX-@8CQ}U)xn?3_^>Fg`6 zylT$X*UZf?m{(X-Trz(_=?|_gTezsa;=0NzuW#{^rPtqZ<Fe%|R;tYM%B-cO-n`24 z!eXi2h44}#bzcb=6swVNQkiaB(t;MjIi>h0rpJ&rU#a~$bvfdd%yWc)a%el#`Pb1; z&{g;;n>KdINnE90nF8;*w6CsWm`4AXs>bq9;v7LdE^=l15$R8yeC7O=9z^n)t5eJY zlTsCFyAqxAh1%}|N>l|_z+VX={h9PP(l<&wETz=*F)h;Vw^a9S9pe)BQqnBNy^Oy% z*#4yT#Ol^%;un8KxEE@7X|a-~lhmYNapJOwzt@vTNmbk`_$M)%5T&>*qCT8ZMoMX7 zU5KspluqsQTJmr5?xj^r>7^E{h_OujDOV-fNqkbL!IDY;)J~@nnobKzTl!S#bDS!L z5up%Mr8*l^3Gpq$EM=BFiH&fA&{IluBBd7TJPHSyF+j>E9M&<UTjxo7Q_0szUAw|h z!TKH(s_#XFl@b@@PpCDYvN}njg0M0oNvtOJGN37~*h;*{Wg$L;xo_u8Nv%D-(V_IZ z<}Zou_<EN#f^^R$-!m{v{YV`c7ei^GndEcizlA@7<q6U)HB^pZo`Ur2ssu$Lx*KW) z=`n_RNU*(0?HA})V#+10t*f}4ng@lCgL!JF?-+G{D868RzF&PVA+4@c?7B`39mddW z1oQv>)037ZZT7#C-npUlD&SGW1B;2Pk~n47Q3lmcY)Qek*-o)w{>O#l`~LZ#OU`Ak zw3Kwcv|*u8&?Fogti|@!g7rOGT@XsItNJddR;9j7PblrXT=y2zYZlW-O0QL{V+it5 z5SsFg?!-@$D~VD12h-<B|0TTB)ff<rtDT=lci<<<?}_m(gzC}@3MCfk`Y6zSo9QF2 zJ!v|@{Qg(?=lGOljwdwlNbPodx3^QN73np+^t;mEE+CAI7BX`V(%kgmLaF0p3&xk) zq5i%<zewzcM}==>oR<;*_!JC1QajY&_m5v@<}$Yr#$44Y?)LgjRqg$K3H4U4X(zpm zjFlCb1(#7kMmHHL4aH>iF{6VCBiwjAjbsfbzYJy8Te8z9zovj$$BE=we$}?w%xaWM zwasku=wIV8<DcDn{j0Fey==47Hutv84c{359Bk6RJlovQHY?kFs%>6>)cEgjo1M0q zldSsJ__c9A-8Qea%>!+716w0u;7;3|XPXDv=KMC}zSK5n*yi8_+G(3_u-%nyma~KM zYdd1X%P|f49k9*0y6ww+K>CCdT}PK=C-r1{y-YQXe@;e7X{pj8&5SY!Ojc^bB_<cK z_MB4UAF2QGZZUN&vCr2&WzHd^k%>X#yH<0+68@q<jbG<fvIuA9t%Ha?mbGoi*e(pw zD}@-O$0(x>$}eS+udECdv2r&Rrr7L@=%%`bCq!mtWkt#F+*INckIuBb+0ilT{M6K0 zdB~5QPR(L5`3v&-DYdj>DZdze@G@ge3?PPoV*Jk!3OG;rmqI^i{+;M{qK$`|`L=(x z>coG?`(LHn|AndV_pf6Nt5y5IaAZE;=U*_q^FKUrLjB7K_&>}6VXH#_j2is!{u``8 zfvdyX|AmKrzkk8-Cvx<^YV%z!KvL?%zhH`DYR407#sA-3V&kK;|L<4Yc3%mq9XD7Q zy=(igde!Qh+BG-*aBbZ>|IPJ3`tkZ(ZvDw^KmFOyZ@=RgzufSvJAb|LH+S8A&%O8E zzv;KX`~3rd_~V~8KltZ|9)9G}$F^*J{4Y=Z^~t9iwmrRl$1^*3?cVe3b9<kEVPE6^ z7hih$Z?C+1;I)IVzwzeZ-)egMop%qt_x?Yu<_}sv{OIFPT0i~gXP<v@_(<EAUwwTP zRowq=0nNz;FyBi+^S@pG|Lyeu+w}h~0olpjwSeq@yZlk?cgktq;O{ida<(b><ILP~ z=6cK>=Mq2aWd3m{^ZHI^&MO}m{?<<BpL8-m9Dcn2M>?4!$f(Sz8~Eb*E-4Pm8fTR* zDk@(x-CN)-MIMU%%&OwbDf50%T<FbSR8n5KP&>>bjQnuVDX8+g3caO^i}T7Wd=(*k zV`rjMxkxb!<`+*aUur_mME;k>EO0C<ijhbcQ3Y!P+JC!MSKm~<s+tL1#7)&Vt*-79 z6~&Bh&6+h3J~g#EuX-)Bvy`D}d9$jSuQ931%UerOXG-<jYC<Wdbqf|Oh>3|_T2Zm2 zqT+=4ob1e8#wYtXgYiG9z*|t}EUv69uXL6!a+VeN78NciuDsAWL=<PCX_Gmy{3aEY zmK7H{z2(mGisD7i;-$rfK5xOiGA#hdedZ!Dh<gcibQUaf7F6J|h%h1*he#uJJnjA} ziwlaJC6(n131Ol+bCB%qxX76Y8qEfB2}g%Q=3YLJ{DrE)d7ZDg^7_(6^PMF+V<)&* z6??rMoK=;#h~gFbD#}U=bwvgP+VSIF?(?491MU#%<nHa|Dx_fEVrPYsU^{(Pl8vE5 z%BqG+Qtfn{U+jg9rCw)Yc~P;myd)UHWN0KS#ie|~-zaAPRn*2P>O<C=qx5Q6c7~4s zWi73MVNFe$njrp#3k#?dYD2OD8HSFe{)P%xwV-%j0hVQ@i;Ai9G9>QicS1Z%7L<C6 zt11c#i=71}-r`E<&{4js%2D%57mX@jw0LMRa627z>g{|Yso}A-vV76P;ziz||Mql> zD;Jh7qH4$uRRJ@NxXxD&A*u5Y?DnmhChIdgL}S7)DfKRps;%-CRO;COrD)shOP9x{ z7w3aI(;1TJ{F`>vk*=Dc9sL&->niW)$7Yk6GbW8NJFFf3>y(F{In-HTmqNIuV`x%1 z(f^>Kkglw(e2L~iLU*d}lhpI^HP$JWF48HeobQtgt#YOmFQ#WGEpZkvtnglc_IIZ@ z4_2}}jRG=CyDSbdt1zT<Ve!IpdkgIhHH5Wql{$m@xWSy@o$Xj(Pj^rM)8Jpc`SFOK zT>6vWW<C<T?WdQ}b*jt@=SY8EHRp1e?D{$EFG<H<HK(d{VMST-++e>qr>L~bJI8z8 zxRDh_rsFeYI_Y1T947XTQN4@eRPS*;RPSky#`uOF6>p3&`|B?vF!_RS{RbwBufTgE zGzpsfjfg*Y;0}lC@9nAj7R3`soN|nft?bqm*%;0O-kVRqPtdT~NEJH{2|;DIim)DG zst36X>l3T`jB}_yV-i|>HpMl@HpEm!=Xc9X>=�?dYNUd4WaURX_A__M4W}D0!0n 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/util.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/util.py new file mode 100644 index 00000000..9d4bfd3b --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/util.py @@ -0,0 +1,1756 @@ +# +# Copyright (C) 2012-2017 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, + splittype, 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() + 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 + result = os.path.normcase(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'): + compile_kwargs['invalidation_mode'] = py_compile.PycInvalidationMode.CHECKED_HASH + 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>(\w|[-.+])+) + \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): + """ + 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 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.split('@', 1) + if ':' not in prefix: + username = prefix + else: + username, password = prefix.split(':', 1) + 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): + """ + Converts a resource prefix to a directory name in the cache. + """ + return path_to_cache_dir(prefix) + + 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') + 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() + + if not hasattr(ssl, 'SSLContext'): + # For 2.x + if self.ca_certs: + cert_reqs = ssl.CERT_REQUIRED + else: + cert_reqs = ssl.CERT_NONE + self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file, + cert_reqs=cert_reqs, + ssl_version=ssl.PROTOCOL_SSLv23, + ca_certs=self.ca_certs) + else: # pragma: no cover + context = ssl.SSLContext(ssl.PROTOCOL_SSLv23) + context.options |= ssl.OP_NO_SSLv2 + if self.cert_file: + 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 +# + +_ver_info = sys.version_info[:2] + +if _ver_info == (2, 6): + class HTTP(httplib.HTTP): + def __init__(self, host='', port=None, **kwargs): + if port == 0: # 0 means use port 0, not the default port + port = None + self._setup(self._connection_class(host, port, **kwargs)) + + + if ssl: + class HTTPS(httplib.HTTPS): + def __init__(self, host='', port=None, **kwargs): + if port == 0: # 0 means use port 0, not the default port + port = None + self._setup(self._connection_class(host, port, **kwargs)) + + +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 _ver_info == (2, 6): + result = HTTP(h, timeout=self.timeout) + else: + if not self._connection or host != self._connection[0]: + self._extra_headers = eh + self._connection = host, httplib.HTTPConnection(h) + result = self._connection[1] + return result + +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 _ver_info == (2, 6): + result = HTTPS(host, None, **kwargs) + else: + if not self._connection or host != self._connection[0]: + self._extra_headers = eh + self._connection = host, httplib.HTTPSConnection(h, None, + **kwargs) + result = self._connection[1] + return result + + +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) + 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() diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/version.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/version.py new file mode 100644 index 00000000..3eebe18e --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/version.py @@ -0,0 +1,736 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2012-2017 The Python Software Foundation. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +""" +Implementation of a flexible versioning scheme providing support for PEP-440, +setuptools-compatible and semantic versioning. +""" + +import logging +import re + +from .compat import string_types +from .util import parse_requirement + +__all__ = ['NormalizedVersion', 'NormalizedMatcher', + 'LegacyVersion', 'LegacyMatcher', + 'SemanticVersion', 'SemanticMatcher', + 'UnsupportedVersionError', 'get_scheme'] + +logger = logging.getLogger(__name__) + + +class UnsupportedVersionError(ValueError): + """This is an unsupported version.""" + pass + + +class Version(object): + def __init__(self, s): + self._string = s = s.strip() + self._parts = parts = self.parse(s) + assert isinstance(parts, tuple) + assert len(parts) > 0 + + def parse(self, s): + raise NotImplementedError('please implement in a subclass') + + def _check_compatible(self, other): + if type(self) != type(other): + raise TypeError('cannot compare %r and %r' % (self, other)) + + def __eq__(self, other): + self._check_compatible(other) + return self._parts == other._parts + + def __ne__(self, other): + return not self.__eq__(other) + + def __lt__(self, other): + self._check_compatible(other) + return self._parts < other._parts + + def __gt__(self, other): + return not (self.__lt__(other) or self.__eq__(other)) + + def __le__(self, other): + return self.__lt__(other) or self.__eq__(other) + + def __ge__(self, other): + return self.__gt__(other) or self.__eq__(other) + + # See http://docs.python.org/reference/datamodel#object.__hash__ + def __hash__(self): + return hash(self._parts) + + def __repr__(self): + return "%s('%s')" % (self.__class__.__name__, self._string) + + def __str__(self): + return self._string + + @property + def is_prerelease(self): + raise NotImplementedError('Please implement in subclasses.') + + +class Matcher(object): + version_class = None + + # value is either a callable or the name of a method + _operators = { + '<': lambda v, c, p: v < c, + '>': lambda v, c, p: v > c, + '<=': lambda v, c, p: v == c or v < c, + '>=': lambda v, c, p: v == c or v > c, + '==': lambda v, c, p: v == c, + '===': lambda v, c, p: v == c, + # by default, compatible => >=. + '~=': lambda v, c, p: v == c or v > c, + '!=': lambda v, c, p: v != c, + } + + # this is a method only to support alternative implementations + # via overriding + def parse_requirement(self, s): + return parse_requirement(s) + + def __init__(self, s): + if self.version_class is None: + raise ValueError('Please specify a version class') + self._string = s = s.strip() + r = self.parse_requirement(s) + if not r: + raise ValueError('Not valid: %r' % s) + self.name = r.name + self.key = self.name.lower() # for case-insensitive comparisons + clist = [] + if r.constraints: + # import pdb; pdb.set_trace() + for op, s in r.constraints: + if s.endswith('.*'): + if op not in ('==', '!='): + raise ValueError('\'.*\' not allowed for ' + '%r constraints' % op) + # Could be a partial version (e.g. for '2.*') which + # won't parse as a version, so keep it as a string + vn, prefix = s[:-2], True + # Just to check that vn is a valid version + self.version_class(vn) + else: + # Should parse as a version, so we can create an + # instance for the comparison + vn, prefix = self.version_class(s), False + clist.append((op, vn, prefix)) + self._parts = tuple(clist) + + def match(self, version): + """ + Check if the provided version matches the constraints. + + :param version: The version to match against this instance. + :type version: String or :class:`Version` instance. + """ + if isinstance(version, string_types): + version = self.version_class(version) + for operator, constraint, prefix in self._parts: + f = self._operators.get(operator) + if isinstance(f, string_types): + f = getattr(self, f) + if not f: + msg = ('%r not implemented ' + 'for %s' % (operator, self.__class__.__name__)) + raise NotImplementedError(msg) + if not f(version, constraint, prefix): + return False + return True + + @property + def exact_version(self): + result = None + if len(self._parts) == 1 and self._parts[0][0] in ('==', '==='): + result = self._parts[0][1] + return result + + def _check_compatible(self, other): + if type(self) != type(other) or self.name != other.name: + raise TypeError('cannot compare %s and %s' % (self, other)) + + def __eq__(self, other): + self._check_compatible(other) + return self.key == other.key and self._parts == other._parts + + def __ne__(self, other): + return not self.__eq__(other) + + # See http://docs.python.org/reference/datamodel#object.__hash__ + def __hash__(self): + return hash(self.key) + hash(self._parts) + + def __repr__(self): + return "%s(%r)" % (self.__class__.__name__, self._string) + + def __str__(self): + return self._string + + +PEP440_VERSION_RE = re.compile(r'^v?(\d+!)?(\d+(\.\d+)*)((a|b|c|rc)(\d+))?' + r'(\.(post)(\d+))?(\.(dev)(\d+))?' + r'(\+([a-zA-Z\d]+(\.[a-zA-Z\d]+)?))?$') + + +def _pep_440_key(s): + s = s.strip() + m = PEP440_VERSION_RE.match(s) + if not m: + raise UnsupportedVersionError('Not a valid version: %s' % s) + groups = m.groups() + nums = tuple(int(v) for v in groups[1].split('.')) + while len(nums) > 1 and nums[-1] == 0: + nums = nums[:-1] + + if not groups[0]: + epoch = 0 + else: + epoch = int(groups[0]) + pre = groups[4:6] + post = groups[7:9] + dev = groups[10:12] + local = groups[13] + if pre == (None, None): + pre = () + else: + pre = pre[0], int(pre[1]) + if post == (None, None): + post = () + else: + post = post[0], int(post[1]) + if dev == (None, None): + dev = () + else: + dev = dev[0], int(dev[1]) + if local is None: + local = () + else: + parts = [] + for part in local.split('.'): + # to ensure that numeric compares as > lexicographic, avoid + # comparing them directly, but encode a tuple which ensures + # correct sorting + if part.isdigit(): + part = (1, int(part)) + else: + part = (0, part) + parts.append(part) + local = tuple(parts) + if not pre: + # either before pre-release, or final release and after + if not post and dev: + # before pre-release + pre = ('a', -1) # to sort before a0 + else: + pre = ('z',) # to sort after all pre-releases + # now look at the state of post and dev. + if not post: + post = ('_',) # sort before 'a' + if not dev: + dev = ('final',) + + #print('%s -> %s' % (s, m.groups())) + return epoch, nums, pre, post, dev, local + + +_normalized_key = _pep_440_key + + +class NormalizedVersion(Version): + """A rational version. + + Good: + 1.2 # equivalent to "1.2.0" + 1.2.0 + 1.2a1 + 1.2.3a2 + 1.2.3b1 + 1.2.3c1 + 1.2.3.4 + TODO: fill this out + + Bad: + 1 # minimum two numbers + 1.2a # release level must have a release serial + 1.2.3b + """ + def parse(self, s): + result = _normalized_key(s) + # _normalized_key loses trailing zeroes in the release + # clause, since that's needed to ensure that X.Y == X.Y.0 == X.Y.0.0 + # However, PEP 440 prefix matching needs it: for example, + # (~= 1.4.5.0) matches differently to (~= 1.4.5.0.0). + m = PEP440_VERSION_RE.match(s) # must succeed + groups = m.groups() + self._release_clause = tuple(int(v) for v in groups[1].split('.')) + return result + + PREREL_TAGS = set(['a', 'b', 'c', 'rc', 'dev']) + + @property + def is_prerelease(self): + return any(t[0] in self.PREREL_TAGS for t in self._parts if t) + + +def _match_prefix(x, y): + x = str(x) + y = str(y) + if x == y: + return True + if not x.startswith(y): + return False + n = len(y) + return x[n] == '.' + + +class NormalizedMatcher(Matcher): + version_class = NormalizedVersion + + # value is either a callable or the name of a method + _operators = { + '~=': '_match_compatible', + '<': '_match_lt', + '>': '_match_gt', + '<=': '_match_le', + '>=': '_match_ge', + '==': '_match_eq', + '===': '_match_arbitrary', + '!=': '_match_ne', + } + + def _adjust_local(self, version, constraint, prefix): + if prefix: + strip_local = '+' not in constraint and version._parts[-1] + else: + # both constraint and version are + # NormalizedVersion instances. + # If constraint does not have a local component, + # ensure the version doesn't, either. + strip_local = not constraint._parts[-1] and version._parts[-1] + if strip_local: + s = version._string.split('+', 1)[0] + version = self.version_class(s) + return version, constraint + + def _match_lt(self, version, constraint, prefix): + version, constraint = self._adjust_local(version, constraint, prefix) + if version >= constraint: + return False + release_clause = constraint._release_clause + pfx = '.'.join([str(i) for i in release_clause]) + return not _match_prefix(version, pfx) + + def _match_gt(self, version, constraint, prefix): + version, constraint = self._adjust_local(version, constraint, prefix) + if version <= constraint: + return False + release_clause = constraint._release_clause + pfx = '.'.join([str(i) for i in release_clause]) + return not _match_prefix(version, pfx) + + def _match_le(self, version, constraint, prefix): + version, constraint = self._adjust_local(version, constraint, prefix) + return version <= constraint + + def _match_ge(self, version, constraint, prefix): + version, constraint = self._adjust_local(version, constraint, prefix) + return version >= constraint + + def _match_eq(self, version, constraint, prefix): + version, constraint = self._adjust_local(version, constraint, prefix) + if not prefix: + result = (version == constraint) + else: + result = _match_prefix(version, constraint) + return result + + def _match_arbitrary(self, version, constraint, prefix): + return str(version) == str(constraint) + + def _match_ne(self, version, constraint, prefix): + version, constraint = self._adjust_local(version, constraint, prefix) + if not prefix: + result = (version != constraint) + else: + result = not _match_prefix(version, constraint) + return result + + def _match_compatible(self, version, constraint, prefix): + version, constraint = self._adjust_local(version, constraint, prefix) + if version == constraint: + return True + if version < constraint: + return False +# if not prefix: +# return True + release_clause = constraint._release_clause + if len(release_clause) > 1: + release_clause = release_clause[:-1] + pfx = '.'.join([str(i) for i in release_clause]) + return _match_prefix(version, pfx) + +_REPLACEMENTS = ( + (re.compile('[.+-]$'), ''), # remove trailing puncts + (re.compile(r'^[.](\d)'), r'0.\1'), # .N -> 0.N at start + (re.compile('^[.-]'), ''), # remove leading puncts + (re.compile(r'^\((.*)\)$'), r'\1'), # remove parentheses + (re.compile(r'^v(ersion)?\s*(\d+)'), r'\2'), # remove leading v(ersion) + (re.compile(r'^r(ev)?\s*(\d+)'), r'\2'), # remove leading v(ersion) + (re.compile('[.]{2,}'), '.'), # multiple runs of '.' + (re.compile(r'\b(alfa|apha)\b'), 'alpha'), # misspelt alpha + (re.compile(r'\b(pre-alpha|prealpha)\b'), + 'pre.alpha'), # standardise + (re.compile(r'\(beta\)$'), 'beta'), # remove parentheses +) + +_SUFFIX_REPLACEMENTS = ( + (re.compile('^[:~._+-]+'), ''), # remove leading puncts + (re.compile('[,*")([\\]]'), ''), # remove unwanted chars + (re.compile('[~:+_ -]'), '.'), # replace illegal chars + (re.compile('[.]{2,}'), '.'), # multiple runs of '.' + (re.compile(r'\.$'), ''), # trailing '.' +) + +_NUMERIC_PREFIX = re.compile(r'(\d+(\.\d+)*)') + + +def _suggest_semantic_version(s): + """ + Try to suggest a semantic form for a version for which + _suggest_normalized_version couldn't come up with anything. + """ + result = s.strip().lower() + for pat, repl in _REPLACEMENTS: + result = pat.sub(repl, result) + if not result: + result = '0.0.0' + + # Now look for numeric prefix, and separate it out from + # the rest. + #import pdb; pdb.set_trace() + m = _NUMERIC_PREFIX.match(result) + if not m: + prefix = '0.0.0' + suffix = result + else: + prefix = m.groups()[0].split('.') + prefix = [int(i) for i in prefix] + while len(prefix) < 3: + prefix.append(0) + if len(prefix) == 3: + suffix = result[m.end():] + else: + suffix = '.'.join([str(i) for i in prefix[3:]]) + result[m.end():] + prefix = prefix[:3] + prefix = '.'.join([str(i) for i in prefix]) + suffix = suffix.strip() + if suffix: + #import pdb; pdb.set_trace() + # massage the suffix. + for pat, repl in _SUFFIX_REPLACEMENTS: + suffix = pat.sub(repl, suffix) + + if not suffix: + result = prefix + else: + sep = '-' if 'dev' in suffix else '+' + result = prefix + sep + suffix + if not is_semver(result): + result = None + return result + + +def _suggest_normalized_version(s): + """Suggest a normalized version close to the given version string. + + If you have a version string that isn't rational (i.e. NormalizedVersion + doesn't like it) then you might be able to get an equivalent (or close) + rational version from this function. + + This does a number of simple normalizations to the given string, based + on observation of versions currently in use on PyPI. Given a dump of + those version during PyCon 2009, 4287 of them: + - 2312 (53.93%) match NormalizedVersion without change + with the automatic suggestion + - 3474 (81.04%) match when using this suggestion method + + @param s {str} An irrational version string. + @returns A rational version string, or None, if couldn't determine one. + """ + try: + _normalized_key(s) + return s # already rational + except UnsupportedVersionError: + pass + + rs = s.lower() + + # part of this could use maketrans + for orig, repl in (('-alpha', 'a'), ('-beta', 'b'), ('alpha', 'a'), + ('beta', 'b'), ('rc', 'c'), ('-final', ''), + ('-pre', 'c'), + ('-release', ''), ('.release', ''), ('-stable', ''), + ('+', '.'), ('_', '.'), (' ', ''), ('.final', ''), + ('final', '')): + rs = rs.replace(orig, repl) + + # if something ends with dev or pre, we add a 0 + rs = re.sub(r"pre$", r"pre0", rs) + rs = re.sub(r"dev$", r"dev0", rs) + + # if we have something like "b-2" or "a.2" at the end of the + # version, that is probably beta, alpha, etc + # let's remove the dash or dot + rs = re.sub(r"([abc]|rc)[\-\.](\d+)$", r"\1\2", rs) + + # 1.0-dev-r371 -> 1.0.dev371 + # 0.1-dev-r79 -> 0.1.dev79 + rs = re.sub(r"[\-\.](dev)[\-\.]?r?(\d+)$", r".\1\2", rs) + + # Clean: 2.0.a.3, 2.0.b1, 0.9.0~c1 + rs = re.sub(r"[.~]?([abc])\.?", r"\1", rs) + + # Clean: v0.3, v1.0 + if rs.startswith('v'): + rs = rs[1:] + + # Clean leading '0's on numbers. + #TODO: unintended side-effect on, e.g., "2003.05.09" + # PyPI stats: 77 (~2%) better + rs = re.sub(r"\b0+(\d+)(?!\d)", r"\1", rs) + + # Clean a/b/c with no version. E.g. "1.0a" -> "1.0a0". Setuptools infers + # zero. + # PyPI stats: 245 (7.56%) better + rs = re.sub(r"(\d+[abc])$", r"\g<1>0", rs) + + # the 'dev-rNNN' tag is a dev tag + rs = re.sub(r"\.?(dev-r|dev\.r)\.?(\d+)$", r".dev\2", rs) + + # clean the - when used as a pre delimiter + rs = re.sub(r"-(a|b|c)(\d+)$", r"\1\2", rs) + + # a terminal "dev" or "devel" can be changed into ".dev0" + rs = re.sub(r"[\.\-](dev|devel)$", r".dev0", rs) + + # a terminal "dev" can be changed into ".dev0" + rs = re.sub(r"(?![\.\-])dev$", r".dev0", rs) + + # a terminal "final" or "stable" can be removed + rs = re.sub(r"(final|stable)$", "", rs) + + # The 'r' and the '-' tags are post release tags + # 0.4a1.r10 -> 0.4a1.post10 + # 0.9.33-17222 -> 0.9.33.post17222 + # 0.9.33-r17222 -> 0.9.33.post17222 + rs = re.sub(r"\.?(r|-|-r)\.?(\d+)$", r".post\2", rs) + + # Clean 'r' instead of 'dev' usage: + # 0.9.33+r17222 -> 0.9.33.dev17222 + # 1.0dev123 -> 1.0.dev123 + # 1.0.git123 -> 1.0.dev123 + # 1.0.bzr123 -> 1.0.dev123 + # 0.1a0dev.123 -> 0.1a0.dev123 + # PyPI stats: ~150 (~4%) better + rs = re.sub(r"\.?(dev|git|bzr)\.?(\d+)$", r".dev\2", rs) + + # Clean '.pre' (normalized from '-pre' above) instead of 'c' usage: + # 0.2.pre1 -> 0.2c1 + # 0.2-c1 -> 0.2c1 + # 1.0preview123 -> 1.0c123 + # PyPI stats: ~21 (0.62%) better + rs = re.sub(r"\.?(pre|preview|-c)(\d+)$", r"c\g<2>", rs) + + # Tcl/Tk uses "px" for their post release markers + rs = re.sub(r"p(\d+)$", r".post\1", rs) + + try: + _normalized_key(rs) + except UnsupportedVersionError: + rs = None + return rs + +# +# Legacy version processing (distribute-compatible) +# + +_VERSION_PART = re.compile(r'([a-z]+|\d+|[\.-])', re.I) +_VERSION_REPLACE = { + 'pre': 'c', + 'preview': 'c', + '-': 'final-', + 'rc': 'c', + 'dev': '@', + '': None, + '.': None, +} + + +def _legacy_key(s): + def get_parts(s): + result = [] + for p in _VERSION_PART.split(s.lower()): + p = _VERSION_REPLACE.get(p, p) + if p: + if '0' <= p[:1] <= '9': + p = p.zfill(8) + else: + p = '*' + p + result.append(p) + result.append('*final') + return result + + result = [] + for p in get_parts(s): + if p.startswith('*'): + if p < '*final': + while result and result[-1] == '*final-': + result.pop() + while result and result[-1] == '00000000': + result.pop() + result.append(p) + return tuple(result) + + +class LegacyVersion(Version): + def parse(self, s): + return _legacy_key(s) + + @property + def is_prerelease(self): + result = False + for x in self._parts: + if (isinstance(x, string_types) and x.startswith('*') and + x < '*final'): + result = True + break + return result + + +class LegacyMatcher(Matcher): + version_class = LegacyVersion + + _operators = dict(Matcher._operators) + _operators['~='] = '_match_compatible' + + numeric_re = re.compile(r'^(\d+(\.\d+)*)') + + def _match_compatible(self, version, constraint, prefix): + if version < constraint: + return False + m = self.numeric_re.match(str(constraint)) + if not m: + logger.warning('Cannot compute compatible match for version %s ' + ' and constraint %s', version, constraint) + return True + s = m.groups()[0] + if '.' in s: + s = s.rsplit('.', 1)[0] + return _match_prefix(version, s) + +# +# Semantic versioning +# + +_SEMVER_RE = re.compile(r'^(\d+)\.(\d+)\.(\d+)' + r'(-[a-z0-9]+(\.[a-z0-9-]+)*)?' + r'(\+[a-z0-9]+(\.[a-z0-9-]+)*)?$', re.I) + + +def is_semver(s): + return _SEMVER_RE.match(s) + + +def _semantic_key(s): + def make_tuple(s, absent): + if s is None: + result = (absent,) + else: + parts = s[1:].split('.') + # We can't compare ints and strings on Python 3, so fudge it + # by zero-filling numeric values so simulate a numeric comparison + result = tuple([p.zfill(8) if p.isdigit() else p for p in parts]) + return result + + m = is_semver(s) + if not m: + raise UnsupportedVersionError(s) + groups = m.groups() + major, minor, patch = [int(i) for i in groups[:3]] + # choose the '|' and '*' so that versions sort correctly + pre, build = make_tuple(groups[3], '|'), make_tuple(groups[5], '*') + return (major, minor, patch), pre, build + + +class SemanticVersion(Version): + def parse(self, s): + return _semantic_key(s) + + @property + def is_prerelease(self): + return self._parts[1][0] != '|' + + +class SemanticMatcher(Matcher): + version_class = SemanticVersion + + +class VersionScheme(object): + def __init__(self, key, matcher, suggester=None): + self.key = key + self.matcher = matcher + self.suggester = suggester + + def is_valid_version(self, s): + try: + self.matcher.version_class(s) + result = True + except UnsupportedVersionError: + result = False + return result + + def is_valid_matcher(self, s): + try: + self.matcher(s) + result = True + except UnsupportedVersionError: + result = False + return result + + def is_valid_constraint_list(self, s): + """ + Used for processing some metadata fields + """ + return self.is_valid_matcher('dummy_name (%s)' % s) + + def suggest(self, s): + if self.suggester is None: + result = None + else: + result = self.suggester(s) + return result + +_SCHEMES = { + 'normalized': VersionScheme(_normalized_key, NormalizedMatcher, + _suggest_normalized_version), + 'legacy': VersionScheme(_legacy_key, LegacyMatcher, lambda self, s: s), + 'semantic': VersionScheme(_semantic_key, SemanticMatcher, + _suggest_semantic_version), +} + +_SCHEMES['default'] = _SCHEMES['normalized'] + + +def get_scheme(name): + if name not in _SCHEMES: + raise ValueError('unknown scheme name: %r' % name) + return _SCHEMES[name] diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/w32.exe b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/w32.exe new file mode 100644 index 0000000000000000000000000000000000000000..732215a9d34ccb7b417d637a7646d9b843ecafa8 GIT binary patch literal 89088 zcmeFae|S?>wm*FGqitH!CO`{C3REl(SahnPNDYM`O{q#T7)Xdvz$<hz5gjb&0FD$| zPs=nt#$jgk-tk`NUb*PJIy$3wMg@OiORy=5PEkZ0P^;6cyPm2=Y8#~Xyq~pC(iU~@ z_dd`2ywCg3TS)e=wSTX@_S$Q$y;FJf9>F9Cf*Bu86NCeB>CeT#|L3nblC!40kR?2m z{>H@z3`^g*ct!B1Tk<#8{Ol(+x7?n8>n(TO@iQ_1pEl;#NO$D_^p5<p8@>6r|7^p? zD>5@P3KB)%InlPUc<U{5lb_$uJ2!U@!dIxT&CTYnHuoCtzCL#`-1%8w%`JjkymkHD zpYr&>Cg9H}+(GW%^wV2|ROUbGfyXTfOART)i?<!WISJD#7!6|#8G`TvV*Xu^z32+K zc6>T0?9%;4K}Zn{6fx`yPa}*$9C+R!7zI~72c&$InY+UdMGBkF3c`HyxD3K09`bzW z?_q;rO&5ec#{?noJ4vI19bbHBt~vx^h2FH$V8i|^#EsiUg#JboP3@w-(&Uf&%NK<8 zSJZ5{MZ852W)~s>WeT(LIf&1wKNqULLI)GN_(-E-D)X~ZK=1;t<%*guHMhdg`-(mb zHzDv1KBN9zR9?--O+N$ReOXAr81V9z!X5SJ5`=3<1^<8V|AP@&sr2}Qvp;hQT24iW zOHg|EiZd1ojV;oo#(r^ba2`^8T22{~_UQ@YMZp7O1R*2@?SerFE~TuJB_wDaYC0h8 zfONF1t%{=H`W`bdYp+>YBsg9Ty9ec3iy+O3xa}TIvPK#Q&udyx1MvwG0(#iaGC|N| zJ#3?<Y4YLRkU`54s9BYRjyISA>){9$tW;Y34lPnX=&>D4X~|k7c$TwEfOzs@Yh#Nz z`FV;`(w!E`sKg@`2E}bDY>ku^4XS@tV(WO*<eu67;0Clk;vRHp!Qf<+5w0B!*Y>g? zYH=KK#%%Yu1~&m>IlB^#2^syGG|2AB1(}4aOcaC%!)}%`I7AIC2(Ro3yW`GSttng^ z_xb=ECor!L{-PNO>_ulJ3%fm=O0X!s%)$GZ?~I94l-^KEAX0n$?4wGpr7&i4#~)OB zQD%2NrWUKtZuYT1Vnu}AeF`cSgx>Rkk@}Lg{WltgT76VeA2aic`cTnpXrt2WXmJkM z9%u<Rp-*9{$HQ)>Xm?McyDyZ28Ux7mpxy?mnmvzMMr-85vkRrJLaDRx>|I7je+cM+ zj{RJ(3Vrgke;W@#D!y%U%fQLtlPKTAzWtVuOQdXpwsy6eRjt^cZ%0D4bF7$F;f!th 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ð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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/w64.exe b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/w64.exe new file mode 100644 index 0000000000000000000000000000000000000000..c41bd0a011fd760ce20ba795d9e535e0d2c39876 GIT binary patch literal 99328 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 B=L-M; literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/wheel.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/wheel.py new file mode 100644 index 00000000..b04bfaef --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distlib/wheel.py @@ -0,0 +1,988 @@ +# -*- 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 base64 +import codecs +import datetime +import distutils.util +from email import message_from_file +import hashlib +import imp +import json +import logging +import os +import posixpath +import re +import shutil +import sys +import tempfile +import zipfile + +from . import __version__, DistlibException +from .compat import sysconfig, ZipFile, fsdecode, text_type, filter +from .database import InstalledDistribution +from .metadata import Metadata, METADATA_FILENAME, WHEEL_METADATA_FILENAME +from .util import (FileOperator, convert_path, CSVReader, CSVWriter, Cache, + cached_property, get_cache_base, read_exports, tempdir) +from .version import NormalizedVersion, UnsupportedVersionError + +logger = logging.getLogger(__name__) + +cache = None # created when needed + +if hasattr(sys, 'pypy_version_info'): # pragma: no cover + IMP_PREFIX = 'pp' +elif sys.platform.startswith('java'): # pragma: no cover + IMP_PREFIX = 'jy' +elif sys.platform == 'cli': # pragma: no cover + IMP_PREFIX = 'ip' +else: + IMP_PREFIX = 'cp' + +VER_SUFFIX = sysconfig.get_config_var('py_version_nodot') +if not VER_SUFFIX: # pragma: no cover + VER_SUFFIX = '%s%s' % sys.version_info[:2] +PYVER = 'py' + VER_SUFFIX +IMPVER = IMP_PREFIX + VER_SUFFIX + +ARCH = distutils.util.get_platform().replace('-', '_').replace('.', '_') + +ABI = sysconfig.get_config_var('SOABI') +if ABI and ABI.startswith('cpython-'): + ABI = ABI.replace('cpython-', 'cp') +else: + def _derive_abi(): + parts = ['cp', VER_SUFFIX] + if sysconfig.get_config_var('Py_DEBUG'): + parts.append('d') + if sysconfig.get_config_var('WITH_PYMALLOC'): + parts.append('m') + if sysconfig.get_config_var('Py_UNICODE_SIZE') == 4: + parts.append('u') + return ''.join(parts) + ABI = _derive_abi() + del _derive_abi + +FILENAME_RE = re.compile(r''' +(?P<nm>[^-]+) +-(?P<vn>\d+[^-]*) +(-(?P<bn>\d+[^-]*))? +-(?P<py>\w+\d+(\.\w+\d+)*) +-(?P<bi>\w+) +-(?P<ar>\w+(\.\w+)*) +\.whl$ +''', re.IGNORECASE | re.VERBOSE) + +NAME_VERSION_RE = re.compile(r''' +(?P<nm>[^-]+) +-(?P<vn>\d+[^-]*) +(-(?P<bn>\d+[^-]*))?$ +''', re.IGNORECASE | re.VERBOSE) + +SHEBANG_RE = re.compile(br'\s*#![^\r\n]*') +SHEBANG_DETAIL_RE = re.compile(br'^(\s*#!("[^"]+"|\S+))\s+(.*)$') +SHEBANG_PYTHON = b'#!python' +SHEBANG_PYTHONW = b'#!pythonw' + +if os.sep == '/': + to_posix = lambda o: o +else: + to_posix = lambda o: o.replace(os.sep, '/') + + +class Mounter(object): + def __init__(self): + self.impure_wheels = {} + self.libs = {} + + def add(self, pathname, extensions): + self.impure_wheels[pathname] = extensions + self.libs.update(extensions) + + def remove(self, pathname): + extensions = self.impure_wheels.pop(pathname) + for k, v in extensions: + if k in self.libs: + del self.libs[k] + + def find_module(self, fullname, path=None): + if fullname in self.libs: + result = self + else: + result = None + return result + + def load_module(self, fullname): + if fullname in sys.modules: + result = sys.modules[fullname] + else: + if fullname not in self.libs: + raise ImportError('unable to find extension for %s' % fullname) + result = imp.load_dynamic(fullname, self.libs[fullname]) + result.__loader__ = self + parts = fullname.rsplit('.', 1) + if len(parts) > 1: + result.__package__ = parts[0] + return result + +_hook = Mounter() + + +class Wheel(object): + """ + Class to build and install from Wheel files (PEP 427). + """ + + wheel_version = (1, 1) + hash_kind = 'sha256' + + def __init__(self, filename=None, sign=False, verify=False): + """ + Initialise an instance using a (valid) filename. + """ + self.sign = sign + self.should_verify = verify + self.buildver = '' + self.pyver = [PYVER] + self.abi = ['none'] + self.arch = ['any'] + self.dirname = os.getcwd() + if filename is None: + self.name = 'dummy' + self.version = '0.1' + self._filename = self.filename + else: + m = NAME_VERSION_RE.match(filename) + if m: + info = m.groupdict('') + self.name = info['nm'] + # Reinstate the local version separator + self.version = info['vn'].replace('_', '-') + self.buildver = info['bn'] + self._filename = self.filename + else: + dirname, filename = os.path.split(filename) + m = FILENAME_RE.match(filename) + if not m: + raise DistlibException('Invalid name or ' + 'filename: %r' % filename) + if dirname: + self.dirname = os.path.abspath(dirname) + self._filename = filename + info = m.groupdict('') + self.name = info['nm'] + self.version = info['vn'] + self.buildver = info['bn'] + self.pyver = info['py'].split('.') + self.abi = info['bi'].split('.') + self.arch = info['ar'].split('.') + + @property + def filename(self): + """ + Build and return a filename from the various components. + """ + if self.buildver: + buildver = '-' + self.buildver + else: + buildver = '' + pyver = '.'.join(self.pyver) + abi = '.'.join(self.abi) + arch = '.'.join(self.arch) + # replace - with _ as a local version separator + version = self.version.replace('-', '_') + return '%s-%s%s-%s-%s-%s.whl' % (self.name, version, buildver, + pyver, abi, arch) + + @property + def exists(self): + path = os.path.join(self.dirname, self.filename) + return os.path.isfile(path) + + @property + def tags(self): + for pyver in self.pyver: + for abi in self.abi: + for arch in self.arch: + yield pyver, abi, arch + + @cached_property + def metadata(self): + pathname = os.path.join(self.dirname, self.filename) + name_ver = '%s-%s' % (self.name, self.version) + info_dir = '%s.dist-info' % name_ver + wrapper = codecs.getreader('utf-8') + with ZipFile(pathname, 'r') as zf: + wheel_metadata = self.get_wheel_metadata(zf) + wv = wheel_metadata['Wheel-Version'].split('.', 1) + file_version = tuple([int(i) for i in wv]) + if file_version < (1, 1): + fns = [WHEEL_METADATA_FILENAME, METADATA_FILENAME, 'METADATA'] + else: + fns = [WHEEL_METADATA_FILENAME, METADATA_FILENAME] + result = None + for fn in fns: + try: + metadata_filename = posixpath.join(info_dir, fn) + with zf.open(metadata_filename) as bf: + wf = wrapper(bf) + result = Metadata(fileobj=wf) + if result: + break + except KeyError: + pass + if not result: + raise ValueError('Invalid wheel, because metadata is ' + 'missing: looked in %s' % ', '.join(fns)) + return result + + def get_wheel_metadata(self, zf): + name_ver = '%s-%s' % (self.name, self.version) + info_dir = '%s.dist-info' % name_ver + metadata_filename = posixpath.join(info_dir, 'WHEEL') + with zf.open(metadata_filename) as bf: + wf = codecs.getreader('utf-8')(bf) + message = message_from_file(wf) + return dict(message) + + @cached_property + def info(self): + pathname = os.path.join(self.dirname, self.filename) + with ZipFile(pathname, 'r') as zf: + result = self.get_wheel_metadata(zf) + return result + + def process_shebang(self, data): + m = SHEBANG_RE.match(data) + if m: + end = m.end() + shebang, data_after_shebang = data[:end], data[end:] + # Preserve any arguments after the interpreter + if b'pythonw' in shebang.lower(): + shebang_python = SHEBANG_PYTHONW + else: + shebang_python = SHEBANG_PYTHON + m = SHEBANG_DETAIL_RE.match(shebang) + if m: + args = b' ' + m.groups()[-1] + else: + args = b'' + shebang = shebang_python + args + data = shebang + data_after_shebang + else: + cr = data.find(b'\r') + lf = data.find(b'\n') + if cr < 0 or cr > lf: + term = b'\n' + else: + if data[cr:cr + 2] == b'\r\n': + term = b'\r\n' + else: + term = b'\r' + data = SHEBANG_PYTHON + term + data + return data + + def get_hash(self, data, hash_kind=None): + if hash_kind is None: + hash_kind = self.hash_kind + try: + hasher = getattr(hashlib, hash_kind) + except AttributeError: + raise DistlibException('Unsupported hash algorithm: %r' % hash_kind) + result = hasher(data).digest() + result = base64.urlsafe_b64encode(result).rstrip(b'=').decode('ascii') + return hash_kind, result + + def write_record(self, records, record_path, base): + records = list(records) # make a copy for sorting + p = to_posix(os.path.relpath(record_path, base)) + records.append((p, '', '')) + records.sort() + with CSVWriter(record_path) as writer: + for row in records: + writer.writerow(row) + + def write_records(self, info, libdir, archive_paths): + records = [] + distinfo, info_dir = info + hasher = getattr(hashlib, self.hash_kind) + for ap, p in archive_paths: + with open(p, 'rb') as f: + data = f.read() + digest = '%s=%s' % self.get_hash(data) + size = os.path.getsize(p) + records.append((ap, digest, size)) + + p = os.path.join(distinfo, 'RECORD') + self.write_record(records, p, libdir) + ap = to_posix(os.path.join(info_dir, 'RECORD')) + archive_paths.append((ap, p)) + + def build_zip(self, pathname, archive_paths): + with ZipFile(pathname, 'w', zipfile.ZIP_DEFLATED) as zf: + for ap, p in archive_paths: + logger.debug('Wrote %s to %s in wheel', p, ap) + zf.write(p, ap) + + def build(self, paths, tags=None, wheel_version=None): + """ + Build a wheel from files in specified paths, and use any specified tags + when determining the name of the wheel. + """ + if tags is None: + tags = {} + + libkey = list(filter(lambda o: o in paths, ('purelib', 'platlib')))[0] + if libkey == 'platlib': + is_pure = 'false' + default_pyver = [IMPVER] + default_abi = [ABI] + default_arch = [ARCH] + else: + is_pure = 'true' + default_pyver = [PYVER] + default_abi = ['none'] + default_arch = ['any'] + + self.pyver = tags.get('pyver', default_pyver) + self.abi = tags.get('abi', default_abi) + self.arch = tags.get('arch', default_arch) + + libdir = paths[libkey] + + name_ver = '%s-%s' % (self.name, self.version) + data_dir = '%s.data' % name_ver + info_dir = '%s.dist-info' % name_ver + + archive_paths = [] + + # First, stuff which is not in site-packages + for key in ('data', 'headers', 'scripts'): + if key not in paths: + continue + path = paths[key] + if os.path.isdir(path): + for root, dirs, files in os.walk(path): + for fn in files: + p = fsdecode(os.path.join(root, fn)) + rp = os.path.relpath(p, path) + ap = to_posix(os.path.join(data_dir, key, rp)) + archive_paths.append((ap, p)) + if key == 'scripts' and not p.endswith('.exe'): + with open(p, 'rb') as f: + data = f.read() + data = self.process_shebang(data) + with open(p, 'wb') as f: + f.write(data) + + # Now, stuff which is in site-packages, other than the + # distinfo stuff. + path = libdir + distinfo = None + for root, dirs, files in os.walk(path): + if root == path: + # At the top level only, save distinfo for later + # and skip it for now + for i, dn in enumerate(dirs): + dn = fsdecode(dn) + if dn.endswith('.dist-info'): + distinfo = os.path.join(root, dn) + del dirs[i] + break + assert distinfo, '.dist-info directory expected, not found' + + for fn in files: + # comment out next suite to leave .pyc files in + if fsdecode(fn).endswith(('.pyc', '.pyo')): + continue + p = os.path.join(root, fn) + rp = to_posix(os.path.relpath(p, path)) + archive_paths.append((rp, p)) + + # Now distinfo. Assumed to be flat, i.e. os.listdir is enough. + files = os.listdir(distinfo) + for fn in files: + if fn not in ('RECORD', 'INSTALLER', 'SHARED', 'WHEEL'): + p = fsdecode(os.path.join(distinfo, fn)) + ap = to_posix(os.path.join(info_dir, fn)) + archive_paths.append((ap, p)) + + wheel_metadata = [ + 'Wheel-Version: %d.%d' % (wheel_version or self.wheel_version), + 'Generator: distlib %s' % __version__, + 'Root-Is-Purelib: %s' % is_pure, + ] + for pyver, abi, arch in self.tags: + wheel_metadata.append('Tag: %s-%s-%s' % (pyver, abi, arch)) + p = os.path.join(distinfo, 'WHEEL') + with open(p, 'w') as f: + f.write('\n'.join(wheel_metadata)) + ap = to_posix(os.path.join(info_dir, 'WHEEL')) + archive_paths.append((ap, p)) + + # Now, at last, RECORD. + # Paths in here are archive paths - nothing else makes sense. + self.write_records((distinfo, info_dir), libdir, archive_paths) + # Now, ready to build the zip file + pathname = os.path.join(self.dirname, self.filename) + self.build_zip(pathname, archive_paths) + return pathname + + def install(self, paths, maker, **kwargs): + """ + Install a wheel to the specified paths. If kwarg ``warner`` is + specified, it should be a callable, which will be called with two + tuples indicating the wheel version of this software and the wheel + version in the file, if there is a discrepancy in the versions. + This can be used to issue any warnings to raise any exceptions. + If kwarg ``lib_only`` is True, only the purelib/platlib files are + installed, and the headers, scripts, data and dist-info metadata are + not written. If kwarg ``bytecode_hashed_invalidation`` is True, written + bytecode will try to use file-hash based invalidation (PEP-552) on + supported interpreter versions (CPython 2.7+). + + The return value is a :class:`InstalledDistribution` instance unless + ``options.lib_only`` is True, in which case the return value is ``None``. + """ + + dry_run = maker.dry_run + warner = kwargs.get('warner') + lib_only = kwargs.get('lib_only', False) + bc_hashed_invalidation = kwargs.get('bytecode_hashed_invalidation', False) + + pathname = os.path.join(self.dirname, self.filename) + name_ver = '%s-%s' % (self.name, self.version) + data_dir = '%s.data' % name_ver + info_dir = '%s.dist-info' % name_ver + + metadata_name = posixpath.join(info_dir, METADATA_FILENAME) + wheel_metadata_name = posixpath.join(info_dir, 'WHEEL') + record_name = posixpath.join(info_dir, 'RECORD') + + wrapper = codecs.getreader('utf-8') + + with ZipFile(pathname, 'r') as zf: + with zf.open(wheel_metadata_name) as bwf: + wf = wrapper(bwf) + message = message_from_file(wf) + wv = message['Wheel-Version'].split('.', 1) + file_version = tuple([int(i) for i in wv]) + if (file_version != self.wheel_version) and warner: + warner(self.wheel_version, file_version) + + if message['Root-Is-Purelib'] == 'true': + libdir = paths['purelib'] + else: + libdir = paths['platlib'] + + records = {} + with zf.open(record_name) as bf: + with CSVReader(stream=bf) as reader: + for row in reader: + p = row[0] + records[p] = row + + data_pfx = posixpath.join(data_dir, '') + info_pfx = posixpath.join(info_dir, '') + script_pfx = posixpath.join(data_dir, 'scripts', '') + + # make a new instance rather than a copy of maker's, + # as we mutate it + fileop = FileOperator(dry_run=dry_run) + fileop.record = True # so we can rollback if needed + + bc = not sys.dont_write_bytecode # Double negatives. Lovely! + + outfiles = [] # for RECORD writing + + # for script copying/shebang processing + workdir = tempfile.mkdtemp() + # set target dir later + # we default add_launchers to False, as the + # Python Launcher should be used instead + maker.source_dir = workdir + maker.target_dir = None + try: + for zinfo in zf.infolist(): + arcname = zinfo.filename + if isinstance(arcname, text_type): + u_arcname = arcname + else: + u_arcname = arcname.decode('utf-8') + # The signature file won't be in RECORD, + # and we don't currently don't do anything with it + if u_arcname.endswith('/RECORD.jws'): + continue + row = records[u_arcname] + if row[2] and str(zinfo.file_size) != row[2]: + raise DistlibException('size mismatch for ' + '%s' % u_arcname) + if row[1]: + kind, value = row[1].split('=', 1) + with zf.open(arcname) as bf: + data = bf.read() + _, digest = self.get_hash(data, kind) + if digest != value: + raise DistlibException('digest mismatch for ' + '%s' % arcname) + + if lib_only and u_arcname.startswith((info_pfx, data_pfx)): + logger.debug('lib_only: skipping %s', u_arcname) + continue + is_script = (u_arcname.startswith(script_pfx) + and not u_arcname.endswith('.exe')) + + if u_arcname.startswith(data_pfx): + _, where, rp = u_arcname.split('/', 2) + outfile = os.path.join(paths[where], convert_path(rp)) + else: + # meant for site-packages. + if u_arcname in (wheel_metadata_name, record_name): + continue + outfile = os.path.join(libdir, convert_path(u_arcname)) + if not is_script: + with zf.open(arcname) as bf: + fileop.copy_stream(bf, outfile) + outfiles.append(outfile) + # Double check the digest of the written file + if not dry_run and row[1]: + with open(outfile, 'rb') as bf: + data = bf.read() + _, newdigest = self.get_hash(data, kind) + if newdigest != digest: + raise DistlibException('digest mismatch ' + 'on write for ' + '%s' % outfile) + if bc and outfile.endswith('.py'): + try: + pyc = fileop.byte_compile(outfile, + hashed_invalidation=bc_hashed_invalidation) + outfiles.append(pyc) + except Exception: + # Don't give up if byte-compilation fails, + # but log it and perhaps warn the user + logger.warning('Byte-compilation failed', + exc_info=True) + else: + fn = os.path.basename(convert_path(arcname)) + workname = os.path.join(workdir, fn) + with zf.open(arcname) as bf: + fileop.copy_stream(bf, workname) + + dn, fn = os.path.split(outfile) + maker.target_dir = dn + filenames = maker.make(fn) + fileop.set_executable_mode(filenames) + outfiles.extend(filenames) + + if lib_only: + logger.debug('lib_only: returning None') + dist = None + else: + # Generate scripts + + # Try to get pydist.json so we can see if there are + # any commands to generate. If this fails (e.g. because + # of a legacy wheel), log a warning but don't give up. + commands = None + file_version = self.info['Wheel-Version'] + if file_version == '1.0': + # Use legacy info + ep = posixpath.join(info_dir, 'entry_points.txt') + try: + with zf.open(ep) as bwf: + epdata = read_exports(bwf) + commands = {} + for key in ('console', 'gui'): + k = '%s_scripts' % key + if k in epdata: + commands['wrap_%s' % key] = d = {} + for v in epdata[k].values(): + s = '%s:%s' % (v.prefix, v.suffix) + if v.flags: + s += ' %s' % v.flags + d[v.name] = s + except Exception: + logger.warning('Unable to read legacy script ' + 'metadata, so cannot generate ' + 'scripts') + else: + try: + with zf.open(metadata_name) as bwf: + wf = wrapper(bwf) + commands = json.load(wf).get('extensions') + if commands: + commands = commands.get('python.commands') + except Exception: + logger.warning('Unable to read JSON metadata, so ' + 'cannot generate scripts') + if commands: + console_scripts = commands.get('wrap_console', {}) + gui_scripts = commands.get('wrap_gui', {}) + if console_scripts or gui_scripts: + script_dir = paths.get('scripts', '') + if not os.path.isdir(script_dir): + raise ValueError('Valid script path not ' + 'specified') + maker.target_dir = script_dir + for k, v in console_scripts.items(): + script = '%s = %s' % (k, v) + filenames = maker.make(script) + fileop.set_executable_mode(filenames) + + if gui_scripts: + options = {'gui': True } + for k, v in gui_scripts.items(): + script = '%s = %s' % (k, v) + filenames = maker.make(script, options) + fileop.set_executable_mode(filenames) + + p = os.path.join(libdir, info_dir) + dist = InstalledDistribution(p) + + # Write SHARED + paths = dict(paths) # don't change passed in dict + del paths['purelib'] + del paths['platlib'] + paths['lib'] = libdir + p = dist.write_shared_locations(paths, dry_run) + if p: + outfiles.append(p) + + # Write RECORD + dist.write_installed_files(outfiles, paths['prefix'], + dry_run) + return dist + except Exception: # pragma: no cover + logger.exception('installation failed.') + fileop.rollback() + raise + finally: + shutil.rmtree(workdir) + + def _get_dylib_cache(self): + global cache + if cache is None: + # Use native string to avoid issues on 2.x: see Python #20140. + base = os.path.join(get_cache_base(), str('dylib-cache'), + sys.version[:3]) + cache = Cache(base) + return cache + + def _get_extensions(self): + pathname = os.path.join(self.dirname, self.filename) + name_ver = '%s-%s' % (self.name, self.version) + info_dir = '%s.dist-info' % name_ver + arcname = posixpath.join(info_dir, 'EXTENSIONS') + wrapper = codecs.getreader('utf-8') + result = [] + with ZipFile(pathname, 'r') as zf: + try: + with zf.open(arcname) as bf: + wf = wrapper(bf) + extensions = json.load(wf) + cache = self._get_dylib_cache() + prefix = cache.prefix_to_dir(pathname) + cache_base = os.path.join(cache.base, prefix) + if not os.path.isdir(cache_base): + os.makedirs(cache_base) + for name, relpath in extensions.items(): + dest = os.path.join(cache_base, convert_path(relpath)) + if not os.path.exists(dest): + extract = True + else: + file_time = os.stat(dest).st_mtime + file_time = datetime.datetime.fromtimestamp(file_time) + info = zf.getinfo(relpath) + wheel_time = datetime.datetime(*info.date_time) + extract = wheel_time > file_time + if extract: + zf.extract(relpath, cache_base) + result.append((name, dest)) + except KeyError: + pass + return result + + def is_compatible(self): + """ + Determine if a wheel is compatible with the running system. + """ + return is_compatible(self) + + def is_mountable(self): + """ + Determine if a wheel is asserted as mountable by its metadata. + """ + return True # for now - metadata details TBD + + def mount(self, append=False): + pathname = os.path.abspath(os.path.join(self.dirname, self.filename)) + if not self.is_compatible(): + msg = 'Wheel %s not compatible with this Python.' % pathname + raise DistlibException(msg) + if not self.is_mountable(): + msg = 'Wheel %s is marked as not mountable.' % pathname + raise DistlibException(msg) + if pathname in sys.path: + logger.debug('%s already in path', pathname) + else: + if append: + sys.path.append(pathname) + else: + sys.path.insert(0, pathname) + extensions = self._get_extensions() + if extensions: + if _hook not in sys.meta_path: + sys.meta_path.append(_hook) + _hook.add(pathname, extensions) + + def unmount(self): + pathname = os.path.abspath(os.path.join(self.dirname, self.filename)) + if pathname not in sys.path: + logger.debug('%s not in path', pathname) + else: + sys.path.remove(pathname) + if pathname in _hook.impure_wheels: + _hook.remove(pathname) + if not _hook.impure_wheels: + if _hook in sys.meta_path: + sys.meta_path.remove(_hook) + + def verify(self): + pathname = os.path.join(self.dirname, self.filename) + name_ver = '%s-%s' % (self.name, self.version) + data_dir = '%s.data' % name_ver + info_dir = '%s.dist-info' % name_ver + + metadata_name = posixpath.join(info_dir, METADATA_FILENAME) + wheel_metadata_name = posixpath.join(info_dir, 'WHEEL') + record_name = posixpath.join(info_dir, 'RECORD') + + wrapper = codecs.getreader('utf-8') + + with ZipFile(pathname, 'r') as zf: + with zf.open(wheel_metadata_name) as bwf: + wf = wrapper(bwf) + message = message_from_file(wf) + wv = message['Wheel-Version'].split('.', 1) + file_version = tuple([int(i) for i in wv]) + # TODO version verification + + records = {} + with zf.open(record_name) as bf: + with CSVReader(stream=bf) as reader: + for row in reader: + p = row[0] + records[p] = row + + for zinfo in zf.infolist(): + arcname = zinfo.filename + if isinstance(arcname, text_type): + u_arcname = arcname + else: + u_arcname = arcname.decode('utf-8') + if '..' in u_arcname: + raise DistlibException('invalid entry in ' + 'wheel: %r' % u_arcname) + + # The signature file won't be in RECORD, + # and we don't currently don't do anything with it + if u_arcname.endswith('/RECORD.jws'): + continue + row = records[u_arcname] + if row[2] and str(zinfo.file_size) != row[2]: + raise DistlibException('size mismatch for ' + '%s' % u_arcname) + if row[1]: + kind, value = row[1].split('=', 1) + with zf.open(arcname) as bf: + data = bf.read() + _, digest = self.get_hash(data, kind) + if digest != value: + raise DistlibException('digest mismatch for ' + '%s' % arcname) + + def update(self, modifier, dest_dir=None, **kwargs): + """ + Update the contents of a wheel in a generic way. The modifier should + be a callable which expects a dictionary argument: its keys are + archive-entry paths, and its values are absolute filesystem paths + where the contents the corresponding archive entries can be found. The + modifier is free to change the contents of the files pointed to, add + new entries and remove entries, before returning. This method will + extract the entire contents of the wheel to a temporary location, call + the modifier, and then use the passed (and possibly updated) + dictionary to write a new wheel. If ``dest_dir`` is specified, the new + wheel is written there -- otherwise, the original wheel is overwritten. + + The modifier should return True if it updated the wheel, else False. + This method returns the same value the modifier returns. + """ + + def get_version(path_map, info_dir): + version = path = None + key = '%s/%s' % (info_dir, METADATA_FILENAME) + if key not in path_map: + key = '%s/PKG-INFO' % info_dir + if key in path_map: + path = path_map[key] + version = Metadata(path=path).version + return version, path + + def update_version(version, path): + updated = None + try: + v = NormalizedVersion(version) + i = version.find('-') + if i < 0: + updated = '%s+1' % version + else: + parts = [int(s) for s in version[i + 1:].split('.')] + parts[-1] += 1 + updated = '%s+%s' % (version[:i], + '.'.join(str(i) for i in parts)) + except UnsupportedVersionError: + logger.debug('Cannot update non-compliant (PEP-440) ' + 'version %r', version) + if updated: + md = Metadata(path=path) + md.version = updated + legacy = not path.endswith(METADATA_FILENAME) + md.write(path=path, legacy=legacy) + logger.debug('Version updated from %r to %r', version, + updated) + + pathname = os.path.join(self.dirname, self.filename) + name_ver = '%s-%s' % (self.name, self.version) + info_dir = '%s.dist-info' % name_ver + record_name = posixpath.join(info_dir, 'RECORD') + with tempdir() as workdir: + with ZipFile(pathname, 'r') as zf: + path_map = {} + for zinfo in zf.infolist(): + arcname = zinfo.filename + if isinstance(arcname, text_type): + u_arcname = arcname + else: + u_arcname = arcname.decode('utf-8') + if u_arcname == record_name: + continue + if '..' in u_arcname: + raise DistlibException('invalid entry in ' + 'wheel: %r' % u_arcname) + zf.extract(zinfo, workdir) + path = os.path.join(workdir, convert_path(u_arcname)) + path_map[u_arcname] = path + + # Remember the version. + original_version, _ = get_version(path_map, info_dir) + # Files extracted. Call the modifier. + modified = modifier(path_map, **kwargs) + if modified: + # Something changed - need to build a new wheel. + current_version, path = get_version(path_map, info_dir) + if current_version and (current_version == original_version): + # Add or update local version to signify changes. + update_version(current_version, path) + # Decide where the new wheel goes. + if dest_dir is None: + fd, newpath = tempfile.mkstemp(suffix='.whl', + prefix='wheel-update-', + dir=workdir) + os.close(fd) + else: + if not os.path.isdir(dest_dir): + raise DistlibException('Not a directory: %r' % dest_dir) + newpath = os.path.join(dest_dir, self.filename) + archive_paths = list(path_map.items()) + distinfo = os.path.join(workdir, info_dir) + info = distinfo, info_dir + self.write_records(info, workdir, archive_paths) + self.build_zip(newpath, archive_paths) + if dest_dir is None: + shutil.copyfile(newpath, pathname) + return modified + +def compatible_tags(): + """ + Return (pyver, abi, arch) tuples compatible with this Python. + """ + versions = [VER_SUFFIX] + major = VER_SUFFIX[0] + for minor in range(sys.version_info[1] - 1, - 1, -1): + versions.append(''.join([major, str(minor)])) + + abis = [] + for suffix, _, _ in imp.get_suffixes(): + if suffix.startswith('.abi'): + abis.append(suffix.split('.', 2)[1]) + abis.sort() + if ABI != 'none': + abis.insert(0, ABI) + abis.append('none') + result = [] + + arches = [ARCH] + if sys.platform == 'darwin': + m = re.match(r'(\w+)_(\d+)_(\d+)_(\w+)$', ARCH) + if m: + name, major, minor, arch = m.groups() + minor = int(minor) + matches = [arch] + if arch in ('i386', 'ppc'): + matches.append('fat') + if arch in ('i386', 'ppc', 'x86_64'): + matches.append('fat3') + if arch in ('ppc64', 'x86_64'): + matches.append('fat64') + if arch in ('i386', 'x86_64'): + matches.append('intel') + if arch in ('i386', 'x86_64', 'intel', 'ppc', 'ppc64'): + matches.append('universal') + while minor >= 0: + for match in matches: + s = '%s_%s_%s_%s' % (name, major, minor, match) + if s != ARCH: # already there + arches.append(s) + minor -= 1 + + # Most specific - our Python version, ABI and arch + for abi in abis: + for arch in arches: + result.append((''.join((IMP_PREFIX, versions[0])), abi, arch)) + + # where no ABI / arch dependency, but IMP_PREFIX dependency + for i, version in enumerate(versions): + result.append((''.join((IMP_PREFIX, version)), 'none', 'any')) + if i == 0: + result.append((''.join((IMP_PREFIX, version[0])), 'none', 'any')) + + # no IMP_PREFIX, ABI or arch dependency + for i, version in enumerate(versions): + result.append((''.join(('py', version)), 'none', 'any')) + if i == 0: + result.append((''.join(('py', version[0])), 'none', 'any')) + return set(result) + + +COMPATIBLE_TAGS = compatible_tags() + +del compatible_tags + + +def is_compatible(wheel, tags=None): + if not isinstance(wheel, Wheel): + wheel = Wheel(wheel) # assume it's a filename + result = False + if tags is None: + tags = COMPATIBLE_TAGS + for ver, abi, arch in tags: + if ver in wheel.pyver and abi in wheel.abi and arch in wheel.arch: + result = True + break + return result diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distro.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distro.py new file mode 100644 index 00000000..33061633 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/distro.py @@ -0,0 +1,1216 @@ +# Copyright 2015,2016,2017 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 will remove it altogether. +Its predecessor function :py:func:`platform.dist` was already +deprecated since Python 2.6 and will also be 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 os +import re +import sys +import json +import shlex +import logging +import argparse +import subprocess + + +_UNIXCONFDIR = os.environ.get('UNIXCONFDIR', '/etc') +_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 Enterprise Linux +} + +#: 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 = { + 'enterpriseenterprise': 'oracle', # Oracle Enterprise Linux + 'redhatenterpriseworkstation': 'rhel', # RHEL 6, 7 Workstation + 'redhatenterpriseserver': 'rhel', # RHEL 6, 7 Server +} + +#: 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 ignored when searching for distro release file +_DISTRO_RELEASE_IGNORE_BASENAMES = ( + 'debian_version', + 'lsb-release', + 'oem-release', + _OS_RELEASE_BASENAME, + 'system-release' +) + + +def linux_distribution(full_distribution_name=True): + """ + 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 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. + """ + return _distro.linux_distribution(full_distribution_name) + + +def id(): + """ + 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 + "amazon" Amazon Linux + "arch" Arch Linux + "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 + ============== ========================================= + + 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=False): + """ + 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=False, best=False): + """ + 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). + + 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=False): + """ + 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=False): + """ + 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=False): + """ + 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=False): + """ + 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(): + """ + 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(): + """ + 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=False, best=False): + """ + 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(): + """ + 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(): + """ + 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(): + """ + 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(): + """ + 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): + """ + 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): + """ + 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): + """ + 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): + """ + 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) + + +class cached_property(object): + """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): + self._fname = f.__name__ + self._f = f + + def __get__(self, obj, owner): + assert obj is not None, 'call {} on an instance'.format(self._fname) + ret = obj.__dict__[self._fname] = self._f(obj) + return ret + + +class LinuxDistribution(object): + """ + 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=True, + os_release_file='', + distro_release_file='', + include_uname=True): + """ + 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_name`` (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. + + 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. + + Raises: + + * :py:exc:`IOError`: Some I/O issue with an os-release file or distro + release file. + + * :py:exc:`subprocess.CalledProcessError`: The lsb_release command had + some issue (other than not being available in the program execution + path). + + * :py:exc:`UnicodeError`: A data source has unexpected characters or + uses an unexpected encoding. + """ + self.os_release_file = os_release_file or \ + os.path.join(_UNIXCONFDIR, _OS_RELEASE_BASENAME) + self.distro_release_file = distro_release_file or '' # updated later + self.include_lsb = include_lsb + self.include_uname = include_uname + + def __repr__(self): + """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}, " \ + "_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})".format( + self=self) + + def linux_distribution(self, full_distribution_name=True): + """ + 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.codename() + ) + + def id(self): + """Return the distro ID of the OS distribution, as a string. + + For details, see :func:`distro.id`. + """ + def normalize(distro_id, table): + 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=False): + """ + 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 = name + ' ' + version + return name or '' + + def version(self, pretty=False, best=False): + """ + 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') + ] + 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 = u'{0} ({1})'.format(version, self.codename()) + return version + + def version_parts(self, best=False): + """ + 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=False): + """ + 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=False): + """ + 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=False): + """ + Return the build number of the current distribution. + + For details, see :func:`distro.build_number`. + """ + return self.version_parts(best)[2] + + def like(self): + """ + 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): + """ + 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=False, best=False): + """ + Return certain machine-readable information about the OS + distribution. + + For details, see :func:`distro.info`. + """ + return dict( + id=self.id(), + version=self.version(pretty, best), + version_parts=dict( + 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): + """ + 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): + """ + 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): + """ + 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): + """ + 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 os_release_attr(self, attribute): + """ + 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): + """ + 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): + """ + 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): + """ + Return a single named information item from the uname command + output data source of the OS distribution. + + For details, see :func:`distro.uname_release_attr`. + """ + return self._uname_info.get(attribute, '') + + @cached_property + def _os_release_info(self): + """ + 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) as release_file: + return self._parse_os_release_content(release_file) + return {} + + @staticmethod + def _parse_os_release_content(lines): + """ + 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 + + # The shlex module defines its `wordchars` variable using literals, + # making it dependent on the encoding of the Python source file. + # In Python 2.6 and 2.7, the shlex source file is encoded in + # 'iso-8859-1', and the `wordchars` variable is defined as a byte + # string. This causes a UnicodeDecodeError to be raised when the + # parsed content is a unicode object. The following fix resolves that + # (... but it should be fixed in shlex...): + if sys.version_info[0] == 2 and isinstance(lexer.wordchars, bytes): + lexer.wordchars = lexer.wordchars.decode('iso-8859-1') + + 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) + if '=' in token: + k, v = token.split('=', 1) + if isinstance(v, bytes): + v = v.decode('utf-8') + props[k.lower()] = v + else: + # Ignore any tokens that are not variable assignments + pass + + 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'] + elif 'version' in props: + # If there is no version_codename, parse it from the version + codename = re.search(r'(\(\D+\))|,(\s+)?\D+', props['version']) + if codename: + codename = codename.group() + codename = codename.strip('()') + codename = codename.strip(',') + codename = codename.strip() + # codename appears within paranthese. + props['codename'] = codename + + return props + + @cached_property + def _lsb_release_info(self): + """ + Get the information items from the lsb_release command output. + + Returns: + A dictionary containing all information items. + """ + if not self.include_lsb: + return {} + with open(os.devnull, 'w') as devnull: + try: + cmd = ('lsb_release', '-a') + stdout = subprocess.check_output(cmd, stderr=devnull) + except OSError: # Command not found + return {} + content = stdout.decode(sys.getfilesystemencoding()).splitlines() + return self._parse_lsb_release_content(content) + + @staticmethod + def _parse_lsb_release_content(lines): + """ + 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): + with open(os.devnull, 'w') as devnull: + try: + cmd = ('uname', '-rs') + stdout = subprocess.check_output(cmd, stderr=devnull) + except OSError: + return {} + content = stdout.decode(sys.getfilesystemencoding()).splitlines() + return self._parse_uname_content(content) + + @staticmethod + def _parse_uname_content(lines): + 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 + + @cached_property + def _distro_release_info(self): + """ + 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) + if 'name' in distro_info \ + and 'cloudlinux' in distro_info['name'].lower(): + distro_info['id'] = 'cloudlinux' + elif match: + distro_info['id'] = match.group(1) + return distro_info + else: + try: + basenames = os.listdir(_UNIXCONFDIR) + # 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 = ['SuSE-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', + 'sl-release', + 'slackware-version'] + for basename in basenames: + if basename in _DISTRO_RELEASE_IGNORE_BASENAMES: + continue + match = _DISTRO_RELEASE_BASENAME_PATTERN.match(basename) + if match: + filepath = os.path.join(_UNIXCONFDIR, basename) + distro_info = self._parse_distro_release_file(filepath) + if 'name' in distro_info: + # The name is always present if the pattern matches + self.distro_release_file = filepath + distro_info['id'] = match.group(1) + if 'cloudlinux' in distro_info['name'].lower(): + distro_info['id'] = 'cloudlinux' + return distro_info + return {} + + def _parse_distro_release_file(self, filepath): + """ + 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) 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, IOError): + # Ignore not being able to read a specific, seemingly version + # related file. + # See https://github.com/nir0s/distro/issues/162 + return {} + + @staticmethod + def _parse_distro_release_content(line): + """ + 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. + """ + if isinstance(line, bytes): + line = line.decode('utf-8') + 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(): + 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") + args = parser.parse_args() + + if args.json: + logger.info(json.dumps(info(), indent=4, sort_keys=True)) + else: + logger.info('Name: %s', name(pretty=True)) + distribution_version = version(pretty=True) + logger.info('Version: %s', distribution_version) + distribution_codename = codename() + logger.info('Codename: %s', distribution_codename) + + +if __name__ == '__main__': + main() diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/__init__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/__init__.py new file mode 100644 index 00000000..04912349 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/__init__.py @@ -0,0 +1,35 @@ +""" +HTML parsing library based on the `WHATWG HTML specification +<https://whatwg.org/html>`_. The parser is designed to be compatible with +existing HTML found in the wild and implements well-defined error recovery that +is largely compatible with modern desktop web browsers. + +Example usage:: + + from pip._vendor import html5lib + with open("my_document.html", "rb") as f: + tree = html5lib.parse(f) + +For convenience, this module re-exports the following names: + +* :func:`~.html5parser.parse` +* :func:`~.html5parser.parseFragment` +* :class:`~.html5parser.HTMLParser` +* :func:`~.treebuilders.getTreeBuilder` +* :func:`~.treewalkers.getTreeWalker` +* :func:`~.serializer.serialize` +""" + +from __future__ import absolute_import, division, unicode_literals + +from .html5parser import HTMLParser, parse, parseFragment +from .treebuilders import getTreeBuilder +from .treewalkers import getTreeWalker +from .serializer import serialize + +__all__ = ["HTMLParser", "parse", "parseFragment", "getTreeBuilder", + "getTreeWalker", "serialize"] + +# this has to be at the top level, see how setup.py parses this +#: Distribution version number. +__version__ = "1.0.1" diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cfa13f491b0e4ca4d15b4be40963a207f8aac44f GIT binary patch literal 1263 zcmaJ>-EP}96qbKtJG7l-KzdK)DlQT^ZP6PeE7}1~bFmEr8X$nsf~G`DCQ6DbNySMn z_5gj80>d6ix4p_M>}rQpmL(}r2|6N=kG}6aKlF>~6n*$R{`jRIMc<-(*8tY9;jt?) zEJ`BQVO`l#-K48}Nl*2YekWo*)|VS<kPOr?8LCk-3cd}wsZfH#dLYMYl1##SD5q*G z*@E?mZ8F5hY{I6+AlYVH$qw6oAI)~?U)?A|r)R(YiYscYC<`n_YN)xwDYcwoU1GQ5 zczJ&M=Is0(4w1IvnaD*(ozNvZUO89U#eBYAQMWE)ZHoEIDfwziVtfYQdSGs_u$XZx ziV{$r#wo{{Ruy2RlH;{-E5t8_bzVYX$#q>aEL#4xkPK75SC!<7m(Jofm-3MDTzEuo zj5gTtOkZ#i??4LzMoCS<<<(;<tTf}M^nyM)T>(^zQ=`|Q)5ZwBy`-K7*OnH1u|NpJ zl^d;aC90TQ@R9);NYTb&pX*B~S_txaU|sQYe@|TzrnA~>jeX4C0p2s|-V9TV^F@gE zu+DIff4)PBL$&tv8A2z(k?9iH1TQmw07*ecpu7fYh9B}v&u>G2axJA^``VRMaSM{4 z;zeGU*<$%;V1L<mp@m=m@YfSV3$HpvWs+L^7{vGIkI>ZzNIsRchEDk^7Tle|{+D+D zUEG?=Pxr#k!}dWG^g>W6uDOZtmP>R4$0M5cnr)g|Eo;X~+lFSu#D%ahkj+kAiVXTo zq;T9&X>U61H(}0O-OWa*M>7qt|1zF+nyrVr!85(}v=YIwc_+vCQ)`CajJ(<O26;0E zbG`8_K8m0HKKrQ|5<d%sG>DMAcD3Pz7&v*6>3IWx22nE(gB0|bN5IYGerW?uGxo0A zDhAF5{jV$VdsZqXu#O4LESzp#67n@NyPngVe~#x)RdX2X!_c?GqtB~UA3bN@6`tE! p4+q*0`J50@3P(s>T{WZQb{Jnh0W7-%rr+J|?sg{r?v6U6{=a?bjF12T literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/__pycache__/_ihatexml.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/__pycache__/_ihatexml.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a1baaf6010d55d9a9cfec9ffed60fc78321c2db5 GIT binary patch literal 13807 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/__pycache__/_inputstream.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/__pycache__/_inputstream.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f10839fa6ea50aac359f75c766963e00bc763d76 GIT binary patch literal 22675 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/__pycache__/_tokenizer.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/__pycache__/_tokenizer.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e26160a6b5d5a1c44cbcc331ab74453dba76471e GIT binary patch literal 42111 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/__pycache__/_utils.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/__pycache__/_utils.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c4a0a57fbe4451034e4b3a8769655f8739c446bb GIT binary patch literal 3233 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 mOsy%Wt^&R%0A6u@?s327-~j4QfK2D(>$%JC1%6NqzWIOFe-_IC literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/__pycache__/constants.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/__pycache__/constants.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b6836062077bf7a9cde2e40afe021e6874334880 GIT binary patch literal 66379 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%0A7v=yZPu1tJ!9XDm`I7M8>Z+6yv{*K^*Pphw(YJ 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 K+=dV7miXTay81@| literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/__pycache__/html5parser.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/__pycache__/html5parser.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..95399e39a58653d4a4ae7d92b89343bbe762d539 GIT binary patch literal 99712 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/__pycache__/serializer.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/__pycache__/serializer.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b9220735c22eccf17b8128749096da43bc1803be GIT binary patch literal 10881 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/_ihatexml.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/_ihatexml.py new file mode 100644 index 00000000..4c77717b --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/_ihatexml.py @@ -0,0 +1,288 @@ +from __future__ import absolute_import, division, unicode_literals + +import re +import warnings + +from .constants import DataLossWarning + +baseChar = """ +[#x0041-#x005A] | [#x0061-#x007A] | [#x00C0-#x00D6] | [#x00D8-#x00F6] | +[#x00F8-#x00FF] | [#x0100-#x0131] | [#x0134-#x013E] | [#x0141-#x0148] | +[#x014A-#x017E] | [#x0180-#x01C3] | [#x01CD-#x01F0] | [#x01F4-#x01F5] | +[#x01FA-#x0217] | [#x0250-#x02A8] | [#x02BB-#x02C1] | #x0386 | +[#x0388-#x038A] | #x038C | [#x038E-#x03A1] | [#x03A3-#x03CE] | +[#x03D0-#x03D6] | #x03DA | #x03DC | #x03DE | #x03E0 | [#x03E2-#x03F3] | +[#x0401-#x040C] | [#x040E-#x044F] | [#x0451-#x045C] | [#x045E-#x0481] | +[#x0490-#x04C4] | [#x04C7-#x04C8] | [#x04CB-#x04CC] | [#x04D0-#x04EB] | +[#x04EE-#x04F5] | [#x04F8-#x04F9] | [#x0531-#x0556] | #x0559 | +[#x0561-#x0586] | [#x05D0-#x05EA] | [#x05F0-#x05F2] | [#x0621-#x063A] | +[#x0641-#x064A] | [#x0671-#x06B7] | [#x06BA-#x06BE] | [#x06C0-#x06CE] | +[#x06D0-#x06D3] | #x06D5 | [#x06E5-#x06E6] | [#x0905-#x0939] | #x093D | +[#x0958-#x0961] | [#x0985-#x098C] | [#x098F-#x0990] | [#x0993-#x09A8] | +[#x09AA-#x09B0] | #x09B2 | [#x09B6-#x09B9] | [#x09DC-#x09DD] | +[#x09DF-#x09E1] | [#x09F0-#x09F1] | [#x0A05-#x0A0A] | [#x0A0F-#x0A10] | +[#x0A13-#x0A28] | [#x0A2A-#x0A30] | [#x0A32-#x0A33] | [#x0A35-#x0A36] | +[#x0A38-#x0A39] | [#x0A59-#x0A5C] | #x0A5E | [#x0A72-#x0A74] | +[#x0A85-#x0A8B] | #x0A8D | [#x0A8F-#x0A91] | [#x0A93-#x0AA8] | +[#x0AAA-#x0AB0] | [#x0AB2-#x0AB3] | [#x0AB5-#x0AB9] | #x0ABD | #x0AE0 | +[#x0B05-#x0B0C] | [#x0B0F-#x0B10] | [#x0B13-#x0B28] | [#x0B2A-#x0B30] | +[#x0B32-#x0B33] | [#x0B36-#x0B39] | #x0B3D | [#x0B5C-#x0B5D] | +[#x0B5F-#x0B61] | [#x0B85-#x0B8A] | [#x0B8E-#x0B90] | [#x0B92-#x0B95] | +[#x0B99-#x0B9A] | #x0B9C | [#x0B9E-#x0B9F] | [#x0BA3-#x0BA4] | +[#x0BA8-#x0BAA] | [#x0BAE-#x0BB5] | [#x0BB7-#x0BB9] | [#x0C05-#x0C0C] | +[#x0C0E-#x0C10] | [#x0C12-#x0C28] | [#x0C2A-#x0C33] | [#x0C35-#x0C39] | +[#x0C60-#x0C61] | [#x0C85-#x0C8C] | [#x0C8E-#x0C90] | [#x0C92-#x0CA8] | +[#x0CAA-#x0CB3] | [#x0CB5-#x0CB9] | #x0CDE | [#x0CE0-#x0CE1] | +[#x0D05-#x0D0C] | [#x0D0E-#x0D10] | [#x0D12-#x0D28] | [#x0D2A-#x0D39] | +[#x0D60-#x0D61] | [#x0E01-#x0E2E] | #x0E30 | [#x0E32-#x0E33] | +[#x0E40-#x0E45] | [#x0E81-#x0E82] | #x0E84 | [#x0E87-#x0E88] | #x0E8A | +#x0E8D | [#x0E94-#x0E97] | [#x0E99-#x0E9F] | [#x0EA1-#x0EA3] | #x0EA5 | +#x0EA7 | [#x0EAA-#x0EAB] | [#x0EAD-#x0EAE] | #x0EB0 | [#x0EB2-#x0EB3] | +#x0EBD | [#x0EC0-#x0EC4] | [#x0F40-#x0F47] | [#x0F49-#x0F69] | +[#x10A0-#x10C5] | [#x10D0-#x10F6] | #x1100 | [#x1102-#x1103] | +[#x1105-#x1107] | #x1109 | [#x110B-#x110C] | [#x110E-#x1112] | #x113C | +#x113E | #x1140 | #x114C | #x114E | #x1150 | [#x1154-#x1155] | #x1159 | +[#x115F-#x1161] | #x1163 | #x1165 | #x1167 | #x1169 | [#x116D-#x116E] | +[#x1172-#x1173] | #x1175 | #x119E | #x11A8 | #x11AB | [#x11AE-#x11AF] | +[#x11B7-#x11B8] | #x11BA | [#x11BC-#x11C2] | #x11EB | #x11F0 | #x11F9 | +[#x1E00-#x1E9B] | [#x1EA0-#x1EF9] | [#x1F00-#x1F15] | [#x1F18-#x1F1D] | +[#x1F20-#x1F45] | [#x1F48-#x1F4D] | [#x1F50-#x1F57] | #x1F59 | #x1F5B | +#x1F5D | [#x1F5F-#x1F7D] | [#x1F80-#x1FB4] | [#x1FB6-#x1FBC] | #x1FBE | +[#x1FC2-#x1FC4] | [#x1FC6-#x1FCC] | [#x1FD0-#x1FD3] | [#x1FD6-#x1FDB] | +[#x1FE0-#x1FEC] | [#x1FF2-#x1FF4] | [#x1FF6-#x1FFC] | #x2126 | +[#x212A-#x212B] | #x212E | [#x2180-#x2182] | [#x3041-#x3094] | +[#x30A1-#x30FA] | [#x3105-#x312C] | [#xAC00-#xD7A3]""" + +ideographic = """[#x4E00-#x9FA5] | #x3007 | [#x3021-#x3029]""" + +combiningCharacter = """ +[#x0300-#x0345] | [#x0360-#x0361] | [#x0483-#x0486] | [#x0591-#x05A1] | +[#x05A3-#x05B9] | [#x05BB-#x05BD] | #x05BF | [#x05C1-#x05C2] | #x05C4 | +[#x064B-#x0652] | #x0670 | [#x06D6-#x06DC] | [#x06DD-#x06DF] | +[#x06E0-#x06E4] | [#x06E7-#x06E8] | [#x06EA-#x06ED] | [#x0901-#x0903] | +#x093C | [#x093E-#x094C] | #x094D | [#x0951-#x0954] | [#x0962-#x0963] | +[#x0981-#x0983] | #x09BC | #x09BE | #x09BF | [#x09C0-#x09C4] | +[#x09C7-#x09C8] | [#x09CB-#x09CD] | #x09D7 | [#x09E2-#x09E3] | #x0A02 | +#x0A3C | #x0A3E | #x0A3F | [#x0A40-#x0A42] | [#x0A47-#x0A48] | +[#x0A4B-#x0A4D] | [#x0A70-#x0A71] | [#x0A81-#x0A83] | #x0ABC | +[#x0ABE-#x0AC5] | [#x0AC7-#x0AC9] | [#x0ACB-#x0ACD] | [#x0B01-#x0B03] | +#x0B3C | [#x0B3E-#x0B43] | [#x0B47-#x0B48] | [#x0B4B-#x0B4D] | +[#x0B56-#x0B57] | [#x0B82-#x0B83] | [#x0BBE-#x0BC2] | [#x0BC6-#x0BC8] | +[#x0BCA-#x0BCD] | #x0BD7 | [#x0C01-#x0C03] | [#x0C3E-#x0C44] | +[#x0C46-#x0C48] | [#x0C4A-#x0C4D] | [#x0C55-#x0C56] | [#x0C82-#x0C83] | +[#x0CBE-#x0CC4] | [#x0CC6-#x0CC8] | [#x0CCA-#x0CCD] | [#x0CD5-#x0CD6] | +[#x0D02-#x0D03] | [#x0D3E-#x0D43] | [#x0D46-#x0D48] | [#x0D4A-#x0D4D] | +#x0D57 | #x0E31 | [#x0E34-#x0E3A] | [#x0E47-#x0E4E] | #x0EB1 | +[#x0EB4-#x0EB9] | [#x0EBB-#x0EBC] | [#x0EC8-#x0ECD] | [#x0F18-#x0F19] | +#x0F35 | #x0F37 | #x0F39 | #x0F3E | #x0F3F | [#x0F71-#x0F84] | +[#x0F86-#x0F8B] | [#x0F90-#x0F95] | #x0F97 | [#x0F99-#x0FAD] | +[#x0FB1-#x0FB7] | #x0FB9 | [#x20D0-#x20DC] | #x20E1 | [#x302A-#x302F] | +#x3099 | #x309A""" + +digit = """ +[#x0030-#x0039] | [#x0660-#x0669] | [#x06F0-#x06F9] | [#x0966-#x096F] | +[#x09E6-#x09EF] | [#x0A66-#x0A6F] | [#x0AE6-#x0AEF] | [#x0B66-#x0B6F] | +[#x0BE7-#x0BEF] | [#x0C66-#x0C6F] | [#x0CE6-#x0CEF] | [#x0D66-#x0D6F] | +[#x0E50-#x0E59] | [#x0ED0-#x0ED9] | [#x0F20-#x0F29]""" + +extender = """ +#x00B7 | #x02D0 | #x02D1 | #x0387 | #x0640 | #x0E46 | #x0EC6 | #x3005 | +#[#x3031-#x3035] | [#x309D-#x309E] | [#x30FC-#x30FE]""" + +letter = " | ".join([baseChar, ideographic]) + +# Without the +name = " | ".join([letter, digit, ".", "-", "_", combiningCharacter, + extender]) +nameFirst = " | ".join([letter, "_"]) + +reChar = re.compile(r"#x([\d|A-F]{4,4})") +reCharRange = re.compile(r"\[#x([\d|A-F]{4,4})-#x([\d|A-F]{4,4})\]") + + +def charStringToList(chars): + charRanges = [item.strip() for item in chars.split(" | ")] + rv = [] + for item in charRanges: + foundMatch = False + for regexp in (reChar, reCharRange): + match = regexp.match(item) + if match is not None: + rv.append([hexToInt(item) for item in match.groups()]) + if len(rv[-1]) == 1: + rv[-1] = rv[-1] * 2 + foundMatch = True + break + if not foundMatch: + assert len(item) == 1 + + rv.append([ord(item)] * 2) + rv = normaliseCharList(rv) + return rv + + +def normaliseCharList(charList): + charList = sorted(charList) + for item in charList: + assert item[1] >= item[0] + rv = [] + i = 0 + while i < len(charList): + j = 1 + rv.append(charList[i]) + while i + j < len(charList) and charList[i + j][0] <= rv[-1][1] + 1: + rv[-1][1] = charList[i + j][1] + j += 1 + i += j + return rv + +# We don't really support characters above the BMP :( +max_unicode = int("FFFF", 16) + + +def missingRanges(charList): + rv = [] + if charList[0] != 0: + rv.append([0, charList[0][0] - 1]) + for i, item in enumerate(charList[:-1]): + rv.append([item[1] + 1, charList[i + 1][0] - 1]) + if charList[-1][1] != max_unicode: + rv.append([charList[-1][1] + 1, max_unicode]) + return rv + + +def listToRegexpStr(charList): + rv = [] + for item in charList: + if item[0] == item[1]: + rv.append(escapeRegexp(chr(item[0]))) + else: + rv.append(escapeRegexp(chr(item[0])) + "-" + + escapeRegexp(chr(item[1]))) + return "[%s]" % "".join(rv) + + +def hexToInt(hex_str): + return int(hex_str, 16) + + +def escapeRegexp(string): + specialCharacters = (".", "^", "$", "*", "+", "?", "{", "}", + "[", "]", "|", "(", ")", "-") + for char in specialCharacters: + string = string.replace(char, "\\" + char) + + return string + +# output from the above +nonXmlNameBMPRegexp = re.compile('[\x00-,/:-@\\[-\\^`\\{-\xb6\xb8-\xbf\xd7\xf7\u0132-\u0133\u013f-\u0140\u0149\u017f\u01c4-\u01cc\u01f1-\u01f3\u01f6-\u01f9\u0218-\u024f\u02a9-\u02ba\u02c2-\u02cf\u02d2-\u02ff\u0346-\u035f\u0362-\u0385\u038b\u038d\u03a2\u03cf\u03d7-\u03d9\u03db\u03dd\u03df\u03e1\u03f4-\u0400\u040d\u0450\u045d\u0482\u0487-\u048f\u04c5-\u04c6\u04c9-\u04ca\u04cd-\u04cf\u04ec-\u04ed\u04f6-\u04f7\u04fa-\u0530\u0557-\u0558\u055a-\u0560\u0587-\u0590\u05a2\u05ba\u05be\u05c0\u05c3\u05c5-\u05cf\u05eb-\u05ef\u05f3-\u0620\u063b-\u063f\u0653-\u065f\u066a-\u066f\u06b8-\u06b9\u06bf\u06cf\u06d4\u06e9\u06ee-\u06ef\u06fa-\u0900\u0904\u093a-\u093b\u094e-\u0950\u0955-\u0957\u0964-\u0965\u0970-\u0980\u0984\u098d-\u098e\u0991-\u0992\u09a9\u09b1\u09b3-\u09b5\u09ba-\u09bb\u09bd\u09c5-\u09c6\u09c9-\u09ca\u09ce-\u09d6\u09d8-\u09db\u09de\u09e4-\u09e5\u09f2-\u0a01\u0a03-\u0a04\u0a0b-\u0a0e\u0a11-\u0a12\u0a29\u0a31\u0a34\u0a37\u0a3a-\u0a3b\u0a3d\u0a43-\u0a46\u0a49-\u0a4a\u0a4e-\u0a58\u0a5d\u0a5f-\u0a65\u0a75-\u0a80\u0a84\u0a8c\u0a8e\u0a92\u0aa9\u0ab1\u0ab4\u0aba-\u0abb\u0ac6\u0aca\u0ace-\u0adf\u0ae1-\u0ae5\u0af0-\u0b00\u0b04\u0b0d-\u0b0e\u0b11-\u0b12\u0b29\u0b31\u0b34-\u0b35\u0b3a-\u0b3b\u0b44-\u0b46\u0b49-\u0b4a\u0b4e-\u0b55\u0b58-\u0b5b\u0b5e\u0b62-\u0b65\u0b70-\u0b81\u0b84\u0b8b-\u0b8d\u0b91\u0b96-\u0b98\u0b9b\u0b9d\u0ba0-\u0ba2\u0ba5-\u0ba7\u0bab-\u0bad\u0bb6\u0bba-\u0bbd\u0bc3-\u0bc5\u0bc9\u0bce-\u0bd6\u0bd8-\u0be6\u0bf0-\u0c00\u0c04\u0c0d\u0c11\u0c29\u0c34\u0c3a-\u0c3d\u0c45\u0c49\u0c4e-\u0c54\u0c57-\u0c5f\u0c62-\u0c65\u0c70-\u0c81\u0c84\u0c8d\u0c91\u0ca9\u0cb4\u0cba-\u0cbd\u0cc5\u0cc9\u0cce-\u0cd4\u0cd7-\u0cdd\u0cdf\u0ce2-\u0ce5\u0cf0-\u0d01\u0d04\u0d0d\u0d11\u0d29\u0d3a-\u0d3d\u0d44-\u0d45\u0d49\u0d4e-\u0d56\u0d58-\u0d5f\u0d62-\u0d65\u0d70-\u0e00\u0e2f\u0e3b-\u0e3f\u0e4f\u0e5a-\u0e80\u0e83\u0e85-\u0e86\u0e89\u0e8b-\u0e8c\u0e8e-\u0e93\u0e98\u0ea0\u0ea4\u0ea6\u0ea8-\u0ea9\u0eac\u0eaf\u0eba\u0ebe-\u0ebf\u0ec5\u0ec7\u0ece-\u0ecf\u0eda-\u0f17\u0f1a-\u0f1f\u0f2a-\u0f34\u0f36\u0f38\u0f3a-\u0f3d\u0f48\u0f6a-\u0f70\u0f85\u0f8c-\u0f8f\u0f96\u0f98\u0fae-\u0fb0\u0fb8\u0fba-\u109f\u10c6-\u10cf\u10f7-\u10ff\u1101\u1104\u1108\u110a\u110d\u1113-\u113b\u113d\u113f\u1141-\u114b\u114d\u114f\u1151-\u1153\u1156-\u1158\u115a-\u115e\u1162\u1164\u1166\u1168\u116a-\u116c\u116f-\u1171\u1174\u1176-\u119d\u119f-\u11a7\u11a9-\u11aa\u11ac-\u11ad\u11b0-\u11b6\u11b9\u11bb\u11c3-\u11ea\u11ec-\u11ef\u11f1-\u11f8\u11fa-\u1dff\u1e9c-\u1e9f\u1efa-\u1eff\u1f16-\u1f17\u1f1e-\u1f1f\u1f46-\u1f47\u1f4e-\u1f4f\u1f58\u1f5a\u1f5c\u1f5e\u1f7e-\u1f7f\u1fb5\u1fbd\u1fbf-\u1fc1\u1fc5\u1fcd-\u1fcf\u1fd4-\u1fd5\u1fdc-\u1fdf\u1fed-\u1ff1\u1ff5\u1ffd-\u20cf\u20dd-\u20e0\u20e2-\u2125\u2127-\u2129\u212c-\u212d\u212f-\u217f\u2183-\u3004\u3006\u3008-\u3020\u3030\u3036-\u3040\u3095-\u3098\u309b-\u309c\u309f-\u30a0\u30fb\u30ff-\u3104\u312d-\u4dff\u9fa6-\uabff\ud7a4-\uffff]') # noqa + +nonXmlNameFirstBMPRegexp = re.compile('[\x00-@\\[-\\^`\\{-\xbf\xd7\xf7\u0132-\u0133\u013f-\u0140\u0149\u017f\u01c4-\u01cc\u01f1-\u01f3\u01f6-\u01f9\u0218-\u024f\u02a9-\u02ba\u02c2-\u0385\u0387\u038b\u038d\u03a2\u03cf\u03d7-\u03d9\u03db\u03dd\u03df\u03e1\u03f4-\u0400\u040d\u0450\u045d\u0482-\u048f\u04c5-\u04c6\u04c9-\u04ca\u04cd-\u04cf\u04ec-\u04ed\u04f6-\u04f7\u04fa-\u0530\u0557-\u0558\u055a-\u0560\u0587-\u05cf\u05eb-\u05ef\u05f3-\u0620\u063b-\u0640\u064b-\u0670\u06b8-\u06b9\u06bf\u06cf\u06d4\u06d6-\u06e4\u06e7-\u0904\u093a-\u093c\u093e-\u0957\u0962-\u0984\u098d-\u098e\u0991-\u0992\u09a9\u09b1\u09b3-\u09b5\u09ba-\u09db\u09de\u09e2-\u09ef\u09f2-\u0a04\u0a0b-\u0a0e\u0a11-\u0a12\u0a29\u0a31\u0a34\u0a37\u0a3a-\u0a58\u0a5d\u0a5f-\u0a71\u0a75-\u0a84\u0a8c\u0a8e\u0a92\u0aa9\u0ab1\u0ab4\u0aba-\u0abc\u0abe-\u0adf\u0ae1-\u0b04\u0b0d-\u0b0e\u0b11-\u0b12\u0b29\u0b31\u0b34-\u0b35\u0b3a-\u0b3c\u0b3e-\u0b5b\u0b5e\u0b62-\u0b84\u0b8b-\u0b8d\u0b91\u0b96-\u0b98\u0b9b\u0b9d\u0ba0-\u0ba2\u0ba5-\u0ba7\u0bab-\u0bad\u0bb6\u0bba-\u0c04\u0c0d\u0c11\u0c29\u0c34\u0c3a-\u0c5f\u0c62-\u0c84\u0c8d\u0c91\u0ca9\u0cb4\u0cba-\u0cdd\u0cdf\u0ce2-\u0d04\u0d0d\u0d11\u0d29\u0d3a-\u0d5f\u0d62-\u0e00\u0e2f\u0e31\u0e34-\u0e3f\u0e46-\u0e80\u0e83\u0e85-\u0e86\u0e89\u0e8b-\u0e8c\u0e8e-\u0e93\u0e98\u0ea0\u0ea4\u0ea6\u0ea8-\u0ea9\u0eac\u0eaf\u0eb1\u0eb4-\u0ebc\u0ebe-\u0ebf\u0ec5-\u0f3f\u0f48\u0f6a-\u109f\u10c6-\u10cf\u10f7-\u10ff\u1101\u1104\u1108\u110a\u110d\u1113-\u113b\u113d\u113f\u1141-\u114b\u114d\u114f\u1151-\u1153\u1156-\u1158\u115a-\u115e\u1162\u1164\u1166\u1168\u116a-\u116c\u116f-\u1171\u1174\u1176-\u119d\u119f-\u11a7\u11a9-\u11aa\u11ac-\u11ad\u11b0-\u11b6\u11b9\u11bb\u11c3-\u11ea\u11ec-\u11ef\u11f1-\u11f8\u11fa-\u1dff\u1e9c-\u1e9f\u1efa-\u1eff\u1f16-\u1f17\u1f1e-\u1f1f\u1f46-\u1f47\u1f4e-\u1f4f\u1f58\u1f5a\u1f5c\u1f5e\u1f7e-\u1f7f\u1fb5\u1fbd\u1fbf-\u1fc1\u1fc5\u1fcd-\u1fcf\u1fd4-\u1fd5\u1fdc-\u1fdf\u1fed-\u1ff1\u1ff5\u1ffd-\u2125\u2127-\u2129\u212c-\u212d\u212f-\u217f\u2183-\u3006\u3008-\u3020\u302a-\u3040\u3095-\u30a0\u30fb-\u3104\u312d-\u4dff\u9fa6-\uabff\ud7a4-\uffff]') # noqa + +# Simpler things +nonPubidCharRegexp = re.compile("[^\x20\x0D\x0Aa-zA-Z0-9\\-'()+,./:=?;!*#@$_%]") + + +class InfosetFilter(object): + replacementRegexp = re.compile(r"U[\dA-F]{5,5}") + + def __init__(self, + dropXmlnsLocalName=False, + dropXmlnsAttrNs=False, + preventDoubleDashComments=False, + preventDashAtCommentEnd=False, + replaceFormFeedCharacters=True, + preventSingleQuotePubid=False): + + self.dropXmlnsLocalName = dropXmlnsLocalName + self.dropXmlnsAttrNs = dropXmlnsAttrNs + + self.preventDoubleDashComments = preventDoubleDashComments + self.preventDashAtCommentEnd = preventDashAtCommentEnd + + self.replaceFormFeedCharacters = replaceFormFeedCharacters + + self.preventSingleQuotePubid = preventSingleQuotePubid + + self.replaceCache = {} + + def coerceAttribute(self, name, namespace=None): + if self.dropXmlnsLocalName and name.startswith("xmlns:"): + warnings.warn("Attributes cannot begin with xmlns", DataLossWarning) + return None + elif (self.dropXmlnsAttrNs and + namespace == "http://www.w3.org/2000/xmlns/"): + warnings.warn("Attributes cannot be in the xml namespace", DataLossWarning) + return None + else: + return self.toXmlName(name) + + def coerceElement(self, name): + return self.toXmlName(name) + + def coerceComment(self, data): + if self.preventDoubleDashComments: + while "--" in data: + warnings.warn("Comments cannot contain adjacent dashes", DataLossWarning) + data = data.replace("--", "- -") + if data.endswith("-"): + warnings.warn("Comments cannot end in a dash", DataLossWarning) + data += " " + return data + + def coerceCharacters(self, data): + if self.replaceFormFeedCharacters: + for _ in range(data.count("\x0C")): + warnings.warn("Text cannot contain U+000C", DataLossWarning) + data = data.replace("\x0C", " ") + # Other non-xml characters + return data + + def coercePubid(self, data): + dataOutput = data + for char in nonPubidCharRegexp.findall(data): + warnings.warn("Coercing non-XML pubid", DataLossWarning) + replacement = self.getReplacementCharacter(char) + dataOutput = dataOutput.replace(char, replacement) + if self.preventSingleQuotePubid and dataOutput.find("'") >= 0: + warnings.warn("Pubid cannot contain single quote", DataLossWarning) + dataOutput = dataOutput.replace("'", self.getReplacementCharacter("'")) + return dataOutput + + def toXmlName(self, name): + nameFirst = name[0] + nameRest = name[1:] + m = nonXmlNameFirstBMPRegexp.match(nameFirst) + if m: + warnings.warn("Coercing non-XML name", DataLossWarning) + nameFirstOutput = self.getReplacementCharacter(nameFirst) + else: + nameFirstOutput = nameFirst + + nameRestOutput = nameRest + replaceChars = set(nonXmlNameBMPRegexp.findall(nameRest)) + for char in replaceChars: + warnings.warn("Coercing non-XML name", DataLossWarning) + replacement = self.getReplacementCharacter(char) + nameRestOutput = nameRestOutput.replace(char, replacement) + return nameFirstOutput + nameRestOutput + + def getReplacementCharacter(self, char): + if char in self.replaceCache: + replacement = self.replaceCache[char] + else: + replacement = self.escapeChar(char) + return replacement + + def fromXmlName(self, name): + for item in set(self.replacementRegexp.findall(name)): + name = name.replace(item, self.unescapeChar(item)) + return name + + def escapeChar(self, char): + replacement = "U%05X" % ord(char) + self.replaceCache[char] = replacement + return replacement + + def unescapeChar(self, charcode): + return chr(int(charcode[1:], 16)) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/_inputstream.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/_inputstream.py new file mode 100644 index 00000000..a65e55f6 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/_inputstream.py @@ -0,0 +1,923 @@ +from __future__ import absolute_import, division, unicode_literals + +from pip._vendor.six import text_type, binary_type +from pip._vendor.six.moves import http_client, urllib + +import codecs +import re + +from pip._vendor import webencodings + +from .constants import EOF, spaceCharacters, asciiLetters, asciiUppercase +from .constants import _ReparseException +from . import _utils + +from io import StringIO + +try: + from io import BytesIO +except ImportError: + BytesIO = StringIO + +# Non-unicode versions of constants for use in the pre-parser +spaceCharactersBytes = frozenset([item.encode("ascii") for item in spaceCharacters]) +asciiLettersBytes = frozenset([item.encode("ascii") for item in asciiLetters]) +asciiUppercaseBytes = frozenset([item.encode("ascii") for item in asciiUppercase]) +spacesAngleBrackets = spaceCharactersBytes | frozenset([b">", b"<"]) + + +invalid_unicode_no_surrogate = "[\u0001-\u0008\u000B\u000E-\u001F\u007F-\u009F\uFDD0-\uFDEF\uFFFE\uFFFF\U0001FFFE\U0001FFFF\U0002FFFE\U0002FFFF\U0003FFFE\U0003FFFF\U0004FFFE\U0004FFFF\U0005FFFE\U0005FFFF\U0006FFFE\U0006FFFF\U0007FFFE\U0007FFFF\U0008FFFE\U0008FFFF\U0009FFFE\U0009FFFF\U000AFFFE\U000AFFFF\U000BFFFE\U000BFFFF\U000CFFFE\U000CFFFF\U000DFFFE\U000DFFFF\U000EFFFE\U000EFFFF\U000FFFFE\U000FFFFF\U0010FFFE\U0010FFFF]" # noqa + +if _utils.supports_lone_surrogates: + # Use one extra step of indirection and create surrogates with + # eval. Not using this indirection would introduce an illegal + # unicode literal on platforms not supporting such lone + # surrogates. + assert invalid_unicode_no_surrogate[-1] == "]" and invalid_unicode_no_surrogate.count("]") == 1 + invalid_unicode_re = re.compile(invalid_unicode_no_surrogate[:-1] + + eval('"\\uD800-\\uDFFF"') + # pylint:disable=eval-used + "]") +else: + invalid_unicode_re = re.compile(invalid_unicode_no_surrogate) + +non_bmp_invalid_codepoints = set([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]) + +ascii_punctuation_re = re.compile("[\u0009-\u000D\u0020-\u002F\u003A-\u0040\u005C\u005B-\u0060\u007B-\u007E]") + +# Cache for charsUntil() +charsUntilRegEx = {} + + +class BufferedStream(object): + """Buffering for streams that do not have buffering of their own + + The buffer is implemented as a list of chunks on the assumption that + joining many strings will be slow since it is O(n**2) + """ + + def __init__(self, stream): + self.stream = stream + self.buffer = [] + self.position = [-1, 0] # chunk number, offset + + def tell(self): + pos = 0 + for chunk in self.buffer[:self.position[0]]: + pos += len(chunk) + pos += self.position[1] + return pos + + def seek(self, pos): + assert pos <= self._bufferedBytes() + offset = pos + i = 0 + while len(self.buffer[i]) < offset: + offset -= len(self.buffer[i]) + i += 1 + self.position = [i, offset] + + def read(self, bytes): + if not self.buffer: + return self._readStream(bytes) + elif (self.position[0] == len(self.buffer) and + self.position[1] == len(self.buffer[-1])): + return self._readStream(bytes) + else: + return self._readFromBuffer(bytes) + + def _bufferedBytes(self): + return sum([len(item) for item in self.buffer]) + + def _readStream(self, bytes): + data = self.stream.read(bytes) + self.buffer.append(data) + self.position[0] += 1 + self.position[1] = len(data) + return data + + def _readFromBuffer(self, bytes): + remainingBytes = bytes + rv = [] + bufferIndex = self.position[0] + bufferOffset = self.position[1] + while bufferIndex < len(self.buffer) and remainingBytes != 0: + assert remainingBytes > 0 + bufferedData = self.buffer[bufferIndex] + + if remainingBytes <= len(bufferedData) - bufferOffset: + bytesToRead = remainingBytes + self.position = [bufferIndex, bufferOffset + bytesToRead] + else: + bytesToRead = len(bufferedData) - bufferOffset + self.position = [bufferIndex, len(bufferedData)] + bufferIndex += 1 + rv.append(bufferedData[bufferOffset:bufferOffset + bytesToRead]) + remainingBytes -= bytesToRead + + bufferOffset = 0 + + if remainingBytes: + rv.append(self._readStream(remainingBytes)) + + return b"".join(rv) + + +def HTMLInputStream(source, **kwargs): + # Work around Python bug #20007: read(0) closes the connection. + # http://bugs.python.org/issue20007 + if (isinstance(source, http_client.HTTPResponse) or + # Also check for addinfourl wrapping HTTPResponse + (isinstance(source, urllib.response.addbase) and + isinstance(source.fp, http_client.HTTPResponse))): + isUnicode = False + elif hasattr(source, "read"): + isUnicode = isinstance(source.read(0), text_type) + else: + isUnicode = isinstance(source, text_type) + + if isUnicode: + encodings = [x for x in kwargs if x.endswith("_encoding")] + if encodings: + raise TypeError("Cannot set an encoding with a unicode input, set %r" % encodings) + + return HTMLUnicodeInputStream(source, **kwargs) + else: + return HTMLBinaryInputStream(source, **kwargs) + + +class HTMLUnicodeInputStream(object): + """Provides a unicode stream of characters to the HTMLTokenizer. + + This class takes care of character encoding and removing or replacing + incorrect byte-sequences and also provides column and line tracking. + + """ + + _defaultChunkSize = 10240 + + def __init__(self, source): + """Initialises the HTMLInputStream. + + HTMLInputStream(source, [encoding]) -> Normalized stream from source + for use by html5lib. + + source can be either a file-object, local filename or a string. + + The optional encoding parameter must be a string that indicates + the encoding. If specified, that encoding will be used, + regardless of any BOM or later declaration (such as in a meta + element) + + """ + + if not _utils.supports_lone_surrogates: + # Such platforms will have already checked for such + # surrogate errors, so no need to do this checking. + self.reportCharacterErrors = None + elif len("\U0010FFFF") == 1: + self.reportCharacterErrors = self.characterErrorsUCS4 + else: + self.reportCharacterErrors = self.characterErrorsUCS2 + + # List of where new lines occur + self.newLines = [0] + + self.charEncoding = (lookupEncoding("utf-8"), "certain") + self.dataStream = self.openStream(source) + + self.reset() + + def reset(self): + self.chunk = "" + self.chunkSize = 0 + self.chunkOffset = 0 + self.errors = [] + + # number of (complete) lines in previous chunks + self.prevNumLines = 0 + # number of columns in the last line of the previous chunk + self.prevNumCols = 0 + + # Deal with CR LF and surrogates split over chunk boundaries + self._bufferedCharacter = None + + def openStream(self, source): + """Produces a file object from source. + + source can be either a file object, local filename or a string. + + """ + # Already a file object + if hasattr(source, 'read'): + stream = source + else: + stream = StringIO(source) + + return stream + + def _position(self, offset): + chunk = self.chunk + nLines = chunk.count('\n', 0, offset) + positionLine = self.prevNumLines + nLines + lastLinePos = chunk.rfind('\n', 0, offset) + if lastLinePos == -1: + positionColumn = self.prevNumCols + offset + else: + positionColumn = offset - (lastLinePos + 1) + return (positionLine, positionColumn) + + def position(self): + """Returns (line, col) of the current position in the stream.""" + line, col = self._position(self.chunkOffset) + return (line + 1, col) + + def char(self): + """ Read one character from the stream or queue if available. Return + EOF when EOF is reached. + """ + # Read a new chunk from the input stream if necessary + if self.chunkOffset >= self.chunkSize: + if not self.readChunk(): + return EOF + + chunkOffset = self.chunkOffset + char = self.chunk[chunkOffset] + self.chunkOffset = chunkOffset + 1 + + return char + + def readChunk(self, chunkSize=None): + if chunkSize is None: + chunkSize = self._defaultChunkSize + + self.prevNumLines, self.prevNumCols = self._position(self.chunkSize) + + self.chunk = "" + self.chunkSize = 0 + self.chunkOffset = 0 + + data = self.dataStream.read(chunkSize) + + # Deal with CR LF and surrogates broken across chunks + if self._bufferedCharacter: + data = self._bufferedCharacter + data + self._bufferedCharacter = None + elif not data: + # We have no more data, bye-bye stream + return False + + if len(data) > 1: + lastv = ord(data[-1]) + if lastv == 0x0D or 0xD800 <= lastv <= 0xDBFF: + self._bufferedCharacter = data[-1] + data = data[:-1] + + if self.reportCharacterErrors: + self.reportCharacterErrors(data) + + # Replace invalid characters + data = data.replace("\r\n", "\n") + data = data.replace("\r", "\n") + + self.chunk = data + self.chunkSize = len(data) + + return True + + def characterErrorsUCS4(self, data): + for _ in range(len(invalid_unicode_re.findall(data))): + self.errors.append("invalid-codepoint") + + def characterErrorsUCS2(self, data): + # Someone picked the wrong compile option + # You lose + skip = False + for match in invalid_unicode_re.finditer(data): + if skip: + continue + codepoint = ord(match.group()) + pos = match.start() + # Pretty sure there should be endianness issues here + if _utils.isSurrogatePair(data[pos:pos + 2]): + # We have a surrogate pair! + char_val = _utils.surrogatePairToCodepoint(data[pos:pos + 2]) + if char_val in non_bmp_invalid_codepoints: + self.errors.append("invalid-codepoint") + skip = True + elif (codepoint >= 0xD800 and codepoint <= 0xDFFF and + pos == len(data) - 1): + self.errors.append("invalid-codepoint") + else: + skip = False + self.errors.append("invalid-codepoint") + + def charsUntil(self, characters, opposite=False): + """ Returns a string of characters from the stream up to but not + including any character in 'characters' or EOF. 'characters' must be + a container that supports the 'in' method and iteration over its + characters. + """ + + # Use a cache of regexps to find the required characters + try: + chars = charsUntilRegEx[(characters, opposite)] + except KeyError: + if __debug__: + for c in characters: + assert(ord(c) < 128) + regex = "".join(["\\x%02x" % ord(c) for c in characters]) + if not opposite: + regex = "^%s" % regex + chars = charsUntilRegEx[(characters, opposite)] = re.compile("[%s]+" % regex) + + rv = [] + + while True: + # Find the longest matching prefix + m = chars.match(self.chunk, self.chunkOffset) + if m is None: + # If nothing matched, and it wasn't because we ran out of chunk, + # then stop + if self.chunkOffset != self.chunkSize: + break + else: + end = m.end() + # If not the whole chunk matched, return everything + # up to the part that didn't match + if end != self.chunkSize: + rv.append(self.chunk[self.chunkOffset:end]) + self.chunkOffset = end + break + # If the whole remainder of the chunk matched, + # use it all and read the next chunk + rv.append(self.chunk[self.chunkOffset:]) + if not self.readChunk(): + # Reached EOF + break + + r = "".join(rv) + return r + + def unget(self, char): + # Only one character is allowed to be ungotten at once - it must + # be consumed again before any further call to unget + if char is not None: + if self.chunkOffset == 0: + # unget is called quite rarely, so it's a good idea to do + # more work here if it saves a bit of work in the frequently + # called char and charsUntil. + # So, just prepend the ungotten character onto the current + # chunk: + self.chunk = char + self.chunk + self.chunkSize += 1 + else: + self.chunkOffset -= 1 + assert self.chunk[self.chunkOffset] == char + + +class HTMLBinaryInputStream(HTMLUnicodeInputStream): + """Provides a unicode stream of characters to the HTMLTokenizer. + + This class takes care of character encoding and removing or replacing + incorrect byte-sequences and also provides column and line tracking. + + """ + + def __init__(self, source, override_encoding=None, transport_encoding=None, + same_origin_parent_encoding=None, likely_encoding=None, + default_encoding="windows-1252", useChardet=True): + """Initialises the HTMLInputStream. + + HTMLInputStream(source, [encoding]) -> Normalized stream from source + for use by html5lib. + + source can be either a file-object, local filename or a string. + + The optional encoding parameter must be a string that indicates + the encoding. If specified, that encoding will be used, + regardless of any BOM or later declaration (such as in a meta + element) + + """ + # Raw Stream - for unicode objects this will encode to utf-8 and set + # self.charEncoding as appropriate + self.rawStream = self.openStream(source) + + HTMLUnicodeInputStream.__init__(self, self.rawStream) + + # Encoding Information + # Number of bytes to use when looking for a meta element with + # encoding information + self.numBytesMeta = 1024 + # Number of bytes to use when using detecting encoding using chardet + self.numBytesChardet = 100 + # Things from args + self.override_encoding = override_encoding + self.transport_encoding = transport_encoding + self.same_origin_parent_encoding = same_origin_parent_encoding + self.likely_encoding = likely_encoding + self.default_encoding = default_encoding + + # Determine encoding + self.charEncoding = self.determineEncoding(useChardet) + assert self.charEncoding[0] is not None + + # Call superclass + self.reset() + + def reset(self): + self.dataStream = self.charEncoding[0].codec_info.streamreader(self.rawStream, 'replace') + HTMLUnicodeInputStream.reset(self) + + def openStream(self, source): + """Produces a file object from source. + + source can be either a file object, local filename or a string. + + """ + # Already a file object + if hasattr(source, 'read'): + stream = source + else: + stream = BytesIO(source) + + try: + stream.seek(stream.tell()) + except: # pylint:disable=bare-except + stream = BufferedStream(stream) + + return stream + + def determineEncoding(self, chardet=True): + # BOMs take precedence over everything + # This will also read past the BOM if present + charEncoding = self.detectBOM(), "certain" + if charEncoding[0] is not None: + return charEncoding + + # If we've been overriden, we've been overriden + charEncoding = lookupEncoding(self.override_encoding), "certain" + if charEncoding[0] is not None: + return charEncoding + + # Now check the transport layer + charEncoding = lookupEncoding(self.transport_encoding), "certain" + if charEncoding[0] is not None: + return charEncoding + + # Look for meta elements with encoding information + charEncoding = self.detectEncodingMeta(), "tentative" + if charEncoding[0] is not None: + return charEncoding + + # Parent document encoding + charEncoding = lookupEncoding(self.same_origin_parent_encoding), "tentative" + if charEncoding[0] is not None and not charEncoding[0].name.startswith("utf-16"): + return charEncoding + + # "likely" encoding + charEncoding = lookupEncoding(self.likely_encoding), "tentative" + if charEncoding[0] is not None: + return charEncoding + + # Guess with chardet, if available + if chardet: + try: + from pip._vendor.chardet.universaldetector import UniversalDetector + except ImportError: + pass + else: + buffers = [] + detector = UniversalDetector() + while not detector.done: + buffer = self.rawStream.read(self.numBytesChardet) + assert isinstance(buffer, bytes) + if not buffer: + break + buffers.append(buffer) + detector.feed(buffer) + detector.close() + encoding = lookupEncoding(detector.result['encoding']) + self.rawStream.seek(0) + if encoding is not None: + return encoding, "tentative" + + # Try the default encoding + charEncoding = lookupEncoding(self.default_encoding), "tentative" + if charEncoding[0] is not None: + return charEncoding + + # Fallback to html5lib's default if even that hasn't worked + return lookupEncoding("windows-1252"), "tentative" + + def changeEncoding(self, newEncoding): + assert self.charEncoding[1] != "certain" + newEncoding = lookupEncoding(newEncoding) + if newEncoding is None: + return + if newEncoding.name in ("utf-16be", "utf-16le"): + newEncoding = lookupEncoding("utf-8") + assert newEncoding is not None + elif newEncoding == self.charEncoding[0]: + self.charEncoding = (self.charEncoding[0], "certain") + else: + self.rawStream.seek(0) + self.charEncoding = (newEncoding, "certain") + self.reset() + raise _ReparseException("Encoding changed from %s to %s" % (self.charEncoding[0], newEncoding)) + + def detectBOM(self): + """Attempts to detect at BOM at the start of the stream. If + an encoding can be determined from the BOM return the name of the + encoding otherwise return None""" + bomDict = { + codecs.BOM_UTF8: 'utf-8', + codecs.BOM_UTF16_LE: 'utf-16le', codecs.BOM_UTF16_BE: 'utf-16be', + codecs.BOM_UTF32_LE: 'utf-32le', codecs.BOM_UTF32_BE: 'utf-32be' + } + + # Go to beginning of file and read in 4 bytes + string = self.rawStream.read(4) + assert isinstance(string, bytes) + + # Try detecting the BOM using bytes from the string + encoding = bomDict.get(string[:3]) # UTF-8 + seek = 3 + if not encoding: + # Need to detect UTF-32 before UTF-16 + encoding = bomDict.get(string) # UTF-32 + seek = 4 + if not encoding: + encoding = bomDict.get(string[:2]) # UTF-16 + seek = 2 + + # Set the read position past the BOM if one was found, otherwise + # set it to the start of the stream + if encoding: + self.rawStream.seek(seek) + return lookupEncoding(encoding) + else: + self.rawStream.seek(0) + return None + + def detectEncodingMeta(self): + """Report the encoding declared by the meta element + """ + buffer = self.rawStream.read(self.numBytesMeta) + assert isinstance(buffer, bytes) + parser = EncodingParser(buffer) + self.rawStream.seek(0) + encoding = parser.getEncoding() + + if encoding is not None and encoding.name in ("utf-16be", "utf-16le"): + encoding = lookupEncoding("utf-8") + + return encoding + + +class EncodingBytes(bytes): + """String-like object with an associated position and various extra methods + If the position is ever greater than the string length then an exception is + raised""" + def __new__(self, value): + assert isinstance(value, bytes) + return bytes.__new__(self, value.lower()) + + def __init__(self, value): + # pylint:disable=unused-argument + self._position = -1 + + def __iter__(self): + return self + + def __next__(self): + p = self._position = self._position + 1 + if p >= len(self): + raise StopIteration + elif p < 0: + raise TypeError + return self[p:p + 1] + + def next(self): + # Py2 compat + return self.__next__() + + def previous(self): + p = self._position + if p >= len(self): + raise StopIteration + elif p < 0: + raise TypeError + self._position = p = p - 1 + return self[p:p + 1] + + def setPosition(self, position): + if self._position >= len(self): + raise StopIteration + self._position = position + + def getPosition(self): + if self._position >= len(self): + raise StopIteration + if self._position >= 0: + return self._position + else: + return None + + position = property(getPosition, setPosition) + + def getCurrentByte(self): + return self[self.position:self.position + 1] + + currentByte = property(getCurrentByte) + + def skip(self, chars=spaceCharactersBytes): + """Skip past a list of characters""" + p = self.position # use property for the error-checking + while p < len(self): + c = self[p:p + 1] + if c not in chars: + self._position = p + return c + p += 1 + self._position = p + return None + + def skipUntil(self, chars): + p = self.position + while p < len(self): + c = self[p:p + 1] + if c in chars: + self._position = p + return c + p += 1 + self._position = p + return None + + def matchBytes(self, bytes): + """Look for a sequence of bytes at the start of a string. If the bytes + are found return True and advance the position to the byte after the + match. Otherwise return False and leave the position alone""" + p = self.position + data = self[p:p + len(bytes)] + rv = data.startswith(bytes) + if rv: + self.position += len(bytes) + return rv + + def jumpTo(self, bytes): + """Look for the next sequence of bytes matching a given sequence. If + a match is found advance the position to the last byte of the match""" + newPosition = self[self.position:].find(bytes) + if newPosition > -1: + # XXX: This is ugly, but I can't see a nicer way to fix this. + if self._position == -1: + self._position = 0 + self._position += (newPosition + len(bytes) - 1) + return True + else: + raise StopIteration + + +class EncodingParser(object): + """Mini parser for detecting character encoding from meta elements""" + + def __init__(self, data): + """string - the data to work on for encoding detection""" + self.data = EncodingBytes(data) + self.encoding = None + + def getEncoding(self): + methodDispatch = ( + (b"<!--", self.handleComment), + (b"<meta", self.handleMeta), + (b"</", self.handlePossibleEndTag), + (b"<!", self.handleOther), + (b"<?", self.handleOther), + (b"<", self.handlePossibleStartTag)) + for _ in self.data: + keepParsing = True + for key, method in methodDispatch: + if self.data.matchBytes(key): + try: + keepParsing = method() + break + except StopIteration: + keepParsing = False + break + if not keepParsing: + break + + return self.encoding + + def handleComment(self): + """Skip over comments""" + return self.data.jumpTo(b"-->") + + def handleMeta(self): + if self.data.currentByte not in spaceCharactersBytes: + # if we have <meta not followed by a space so just keep going + return True + # We have a valid meta element we want to search for attributes + hasPragma = False + pendingEncoding = None + while True: + # Try to find the next attribute after the current position + attr = self.getAttribute() + if attr is None: + return True + else: + if attr[0] == b"http-equiv": + hasPragma = attr[1] == b"content-type" + if hasPragma and pendingEncoding is not None: + self.encoding = pendingEncoding + return False + elif attr[0] == b"charset": + tentativeEncoding = attr[1] + codec = lookupEncoding(tentativeEncoding) + if codec is not None: + self.encoding = codec + return False + elif attr[0] == b"content": + contentParser = ContentAttrParser(EncodingBytes(attr[1])) + tentativeEncoding = contentParser.parse() + if tentativeEncoding is not None: + codec = lookupEncoding(tentativeEncoding) + if codec is not None: + if hasPragma: + self.encoding = codec + return False + else: + pendingEncoding = codec + + def handlePossibleStartTag(self): + return self.handlePossibleTag(False) + + def handlePossibleEndTag(self): + next(self.data) + return self.handlePossibleTag(True) + + def handlePossibleTag(self, endTag): + data = self.data + if data.currentByte not in asciiLettersBytes: + # If the next byte is not an ascii letter either ignore this + # fragment (possible start tag case) or treat it according to + # handleOther + if endTag: + data.previous() + self.handleOther() + return True + + c = data.skipUntil(spacesAngleBrackets) + if c == b"<": + # return to the first step in the overall "two step" algorithm + # reprocessing the < byte + data.previous() + else: + # Read all attributes + attr = self.getAttribute() + while attr is not None: + attr = self.getAttribute() + return True + + def handleOther(self): + return self.data.jumpTo(b">") + + def getAttribute(self): + """Return a name,value pair for the next attribute in the stream, + if one is found, or None""" + data = self.data + # Step 1 (skip chars) + c = data.skip(spaceCharactersBytes | frozenset([b"/"])) + assert c is None or len(c) == 1 + # Step 2 + if c in (b">", None): + return None + # Step 3 + attrName = [] + attrValue = [] + # Step 4 attribute name + while True: + if c == b"=" and attrName: + break + elif c in spaceCharactersBytes: + # Step 6! + c = data.skip() + break + elif c in (b"/", b">"): + return b"".join(attrName), b"" + elif c in asciiUppercaseBytes: + attrName.append(c.lower()) + elif c is None: + return None + else: + attrName.append(c) + # Step 5 + c = next(data) + # Step 7 + if c != b"=": + data.previous() + return b"".join(attrName), b"" + # Step 8 + next(data) + # Step 9 + c = data.skip() + # Step 10 + if c in (b"'", b'"'): + # 10.1 + quoteChar = c + while True: + # 10.2 + c = next(data) + # 10.3 + if c == quoteChar: + next(data) + return b"".join(attrName), b"".join(attrValue) + # 10.4 + elif c in asciiUppercaseBytes: + attrValue.append(c.lower()) + # 10.5 + else: + attrValue.append(c) + elif c == b">": + return b"".join(attrName), b"" + elif c in asciiUppercaseBytes: + attrValue.append(c.lower()) + elif c is None: + return None + else: + attrValue.append(c) + # Step 11 + while True: + c = next(data) + if c in spacesAngleBrackets: + return b"".join(attrName), b"".join(attrValue) + elif c in asciiUppercaseBytes: + attrValue.append(c.lower()) + elif c is None: + return None + else: + attrValue.append(c) + + +class ContentAttrParser(object): + def __init__(self, data): + assert isinstance(data, bytes) + self.data = data + + def parse(self): + try: + # Check if the attr name is charset + # otherwise return + self.data.jumpTo(b"charset") + self.data.position += 1 + self.data.skip() + if not self.data.currentByte == b"=": + # If there is no = sign keep looking for attrs + return None + self.data.position += 1 + self.data.skip() + # Look for an encoding between matching quote marks + if self.data.currentByte in (b'"', b"'"): + quoteMark = self.data.currentByte + self.data.position += 1 + oldPosition = self.data.position + if self.data.jumpTo(quoteMark): + return self.data[oldPosition:self.data.position] + else: + return None + else: + # Unquoted value + oldPosition = self.data.position + try: + self.data.skipUntil(spaceCharactersBytes) + return self.data[oldPosition:self.data.position] + except StopIteration: + # Return the whole remaining value + return self.data[oldPosition:] + except StopIteration: + return None + + +def lookupEncoding(encoding): + """Return the python codec name corresponding to an encoding or None if the + string doesn't correspond to a valid encoding.""" + if isinstance(encoding, binary_type): + try: + encoding = encoding.decode("ascii") + except UnicodeDecodeError: + return None + + if encoding is not None: + try: + return webencodings.lookup(encoding) + except AttributeError: + return None + else: + return None diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/_tokenizer.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/_tokenizer.py new file mode 100644 index 00000000..178f6e7f --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/_tokenizer.py @@ -0,0 +1,1721 @@ +from __future__ import absolute_import, division, unicode_literals + +from pip._vendor.six import unichr as chr + +from collections import deque + +from .constants import spaceCharacters +from .constants import entities +from .constants import asciiLetters, asciiUpper2Lower +from .constants import digits, hexDigits, EOF +from .constants import tokenTypes, tagTokenTypes +from .constants import replacementCharacters + +from ._inputstream import HTMLInputStream + +from ._trie import Trie + +entitiesTrie = Trie(entities) + + +class HTMLTokenizer(object): + """ This class takes care of tokenizing HTML. + + * self.currentToken + Holds the token that is currently being processed. + + * self.state + Holds a reference to the method to be invoked... XXX + + * self.stream + Points to HTMLInputStream object. + """ + + def __init__(self, stream, parser=None, **kwargs): + + self.stream = HTMLInputStream(stream, **kwargs) + self.parser = parser + + # Setup the initial tokenizer state + self.escapeFlag = False + self.lastFourChars = [] + self.state = self.dataState + self.escape = False + + # The current token being created + self.currentToken = None + super(HTMLTokenizer, self).__init__() + + def __iter__(self): + """ This is where the magic happens. + + We do our usually processing through the states and when we have a token + to return we yield the token which pauses processing until the next token + is requested. + """ + self.tokenQueue = deque([]) + # Start processing. When EOF is reached self.state will return False + # instead of True and the loop will terminate. + while self.state(): + while self.stream.errors: + yield {"type": tokenTypes["ParseError"], "data": self.stream.errors.pop(0)} + while self.tokenQueue: + yield self.tokenQueue.popleft() + + def consumeNumberEntity(self, isHex): + """This function returns either U+FFFD or the character based on the + decimal or hexadecimal representation. It also discards ";" if present. + If not present self.tokenQueue.append({"type": tokenTypes["ParseError"]}) is invoked. + """ + + allowed = digits + radix = 10 + if isHex: + allowed = hexDigits + radix = 16 + + charStack = [] + + # Consume all the characters that are in range while making sure we + # don't hit an EOF. + c = self.stream.char() + while c in allowed and c is not EOF: + charStack.append(c) + c = self.stream.char() + + # Convert the set of characters consumed to an int. + charAsInt = int("".join(charStack), radix) + + # Certain characters get replaced with others + if charAsInt in replacementCharacters: + char = replacementCharacters[charAsInt] + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "illegal-codepoint-for-numeric-entity", + "datavars": {"charAsInt": charAsInt}}) + elif ((0xD800 <= charAsInt <= 0xDFFF) or + (charAsInt > 0x10FFFF)): + char = "\uFFFD" + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "illegal-codepoint-for-numeric-entity", + "datavars": {"charAsInt": charAsInt}}) + else: + # Should speed up this check somehow (e.g. move the set to a constant) + if ((0x0001 <= charAsInt <= 0x0008) or + (0x000E <= charAsInt <= 0x001F) or + (0x007F <= charAsInt <= 0x009F) or + (0xFDD0 <= charAsInt <= 0xFDEF) or + charAsInt in frozenset([0x000B, 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])): + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": + "illegal-codepoint-for-numeric-entity", + "datavars": {"charAsInt": charAsInt}}) + try: + # Try/except needed as UCS-2 Python builds' unichar only works + # within the BMP. + char = chr(charAsInt) + except ValueError: + v = charAsInt - 0x10000 + char = chr(0xD800 | (v >> 10)) + chr(0xDC00 | (v & 0x3FF)) + + # Discard the ; if present. Otherwise, put it back on the queue and + # invoke parseError on parser. + if c != ";": + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "numeric-entity-without-semicolon"}) + self.stream.unget(c) + + return char + + def consumeEntity(self, allowedChar=None, fromAttribute=False): + # Initialise to the default output for when no entity is matched + output = "&" + + charStack = [self.stream.char()] + if (charStack[0] in spaceCharacters or charStack[0] in (EOF, "<", "&") or + (allowedChar is not None and allowedChar == charStack[0])): + self.stream.unget(charStack[0]) + + elif charStack[0] == "#": + # Read the next character to see if it's hex or decimal + hex = False + charStack.append(self.stream.char()) + if charStack[-1] in ("x", "X"): + hex = True + charStack.append(self.stream.char()) + + # charStack[-1] should be the first digit + if (hex and charStack[-1] in hexDigits) \ + or (not hex and charStack[-1] in digits): + # At least one digit found, so consume the whole number + self.stream.unget(charStack[-1]) + output = self.consumeNumberEntity(hex) + else: + # No digits found + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "expected-numeric-entity"}) + self.stream.unget(charStack.pop()) + output = "&" + "".join(charStack) + + else: + # At this point in the process might have named entity. Entities + # are stored in the global variable "entities". + # + # Consume characters and compare to these to a substring of the + # entity names in the list until the substring no longer matches. + while (charStack[-1] is not EOF): + if not entitiesTrie.has_keys_with_prefix("".join(charStack)): + break + charStack.append(self.stream.char()) + + # At this point we have a string that starts with some characters + # that may match an entity + # Try to find the longest entity the string will match to take care + # of ¬i for instance. + try: + entityName = entitiesTrie.longest_prefix("".join(charStack[:-1])) + entityLength = len(entityName) + except KeyError: + entityName = None + + if entityName is not None: + if entityName[-1] != ";": + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "named-entity-without-semicolon"}) + if (entityName[-1] != ";" and fromAttribute and + (charStack[entityLength] in asciiLetters or + charStack[entityLength] in digits or + charStack[entityLength] == "=")): + self.stream.unget(charStack.pop()) + output = "&" + "".join(charStack) + else: + output = entities[entityName] + self.stream.unget(charStack.pop()) + output += "".join(charStack[entityLength:]) + else: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "expected-named-entity"}) + self.stream.unget(charStack.pop()) + output = "&" + "".join(charStack) + + if fromAttribute: + self.currentToken["data"][-1][1] += output + else: + if output in spaceCharacters: + tokenType = "SpaceCharacters" + else: + tokenType = "Characters" + self.tokenQueue.append({"type": tokenTypes[tokenType], "data": output}) + + def processEntityInAttribute(self, allowedChar): + """This method replaces the need for "entityInAttributeValueState". + """ + self.consumeEntity(allowedChar=allowedChar, fromAttribute=True) + + def emitCurrentToken(self): + """This method is a generic handler for emitting the tags. It also sets + the state to "data" because that's what's needed after a token has been + emitted. + """ + token = self.currentToken + # Add token to the queue to be yielded + if (token["type"] in tagTokenTypes): + token["name"] = token["name"].translate(asciiUpper2Lower) + if token["type"] == tokenTypes["EndTag"]: + if token["data"]: + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "attributes-in-end-tag"}) + if token["selfClosing"]: + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "self-closing-flag-on-end-tag"}) + self.tokenQueue.append(token) + self.state = self.dataState + + # Below are the various tokenizer states worked out. + def dataState(self): + data = self.stream.char() + if data == "&": + self.state = self.entityDataState + elif data == "<": + self.state = self.tagOpenState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.tokenQueue.append({"type": tokenTypes["Characters"], + "data": "\u0000"}) + elif data is EOF: + # Tokenization ends. + return False + elif data in spaceCharacters: + # Directly after emitting a token you switch back to the "data + # state". At that point spaceCharacters are important so they are + # emitted separately. + self.tokenQueue.append({"type": tokenTypes["SpaceCharacters"], "data": + data + self.stream.charsUntil(spaceCharacters, True)}) + # No need to update lastFourChars here, since the first space will + # have already been appended to lastFourChars and will have broken + # any <!-- or --> sequences + else: + chars = self.stream.charsUntil(("&", "<", "\u0000")) + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": + data + chars}) + return True + + def entityDataState(self): + self.consumeEntity() + self.state = self.dataState + return True + + def rcdataState(self): + data = self.stream.char() + if data == "&": + self.state = self.characterReferenceInRcdata + elif data == "<": + self.state = self.rcdataLessThanSignState + elif data == EOF: + # Tokenization ends. + return False + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.tokenQueue.append({"type": tokenTypes["Characters"], + "data": "\uFFFD"}) + elif data in spaceCharacters: + # Directly after emitting a token you switch back to the "data + # state". At that point spaceCharacters are important so they are + # emitted separately. + self.tokenQueue.append({"type": tokenTypes["SpaceCharacters"], "data": + data + self.stream.charsUntil(spaceCharacters, True)}) + # No need to update lastFourChars here, since the first space will + # have already been appended to lastFourChars and will have broken + # any <!-- or --> sequences + else: + chars = self.stream.charsUntil(("&", "<", "\u0000")) + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": + data + chars}) + return True + + def characterReferenceInRcdata(self): + self.consumeEntity() + self.state = self.rcdataState + return True + + def rawtextState(self): + data = self.stream.char() + if data == "<": + self.state = self.rawtextLessThanSignState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.tokenQueue.append({"type": tokenTypes["Characters"], + "data": "\uFFFD"}) + elif data == EOF: + # Tokenization ends. + return False + else: + chars = self.stream.charsUntil(("<", "\u0000")) + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": + data + chars}) + return True + + def scriptDataState(self): + data = self.stream.char() + if data == "<": + self.state = self.scriptDataLessThanSignState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.tokenQueue.append({"type": tokenTypes["Characters"], + "data": "\uFFFD"}) + elif data == EOF: + # Tokenization ends. + return False + else: + chars = self.stream.charsUntil(("<", "\u0000")) + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": + data + chars}) + return True + + def plaintextState(self): + data = self.stream.char() + if data == EOF: + # Tokenization ends. + return False + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.tokenQueue.append({"type": tokenTypes["Characters"], + "data": "\uFFFD"}) + else: + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": + data + self.stream.charsUntil("\u0000")}) + return True + + def tagOpenState(self): + data = self.stream.char() + if data == "!": + self.state = self.markupDeclarationOpenState + elif data == "/": + self.state = self.closeTagOpenState + elif data in asciiLetters: + self.currentToken = {"type": tokenTypes["StartTag"], + "name": data, "data": [], + "selfClosing": False, + "selfClosingAcknowledged": False} + self.state = self.tagNameState + elif data == ">": + # XXX In theory it could be something besides a tag name. But + # do we really care? + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "expected-tag-name-but-got-right-bracket"}) + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "<>"}) + self.state = self.dataState + elif data == "?": + # XXX In theory it could be something besides a tag name. But + # do we really care? + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "expected-tag-name-but-got-question-mark"}) + self.stream.unget(data) + self.state = self.bogusCommentState + else: + # XXX + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "expected-tag-name"}) + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "<"}) + self.stream.unget(data) + self.state = self.dataState + return True + + def closeTagOpenState(self): + data = self.stream.char() + if data in asciiLetters: + self.currentToken = {"type": tokenTypes["EndTag"], "name": data, + "data": [], "selfClosing": False} + self.state = self.tagNameState + elif data == ">": + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "expected-closing-tag-but-got-right-bracket"}) + self.state = self.dataState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "expected-closing-tag-but-got-eof"}) + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "</"}) + self.state = self.dataState + else: + # XXX data can be _'_... + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "expected-closing-tag-but-got-char", + "datavars": {"data": data}}) + self.stream.unget(data) + self.state = self.bogusCommentState + return True + + def tagNameState(self): + data = self.stream.char() + if data in spaceCharacters: + self.state = self.beforeAttributeNameState + elif data == ">": + self.emitCurrentToken() + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-tag-name"}) + self.state = self.dataState + elif data == "/": + self.state = self.selfClosingStartTagState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["name"] += "\uFFFD" + else: + self.currentToken["name"] += data + # (Don't use charsUntil here, because tag names are + # very short and it's faster to not do anything fancy) + return True + + def rcdataLessThanSignState(self): + data = self.stream.char() + if data == "/": + self.temporaryBuffer = "" + self.state = self.rcdataEndTagOpenState + else: + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "<"}) + self.stream.unget(data) + self.state = self.rcdataState + return True + + def rcdataEndTagOpenState(self): + data = self.stream.char() + if data in asciiLetters: + self.temporaryBuffer += data + self.state = self.rcdataEndTagNameState + else: + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "</"}) + self.stream.unget(data) + self.state = self.rcdataState + return True + + def rcdataEndTagNameState(self): + appropriate = self.currentToken and self.currentToken["name"].lower() == self.temporaryBuffer.lower() + data = self.stream.char() + if data in spaceCharacters and appropriate: + self.currentToken = {"type": tokenTypes["EndTag"], + "name": self.temporaryBuffer, + "data": [], "selfClosing": False} + self.state = self.beforeAttributeNameState + elif data == "/" and appropriate: + self.currentToken = {"type": tokenTypes["EndTag"], + "name": self.temporaryBuffer, + "data": [], "selfClosing": False} + self.state = self.selfClosingStartTagState + elif data == ">" and appropriate: + self.currentToken = {"type": tokenTypes["EndTag"], + "name": self.temporaryBuffer, + "data": [], "selfClosing": False} + self.emitCurrentToken() + self.state = self.dataState + elif data in asciiLetters: + self.temporaryBuffer += data + else: + self.tokenQueue.append({"type": tokenTypes["Characters"], + "data": "</" + self.temporaryBuffer}) + self.stream.unget(data) + self.state = self.rcdataState + return True + + def rawtextLessThanSignState(self): + data = self.stream.char() + if data == "/": + self.temporaryBuffer = "" + self.state = self.rawtextEndTagOpenState + else: + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "<"}) + self.stream.unget(data) + self.state = self.rawtextState + return True + + def rawtextEndTagOpenState(self): + data = self.stream.char() + if data in asciiLetters: + self.temporaryBuffer += data + self.state = self.rawtextEndTagNameState + else: + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "</"}) + self.stream.unget(data) + self.state = self.rawtextState + return True + + def rawtextEndTagNameState(self): + appropriate = self.currentToken and self.currentToken["name"].lower() == self.temporaryBuffer.lower() + data = self.stream.char() + if data in spaceCharacters and appropriate: + self.currentToken = {"type": tokenTypes["EndTag"], + "name": self.temporaryBuffer, + "data": [], "selfClosing": False} + self.state = self.beforeAttributeNameState + elif data == "/" and appropriate: + self.currentToken = {"type": tokenTypes["EndTag"], + "name": self.temporaryBuffer, + "data": [], "selfClosing": False} + self.state = self.selfClosingStartTagState + elif data == ">" and appropriate: + self.currentToken = {"type": tokenTypes["EndTag"], + "name": self.temporaryBuffer, + "data": [], "selfClosing": False} + self.emitCurrentToken() + self.state = self.dataState + elif data in asciiLetters: + self.temporaryBuffer += data + else: + self.tokenQueue.append({"type": tokenTypes["Characters"], + "data": "</" + self.temporaryBuffer}) + self.stream.unget(data) + self.state = self.rawtextState + return True + + def scriptDataLessThanSignState(self): + data = self.stream.char() + if data == "/": + self.temporaryBuffer = "" + self.state = self.scriptDataEndTagOpenState + elif data == "!": + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "<!"}) + self.state = self.scriptDataEscapeStartState + else: + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "<"}) + self.stream.unget(data) + self.state = self.scriptDataState + return True + + def scriptDataEndTagOpenState(self): + data = self.stream.char() + if data in asciiLetters: + self.temporaryBuffer += data + self.state = self.scriptDataEndTagNameState + else: + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "</"}) + self.stream.unget(data) + self.state = self.scriptDataState + return True + + def scriptDataEndTagNameState(self): + appropriate = self.currentToken and self.currentToken["name"].lower() == self.temporaryBuffer.lower() + data = self.stream.char() + if data in spaceCharacters and appropriate: + self.currentToken = {"type": tokenTypes["EndTag"], + "name": self.temporaryBuffer, + "data": [], "selfClosing": False} + self.state = self.beforeAttributeNameState + elif data == "/" and appropriate: + self.currentToken = {"type": tokenTypes["EndTag"], + "name": self.temporaryBuffer, + "data": [], "selfClosing": False} + self.state = self.selfClosingStartTagState + elif data == ">" and appropriate: + self.currentToken = {"type": tokenTypes["EndTag"], + "name": self.temporaryBuffer, + "data": [], "selfClosing": False} + self.emitCurrentToken() + self.state = self.dataState + elif data in asciiLetters: + self.temporaryBuffer += data + else: + self.tokenQueue.append({"type": tokenTypes["Characters"], + "data": "</" + self.temporaryBuffer}) + self.stream.unget(data) + self.state = self.scriptDataState + return True + + def scriptDataEscapeStartState(self): + data = self.stream.char() + if data == "-": + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "-"}) + self.state = self.scriptDataEscapeStartDashState + else: + self.stream.unget(data) + self.state = self.scriptDataState + return True + + def scriptDataEscapeStartDashState(self): + data = self.stream.char() + if data == "-": + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "-"}) + self.state = self.scriptDataEscapedDashDashState + else: + self.stream.unget(data) + self.state = self.scriptDataState + return True + + def scriptDataEscapedState(self): + data = self.stream.char() + if data == "-": + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "-"}) + self.state = self.scriptDataEscapedDashState + elif data == "<": + self.state = self.scriptDataEscapedLessThanSignState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.tokenQueue.append({"type": tokenTypes["Characters"], + "data": "\uFFFD"}) + elif data == EOF: + self.state = self.dataState + else: + chars = self.stream.charsUntil(("<", "-", "\u0000")) + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": + data + chars}) + return True + + def scriptDataEscapedDashState(self): + data = self.stream.char() + if data == "-": + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "-"}) + self.state = self.scriptDataEscapedDashDashState + elif data == "<": + self.state = self.scriptDataEscapedLessThanSignState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.tokenQueue.append({"type": tokenTypes["Characters"], + "data": "\uFFFD"}) + self.state = self.scriptDataEscapedState + elif data == EOF: + self.state = self.dataState + else: + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": data}) + self.state = self.scriptDataEscapedState + return True + + def scriptDataEscapedDashDashState(self): + data = self.stream.char() + if data == "-": + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "-"}) + elif data == "<": + self.state = self.scriptDataEscapedLessThanSignState + elif data == ">": + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": ">"}) + self.state = self.scriptDataState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.tokenQueue.append({"type": tokenTypes["Characters"], + "data": "\uFFFD"}) + self.state = self.scriptDataEscapedState + elif data == EOF: + self.state = self.dataState + else: + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": data}) + self.state = self.scriptDataEscapedState + return True + + def scriptDataEscapedLessThanSignState(self): + data = self.stream.char() + if data == "/": + self.temporaryBuffer = "" + self.state = self.scriptDataEscapedEndTagOpenState + elif data in asciiLetters: + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "<" + data}) + self.temporaryBuffer = data + self.state = self.scriptDataDoubleEscapeStartState + else: + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "<"}) + self.stream.unget(data) + self.state = self.scriptDataEscapedState + return True + + def scriptDataEscapedEndTagOpenState(self): + data = self.stream.char() + if data in asciiLetters: + self.temporaryBuffer = data + self.state = self.scriptDataEscapedEndTagNameState + else: + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "</"}) + self.stream.unget(data) + self.state = self.scriptDataEscapedState + return True + + def scriptDataEscapedEndTagNameState(self): + appropriate = self.currentToken and self.currentToken["name"].lower() == self.temporaryBuffer.lower() + data = self.stream.char() + if data in spaceCharacters and appropriate: + self.currentToken = {"type": tokenTypes["EndTag"], + "name": self.temporaryBuffer, + "data": [], "selfClosing": False} + self.state = self.beforeAttributeNameState + elif data == "/" and appropriate: + self.currentToken = {"type": tokenTypes["EndTag"], + "name": self.temporaryBuffer, + "data": [], "selfClosing": False} + self.state = self.selfClosingStartTagState + elif data == ">" and appropriate: + self.currentToken = {"type": tokenTypes["EndTag"], + "name": self.temporaryBuffer, + "data": [], "selfClosing": False} + self.emitCurrentToken() + self.state = self.dataState + elif data in asciiLetters: + self.temporaryBuffer += data + else: + self.tokenQueue.append({"type": tokenTypes["Characters"], + "data": "</" + self.temporaryBuffer}) + self.stream.unget(data) + self.state = self.scriptDataEscapedState + return True + + def scriptDataDoubleEscapeStartState(self): + data = self.stream.char() + if data in (spaceCharacters | frozenset(("/", ">"))): + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": data}) + if self.temporaryBuffer.lower() == "script": + self.state = self.scriptDataDoubleEscapedState + else: + self.state = self.scriptDataEscapedState + elif data in asciiLetters: + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": data}) + self.temporaryBuffer += data + else: + self.stream.unget(data) + self.state = self.scriptDataEscapedState + return True + + def scriptDataDoubleEscapedState(self): + data = self.stream.char() + if data == "-": + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "-"}) + self.state = self.scriptDataDoubleEscapedDashState + elif data == "<": + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "<"}) + self.state = self.scriptDataDoubleEscapedLessThanSignState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.tokenQueue.append({"type": tokenTypes["Characters"], + "data": "\uFFFD"}) + elif data == EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-script-in-script"}) + self.state = self.dataState + else: + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": data}) + return True + + def scriptDataDoubleEscapedDashState(self): + data = self.stream.char() + if data == "-": + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "-"}) + self.state = self.scriptDataDoubleEscapedDashDashState + elif data == "<": + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "<"}) + self.state = self.scriptDataDoubleEscapedLessThanSignState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.tokenQueue.append({"type": tokenTypes["Characters"], + "data": "\uFFFD"}) + self.state = self.scriptDataDoubleEscapedState + elif data == EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-script-in-script"}) + self.state = self.dataState + else: + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": data}) + self.state = self.scriptDataDoubleEscapedState + return True + + def scriptDataDoubleEscapedDashDashState(self): + data = self.stream.char() + if data == "-": + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "-"}) + elif data == "<": + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "<"}) + self.state = self.scriptDataDoubleEscapedLessThanSignState + elif data == ">": + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": ">"}) + self.state = self.scriptDataState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.tokenQueue.append({"type": tokenTypes["Characters"], + "data": "\uFFFD"}) + self.state = self.scriptDataDoubleEscapedState + elif data == EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-script-in-script"}) + self.state = self.dataState + else: + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": data}) + self.state = self.scriptDataDoubleEscapedState + return True + + def scriptDataDoubleEscapedLessThanSignState(self): + data = self.stream.char() + if data == "/": + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "/"}) + self.temporaryBuffer = "" + self.state = self.scriptDataDoubleEscapeEndState + else: + self.stream.unget(data) + self.state = self.scriptDataDoubleEscapedState + return True + + def scriptDataDoubleEscapeEndState(self): + data = self.stream.char() + if data in (spaceCharacters | frozenset(("/", ">"))): + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": data}) + if self.temporaryBuffer.lower() == "script": + self.state = self.scriptDataEscapedState + else: + self.state = self.scriptDataDoubleEscapedState + elif data in asciiLetters: + self.tokenQueue.append({"type": tokenTypes["Characters"], "data": data}) + self.temporaryBuffer += data + else: + self.stream.unget(data) + self.state = self.scriptDataDoubleEscapedState + return True + + def beforeAttributeNameState(self): + data = self.stream.char() + if data in spaceCharacters: + self.stream.charsUntil(spaceCharacters, True) + elif data in asciiLetters: + self.currentToken["data"].append([data, ""]) + self.state = self.attributeNameState + elif data == ">": + self.emitCurrentToken() + elif data == "/": + self.state = self.selfClosingStartTagState + elif data in ("'", '"', "=", "<"): + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "invalid-character-in-attribute-name"}) + self.currentToken["data"].append([data, ""]) + self.state = self.attributeNameState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["data"].append(["\uFFFD", ""]) + self.state = self.attributeNameState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "expected-attribute-name-but-got-eof"}) + self.state = self.dataState + else: + self.currentToken["data"].append([data, ""]) + self.state = self.attributeNameState + return True + + def attributeNameState(self): + data = self.stream.char() + leavingThisState = True + emitToken = False + if data == "=": + self.state = self.beforeAttributeValueState + elif data in asciiLetters: + self.currentToken["data"][-1][0] += data +\ + self.stream.charsUntil(asciiLetters, True) + leavingThisState = False + elif data == ">": + # XXX If we emit here the attributes are converted to a dict + # without being checked and when the code below runs we error + # because data is a dict not a list + emitToken = True + elif data in spaceCharacters: + self.state = self.afterAttributeNameState + elif data == "/": + self.state = self.selfClosingStartTagState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["data"][-1][0] += "\uFFFD" + leavingThisState = False + elif data in ("'", '"', "<"): + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": + "invalid-character-in-attribute-name"}) + self.currentToken["data"][-1][0] += data + leavingThisState = False + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "eof-in-attribute-name"}) + self.state = self.dataState + else: + self.currentToken["data"][-1][0] += data + leavingThisState = False + + if leavingThisState: + # Attributes are not dropped at this stage. That happens when the + # start tag token is emitted so values can still be safely appended + # to attributes, but we do want to report the parse error in time. + self.currentToken["data"][-1][0] = ( + self.currentToken["data"][-1][0].translate(asciiUpper2Lower)) + for name, _ in self.currentToken["data"][:-1]: + if self.currentToken["data"][-1][0] == name: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "duplicate-attribute"}) + break + # XXX Fix for above XXX + if emitToken: + self.emitCurrentToken() + return True + + def afterAttributeNameState(self): + data = self.stream.char() + if data in spaceCharacters: + self.stream.charsUntil(spaceCharacters, True) + elif data == "=": + self.state = self.beforeAttributeValueState + elif data == ">": + self.emitCurrentToken() + elif data in asciiLetters: + self.currentToken["data"].append([data, ""]) + self.state = self.attributeNameState + elif data == "/": + self.state = self.selfClosingStartTagState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["data"].append(["\uFFFD", ""]) + self.state = self.attributeNameState + elif data in ("'", '"', "<"): + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "invalid-character-after-attribute-name"}) + self.currentToken["data"].append([data, ""]) + self.state = self.attributeNameState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "expected-end-of-tag-but-got-eof"}) + self.state = self.dataState + else: + self.currentToken["data"].append([data, ""]) + self.state = self.attributeNameState + return True + + def beforeAttributeValueState(self): + data = self.stream.char() + if data in spaceCharacters: + self.stream.charsUntil(spaceCharacters, True) + elif data == "\"": + self.state = self.attributeValueDoubleQuotedState + elif data == "&": + self.state = self.attributeValueUnQuotedState + self.stream.unget(data) + elif data == "'": + self.state = self.attributeValueSingleQuotedState + elif data == ">": + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "expected-attribute-value-but-got-right-bracket"}) + self.emitCurrentToken() + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["data"][-1][1] += "\uFFFD" + self.state = self.attributeValueUnQuotedState + elif data in ("=", "<", "`"): + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "equals-in-unquoted-attribute-value"}) + self.currentToken["data"][-1][1] += data + self.state = self.attributeValueUnQuotedState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "expected-attribute-value-but-got-eof"}) + self.state = self.dataState + else: + self.currentToken["data"][-1][1] += data + self.state = self.attributeValueUnQuotedState + return True + + def attributeValueDoubleQuotedState(self): + data = self.stream.char() + if data == "\"": + self.state = self.afterAttributeValueState + elif data == "&": + self.processEntityInAttribute('"') + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["data"][-1][1] += "\uFFFD" + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-attribute-value-double-quote"}) + self.state = self.dataState + else: + self.currentToken["data"][-1][1] += data +\ + self.stream.charsUntil(("\"", "&", "\u0000")) + return True + + def attributeValueSingleQuotedState(self): + data = self.stream.char() + if data == "'": + self.state = self.afterAttributeValueState + elif data == "&": + self.processEntityInAttribute("'") + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["data"][-1][1] += "\uFFFD" + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-attribute-value-single-quote"}) + self.state = self.dataState + else: + self.currentToken["data"][-1][1] += data +\ + self.stream.charsUntil(("'", "&", "\u0000")) + return True + + def attributeValueUnQuotedState(self): + data = self.stream.char() + if data in spaceCharacters: + self.state = self.beforeAttributeNameState + elif data == "&": + self.processEntityInAttribute(">") + elif data == ">": + self.emitCurrentToken() + elif data in ('"', "'", "=", "<", "`"): + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-character-in-unquoted-attribute-value"}) + self.currentToken["data"][-1][1] += data + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["data"][-1][1] += "\uFFFD" + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-attribute-value-no-quotes"}) + self.state = self.dataState + else: + self.currentToken["data"][-1][1] += data + self.stream.charsUntil( + frozenset(("&", ">", '"', "'", "=", "<", "`", "\u0000")) | spaceCharacters) + return True + + def afterAttributeValueState(self): + data = self.stream.char() + if data in spaceCharacters: + self.state = self.beforeAttributeNameState + elif data == ">": + self.emitCurrentToken() + elif data == "/": + self.state = self.selfClosingStartTagState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-EOF-after-attribute-value"}) + self.stream.unget(data) + self.state = self.dataState + else: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-character-after-attribute-value"}) + self.stream.unget(data) + self.state = self.beforeAttributeNameState + return True + + def selfClosingStartTagState(self): + data = self.stream.char() + if data == ">": + self.currentToken["selfClosing"] = True + self.emitCurrentToken() + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": + "unexpected-EOF-after-solidus-in-tag"}) + self.stream.unget(data) + self.state = self.dataState + else: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-character-after-solidus-in-tag"}) + self.stream.unget(data) + self.state = self.beforeAttributeNameState + return True + + def bogusCommentState(self): + # Make a new comment token and give it as value all the characters + # until the first > or EOF (charsUntil checks for EOF automatically) + # and emit it. + data = self.stream.charsUntil(">") + data = data.replace("\u0000", "\uFFFD") + self.tokenQueue.append( + {"type": tokenTypes["Comment"], "data": data}) + + # Eat the character directly after the bogus comment which is either a + # ">" or an EOF. + self.stream.char() + self.state = self.dataState + return True + + def markupDeclarationOpenState(self): + charStack = [self.stream.char()] + if charStack[-1] == "-": + charStack.append(self.stream.char()) + if charStack[-1] == "-": + self.currentToken = {"type": tokenTypes["Comment"], "data": ""} + self.state = self.commentStartState + return True + elif charStack[-1] in ('d', 'D'): + matched = True + for expected in (('o', 'O'), ('c', 'C'), ('t', 'T'), + ('y', 'Y'), ('p', 'P'), ('e', 'E')): + charStack.append(self.stream.char()) + if charStack[-1] not in expected: + matched = False + break + if matched: + self.currentToken = {"type": tokenTypes["Doctype"], + "name": "", + "publicId": None, "systemId": None, + "correct": True} + self.state = self.doctypeState + return True + elif (charStack[-1] == "[" and + self.parser is not None and + self.parser.tree.openElements and + self.parser.tree.openElements[-1].namespace != self.parser.tree.defaultNamespace): + matched = True + for expected in ["C", "D", "A", "T", "A", "["]: + charStack.append(self.stream.char()) + if charStack[-1] != expected: + matched = False + break + if matched: + self.state = self.cdataSectionState + return True + + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "expected-dashes-or-doctype"}) + + while charStack: + self.stream.unget(charStack.pop()) + self.state = self.bogusCommentState + return True + + def commentStartState(self): + data = self.stream.char() + if data == "-": + self.state = self.commentStartDashState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["data"] += "\uFFFD" + elif data == ">": + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "incorrect-comment"}) + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-comment"}) + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.currentToken["data"] += data + self.state = self.commentState + return True + + def commentStartDashState(self): + data = self.stream.char() + if data == "-": + self.state = self.commentEndState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["data"] += "-\uFFFD" + elif data == ">": + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "incorrect-comment"}) + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-comment"}) + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.currentToken["data"] += "-" + data + self.state = self.commentState + return True + + def commentState(self): + data = self.stream.char() + if data == "-": + self.state = self.commentEndDashState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["data"] += "\uFFFD" + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "eof-in-comment"}) + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.currentToken["data"] += data + \ + self.stream.charsUntil(("-", "\u0000")) + return True + + def commentEndDashState(self): + data = self.stream.char() + if data == "-": + self.state = self.commentEndState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["data"] += "-\uFFFD" + self.state = self.commentState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-comment-end-dash"}) + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.currentToken["data"] += "-" + data + self.state = self.commentState + return True + + def commentEndState(self): + data = self.stream.char() + if data == ">": + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["data"] += "--\uFFFD" + self.state = self.commentState + elif data == "!": + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-bang-after-double-dash-in-comment"}) + self.state = self.commentEndBangState + elif data == "-": + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-dash-after-double-dash-in-comment"}) + self.currentToken["data"] += data + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-comment-double-dash"}) + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + # XXX + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-char-in-comment"}) + self.currentToken["data"] += "--" + data + self.state = self.commentState + return True + + def commentEndBangState(self): + data = self.stream.char() + if data == ">": + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + elif data == "-": + self.currentToken["data"] += "--!" + self.state = self.commentEndDashState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["data"] += "--!\uFFFD" + self.state = self.commentState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-comment-end-bang-state"}) + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.currentToken["data"] += "--!" + data + self.state = self.commentState + return True + + def doctypeState(self): + data = self.stream.char() + if data in spaceCharacters: + self.state = self.beforeDoctypeNameState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "expected-doctype-name-but-got-eof"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "need-space-after-doctype"}) + self.stream.unget(data) + self.state = self.beforeDoctypeNameState + return True + + def beforeDoctypeNameState(self): + data = self.stream.char() + if data in spaceCharacters: + pass + elif data == ">": + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "expected-doctype-name-but-got-right-bracket"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["name"] = "\uFFFD" + self.state = self.doctypeNameState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "expected-doctype-name-but-got-eof"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.currentToken["name"] = data + self.state = self.doctypeNameState + return True + + def doctypeNameState(self): + data = self.stream.char() + if data in spaceCharacters: + self.currentToken["name"] = self.currentToken["name"].translate(asciiUpper2Lower) + self.state = self.afterDoctypeNameState + elif data == ">": + self.currentToken["name"] = self.currentToken["name"].translate(asciiUpper2Lower) + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["name"] += "\uFFFD" + self.state = self.doctypeNameState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-doctype-name"}) + self.currentToken["correct"] = False + self.currentToken["name"] = self.currentToken["name"].translate(asciiUpper2Lower) + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.currentToken["name"] += data + return True + + def afterDoctypeNameState(self): + data = self.stream.char() + if data in spaceCharacters: + pass + elif data == ">": + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + elif data is EOF: + self.currentToken["correct"] = False + self.stream.unget(data) + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-doctype"}) + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + if data in ("p", "P"): + matched = True + for expected in (("u", "U"), ("b", "B"), ("l", "L"), + ("i", "I"), ("c", "C")): + data = self.stream.char() + if data not in expected: + matched = False + break + if matched: + self.state = self.afterDoctypePublicKeywordState + return True + elif data in ("s", "S"): + matched = True + for expected in (("y", "Y"), ("s", "S"), ("t", "T"), + ("e", "E"), ("m", "M")): + data = self.stream.char() + if data not in expected: + matched = False + break + if matched: + self.state = self.afterDoctypeSystemKeywordState + return True + + # All the characters read before the current 'data' will be + # [a-zA-Z], so they're garbage in the bogus doctype and can be + # discarded; only the latest character might be '>' or EOF + # and needs to be ungetted + self.stream.unget(data) + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "expected-space-or-right-bracket-in-doctype", "datavars": + {"data": data}}) + self.currentToken["correct"] = False + self.state = self.bogusDoctypeState + + return True + + def afterDoctypePublicKeywordState(self): + data = self.stream.char() + if data in spaceCharacters: + self.state = self.beforeDoctypePublicIdentifierState + elif data in ("'", '"'): + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-char-in-doctype"}) + self.stream.unget(data) + self.state = self.beforeDoctypePublicIdentifierState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-doctype"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.stream.unget(data) + self.state = self.beforeDoctypePublicIdentifierState + return True + + def beforeDoctypePublicIdentifierState(self): + data = self.stream.char() + if data in spaceCharacters: + pass + elif data == "\"": + self.currentToken["publicId"] = "" + self.state = self.doctypePublicIdentifierDoubleQuotedState + elif data == "'": + self.currentToken["publicId"] = "" + self.state = self.doctypePublicIdentifierSingleQuotedState + elif data == ">": + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-end-of-doctype"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-doctype"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-char-in-doctype"}) + self.currentToken["correct"] = False + self.state = self.bogusDoctypeState + return True + + def doctypePublicIdentifierDoubleQuotedState(self): + data = self.stream.char() + if data == "\"": + self.state = self.afterDoctypePublicIdentifierState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["publicId"] += "\uFFFD" + elif data == ">": + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-end-of-doctype"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-doctype"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.currentToken["publicId"] += data + return True + + def doctypePublicIdentifierSingleQuotedState(self): + data = self.stream.char() + if data == "'": + self.state = self.afterDoctypePublicIdentifierState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["publicId"] += "\uFFFD" + elif data == ">": + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-end-of-doctype"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-doctype"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.currentToken["publicId"] += data + return True + + def afterDoctypePublicIdentifierState(self): + data = self.stream.char() + if data in spaceCharacters: + self.state = self.betweenDoctypePublicAndSystemIdentifiersState + elif data == ">": + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + elif data == '"': + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-char-in-doctype"}) + self.currentToken["systemId"] = "" + self.state = self.doctypeSystemIdentifierDoubleQuotedState + elif data == "'": + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-char-in-doctype"}) + self.currentToken["systemId"] = "" + self.state = self.doctypeSystemIdentifierSingleQuotedState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-doctype"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-char-in-doctype"}) + self.currentToken["correct"] = False + self.state = self.bogusDoctypeState + return True + + def betweenDoctypePublicAndSystemIdentifiersState(self): + data = self.stream.char() + if data in spaceCharacters: + pass + elif data == ">": + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + elif data == '"': + self.currentToken["systemId"] = "" + self.state = self.doctypeSystemIdentifierDoubleQuotedState + elif data == "'": + self.currentToken["systemId"] = "" + self.state = self.doctypeSystemIdentifierSingleQuotedState + elif data == EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-doctype"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-char-in-doctype"}) + self.currentToken["correct"] = False + self.state = self.bogusDoctypeState + return True + + def afterDoctypeSystemKeywordState(self): + data = self.stream.char() + if data in spaceCharacters: + self.state = self.beforeDoctypeSystemIdentifierState + elif data in ("'", '"'): + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-char-in-doctype"}) + self.stream.unget(data) + self.state = self.beforeDoctypeSystemIdentifierState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-doctype"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.stream.unget(data) + self.state = self.beforeDoctypeSystemIdentifierState + return True + + def beforeDoctypeSystemIdentifierState(self): + data = self.stream.char() + if data in spaceCharacters: + pass + elif data == "\"": + self.currentToken["systemId"] = "" + self.state = self.doctypeSystemIdentifierDoubleQuotedState + elif data == "'": + self.currentToken["systemId"] = "" + self.state = self.doctypeSystemIdentifierSingleQuotedState + elif data == ">": + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-char-in-doctype"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-doctype"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-char-in-doctype"}) + self.currentToken["correct"] = False + self.state = self.bogusDoctypeState + return True + + def doctypeSystemIdentifierDoubleQuotedState(self): + data = self.stream.char() + if data == "\"": + self.state = self.afterDoctypeSystemIdentifierState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["systemId"] += "\uFFFD" + elif data == ">": + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-end-of-doctype"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-doctype"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.currentToken["systemId"] += data + return True + + def doctypeSystemIdentifierSingleQuotedState(self): + data = self.stream.char() + if data == "'": + self.state = self.afterDoctypeSystemIdentifierState + elif data == "\u0000": + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + self.currentToken["systemId"] += "\uFFFD" + elif data == ">": + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-end-of-doctype"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-doctype"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.currentToken["systemId"] += data + return True + + def afterDoctypeSystemIdentifierState(self): + data = self.stream.char() + if data in spaceCharacters: + pass + elif data == ">": + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + elif data is EOF: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "eof-in-doctype"}) + self.currentToken["correct"] = False + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": + "unexpected-char-in-doctype"}) + self.state = self.bogusDoctypeState + return True + + def bogusDoctypeState(self): + data = self.stream.char() + if data == ">": + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + elif data is EOF: + # XXX EMIT + self.stream.unget(data) + self.tokenQueue.append(self.currentToken) + self.state = self.dataState + else: + pass + return True + + def cdataSectionState(self): + data = [] + while True: + data.append(self.stream.charsUntil("]")) + data.append(self.stream.charsUntil(">")) + char = self.stream.char() + if char == EOF: + break + else: + assert char == ">" + if data[-1][-2:] == "]]": + data[-1] = data[-1][:-2] + break + else: + data.append(char) + + data = "".join(data) # pylint:disable=redefined-variable-type + # Deal with null here rather than in the parser + nullCount = data.count("\u0000") + if nullCount > 0: + for _ in range(nullCount): + self.tokenQueue.append({"type": tokenTypes["ParseError"], + "data": "invalid-codepoint"}) + data = data.replace("\u0000", "\uFFFD") + if data: + self.tokenQueue.append({"type": tokenTypes["Characters"], + "data": data}) + self.state = self.dataState + return True diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/_trie/__init__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/_trie/__init__.py new file mode 100644 index 00000000..a5ba4bf1 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/_trie/__init__.py @@ -0,0 +1,14 @@ +from __future__ import absolute_import, division, unicode_literals + +from .py import Trie as PyTrie + +Trie = PyTrie + +# pylint:disable=wrong-import-position +try: + from .datrie import Trie as DATrie +except ImportError: + pass +else: + Trie = DATrie +# pylint:enable=wrong-import-position diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/_trie/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/_trie/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4ea8c7fb901d5e8a8189843ed38daf98325182fe GIT binary patch literal 376 zcmYk1y-ve05XaBX2O*`<p)bIgp-ly1LkJK^upk6TfCaJ|Y*Y(74vtePkHo?Qd1dM= zFkxrnto!-yZ|gn|$K(9vd;YqQ0Dj<~jeLCSy}k2bz>oxm2vV3}6_E%5!z_}qN=S-; zrzGhogR<q748bGR(-`>nM{ceVg!2q_`UE^935)NcNH)GM6p`CoR;`wu<y5Ff8|yMA z)}j@<c9X6aZ<=u`h2>@`+l`+R3gqGkBlt~`yPVSZ&US`VYOsGZQ9$hBaMPPK1nF%b zzLS(K?Qmb5h1`v<hklpFX!8XoEIi=%ytJw*8_~?FPDnOee6A|JIAB2<oUVDzv?*6s q$s;MMl7_-1rJ@#=(s|Rn>{w~mNq!P0Zg)MVcn8N3MiaD)Qv3%<BVgPB literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/_trie/__pycache__/_base.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/_trie/__pycache__/_base.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..087af42eb5891f3560b375622487c8d12f768dbd GIT binary patch literal 1459 zcmZux&u`l{6ecOjmK`VUl3;6wt}w7(bf_Kd$E66e4ePeUFkcd&fUts)MY>i(Sqe#a ziJ@NR4DES;!fw0l58`#F{tG?rJvz<otpfN&JwEb%-}fH%`Sy1A=f4Ke{s;*9o2)${ z%)f?Vz5pYLpo)|<r6o&Q8KeP4A5&o&r4c1R5D|#*nut(F%OGuu=!7J#H?Wf=fxDB9 zO{L~m@}jIOZCxyi7lkRRnY%lm6?r8jSA~^2QzoIV{Zm%g#q4>G+uuD12Oskoj3g-) zBxQo8f!KOQCe)|zq@jpJ>zbsIXp0!$EzuEOc(-4Xkfbqy>bdY#7jp5*H)CUUmfQX~ zGqRtn%$WY9(tQi7W|T9ZjS!IKc9=u>u*A}aEZG@bl9%i?$Z#I(2R3NflAaKcg$i~Z zH|z;PPZErBdUF^aibVEcn2*6sNkg9PzN8I3Bd;M`hYkImU4$p(PXbDGjm@+*zZ7<w zFvkXmj$VShRckpZE_EADc>C4Rmi4eM>PO>wp~R!Zi|M#J{7j(B5B@^VM5TvQTdFTr zF&=WHIONECP+z_692sfzs;rOiA}qw%B8&T|(%@WPnZc2&a;VJl;5IM`U1a99)Vc-H zF2pbwz%fwl&`34WTj1AszyRD1=U!gU6S`XHy<6?T#Kd3-+hH+{*`jls_kSh$7K0yx zxqQ%&GqNO4P&?MJGtdvT>k5$jqWcv3(#wAOeZo8jjTw?ae*iBJzy*NV%eOL!$L&uu z!;uL`z4=PxU07KGq&u{W01rIC_r-1i#xi@rr!Z-tW6oQ;*8srF#}+OV^bkN6^dsmb zpz#oBKu0%hi~Pn8peZ1_zwQBI{ino2)RO)RkwB1*-e6yW<dM#1&!r2LoVoZ%dG(#v zmEPb>i~q9SQ5Ebl_J-#H@<bU3jcLg4(OtUB7JHuSX5<D-yd9q9hcLmSAU-Tf16&Ts z1Peh&P<Cwg4Mc6V*2HU7*xSs;;kQtJ3Y(4p0YC{B_ud1_hhe6Ui#eZVrR3aoIWH?Q zS2*u+elgF~%}SedQRSSkx?>-X_W<>Mn7QqncFm<y5Q3M?8(@LmpndaV-{UY{FsRs0 zCvL}Ge;-Ck8*@+QcCI0}#v7$kDUBT5R$eJ3a|^#eqa$?VLI37i6C*xa5je&|dj<Ac GFZc(Z@=H|! literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/_trie/__pycache__/datrie.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/_trie/__pycache__/datrie.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9fe75033595d0c3f7b817c22507303a7b492c10d GIT binary patch literal 1978 zcmb7F-A*Gn6t>4RlgSVu3+xK|o3^`EqjtlpRd1?Q1>LQxN)<O<6)9q6O=1I+ou6Pk z6wq+9;VJqCz3Bt_wpaTKz3Mrhzy^f2#gUJlWBYuc&yVMu#l?8<uinc)d_w*va}EBJ zE$I3e5P}Grk(~Bv?)AN#^%+H-m-%_n58a$)jXdf{F!w><1bs}&PecSFydWZ!@s#xg z(fE~gqc>oYbeUaF2D;29M)EWtm&({kq{pdF%fhxNMLH~n<XLK@N;2K0)_<W=31id9 z6T{8vSiYfPXo%J>8-vLfbp0C$N%~Zfz9*>gE=ZpVCVUwEniH}S5&REDQ^YVf#F}V{ z#S7Yx#FAJBO;fbRJs4xLB35Bs5DUQnz6!wj&;x-jgpSU723;S6Fl0*3y_4@MI-*nZ zoV@IvGvigvu&Jj%H@=`#`kJ0Rs2Hp*o%@wH3Mzj}DLMLTmmIZsi3x=_YE<47c2<N( zCm(^Wrn9xO=bf|jpb9E7iYoS$9PRBwD1a8*Ia}Y(vd$}csyq2ao6bOXv{7kspe^af zmT76MkIOa&FBjS*#ZW5bZ<{Z`oj)p7D$5cfZ1{W|y>0zbnHDzSA~A^#AQrjqhSt|I z+qZtL93Cc0TLyNmk8>LwC)q^)Nz^)6{%32`<m1h8I(|Huq?vg9<mhlvKKWXp%5{D$ z3sI`gLz8FUX6ay)182Dj#$o7<Pi@3`TBL^a7(KiKg3ypI(U?ZiSG+b|p=XOow|BYo zDmWM<>@GNXz5<7i$g2<>Mt8bYwL#bQ6k1jHQ6TABY{1O6I3JdUNx)s4KLCw(ai?eZ zW`J*3hnS7naJ&X;2!KK?Yf#U!OcpgVt&wklHaLeJoFjuvyw(iQEnI^_xU2hN^1X(v zpWV-{?v&=|e4NQ#7DfseVz{=u?+sM+GZY)=AI!mC`PHqw!>{1gif&xu{-<9TI6sgE z6N>YX=kVIIYhEqx+>Y6TGZ@Jct=>A;p(+gXETlFZE4iPZ+=!~%^64CE)1hK%+!f8P z9VVLNN&b6k4tb4tnNgnr#!YO*eKd!?;jnMBa%V0}Sy>!NZT<&~&w#-fb1YUJi|gm_ zjK6yQJf>6rE>}DR0$<LNSigltZ3Jqyg%3fI<dSn6bDo!ClHnXG^k|Y~^@@5A%>L ze24;5OLb6SRw(qn!mBHUo{Nkt1uQrBwl`to9-4?ot%%jX*o|&|r@Md@_9tedfP%te zR}2My2;hU_-Y&OQEum%^9=qP`q3dbLNB8Ike2{2q8{0oT!;9ZW$3{=<i++z)t|Jg@ KUW>N87W)@#Bd7cT literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/_trie/__pycache__/py.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/_trie/__pycache__/py.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c4484cfaf3d63c1d65cfc560be75369fb3e38b07 GIT binary patch literal 2183 zcma)7Pj4eN6t_KpGMT1rT9$4rU<n{VL2O!qST5CSmxV<_D3`53igslsvD-{LGf8cy zq|xL;`boHP;ml|8mD8TM?}_(3Nw%$4D`w<p`}x`Lz2EbD{(5~qe*RbM#lImT|B!2+ z593GB^v^&95i}(k?a+*MSmt#+iaeJ3S<ngG*h|B#(y74M7eN|j)lN*wk3@u`az#W% z#&fSz711-&tiFU3Nz=2N-JTw%V<UNzjfTqDNF*1DPKLRykMpEI6q2Wjk*b^OCbd-~ zCx)BLk%Y-wFVV7Zcq)(0ON!@F>mR8^_VMuL=fU6+H2oBaBpoV9hY2d!73p}w6F&4{ zt_YzIL`6i<hoUNC=qsWwYGVD0b|SGMHi1(WYheDCir}z51A-s+sOAYY{Sy!aSfPS~ zp3*t_p3Lc->U)L>Z%%)w1uY2oj9;$KaTW+4Xea_xDM0p^!7LI4RE6z6x`rRB!H{Td zyFd!^qCTSr)EGKvzYt2!ncGC$O=e?&G1sP>_oWIz8d$7#VCm#fqG~XIb+~V`(f%kI z-S3T)RNOx}AM}O?UkPNn#xG<phH8Icvh<rY>Fsj^=<bg$TcgWY)x#5+%gIPRTtj<G z<E9P7zr}fyCx-LZVLI$X<Q}$G!qeTyY1%lGm%5RSwQ2NZL&K^0iMB+!AXcr{O;hWm zjIAC)tbb5ysBFMR*K}>D;hIPR(^7!<yZwQLGpv`&+}6tZXqe<igUh~_>9O^3tMj@f z>tM2tmS)E20763O4vknyH)u$w>o;7v5o~nU1siu_I8Vu02*Co}sd@)^O{VssvmV%Z zTWyW={xCOP2oC2c?64zry0uXFdUX|g1m=cP2s(kgMN6ej-35VCGj*D8E3I%ylbrLN zYx-&neQx1@tFk_(<J)v0t{}oWLa=mhg{E713z~psLHF?L-$qltk4|Eot_5+8^Al-6 zU&cAEFZI<I&aD>PE1eY(!-Q}V{2K-Z)P%E0??O+{81!I6ji`@}i!6c+sR}813hArb z(EHEXjLkd~pd`ef72e$U$;_Vxd40*9vyub3NoHZ;n-Hbvpg~;}a9bu{y4}GZfwLi$ z>W?Bktt@$SN=Xq2_AQwO=aXMi3lxpQF9KH_d_1A)wbdrruh64rq~3+jdRiJAL*6T+ ze@o0jVaOGh3kCI^xSIkQCPcGR-qCQR<Z&{wEFD@lNNnKtTAHXWl)s6$<9!HxeGdqs zyEJAs8q*zCcX{KpZCa-_7{_c{buqv+U15*7udo*|S!R#g5GBrtIRi8vK<_PZhT?b{ zEODOsc@2uE<ILI2UmzPeWRC=cXyKX<xI(FQDdM${o`SoWZ0Zvvw=hBA95BtG%$`q? z@fniOku;Iq1j61KbhRr%98u;ahz~$eZv!EKiSLlvW;M0}<LRD5<4wEprpH*0@@^(M zw=w70P>fR?L$x>`chho3y@!T;fCS-J4J02SaiRJGN3YFvBdm1pwW`8EZvcsCRE@my zkMFv*c5@At9*@mffl`H~MtMl^z3FVigV0($1}&XT+;d{X^7(bQ3aW9htED^4Rvv%% Z1buyzDK<JRU3-WnP2)3q2d)eJ-hZpm)VTlv literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/_trie/_base.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/_trie/_base.py new file mode 100644 index 00000000..a1158bbb --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/_trie/_base.py @@ -0,0 +1,37 @@ +from __future__ import absolute_import, division, unicode_literals + +from collections import Mapping + + +class Trie(Mapping): + """Abstract base class for tries""" + + def keys(self, prefix=None): + # pylint:disable=arguments-differ + keys = super(Trie, self).keys() + + if prefix is None: + return set(keys) + + return {x for x in keys if x.startswith(prefix)} + + def has_keys_with_prefix(self, prefix): + for key in self.keys(): + if key.startswith(prefix): + return True + + return False + + def longest_prefix(self, prefix): + if prefix in self: + return prefix + + for i in range(1, len(prefix) + 1): + if prefix[:-i] in self: + return prefix[:-i] + + raise KeyError(prefix) + + def longest_prefix_item(self, prefix): + lprefix = self.longest_prefix(prefix) + return (lprefix, self[lprefix]) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/_trie/datrie.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/_trie/datrie.py new file mode 100644 index 00000000..e2e5f866 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/_trie/datrie.py @@ -0,0 +1,44 @@ +from __future__ import absolute_import, division, unicode_literals + +from datrie import Trie as DATrie +from pip._vendor.six import text_type + +from ._base import Trie as ABCTrie + + +class Trie(ABCTrie): + def __init__(self, data): + chars = set() + for key in data.keys(): + if not isinstance(key, text_type): + raise TypeError("All keys must be strings") + for char in key: + chars.add(char) + + self._data = DATrie("".join(chars)) + for key, value in data.items(): + self._data[key] = value + + def __contains__(self, key): + return key in self._data + + def __len__(self): + return len(self._data) + + def __iter__(self): + raise NotImplementedError() + + def __getitem__(self, key): + return self._data[key] + + def keys(self, prefix=None): + return self._data.keys(prefix) + + def has_keys_with_prefix(self, prefix): + return self._data.has_keys_with_prefix(prefix) + + def longest_prefix(self, prefix): + return self._data.longest_prefix(prefix) + + def longest_prefix_item(self, prefix): + return self._data.longest_prefix_item(prefix) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/_trie/py.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/_trie/py.py new file mode 100644 index 00000000..c178b219 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/_trie/py.py @@ -0,0 +1,67 @@ +from __future__ import absolute_import, division, unicode_literals +from pip._vendor.six import text_type + +from bisect import bisect_left + +from ._base import Trie as ABCTrie + + +class Trie(ABCTrie): + def __init__(self, data): + if not all(isinstance(x, text_type) for x in data.keys()): + raise TypeError("All keys must be strings") + + self._data = data + self._keys = sorted(data.keys()) + self._cachestr = "" + self._cachepoints = (0, len(data)) + + def __contains__(self, key): + return key in self._data + + def __len__(self): + return len(self._data) + + def __iter__(self): + return iter(self._data) + + def __getitem__(self, key): + return self._data[key] + + def keys(self, prefix=None): + if prefix is None or prefix == "" or not self._keys: + return set(self._keys) + + if prefix.startswith(self._cachestr): + lo, hi = self._cachepoints + start = i = bisect_left(self._keys, prefix, lo, hi) + else: + start = i = bisect_left(self._keys, prefix) + + keys = set() + if start == len(self._keys): + return keys + + while self._keys[i].startswith(prefix): + keys.add(self._keys[i]) + i += 1 + + self._cachestr = prefix + self._cachepoints = (start, i) + + return keys + + def has_keys_with_prefix(self, prefix): + if prefix in self._data: + return True + + if prefix.startswith(self._cachestr): + lo, hi = self._cachepoints + i = bisect_left(self._keys, prefix, lo, hi) + else: + i = bisect_left(self._keys, prefix) + + if i == len(self._keys): + return False + + return self._keys[i].startswith(prefix) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/_utils.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/_utils.py new file mode 100644 index 00000000..0703afb3 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/_utils.py @@ -0,0 +1,124 @@ +from __future__ import absolute_import, division, unicode_literals + +from types import ModuleType + +from pip._vendor.six import text_type + +try: + import xml.etree.cElementTree as default_etree +except ImportError: + import xml.etree.ElementTree as default_etree + + +__all__ = ["default_etree", "MethodDispatcher", "isSurrogatePair", + "surrogatePairToCodepoint", "moduleFactoryFactory", + "supports_lone_surrogates"] + + +# Platforms not supporting lone surrogates (\uD800-\uDFFF) should be +# caught by the below test. In general this would be any platform +# using UTF-16 as its encoding of unicode strings, such as +# Jython. This is because UTF-16 itself is based on the use of such +# surrogates, and there is no mechanism to further escape such +# escapes. +try: + _x = eval('"\\uD800"') # pylint:disable=eval-used + if not isinstance(_x, text_type): + # We need this with u"" because of http://bugs.jython.org/issue2039 + _x = eval('u"\\uD800"') # pylint:disable=eval-used + assert isinstance(_x, text_type) +except: # pylint:disable=bare-except + supports_lone_surrogates = False +else: + supports_lone_surrogates = True + + +class MethodDispatcher(dict): + """Dict with 2 special properties: + + On initiation, keys that are lists, sets or tuples are converted to + multiple keys so accessing any one of the items in the original + list-like object returns the matching value + + md = MethodDispatcher({("foo", "bar"):"baz"}) + md["foo"] == "baz" + + A default value which can be set through the default attribute. + """ + + def __init__(self, items=()): + # Using _dictEntries instead of directly assigning to self is about + # twice as fast. Please do careful performance testing before changing + # anything here. + _dictEntries = [] + for name, value in items: + if isinstance(name, (list, tuple, frozenset, set)): + for item in name: + _dictEntries.append((item, value)) + else: + _dictEntries.append((name, value)) + dict.__init__(self, _dictEntries) + assert len(self) == len(_dictEntries) + self.default = None + + def __getitem__(self, key): + return dict.get(self, key, self.default) + + +# Some utility functions to deal with weirdness around UCS2 vs UCS4 +# python builds + +def isSurrogatePair(data): + return (len(data) == 2 and + ord(data[0]) >= 0xD800 and ord(data[0]) <= 0xDBFF and + ord(data[1]) >= 0xDC00 and ord(data[1]) <= 0xDFFF) + + +def surrogatePairToCodepoint(data): + char_val = (0x10000 + (ord(data[0]) - 0xD800) * 0x400 + + (ord(data[1]) - 0xDC00)) + return char_val + +# Module Factory Factory (no, this isn't Java, I know) +# Here to stop this being duplicated all over the place. + + +def moduleFactoryFactory(factory): + moduleCache = {} + + def moduleFactory(baseModule, *args, **kwargs): + if isinstance(ModuleType.__name__, type("")): + name = "_%s_factory" % baseModule.__name__ + else: + name = b"_%s_factory" % baseModule.__name__ + + kwargs_tuple = tuple(kwargs.items()) + + try: + return moduleCache[name][args][kwargs_tuple] + except KeyError: + mod = ModuleType(name) + objs = factory(baseModule, *args, **kwargs) + mod.__dict__.update(objs) + if "name" not in moduleCache: + moduleCache[name] = {} + if "args" not in moduleCache[name]: + moduleCache[name][args] = {} + if "kwargs" not in moduleCache[name][args]: + moduleCache[name][args][kwargs_tuple] = {} + moduleCache[name][args][kwargs_tuple] = mod + return mod + + return moduleFactory + + +def memoize(func): + cache = {} + + def wrapped(*args, **kwargs): + key = (tuple(args), tuple(kwargs.items())) + if key not in cache: + cache[key] = func(*args, **kwargs) + return cache[key] + + return wrapped diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/constants.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/constants.py new file mode 100644 index 00000000..1ff80419 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/constants.py @@ -0,0 +1,2947 @@ +from __future__ import absolute_import, division, unicode_literals + +import string + +EOF = None + +E = { + "null-character": + "Null character in input stream, replaced with U+FFFD.", + "invalid-codepoint": + "Invalid codepoint in stream.", + "incorrectly-placed-solidus": + "Solidus (/) incorrectly placed in tag.", + "incorrect-cr-newline-entity": + "Incorrect CR newline entity, replaced with LF.", + "illegal-windows-1252-entity": + "Entity used with illegal number (windows-1252 reference).", + "cant-convert-numeric-entity": + "Numeric entity couldn't be converted to character " + "(codepoint U+%(charAsInt)08x).", + "illegal-codepoint-for-numeric-entity": + "Numeric entity represents an illegal codepoint: " + "U+%(charAsInt)08x.", + "numeric-entity-without-semicolon": + "Numeric entity didn't end with ';'.", + "expected-numeric-entity-but-got-eof": + "Numeric entity expected. Got end of file instead.", + "expected-numeric-entity": + "Numeric entity expected but none found.", + "named-entity-without-semicolon": + "Named entity didn't end with ';'.", + "expected-named-entity": + "Named entity expected. Got none.", + "attributes-in-end-tag": + "End tag contains unexpected attributes.", + 'self-closing-flag-on-end-tag': + "End tag contains unexpected self-closing flag.", + "expected-tag-name-but-got-right-bracket": + "Expected tag name. Got '>' instead.", + "expected-tag-name-but-got-question-mark": + "Expected tag name. Got '?' instead. (HTML doesn't " + "support processing instructions.)", + "expected-tag-name": + "Expected tag name. Got something else instead", + "expected-closing-tag-but-got-right-bracket": + "Expected closing tag. Got '>' instead. Ignoring '</>'.", + "expected-closing-tag-but-got-eof": + "Expected closing tag. Unexpected end of file.", + "expected-closing-tag-but-got-char": + "Expected closing tag. Unexpected character '%(data)s' found.", + "eof-in-tag-name": + "Unexpected end of file in the tag name.", + "expected-attribute-name-but-got-eof": + "Unexpected end of file. Expected attribute name instead.", + "eof-in-attribute-name": + "Unexpected end of file in attribute name.", + "invalid-character-in-attribute-name": + "Invalid character in attribute name", + "duplicate-attribute": + "Dropped duplicate attribute on tag.", + "expected-end-of-tag-name-but-got-eof": + "Unexpected end of file. Expected = or end of tag.", + "expected-attribute-value-but-got-eof": + "Unexpected end of file. Expected attribute value.", + "expected-attribute-value-but-got-right-bracket": + "Expected attribute value. Got '>' instead.", + 'equals-in-unquoted-attribute-value': + "Unexpected = in unquoted attribute", + 'unexpected-character-in-unquoted-attribute-value': + "Unexpected character in unquoted attribute", + "invalid-character-after-attribute-name": + "Unexpected character after attribute name.", + "unexpected-character-after-attribute-value": + "Unexpected character after attribute value.", + "eof-in-attribute-value-double-quote": + "Unexpected end of file in attribute value (\").", + "eof-in-attribute-value-single-quote": + "Unexpected end of file in attribute value (').", + "eof-in-attribute-value-no-quotes": + "Unexpected end of file in attribute value.", + "unexpected-EOF-after-solidus-in-tag": + "Unexpected end of file in tag. Expected >", + "unexpected-character-after-solidus-in-tag": + "Unexpected character after / in tag. Expected >", + "expected-dashes-or-doctype": + "Expected '--' or 'DOCTYPE'. Not found.", + "unexpected-bang-after-double-dash-in-comment": + "Unexpected ! after -- in comment", + "unexpected-space-after-double-dash-in-comment": + "Unexpected space after -- in comment", + "incorrect-comment": + "Incorrect comment.", + "eof-in-comment": + "Unexpected end of file in comment.", + "eof-in-comment-end-dash": + "Unexpected end of file in comment (-)", + "unexpected-dash-after-double-dash-in-comment": + "Unexpected '-' after '--' found in comment.", + "eof-in-comment-double-dash": + "Unexpected end of file in comment (--).", + "eof-in-comment-end-space-state": + "Unexpected end of file in comment.", + "eof-in-comment-end-bang-state": + "Unexpected end of file in comment.", + "unexpected-char-in-comment": + "Unexpected character in comment found.", + "need-space-after-doctype": + "No space after literal string 'DOCTYPE'.", + "expected-doctype-name-but-got-right-bracket": + "Unexpected > character. Expected DOCTYPE name.", + "expected-doctype-name-but-got-eof": + "Unexpected end of file. Expected DOCTYPE name.", + "eof-in-doctype-name": + "Unexpected end of file in DOCTYPE name.", + "eof-in-doctype": + "Unexpected end of file in DOCTYPE.", + "expected-space-or-right-bracket-in-doctype": + "Expected space or '>'. Got '%(data)s'", + "unexpected-end-of-doctype": + "Unexpected end of DOCTYPE.", + "unexpected-char-in-doctype": + "Unexpected character in DOCTYPE.", + "eof-in-innerhtml": + "XXX innerHTML EOF", + "unexpected-doctype": + "Unexpected DOCTYPE. Ignored.", + "non-html-root": + "html needs to be the first start tag.", + "expected-doctype-but-got-eof": + "Unexpected End of file. Expected DOCTYPE.", + "unknown-doctype": + "Erroneous DOCTYPE.", + "expected-doctype-but-got-chars": + "Unexpected non-space characters. Expected DOCTYPE.", + "expected-doctype-but-got-start-tag": + "Unexpected start tag (%(name)s). Expected DOCTYPE.", + "expected-doctype-but-got-end-tag": + "Unexpected end tag (%(name)s). Expected DOCTYPE.", + "end-tag-after-implied-root": + "Unexpected end tag (%(name)s) after the (implied) root element.", + "expected-named-closing-tag-but-got-eof": + "Unexpected end of file. Expected end tag (%(name)s).", + "two-heads-are-not-better-than-one": + "Unexpected start tag head in existing head. Ignored.", + "unexpected-end-tag": + "Unexpected end tag (%(name)s). Ignored.", + "unexpected-start-tag-out-of-my-head": + "Unexpected start tag (%(name)s) that can be in head. Moved.", + "unexpected-start-tag": + "Unexpected start tag (%(name)s).", + "missing-end-tag": + "Missing end tag (%(name)s).", + "missing-end-tags": + "Missing end tags (%(name)s).", + "unexpected-start-tag-implies-end-tag": + "Unexpected start tag (%(startName)s) " + "implies end tag (%(endName)s).", + "unexpected-start-tag-treated-as": + "Unexpected start tag (%(originalName)s). Treated as %(newName)s.", + "deprecated-tag": + "Unexpected start tag %(name)s. Don't use it!", + "unexpected-start-tag-ignored": + "Unexpected start tag %(name)s. Ignored.", + "expected-one-end-tag-but-got-another": + "Unexpected end tag (%(gotName)s). " + "Missing end tag (%(expectedName)s).", + "end-tag-too-early": + "End tag (%(name)s) seen too early. Expected other end tag.", + "end-tag-too-early-named": + "Unexpected end tag (%(gotName)s). Expected end tag (%(expectedName)s).", + "end-tag-too-early-ignored": + "End tag (%(name)s) seen too early. Ignored.", + "adoption-agency-1.1": + "End tag (%(name)s) violates step 1, " + "paragraph 1 of the adoption agency algorithm.", + "adoption-agency-1.2": + "End tag (%(name)s) violates step 1, " + "paragraph 2 of the adoption agency algorithm.", + "adoption-agency-1.3": + "End tag (%(name)s) violates step 1, " + "paragraph 3 of the adoption agency algorithm.", + "adoption-agency-4.4": + "End tag (%(name)s) violates step 4, " + "paragraph 4 of the adoption agency algorithm.", + "unexpected-end-tag-treated-as": + "Unexpected end tag (%(originalName)s). Treated as %(newName)s.", + "no-end-tag": + "This element (%(name)s) has no end tag.", + "unexpected-implied-end-tag-in-table": + "Unexpected implied end tag (%(name)s) in the table phase.", + "unexpected-implied-end-tag-in-table-body": + "Unexpected implied end tag (%(name)s) in the table body phase.", + "unexpected-char-implies-table-voodoo": + "Unexpected non-space characters in " + "table context caused voodoo mode.", + "unexpected-hidden-input-in-table": + "Unexpected input with type hidden in table context.", + "unexpected-form-in-table": + "Unexpected form in table context.", + "unexpected-start-tag-implies-table-voodoo": + "Unexpected start tag (%(name)s) in " + "table context caused voodoo mode.", + "unexpected-end-tag-implies-table-voodoo": + "Unexpected end tag (%(name)s) in " + "table context caused voodoo mode.", + "unexpected-cell-in-table-body": + "Unexpected table cell start tag (%(name)s) " + "in the table body phase.", + "unexpected-cell-end-tag": + "Got table cell end tag (%(name)s) " + "while required end tags are missing.", + "unexpected-end-tag-in-table-body": + "Unexpected end tag (%(name)s) in the table body phase. Ignored.", + "unexpected-implied-end-tag-in-table-row": + "Unexpected implied end tag (%(name)s) in the table row phase.", + "unexpected-end-tag-in-table-row": + "Unexpected end tag (%(name)s) in the table row phase. Ignored.", + "unexpected-select-in-select": + "Unexpected select start tag in the select phase " + "treated as select end tag.", + "unexpected-input-in-select": + "Unexpected input start tag in the select phase.", + "unexpected-start-tag-in-select": + "Unexpected start tag token (%(name)s in the select phase. " + "Ignored.", + "unexpected-end-tag-in-select": + "Unexpected end tag (%(name)s) in the select phase. Ignored.", + "unexpected-table-element-start-tag-in-select-in-table": + "Unexpected table element start tag (%(name)s) in the select in table phase.", + "unexpected-table-element-end-tag-in-select-in-table": + "Unexpected table element end tag (%(name)s) in the select in table phase.", + "unexpected-char-after-body": + "Unexpected non-space characters in the after body phase.", + "unexpected-start-tag-after-body": + "Unexpected start tag token (%(name)s)" + " in the after body phase.", + "unexpected-end-tag-after-body": + "Unexpected end tag token (%(name)s)" + " in the after body phase.", + "unexpected-char-in-frameset": + "Unexpected characters in the frameset phase. Characters ignored.", + "unexpected-start-tag-in-frameset": + "Unexpected start tag token (%(name)s)" + " in the frameset phase. Ignored.", + "unexpected-frameset-in-frameset-innerhtml": + "Unexpected end tag token (frameset) " + "in the frameset phase (innerHTML).", + "unexpected-end-tag-in-frameset": + "Unexpected end tag token (%(name)s)" + " in the frameset phase. Ignored.", + "unexpected-char-after-frameset": + "Unexpected non-space characters in the " + "after frameset phase. Ignored.", + "unexpected-start-tag-after-frameset": + "Unexpected start tag (%(name)s)" + " in the after frameset phase. Ignored.", + "unexpected-end-tag-after-frameset": + "Unexpected end tag (%(name)s)" + " in the after frameset phase. Ignored.", + "unexpected-end-tag-after-body-innerhtml": + "Unexpected end tag after body(innerHtml)", + "expected-eof-but-got-char": + "Unexpected non-space characters. Expected end of file.", + "expected-eof-but-got-start-tag": + "Unexpected start tag (%(name)s)" + ". Expected end of file.", + "expected-eof-but-got-end-tag": + "Unexpected end tag (%(name)s)" + ". Expected end of file.", + "eof-in-table": + "Unexpected end of file. Expected table content.", + "eof-in-select": + "Unexpected end of file. Expected select content.", + "eof-in-frameset": + "Unexpected end of file. Expected frameset content.", + "eof-in-script-in-script": + "Unexpected end of file. Expected script content.", + "eof-in-foreign-lands": + "Unexpected end of file. Expected foreign content", + "non-void-element-with-trailing-solidus": + "Trailing solidus not allowed on element %(name)s", + "unexpected-html-element-in-foreign-content": + "Element %(name)s not allowed in a non-html context", + "unexpected-end-tag-before-html": + "Unexpected end tag (%(name)s) before html.", + "unexpected-inhead-noscript-tag": + "Element %(name)s not allowed in a inhead-noscript context", + "eof-in-head-noscript": + "Unexpected end of file. Expected inhead-noscript content", + "char-in-head-noscript": + "Unexpected non-space character. Expected inhead-noscript content", + "XXX-undefined-error": + "Undefined error (this sucks and should be fixed)", +} + +namespaces = { + "html": "http://www.w3.org/1999/xhtml", + "mathml": "http://www.w3.org/1998/Math/MathML", + "svg": "http://www.w3.org/2000/svg", + "xlink": "http://www.w3.org/1999/xlink", + "xml": "http://www.w3.org/XML/1998/namespace", + "xmlns": "http://www.w3.org/2000/xmlns/" +} + +scopingElements = frozenset([ + (namespaces["html"], "applet"), + (namespaces["html"], "caption"), + (namespaces["html"], "html"), + (namespaces["html"], "marquee"), + (namespaces["html"], "object"), + (namespaces["html"], "table"), + (namespaces["html"], "td"), + (namespaces["html"], "th"), + (namespaces["mathml"], "mi"), + (namespaces["mathml"], "mo"), + (namespaces["mathml"], "mn"), + (namespaces["mathml"], "ms"), + (namespaces["mathml"], "mtext"), + (namespaces["mathml"], "annotation-xml"), + (namespaces["svg"], "foreignObject"), + (namespaces["svg"], "desc"), + (namespaces["svg"], "title"), +]) + +formattingElements = frozenset([ + (namespaces["html"], "a"), + (namespaces["html"], "b"), + (namespaces["html"], "big"), + (namespaces["html"], "code"), + (namespaces["html"], "em"), + (namespaces["html"], "font"), + (namespaces["html"], "i"), + (namespaces["html"], "nobr"), + (namespaces["html"], "s"), + (namespaces["html"], "small"), + (namespaces["html"], "strike"), + (namespaces["html"], "strong"), + (namespaces["html"], "tt"), + (namespaces["html"], "u") +]) + +specialElements = frozenset([ + (namespaces["html"], "address"), + (namespaces["html"], "applet"), + (namespaces["html"], "area"), + (namespaces["html"], "article"), + (namespaces["html"], "aside"), + (namespaces["html"], "base"), + (namespaces["html"], "basefont"), + (namespaces["html"], "bgsound"), + (namespaces["html"], "blockquote"), + (namespaces["html"], "body"), + (namespaces["html"], "br"), + (namespaces["html"], "button"), + (namespaces["html"], "caption"), + (namespaces["html"], "center"), + (namespaces["html"], "col"), + (namespaces["html"], "colgroup"), + (namespaces["html"], "command"), + (namespaces["html"], "dd"), + (namespaces["html"], "details"), + (namespaces["html"], "dir"), + (namespaces["html"], "div"), + (namespaces["html"], "dl"), + (namespaces["html"], "dt"), + (namespaces["html"], "embed"), + (namespaces["html"], "fieldset"), + (namespaces["html"], "figure"), + (namespaces["html"], "footer"), + (namespaces["html"], "form"), + (namespaces["html"], "frame"), + (namespaces["html"], "frameset"), + (namespaces["html"], "h1"), + (namespaces["html"], "h2"), + (namespaces["html"], "h3"), + (namespaces["html"], "h4"), + (namespaces["html"], "h5"), + (namespaces["html"], "h6"), + (namespaces["html"], "head"), + (namespaces["html"], "header"), + (namespaces["html"], "hr"), + (namespaces["html"], "html"), + (namespaces["html"], "iframe"), + # Note that image is commented out in the spec as "this isn't an + # element that can end up on the stack, so it doesn't matter," + (namespaces["html"], "image"), + (namespaces["html"], "img"), + (namespaces["html"], "input"), + (namespaces["html"], "isindex"), + (namespaces["html"], "li"), + (namespaces["html"], "link"), + (namespaces["html"], "listing"), + (namespaces["html"], "marquee"), + (namespaces["html"], "menu"), + (namespaces["html"], "meta"), + (namespaces["html"], "nav"), + (namespaces["html"], "noembed"), + (namespaces["html"], "noframes"), + (namespaces["html"], "noscript"), + (namespaces["html"], "object"), + (namespaces["html"], "ol"), + (namespaces["html"], "p"), + (namespaces["html"], "param"), + (namespaces["html"], "plaintext"), + (namespaces["html"], "pre"), + (namespaces["html"], "script"), + (namespaces["html"], "section"), + (namespaces["html"], "select"), + (namespaces["html"], "style"), + (namespaces["html"], "table"), + (namespaces["html"], "tbody"), + (namespaces["html"], "td"), + (namespaces["html"], "textarea"), + (namespaces["html"], "tfoot"), + (namespaces["html"], "th"), + (namespaces["html"], "thead"), + (namespaces["html"], "title"), + (namespaces["html"], "tr"), + (namespaces["html"], "ul"), + (namespaces["html"], "wbr"), + (namespaces["html"], "xmp"), + (namespaces["svg"], "foreignObject") +]) + +htmlIntegrationPointElements = frozenset([ + (namespaces["mathml"], "annotation-xml"), + (namespaces["svg"], "foreignObject"), + (namespaces["svg"], "desc"), + (namespaces["svg"], "title") +]) + +mathmlTextIntegrationPointElements = frozenset([ + (namespaces["mathml"], "mi"), + (namespaces["mathml"], "mo"), + (namespaces["mathml"], "mn"), + (namespaces["mathml"], "ms"), + (namespaces["mathml"], "mtext") +]) + +adjustSVGAttributes = { + "attributename": "attributeName", + "attributetype": "attributeType", + "basefrequency": "baseFrequency", + "baseprofile": "baseProfile", + "calcmode": "calcMode", + "clippathunits": "clipPathUnits", + "contentscripttype": "contentScriptType", + "contentstyletype": "contentStyleType", + "diffuseconstant": "diffuseConstant", + "edgemode": "edgeMode", + "externalresourcesrequired": "externalResourcesRequired", + "filterres": "filterRes", + "filterunits": "filterUnits", + "glyphref": "glyphRef", + "gradienttransform": "gradientTransform", + "gradientunits": "gradientUnits", + "kernelmatrix": "kernelMatrix", + "kernelunitlength": "kernelUnitLength", + "keypoints": "keyPoints", + "keysplines": "keySplines", + "keytimes": "keyTimes", + "lengthadjust": "lengthAdjust", + "limitingconeangle": "limitingConeAngle", + "markerheight": "markerHeight", + "markerunits": "markerUnits", + "markerwidth": "markerWidth", + "maskcontentunits": "maskContentUnits", + "maskunits": "maskUnits", + "numoctaves": "numOctaves", + "pathlength": "pathLength", + "patterncontentunits": "patternContentUnits", + "patterntransform": "patternTransform", + "patternunits": "patternUnits", + "pointsatx": "pointsAtX", + "pointsaty": "pointsAtY", + "pointsatz": "pointsAtZ", + "preservealpha": "preserveAlpha", + "preserveaspectratio": "preserveAspectRatio", + "primitiveunits": "primitiveUnits", + "refx": "refX", + "refy": "refY", + "repeatcount": "repeatCount", + "repeatdur": "repeatDur", + "requiredextensions": "requiredExtensions", + "requiredfeatures": "requiredFeatures", + "specularconstant": "specularConstant", + "specularexponent": "specularExponent", + "spreadmethod": "spreadMethod", + "startoffset": "startOffset", + "stddeviation": "stdDeviation", + "stitchtiles": "stitchTiles", + "surfacescale": "surfaceScale", + "systemlanguage": "systemLanguage", + "tablevalues": "tableValues", + "targetx": "targetX", + "targety": "targetY", + "textlength": "textLength", + "viewbox": "viewBox", + "viewtarget": "viewTarget", + "xchannelselector": "xChannelSelector", + "ychannelselector": "yChannelSelector", + "zoomandpan": "zoomAndPan" +} + +adjustMathMLAttributes = {"definitionurl": "definitionURL"} + +adjustForeignAttributes = { + "xlink:actuate": ("xlink", "actuate", namespaces["xlink"]), + "xlink:arcrole": ("xlink", "arcrole", namespaces["xlink"]), + "xlink:href": ("xlink", "href", namespaces["xlink"]), + "xlink:role": ("xlink", "role", namespaces["xlink"]), + "xlink:show": ("xlink", "show", namespaces["xlink"]), + "xlink:title": ("xlink", "title", namespaces["xlink"]), + "xlink:type": ("xlink", "type", namespaces["xlink"]), + "xml:base": ("xml", "base", namespaces["xml"]), + "xml:lang": ("xml", "lang", namespaces["xml"]), + "xml:space": ("xml", "space", namespaces["xml"]), + "xmlns": (None, "xmlns", namespaces["xmlns"]), + "xmlns:xlink": ("xmlns", "xlink", namespaces["xmlns"]) +} + +unadjustForeignAttributes = dict([((ns, local), qname) for qname, (prefix, local, ns) in + adjustForeignAttributes.items()]) + +spaceCharacters = frozenset([ + "\t", + "\n", + "\u000C", + " ", + "\r" +]) + +tableInsertModeElements = frozenset([ + "table", + "tbody", + "tfoot", + "thead", + "tr" +]) + +asciiLowercase = frozenset(string.ascii_lowercase) +asciiUppercase = frozenset(string.ascii_uppercase) +asciiLetters = frozenset(string.ascii_letters) +digits = frozenset(string.digits) +hexDigits = frozenset(string.hexdigits) + +asciiUpper2Lower = dict([(ord(c), ord(c.lower())) + for c in string.ascii_uppercase]) + +# Heading elements need to be ordered +headingElements = ( + "h1", + "h2", + "h3", + "h4", + "h5", + "h6" +) + +voidElements = frozenset([ + "base", + "command", + "event-source", + "link", + "meta", + "hr", + "br", + "img", + "embed", + "param", + "area", + "col", + "input", + "source", + "track" +]) + +cdataElements = frozenset(['title', 'textarea']) + +rcdataElements = frozenset([ + 'style', + 'script', + 'xmp', + 'iframe', + 'noembed', + 'noframes', + 'noscript' +]) + +booleanAttributes = { + "": frozenset(["irrelevant", "itemscope"]), + "style": frozenset(["scoped"]), + "img": frozenset(["ismap"]), + "audio": frozenset(["autoplay", "controls"]), + "video": frozenset(["autoplay", "controls"]), + "script": frozenset(["defer", "async"]), + "details": frozenset(["open"]), + "datagrid": frozenset(["multiple", "disabled"]), + "command": frozenset(["hidden", "disabled", "checked", "default"]), + "hr": frozenset(["noshade"]), + "menu": frozenset(["autosubmit"]), + "fieldset": frozenset(["disabled", "readonly"]), + "option": frozenset(["disabled", "readonly", "selected"]), + "optgroup": frozenset(["disabled", "readonly"]), + "button": frozenset(["disabled", "autofocus"]), + "input": frozenset(["disabled", "readonly", "required", "autofocus", "checked", "ismap"]), + "select": frozenset(["disabled", "readonly", "autofocus", "multiple"]), + "output": frozenset(["disabled", "readonly"]), + "iframe": frozenset(["seamless"]), +} + +# entitiesWindows1252 has to be _ordered_ and needs to have an index. It +# therefore can't be a frozenset. +entitiesWindows1252 = ( + 8364, # 0x80 0x20AC EURO SIGN + 65533, # 0x81 UNDEFINED + 8218, # 0x82 0x201A SINGLE LOW-9 QUOTATION MARK + 402, # 0x83 0x0192 LATIN SMALL LETTER F WITH HOOK + 8222, # 0x84 0x201E DOUBLE LOW-9 QUOTATION MARK + 8230, # 0x85 0x2026 HORIZONTAL ELLIPSIS + 8224, # 0x86 0x2020 DAGGER + 8225, # 0x87 0x2021 DOUBLE DAGGER + 710, # 0x88 0x02C6 MODIFIER LETTER CIRCUMFLEX ACCENT + 8240, # 0x89 0x2030 PER MILLE SIGN + 352, # 0x8A 0x0160 LATIN CAPITAL LETTER S WITH CARON + 8249, # 0x8B 0x2039 SINGLE LEFT-POINTING ANGLE QUOTATION MARK + 338, # 0x8C 0x0152 LATIN CAPITAL LIGATURE OE + 65533, # 0x8D UNDEFINED + 381, # 0x8E 0x017D LATIN CAPITAL LETTER Z WITH CARON + 65533, # 0x8F UNDEFINED + 65533, # 0x90 UNDEFINED + 8216, # 0x91 0x2018 LEFT SINGLE QUOTATION MARK + 8217, # 0x92 0x2019 RIGHT SINGLE QUOTATION MARK + 8220, # 0x93 0x201C LEFT DOUBLE QUOTATION MARK + 8221, # 0x94 0x201D RIGHT DOUBLE QUOTATION MARK + 8226, # 0x95 0x2022 BULLET + 8211, # 0x96 0x2013 EN DASH + 8212, # 0x97 0x2014 EM DASH + 732, # 0x98 0x02DC SMALL TILDE + 8482, # 0x99 0x2122 TRADE MARK SIGN + 353, # 0x9A 0x0161 LATIN SMALL LETTER S WITH CARON + 8250, # 0x9B 0x203A SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + 339, # 0x9C 0x0153 LATIN SMALL LIGATURE OE + 65533, # 0x9D UNDEFINED + 382, # 0x9E 0x017E LATIN SMALL LETTER Z WITH CARON + 376 # 0x9F 0x0178 LATIN CAPITAL LETTER Y WITH DIAERESIS +) + +xmlEntities = frozenset(['lt;', 'gt;', 'amp;', 'apos;', 'quot;']) + +entities = { + "AElig": "\xc6", + "AElig;": "\xc6", + "AMP": "&", + "AMP;": "&", + "Aacute": "\xc1", + "Aacute;": "\xc1", + "Abreve;": "\u0102", + "Acirc": "\xc2", + "Acirc;": "\xc2", + "Acy;": "\u0410", + "Afr;": "\U0001d504", + "Agrave": "\xc0", + "Agrave;": "\xc0", + "Alpha;": "\u0391", + "Amacr;": "\u0100", + "And;": "\u2a53", + "Aogon;": "\u0104", + "Aopf;": "\U0001d538", + "ApplyFunction;": "\u2061", + "Aring": "\xc5", + "Aring;": "\xc5", + "Ascr;": "\U0001d49c", + "Assign;": "\u2254", + "Atilde": "\xc3", + "Atilde;": "\xc3", + "Auml": "\xc4", + "Auml;": "\xc4", + "Backslash;": "\u2216", + "Barv;": "\u2ae7", + "Barwed;": "\u2306", + "Bcy;": "\u0411", + "Because;": "\u2235", + "Bernoullis;": "\u212c", + "Beta;": "\u0392", + "Bfr;": "\U0001d505", + "Bopf;": "\U0001d539", + "Breve;": "\u02d8", + "Bscr;": "\u212c", + "Bumpeq;": "\u224e", + "CHcy;": "\u0427", + "COPY": "\xa9", + "COPY;": "\xa9", + "Cacute;": "\u0106", + "Cap;": "\u22d2", + "CapitalDifferentialD;": "\u2145", + "Cayleys;": "\u212d", + "Ccaron;": "\u010c", + "Ccedil": "\xc7", + "Ccedil;": "\xc7", + "Ccirc;": "\u0108", + "Cconint;": "\u2230", + "Cdot;": "\u010a", + "Cedilla;": "\xb8", + "CenterDot;": "\xb7", + "Cfr;": "\u212d", + "Chi;": "\u03a7", + "CircleDot;": "\u2299", + "CircleMinus;": "\u2296", + "CirclePlus;": "\u2295", + "CircleTimes;": "\u2297", + "ClockwiseContourIntegral;": "\u2232", + "CloseCurlyDoubleQuote;": "\u201d", + "CloseCurlyQuote;": "\u2019", + "Colon;": "\u2237", + "Colone;": "\u2a74", + "Congruent;": "\u2261", + "Conint;": "\u222f", + "ContourIntegral;": "\u222e", + "Copf;": "\u2102", + "Coproduct;": "\u2210", + "CounterClockwiseContourIntegral;": "\u2233", + "Cross;": "\u2a2f", + "Cscr;": "\U0001d49e", + "Cup;": "\u22d3", + "CupCap;": "\u224d", + "DD;": "\u2145", + "DDotrahd;": "\u2911", + "DJcy;": "\u0402", + "DScy;": "\u0405", + "DZcy;": "\u040f", + "Dagger;": "\u2021", + "Darr;": "\u21a1", + "Dashv;": "\u2ae4", + "Dcaron;": "\u010e", + "Dcy;": "\u0414", + "Del;": "\u2207", + "Delta;": "\u0394", + "Dfr;": "\U0001d507", + "DiacriticalAcute;": "\xb4", + "DiacriticalDot;": "\u02d9", + "DiacriticalDoubleAcute;": "\u02dd", + "DiacriticalGrave;": "`", + "DiacriticalTilde;": "\u02dc", + "Diamond;": "\u22c4", + "DifferentialD;": "\u2146", + "Dopf;": "\U0001d53b", + "Dot;": "\xa8", + "DotDot;": "\u20dc", + "DotEqual;": "\u2250", + "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", + "DownArrowBar;": "\u2913", + "DownArrowUpArrow;": "\u21f5", + "DownBreve;": "\u0311", + "DownLeftRightVector;": "\u2950", + "DownLeftTeeVector;": "\u295e", + "DownLeftVector;": "\u21bd", + "DownLeftVectorBar;": "\u2956", + "DownRightTeeVector;": "\u295f", + "DownRightVector;": "\u21c1", + "DownRightVectorBar;": "\u2957", + "DownTee;": "\u22a4", + "DownTeeArrow;": "\u21a7", + "Downarrow;": "\u21d3", + "Dscr;": "\U0001d49f", + "Dstrok;": "\u0110", + "ENG;": "\u014a", + "ETH": "\xd0", + "ETH;": "\xd0", + "Eacute": "\xc9", + "Eacute;": "\xc9", + "Ecaron;": "\u011a", + "Ecirc": "\xca", + "Ecirc;": "\xca", + "Ecy;": "\u042d", + "Edot;": "\u0116", + "Efr;": "\U0001d508", + "Egrave": "\xc8", + "Egrave;": "\xc8", + "Element;": "\u2208", + "Emacr;": "\u0112", + "EmptySmallSquare;": "\u25fb", + "EmptyVerySmallSquare;": "\u25ab", + "Eogon;": "\u0118", + "Eopf;": "\U0001d53c", + "Epsilon;": "\u0395", + "Equal;": "\u2a75", + "EqualTilde;": "\u2242", + "Equilibrium;": "\u21cc", + "Escr;": "\u2130", + "Esim;": "\u2a73", + "Eta;": "\u0397", + "Euml": "\xcb", + "Euml;": "\xcb", + "Exists;": "\u2203", + "ExponentialE;": "\u2147", + "Fcy;": "\u0424", + "Ffr;": "\U0001d509", + "FilledSmallSquare;": "\u25fc", + "FilledVerySmallSquare;": "\u25aa", + "Fopf;": "\U0001d53d", + "ForAll;": "\u2200", + "Fouriertrf;": "\u2131", + "Fscr;": "\u2131", + "GJcy;": "\u0403", + "GT": ">", + "GT;": ">", + "Gamma;": "\u0393", + "Gammad;": "\u03dc", + "Gbreve;": "\u011e", + "Gcedil;": "\u0122", + "Gcirc;": "\u011c", + "Gcy;": "\u0413", + "Gdot;": "\u0120", + "Gfr;": "\U0001d50a", + "Gg;": "\u22d9", + "Gopf;": "\U0001d53e", + "GreaterEqual;": "\u2265", + "GreaterEqualLess;": "\u22db", + "GreaterFullEqual;": "\u2267", + "GreaterGreater;": "\u2aa2", + "GreaterLess;": "\u2277", + "GreaterSlantEqual;": "\u2a7e", + "GreaterTilde;": "\u2273", + "Gscr;": "\U0001d4a2", + "Gt;": "\u226b", + "HARDcy;": "\u042a", + "Hacek;": "\u02c7", + "Hat;": "^", + "Hcirc;": "\u0124", + "Hfr;": "\u210c", + "HilbertSpace;": "\u210b", + "Hopf;": "\u210d", + "HorizontalLine;": "\u2500", + "Hscr;": "\u210b", + "Hstrok;": "\u0126", + "HumpDownHump;": "\u224e", + "HumpEqual;": "\u224f", + "IEcy;": "\u0415", + "IJlig;": "\u0132", + "IOcy;": "\u0401", + "Iacute": "\xcd", + "Iacute;": "\xcd", + "Icirc": "\xce", + "Icirc;": "\xce", + "Icy;": "\u0418", + "Idot;": "\u0130", + "Ifr;": "\u2111", + "Igrave": "\xcc", + "Igrave;": "\xcc", + "Im;": "\u2111", + "Imacr;": "\u012a", + "ImaginaryI;": "\u2148", + "Implies;": "\u21d2", + "Int;": "\u222c", + "Integral;": "\u222b", + "Intersection;": "\u22c2", + "InvisibleComma;": "\u2063", + "InvisibleTimes;": "\u2062", + "Iogon;": "\u012e", + "Iopf;": "\U0001d540", + "Iota;": "\u0399", + "Iscr;": "\u2110", + "Itilde;": "\u0128", + "Iukcy;": "\u0406", + "Iuml": "\xcf", + "Iuml;": "\xcf", + "Jcirc;": "\u0134", + "Jcy;": "\u0419", + "Jfr;": "\U0001d50d", + "Jopf;": "\U0001d541", + "Jscr;": "\U0001d4a5", + "Jsercy;": "\u0408", + "Jukcy;": "\u0404", + "KHcy;": "\u0425", + "KJcy;": "\u040c", + "Kappa;": "\u039a", + "Kcedil;": "\u0136", + "Kcy;": "\u041a", + "Kfr;": "\U0001d50e", + "Kopf;": "\U0001d542", + "Kscr;": "\U0001d4a6", + "LJcy;": "\u0409", + "LT": "<", + "LT;": "<", + "Lacute;": "\u0139", + "Lambda;": "\u039b", + "Lang;": "\u27ea", + "Laplacetrf;": "\u2112", + "Larr;": "\u219e", + "Lcaron;": "\u013d", + "Lcedil;": "\u013b", + "Lcy;": "\u041b", + "LeftAngleBracket;": "\u27e8", + "LeftArrow;": "\u2190", + "LeftArrowBar;": "\u21e4", + "LeftArrowRightArrow;": "\u21c6", + "LeftCeiling;": "\u2308", + "LeftDoubleBracket;": "\u27e6", + "LeftDownTeeVector;": "\u2961", + "LeftDownVector;": "\u21c3", + "LeftDownVectorBar;": "\u2959", + "LeftFloor;": "\u230a", + "LeftRightArrow;": "\u2194", + "LeftRightVector;": "\u294e", + "LeftTee;": "\u22a3", + "LeftTeeArrow;": "\u21a4", + "LeftTeeVector;": "\u295a", + "LeftTriangle;": "\u22b2", + "LeftTriangleBar;": "\u29cf", + "LeftTriangleEqual;": "\u22b4", + "LeftUpDownVector;": "\u2951", + "LeftUpTeeVector;": "\u2960", + "LeftUpVector;": "\u21bf", + "LeftUpVectorBar;": "\u2958", + "LeftVector;": "\u21bc", + "LeftVectorBar;": "\u2952", + "Leftarrow;": "\u21d0", + "Leftrightarrow;": "\u21d4", + "LessEqualGreater;": "\u22da", + "LessFullEqual;": "\u2266", + "LessGreater;": "\u2276", + "LessLess;": "\u2aa1", + "LessSlantEqual;": "\u2a7d", + "LessTilde;": "\u2272", + "Lfr;": "\U0001d50f", + "Ll;": "\u22d8", + "Lleftarrow;": "\u21da", + "Lmidot;": "\u013f", + "LongLeftArrow;": "\u27f5", + "LongLeftRightArrow;": "\u27f7", + "LongRightArrow;": "\u27f6", + "Longleftarrow;": "\u27f8", + "Longleftrightarrow;": "\u27fa", + "Longrightarrow;": "\u27f9", + "Lopf;": "\U0001d543", + "LowerLeftArrow;": "\u2199", + "LowerRightArrow;": "\u2198", + "Lscr;": "\u2112", + "Lsh;": "\u21b0", + "Lstrok;": "\u0141", + "Lt;": "\u226a", + "Map;": "\u2905", + "Mcy;": "\u041c", + "MediumSpace;": "\u205f", + "Mellintrf;": "\u2133", + "Mfr;": "\U0001d510", + "MinusPlus;": "\u2213", + "Mopf;": "\U0001d544", + "Mscr;": "\u2133", + "Mu;": "\u039c", + "NJcy;": "\u040a", + "Nacute;": "\u0143", + "Ncaron;": "\u0147", + "Ncedil;": "\u0145", + "Ncy;": "\u041d", + "NegativeMediumSpace;": "\u200b", + "NegativeThickSpace;": "\u200b", + "NegativeThinSpace;": "\u200b", + "NegativeVeryThinSpace;": "\u200b", + "NestedGreaterGreater;": "\u226b", + "NestedLessLess;": "\u226a", + "NewLine;": "\n", + "Nfr;": "\U0001d511", + "NoBreak;": "\u2060", + "NonBreakingSpace;": "\xa0", + "Nopf;": "\u2115", + "Not;": "\u2aec", + "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", + "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", + "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", + "Nscr;": "\U0001d4a9", + "Ntilde": "\xd1", + "Ntilde;": "\xd1", + "Nu;": "\u039d", + "OElig;": "\u0152", + "Oacute": "\xd3", + "Oacute;": "\xd3", + "Ocirc": "\xd4", + "Ocirc;": "\xd4", + "Ocy;": "\u041e", + "Odblac;": "\u0150", + "Ofr;": "\U0001d512", + "Ograve": "\xd2", + "Ograve;": "\xd2", + "Omacr;": "\u014c", + "Omega;": "\u03a9", + "Omicron;": "\u039f", + "Oopf;": "\U0001d546", + "OpenCurlyDoubleQuote;": "\u201c", + "OpenCurlyQuote;": "\u2018", + "Or;": "\u2a54", + "Oscr;": "\U0001d4aa", + "Oslash": "\xd8", + "Oslash;": "\xd8", + "Otilde": "\xd5", + "Otilde;": "\xd5", + "Otimes;": "\u2a37", + "Ouml": "\xd6", + "Ouml;": "\xd6", + "OverBar;": "\u203e", + "OverBrace;": "\u23de", + "OverBracket;": "\u23b4", + "OverParenthesis;": "\u23dc", + "PartialD;": "\u2202", + "Pcy;": "\u041f", + "Pfr;": "\U0001d513", + "Phi;": "\u03a6", + "Pi;": "\u03a0", + "PlusMinus;": "\xb1", + "Poincareplane;": "\u210c", + "Popf;": "\u2119", + "Pr;": "\u2abb", + "Precedes;": "\u227a", + "PrecedesEqual;": "\u2aaf", + "PrecedesSlantEqual;": "\u227c", + "PrecedesTilde;": "\u227e", + "Prime;": "\u2033", + "Product;": "\u220f", + "Proportion;": "\u2237", + "Proportional;": "\u221d", + "Pscr;": "\U0001d4ab", + "Psi;": "\u03a8", + "QUOT": "\"", + "QUOT;": "\"", + "Qfr;": "\U0001d514", + "Qopf;": "\u211a", + "Qscr;": "\U0001d4ac", + "RBarr;": "\u2910", + "REG": "\xae", + "REG;": "\xae", + "Racute;": "\u0154", + "Rang;": "\u27eb", + "Rarr;": "\u21a0", + "Rarrtl;": "\u2916", + "Rcaron;": "\u0158", + "Rcedil;": "\u0156", + "Rcy;": "\u0420", + "Re;": "\u211c", + "ReverseElement;": "\u220b", + "ReverseEquilibrium;": "\u21cb", + "ReverseUpEquilibrium;": "\u296f", + "Rfr;": "\u211c", + "Rho;": "\u03a1", + "RightAngleBracket;": "\u27e9", + "RightArrow;": "\u2192", + "RightArrowBar;": "\u21e5", + "RightArrowLeftArrow;": "\u21c4", + "RightCeiling;": "\u2309", + "RightDoubleBracket;": "\u27e7", + "RightDownTeeVector;": "\u295d", + "RightDownVector;": "\u21c2", + "RightDownVectorBar;": "\u2955", + "RightFloor;": "\u230b", + "RightTee;": "\u22a2", + "RightTeeArrow;": "\u21a6", + "RightTeeVector;": "\u295b", + "RightTriangle;": "\u22b3", + "RightTriangleBar;": "\u29d0", + "RightTriangleEqual;": "\u22b5", + "RightUpDownVector;": "\u294f", + "RightUpTeeVector;": "\u295c", + "RightUpVector;": "\u21be", + "RightUpVectorBar;": "\u2954", + "RightVector;": "\u21c0", + "RightVectorBar;": "\u2953", + "Rightarrow;": "\u21d2", + "Ropf;": "\u211d", + "RoundImplies;": "\u2970", + "Rrightarrow;": "\u21db", + "Rscr;": "\u211b", + "Rsh;": "\u21b1", + "RuleDelayed;": "\u29f4", + "SHCHcy;": "\u0429", + "SHcy;": "\u0428", + "SOFTcy;": "\u042c", + "Sacute;": "\u015a", + "Sc;": "\u2abc", + "Scaron;": "\u0160", + "Scedil;": "\u015e", + "Scirc;": "\u015c", + "Scy;": "\u0421", + "Sfr;": "\U0001d516", + "ShortDownArrow;": "\u2193", + "ShortLeftArrow;": "\u2190", + "ShortRightArrow;": "\u2192", + "ShortUpArrow;": "\u2191", + "Sigma;": "\u03a3", + "SmallCircle;": "\u2218", + "Sopf;": "\U0001d54a", + "Sqrt;": "\u221a", + "Square;": "\u25a1", + "SquareIntersection;": "\u2293", + "SquareSubset;": "\u228f", + "SquareSubsetEqual;": "\u2291", + "SquareSuperset;": "\u2290", + "SquareSupersetEqual;": "\u2292", + "SquareUnion;": "\u2294", + "Sscr;": "\U0001d4ae", + "Star;": "\u22c6", + "Sub;": "\u22d0", + "Subset;": "\u22d0", + "SubsetEqual;": "\u2286", + "Succeeds;": "\u227b", + "SucceedsEqual;": "\u2ab0", + "SucceedsSlantEqual;": "\u227d", + "SucceedsTilde;": "\u227f", + "SuchThat;": "\u220b", + "Sum;": "\u2211", + "Sup;": "\u22d1", + "Superset;": "\u2283", + "SupersetEqual;": "\u2287", + "Supset;": "\u22d1", + "THORN": "\xde", + "THORN;": "\xde", + "TRADE;": "\u2122", + "TSHcy;": "\u040b", + "TScy;": "\u0426", + "Tab;": "\t", + "Tau;": "\u03a4", + "Tcaron;": "\u0164", + "Tcedil;": "\u0162", + "Tcy;": "\u0422", + "Tfr;": "\U0001d517", + "Therefore;": "\u2234", + "Theta;": "\u0398", + "ThickSpace;": "\u205f\u200a", + "ThinSpace;": "\u2009", + "Tilde;": "\u223c", + "TildeEqual;": "\u2243", + "TildeFullEqual;": "\u2245", + "TildeTilde;": "\u2248", + "Topf;": "\U0001d54b", + "TripleDot;": "\u20db", + "Tscr;": "\U0001d4af", + "Tstrok;": "\u0166", + "Uacute": "\xda", + "Uacute;": "\xda", + "Uarr;": "\u219f", + "Uarrocir;": "\u2949", + "Ubrcy;": "\u040e", + "Ubreve;": "\u016c", + "Ucirc": "\xdb", + "Ucirc;": "\xdb", + "Ucy;": "\u0423", + "Udblac;": "\u0170", + "Ufr;": "\U0001d518", + "Ugrave": "\xd9", + "Ugrave;": "\xd9", + "Umacr;": "\u016a", + "UnderBar;": "_", + "UnderBrace;": "\u23df", + "UnderBracket;": "\u23b5", + "UnderParenthesis;": "\u23dd", + "Union;": "\u22c3", + "UnionPlus;": "\u228e", + "Uogon;": "\u0172", + "Uopf;": "\U0001d54c", + "UpArrow;": "\u2191", + "UpArrowBar;": "\u2912", + "UpArrowDownArrow;": "\u21c5", + "UpDownArrow;": "\u2195", + "UpEquilibrium;": "\u296e", + "UpTee;": "\u22a5", + "UpTeeArrow;": "\u21a5", + "Uparrow;": "\u21d1", + "Updownarrow;": "\u21d5", + "UpperLeftArrow;": "\u2196", + "UpperRightArrow;": "\u2197", + "Upsi;": "\u03d2", + "Upsilon;": "\u03a5", + "Uring;": "\u016e", + "Uscr;": "\U0001d4b0", + "Utilde;": "\u0168", + "Uuml": "\xdc", + "Uuml;": "\xdc", + "VDash;": "\u22ab", + "Vbar;": "\u2aeb", + "Vcy;": "\u0412", + "Vdash;": "\u22a9", + "Vdashl;": "\u2ae6", + "Vee;": "\u22c1", + "Verbar;": "\u2016", + "Vert;": "\u2016", + "VerticalBar;": "\u2223", + "VerticalLine;": "|", + "VerticalSeparator;": "\u2758", + "VerticalTilde;": "\u2240", + "VeryThinSpace;": "\u200a", + "Vfr;": "\U0001d519", + "Vopf;": "\U0001d54d", + "Vscr;": "\U0001d4b1", + "Vvdash;": "\u22aa", + "Wcirc;": "\u0174", + "Wedge;": "\u22c0", + "Wfr;": "\U0001d51a", + "Wopf;": "\U0001d54e", + "Wscr;": "\U0001d4b2", + "Xfr;": "\U0001d51b", + "Xi;": "\u039e", + "Xopf;": "\U0001d54f", + "Xscr;": "\U0001d4b3", + "YAcy;": "\u042f", + "YIcy;": "\u0407", + "YUcy;": "\u042e", + "Yacute": "\xdd", + "Yacute;": "\xdd", + "Ycirc;": "\u0176", + "Ycy;": "\u042b", + "Yfr;": "\U0001d51c", + "Yopf;": "\U0001d550", + "Yscr;": "\U0001d4b4", + "Yuml;": "\u0178", + "ZHcy;": "\u0416", + "Zacute;": "\u0179", + "Zcaron;": "\u017d", + "Zcy;": "\u0417", + "Zdot;": "\u017b", + "ZeroWidthSpace;": "\u200b", + "Zeta;": "\u0396", + "Zfr;": "\u2128", + "Zopf;": "\u2124", + "Zscr;": "\U0001d4b5", + "aacute": "\xe1", + "aacute;": "\xe1", + "abreve;": "\u0103", + "ac;": "\u223e", + "acE;": "\u223e\u0333", + "acd;": "\u223f", + "acirc": "\xe2", + "acirc;": "\xe2", + "acute": "\xb4", + "acute;": "\xb4", + "acy;": "\u0430", + "aelig": "\xe6", + "aelig;": "\xe6", + "af;": "\u2061", + "afr;": "\U0001d51e", + "agrave": "\xe0", + "agrave;": "\xe0", + "alefsym;": "\u2135", + "aleph;": "\u2135", + "alpha;": "\u03b1", + "amacr;": "\u0101", + "amalg;": "\u2a3f", + "amp": "&", + "amp;": "&", + "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;": "\u0105", + "aopf;": "\U0001d552", + "ap;": "\u2248", + "apE;": "\u2a70", + "apacir;": "\u2a6f", + "ape;": "\u224a", + "apid;": "\u224b", + "apos;": "'", + "approx;": "\u2248", + "approxeq;": "\u224a", + "aring": "\xe5", + "aring;": "\xe5", + "ascr;": "\U0001d4b6", + "ast;": "*", + "asymp;": "\u2248", + "asympeq;": "\u224d", + "atilde": "\xe3", + "atilde;": "\xe3", + "auml": "\xe4", + "auml;": "\xe4", + "awconint;": "\u2233", + "awint;": "\u2a11", + "bNot;": "\u2aed", + "backcong;": "\u224c", + "backepsilon;": "\u03f6", + "backprime;": "\u2035", + "backsim;": "\u223d", + "backsimeq;": "\u22cd", + "barvee;": "\u22bd", + "barwed;": "\u2305", + "barwedge;": "\u2305", + "bbrk;": "\u23b5", + "bbrktbrk;": "\u23b6", + "bcong;": "\u224c", + "bcy;": "\u0431", + "bdquo;": "\u201e", + "becaus;": "\u2235", + "because;": "\u2235", + "bemptyv;": "\u29b0", + "bepsi;": "\u03f6", + "bernou;": "\u212c", + "beta;": "\u03b2", + "beth;": "\u2136", + "between;": "\u226c", + "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;": "\u2310", + "bopf;": "\U0001d553", + "bot;": "\u22a5", + "bottom;": "\u22a5", + "bowtie;": "\u22c8", + "boxDL;": "\u2557", + "boxDR;": "\u2554", + "boxDl;": "\u2556", + "boxDr;": "\u2553", + "boxH;": "\u2550", + "boxHD;": "\u2566", + "boxHU;": "\u2569", + "boxHd;": "\u2564", + "boxHu;": "\u2567", + "boxUL;": "\u255d", + "boxUR;": "\u255a", + "boxUl;": "\u255c", + "boxUr;": "\u2559", + "boxV;": "\u2551", + "boxVH;": "\u256c", + "boxVL;": "\u2563", + "boxVR;": "\u2560", + "boxVh;": "\u256b", + "boxVl;": "\u2562", + "boxVr;": "\u255f", + "boxbox;": "\u29c9", + "boxdL;": "\u2555", + "boxdR;": "\u2552", + "boxdl;": "\u2510", + "boxdr;": "\u250c", + "boxh;": "\u2500", + "boxhD;": "\u2565", + "boxhU;": "\u2568", + "boxhd;": "\u252c", + "boxhu;": "\u2534", + "boxminus;": "\u229f", + "boxplus;": "\u229e", + "boxtimes;": "\u22a0", + "boxuL;": "\u255b", + "boxuR;": "\u2558", + "boxul;": "\u2518", + "boxur;": "\u2514", + "boxv;": "\u2502", + "boxvH;": "\u256a", + "boxvL;": "\u2561", + "boxvR;": "\u255e", + "boxvh;": "\u253c", + "boxvl;": "\u2524", + "boxvr;": "\u251c", + "bprime;": "\u2035", + "breve;": "\u02d8", + "brvbar": "\xa6", + "brvbar;": "\xa6", + "bscr;": "\U0001d4b7", + "bsemi;": "\u204f", + "bsim;": "\u223d", + "bsime;": "\u22cd", + "bsol;": "\\", + "bsolb;": "\u29c5", + "bsolhsub;": "\u27c8", + "bull;": "\u2022", + "bullet;": "\u2022", + "bump;": "\u224e", + "bumpE;": "\u2aae", + "bumpe;": "\u224f", + "bumpeq;": "\u224f", + "cacute;": "\u0107", + "cap;": "\u2229", + "capand;": "\u2a44", + "capbrcup;": "\u2a49", + "capcap;": "\u2a4b", + "capcup;": "\u2a47", + "capdot;": "\u2a40", + "caps;": "\u2229\ufe00", + "caret;": "\u2041", + "caron;": "\u02c7", + "ccaps;": "\u2a4d", + "ccaron;": "\u010d", + "ccedil": "\xe7", + "ccedil;": "\xe7", + "ccirc;": "\u0109", + "ccups;": "\u2a4c", + "ccupssm;": "\u2a50", + "cdot;": "\u010b", + "cedil": "\xb8", + "cedil;": "\xb8", + "cemptyv;": "\u29b2", + "cent": "\xa2", + "cent;": "\xa2", + "centerdot;": "\xb7", + "cfr;": "\U0001d520", + "chcy;": "\u0447", + "check;": "\u2713", + "checkmark;": "\u2713", + "chi;": "\u03c7", + "cir;": "\u25cb", + "cirE;": "\u29c3", + "circ;": "\u02c6", + "circeq;": "\u2257", + "circlearrowleft;": "\u21ba", + "circlearrowright;": "\u21bb", + "circledR;": "\xae", + "circledS;": "\u24c8", + "circledast;": "\u229b", + "circledcirc;": "\u229a", + "circleddash;": "\u229d", + "cire;": "\u2257", + "cirfnint;": "\u2a10", + "cirmid;": "\u2aef", + "cirscir;": "\u29c2", + "clubs;": "\u2663", + "clubsuit;": "\u2663", + "colon;": ":", + "colone;": "\u2254", + "coloneq;": "\u2254", + "comma;": ",", + "commat;": "@", + "comp;": "\u2201", + "compfn;": "\u2218", + "complement;": "\u2201", + "complexes;": "\u2102", + "cong;": "\u2245", + "congdot;": "\u2a6d", + "conint;": "\u222e", + "copf;": "\U0001d554", + "coprod;": "\u2210", + "copy": "\xa9", + "copy;": "\xa9", + "copysr;": "\u2117", + "crarr;": "\u21b5", + "cross;": "\u2717", + "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;": "\u222a", + "cupbrcap;": "\u2a48", + "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", + "dArr;": "\u21d3", + "dHar;": "\u2965", + "dagger;": "\u2020", + "daleth;": "\u2138", + "darr;": "\u2193", + "dash;": "\u2010", + "dashv;": "\u22a3", + "dbkarow;": "\u290f", + "dblac;": "\u02dd", + "dcaron;": "\u010f", + "dcy;": "\u0434", + "dd;": "\u2146", + "ddagger;": "\u2021", + "ddarr;": "\u21ca", + "ddotseq;": "\u2a77", + "deg": "\xb0", + "deg;": "\xb0", + "delta;": "\u03b4", + "demptyv;": "\u29b1", + "dfisht;": "\u297f", + "dfr;": "\U0001d521", + "dharl;": "\u21c3", + "dharr;": "\u21c2", + "diam;": "\u22c4", + "diamond;": "\u22c4", + "diamondsuit;": "\u2666", + "diams;": "\u2666", + "die;": "\xa8", + "digamma;": "\u03dd", + "disin;": "\u22f2", + "div;": "\xf7", + "divide": "\xf7", + "divide;": "\xf7", + "divideontimes;": "\u22c7", + "divonx;": "\u22c7", + "djcy;": "\u0452", + "dlcorn;": "\u231e", + "dlcrop;": "\u230d", + "dollar;": "$", + "dopf;": "\U0001d555", + "dot;": "\u02d9", + "doteq;": "\u2250", + "doteqdot;": "\u2251", + "dotminus;": "\u2238", + "dotplus;": "\u2214", + "dotsquare;": "\u22a1", + "doublebarwedge;": "\u2306", + "downarrow;": "\u2193", + "downdownarrows;": "\u21ca", + "downharpoonleft;": "\u21c3", + "downharpoonright;": "\u21c2", + "drbkarow;": "\u2910", + "drcorn;": "\u231f", + "drcrop;": "\u230c", + "dscr;": "\U0001d4b9", + "dscy;": "\u0455", + "dsol;": "\u29f6", + "dstrok;": "\u0111", + "dtdot;": "\u22f1", + "dtri;": "\u25bf", + "dtrif;": "\u25be", + "duarr;": "\u21f5", + "duhar;": "\u296f", + "dwangle;": "\u29a6", + "dzcy;": "\u045f", + "dzigrarr;": "\u27ff", + "eDDot;": "\u2a77", + "eDot;": "\u2251", + "eacute": "\xe9", + "eacute;": "\xe9", + "easter;": "\u2a6e", + "ecaron;": "\u011b", + "ecir;": "\u2256", + "ecirc": "\xea", + "ecirc;": "\xea", + "ecolon;": "\u2255", + "ecy;": "\u044d", + "edot;": "\u0117", + "ee;": "\u2147", + "efDot;": "\u2252", + "efr;": "\U0001d522", + "eg;": "\u2a9a", + "egrave": "\xe8", + "egrave;": "\xe8", + "egs;": "\u2a96", + "egsdot;": "\u2a98", + "el;": "\u2a99", + "elinters;": "\u23e7", + "ell;": "\u2113", + "els;": "\u2a95", + "elsdot;": "\u2a97", + "emacr;": "\u0113", + "empty;": "\u2205", + "emptyset;": "\u2205", + "emptyv;": "\u2205", + "emsp13;": "\u2004", + "emsp14;": "\u2005", + "emsp;": "\u2003", + "eng;": "\u014b", + "ensp;": "\u2002", + "eogon;": "\u0119", + "eopf;": "\U0001d556", + "epar;": "\u22d5", + "eparsl;": "\u29e3", + "eplus;": "\u2a71", + "epsi;": "\u03b5", + "epsilon;": "\u03b5", + "epsiv;": "\u03f5", + "eqcirc;": "\u2256", + "eqcolon;": "\u2255", + "eqsim;": "\u2242", + "eqslantgtr;": "\u2a96", + "eqslantless;": "\u2a95", + "equals;": "=", + "equest;": "\u225f", + "equiv;": "\u2261", + "equivDD;": "\u2a78", + "eqvparsl;": "\u29e5", + "erDot;": "\u2253", + "erarr;": "\u2971", + "escr;": "\u212f", + "esdot;": "\u2250", + "esim;": "\u2242", + "eta;": "\u03b7", + "eth": "\xf0", + "eth;": "\xf0", + "euml": "\xeb", + "euml;": "\xeb", + "euro;": "\u20ac", + "excl;": "!", + "exist;": "\u2203", + "expectation;": "\u2130", + "exponentiale;": "\u2147", + "fallingdotseq;": "\u2252", + "fcy;": "\u0444", + "female;": "\u2640", + "ffilig;": "\ufb03", + "fflig;": "\ufb00", + "ffllig;": "\ufb04", + "ffr;": "\U0001d523", + "filig;": "\ufb01", + "fjlig;": "fj", + "flat;": "\u266d", + "fllig;": "\ufb02", + "fltns;": "\u25b1", + "fnof;": "\u0192", + "fopf;": "\U0001d557", + "forall;": "\u2200", + "fork;": "\u22d4", + "forkv;": "\u2ad9", + "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;": "\U0001d4bb", + "gE;": "\u2267", + "gEl;": "\u2a8c", + "gacute;": "\u01f5", + "gamma;": "\u03b3", + "gammad;": "\u03dd", + "gap;": "\u2a86", + "gbreve;": "\u011f", + "gcirc;": "\u011d", + "gcy;": "\u0433", + "gdot;": "\u0121", + "ge;": "\u2265", + "gel;": "\u22db", + "geq;": "\u2265", + "geqq;": "\u2267", + "geqslant;": "\u2a7e", + "ges;": "\u2a7e", + "gescc;": "\u2aa9", + "gesdot;": "\u2a80", + "gesdoto;": "\u2a82", + "gesdotol;": "\u2a84", + "gesl;": "\u22db\ufe00", + "gesles;": "\u2a94", + "gfr;": "\U0001d524", + "gg;": "\u226b", + "ggg;": "\u22d9", + "gimel;": "\u2137", + "gjcy;": "\u0453", + "gl;": "\u2277", + "glE;": "\u2a92", + "gla;": "\u2aa5", + "glj;": "\u2aa4", + "gnE;": "\u2269", + "gnap;": "\u2a8a", + "gnapprox;": "\u2a8a", + "gne;": "\u2a88", + "gneq;": "\u2a88", + "gneqq;": "\u2269", + "gnsim;": "\u22e7", + "gopf;": "\U0001d558", + "grave;": "`", + "gscr;": "\u210a", + "gsim;": "\u2273", + "gsime;": "\u2a8e", + "gsiml;": "\u2a90", + "gt": ">", + "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", + "hArr;": "\u21d4", + "hairsp;": "\u200a", + "half;": "\xbd", + "hamilt;": "\u210b", + "hardcy;": "\u044a", + "harr;": "\u2194", + "harrcir;": "\u2948", + "harrw;": "\u21ad", + "hbar;": "\u210f", + "hcirc;": "\u0125", + "hearts;": "\u2665", + "heartsuit;": "\u2665", + "hellip;": "\u2026", + "hercon;": "\u22b9", + "hfr;": "\U0001d525", + "hksearow;": "\u2925", + "hkswarow;": "\u2926", + "hoarr;": "\u21ff", + "homtht;": "\u223b", + "hookleftarrow;": "\u21a9", + "hookrightarrow;": "\u21aa", + "hopf;": "\U0001d559", + "horbar;": "\u2015", + "hscr;": "\U0001d4bd", + "hslash;": "\u210f", + "hstrok;": "\u0127", + "hybull;": "\u2043", + "hyphen;": "\u2010", + "iacute": "\xed", + "iacute;": "\xed", + "ic;": "\u2063", + "icirc": "\xee", + "icirc;": "\xee", + "icy;": "\u0438", + "iecy;": "\u0435", + "iexcl": "\xa1", + "iexcl;": "\xa1", + "iff;": "\u21d4", + "ifr;": "\U0001d526", + "igrave": "\xec", + "igrave;": "\xec", + "ii;": "\u2148", + "iiiint;": "\u2a0c", + "iiint;": "\u222d", + "iinfin;": "\u29dc", + "iiota;": "\u2129", + "ijlig;": "\u0133", + "imacr;": "\u012b", + "image;": "\u2111", + "imagline;": "\u2110", + "imagpart;": "\u2111", + "imath;": "\u0131", + "imof;": "\u22b7", + "imped;": "\u01b5", + "in;": "\u2208", + "incare;": "\u2105", + "infin;": "\u221e", + "infintie;": "\u29dd", + "inodot;": "\u0131", + "int;": "\u222b", + "intcal;": "\u22ba", + "integers;": "\u2124", + "intercal;": "\u22ba", + "intlarhk;": "\u2a17", + "intprod;": "\u2a3c", + "iocy;": "\u0451", + "iogon;": "\u012f", + "iopf;": "\U0001d55a", + "iota;": "\u03b9", + "iprod;": "\u2a3c", + "iquest": "\xbf", + "iquest;": "\xbf", + "iscr;": "\U0001d4be", + "isin;": "\u2208", + "isinE;": "\u22f9", + "isindot;": "\u22f5", + "isins;": "\u22f4", + "isinsv;": "\u22f3", + "isinv;": "\u2208", + "it;": "\u2062", + "itilde;": "\u0129", + "iukcy;": "\u0456", + "iuml": "\xef", + "iuml;": "\xef", + "jcirc;": "\u0135", + "jcy;": "\u0439", + "jfr;": "\U0001d527", + "jmath;": "\u0237", + "jopf;": "\U0001d55b", + "jscr;": "\U0001d4bf", + "jsercy;": "\u0458", + "jukcy;": "\u0454", + "kappa;": "\u03ba", + "kappav;": "\u03f0", + "kcedil;": "\u0137", + "kcy;": "\u043a", + "kfr;": "\U0001d528", + "kgreen;": "\u0138", + "khcy;": "\u0445", + "kjcy;": "\u045c", + "kopf;": "\U0001d55c", + "kscr;": "\U0001d4c0", + "lAarr;": "\u21da", + "lArr;": "\u21d0", + "lAtail;": "\u291b", + "lBarr;": "\u290e", + "lE;": "\u2266", + "lEg;": "\u2a8b", + "lHar;": "\u2962", + "lacute;": "\u013a", + "laemptyv;": "\u29b4", + "lagran;": "\u2112", + "lambda;": "\u03bb", + "lang;": "\u27e8", + "langd;": "\u2991", + "langle;": "\u27e8", + "lap;": "\u2a85", + "laquo": "\xab", + "laquo;": "\xab", + "larr;": "\u2190", + "larrb;": "\u21e4", + "larrbfs;": "\u291f", + "larrfs;": "\u291d", + "larrhk;": "\u21a9", + "larrlp;": "\u21ab", + "larrpl;": "\u2939", + "larrsim;": "\u2973", + "larrtl;": "\u21a2", + "lat;": "\u2aab", + "latail;": "\u2919", + "late;": "\u2aad", + "lates;": "\u2aad\ufe00", + "lbarr;": "\u290c", + "lbbrk;": "\u2772", + "lbrace;": "{", + "lbrack;": "[", + "lbrke;": "\u298b", + "lbrksld;": "\u298f", + "lbrkslu;": "\u298d", + "lcaron;": "\u013e", + "lcedil;": "\u013c", + "lceil;": "\u2308", + "lcub;": "{", + "lcy;": "\u043b", + "ldca;": "\u2936", + "ldquo;": "\u201c", + "ldquor;": "\u201e", + "ldrdhar;": "\u2967", + "ldrushar;": "\u294b", + "ldsh;": "\u21b2", + "le;": "\u2264", + "leftarrow;": "\u2190", + "leftarrowtail;": "\u21a2", + "leftharpoondown;": "\u21bd", + "leftharpoonup;": "\u21bc", + "leftleftarrows;": "\u21c7", + "leftrightarrow;": "\u2194", + "leftrightarrows;": "\u21c6", + "leftrightharpoons;": "\u21cb", + "leftrightsquigarrow;": "\u21ad", + "leftthreetimes;": "\u22cb", + "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", + "lessgtr;": "\u2276", + "lesssim;": "\u2272", + "lfisht;": "\u297c", + "lfloor;": "\u230a", + "lfr;": "\U0001d529", + "lg;": "\u2276", + "lgE;": "\u2a91", + "lhard;": "\u21bd", + "lharu;": "\u21bc", + "lharul;": "\u296a", + "lhblk;": "\u2584", + "ljcy;": "\u0459", + "ll;": "\u226a", + "llarr;": "\u21c7", + "llcorner;": "\u231e", + "llhard;": "\u296b", + "lltri;": "\u25fa", + "lmidot;": "\u0140", + "lmoust;": "\u23b0", + "lmoustache;": "\u23b0", + "lnE;": "\u2268", + "lnap;": "\u2a89", + "lnapprox;": "\u2a89", + "lne;": "\u2a87", + "lneq;": "\u2a87", + "lneqq;": "\u2268", + "lnsim;": "\u22e6", + "loang;": "\u27ec", + "loarr;": "\u21fd", + "lobrk;": "\u27e6", + "longleftarrow;": "\u27f5", + "longleftrightarrow;": "\u27f7", + "longmapsto;": "\u27fc", + "longrightarrow;": "\u27f6", + "looparrowleft;": "\u21ab", + "looparrowright;": "\u21ac", + "lopar;": "\u2985", + "lopf;": "\U0001d55d", + "loplus;": "\u2a2d", + "lotimes;": "\u2a34", + "lowast;": "\u2217", + "lowbar;": "_", + "loz;": "\u25ca", + "lozenge;": "\u25ca", + "lozf;": "\u29eb", + "lpar;": "(", + "lparlt;": "\u2993", + "lrarr;": "\u21c6", + "lrcorner;": "\u231f", + "lrhar;": "\u21cb", + "lrhard;": "\u296d", + "lrm;": "\u200e", + "lrtri;": "\u22bf", + "lsaquo;": "\u2039", + "lscr;": "\U0001d4c1", + "lsh;": "\u21b0", + "lsim;": "\u2272", + "lsime;": "\u2a8d", + "lsimg;": "\u2a8f", + "lsqb;": "[", + "lsquo;": "\u2018", + "lsquor;": "\u201a", + "lstrok;": "\u0142", + "lt": "<", + "lt;": "<", + "ltcc;": "\u2aa6", + "ltcir;": "\u2a79", + "ltdot;": "\u22d6", + "lthree;": "\u22cb", + "ltimes;": "\u22c9", + "ltlarr;": "\u2976", + "ltquest;": "\u2a7b", + "ltrPar;": "\u2996", + "ltri;": "\u25c3", + "ltrie;": "\u22b4", + "ltrif;": "\u25c2", + "lurdshar;": "\u294a", + "luruhar;": "\u2966", + "lvertneqq;": "\u2268\ufe00", + "lvnE;": "\u2268\ufe00", + "mDDot;": "\u223a", + "macr": "\xaf", + "macr;": "\xaf", + "male;": "\u2642", + "malt;": "\u2720", + "maltese;": "\u2720", + "map;": "\u21a6", + "mapsto;": "\u21a6", + "mapstodown;": "\u21a7", + "mapstoleft;": "\u21a4", + "mapstoup;": "\u21a5", + "marker;": "\u25ae", + "mcomma;": "\u2a29", + "mcy;": "\u043c", + "mdash;": "\u2014", + "measuredangle;": "\u2221", + "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", + "mlcp;": "\u2adb", + "mldr;": "\u2026", + "mnplus;": "\u2213", + "models;": "\u22a7", + "mopf;": "\U0001d55e", + "mp;": "\u2213", + "mscr;": "\U0001d4c2", + "mstpos;": "\u223e", + "mu;": "\u03bc", + "multimap;": "\u22b8", + "mumap;": "\u22b8", + "nGg;": "\u22d9\u0338", + "nGt;": "\u226b\u20d2", + "nGtv;": "\u226b\u0338", + "nLeftarrow;": "\u21cd", + "nLeftrightarrow;": "\u21ce", + "nLl;": "\u22d8\u0338", + "nLt;": "\u226a\u20d2", + "nLtv;": "\u226a\u0338", + "nRightarrow;": "\u21cf", + "nVDash;": "\u22af", + "nVdash;": "\u22ae", + "nabla;": "\u2207", + "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;": "\u0148", + "ncedil;": "\u0146", + "ncong;": "\u2247", + "ncongdot;": "\u2a6d\u0338", + "ncup;": "\u2a42", + "ncy;": "\u043d", + "ndash;": "\u2013", + "ne;": "\u2260", + "neArr;": "\u21d7", + "nearhk;": "\u2924", + "nearr;": "\u2197", + "nearrow;": "\u2197", + "nedot;": "\u2250\u0338", + "nequiv;": "\u2262", + "nesear;": "\u2928", + "nesim;": "\u2242\u0338", + "nexist;": "\u2204", + "nexists;": "\u2204", + "nfr;": "\U0001d52b", + "ngE;": "\u2267\u0338", + "nge;": "\u2271", + "ngeq;": "\u2271", + "ngeqq;": "\u2267\u0338", + "ngeqslant;": "\u2a7e\u0338", + "nges;": "\u2a7e\u0338", + "ngsim;": "\u2275", + "ngt;": "\u226f", + "ngtr;": "\u226f", + "nhArr;": "\u21ce", + "nharr;": "\u21ae", + "nhpar;": "\u2af2", + "ni;": "\u220b", + "nis;": "\u22fc", + "nisd;": "\u22fa", + "niv;": "\u220b", + "njcy;": "\u045a", + "nlArr;": "\u21cd", + "nlE;": "\u2266\u0338", + "nlarr;": "\u219a", + "nldr;": "\u2025", + "nle;": "\u2270", + "nleftarrow;": "\u219a", + "nleftrightarrow;": "\u21ae", + "nleq;": "\u2270", + "nleqq;": "\u2266\u0338", + "nleqslant;": "\u2a7d\u0338", + "nles;": "\u2a7d\u0338", + "nless;": "\u226e", + "nlsim;": "\u2274", + "nlt;": "\u226e", + "nltri;": "\u22ea", + "nltrie;": "\u22ec", + "nmid;": "\u2224", + "nopf;": "\U0001d55f", + "not": "\xac", + "not;": "\xac", + "notin;": "\u2209", + "notinE;": "\u22f9\u0338", + "notindot;": "\u22f5\u0338", + "notinva;": "\u2209", + "notinvb;": "\u22f7", + "notinvc;": "\u22f6", + "notni;": "\u220c", + "notniva;": "\u220c", + "notnivb;": "\u22fe", + "notnivc;": "\u22fd", + "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;": "\u219b", + "nrtri;": "\u22eb", + "nrtrie;": "\u22ed", + "nsc;": "\u2281", + "nsccue;": "\u22e1", + "nsce;": "\u2ab0\u0338", + "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": "\xf1", + "ntilde;": "\xf1", + "ntlg;": "\u2278", + "ntriangleleft;": "\u22ea", + "ntrianglelefteq;": "\u22ec", + "ntriangleright;": "\u22eb", + "ntrianglerighteq;": "\u22ed", + "nu;": "\u03bd", + "num;": "#", + "numero;": "\u2116", + "numsp;": "\u2007", + "nvDash;": "\u22ad", + "nvHarr;": "\u2904", + "nvap;": "\u224d\u20d2", + "nvdash;": "\u22ac", + "nvge;": "\u2265\u20d2", + "nvgt;": ">\u20d2", + "nvinfin;": "\u29de", + "nvlArr;": "\u2902", + "nvle;": "\u2264\u20d2", + "nvlt;": "<\u20d2", + "nvltrie;": "\u22b4\u20d2", + "nvrArr;": "\u2903", + "nvrtrie;": "\u22b5\u20d2", + "nvsim;": "\u223c\u20d2", + "nwArr;": "\u21d6", + "nwarhk;": "\u2923", + "nwarr;": "\u2196", + "nwarrow;": "\u2196", + "nwnear;": "\u2927", + "oS;": "\u24c8", + "oacute": "\xf3", + "oacute;": "\xf3", + "oast;": "\u229b", + "ocir;": "\u229a", + "ocirc": "\xf4", + "ocirc;": "\xf4", + "ocy;": "\u043e", + "odash;": "\u229d", + "odblac;": "\u0151", + "odiv;": "\u2a38", + "odot;": "\u2299", + "odsold;": "\u29bc", + "oelig;": "\u0153", + "ofcir;": "\u29bf", + "ofr;": "\U0001d52c", + "ogon;": "\u02db", + "ograve": "\xf2", + "ograve;": "\xf2", + "ogt;": "\u29c1", + "ohbar;": "\u29b5", + "ohm;": "\u03a9", + "oint;": "\u222e", + "olarr;": "\u21ba", + "olcir;": "\u29be", + "olcross;": "\u29bb", + "oline;": "\u203e", + "olt;": "\u29c0", + "omacr;": "\u014d", + "omega;": "\u03c9", + "omicron;": "\u03bf", + "omid;": "\u29b6", + "ominus;": "\u2296", + "oopf;": "\U0001d560", + "opar;": "\u29b7", + "operp;": "\u29b9", + "oplus;": "\u2295", + "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", + "oscr;": "\u2134", + "oslash": "\xf8", + "oslash;": "\xf8", + "osol;": "\u2298", + "otilde": "\xf5", + "otilde;": "\xf5", + "otimes;": "\u2297", + "otimesas;": "\u2a36", + "ouml": "\xf6", + "ouml;": "\xf6", + "ovbar;": "\u233d", + "par;": "\u2225", + "para": "\xb6", + "para;": "\xb6", + "parallel;": "\u2225", + "parsim;": "\u2af3", + "parsl;": "\u2afd", + "part;": "\u2202", + "pcy;": "\u043f", + "percnt;": "%", + "period;": ".", + "permil;": "\u2030", + "perp;": "\u22a5", + "pertenk;": "\u2031", + "pfr;": "\U0001d52d", + "phi;": "\u03c6", + "phiv;": "\u03d5", + "phmmat;": "\u2133", + "phone;": "\u260e", + "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", + "plusmn": "\xb1", + "plusmn;": "\xb1", + "plussim;": "\u2a26", + "plustwo;": "\u2a27", + "pm;": "\xb1", + "pointint;": "\u2a15", + "popf;": "\U0001d561", + "pound": "\xa3", + "pound;": "\xa3", + "pr;": "\u227a", + "prE;": "\u2ab3", + "prap;": "\u2ab7", + "prcue;": "\u227c", + "pre;": "\u2aaf", + "prec;": "\u227a", + "precapprox;": "\u2ab7", + "preccurlyeq;": "\u227c", + "preceq;": "\u2aaf", + "precnapprox;": "\u2ab9", + "precneqq;": "\u2ab5", + "precnsim;": "\u22e8", + "precsim;": "\u227e", + "prime;": "\u2032", + "primes;": "\u2119", + "prnE;": "\u2ab5", + "prnap;": "\u2ab9", + "prnsim;": "\u22e8", + "prod;": "\u220f", + "profalar;": "\u232e", + "profline;": "\u2312", + "profsurf;": "\u2313", + "prop;": "\u221d", + "propto;": "\u221d", + "prsim;": "\u227e", + "prurel;": "\u22b0", + "pscr;": "\U0001d4c5", + "psi;": "\u03c8", + "puncsp;": "\u2008", + "qfr;": "\U0001d52e", + "qint;": "\u2a0c", + "qopf;": "\U0001d562", + "qprime;": "\u2057", + "qscr;": "\U0001d4c6", + "quaternions;": "\u210d", + "quatint;": "\u2a16", + "quest;": "?", + "questeq;": "\u225f", + "quot": "\"", + "quot;": "\"", + "rAarr;": "\u21db", + "rArr;": "\u21d2", + "rAtail;": "\u291c", + "rBarr;": "\u290f", + "rHar;": "\u2964", + "race;": "\u223d\u0331", + "racute;": "\u0155", + "radic;": "\u221a", + "raemptyv;": "\u29b3", + "rang;": "\u27e9", + "rangd;": "\u2992", + "range;": "\u29a5", + "rangle;": "\u27e9", + "raquo": "\xbb", + "raquo;": "\xbb", + "rarr;": "\u2192", + "rarrap;": "\u2975", + "rarrb;": "\u21e5", + "rarrbfs;": "\u2920", + "rarrc;": "\u2933", + "rarrfs;": "\u291e", + "rarrhk;": "\u21aa", + "rarrlp;": "\u21ac", + "rarrpl;": "\u2945", + "rarrsim;": "\u2974", + "rarrtl;": "\u21a3", + "rarrw;": "\u219d", + "ratail;": "\u291a", + "ratio;": "\u2236", + "rationals;": "\u211a", + "rbarr;": "\u290d", + "rbbrk;": "\u2773", + "rbrace;": "}", + "rbrack;": "]", + "rbrke;": "\u298c", + "rbrksld;": "\u298e", + "rbrkslu;": "\u2990", + "rcaron;": "\u0159", + "rcedil;": "\u0157", + "rceil;": "\u2309", + "rcub;": "}", + "rcy;": "\u0440", + "rdca;": "\u2937", + "rdldhar;": "\u2969", + "rdquo;": "\u201d", + "rdquor;": "\u201d", + "rdsh;": "\u21b3", + "real;": "\u211c", + "realine;": "\u211b", + "realpart;": "\u211c", + "reals;": "\u211d", + "rect;": "\u25ad", + "reg": "\xae", + "reg;": "\xae", + "rfisht;": "\u297d", + "rfloor;": "\u230b", + "rfr;": "\U0001d52f", + "rhard;": "\u21c1", + "rharu;": "\u21c0", + "rharul;": "\u296c", + "rho;": "\u03c1", + "rhov;": "\u03f1", + "rightarrow;": "\u2192", + "rightarrowtail;": "\u21a3", + "rightharpoondown;": "\u21c1", + "rightharpoonup;": "\u21c0", + "rightleftarrows;": "\u21c4", + "rightleftharpoons;": "\u21cc", + "rightrightarrows;": "\u21c9", + "rightsquigarrow;": "\u219d", + "rightthreetimes;": "\u22cc", + "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;": "\U0001d563", + "roplus;": "\u2a2e", + "rotimes;": "\u2a35", + "rpar;": ")", + "rpargt;": "\u2994", + "rppolint;": "\u2a12", + "rrarr;": "\u21c9", + "rsaquo;": "\u203a", + "rscr;": "\U0001d4c7", + "rsh;": "\u21b1", + "rsqb;": "]", + "rsquo;": "\u2019", + "rsquor;": "\u2019", + "rthree;": "\u22cc", + "rtimes;": "\u22ca", + "rtri;": "\u25b9", + "rtrie;": "\u22b5", + "rtrif;": "\u25b8", + "rtriltri;": "\u29ce", + "ruluhar;": "\u2968", + "rx;": "\u211e", + "sacute;": "\u015b", + "sbquo;": "\u201a", + "sc;": "\u227b", + "scE;": "\u2ab4", + "scap;": "\u2ab8", + "scaron;": "\u0161", + "sccue;": "\u227d", + "sce;": "\u2ab0", + "scedil;": "\u015f", + "scirc;": "\u015d", + "scnE;": "\u2ab6", + "scnap;": "\u2aba", + "scnsim;": "\u22e9", + "scpolint;": "\u2a13", + "scsim;": "\u227f", + "scy;": "\u0441", + "sdot;": "\u22c5", + "sdotb;": "\u22a1", + "sdote;": "\u2a66", + "seArr;": "\u21d8", + "searhk;": "\u2925", + "searr;": "\u2198", + "searrow;": "\u2198", + "sect": "\xa7", + "sect;": "\xa7", + "semi;": ";", + "seswar;": "\u2929", + "setminus;": "\u2216", + "setmn;": "\u2216", + "sext;": "\u2736", + "sfr;": "\U0001d530", + "sfrown;": "\u2322", + "sharp;": "\u266f", + "shchcy;": "\u0449", + "shcy;": "\u0448", + "shortmid;": "\u2223", + "shortparallel;": "\u2225", + "shy": "\xad", + "shy;": "\xad", + "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", + "smallsetminus;": "\u2216", + "smashp;": "\u2a33", + "smeparsl;": "\u29e4", + "smid;": "\u2223", + "smile;": "\u2323", + "smt;": "\u2aaa", + "smte;": "\u2aac", + "smtes;": "\u2aac\ufe00", + "softcy;": "\u044c", + "sol;": "/", + "solb;": "\u29c4", + "solbar;": "\u233f", + "sopf;": "\U0001d564", + "spades;": "\u2660", + "spadesuit;": "\u2660", + "spar;": "\u2225", + "sqcap;": "\u2293", + "sqcaps;": "\u2293\ufe00", + "sqcup;": "\u2294", + "sqcups;": "\u2294\ufe00", + "sqsub;": "\u228f", + "sqsube;": "\u2291", + "sqsubset;": "\u228f", + "sqsubseteq;": "\u2291", + "sqsup;": "\u2290", + "sqsupe;": "\u2292", + "sqsupset;": "\u2290", + "sqsupseteq;": "\u2292", + "squ;": "\u25a1", + "square;": "\u25a1", + "squarf;": "\u25aa", + "squf;": "\u25aa", + "srarr;": "\u2192", + "sscr;": "\U0001d4c8", + "ssetmn;": "\u2216", + "ssmile;": "\u2323", + "sstarf;": "\u22c6", + "star;": "\u2606", + "starf;": "\u2605", + "straightepsilon;": "\u03f5", + "straightphi;": "\u03d5", + "strns;": "\xaf", + "sub;": "\u2282", + "subE;": "\u2ac5", + "subdot;": "\u2abd", + "sube;": "\u2286", + "subedot;": "\u2ac3", + "submult;": "\u2ac1", + "subnE;": "\u2acb", + "subne;": "\u228a", + "subplus;": "\u2abf", + "subrarr;": "\u2979", + "subset;": "\u2282", + "subseteq;": "\u2286", + "subseteqq;": "\u2ac5", + "subsetneq;": "\u228a", + "subsetneqq;": "\u2acb", + "subsim;": "\u2ac7", + "subsub;": "\u2ad5", + "subsup;": "\u2ad3", + "succ;": "\u227b", + "succapprox;": "\u2ab8", + "succcurlyeq;": "\u227d", + "succeq;": "\u2ab0", + "succnapprox;": "\u2aba", + "succneqq;": "\u2ab6", + "succnsim;": "\u22e9", + "succsim;": "\u227f", + "sum;": "\u2211", + "sung;": "\u266a", + "sup1": "\xb9", + "sup1;": "\xb9", + "sup2": "\xb2", + "sup2;": "\xb2", + "sup3": "\xb3", + "sup3;": "\xb3", + "sup;": "\u2283", + "supE;": "\u2ac6", + "supdot;": "\u2abe", + "supdsub;": "\u2ad8", + "supe;": "\u2287", + "supedot;": "\u2ac4", + "suphsol;": "\u27c9", + "suphsub;": "\u2ad7", + "suplarr;": "\u297b", + "supmult;": "\u2ac2", + "supnE;": "\u2acc", + "supne;": "\u228b", + "supplus;": "\u2ac0", + "supset;": "\u2283", + "supseteq;": "\u2287", + "supseteqq;": "\u2ac6", + "supsetneq;": "\u228b", + "supsetneqq;": "\u2acc", + "supsim;": "\u2ac8", + "supsub;": "\u2ad4", + "supsup;": "\u2ad6", + "swArr;": "\u21d9", + "swarhk;": "\u2926", + "swarr;": "\u2199", + "swarrow;": "\u2199", + "swnwar;": "\u292a", + "szlig": "\xdf", + "szlig;": "\xdf", + "target;": "\u2316", + "tau;": "\u03c4", + "tbrk;": "\u23b4", + "tcaron;": "\u0165", + "tcedil;": "\u0163", + "tcy;": "\u0442", + "tdot;": "\u20db", + "telrec;": "\u2315", + "tfr;": "\U0001d531", + "there4;": "\u2234", + "therefore;": "\u2234", + "theta;": "\u03b8", + "thetasym;": "\u03d1", + "thetav;": "\u03d1", + "thickapprox;": "\u2248", + "thicksim;": "\u223c", + "thinsp;": "\u2009", + "thkap;": "\u2248", + "thksim;": "\u223c", + "thorn": "\xfe", + "thorn;": "\xfe", + "tilde;": "\u02dc", + "times": "\xd7", + "times;": "\xd7", + "timesb;": "\u22a0", + "timesbar;": "\u2a31", + "timesd;": "\u2a30", + "tint;": "\u222d", + "toea;": "\u2928", + "top;": "\u22a4", + "topbot;": "\u2336", + "topcir;": "\u2af1", + "topf;": "\U0001d565", + "topfork;": "\u2ada", + "tosa;": "\u2929", + "tprime;": "\u2034", + "trade;": "\u2122", + "triangle;": "\u25b5", + "triangledown;": "\u25bf", + "triangleleft;": "\u25c3", + "trianglelefteq;": "\u22b4", + "triangleq;": "\u225c", + "triangleright;": "\u25b9", + "trianglerighteq;": "\u22b5", + "tridot;": "\u25ec", + "trie;": "\u225c", + "triminus;": "\u2a3a", + "triplus;": "\u2a39", + "trisb;": "\u29cd", + "tritime;": "\u2a3b", + "trpezium;": "\u23e2", + "tscr;": "\U0001d4c9", + "tscy;": "\u0446", + "tshcy;": "\u045b", + "tstrok;": "\u0167", + "twixt;": "\u226c", + "twoheadleftarrow;": "\u219e", + "twoheadrightarrow;": "\u21a0", + "uArr;": "\u21d1", + "uHar;": "\u2963", + "uacute": "\xfa", + "uacute;": "\xfa", + "uarr;": "\u2191", + "ubrcy;": "\u045e", + "ubreve;": "\u016d", + "ucirc": "\xfb", + "ucirc;": "\xfb", + "ucy;": "\u0443", + "udarr;": "\u21c5", + "udblac;": "\u0171", + "udhar;": "\u296e", + "ufisht;": "\u297e", + "ufr;": "\U0001d532", + "ugrave": "\xf9", + "ugrave;": "\xf9", + "uharl;": "\u21bf", + "uharr;": "\u21be", + "uhblk;": "\u2580", + "ulcorn;": "\u231c", + "ulcorner;": "\u231c", + "ulcrop;": "\u230f", + "ultri;": "\u25f8", + "umacr;": "\u016b", + "uml": "\xa8", + "uml;": "\xa8", + "uogon;": "\u0173", + "uopf;": "\U0001d566", + "uparrow;": "\u2191", + "updownarrow;": "\u2195", + "upharpoonleft;": "\u21bf", + "upharpoonright;": "\u21be", + "uplus;": "\u228e", + "upsi;": "\u03c5", + "upsih;": "\u03d2", + "upsilon;": "\u03c5", + "upuparrows;": "\u21c8", + "urcorn;": "\u231d", + "urcorner;": "\u231d", + "urcrop;": "\u230e", + "uring;": "\u016f", + "urtri;": "\u25f9", + "uscr;": "\U0001d4ca", + "utdot;": "\u22f0", + "utilde;": "\u0169", + "utri;": "\u25b5", + "utrif;": "\u25b4", + "uuarr;": "\u21c8", + "uuml": "\xfc", + "uuml;": "\xfc", + "uwangle;": "\u29a7", + "vArr;": "\u21d5", + "vBar;": "\u2ae8", + "vBarv;": "\u2ae9", + "vDash;": "\u22a8", + "vangrt;": "\u299c", + "varepsilon;": "\u03f5", + "varkappa;": "\u03f0", + "varnothing;": "\u2205", + "varphi;": "\u03d5", + "varpi;": "\u03d6", + "varpropto;": "\u221d", + "varr;": "\u2195", + "varrho;": "\u03f1", + "varsigma;": "\u03c2", + "varsubsetneq;": "\u228a\ufe00", + "varsubsetneqq;": "\u2acb\ufe00", + "varsupsetneq;": "\u228b\ufe00", + "varsupsetneqq;": "\u2acc\ufe00", + "vartheta;": "\u03d1", + "vartriangleleft;": "\u22b2", + "vartriangleright;": "\u22b3", + "vcy;": "\u0432", + "vdash;": "\u22a2", + "vee;": "\u2228", + "veebar;": "\u22bb", + "veeeq;": "\u225a", + "vellip;": "\u22ee", + "verbar;": "|", + "vert;": "|", + "vfr;": "\U0001d533", + "vltri;": "\u22b2", + "vnsub;": "\u2282\u20d2", + "vnsup;": "\u2283\u20d2", + "vopf;": "\U0001d567", + "vprop;": "\u221d", + "vrtri;": "\u22b3", + "vscr;": "\U0001d4cb", + "vsubnE;": "\u2acb\ufe00", + "vsubne;": "\u228a\ufe00", + "vsupnE;": "\u2acc\ufe00", + "vsupne;": "\u228b\ufe00", + "vzigzag;": "\u299a", + "wcirc;": "\u0175", + "wedbar;": "\u2a5f", + "wedge;": "\u2227", + "wedgeq;": "\u2259", + "weierp;": "\u2118", + "wfr;": "\U0001d534", + "wopf;": "\U0001d568", + "wp;": "\u2118", + "wr;": "\u2240", + "wreath;": "\u2240", + "wscr;": "\U0001d4cc", + "xcap;": "\u22c2", + "xcirc;": "\u25ef", + "xcup;": "\u22c3", + "xdtri;": "\u25bd", + "xfr;": "\U0001d535", + "xhArr;": "\u27fa", + "xharr;": "\u27f7", + "xi;": "\u03be", + "xlArr;": "\u27f8", + "xlarr;": "\u27f5", + "xmap;": "\u27fc", + "xnis;": "\u22fb", + "xodot;": "\u2a00", + "xopf;": "\U0001d569", + "xoplus;": "\u2a01", + "xotime;": "\u2a02", + "xrArr;": "\u27f9", + "xrarr;": "\u27f6", + "xscr;": "\U0001d4cd", + "xsqcup;": "\u2a06", + "xuplus;": "\u2a04", + "xutri;": "\u25b3", + "xvee;": "\u22c1", + "xwedge;": "\u22c0", + "yacute": "\xfd", + "yacute;": "\xfd", + "yacy;": "\u044f", + "ycirc;": "\u0177", + "ycy;": "\u044b", + "yen": "\xa5", + "yen;": "\xa5", + "yfr;": "\U0001d536", + "yicy;": "\u0457", + "yopf;": "\U0001d56a", + "yscr;": "\U0001d4ce", + "yucy;": "\u044e", + "yuml": "\xff", + "yuml;": "\xff", + "zacute;": "\u017a", + "zcaron;": "\u017e", + "zcy;": "\u0437", + "zdot;": "\u017c", + "zeetrf;": "\u2128", + "zeta;": "\u03b6", + "zfr;": "\U0001d537", + "zhcy;": "\u0436", + "zigrarr;": "\u21dd", + "zopf;": "\U0001d56b", + "zscr;": "\U0001d4cf", + "zwj;": "\u200d", + "zwnj;": "\u200c", +} + +replacementCharacters = { + 0x0: "\uFFFD", + 0x0d: "\u000D", + 0x80: "\u20AC", + 0x81: "\u0081", + 0x82: "\u201A", + 0x83: "\u0192", + 0x84: "\u201E", + 0x85: "\u2026", + 0x86: "\u2020", + 0x87: "\u2021", + 0x88: "\u02C6", + 0x89: "\u2030", + 0x8A: "\u0160", + 0x8B: "\u2039", + 0x8C: "\u0152", + 0x8D: "\u008D", + 0x8E: "\u017D", + 0x8F: "\u008F", + 0x90: "\u0090", + 0x91: "\u2018", + 0x92: "\u2019", + 0x93: "\u201C", + 0x94: "\u201D", + 0x95: "\u2022", + 0x96: "\u2013", + 0x97: "\u2014", + 0x98: "\u02DC", + 0x99: "\u2122", + 0x9A: "\u0161", + 0x9B: "\u203A", + 0x9C: "\u0153", + 0x9D: "\u009D", + 0x9E: "\u017E", + 0x9F: "\u0178", +} + +tokenTypes = { + "Doctype": 0, + "Characters": 1, + "SpaceCharacters": 2, + "StartTag": 3, + "EndTag": 4, + "EmptyTag": 5, + "Comment": 6, + "ParseError": 7 +} + +tagTokenTypes = frozenset([tokenTypes["StartTag"], tokenTypes["EndTag"], + tokenTypes["EmptyTag"]]) + + +prefixes = dict([(v, k) for k, v in namespaces.items()]) +prefixes["http://www.w3.org/1998/Math/MathML"] = "math" + + +class DataLossWarning(UserWarning): + """Raised when the current tree is unable to represent the input data""" + pass + + +class _ReparseException(Exception): + pass diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/__init__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4c21f98a8ebb158028049bbc9693e095bf0921e3 GIT binary patch literal 151 zcmXr!<>iW5rx(ir1dl-k3@`#24nSPY0whuxf*CX!{Z=v*frJsnFBkoi+yecA%mUq{ z(#)I`U4z1mq<jOT6p#=Y$Cst%rQ{dsXO!gTnC4_A>8EApl%y6F>&M4u=4F<|$LkeT U-r}&y%}*)KNwou+UJS$x019d)NdN!< literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/__pycache__/alphabeticalattributes.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/__pycache__/alphabeticalattributes.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..026874b81e9bce13b7de46be31a889519388517b GIT binary patch literal 1277 zcmZuxOK%%D5GMDfl`KEd2T%h&@K7KX&`3dwUJ9c~(6j}5P=Ta~fko0awWKWC+=of7 z5*hNzx%S-O&`W<1uRY}_w5QI{c9KI0&2Ts*zj^RmeZ9Lodhyrv<sUI2f0GYJ0`?;i z`!gs(1l6Rb1+AkZs^cQ2L_{LiNu3rc*hC~cs|UpZ>{MiLNRj_U#6aY4h{$DnHoT6D zp%^|RlhIqiBa_(g^M!47?_{a!t~Ji*LamimZQ~F6MpdnlrB+TFuI*cjcc@Pm+)9{t zelbECDW0gxRk()(XQ+aF4`M$DwS}w?gLHc$x?RPGWEnvo$>l#!rRz<@IQ+WKw4G7h zNp>zbY}uONcFw2;q!=6)l2py<XvAPVzT2{F#n+N?*6>=|j#rYo6?d!x*o9<Lxs^2R z<YeA9^5ldeFtY&LoKD%X3|MgV9$aYajvKrU@~VZ)74L0WZ|;F#sO1uBZX9!)PTH@S zZP_ac*P697E&#oY;#y2!)}7nj24hQQtef5>Z?ILKm=vZzLti<RV}`H{>ffg`S9h~c zb@vy&(&GMui`Ali@KB&DNV%4cXw7WpYW<B?i`i0Xcq%*Nx?AyubgJSSK|}lOwA=V$ ziR%*Dn?oEMfg-sXgRaoL8|Z%oVm|{VNkIiEB0-B7`3Ag7L;|mu`s~LL@$!qucM&h8 zW$#0VCzD#%&@uatBUmvChO`3I>)#wXqi4X5Yx;z|oL|u`4Xnw|GxOZV*W@aC{iRF5 zn;ep}^qRO#q`yaS_TWWy6<;OWWE*YcBXaTWF#!wC9g!`44s^WOJBBX<vK`EQf{*6& zXO0{9D?j!55BNA}C4xH+oQ|P0lgR8tQsw~EWMDG1cR~5QEb&t)OEbV_hFp}wr{Jt@ zXd<*Eu~IL6>e_SJ_!L`VeS);~>6+_azJFk|gUBC)`V_=sI6^<7W17)DdH{1yFZXX6 zJiUuNhX{}c;+3Tzm1W(EUZXuO%Zr}t+nqsKinfAG5&naafn6akR)m`t|6_8R&`{%i zGD6g44<99<8YF^=QQ<LzqzMi2J5{T-tQ`DP*wBtpf57;^a6Uh}$@Dv9y+xc)qH#2i H^PT?yN0~{n literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/__pycache__/base.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/__pycache__/base.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d0334593c449732c89759b61d69b1acd0a08f5e8 GIT binary patch literal 801 zcmZuv!EV$r5VhkZ8@8<$A<mpQkV7{Wh#NvHA(dM%+#-;bWW3aslWc9L64l<eKf{F& z%C#qcffF-Mx7s2s&5YxDp7&;)cPA(FufLYxUUA0m*};l&ze00w&;bK(Sj$V^MrG8B zQgHT}K?LHCfl%>IlnKONSf2bwG|R=fsA|`n!7HiTO>g~}fxgjB_ucq>=ycPAl16)F zE8`lvvtJQzR%q@uI>ky3tc-v|bjL~o0%D9YB#>fEV1}I8n4W8cr5d_Riz3-4G&e`L z<y$7P3q<paoR6vN2ivGT8e^x-+NOy4$!vz<&#Lh4rr7AsX+3BIr)Srfb$|92=qQ-H zQ62QQxb&@gZ**O(1G_8g%Bkh%$Cyc}JME=Rh(Czpw~I;Ra-VB(;9*gGBG$7lyW%@O ziA9MtrXVrrc82Jnb8^q{Gw>lqO49!yzL0w|9D%?voMYTfd|SSY_KdUd%2(b$kVb)Y zjJv8;|56`G`GA%3=z#sjW4Dj#i##QzR7J{hE@j)pU}%3V<@HdRDP!rqEa|cfa@5m- zqlPWbmHtmh@0RgQWFnjq1r}Zpey~{B(pW9^Y6(52eSM`GAD{;%1H&}P50j>k^d@1D GFU4O>pRTe1 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/__pycache__/inject_meta_charset.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/__pycache__/inject_meta_charset.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4166e7a7958b6cfb7ca5097eb637c6d272024630 GIT binary patch literal 1848 zcmZt{O-~y~bY}L`#t=$?0==w|dhh{=TD6CiM3I0*kt!!@5UEz6W$}#hn*H+3n1Z!N zs+=Fdsi&ywwU-{N9(u^RKcI&_wpFG4g`WCm)+A1pvEJL6_ciamdGGo2+1dKxFPlf- z&mi<Snp!689{`9i0Z~M8j1uhQg!m*ed;=p&s1ciq<y#m%Le!+z3q&nu_3W|X+thxB zn$By`MNOl;6`qJJ9!M5MNuF_8x->eEM3klF{2-0m8D&8nNyfuiyv9lgm*z<*SX&vm zSp+r@0E7pKAs<uZ6N-I9x$*+}X61x$RhO6c!zc!u!+Vd@9&1bC9UpHeOom>&8*;(q zy}j1XlikOyNB579JsF;QQ7SX9%R=g99gk-1LBdkmHsCh3)K|d{fLH+}Q4jY>feJh( z7!|M!42mIcGL$=<g^~#`^eQLnb#JonhWykM*?_m%T~Bt|WbeuBjHRBCpqRWT%~Hrv zl%7`dHz&~WAd0uLt)|Is@QXWuN;e3iG?GD3x;Gl|5~g5rr?jj4c?|@AM!W%^|DJ5g zB;U%TeB)#g#dPCNzk8D1`HU)(hTxo~G~-)cnZ#ej(aBavr&nx6I=z8PZ7@mgW`4<C zu&O|)QbO(=9^R^Qv3cWJTRpW}bpYjg8$kR6REkHqKs_kDGj~Kz(a5;Q7k@}dch4x$ z81JHMeDvGMEKEvP(a0(+YMc@N6wc-<>X~CGML2&=?Ge7lX%2knj9g=WFeTw?3Zb=; zeeoC2>!4|k(JneVI3$N;<c!==t#H7H8vmhx)xRoSZFvSP|E|2NbPA_%J7gQt#)v#c zN{Y^c#8pw#(sODLJiCAO92Iu<FI}$m&TQ~!pUx{w%M)Al<H}C@&6J-I2}r&wNCTqg zuc$$-$^!l9rE!3u6&>o*6=f&FZ)gkDqPJfX%?Ho=>uC?NurRUpPM)-N$S~Yt^lZ8~ z#!9PzTg8vs_UgN~FIEaA{p+;!HSYiPT<3r;!P{YK>zn=r8K*GE7^D7rVJf@*b&x~Q zCTlI<%{dEH$CakM%vtF^lOdP;;c026VZusN@q8yrD<O9;$>pVHt7>~#nlzMQ=}f9_ ze^~EInQyTEAUYp5+F2^0fj6{eXL1@YNp>N15r6e&5PT|{2A_lC<MRqF0xIpjl)_C- zGR08!>eup2NbOIPwD>ZRroT&*v;Mle!`^F37)j8SR-Apucxl1ZOGIhpSzg*<o<oZ@ z>s<9iX$c7<#INhV>STkImX6}XASf+8EwpF;C*4p4D(*nX9ZUiZbl5eOMv;eYrb8>O z^DrJT-SHKgg{!!lX14*vw}22faUGjv8N2YC$1bVk1!CegIGMPC7XX`h5$FrBx5*mt z=72H}Jm7%z3Ta?lQ`|}#Xbm#m{yGP(rmd!w@(>bI4}v74gIMhwLC_zB@r2_90Sx0H z&=W=bI_1BbU0esDrk)xiLLud<JEJFItLZ4?oq-%cu?1ZHjc_%{xf)C*diy*dGF!Ua Pm0S1K<Lg<rNE*ifey`42 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/__pycache__/lint.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/__pycache__/lint.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..236b752a5a4167cf1ceee51c31c92e6230687f0c GIT binary patch literal 2594 zcmZuzOK%)S5bmDG?(FQ#NgO8*0S!nz7A1BBfrCK^6elPWiVz8jG)fqcr`z`I&STx( zo7mR+!dgP&WFc|m#ElDz_yLF$$NYf4a!D?nIB}w?XV+OEBXxImS9jG{kFDBw+im~; z&npi;=n(P;nfn}|KZYT9U}A*PjN~+=xfNQu9oiJntjx*X&;{CNPFBn7VI63f)iN({ zgpJ$}eY3B_z8N-w_WCW}oY1iODPaxf9}(vBdcQrf!!~Q)CcV}(&_;T;?#7$4%tnew zX+A84(jH46rZO!Hy)Y`$q+~qGQpH7_$sW}W#rIUC_J{l#MFCVho3Z52EZkVyFXEib zVVrQOTMx^WUC(&V3x!X+=KR`DEaC*@Nlg;OF#FIC_{q0n;v}SugchTr&FbHfEsB;O zH9`liJ|dy}4RJ_V14}$zyOCxf@L>D16f^~DhX<-0@FI{(@Hh{)N)d1&N+EqefbZs3 zkg8xSEtm}AVt>lJ1cz^CSs>z6aySn*Ha?M(3k9yYj;}X1R;u@R65Ajp1lQS+7ht1^ zqGK|#`qr3EC?#WSOd^|6z-b+Pe+}R$4oZUxaU~8Rt;J$HkmX1ue9ah8(f_jJKeq+n z9i@Utd90G1wAhYRye-#)M>`xGAOf(tC>00@rWb?R#Q-lp7j~=XXjhJg;Gs5HpuH$c zi&RCCKKnuykTZ_t*_N(V7{vm-!pw-GB#WhtqMyj$AFrx>xH?RSmp4ag#x7sk-PtU! zyu<LwjOZaRSSeO_RGz(;rJJi;CWdk~gBY$1_eB?^o`xY!UU&=ipj$a@Wri=o1jMfa z!-bK+kY7MNw#gwqw)bu*(x(s!GNJ3_*nV*J&>BNVEt5lgY_p|7?U;(s;lzOx2UZtW zckD1S@Z=ZD9y`jJSU|a7Q#h>+Z21+^z;O*HGaSfA;OtE~7OO84RfBimR_|Iw{s5Bd z%v&Y{OZ)<Fy+I9Do7n?P{))GX7VNCquA+q=lYRqc+V{uK*xj-)pZ11;6EyUj6S7Vo zY}~i*TZhh}dswS*A5+<xAvg31cGz8<Vl?Psf5{*;_+hs;<<^XCPjR>V^d32;#b1D^ zF|dv;(Rs1A;Pug*)*~a=cnmn-P36wC{%E)}t&gj_Ezl!>f9@xU%+tzKNHPD|lD=|T zleNZfN|zv_;I-G#L&vsQ2OqU2<gh-jSDpf_wp>Tafc||z-!|y4R=zv*0IP>q&fQvo zTjwAnEOGR|Tb8_QP<j|?K*G$<W?j?++P!{TbtV+JClZU_K;DAU`X|V%GRwuxg7=SS z8DwaTki||dL!CF=Cv)5<Mw7)(Pq}E-H2Y@Qi@Tudj6s5tH@fC+GxjeU{)*vae$Lrm zEP;28x7b-m$M(#-W9u%VWOwl%;DYLP{+4#I>TB<|iiNrpZ)@**K2-ZiHBPF&c90Y; z_$6wG#VXbg{=#+bdcol4jf0iD&=dk*bp<F**m5`vVi{C7s*1N3y#5wcsh-p}EV_QJ z%(07Tf3ACUZ)2O8JE*UhNd<8@+RW1ACexnWmx|{=0RWY%{jhtRi!{#C11?NaKe+g1 zF(}GM#kAC-0HYn&p6prT9GD``!vu7I^s7jBMIGsrf(h*h3Z@Tzvydt-5-zYH>CV49 z2)HCol)!o=e4Ma!>RLP;LNU}XblDs%9+pEW$V#L`(FA_4Ax^;(woAAbO+6>IYg(LG zLNUuYVf)eU!#Eppd=5bpFX8#($#fQ}H(+`hhRk3h)S*k%qdp7|s21(OI886mj)imw zD4^*Aj3ukOHQNXDeD%tlFPa(e`O}*h=qogUQ+&5%FIn^T+qkPo@AT@}ZZKugdr_2^ zY?LA0ilW_7oJ~3PC}L$2MW!hj3v_$hZ4#bkz&J6oN5vViOBh=*JeZ2I29xJHw9_;p zyVdKUwylvGK?98h{&^AD#|1W<unSFUW!j)tWV&Z!X>!^`T{n`_L|MtXP-3XG(=XG) esCbU3q7aYvKCBG<2s@WVWQ$e{9K8U;xBmgESgV)- literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/__pycache__/optionaltags.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/__pycache__/optionaltags.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f44ffc5001663f23638f50c140d285ea8a32f451 GIT binary patch literal 3055 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 QCX2kz7ub?jPOFylUm2meYXATM literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/__pycache__/sanitizer.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/__pycache__/sanitizer.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b73782acafb6fb9fdd035e1a68f806b5ab573986 GIT binary patch literal 19113 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/__pycache__/whitespace.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/__pycache__/whitespace.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0dff98ebe96594ac199c30e7305b203820269728 GIT binary patch literal 1309 zcmZ8g&2Aev5GJ|Y)$Urd48wKmwkQM?IS6&EpheLff}p9Z<Yoj_&<5KWi`9~jSLXhh zq+G?2PtK_ikVDVC^wLM@gYepuUm>T?tm4=Rg`sx7nIY$!8GhUA#V`NaJN%au@*lai zKqo(dm<l#Q1XZM@2`yQ|N-yy!VodRb3r}$6mq8K$=8Hge$}kDbD2YJt%wic`(j=06 zwkARuZ4=PCPl<>`{Dz2F2D9F!m-NJ%=)NJzx?mGB>|Mc~WaznmHZ`@HTbUMRQ)}x& zQJfW~s4KTIuZp}DGF63@I#cH0ieeCTe3}_~#ZX~xUFRaR*;vU^R@S(_X|i1IA7?tt zA<j5*?*Dez9DbeSmDlS7`CULHNvI$R6EyK87fg7snDk|EN$((;j^M(F)I$+K>Kzw6 zDHNQ1{&>GuDr<~1gWr!K$M)iZT;#H`gQ6NVTJ8?4T-Z#@Y<G}VVqkJzfKgs2>w%98 zuYGdlhYPbq!IaHkunBrW7k^qZqcgUIoPHvQe_XI76KscEcuP-sCrtmiq~-x&e1|N_ z%sUAX5&rk&f>zJLCjg%pONt`=2Z%me(k{^puyw$;fY@*cbP?g#LsEU&+TVgb2K!sf zS00yiWnZ#i2qmYRzrv_MW!4Tf5^&tUZh+MUc-!aME61y>l-fsAFs=kb{mDm7;@HD? zbl~Ef&JBGXK#*R;$S_TD4ARtn($@KzmPYC`dDHj&eK*q9Zid`(Bh^t7LXBHj=iB;3 zR(c)I`<v*`;qTp(ku951Q#ALc^FoPx_fL<f_5E)ILan4{vJ$l(9otfUr;6$5sBOL( z-L!nKd9AnMuniFN8Ek}dx=BO$ZPJ)^LAF`U*69X2@2_TO@0!iQFhXirA)pqgX<3W8 z!tZXHp3XD%-qJ}^QRe_hN4h?jm66tQRT!&7xKH1~4RdH&-P*oD3=7x=F<8zJlG|b} z_F>+zZ63%zI-w^{nxHUg_*mJ2-U1BXT6gm7@&0&{{ycs<e&IYbpW<u8@%{M9Pa)tg zo`$cKP>uSqj|7kAcCLY-MvKN<HIBMtTIv`zOwvVpT^XCfgI*Dg5ahGEs9Yzn%cf9L ne}&%2tv&r#2H07R%w70!RnJGr&|u@YSO^{2fS#;-n>+sl)uBo( literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/alphabeticalattributes.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/alphabeticalattributes.py new file mode 100644 index 00000000..5ba926e3 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/alphabeticalattributes.py @@ -0,0 +1,29 @@ +from __future__ import absolute_import, division, unicode_literals + +from . import base + +from collections import OrderedDict + + +def _attr_key(attr): + """Return an appropriate key for an attribute for sorting + + Attributes have a namespace that can be either ``None`` or a string. We + can't compare the two because they're different types, so we convert + ``None`` to an empty string first. + + """ + return (attr[0][0] or ''), attr[0][1] + + +class Filter(base.Filter): + """Alphabetizes attributes for elements""" + def __iter__(self): + for token in base.Filter.__iter__(self): + if token["type"] in ("StartTag", "EmptyTag"): + attrs = OrderedDict() + for name, value in sorted(token["data"].items(), + key=_attr_key): + attrs[name] = value + token["data"] = attrs + yield token diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/base.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/base.py new file mode 100644 index 00000000..c7dbaed0 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/base.py @@ -0,0 +1,12 @@ +from __future__ import absolute_import, division, unicode_literals + + +class Filter(object): + def __init__(self, source): + self.source = source + + def __iter__(self): + return iter(self.source) + + def __getattr__(self, name): + return getattr(self.source, name) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/inject_meta_charset.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/inject_meta_charset.py new file mode 100644 index 00000000..aefb5c84 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/inject_meta_charset.py @@ -0,0 +1,73 @@ +from __future__ import absolute_import, division, unicode_literals + +from . import base + + +class Filter(base.Filter): + """Injects ``<meta charset=ENCODING>`` tag into head of document""" + def __init__(self, source, encoding): + """Creates a Filter + + :arg source: the source token stream + + :arg encoding: the encoding to set + + """ + base.Filter.__init__(self, source) + self.encoding = encoding + + def __iter__(self): + state = "pre_head" + meta_found = (self.encoding is None) + pending = [] + + for token in base.Filter.__iter__(self): + type = token["type"] + if type == "StartTag": + if token["name"].lower() == "head": + state = "in_head" + + elif type == "EmptyTag": + if token["name"].lower() == "meta": + # replace charset with actual encoding + has_http_equiv_content_type = False + for (namespace, name), value in token["data"].items(): + if namespace is not None: + continue + elif name.lower() == 'charset': + token["data"][(namespace, name)] = self.encoding + meta_found = True + break + elif name == 'http-equiv' and value.lower() == 'content-type': + has_http_equiv_content_type = True + else: + if has_http_equiv_content_type and (None, "content") in token["data"]: + token["data"][(None, "content")] = 'text/html; charset=%s' % self.encoding + meta_found = True + + elif token["name"].lower() == "head" and not meta_found: + # insert meta into empty head + yield {"type": "StartTag", "name": "head", + "data": token["data"]} + yield {"type": "EmptyTag", "name": "meta", + "data": {(None, "charset"): self.encoding}} + yield {"type": "EndTag", "name": "head"} + meta_found = True + continue + + elif type == "EndTag": + if token["name"].lower() == "head" and pending: + # insert meta into head (if necessary) and flush pending queue + yield pending.pop(0) + if not meta_found: + yield {"type": "EmptyTag", "name": "meta", + "data": {(None, "charset"): self.encoding}} + while pending: + yield pending.pop(0) + meta_found = True + state = "post_head" + + if state == "in_head": + pending.append(token) + else: + yield token diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/lint.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/lint.py new file mode 100644 index 00000000..fcc07eec --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/lint.py @@ -0,0 +1,93 @@ +from __future__ import absolute_import, division, unicode_literals + +from pip._vendor.six import text_type + +from . import base +from ..constants import namespaces, voidElements + +from ..constants import spaceCharacters +spaceCharacters = "".join(spaceCharacters) + + +class Filter(base.Filter): + """Lints the token stream for errors + + If it finds any errors, it'll raise an ``AssertionError``. + + """ + def __init__(self, source, require_matching_tags=True): + """Creates a Filter + + :arg source: the source token stream + + :arg require_matching_tags: whether or not to require matching tags + + """ + super(Filter, self).__init__(source) + self.require_matching_tags = require_matching_tags + + def __iter__(self): + open_elements = [] + for token in base.Filter.__iter__(self): + type = token["type"] + if type in ("StartTag", "EmptyTag"): + namespace = token["namespace"] + name = token["name"] + assert namespace is None or isinstance(namespace, text_type) + assert namespace != "" + assert isinstance(name, text_type) + assert name != "" + assert isinstance(token["data"], dict) + if (not namespace or namespace == namespaces["html"]) and name in voidElements: + assert type == "EmptyTag" + else: + assert type == "StartTag" + if type == "StartTag" and self.require_matching_tags: + open_elements.append((namespace, name)) + for (namespace, name), value in token["data"].items(): + assert namespace is None or isinstance(namespace, text_type) + assert namespace != "" + assert isinstance(name, text_type) + assert name != "" + assert isinstance(value, text_type) + + elif type == "EndTag": + namespace = token["namespace"] + name = token["name"] + assert namespace is None or isinstance(namespace, text_type) + assert namespace != "" + assert isinstance(name, text_type) + assert name != "" + if (not namespace or namespace == namespaces["html"]) and name in voidElements: + assert False, "Void element reported as EndTag token: %(tag)s" % {"tag": name} + elif self.require_matching_tags: + start = open_elements.pop() + assert start == (namespace, name) + + elif type == "Comment": + data = token["data"] + assert isinstance(data, text_type) + + elif type in ("Characters", "SpaceCharacters"): + data = token["data"] + assert isinstance(data, text_type) + assert data != "" + if type == "SpaceCharacters": + assert data.strip(spaceCharacters) == "" + + elif type == "Doctype": + name = token["name"] + assert name is None or isinstance(name, text_type) + assert token["publicId"] is None or isinstance(name, text_type) + assert token["systemId"] is None or isinstance(name, text_type) + + elif type == "Entity": + assert isinstance(token["name"], text_type) + + elif type == "SerializerError": + assert isinstance(token["data"], text_type) + + else: + assert False, "Unknown token type: %(type)s" % {"type": type} + + yield token diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/optionaltags.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/optionaltags.py new file mode 100644 index 00000000..4a865012 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/optionaltags.py @@ -0,0 +1,207 @@ +from __future__ import absolute_import, division, unicode_literals + +from . import base + + +class Filter(base.Filter): + """Removes optional tags from the token stream""" + def slider(self): + previous1 = previous2 = None + for token in self.source: + if previous1 is not None: + yield previous2, previous1, token + previous2 = previous1 + previous1 = token + if previous1 is not None: + yield previous2, previous1, None + + def __iter__(self): + for previous, token, next in self.slider(): + type = token["type"] + if type == "StartTag": + if (token["data"] or + not self.is_optional_start(token["name"], previous, next)): + yield token + elif type == "EndTag": + if not self.is_optional_end(token["name"], next): + yield token + else: + yield token + + def is_optional_start(self, tagname, previous, next): + type = next and next["type"] or None + if tagname in 'html': + # An html element's start tag may be omitted if the first thing + # inside the html element is not a space character or a comment. + return type not in ("Comment", "SpaceCharacters") + elif tagname == 'head': + # A head element's start tag may be omitted if the first thing + # inside the head element is an element. + # XXX: we also omit the start tag if the head element is empty + if type in ("StartTag", "EmptyTag"): + return True + elif type == "EndTag": + return next["name"] == "head" + elif tagname == 'body': + # A body element's start tag may be omitted if the first thing + # inside the body element is not a space character or a comment, + # except if the first thing inside the body element is a script + # or style element and the node immediately preceding the body + # element is a head element whose end tag has been omitted. + if type in ("Comment", "SpaceCharacters"): + return False + elif type == "StartTag": + # XXX: we do not look at the preceding event, so we never omit + # the body element's start tag if it's followed by a script or + # a style element. + return next["name"] not in ('script', 'style') + else: + return True + elif tagname == 'colgroup': + # A colgroup element's start tag may be omitted if the first thing + # inside the colgroup element is a col element, and if the element + # is not immediately preceded by another colgroup element whose + # end tag has been omitted. + if type in ("StartTag", "EmptyTag"): + # XXX: we do not look at the preceding event, so instead we never + # omit the colgroup element's end tag when it is immediately + # followed by another colgroup element. See is_optional_end. + return next["name"] == "col" + else: + return False + elif tagname == 'tbody': + # A tbody element's start tag may be omitted if the first thing + # inside the tbody element is a tr element, and if the element is + # not immediately preceded by a tbody, thead, or tfoot element + # whose end tag has been omitted. + if type == "StartTag": + # omit the thead and tfoot elements' end tag when they are + # immediately followed by a tbody element. See is_optional_end. + if previous and previous['type'] == 'EndTag' and \ + previous['name'] in ('tbody', 'thead', 'tfoot'): + return False + return next["name"] == 'tr' + else: + return False + return False + + def is_optional_end(self, tagname, next): + type = next and next["type"] or None + if tagname in ('html', 'head', 'body'): + # An html element's end tag may be omitted if the html element + # is not immediately followed by a space character or a comment. + return type not in ("Comment", "SpaceCharacters") + elif tagname in ('li', 'optgroup', 'tr'): + # A li element's end tag may be omitted if the li element is + # immediately followed by another li element or if there is + # no more content in the parent element. + # An optgroup element's end tag may be omitted if the optgroup + # element is immediately followed by another optgroup element, + # or if there is no more content in the parent element. + # A tr element's end tag may be omitted if the tr element is + # immediately followed by another tr element, or if there is + # no more content in the parent element. + if type == "StartTag": + return next["name"] == tagname + else: + return type == "EndTag" or type is None + elif tagname in ('dt', 'dd'): + # A dt element's end tag may be omitted if the dt element is + # immediately followed by another dt element or a dd element. + # A dd element's end tag may be omitted if the dd element is + # immediately followed by another dd element or a dt element, + # or if there is no more content in the parent element. + if type == "StartTag": + return next["name"] in ('dt', 'dd') + elif tagname == 'dd': + return type == "EndTag" or type is None + else: + return False + elif tagname == 'p': + # A p element's end tag may be omitted if the p element is + # immediately followed by an address, article, aside, + # blockquote, datagrid, dialog, dir, div, dl, fieldset, + # footer, form, h1, h2, h3, h4, h5, h6, header, hr, menu, + # nav, ol, p, pre, section, table, or ul, element, or if + # there is no more content in the parent element. + if type in ("StartTag", "EmptyTag"): + return next["name"] in ('address', 'article', 'aside', + 'blockquote', 'datagrid', 'dialog', + 'dir', 'div', 'dl', 'fieldset', 'footer', + 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', + 'header', 'hr', 'menu', 'nav', 'ol', + 'p', 'pre', 'section', 'table', 'ul') + else: + return type == "EndTag" or type is None + elif tagname == 'option': + # An option element's end tag may be omitted if the option + # element is immediately followed by another option element, + # or if it is immediately followed by an <code>optgroup</code> + # element, or if there is no more content in the parent + # element. + if type == "StartTag": + return next["name"] in ('option', 'optgroup') + else: + return type == "EndTag" or type is None + elif tagname in ('rt', 'rp'): + # An rt element's end tag may be omitted if the rt element is + # immediately followed by an rt or rp element, or if there is + # no more content in the parent element. + # An rp element's end tag may be omitted if the rp element is + # immediately followed by an rt or rp element, or if there is + # no more content in the parent element. + if type == "StartTag": + return next["name"] in ('rt', 'rp') + else: + return type == "EndTag" or type is None + elif tagname == 'colgroup': + # A colgroup element's end tag may be omitted if the colgroup + # element is not immediately followed by a space character or + # a comment. + if type in ("Comment", "SpaceCharacters"): + return False + elif type == "StartTag": + # XXX: we also look for an immediately following colgroup + # element. See is_optional_start. + return next["name"] != 'colgroup' + else: + return True + elif tagname in ('thead', 'tbody'): + # A thead element's end tag may be omitted if the thead element + # is immediately followed by a tbody or tfoot element. + # A tbody element's end tag may be omitted if the tbody element + # is immediately followed by a tbody or tfoot element, or if + # there is no more content in the parent element. + # A tfoot element's end tag may be omitted if the tfoot element + # is immediately followed by a tbody element, or if there is no + # more content in the parent element. + # XXX: we never omit the end tag when the following element is + # a tbody. See is_optional_start. + if type == "StartTag": + return next["name"] in ['tbody', 'tfoot'] + elif tagname == 'tbody': + return type == "EndTag" or type is None + else: + return False + elif tagname == 'tfoot': + # A tfoot element's end tag may be omitted if the tfoot element + # is immediately followed by a tbody element, or if there is no + # more content in the parent element. + # XXX: we never omit the end tag when the following element is + # a tbody. See is_optional_start. + if type == "StartTag": + return next["name"] == 'tbody' + else: + return type == "EndTag" or type is None + elif tagname in ('td', 'th'): + # A td element's end tag may be omitted if the td element is + # immediately followed by a td or th element, or if there is + # no more content in the parent element. + # A th element's end tag may be omitted if the th element is + # immediately followed by a td or th element, or if there is + # no more content in the parent element. + if type == "StartTag": + return next["name"] in ('td', 'th') + else: + return type == "EndTag" or type is None + return False diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/sanitizer.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/sanitizer.py new file mode 100644 index 00000000..af8e77b8 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/sanitizer.py @@ -0,0 +1,896 @@ +from __future__ import absolute_import, division, unicode_literals + +import re +from xml.sax.saxutils import escape, unescape + +from pip._vendor.six.moves import urllib_parse as urlparse + +from . import base +from ..constants import namespaces, prefixes + +__all__ = ["Filter"] + + +allowed_elements = frozenset(( + (namespaces['html'], 'a'), + (namespaces['html'], 'abbr'), + (namespaces['html'], 'acronym'), + (namespaces['html'], 'address'), + (namespaces['html'], 'area'), + (namespaces['html'], 'article'), + (namespaces['html'], 'aside'), + (namespaces['html'], 'audio'), + (namespaces['html'], 'b'), + (namespaces['html'], 'big'), + (namespaces['html'], 'blockquote'), + (namespaces['html'], 'br'), + (namespaces['html'], 'button'), + (namespaces['html'], 'canvas'), + (namespaces['html'], 'caption'), + (namespaces['html'], 'center'), + (namespaces['html'], 'cite'), + (namespaces['html'], 'code'), + (namespaces['html'], 'col'), + (namespaces['html'], 'colgroup'), + (namespaces['html'], 'command'), + (namespaces['html'], 'datagrid'), + (namespaces['html'], 'datalist'), + (namespaces['html'], 'dd'), + (namespaces['html'], 'del'), + (namespaces['html'], 'details'), + (namespaces['html'], 'dfn'), + (namespaces['html'], 'dialog'), + (namespaces['html'], 'dir'), + (namespaces['html'], 'div'), + (namespaces['html'], 'dl'), + (namespaces['html'], 'dt'), + (namespaces['html'], 'em'), + (namespaces['html'], 'event-source'), + (namespaces['html'], 'fieldset'), + (namespaces['html'], 'figcaption'), + (namespaces['html'], 'figure'), + (namespaces['html'], 'footer'), + (namespaces['html'], 'font'), + (namespaces['html'], 'form'), + (namespaces['html'], 'header'), + (namespaces['html'], 'h1'), + (namespaces['html'], 'h2'), + (namespaces['html'], 'h3'), + (namespaces['html'], 'h4'), + (namespaces['html'], 'h5'), + (namespaces['html'], 'h6'), + (namespaces['html'], 'hr'), + (namespaces['html'], 'i'), + (namespaces['html'], 'img'), + (namespaces['html'], 'input'), + (namespaces['html'], 'ins'), + (namespaces['html'], 'keygen'), + (namespaces['html'], 'kbd'), + (namespaces['html'], 'label'), + (namespaces['html'], 'legend'), + (namespaces['html'], 'li'), + (namespaces['html'], 'm'), + (namespaces['html'], 'map'), + (namespaces['html'], 'menu'), + (namespaces['html'], 'meter'), + (namespaces['html'], 'multicol'), + (namespaces['html'], 'nav'), + (namespaces['html'], 'nextid'), + (namespaces['html'], 'ol'), + (namespaces['html'], 'output'), + (namespaces['html'], 'optgroup'), + (namespaces['html'], 'option'), + (namespaces['html'], 'p'), + (namespaces['html'], 'pre'), + (namespaces['html'], 'progress'), + (namespaces['html'], 'q'), + (namespaces['html'], 's'), + (namespaces['html'], 'samp'), + (namespaces['html'], 'section'), + (namespaces['html'], 'select'), + (namespaces['html'], 'small'), + (namespaces['html'], 'sound'), + (namespaces['html'], 'source'), + (namespaces['html'], 'spacer'), + (namespaces['html'], 'span'), + (namespaces['html'], 'strike'), + (namespaces['html'], 'strong'), + (namespaces['html'], 'sub'), + (namespaces['html'], 'sup'), + (namespaces['html'], 'table'), + (namespaces['html'], 'tbody'), + (namespaces['html'], 'td'), + (namespaces['html'], 'textarea'), + (namespaces['html'], 'time'), + (namespaces['html'], 'tfoot'), + (namespaces['html'], 'th'), + (namespaces['html'], 'thead'), + (namespaces['html'], 'tr'), + (namespaces['html'], 'tt'), + (namespaces['html'], 'u'), + (namespaces['html'], 'ul'), + (namespaces['html'], 'var'), + (namespaces['html'], 'video'), + (namespaces['mathml'], 'maction'), + (namespaces['mathml'], 'math'), + (namespaces['mathml'], 'merror'), + (namespaces['mathml'], 'mfrac'), + (namespaces['mathml'], 'mi'), + (namespaces['mathml'], 'mmultiscripts'), + (namespaces['mathml'], 'mn'), + (namespaces['mathml'], 'mo'), + (namespaces['mathml'], 'mover'), + (namespaces['mathml'], 'mpadded'), + (namespaces['mathml'], 'mphantom'), + (namespaces['mathml'], 'mprescripts'), + (namespaces['mathml'], 'mroot'), + (namespaces['mathml'], 'mrow'), + (namespaces['mathml'], 'mspace'), + (namespaces['mathml'], 'msqrt'), + (namespaces['mathml'], 'mstyle'), + (namespaces['mathml'], 'msub'), + (namespaces['mathml'], 'msubsup'), + (namespaces['mathml'], 'msup'), + (namespaces['mathml'], 'mtable'), + (namespaces['mathml'], 'mtd'), + (namespaces['mathml'], 'mtext'), + (namespaces['mathml'], 'mtr'), + (namespaces['mathml'], 'munder'), + (namespaces['mathml'], 'munderover'), + (namespaces['mathml'], 'none'), + (namespaces['svg'], 'a'), + (namespaces['svg'], 'animate'), + (namespaces['svg'], 'animateColor'), + (namespaces['svg'], 'animateMotion'), + (namespaces['svg'], 'animateTransform'), + (namespaces['svg'], 'clipPath'), + (namespaces['svg'], 'circle'), + (namespaces['svg'], 'defs'), + (namespaces['svg'], 'desc'), + (namespaces['svg'], 'ellipse'), + (namespaces['svg'], 'font-face'), + (namespaces['svg'], 'font-face-name'), + (namespaces['svg'], 'font-face-src'), + (namespaces['svg'], 'g'), + (namespaces['svg'], 'glyph'), + (namespaces['svg'], 'hkern'), + (namespaces['svg'], 'linearGradient'), + (namespaces['svg'], 'line'), + (namespaces['svg'], 'marker'), + (namespaces['svg'], 'metadata'), + (namespaces['svg'], 'missing-glyph'), + (namespaces['svg'], 'mpath'), + (namespaces['svg'], 'path'), + (namespaces['svg'], 'polygon'), + (namespaces['svg'], 'polyline'), + (namespaces['svg'], 'radialGradient'), + (namespaces['svg'], 'rect'), + (namespaces['svg'], 'set'), + (namespaces['svg'], 'stop'), + (namespaces['svg'], 'svg'), + (namespaces['svg'], 'switch'), + (namespaces['svg'], 'text'), + (namespaces['svg'], 'title'), + (namespaces['svg'], 'tspan'), + (namespaces['svg'], 'use'), +)) + +allowed_attributes = frozenset(( + # HTML attributes + (None, 'abbr'), + (None, 'accept'), + (None, 'accept-charset'), + (None, 'accesskey'), + (None, 'action'), + (None, 'align'), + (None, 'alt'), + (None, 'autocomplete'), + (None, 'autofocus'), + (None, 'axis'), + (None, 'background'), + (None, 'balance'), + (None, 'bgcolor'), + (None, 'bgproperties'), + (None, 'border'), + (None, 'bordercolor'), + (None, 'bordercolordark'), + (None, 'bordercolorlight'), + (None, 'bottompadding'), + (None, 'cellpadding'), + (None, 'cellspacing'), + (None, 'ch'), + (None, 'challenge'), + (None, 'char'), + (None, 'charoff'), + (None, 'choff'), + (None, 'charset'), + (None, 'checked'), + (None, 'cite'), + (None, 'class'), + (None, 'clear'), + (None, 'color'), + (None, 'cols'), + (None, 'colspan'), + (None, 'compact'), + (None, 'contenteditable'), + (None, 'controls'), + (None, 'coords'), + (None, 'data'), + (None, 'datafld'), + (None, 'datapagesize'), + (None, 'datasrc'), + (None, 'datetime'), + (None, 'default'), + (None, 'delay'), + (None, 'dir'), + (None, 'disabled'), + (None, 'draggable'), + (None, 'dynsrc'), + (None, 'enctype'), + (None, 'end'), + (None, 'face'), + (None, 'for'), + (None, 'form'), + (None, 'frame'), + (None, 'galleryimg'), + (None, 'gutter'), + (None, 'headers'), + (None, 'height'), + (None, 'hidefocus'), + (None, 'hidden'), + (None, 'high'), + (None, 'href'), + (None, 'hreflang'), + (None, 'hspace'), + (None, 'icon'), + (None, 'id'), + (None, 'inputmode'), + (None, 'ismap'), + (None, 'keytype'), + (None, 'label'), + (None, 'leftspacing'), + (None, 'lang'), + (None, 'list'), + (None, 'longdesc'), + (None, 'loop'), + (None, 'loopcount'), + (None, 'loopend'), + (None, 'loopstart'), + (None, 'low'), + (None, 'lowsrc'), + (None, 'max'), + (None, 'maxlength'), + (None, 'media'), + (None, 'method'), + (None, 'min'), + (None, 'multiple'), + (None, 'name'), + (None, 'nohref'), + (None, 'noshade'), + (None, 'nowrap'), + (None, 'open'), + (None, 'optimum'), + (None, 'pattern'), + (None, 'ping'), + (None, 'point-size'), + (None, 'poster'), + (None, 'pqg'), + (None, 'preload'), + (None, 'prompt'), + (None, 'radiogroup'), + (None, 'readonly'), + (None, 'rel'), + (None, 'repeat-max'), + (None, 'repeat-min'), + (None, 'replace'), + (None, 'required'), + (None, 'rev'), + (None, 'rightspacing'), + (None, 'rows'), + (None, 'rowspan'), + (None, 'rules'), + (None, 'scope'), + (None, 'selected'), + (None, 'shape'), + (None, 'size'), + (None, 'span'), + (None, 'src'), + (None, 'start'), + (None, 'step'), + (None, 'style'), + (None, 'summary'), + (None, 'suppress'), + (None, 'tabindex'), + (None, 'target'), + (None, 'template'), + (None, 'title'), + (None, 'toppadding'), + (None, 'type'), + (None, 'unselectable'), + (None, 'usemap'), + (None, 'urn'), + (None, 'valign'), + (None, 'value'), + (None, 'variable'), + (None, 'volume'), + (None, 'vspace'), + (None, 'vrml'), + (None, 'width'), + (None, 'wrap'), + (namespaces['xml'], 'lang'), + # MathML attributes + (None, 'actiontype'), + (None, 'align'), + (None, 'columnalign'), + (None, 'columnalign'), + (None, 'columnalign'), + (None, 'columnlines'), + (None, 'columnspacing'), + (None, 'columnspan'), + (None, 'depth'), + (None, 'display'), + (None, 'displaystyle'), + (None, 'equalcolumns'), + (None, 'equalrows'), + (None, 'fence'), + (None, 'fontstyle'), + (None, 'fontweight'), + (None, 'frame'), + (None, 'height'), + (None, 'linethickness'), + (None, 'lspace'), + (None, 'mathbackground'), + (None, 'mathcolor'), + (None, 'mathvariant'), + (None, 'mathvariant'), + (None, 'maxsize'), + (None, 'minsize'), + (None, 'other'), + (None, 'rowalign'), + (None, 'rowalign'), + (None, 'rowalign'), + (None, 'rowlines'), + (None, 'rowspacing'), + (None, 'rowspan'), + (None, 'rspace'), + (None, 'scriptlevel'), + (None, 'selection'), + (None, 'separator'), + (None, 'stretchy'), + (None, 'width'), + (None, 'width'), + (namespaces['xlink'], 'href'), + (namespaces['xlink'], 'show'), + (namespaces['xlink'], 'type'), + # SVG attributes + (None, 'accent-height'), + (None, 'accumulate'), + (None, 'additive'), + (None, 'alphabetic'), + (None, 'arabic-form'), + (None, 'ascent'), + (None, 'attributeName'), + (None, 'attributeType'), + (None, 'baseProfile'), + (None, 'bbox'), + (None, 'begin'), + (None, 'by'), + (None, 'calcMode'), + (None, 'cap-height'), + (None, 'class'), + (None, 'clip-path'), + (None, 'color'), + (None, 'color-rendering'), + (None, 'content'), + (None, 'cx'), + (None, 'cy'), + (None, 'd'), + (None, 'dx'), + (None, 'dy'), + (None, 'descent'), + (None, 'display'), + (None, 'dur'), + (None, 'end'), + (None, 'fill'), + (None, 'fill-opacity'), + (None, 'fill-rule'), + (None, 'font-family'), + (None, 'font-size'), + (None, 'font-stretch'), + (None, 'font-style'), + (None, 'font-variant'), + (None, 'font-weight'), + (None, 'from'), + (None, 'fx'), + (None, 'fy'), + (None, 'g1'), + (None, 'g2'), + (None, 'glyph-name'), + (None, 'gradientUnits'), + (None, 'hanging'), + (None, 'height'), + (None, 'horiz-adv-x'), + (None, 'horiz-origin-x'), + (None, 'id'), + (None, 'ideographic'), + (None, 'k'), + (None, 'keyPoints'), + (None, 'keySplines'), + (None, 'keyTimes'), + (None, 'lang'), + (None, 'marker-end'), + (None, 'marker-mid'), + (None, 'marker-start'), + (None, 'markerHeight'), + (None, 'markerUnits'), + (None, 'markerWidth'), + (None, 'mathematical'), + (None, 'max'), + (None, 'min'), + (None, 'name'), + (None, 'offset'), + (None, 'opacity'), + (None, 'orient'), + (None, 'origin'), + (None, 'overline-position'), + (None, 'overline-thickness'), + (None, 'panose-1'), + (None, 'path'), + (None, 'pathLength'), + (None, 'points'), + (None, 'preserveAspectRatio'), + (None, 'r'), + (None, 'refX'), + (None, 'refY'), + (None, 'repeatCount'), + (None, 'repeatDur'), + (None, 'requiredExtensions'), + (None, 'requiredFeatures'), + (None, 'restart'), + (None, 'rotate'), + (None, 'rx'), + (None, 'ry'), + (None, 'slope'), + (None, 'stemh'), + (None, 'stemv'), + (None, 'stop-color'), + (None, 'stop-opacity'), + (None, 'strikethrough-position'), + (None, 'strikethrough-thickness'), + (None, 'stroke'), + (None, 'stroke-dasharray'), + (None, 'stroke-dashoffset'), + (None, 'stroke-linecap'), + (None, 'stroke-linejoin'), + (None, 'stroke-miterlimit'), + (None, 'stroke-opacity'), + (None, 'stroke-width'), + (None, 'systemLanguage'), + (None, 'target'), + (None, 'text-anchor'), + (None, 'to'), + (None, 'transform'), + (None, 'type'), + (None, 'u1'), + (None, 'u2'), + (None, 'underline-position'), + (None, 'underline-thickness'), + (None, 'unicode'), + (None, 'unicode-range'), + (None, 'units-per-em'), + (None, 'values'), + (None, 'version'), + (None, 'viewBox'), + (None, 'visibility'), + (None, 'width'), + (None, 'widths'), + (None, 'x'), + (None, 'x-height'), + (None, 'x1'), + (None, 'x2'), + (namespaces['xlink'], 'actuate'), + (namespaces['xlink'], 'arcrole'), + (namespaces['xlink'], 'href'), + (namespaces['xlink'], 'role'), + (namespaces['xlink'], 'show'), + (namespaces['xlink'], 'title'), + (namespaces['xlink'], 'type'), + (namespaces['xml'], 'base'), + (namespaces['xml'], 'lang'), + (namespaces['xml'], 'space'), + (None, 'y'), + (None, 'y1'), + (None, 'y2'), + (None, 'zoomAndPan'), +)) + +attr_val_is_uri = frozenset(( + (None, 'href'), + (None, 'src'), + (None, 'cite'), + (None, 'action'), + (None, 'longdesc'), + (None, 'poster'), + (None, 'background'), + (None, 'datasrc'), + (None, 'dynsrc'), + (None, 'lowsrc'), + (None, 'ping'), + (namespaces['xlink'], 'href'), + (namespaces['xml'], 'base'), +)) + +svg_attr_val_allows_ref = frozenset(( + (None, 'clip-path'), + (None, 'color-profile'), + (None, 'cursor'), + (None, 'fill'), + (None, 'filter'), + (None, 'marker'), + (None, 'marker-start'), + (None, 'marker-mid'), + (None, 'marker-end'), + (None, 'mask'), + (None, 'stroke'), +)) + +svg_allow_local_href = frozenset(( + (None, 'altGlyph'), + (None, 'animate'), + (None, 'animateColor'), + (None, 'animateMotion'), + (None, 'animateTransform'), + (None, 'cursor'), + (None, 'feImage'), + (None, 'filter'), + (None, 'linearGradient'), + (None, 'pattern'), + (None, 'radialGradient'), + (None, 'textpath'), + (None, 'tref'), + (None, 'set'), + (None, 'use') +)) + +allowed_css_properties = frozenset(( + 'azimuth', + 'background-color', + 'border-bottom-color', + 'border-collapse', + 'border-color', + 'border-left-color', + 'border-right-color', + 'border-top-color', + 'clear', + 'color', + 'cursor', + 'direction', + 'display', + 'elevation', + 'float', + 'font', + 'font-family', + 'font-size', + 'font-style', + 'font-variant', + 'font-weight', + 'height', + 'letter-spacing', + 'line-height', + 'overflow', + 'pause', + 'pause-after', + 'pause-before', + 'pitch', + 'pitch-range', + 'richness', + 'speak', + 'speak-header', + 'speak-numeral', + 'speak-punctuation', + 'speech-rate', + 'stress', + 'text-align', + 'text-decoration', + 'text-indent', + 'unicode-bidi', + 'vertical-align', + 'voice-family', + 'volume', + 'white-space', + 'width', +)) + +allowed_css_keywords = frozenset(( + 'auto', + 'aqua', + 'black', + 'block', + 'blue', + 'bold', + 'both', + 'bottom', + 'brown', + 'center', + 'collapse', + 'dashed', + 'dotted', + 'fuchsia', + 'gray', + 'green', + '!important', + 'italic', + 'left', + 'lime', + 'maroon', + 'medium', + 'none', + 'navy', + 'normal', + 'nowrap', + 'olive', + 'pointer', + 'purple', + 'red', + 'right', + 'solid', + 'silver', + 'teal', + 'top', + 'transparent', + 'underline', + 'white', + 'yellow', +)) + +allowed_svg_properties = frozenset(( + 'fill', + 'fill-opacity', + 'fill-rule', + 'stroke', + 'stroke-width', + 'stroke-linecap', + 'stroke-linejoin', + 'stroke-opacity', +)) + +allowed_protocols = frozenset(( + 'ed2k', + 'ftp', + 'http', + 'https', + 'irc', + 'mailto', + 'news', + 'gopher', + 'nntp', + 'telnet', + 'webcal', + 'xmpp', + 'callto', + 'feed', + 'urn', + 'aim', + 'rsync', + 'tag', + 'ssh', + 'sftp', + 'rtsp', + 'afs', + 'data', +)) + +allowed_content_types = frozenset(( + 'image/png', + 'image/jpeg', + 'image/gif', + 'image/webp', + 'image/bmp', + 'text/plain', +)) + + +data_content_type = re.compile(r''' + ^ + # Match a content type <application>/<type> + (?P<content_type>[-a-zA-Z0-9.]+/[-a-zA-Z0-9.]+) + # Match any character set and encoding + (?:(?:;charset=(?:[-a-zA-Z0-9]+)(?:;(?:base64))?) + |(?:;(?:base64))?(?:;charset=(?:[-a-zA-Z0-9]+))?) + # Assume the rest is data + ,.* + $ + ''', + re.VERBOSE) + + +class Filter(base.Filter): + """Sanitizes token stream of XHTML+MathML+SVG and of inline style attributes""" + def __init__(self, + source, + allowed_elements=allowed_elements, + allowed_attributes=allowed_attributes, + allowed_css_properties=allowed_css_properties, + allowed_css_keywords=allowed_css_keywords, + allowed_svg_properties=allowed_svg_properties, + allowed_protocols=allowed_protocols, + allowed_content_types=allowed_content_types, + attr_val_is_uri=attr_val_is_uri, + svg_attr_val_allows_ref=svg_attr_val_allows_ref, + svg_allow_local_href=svg_allow_local_href): + """Creates a Filter + + :arg allowed_elements: set of elements to allow--everything else will + be escaped + + :arg allowed_attributes: set of attributes to allow in + elements--everything else will be stripped + + :arg allowed_css_properties: set of CSS properties to allow--everything + else will be stripped + + :arg allowed_css_keywords: set of CSS keywords to allow--everything + else will be stripped + + :arg allowed_svg_properties: set of SVG properties to allow--everything + else will be removed + + :arg allowed_protocols: set of allowed protocols for URIs + + :arg allowed_content_types: set of allowed content types for ``data`` URIs. + + :arg attr_val_is_uri: set of attributes that have URI values--values + that have a scheme not listed in ``allowed_protocols`` are removed + + :arg svg_attr_val_allows_ref: set of SVG attributes that can have + references + + :arg svg_allow_local_href: set of SVG elements that can have local + hrefs--these are removed + + """ + super(Filter, self).__init__(source) + self.allowed_elements = allowed_elements + self.allowed_attributes = allowed_attributes + self.allowed_css_properties = allowed_css_properties + self.allowed_css_keywords = allowed_css_keywords + self.allowed_svg_properties = allowed_svg_properties + self.allowed_protocols = allowed_protocols + self.allowed_content_types = allowed_content_types + self.attr_val_is_uri = attr_val_is_uri + self.svg_attr_val_allows_ref = svg_attr_val_allows_ref + self.svg_allow_local_href = svg_allow_local_href + + def __iter__(self): + for token in base.Filter.__iter__(self): + token = self.sanitize_token(token) + if token: + yield token + + # Sanitize the +html+, escaping all elements not in ALLOWED_ELEMENTS, and + # stripping out all attributes not in ALLOWED_ATTRIBUTES. Style attributes + # are parsed, and a restricted set, specified by ALLOWED_CSS_PROPERTIES and + # ALLOWED_CSS_KEYWORDS, are allowed through. attributes in ATTR_VAL_IS_URI + # are scanned, and only URI schemes specified in ALLOWED_PROTOCOLS are + # allowed. + # + # sanitize_html('<script> do_nasty_stuff() </script>') + # => <script> do_nasty_stuff() </script> + # sanitize_html('<a href="javascript: sucker();">Click here for $100</a>') + # => <a>Click here for $100</a> + def sanitize_token(self, token): + + # accommodate filters which use token_type differently + token_type = token["type"] + if token_type in ("StartTag", "EndTag", "EmptyTag"): + name = token["name"] + namespace = token["namespace"] + if ((namespace, name) in self.allowed_elements or + (namespace is None and + (namespaces["html"], name) in self.allowed_elements)): + return self.allowed_token(token) + else: + return self.disallowed_token(token) + elif token_type == "Comment": + pass + else: + return token + + def allowed_token(self, token): + if "data" in token: + attrs = token["data"] + attr_names = set(attrs.keys()) + + # Remove forbidden attributes + for to_remove in (attr_names - self.allowed_attributes): + del token["data"][to_remove] + attr_names.remove(to_remove) + + # Remove attributes with disallowed URL values + for attr in (attr_names & self.attr_val_is_uri): + assert attr in attrs + # I don't have a clue where this regexp comes from or why it matches those + # characters, nor why we call unescape. I just know it's always been here. + # Should you be worried by this comment in a sanitizer? Yes. On the other hand, all + # this will do is remove *more* than it otherwise would. + val_unescaped = re.sub("[`\x00-\x20\x7f-\xa0\\s]+", '', + unescape(attrs[attr])).lower() + # remove replacement characters from unescaped characters + val_unescaped = val_unescaped.replace("\ufffd", "") + try: + uri = urlparse.urlparse(val_unescaped) + except ValueError: + uri = None + del attrs[attr] + if uri and uri.scheme: + if uri.scheme not in self.allowed_protocols: + del attrs[attr] + if uri.scheme == 'data': + m = data_content_type.match(uri.path) + if not m: + del attrs[attr] + elif m.group('content_type') not in self.allowed_content_types: + del attrs[attr] + + for attr in self.svg_attr_val_allows_ref: + if attr in attrs: + attrs[attr] = re.sub(r'url\s*\(\s*[^#\s][^)]+?\)', + ' ', + unescape(attrs[attr])) + if (token["name"] in self.svg_allow_local_href and + (namespaces['xlink'], 'href') in attrs and re.search(r'^\s*[^#\s].*', + attrs[(namespaces['xlink'], 'href')])): + del attrs[(namespaces['xlink'], 'href')] + if (None, 'style') in attrs: + attrs[(None, 'style')] = self.sanitize_css(attrs[(None, 'style')]) + token["data"] = attrs + return token + + def disallowed_token(self, token): + token_type = token["type"] + if token_type == "EndTag": + token["data"] = "</%s>" % token["name"] + elif token["data"]: + assert token_type in ("StartTag", "EmptyTag") + attrs = [] + for (ns, name), v in token["data"].items(): + attrs.append(' %s="%s"' % (name if ns is None else "%s:%s" % (prefixes[ns], name), escape(v))) + token["data"] = "<%s%s>" % (token["name"], ''.join(attrs)) + else: + token["data"] = "<%s>" % token["name"] + if token.get("selfClosing"): + token["data"] = token["data"][:-1] + "/>" + + token["type"] = "Characters" + + del token["name"] + return token + + def sanitize_css(self, style): + # disallow urls + style = re.compile(r'url\s*\(\s*[^\s)]+?\s*\)\s*').sub(' ', style) + + # gauntlet + if not re.match(r"""^([:,;#%.\sa-zA-Z0-9!]|\w-\w|'[\s\w]+'|"[\s\w]+"|\([\d,\s]+\))*$""", style): + return '' + if not re.match(r"^\s*([-\w]+\s*:[^:;]*(;\s*|$))*$", style): + return '' + + clean = [] + for prop, value in re.findall(r"([-\w]+)\s*:\s*([^:;]*)", style): + if not value: + continue + if prop.lower() in self.allowed_css_properties: + clean.append(prop + ': ' + value + ';') + elif prop.split('-')[0].lower() in ['background', 'border', 'margin', + 'padding']: + for keyword in value.split(): + if keyword not in self.allowed_css_keywords and \ + not re.match(r"^(#[0-9a-fA-F]+|rgb\(\d+%?,\d*%?,?\d*%?\)?|\d{0,2}\.?\d{0,2}(cm|em|ex|in|mm|pc|pt|px|%|,|\))?)$", keyword): # noqa + break + else: + clean.append(prop + ': ' + value + ';') + elif prop.lower() in self.allowed_svg_properties: + clean.append(prop + ': ' + value + ';') + + return ' '.join(clean) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/whitespace.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/whitespace.py new file mode 100644 index 00000000..0d12584b --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/whitespace.py @@ -0,0 +1,38 @@ +from __future__ import absolute_import, division, unicode_literals + +import re + +from . import base +from ..constants import rcdataElements, spaceCharacters +spaceCharacters = "".join(spaceCharacters) + +SPACES_REGEX = re.compile("[%s]+" % spaceCharacters) + + +class Filter(base.Filter): + """Collapses whitespace except in pre, textarea, and script elements""" + spacePreserveElements = frozenset(["pre", "textarea"] + list(rcdataElements)) + + def __iter__(self): + preserve = 0 + for token in base.Filter.__iter__(self): + type = token["type"] + if type == "StartTag" \ + and (preserve or token["name"] in self.spacePreserveElements): + preserve += 1 + + elif type == "EndTag" and preserve: + preserve -= 1 + + elif not preserve and type == "SpaceCharacters" and token["data"]: + # Test on token["data"] above to not introduce spaces where there were not + token["data"] = " " + + elif not preserve and type == "Characters": + token["data"] = collapse_spaces(token["data"]) + + yield token + + +def collapse_spaces(text): + return SPACES_REGEX.sub(' ', text) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/html5parser.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/html5parser.py new file mode 100644 index 00000000..ae41a133 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/html5parser.py @@ -0,0 +1,2791 @@ +from __future__ import absolute_import, division, unicode_literals +from pip._vendor.six import with_metaclass, viewkeys + +import types +from collections import OrderedDict + +from . import _inputstream +from . import _tokenizer + +from . import treebuilders +from .treebuilders.base import Marker + +from . import _utils +from .constants import ( + spaceCharacters, asciiUpper2Lower, + specialElements, headingElements, cdataElements, rcdataElements, + tokenTypes, tagTokenTypes, + namespaces, + htmlIntegrationPointElements, mathmlTextIntegrationPointElements, + adjustForeignAttributes as adjustForeignAttributesMap, + adjustMathMLAttributes, adjustSVGAttributes, + E, + _ReparseException +) + + +def parse(doc, treebuilder="etree", namespaceHTMLElements=True, **kwargs): + """Parse an HTML document as a string or file-like object into a tree + + :arg doc: the document to parse as a string or file-like object + + :arg treebuilder: the treebuilder to use when parsing + + :arg namespaceHTMLElements: whether or not to namespace HTML elements + + :returns: parsed tree + + Example: + + >>> from html5lib.html5parser import parse + >>> parse('<html><body><p>This is a doc</p></body></html>') + <Element u'{http://www.w3.org/1999/xhtml}html' at 0x7feac4909db0> + + """ + tb = treebuilders.getTreeBuilder(treebuilder) + p = HTMLParser(tb, namespaceHTMLElements=namespaceHTMLElements) + return p.parse(doc, **kwargs) + + +def parseFragment(doc, container="div", treebuilder="etree", namespaceHTMLElements=True, **kwargs): + """Parse an HTML fragment as a string or file-like object into a tree + + :arg doc: the fragment to parse as a string or file-like object + + :arg container: the container context to parse the fragment in + + :arg treebuilder: the treebuilder to use when parsing + + :arg namespaceHTMLElements: whether or not to namespace HTML elements + + :returns: parsed tree + + Example: + + >>> from html5lib.html5libparser import parseFragment + >>> parseFragment('<b>this is a fragment</b>') + <Element u'DOCUMENT_FRAGMENT' at 0x7feac484b090> + + """ + tb = treebuilders.getTreeBuilder(treebuilder) + p = HTMLParser(tb, namespaceHTMLElements=namespaceHTMLElements) + return p.parseFragment(doc, container=container, **kwargs) + + +def method_decorator_metaclass(function): + class Decorated(type): + def __new__(meta, classname, bases, classDict): + for attributeName, attribute in classDict.items(): + if isinstance(attribute, types.FunctionType): + attribute = function(attribute) + + classDict[attributeName] = attribute + return type.__new__(meta, classname, bases, classDict) + return Decorated + + +class HTMLParser(object): + """HTML parser + + Generates a tree structure from a stream of (possibly malformed) HTML. + + """ + + def __init__(self, tree=None, strict=False, namespaceHTMLElements=True, debug=False): + """ + :arg tree: a treebuilder class controlling the type of tree that will be + returned. Built in treebuilders can be accessed through + html5lib.treebuilders.getTreeBuilder(treeType) + + :arg strict: raise an exception when a parse error is encountered + + :arg namespaceHTMLElements: whether or not to namespace HTML elements + + :arg debug: whether or not to enable debug mode which logs things + + Example: + + >>> from html5lib.html5parser import HTMLParser + >>> parser = HTMLParser() # generates parser with etree builder + >>> parser = HTMLParser('lxml', strict=True) # generates parser with lxml builder which is strict + + """ + + # Raise an exception on the first error encountered + self.strict = strict + + if tree is None: + tree = treebuilders.getTreeBuilder("etree") + self.tree = tree(namespaceHTMLElements) + self.errors = [] + + self.phases = dict([(name, cls(self, self.tree)) for name, cls in + getPhases(debug).items()]) + + def _parse(self, stream, innerHTML=False, container="div", scripting=False, **kwargs): + + self.innerHTMLMode = innerHTML + self.container = container + self.scripting = scripting + self.tokenizer = _tokenizer.HTMLTokenizer(stream, parser=self, **kwargs) + self.reset() + + try: + self.mainLoop() + except _ReparseException: + self.reset() + self.mainLoop() + + def reset(self): + self.tree.reset() + self.firstStartTag = False + self.errors = [] + self.log = [] # only used with debug mode + # "quirks" / "limited quirks" / "no quirks" + self.compatMode = "no quirks" + + if self.innerHTMLMode: + self.innerHTML = self.container.lower() + + if self.innerHTML in cdataElements: + self.tokenizer.state = self.tokenizer.rcdataState + elif self.innerHTML in rcdataElements: + self.tokenizer.state = self.tokenizer.rawtextState + elif self.innerHTML == 'plaintext': + self.tokenizer.state = self.tokenizer.plaintextState + else: + # state already is data state + # self.tokenizer.state = self.tokenizer.dataState + pass + self.phase = self.phases["beforeHtml"] + self.phase.insertHtmlElement() + self.resetInsertionMode() + else: + self.innerHTML = False # pylint:disable=redefined-variable-type + self.phase = self.phases["initial"] + + self.lastPhase = None + + self.beforeRCDataPhase = None + + self.framesetOK = True + + @property + def documentEncoding(self): + """Name of the character encoding that was used to decode the input stream, or + :obj:`None` if that is not determined yet + + """ + if not hasattr(self, 'tokenizer'): + return None + return self.tokenizer.stream.charEncoding[0].name + + def isHTMLIntegrationPoint(self, element): + if (element.name == "annotation-xml" and + element.namespace == namespaces["mathml"]): + return ("encoding" in element.attributes and + element.attributes["encoding"].translate( + asciiUpper2Lower) in + ("text/html", "application/xhtml+xml")) + else: + return (element.namespace, element.name) in htmlIntegrationPointElements + + def isMathMLTextIntegrationPoint(self, element): + return (element.namespace, element.name) in mathmlTextIntegrationPointElements + + def mainLoop(self): + CharactersToken = tokenTypes["Characters"] + SpaceCharactersToken = tokenTypes["SpaceCharacters"] + StartTagToken = tokenTypes["StartTag"] + EndTagToken = tokenTypes["EndTag"] + CommentToken = tokenTypes["Comment"] + DoctypeToken = tokenTypes["Doctype"] + ParseErrorToken = tokenTypes["ParseError"] + + for token in self.normalizedTokens(): + prev_token = None + new_token = token + while new_token is not None: + prev_token = new_token + currentNode = self.tree.openElements[-1] if self.tree.openElements else None + currentNodeNamespace = currentNode.namespace if currentNode else None + currentNodeName = currentNode.name if currentNode else None + + type = new_token["type"] + + if type == ParseErrorToken: + self.parseError(new_token["data"], new_token.get("datavars", {})) + new_token = None + else: + if (len(self.tree.openElements) == 0 or + currentNodeNamespace == self.tree.defaultNamespace or + (self.isMathMLTextIntegrationPoint(currentNode) and + ((type == StartTagToken and + token["name"] not in frozenset(["mglyph", "malignmark"])) or + type in (CharactersToken, SpaceCharactersToken))) or + (currentNodeNamespace == namespaces["mathml"] and + currentNodeName == "annotation-xml" and + type == StartTagToken and + token["name"] == "svg") or + (self.isHTMLIntegrationPoint(currentNode) and + type in (StartTagToken, CharactersToken, SpaceCharactersToken))): + phase = self.phase + else: + phase = self.phases["inForeignContent"] + + if type == CharactersToken: + new_token = phase.processCharacters(new_token) + elif type == SpaceCharactersToken: + new_token = phase.processSpaceCharacters(new_token) + elif type == StartTagToken: + new_token = phase.processStartTag(new_token) + elif type == EndTagToken: + new_token = phase.processEndTag(new_token) + elif type == CommentToken: + new_token = phase.processComment(new_token) + elif type == DoctypeToken: + new_token = phase.processDoctype(new_token) + + if (type == StartTagToken and prev_token["selfClosing"] and + not prev_token["selfClosingAcknowledged"]): + self.parseError("non-void-element-with-trailing-solidus", + {"name": prev_token["name"]}) + + # When the loop finishes it's EOF + reprocess = True + phases = [] + while reprocess: + phases.append(self.phase) + reprocess = self.phase.processEOF() + if reprocess: + assert self.phase not in phases + + def normalizedTokens(self): + for token in self.tokenizer: + yield self.normalizeToken(token) + + def parse(self, stream, *args, **kwargs): + """Parse a HTML document into a well-formed tree + + :arg stream: a file-like object or string containing the HTML to be parsed + + The optional encoding parameter must be a string that indicates + the encoding. If specified, that encoding will be used, + regardless of any BOM or later declaration (such as in a meta + element). + + :arg scripting: treat noscript elements as if JavaScript was turned on + + :returns: parsed tree + + Example: + + >>> from html5lib.html5parser import HTMLParser + >>> parser = HTMLParser() + >>> parser.parse('<html><body><p>This is a doc</p></body></html>') + <Element u'{http://www.w3.org/1999/xhtml}html' at 0x7feac4909db0> + + """ + self._parse(stream, False, None, *args, **kwargs) + return self.tree.getDocument() + + def parseFragment(self, stream, *args, **kwargs): + """Parse a HTML fragment into a well-formed tree fragment + + :arg container: name of the element we're setting the innerHTML + property if set to None, default to 'div' + + :arg stream: a file-like object or string containing the HTML to be parsed + + The optional encoding parameter must be a string that indicates + the encoding. If specified, that encoding will be used, + regardless of any BOM or later declaration (such as in a meta + element) + + :arg scripting: treat noscript elements as if JavaScript was turned on + + :returns: parsed tree + + Example: + + >>> from html5lib.html5libparser import HTMLParser + >>> parser = HTMLParser() + >>> parser.parseFragment('<b>this is a fragment</b>') + <Element u'DOCUMENT_FRAGMENT' at 0x7feac484b090> + + """ + self._parse(stream, True, *args, **kwargs) + return self.tree.getFragment() + + def parseError(self, errorcode="XXX-undefined-error", datavars=None): + # XXX The idea is to make errorcode mandatory. + if datavars is None: + datavars = {} + self.errors.append((self.tokenizer.stream.position(), errorcode, datavars)) + if self.strict: + raise ParseError(E[errorcode] % datavars) + + def normalizeToken(self, token): + # HTML5 specific normalizations to the token stream + if token["type"] == tokenTypes["StartTag"]: + raw = token["data"] + token["data"] = OrderedDict(raw) + if len(raw) > len(token["data"]): + # we had some duplicated attribute, fix so first wins + token["data"].update(raw[::-1]) + + return token + + def adjustMathMLAttributes(self, token): + adjust_attributes(token, adjustMathMLAttributes) + + def adjustSVGAttributes(self, token): + adjust_attributes(token, adjustSVGAttributes) + + def adjustForeignAttributes(self, token): + adjust_attributes(token, adjustForeignAttributesMap) + + def reparseTokenNormal(self, token): + # pylint:disable=unused-argument + self.parser.phase() + + def resetInsertionMode(self): + # The name of this method is mostly historical. (It's also used in the + # specification.) + last = False + newModes = { + "select": "inSelect", + "td": "inCell", + "th": "inCell", + "tr": "inRow", + "tbody": "inTableBody", + "thead": "inTableBody", + "tfoot": "inTableBody", + "caption": "inCaption", + "colgroup": "inColumnGroup", + "table": "inTable", + "head": "inBody", + "body": "inBody", + "frameset": "inFrameset", + "html": "beforeHead" + } + for node in self.tree.openElements[::-1]: + nodeName = node.name + new_phase = None + if node == self.tree.openElements[0]: + assert self.innerHTML + last = True + nodeName = self.innerHTML + # Check for conditions that should only happen in the innerHTML + # case + if nodeName in ("select", "colgroup", "head", "html"): + assert self.innerHTML + + if not last and node.namespace != self.tree.defaultNamespace: + continue + + if nodeName in newModes: + new_phase = self.phases[newModes[nodeName]] + break + elif last: + new_phase = self.phases["inBody"] + break + + self.phase = new_phase + + def parseRCDataRawtext(self, token, contentType): + # Generic RCDATA/RAWTEXT Parsing algorithm + assert contentType in ("RAWTEXT", "RCDATA") + + self.tree.insertElement(token) + + if contentType == "RAWTEXT": + self.tokenizer.state = self.tokenizer.rawtextState + else: + self.tokenizer.state = self.tokenizer.rcdataState + + self.originalPhase = self.phase + + self.phase = self.phases["text"] + + +@_utils.memoize +def getPhases(debug): + def log(function): + """Logger that records which phase processes each token""" + type_names = dict((value, key) for key, value in + tokenTypes.items()) + + def wrapped(self, *args, **kwargs): + if function.__name__.startswith("process") and len(args) > 0: + token = args[0] + try: + info = {"type": type_names[token['type']]} + except: + raise + if token['type'] in tagTokenTypes: + info["name"] = token['name'] + + self.parser.log.append((self.parser.tokenizer.state.__name__, + self.parser.phase.__class__.__name__, + self.__class__.__name__, + function.__name__, + info)) + return function(self, *args, **kwargs) + else: + return function(self, *args, **kwargs) + return wrapped + + def getMetaclass(use_metaclass, metaclass_func): + if use_metaclass: + return method_decorator_metaclass(metaclass_func) + else: + return type + + # pylint:disable=unused-argument + class Phase(with_metaclass(getMetaclass(debug, log))): + """Base class for helper object that implements each phase of processing + """ + + def __init__(self, parser, tree): + self.parser = parser + self.tree = tree + + def processEOF(self): + raise NotImplementedError + + def processComment(self, token): + # For most phases the following is correct. Where it's not it will be + # overridden. + self.tree.insertComment(token, self.tree.openElements[-1]) + + def processDoctype(self, token): + self.parser.parseError("unexpected-doctype") + + def processCharacters(self, token): + self.tree.insertText(token["data"]) + + def processSpaceCharacters(self, token): + self.tree.insertText(token["data"]) + + def processStartTag(self, token): + return self.startTagHandler[token["name"]](token) + + def startTagHtml(self, token): + if not self.parser.firstStartTag and token["name"] == "html": + self.parser.parseError("non-html-root") + # XXX Need a check here to see if the first start tag token emitted is + # this token... If it's not, invoke self.parser.parseError(). + for attr, value in token["data"].items(): + if attr not in self.tree.openElements[0].attributes: + self.tree.openElements[0].attributes[attr] = value + self.parser.firstStartTag = False + + def processEndTag(self, token): + return self.endTagHandler[token["name"]](token) + + class InitialPhase(Phase): + def processSpaceCharacters(self, token): + pass + + def processComment(self, token): + self.tree.insertComment(token, self.tree.document) + + def processDoctype(self, token): + name = token["name"] + publicId = token["publicId"] + systemId = token["systemId"] + correct = token["correct"] + + if (name != "html" or publicId is not None or + systemId is not None and systemId != "about:legacy-compat"): + self.parser.parseError("unknown-doctype") + + if publicId is None: + publicId = "" + + self.tree.insertDoctype(token) + + if publicId != "": + publicId = publicId.translate(asciiUpper2Lower) + + if (not correct or token["name"] != "html" or + publicId.startswith( + ("+//silmaril//dtd html pro v0r11 19970101//", + "-//advasoft ltd//dtd html 3.0 aswedit + extensions//", + "-//as//dtd html 3.0 aswedit + extensions//", + "-//ietf//dtd html 2.0 level 1//", + "-//ietf//dtd html 2.0 level 2//", + "-//ietf//dtd html 2.0 strict level 1//", + "-//ietf//dtd html 2.0 strict level 2//", + "-//ietf//dtd html 2.0 strict//", + "-//ietf//dtd html 2.0//", + "-//ietf//dtd html 2.1e//", + "-//ietf//dtd html 3.0//", + "-//ietf//dtd html 3.2 final//", + "-//ietf//dtd html 3.2//", + "-//ietf//dtd html 3//", + "-//ietf//dtd html level 0//", + "-//ietf//dtd html level 1//", + "-//ietf//dtd html level 2//", + "-//ietf//dtd html level 3//", + "-//ietf//dtd html strict level 0//", + "-//ietf//dtd html strict level 1//", + "-//ietf//dtd html strict level 2//", + "-//ietf//dtd html strict level 3//", + "-//ietf//dtd html strict//", + "-//ietf//dtd html//", + "-//metrius//dtd metrius presentational//", + "-//microsoft//dtd internet explorer 2.0 html strict//", + "-//microsoft//dtd internet explorer 2.0 html//", + "-//microsoft//dtd internet explorer 2.0 tables//", + "-//microsoft//dtd internet explorer 3.0 html strict//", + "-//microsoft//dtd internet explorer 3.0 html//", + "-//microsoft//dtd internet explorer 3.0 tables//", + "-//netscape comm. corp.//dtd html//", + "-//netscape comm. corp.//dtd strict html//", + "-//o'reilly and associates//dtd html 2.0//", + "-//o'reilly and associates//dtd html extended 1.0//", + "-//o'reilly and associates//dtd html extended relaxed 1.0//", + "-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//", + "-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//", + "-//spyglass//dtd html 2.0 extended//", + "-//sq//dtd html 2.0 hotmetal + extensions//", + "-//sun microsystems corp.//dtd hotjava html//", + "-//sun microsystems corp.//dtd hotjava strict html//", + "-//w3c//dtd html 3 1995-03-24//", + "-//w3c//dtd html 3.2 draft//", + "-//w3c//dtd html 3.2 final//", + "-//w3c//dtd html 3.2//", + "-//w3c//dtd html 3.2s draft//", + "-//w3c//dtd html 4.0 frameset//", + "-//w3c//dtd html 4.0 transitional//", + "-//w3c//dtd html experimental 19960712//", + "-//w3c//dtd html experimental 970421//", + "-//w3c//dtd w3 html//", + "-//w3o//dtd w3 html 3.0//", + "-//webtechs//dtd mozilla html 2.0//", + "-//webtechs//dtd mozilla html//")) or + publicId in ("-//w3o//dtd w3 html strict 3.0//en//", + "-/w3c/dtd html 4.0 transitional/en", + "html") or + publicId.startswith( + ("-//w3c//dtd html 4.01 frameset//", + "-//w3c//dtd html 4.01 transitional//")) and + systemId is None or + systemId and systemId.lower() == "http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd"): + self.parser.compatMode = "quirks" + elif (publicId.startswith( + ("-//w3c//dtd xhtml 1.0 frameset//", + "-//w3c//dtd xhtml 1.0 transitional//")) or + publicId.startswith( + ("-//w3c//dtd html 4.01 frameset//", + "-//w3c//dtd html 4.01 transitional//")) and + systemId is not None): + self.parser.compatMode = "limited quirks" + + self.parser.phase = self.parser.phases["beforeHtml"] + + def anythingElse(self): + self.parser.compatMode = "quirks" + self.parser.phase = self.parser.phases["beforeHtml"] + + def processCharacters(self, token): + self.parser.parseError("expected-doctype-but-got-chars") + self.anythingElse() + return token + + def processStartTag(self, token): + self.parser.parseError("expected-doctype-but-got-start-tag", + {"name": token["name"]}) + self.anythingElse() + return token + + def processEndTag(self, token): + self.parser.parseError("expected-doctype-but-got-end-tag", + {"name": token["name"]}) + self.anythingElse() + return token + + def processEOF(self): + self.parser.parseError("expected-doctype-but-got-eof") + self.anythingElse() + return True + + class BeforeHtmlPhase(Phase): + # helper methods + def insertHtmlElement(self): + self.tree.insertRoot(impliedTagToken("html", "StartTag")) + self.parser.phase = self.parser.phases["beforeHead"] + + # other + def processEOF(self): + self.insertHtmlElement() + return True + + def processComment(self, token): + self.tree.insertComment(token, self.tree.document) + + def processSpaceCharacters(self, token): + pass + + def processCharacters(self, token): + self.insertHtmlElement() + return token + + def processStartTag(self, token): + if token["name"] == "html": + self.parser.firstStartTag = True + self.insertHtmlElement() + return token + + def processEndTag(self, token): + if token["name"] not in ("head", "body", "html", "br"): + self.parser.parseError("unexpected-end-tag-before-html", + {"name": token["name"]}) + else: + self.insertHtmlElement() + return token + + class BeforeHeadPhase(Phase): + def __init__(self, parser, tree): + Phase.__init__(self, parser, tree) + + self.startTagHandler = _utils.MethodDispatcher([ + ("html", self.startTagHtml), + ("head", self.startTagHead) + ]) + self.startTagHandler.default = self.startTagOther + + self.endTagHandler = _utils.MethodDispatcher([ + (("head", "body", "html", "br"), self.endTagImplyHead) + ]) + self.endTagHandler.default = self.endTagOther + + def processEOF(self): + self.startTagHead(impliedTagToken("head", "StartTag")) + return True + + def processSpaceCharacters(self, token): + pass + + def processCharacters(self, token): + self.startTagHead(impliedTagToken("head", "StartTag")) + return token + + def startTagHtml(self, token): + return self.parser.phases["inBody"].processStartTag(token) + + def startTagHead(self, token): + self.tree.insertElement(token) + self.tree.headPointer = self.tree.openElements[-1] + self.parser.phase = self.parser.phases["inHead"] + + def startTagOther(self, token): + self.startTagHead(impliedTagToken("head", "StartTag")) + return token + + def endTagImplyHead(self, token): + self.startTagHead(impliedTagToken("head", "StartTag")) + return token + + def endTagOther(self, token): + self.parser.parseError("end-tag-after-implied-root", + {"name": token["name"]}) + + class InHeadPhase(Phase): + def __init__(self, parser, tree): + Phase.__init__(self, parser, tree) + + self.startTagHandler = _utils.MethodDispatcher([ + ("html", self.startTagHtml), + ("title", self.startTagTitle), + (("noframes", "style"), self.startTagNoFramesStyle), + ("noscript", self.startTagNoscript), + ("script", self.startTagScript), + (("base", "basefont", "bgsound", "command", "link"), + self.startTagBaseLinkCommand), + ("meta", self.startTagMeta), + ("head", self.startTagHead) + ]) + self.startTagHandler.default = self.startTagOther + + self.endTagHandler = _utils.MethodDispatcher([ + ("head", self.endTagHead), + (("br", "html", "body"), self.endTagHtmlBodyBr) + ]) + self.endTagHandler.default = self.endTagOther + + # the real thing + def processEOF(self): + self.anythingElse() + return True + + def processCharacters(self, token): + self.anythingElse() + return token + + def startTagHtml(self, token): + return self.parser.phases["inBody"].processStartTag(token) + + def startTagHead(self, token): + self.parser.parseError("two-heads-are-not-better-than-one") + + def startTagBaseLinkCommand(self, token): + self.tree.insertElement(token) + self.tree.openElements.pop() + token["selfClosingAcknowledged"] = True + + def startTagMeta(self, token): + self.tree.insertElement(token) + self.tree.openElements.pop() + token["selfClosingAcknowledged"] = True + + attributes = token["data"] + if self.parser.tokenizer.stream.charEncoding[1] == "tentative": + if "charset" in attributes: + self.parser.tokenizer.stream.changeEncoding(attributes["charset"]) + elif ("content" in attributes and + "http-equiv" in attributes and + attributes["http-equiv"].lower() == "content-type"): + # Encoding it as UTF-8 here is a hack, as really we should pass + # the abstract Unicode string, and just use the + # ContentAttrParser on that, but using UTF-8 allows all chars + # to be encoded and as a ASCII-superset works. + data = _inputstream.EncodingBytes(attributes["content"].encode("utf-8")) + parser = _inputstream.ContentAttrParser(data) + codec = parser.parse() + self.parser.tokenizer.stream.changeEncoding(codec) + + def startTagTitle(self, token): + self.parser.parseRCDataRawtext(token, "RCDATA") + + def startTagNoFramesStyle(self, token): + # Need to decide whether to implement the scripting-disabled case + self.parser.parseRCDataRawtext(token, "RAWTEXT") + + def startTagNoscript(self, token): + if self.parser.scripting: + self.parser.parseRCDataRawtext(token, "RAWTEXT") + else: + self.tree.insertElement(token) + self.parser.phase = self.parser.phases["inHeadNoscript"] + + def startTagScript(self, token): + self.tree.insertElement(token) + self.parser.tokenizer.state = self.parser.tokenizer.scriptDataState + self.parser.originalPhase = self.parser.phase + self.parser.phase = self.parser.phases["text"] + + def startTagOther(self, token): + self.anythingElse() + return token + + def endTagHead(self, token): + node = self.parser.tree.openElements.pop() + assert node.name == "head", "Expected head got %s" % node.name + self.parser.phase = self.parser.phases["afterHead"] + + def endTagHtmlBodyBr(self, token): + self.anythingElse() + return token + + def endTagOther(self, token): + self.parser.parseError("unexpected-end-tag", {"name": token["name"]}) + + def anythingElse(self): + self.endTagHead(impliedTagToken("head")) + + class InHeadNoscriptPhase(Phase): + def __init__(self, parser, tree): + Phase.__init__(self, parser, tree) + + self.startTagHandler = _utils.MethodDispatcher([ + ("html", self.startTagHtml), + (("basefont", "bgsound", "link", "meta", "noframes", "style"), self.startTagBaseLinkCommand), + (("head", "noscript"), self.startTagHeadNoscript), + ]) + self.startTagHandler.default = self.startTagOther + + self.endTagHandler = _utils.MethodDispatcher([ + ("noscript", self.endTagNoscript), + ("br", self.endTagBr), + ]) + self.endTagHandler.default = self.endTagOther + + def processEOF(self): + self.parser.parseError("eof-in-head-noscript") + self.anythingElse() + return True + + def processComment(self, token): + return self.parser.phases["inHead"].processComment(token) + + def processCharacters(self, token): + self.parser.parseError("char-in-head-noscript") + self.anythingElse() + return token + + def processSpaceCharacters(self, token): + return self.parser.phases["inHead"].processSpaceCharacters(token) + + def startTagHtml(self, token): + return self.parser.phases["inBody"].processStartTag(token) + + def startTagBaseLinkCommand(self, token): + return self.parser.phases["inHead"].processStartTag(token) + + def startTagHeadNoscript(self, token): + self.parser.parseError("unexpected-start-tag", {"name": token["name"]}) + + def startTagOther(self, token): + self.parser.parseError("unexpected-inhead-noscript-tag", {"name": token["name"]}) + self.anythingElse() + return token + + def endTagNoscript(self, token): + node = self.parser.tree.openElements.pop() + assert node.name == "noscript", "Expected noscript got %s" % node.name + self.parser.phase = self.parser.phases["inHead"] + + def endTagBr(self, token): + self.parser.parseError("unexpected-inhead-noscript-tag", {"name": token["name"]}) + self.anythingElse() + return token + + def endTagOther(self, token): + self.parser.parseError("unexpected-end-tag", {"name": token["name"]}) + + def anythingElse(self): + # Caller must raise parse error first! + self.endTagNoscript(impliedTagToken("noscript")) + + class AfterHeadPhase(Phase): + def __init__(self, parser, tree): + Phase.__init__(self, parser, tree) + + self.startTagHandler = _utils.MethodDispatcher([ + ("html", self.startTagHtml), + ("body", self.startTagBody), + ("frameset", self.startTagFrameset), + (("base", "basefont", "bgsound", "link", "meta", "noframes", "script", + "style", "title"), + self.startTagFromHead), + ("head", self.startTagHead) + ]) + self.startTagHandler.default = self.startTagOther + self.endTagHandler = _utils.MethodDispatcher([(("body", "html", "br"), + self.endTagHtmlBodyBr)]) + self.endTagHandler.default = self.endTagOther + + def processEOF(self): + self.anythingElse() + return True + + def processCharacters(self, token): + self.anythingElse() + return token + + def startTagHtml(self, token): + return self.parser.phases["inBody"].processStartTag(token) + + def startTagBody(self, token): + self.parser.framesetOK = False + self.tree.insertElement(token) + self.parser.phase = self.parser.phases["inBody"] + + def startTagFrameset(self, token): + self.tree.insertElement(token) + self.parser.phase = self.parser.phases["inFrameset"] + + def startTagFromHead(self, token): + self.parser.parseError("unexpected-start-tag-out-of-my-head", + {"name": token["name"]}) + self.tree.openElements.append(self.tree.headPointer) + self.parser.phases["inHead"].processStartTag(token) + for node in self.tree.openElements[::-1]: + if node.name == "head": + self.tree.openElements.remove(node) + break + + def startTagHead(self, token): + self.parser.parseError("unexpected-start-tag", {"name": token["name"]}) + + def startTagOther(self, token): + self.anythingElse() + return token + + def endTagHtmlBodyBr(self, token): + self.anythingElse() + return token + + def endTagOther(self, token): + self.parser.parseError("unexpected-end-tag", {"name": token["name"]}) + + def anythingElse(self): + self.tree.insertElement(impliedTagToken("body", "StartTag")) + self.parser.phase = self.parser.phases["inBody"] + self.parser.framesetOK = True + + class InBodyPhase(Phase): + # http://www.whatwg.org/specs/web-apps/current-work/#parsing-main-inbody + # the really-really-really-very crazy mode + def __init__(self, parser, tree): + Phase.__init__(self, parser, tree) + + # Set this to the default handler + self.processSpaceCharacters = self.processSpaceCharactersNonPre + + self.startTagHandler = _utils.MethodDispatcher([ + ("html", self.startTagHtml), + (("base", "basefont", "bgsound", "command", "link", "meta", + "script", "style", "title"), + self.startTagProcessInHead), + ("body", self.startTagBody), + ("frameset", self.startTagFrameset), + (("address", "article", "aside", "blockquote", "center", "details", + "dir", "div", "dl", "fieldset", "figcaption", "figure", + "footer", "header", "hgroup", "main", "menu", "nav", "ol", "p", + "section", "summary", "ul"), + self.startTagCloseP), + (headingElements, self.startTagHeading), + (("pre", "listing"), self.startTagPreListing), + ("form", self.startTagForm), + (("li", "dd", "dt"), self.startTagListItem), + ("plaintext", self.startTagPlaintext), + ("a", self.startTagA), + (("b", "big", "code", "em", "font", "i", "s", "small", "strike", + "strong", "tt", "u"), self.startTagFormatting), + ("nobr", self.startTagNobr), + ("button", self.startTagButton), + (("applet", "marquee", "object"), self.startTagAppletMarqueeObject), + ("xmp", self.startTagXmp), + ("table", self.startTagTable), + (("area", "br", "embed", "img", "keygen", "wbr"), + self.startTagVoidFormatting), + (("param", "source", "track"), self.startTagParamSource), + ("input", self.startTagInput), + ("hr", self.startTagHr), + ("image", self.startTagImage), + ("isindex", self.startTagIsIndex), + ("textarea", self.startTagTextarea), + ("iframe", self.startTagIFrame), + ("noscript", self.startTagNoscript), + (("noembed", "noframes"), self.startTagRawtext), + ("select", self.startTagSelect), + (("rp", "rt"), self.startTagRpRt), + (("option", "optgroup"), self.startTagOpt), + (("math"), self.startTagMath), + (("svg"), self.startTagSvg), + (("caption", "col", "colgroup", "frame", "head", + "tbody", "td", "tfoot", "th", "thead", + "tr"), self.startTagMisplaced) + ]) + self.startTagHandler.default = self.startTagOther + + self.endTagHandler = _utils.MethodDispatcher([ + ("body", self.endTagBody), + ("html", self.endTagHtml), + (("address", "article", "aside", "blockquote", "button", "center", + "details", "dialog", "dir", "div", "dl", "fieldset", "figcaption", "figure", + "footer", "header", "hgroup", "listing", "main", "menu", "nav", "ol", "pre", + "section", "summary", "ul"), self.endTagBlock), + ("form", self.endTagForm), + ("p", self.endTagP), + (("dd", "dt", "li"), self.endTagListItem), + (headingElements, self.endTagHeading), + (("a", "b", "big", "code", "em", "font", "i", "nobr", "s", "small", + "strike", "strong", "tt", "u"), self.endTagFormatting), + (("applet", "marquee", "object"), self.endTagAppletMarqueeObject), + ("br", self.endTagBr), + ]) + self.endTagHandler.default = self.endTagOther + + def isMatchingFormattingElement(self, node1, node2): + return (node1.name == node2.name and + node1.namespace == node2.namespace and + node1.attributes == node2.attributes) + + # helper + def addFormattingElement(self, token): + self.tree.insertElement(token) + element = self.tree.openElements[-1] + + matchingElements = [] + for node in self.tree.activeFormattingElements[::-1]: + if node is Marker: + break + elif self.isMatchingFormattingElement(node, element): + matchingElements.append(node) + + assert len(matchingElements) <= 3 + if len(matchingElements) == 3: + self.tree.activeFormattingElements.remove(matchingElements[-1]) + self.tree.activeFormattingElements.append(element) + + # the real deal + def processEOF(self): + allowed_elements = frozenset(("dd", "dt", "li", "p", "tbody", "td", + "tfoot", "th", "thead", "tr", "body", + "html")) + for node in self.tree.openElements[::-1]: + if node.name not in allowed_elements: + self.parser.parseError("expected-closing-tag-but-got-eof") + break + # Stop parsing + + def processSpaceCharactersDropNewline(self, token): + # Sometimes (start of <pre>, <listing>, and <textarea> blocks) we + # want to drop leading newlines + data = token["data"] + self.processSpaceCharacters = self.processSpaceCharactersNonPre + if (data.startswith("\n") and + self.tree.openElements[-1].name in ("pre", "listing", "textarea") and + not self.tree.openElements[-1].hasContent()): + data = data[1:] + if data: + self.tree.reconstructActiveFormattingElements() + self.tree.insertText(data) + + def processCharacters(self, token): + if token["data"] == "\u0000": + # The tokenizer should always emit null on its own + return + self.tree.reconstructActiveFormattingElements() + self.tree.insertText(token["data"]) + # This must be bad for performance + if (self.parser.framesetOK and + any([char not in spaceCharacters + for char in token["data"]])): + self.parser.framesetOK = False + + def processSpaceCharactersNonPre(self, token): + self.tree.reconstructActiveFormattingElements() + self.tree.insertText(token["data"]) + + def startTagProcessInHead(self, token): + return self.parser.phases["inHead"].processStartTag(token) + + def startTagBody(self, token): + self.parser.parseError("unexpected-start-tag", {"name": "body"}) + if (len(self.tree.openElements) == 1 or + self.tree.openElements[1].name != "body"): + assert self.parser.innerHTML + else: + self.parser.framesetOK = False + for attr, value in token["data"].items(): + if attr not in self.tree.openElements[1].attributes: + self.tree.openElements[1].attributes[attr] = value + + def startTagFrameset(self, token): + self.parser.parseError("unexpected-start-tag", {"name": "frameset"}) + if (len(self.tree.openElements) == 1 or self.tree.openElements[1].name != "body"): + assert self.parser.innerHTML + elif not self.parser.framesetOK: + pass + else: + if self.tree.openElements[1].parent: + self.tree.openElements[1].parent.removeChild(self.tree.openElements[1]) + while self.tree.openElements[-1].name != "html": + self.tree.openElements.pop() + self.tree.insertElement(token) + self.parser.phase = self.parser.phases["inFrameset"] + + def startTagCloseP(self, token): + if self.tree.elementInScope("p", variant="button"): + self.endTagP(impliedTagToken("p")) + self.tree.insertElement(token) + + def startTagPreListing(self, token): + if self.tree.elementInScope("p", variant="button"): + self.endTagP(impliedTagToken("p")) + self.tree.insertElement(token) + self.parser.framesetOK = False + self.processSpaceCharacters = self.processSpaceCharactersDropNewline + + def startTagForm(self, token): + if self.tree.formPointer: + self.parser.parseError("unexpected-start-tag", {"name": "form"}) + else: + if self.tree.elementInScope("p", variant="button"): + self.endTagP(impliedTagToken("p")) + self.tree.insertElement(token) + self.tree.formPointer = self.tree.openElements[-1] + + def startTagListItem(self, token): + self.parser.framesetOK = False + + stopNamesMap = {"li": ["li"], + "dt": ["dt", "dd"], + "dd": ["dt", "dd"]} + stopNames = stopNamesMap[token["name"]] + for node in reversed(self.tree.openElements): + if node.name in stopNames: + self.parser.phase.processEndTag( + impliedTagToken(node.name, "EndTag")) + break + if (node.nameTuple in specialElements and + node.name not in ("address", "div", "p")): + break + + if self.tree.elementInScope("p", variant="button"): + self.parser.phase.processEndTag( + impliedTagToken("p", "EndTag")) + + self.tree.insertElement(token) + + def startTagPlaintext(self, token): + if self.tree.elementInScope("p", variant="button"): + self.endTagP(impliedTagToken("p")) + self.tree.insertElement(token) + self.parser.tokenizer.state = self.parser.tokenizer.plaintextState + + def startTagHeading(self, token): + if self.tree.elementInScope("p", variant="button"): + self.endTagP(impliedTagToken("p")) + if self.tree.openElements[-1].name in headingElements: + self.parser.parseError("unexpected-start-tag", {"name": token["name"]}) + self.tree.openElements.pop() + self.tree.insertElement(token) + + def startTagA(self, token): + afeAElement = self.tree.elementInActiveFormattingElements("a") + if afeAElement: + self.parser.parseError("unexpected-start-tag-implies-end-tag", + {"startName": "a", "endName": "a"}) + self.endTagFormatting(impliedTagToken("a")) + if afeAElement in self.tree.openElements: + self.tree.openElements.remove(afeAElement) + if afeAElement in self.tree.activeFormattingElements: + self.tree.activeFormattingElements.remove(afeAElement) + self.tree.reconstructActiveFormattingElements() + self.addFormattingElement(token) + + def startTagFormatting(self, token): + self.tree.reconstructActiveFormattingElements() + self.addFormattingElement(token) + + def startTagNobr(self, token): + self.tree.reconstructActiveFormattingElements() + if self.tree.elementInScope("nobr"): + self.parser.parseError("unexpected-start-tag-implies-end-tag", + {"startName": "nobr", "endName": "nobr"}) + self.processEndTag(impliedTagToken("nobr")) + # XXX Need tests that trigger the following + self.tree.reconstructActiveFormattingElements() + self.addFormattingElement(token) + + def startTagButton(self, token): + if self.tree.elementInScope("button"): + self.parser.parseError("unexpected-start-tag-implies-end-tag", + {"startName": "button", "endName": "button"}) + self.processEndTag(impliedTagToken("button")) + return token + else: + self.tree.reconstructActiveFormattingElements() + self.tree.insertElement(token) + self.parser.framesetOK = False + + def startTagAppletMarqueeObject(self, token): + self.tree.reconstructActiveFormattingElements() + self.tree.insertElement(token) + self.tree.activeFormattingElements.append(Marker) + self.parser.framesetOK = False + + def startTagXmp(self, token): + if self.tree.elementInScope("p", variant="button"): + self.endTagP(impliedTagToken("p")) + self.tree.reconstructActiveFormattingElements() + self.parser.framesetOK = False + self.parser.parseRCDataRawtext(token, "RAWTEXT") + + def startTagTable(self, token): + if self.parser.compatMode != "quirks": + if self.tree.elementInScope("p", variant="button"): + self.processEndTag(impliedTagToken("p")) + self.tree.insertElement(token) + self.parser.framesetOK = False + self.parser.phase = self.parser.phases["inTable"] + + def startTagVoidFormatting(self, token): + self.tree.reconstructActiveFormattingElements() + self.tree.insertElement(token) + self.tree.openElements.pop() + token["selfClosingAcknowledged"] = True + self.parser.framesetOK = False + + def startTagInput(self, token): + framesetOK = self.parser.framesetOK + self.startTagVoidFormatting(token) + if ("type" in token["data"] and + token["data"]["type"].translate(asciiUpper2Lower) == "hidden"): + # input type=hidden doesn't change framesetOK + self.parser.framesetOK = framesetOK + + def startTagParamSource(self, token): + self.tree.insertElement(token) + self.tree.openElements.pop() + token["selfClosingAcknowledged"] = True + + def startTagHr(self, token): + if self.tree.elementInScope("p", variant="button"): + self.endTagP(impliedTagToken("p")) + self.tree.insertElement(token) + self.tree.openElements.pop() + token["selfClosingAcknowledged"] = True + self.parser.framesetOK = False + + def startTagImage(self, token): + # No really... + self.parser.parseError("unexpected-start-tag-treated-as", + {"originalName": "image", "newName": "img"}) + self.processStartTag(impliedTagToken("img", "StartTag", + attributes=token["data"], + selfClosing=token["selfClosing"])) + + def startTagIsIndex(self, token): + self.parser.parseError("deprecated-tag", {"name": "isindex"}) + if self.tree.formPointer: + return + form_attrs = {} + if "action" in token["data"]: + form_attrs["action"] = token["data"]["action"] + self.processStartTag(impliedTagToken("form", "StartTag", + attributes=form_attrs)) + self.processStartTag(impliedTagToken("hr", "StartTag")) + self.processStartTag(impliedTagToken("label", "StartTag")) + # XXX Localization ... + if "prompt" in token["data"]: + prompt = token["data"]["prompt"] + else: + prompt = "This is a searchable index. Enter search keywords: " + self.processCharacters( + {"type": tokenTypes["Characters"], "data": prompt}) + attributes = token["data"].copy() + if "action" in attributes: + del attributes["action"] + if "prompt" in attributes: + del attributes["prompt"] + attributes["name"] = "isindex" + self.processStartTag(impliedTagToken("input", "StartTag", + attributes=attributes, + selfClosing=token["selfClosing"])) + self.processEndTag(impliedTagToken("label")) + self.processStartTag(impliedTagToken("hr", "StartTag")) + self.processEndTag(impliedTagToken("form")) + + def startTagTextarea(self, token): + self.tree.insertElement(token) + self.parser.tokenizer.state = self.parser.tokenizer.rcdataState + self.processSpaceCharacters = self.processSpaceCharactersDropNewline + self.parser.framesetOK = False + + def startTagIFrame(self, token): + self.parser.framesetOK = False + self.startTagRawtext(token) + + def startTagNoscript(self, token): + if self.parser.scripting: + self.startTagRawtext(token) + else: + self.startTagOther(token) + + def startTagRawtext(self, token): + """iframe, noembed noframes, noscript(if scripting enabled)""" + self.parser.parseRCDataRawtext(token, "RAWTEXT") + + def startTagOpt(self, token): + if self.tree.openElements[-1].name == "option": + self.parser.phase.processEndTag(impliedTagToken("option")) + self.tree.reconstructActiveFormattingElements() + self.parser.tree.insertElement(token) + + def startTagSelect(self, token): + self.tree.reconstructActiveFormattingElements() + self.tree.insertElement(token) + self.parser.framesetOK = False + if self.parser.phase in (self.parser.phases["inTable"], + self.parser.phases["inCaption"], + self.parser.phases["inColumnGroup"], + self.parser.phases["inTableBody"], + self.parser.phases["inRow"], + self.parser.phases["inCell"]): + self.parser.phase = self.parser.phases["inSelectInTable"] + else: + self.parser.phase = self.parser.phases["inSelect"] + + def startTagRpRt(self, token): + if self.tree.elementInScope("ruby"): + self.tree.generateImpliedEndTags() + if self.tree.openElements[-1].name != "ruby": + self.parser.parseError() + self.tree.insertElement(token) + + def startTagMath(self, token): + self.tree.reconstructActiveFormattingElements() + self.parser.adjustMathMLAttributes(token) + self.parser.adjustForeignAttributes(token) + token["namespace"] = namespaces["mathml"] + self.tree.insertElement(token) + # Need to get the parse error right for the case where the token + # has a namespace not equal to the xmlns attribute + if token["selfClosing"]: + self.tree.openElements.pop() + token["selfClosingAcknowledged"] = True + + def startTagSvg(self, token): + self.tree.reconstructActiveFormattingElements() + self.parser.adjustSVGAttributes(token) + self.parser.adjustForeignAttributes(token) + token["namespace"] = namespaces["svg"] + self.tree.insertElement(token) + # Need to get the parse error right for the case where the token + # has a namespace not equal to the xmlns attribute + if token["selfClosing"]: + self.tree.openElements.pop() + token["selfClosingAcknowledged"] = True + + def startTagMisplaced(self, token): + """ Elements that should be children of other elements that have a + different insertion mode; here they are ignored + "caption", "col", "colgroup", "frame", "frameset", "head", + "option", "optgroup", "tbody", "td", "tfoot", "th", "thead", + "tr", "noscript" + """ + self.parser.parseError("unexpected-start-tag-ignored", {"name": token["name"]}) + + def startTagOther(self, token): + self.tree.reconstructActiveFormattingElements() + self.tree.insertElement(token) + + def endTagP(self, token): + if not self.tree.elementInScope("p", variant="button"): + self.startTagCloseP(impliedTagToken("p", "StartTag")) + self.parser.parseError("unexpected-end-tag", {"name": "p"}) + self.endTagP(impliedTagToken("p", "EndTag")) + else: + self.tree.generateImpliedEndTags("p") + if self.tree.openElements[-1].name != "p": + self.parser.parseError("unexpected-end-tag", {"name": "p"}) + node = self.tree.openElements.pop() + while node.name != "p": + node = self.tree.openElements.pop() + + def endTagBody(self, token): + if not self.tree.elementInScope("body"): + self.parser.parseError() + return + elif self.tree.openElements[-1].name != "body": + for node in self.tree.openElements[2:]: + if node.name not in frozenset(("dd", "dt", "li", "optgroup", + "option", "p", "rp", "rt", + "tbody", "td", "tfoot", + "th", "thead", "tr", "body", + "html")): + # Not sure this is the correct name for the parse error + self.parser.parseError( + "expected-one-end-tag-but-got-another", + {"gotName": "body", "expectedName": node.name}) + break + self.parser.phase = self.parser.phases["afterBody"] + + def endTagHtml(self, token): + # We repeat the test for the body end tag token being ignored here + if self.tree.elementInScope("body"): + self.endTagBody(impliedTagToken("body")) + return token + + def endTagBlock(self, token): + # Put us back in the right whitespace handling mode + if token["name"] == "pre": + self.processSpaceCharacters = self.processSpaceCharactersNonPre + inScope = self.tree.elementInScope(token["name"]) + if inScope: + self.tree.generateImpliedEndTags() + if self.tree.openElements[-1].name != token["name"]: + self.parser.parseError("end-tag-too-early", {"name": token["name"]}) + if inScope: + node = self.tree.openElements.pop() + while node.name != token["name"]: + node = self.tree.openElements.pop() + + def endTagForm(self, token): + node = self.tree.formPointer + self.tree.formPointer = None + if node is None or not self.tree.elementInScope(node): + self.parser.parseError("unexpected-end-tag", + {"name": "form"}) + else: + self.tree.generateImpliedEndTags() + if self.tree.openElements[-1] != node: + self.parser.parseError("end-tag-too-early-ignored", + {"name": "form"}) + self.tree.openElements.remove(node) + + def endTagListItem(self, token): + if token["name"] == "li": + variant = "list" + else: + variant = None + if not self.tree.elementInScope(token["name"], variant=variant): + self.parser.parseError("unexpected-end-tag", {"name": token["name"]}) + else: + self.tree.generateImpliedEndTags(exclude=token["name"]) + if self.tree.openElements[-1].name != token["name"]: + self.parser.parseError( + "end-tag-too-early", + {"name": token["name"]}) + node = self.tree.openElements.pop() + while node.name != token["name"]: + node = self.tree.openElements.pop() + + def endTagHeading(self, token): + for item in headingElements: + if self.tree.elementInScope(item): + self.tree.generateImpliedEndTags() + break + if self.tree.openElements[-1].name != token["name"]: + self.parser.parseError("end-tag-too-early", {"name": token["name"]}) + + for item in headingElements: + if self.tree.elementInScope(item): + item = self.tree.openElements.pop() + while item.name not in headingElements: + item = self.tree.openElements.pop() + break + + def endTagFormatting(self, token): + """The much-feared adoption agency algorithm""" + # http://svn.whatwg.org/webapps/complete.html#adoptionAgency revision 7867 + # XXX Better parseError messages appreciated. + + # Step 1 + outerLoopCounter = 0 + + # Step 2 + while outerLoopCounter < 8: + + # Step 3 + outerLoopCounter += 1 + + # Step 4: + + # Let the formatting element be the last element in + # the list of active formatting elements that: + # - is between the end of the list and the last scope + # marker in the list, if any, or the start of the list + # otherwise, and + # - has the same tag name as the token. + formattingElement = self.tree.elementInActiveFormattingElements( + token["name"]) + if (not formattingElement or + (formattingElement in self.tree.openElements and + not self.tree.elementInScope(formattingElement.name))): + # If there is no such node, then abort these steps + # and instead act as described in the "any other + # end tag" entry below. + self.endTagOther(token) + return + + # Otherwise, if there is such a node, but that node is + # not in the stack of open elements, then this is a + # parse error; remove the element from the list, and + # abort these steps. + elif formattingElement not in self.tree.openElements: + self.parser.parseError("adoption-agency-1.2", {"name": token["name"]}) + self.tree.activeFormattingElements.remove(formattingElement) + return + + # Otherwise, if there is such a node, and that node is + # also in the stack of open elements, but the element + # is not in scope, then this is a parse error; ignore + # the token, and abort these steps. + elif not self.tree.elementInScope(formattingElement.name): + self.parser.parseError("adoption-agency-4.4", {"name": token["name"]}) + return + + # Otherwise, there is a formatting element and that + # element is in the stack and is in scope. If the + # element is not the current node, this is a parse + # error. In any case, proceed with the algorithm as + # written in the following steps. + else: + if formattingElement != self.tree.openElements[-1]: + self.parser.parseError("adoption-agency-1.3", {"name": token["name"]}) + + # Step 5: + + # Let the furthest block be the topmost node in the + # stack of open elements that is lower in the stack + # than the formatting element, and is an element in + # the special category. There might not be one. + afeIndex = self.tree.openElements.index(formattingElement) + furthestBlock = None + for element in self.tree.openElements[afeIndex:]: + if element.nameTuple in specialElements: + furthestBlock = element + break + + # Step 6: + + # If there is no furthest block, then the UA must + # first pop all the nodes from the bottom of the stack + # of open elements, from the current node up to and + # including the formatting element, then remove the + # formatting element from the list of active + # formatting elements, and finally abort these steps. + if furthestBlock is None: + element = self.tree.openElements.pop() + while element != formattingElement: + element = self.tree.openElements.pop() + self.tree.activeFormattingElements.remove(element) + return + + # Step 7 + commonAncestor = self.tree.openElements[afeIndex - 1] + + # Step 8: + # The bookmark is supposed to help us identify where to reinsert + # nodes in step 15. We have to ensure that we reinsert nodes after + # the node before the active formatting element. Note the bookmark + # can move in step 9.7 + bookmark = self.tree.activeFormattingElements.index(formattingElement) + + # Step 9 + lastNode = node = furthestBlock + innerLoopCounter = 0 + + index = self.tree.openElements.index(node) + while innerLoopCounter < 3: + innerLoopCounter += 1 + # Node is element before node in open elements + index -= 1 + node = self.tree.openElements[index] + if node not in self.tree.activeFormattingElements: + self.tree.openElements.remove(node) + continue + # Step 9.6 + if node == formattingElement: + break + # Step 9.7 + if lastNode == furthestBlock: + bookmark = self.tree.activeFormattingElements.index(node) + 1 + # Step 9.8 + clone = node.cloneNode() + # Replace node with clone + self.tree.activeFormattingElements[ + self.tree.activeFormattingElements.index(node)] = clone + self.tree.openElements[ + self.tree.openElements.index(node)] = clone + node = clone + # Step 9.9 + # Remove lastNode from its parents, if any + if lastNode.parent: + lastNode.parent.removeChild(lastNode) + node.appendChild(lastNode) + # Step 9.10 + lastNode = node + + # Step 10 + # Foster parent lastNode if commonAncestor is a + # table, tbody, tfoot, thead, or tr we need to foster + # parent the lastNode + if lastNode.parent: + lastNode.parent.removeChild(lastNode) + + if commonAncestor.name in frozenset(("table", "tbody", "tfoot", "thead", "tr")): + parent, insertBefore = self.tree.getTableMisnestedNodePosition() + parent.insertBefore(lastNode, insertBefore) + else: + commonAncestor.appendChild(lastNode) + + # Step 11 + clone = formattingElement.cloneNode() + + # Step 12 + furthestBlock.reparentChildren(clone) + + # Step 13 + furthestBlock.appendChild(clone) + + # Step 14 + self.tree.activeFormattingElements.remove(formattingElement) + self.tree.activeFormattingElements.insert(bookmark, clone) + + # Step 15 + self.tree.openElements.remove(formattingElement) + self.tree.openElements.insert( + self.tree.openElements.index(furthestBlock) + 1, clone) + + def endTagAppletMarqueeObject(self, token): + if self.tree.elementInScope(token["name"]): + self.tree.generateImpliedEndTags() + if self.tree.openElements[-1].name != token["name"]: + self.parser.parseError("end-tag-too-early", {"name": token["name"]}) + + if self.tree.elementInScope(token["name"]): + element = self.tree.openElements.pop() + while element.name != token["name"]: + element = self.tree.openElements.pop() + self.tree.clearActiveFormattingElements() + + def endTagBr(self, token): + self.parser.parseError("unexpected-end-tag-treated-as", + {"originalName": "br", "newName": "br element"}) + self.tree.reconstructActiveFormattingElements() + self.tree.insertElement(impliedTagToken("br", "StartTag")) + self.tree.openElements.pop() + + def endTagOther(self, token): + for node in self.tree.openElements[::-1]: + if node.name == token["name"]: + self.tree.generateImpliedEndTags(exclude=token["name"]) + if self.tree.openElements[-1].name != token["name"]: + self.parser.parseError("unexpected-end-tag", {"name": token["name"]}) + while self.tree.openElements.pop() != node: + pass + break + else: + if node.nameTuple in specialElements: + self.parser.parseError("unexpected-end-tag", {"name": token["name"]}) + break + + class TextPhase(Phase): + def __init__(self, parser, tree): + Phase.__init__(self, parser, tree) + self.startTagHandler = _utils.MethodDispatcher([]) + self.startTagHandler.default = self.startTagOther + self.endTagHandler = _utils.MethodDispatcher([ + ("script", self.endTagScript)]) + self.endTagHandler.default = self.endTagOther + + def processCharacters(self, token): + self.tree.insertText(token["data"]) + + def processEOF(self): + self.parser.parseError("expected-named-closing-tag-but-got-eof", + {"name": self.tree.openElements[-1].name}) + self.tree.openElements.pop() + self.parser.phase = self.parser.originalPhase + return True + + def startTagOther(self, token): + assert False, "Tried to process start tag %s in RCDATA/RAWTEXT mode" % token['name'] + + def endTagScript(self, token): + node = self.tree.openElements.pop() + assert node.name == "script" + self.parser.phase = self.parser.originalPhase + # The rest of this method is all stuff that only happens if + # document.write works + + def endTagOther(self, token): + self.tree.openElements.pop() + self.parser.phase = self.parser.originalPhase + + class InTablePhase(Phase): + # http://www.whatwg.org/specs/web-apps/current-work/#in-table + def __init__(self, parser, tree): + Phase.__init__(self, parser, tree) + self.startTagHandler = _utils.MethodDispatcher([ + ("html", self.startTagHtml), + ("caption", self.startTagCaption), + ("colgroup", self.startTagColgroup), + ("col", self.startTagCol), + (("tbody", "tfoot", "thead"), self.startTagRowGroup), + (("td", "th", "tr"), self.startTagImplyTbody), + ("table", self.startTagTable), + (("style", "script"), self.startTagStyleScript), + ("input", self.startTagInput), + ("form", self.startTagForm) + ]) + self.startTagHandler.default = self.startTagOther + + self.endTagHandler = _utils.MethodDispatcher([ + ("table", self.endTagTable), + (("body", "caption", "col", "colgroup", "html", "tbody", "td", + "tfoot", "th", "thead", "tr"), self.endTagIgnore) + ]) + self.endTagHandler.default = self.endTagOther + + # helper methods + def clearStackToTableContext(self): + # "clear the stack back to a table context" + while self.tree.openElements[-1].name not in ("table", "html"): + # self.parser.parseError("unexpected-implied-end-tag-in-table", + # {"name": self.tree.openElements[-1].name}) + self.tree.openElements.pop() + # When the current node is <html> it's an innerHTML case + + # processing methods + def processEOF(self): + if self.tree.openElements[-1].name != "html": + self.parser.parseError("eof-in-table") + else: + assert self.parser.innerHTML + # Stop parsing + + def processSpaceCharacters(self, token): + originalPhase = self.parser.phase + self.parser.phase = self.parser.phases["inTableText"] + self.parser.phase.originalPhase = originalPhase + self.parser.phase.processSpaceCharacters(token) + + def processCharacters(self, token): + originalPhase = self.parser.phase + self.parser.phase = self.parser.phases["inTableText"] + self.parser.phase.originalPhase = originalPhase + self.parser.phase.processCharacters(token) + + def insertText(self, token): + # If we get here there must be at least one non-whitespace character + # Do the table magic! + self.tree.insertFromTable = True + self.parser.phases["inBody"].processCharacters(token) + self.tree.insertFromTable = False + + def startTagCaption(self, token): + self.clearStackToTableContext() + self.tree.activeFormattingElements.append(Marker) + self.tree.insertElement(token) + self.parser.phase = self.parser.phases["inCaption"] + + def startTagColgroup(self, token): + self.clearStackToTableContext() + self.tree.insertElement(token) + self.parser.phase = self.parser.phases["inColumnGroup"] + + def startTagCol(self, token): + self.startTagColgroup(impliedTagToken("colgroup", "StartTag")) + return token + + def startTagRowGroup(self, token): + self.clearStackToTableContext() + self.tree.insertElement(token) + self.parser.phase = self.parser.phases["inTableBody"] + + def startTagImplyTbody(self, token): + self.startTagRowGroup(impliedTagToken("tbody", "StartTag")) + return token + + def startTagTable(self, token): + self.parser.parseError("unexpected-start-tag-implies-end-tag", + {"startName": "table", "endName": "table"}) + self.parser.phase.processEndTag(impliedTagToken("table")) + if not self.parser.innerHTML: + return token + + def startTagStyleScript(self, token): + return self.parser.phases["inHead"].processStartTag(token) + + def startTagInput(self, token): + if ("type" in token["data"] and + token["data"]["type"].translate(asciiUpper2Lower) == "hidden"): + self.parser.parseError("unexpected-hidden-input-in-table") + self.tree.insertElement(token) + # XXX associate with form + self.tree.openElements.pop() + else: + self.startTagOther(token) + + def startTagForm(self, token): + self.parser.parseError("unexpected-form-in-table") + if self.tree.formPointer is None: + self.tree.insertElement(token) + self.tree.formPointer = self.tree.openElements[-1] + self.tree.openElements.pop() + + def startTagOther(self, token): + self.parser.parseError("unexpected-start-tag-implies-table-voodoo", {"name": token["name"]}) + # Do the table magic! + self.tree.insertFromTable = True + self.parser.phases["inBody"].processStartTag(token) + self.tree.insertFromTable = False + + def endTagTable(self, token): + if self.tree.elementInScope("table", variant="table"): + self.tree.generateImpliedEndTags() + if self.tree.openElements[-1].name != "table": + self.parser.parseError("end-tag-too-early-named", + {"gotName": "table", + "expectedName": self.tree.openElements[-1].name}) + while self.tree.openElements[-1].name != "table": + self.tree.openElements.pop() + self.tree.openElements.pop() + self.parser.resetInsertionMode() + else: + # innerHTML case + assert self.parser.innerHTML + self.parser.parseError() + + def endTagIgnore(self, token): + self.parser.parseError("unexpected-end-tag", {"name": token["name"]}) + + def endTagOther(self, token): + self.parser.parseError("unexpected-end-tag-implies-table-voodoo", {"name": token["name"]}) + # Do the table magic! + self.tree.insertFromTable = True + self.parser.phases["inBody"].processEndTag(token) + self.tree.insertFromTable = False + + class InTableTextPhase(Phase): + def __init__(self, parser, tree): + Phase.__init__(self, parser, tree) + self.originalPhase = None + self.characterTokens = [] + + def flushCharacters(self): + data = "".join([item["data"] for item in self.characterTokens]) + if any([item not in spaceCharacters for item in data]): + token = {"type": tokenTypes["Characters"], "data": data} + self.parser.phases["inTable"].insertText(token) + elif data: + self.tree.insertText(data) + self.characterTokens = [] + + def processComment(self, token): + self.flushCharacters() + self.parser.phase = self.originalPhase + return token + + def processEOF(self): + self.flushCharacters() + self.parser.phase = self.originalPhase + return True + + def processCharacters(self, token): + if token["data"] == "\u0000": + return + self.characterTokens.append(token) + + def processSpaceCharacters(self, token): + # pretty sure we should never reach here + self.characterTokens.append(token) + # assert False + + def processStartTag(self, token): + self.flushCharacters() + self.parser.phase = self.originalPhase + return token + + def processEndTag(self, token): + self.flushCharacters() + self.parser.phase = self.originalPhase + return token + + class InCaptionPhase(Phase): + # http://www.whatwg.org/specs/web-apps/current-work/#in-caption + def __init__(self, parser, tree): + Phase.__init__(self, parser, tree) + + self.startTagHandler = _utils.MethodDispatcher([ + ("html", self.startTagHtml), + (("caption", "col", "colgroup", "tbody", "td", "tfoot", "th", + "thead", "tr"), self.startTagTableElement) + ]) + self.startTagHandler.default = self.startTagOther + + self.endTagHandler = _utils.MethodDispatcher([ + ("caption", self.endTagCaption), + ("table", self.endTagTable), + (("body", "col", "colgroup", "html", "tbody", "td", "tfoot", "th", + "thead", "tr"), self.endTagIgnore) + ]) + self.endTagHandler.default = self.endTagOther + + def ignoreEndTagCaption(self): + return not self.tree.elementInScope("caption", variant="table") + + def processEOF(self): + self.parser.phases["inBody"].processEOF() + + def processCharacters(self, token): + return self.parser.phases["inBody"].processCharacters(token) + + def startTagTableElement(self, token): + self.parser.parseError() + # XXX Have to duplicate logic here to find out if the tag is ignored + ignoreEndTag = self.ignoreEndTagCaption() + self.parser.phase.processEndTag(impliedTagToken("caption")) + if not ignoreEndTag: + return token + + def startTagOther(self, token): + return self.parser.phases["inBody"].processStartTag(token) + + def endTagCaption(self, token): + if not self.ignoreEndTagCaption(): + # AT this code is quite similar to endTagTable in "InTable" + self.tree.generateImpliedEndTags() + if self.tree.openElements[-1].name != "caption": + self.parser.parseError("expected-one-end-tag-but-got-another", + {"gotName": "caption", + "expectedName": self.tree.openElements[-1].name}) + while self.tree.openElements[-1].name != "caption": + self.tree.openElements.pop() + self.tree.openElements.pop() + self.tree.clearActiveFormattingElements() + self.parser.phase = self.parser.phases["inTable"] + else: + # innerHTML case + assert self.parser.innerHTML + self.parser.parseError() + + def endTagTable(self, token): + self.parser.parseError() + ignoreEndTag = self.ignoreEndTagCaption() + self.parser.phase.processEndTag(impliedTagToken("caption")) + if not ignoreEndTag: + return token + + def endTagIgnore(self, token): + self.parser.parseError("unexpected-end-tag", {"name": token["name"]}) + + def endTagOther(self, token): + return self.parser.phases["inBody"].processEndTag(token) + + class InColumnGroupPhase(Phase): + # http://www.whatwg.org/specs/web-apps/current-work/#in-column + + def __init__(self, parser, tree): + Phase.__init__(self, parser, tree) + + self.startTagHandler = _utils.MethodDispatcher([ + ("html", self.startTagHtml), + ("col", self.startTagCol) + ]) + self.startTagHandler.default = self.startTagOther + + self.endTagHandler = _utils.MethodDispatcher([ + ("colgroup", self.endTagColgroup), + ("col", self.endTagCol) + ]) + self.endTagHandler.default = self.endTagOther + + def ignoreEndTagColgroup(self): + return self.tree.openElements[-1].name == "html" + + def processEOF(self): + if self.tree.openElements[-1].name == "html": + assert self.parser.innerHTML + return + else: + ignoreEndTag = self.ignoreEndTagColgroup() + self.endTagColgroup(impliedTagToken("colgroup")) + if not ignoreEndTag: + return True + + def processCharacters(self, token): + ignoreEndTag = self.ignoreEndTagColgroup() + self.endTagColgroup(impliedTagToken("colgroup")) + if not ignoreEndTag: + return token + + def startTagCol(self, token): + self.tree.insertElement(token) + self.tree.openElements.pop() + token["selfClosingAcknowledged"] = True + + def startTagOther(self, token): + ignoreEndTag = self.ignoreEndTagColgroup() + self.endTagColgroup(impliedTagToken("colgroup")) + if not ignoreEndTag: + return token + + def endTagColgroup(self, token): + if self.ignoreEndTagColgroup(): + # innerHTML case + assert self.parser.innerHTML + self.parser.parseError() + else: + self.tree.openElements.pop() + self.parser.phase = self.parser.phases["inTable"] + + def endTagCol(self, token): + self.parser.parseError("no-end-tag", {"name": "col"}) + + def endTagOther(self, token): + ignoreEndTag = self.ignoreEndTagColgroup() + self.endTagColgroup(impliedTagToken("colgroup")) + if not ignoreEndTag: + return token + + class InTableBodyPhase(Phase): + # http://www.whatwg.org/specs/web-apps/current-work/#in-table0 + def __init__(self, parser, tree): + Phase.__init__(self, parser, tree) + self.startTagHandler = _utils.MethodDispatcher([ + ("html", self.startTagHtml), + ("tr", self.startTagTr), + (("td", "th"), self.startTagTableCell), + (("caption", "col", "colgroup", "tbody", "tfoot", "thead"), + self.startTagTableOther) + ]) + self.startTagHandler.default = self.startTagOther + + self.endTagHandler = _utils.MethodDispatcher([ + (("tbody", "tfoot", "thead"), self.endTagTableRowGroup), + ("table", self.endTagTable), + (("body", "caption", "col", "colgroup", "html", "td", "th", + "tr"), self.endTagIgnore) + ]) + self.endTagHandler.default = self.endTagOther + + # helper methods + def clearStackToTableBodyContext(self): + while self.tree.openElements[-1].name not in ("tbody", "tfoot", + "thead", "html"): + # self.parser.parseError("unexpected-implied-end-tag-in-table", + # {"name": self.tree.openElements[-1].name}) + self.tree.openElements.pop() + if self.tree.openElements[-1].name == "html": + assert self.parser.innerHTML + + # the rest + def processEOF(self): + self.parser.phases["inTable"].processEOF() + + def processSpaceCharacters(self, token): + return self.parser.phases["inTable"].processSpaceCharacters(token) + + def processCharacters(self, token): + return self.parser.phases["inTable"].processCharacters(token) + + def startTagTr(self, token): + self.clearStackToTableBodyContext() + self.tree.insertElement(token) + self.parser.phase = self.parser.phases["inRow"] + + def startTagTableCell(self, token): + self.parser.parseError("unexpected-cell-in-table-body", + {"name": token["name"]}) + self.startTagTr(impliedTagToken("tr", "StartTag")) + return token + + def startTagTableOther(self, token): + # XXX AT Any ideas on how to share this with endTagTable? + if (self.tree.elementInScope("tbody", variant="table") or + self.tree.elementInScope("thead", variant="table") or + self.tree.elementInScope("tfoot", variant="table")): + self.clearStackToTableBodyContext() + self.endTagTableRowGroup( + impliedTagToken(self.tree.openElements[-1].name)) + return token + else: + # innerHTML case + assert self.parser.innerHTML + self.parser.parseError() + + def startTagOther(self, token): + return self.parser.phases["inTable"].processStartTag(token) + + def endTagTableRowGroup(self, token): + if self.tree.elementInScope(token["name"], variant="table"): + self.clearStackToTableBodyContext() + self.tree.openElements.pop() + self.parser.phase = self.parser.phases["inTable"] + else: + self.parser.parseError("unexpected-end-tag-in-table-body", + {"name": token["name"]}) + + def endTagTable(self, token): + if (self.tree.elementInScope("tbody", variant="table") or + self.tree.elementInScope("thead", variant="table") or + self.tree.elementInScope("tfoot", variant="table")): + self.clearStackToTableBodyContext() + self.endTagTableRowGroup( + impliedTagToken(self.tree.openElements[-1].name)) + return token + else: + # innerHTML case + assert self.parser.innerHTML + self.parser.parseError() + + def endTagIgnore(self, token): + self.parser.parseError("unexpected-end-tag-in-table-body", + {"name": token["name"]}) + + def endTagOther(self, token): + return self.parser.phases["inTable"].processEndTag(token) + + class InRowPhase(Phase): + # http://www.whatwg.org/specs/web-apps/current-work/#in-row + def __init__(self, parser, tree): + Phase.__init__(self, parser, tree) + self.startTagHandler = _utils.MethodDispatcher([ + ("html", self.startTagHtml), + (("td", "th"), self.startTagTableCell), + (("caption", "col", "colgroup", "tbody", "tfoot", "thead", + "tr"), self.startTagTableOther) + ]) + self.startTagHandler.default = self.startTagOther + + self.endTagHandler = _utils.MethodDispatcher([ + ("tr", self.endTagTr), + ("table", self.endTagTable), + (("tbody", "tfoot", "thead"), self.endTagTableRowGroup), + (("body", "caption", "col", "colgroup", "html", "td", "th"), + self.endTagIgnore) + ]) + self.endTagHandler.default = self.endTagOther + + # helper methods (XXX unify this with other table helper methods) + def clearStackToTableRowContext(self): + while self.tree.openElements[-1].name not in ("tr", "html"): + self.parser.parseError("unexpected-implied-end-tag-in-table-row", + {"name": self.tree.openElements[-1].name}) + self.tree.openElements.pop() + + def ignoreEndTagTr(self): + return not self.tree.elementInScope("tr", variant="table") + + # the rest + def processEOF(self): + self.parser.phases["inTable"].processEOF() + + def processSpaceCharacters(self, token): + return self.parser.phases["inTable"].processSpaceCharacters(token) + + def processCharacters(self, token): + return self.parser.phases["inTable"].processCharacters(token) + + def startTagTableCell(self, token): + self.clearStackToTableRowContext() + self.tree.insertElement(token) + self.parser.phase = self.parser.phases["inCell"] + self.tree.activeFormattingElements.append(Marker) + + def startTagTableOther(self, token): + ignoreEndTag = self.ignoreEndTagTr() + self.endTagTr(impliedTagToken("tr")) + # XXX how are we sure it's always ignored in the innerHTML case? + if not ignoreEndTag: + return token + + def startTagOther(self, token): + return self.parser.phases["inTable"].processStartTag(token) + + def endTagTr(self, token): + if not self.ignoreEndTagTr(): + self.clearStackToTableRowContext() + self.tree.openElements.pop() + self.parser.phase = self.parser.phases["inTableBody"] + else: + # innerHTML case + assert self.parser.innerHTML + self.parser.parseError() + + def endTagTable(self, token): + ignoreEndTag = self.ignoreEndTagTr() + self.endTagTr(impliedTagToken("tr")) + # Reprocess the current tag if the tr end tag was not ignored + # XXX how are we sure it's always ignored in the innerHTML case? + if not ignoreEndTag: + return token + + def endTagTableRowGroup(self, token): + if self.tree.elementInScope(token["name"], variant="table"): + self.endTagTr(impliedTagToken("tr")) + return token + else: + self.parser.parseError() + + def endTagIgnore(self, token): + self.parser.parseError("unexpected-end-tag-in-table-row", + {"name": token["name"]}) + + def endTagOther(self, token): + return self.parser.phases["inTable"].processEndTag(token) + + class InCellPhase(Phase): + # http://www.whatwg.org/specs/web-apps/current-work/#in-cell + def __init__(self, parser, tree): + Phase.__init__(self, parser, tree) + self.startTagHandler = _utils.MethodDispatcher([ + ("html", self.startTagHtml), + (("caption", "col", "colgroup", "tbody", "td", "tfoot", "th", + "thead", "tr"), self.startTagTableOther) + ]) + self.startTagHandler.default = self.startTagOther + + self.endTagHandler = _utils.MethodDispatcher([ + (("td", "th"), self.endTagTableCell), + (("body", "caption", "col", "colgroup", "html"), self.endTagIgnore), + (("table", "tbody", "tfoot", "thead", "tr"), self.endTagImply) + ]) + self.endTagHandler.default = self.endTagOther + + # helper + def closeCell(self): + if self.tree.elementInScope("td", variant="table"): + self.endTagTableCell(impliedTagToken("td")) + elif self.tree.elementInScope("th", variant="table"): + self.endTagTableCell(impliedTagToken("th")) + + # the rest + def processEOF(self): + self.parser.phases["inBody"].processEOF() + + def processCharacters(self, token): + return self.parser.phases["inBody"].processCharacters(token) + + def startTagTableOther(self, token): + if (self.tree.elementInScope("td", variant="table") or + self.tree.elementInScope("th", variant="table")): + self.closeCell() + return token + else: + # innerHTML case + assert self.parser.innerHTML + self.parser.parseError() + + def startTagOther(self, token): + return self.parser.phases["inBody"].processStartTag(token) + + def endTagTableCell(self, token): + if self.tree.elementInScope(token["name"], variant="table"): + self.tree.generateImpliedEndTags(token["name"]) + if self.tree.openElements[-1].name != token["name"]: + self.parser.parseError("unexpected-cell-end-tag", + {"name": token["name"]}) + while True: + node = self.tree.openElements.pop() + if node.name == token["name"]: + break + else: + self.tree.openElements.pop() + self.tree.clearActiveFormattingElements() + self.parser.phase = self.parser.phases["inRow"] + else: + self.parser.parseError("unexpected-end-tag", {"name": token["name"]}) + + def endTagIgnore(self, token): + self.parser.parseError("unexpected-end-tag", {"name": token["name"]}) + + def endTagImply(self, token): + if self.tree.elementInScope(token["name"], variant="table"): + self.closeCell() + return token + else: + # sometimes innerHTML case + self.parser.parseError() + + def endTagOther(self, token): + return self.parser.phases["inBody"].processEndTag(token) + + class InSelectPhase(Phase): + def __init__(self, parser, tree): + Phase.__init__(self, parser, tree) + + self.startTagHandler = _utils.MethodDispatcher([ + ("html", self.startTagHtml), + ("option", self.startTagOption), + ("optgroup", self.startTagOptgroup), + ("select", self.startTagSelect), + (("input", "keygen", "textarea"), self.startTagInput), + ("script", self.startTagScript) + ]) + self.startTagHandler.default = self.startTagOther + + self.endTagHandler = _utils.MethodDispatcher([ + ("option", self.endTagOption), + ("optgroup", self.endTagOptgroup), + ("select", self.endTagSelect) + ]) + self.endTagHandler.default = self.endTagOther + + # http://www.whatwg.org/specs/web-apps/current-work/#in-select + def processEOF(self): + if self.tree.openElements[-1].name != "html": + self.parser.parseError("eof-in-select") + else: + assert self.parser.innerHTML + + def processCharacters(self, token): + if token["data"] == "\u0000": + return + self.tree.insertText(token["data"]) + + def startTagOption(self, token): + # We need to imply </option> if <option> is the current node. + if self.tree.openElements[-1].name == "option": + self.tree.openElements.pop() + self.tree.insertElement(token) + + def startTagOptgroup(self, token): + if self.tree.openElements[-1].name == "option": + self.tree.openElements.pop() + if self.tree.openElements[-1].name == "optgroup": + self.tree.openElements.pop() + self.tree.insertElement(token) + + def startTagSelect(self, token): + self.parser.parseError("unexpected-select-in-select") + self.endTagSelect(impliedTagToken("select")) + + def startTagInput(self, token): + self.parser.parseError("unexpected-input-in-select") + if self.tree.elementInScope("select", variant="select"): + self.endTagSelect(impliedTagToken("select")) + return token + else: + assert self.parser.innerHTML + + def startTagScript(self, token): + return self.parser.phases["inHead"].processStartTag(token) + + def startTagOther(self, token): + self.parser.parseError("unexpected-start-tag-in-select", + {"name": token["name"]}) + + def endTagOption(self, token): + if self.tree.openElements[-1].name == "option": + self.tree.openElements.pop() + else: + self.parser.parseError("unexpected-end-tag-in-select", + {"name": "option"}) + + def endTagOptgroup(self, token): + # </optgroup> implicitly closes <option> + if (self.tree.openElements[-1].name == "option" and + self.tree.openElements[-2].name == "optgroup"): + self.tree.openElements.pop() + # It also closes </optgroup> + if self.tree.openElements[-1].name == "optgroup": + self.tree.openElements.pop() + # But nothing else + else: + self.parser.parseError("unexpected-end-tag-in-select", + {"name": "optgroup"}) + + def endTagSelect(self, token): + if self.tree.elementInScope("select", variant="select"): + node = self.tree.openElements.pop() + while node.name != "select": + node = self.tree.openElements.pop() + self.parser.resetInsertionMode() + else: + # innerHTML case + assert self.parser.innerHTML + self.parser.parseError() + + def endTagOther(self, token): + self.parser.parseError("unexpected-end-tag-in-select", + {"name": token["name"]}) + + class InSelectInTablePhase(Phase): + def __init__(self, parser, tree): + Phase.__init__(self, parser, tree) + + self.startTagHandler = _utils.MethodDispatcher([ + (("caption", "table", "tbody", "tfoot", "thead", "tr", "td", "th"), + self.startTagTable) + ]) + self.startTagHandler.default = self.startTagOther + + self.endTagHandler = _utils.MethodDispatcher([ + (("caption", "table", "tbody", "tfoot", "thead", "tr", "td", "th"), + self.endTagTable) + ]) + self.endTagHandler.default = self.endTagOther + + def processEOF(self): + self.parser.phases["inSelect"].processEOF() + + def processCharacters(self, token): + return self.parser.phases["inSelect"].processCharacters(token) + + def startTagTable(self, token): + self.parser.parseError("unexpected-table-element-start-tag-in-select-in-table", {"name": token["name"]}) + self.endTagOther(impliedTagToken("select")) + return token + + def startTagOther(self, token): + return self.parser.phases["inSelect"].processStartTag(token) + + def endTagTable(self, token): + self.parser.parseError("unexpected-table-element-end-tag-in-select-in-table", {"name": token["name"]}) + if self.tree.elementInScope(token["name"], variant="table"): + self.endTagOther(impliedTagToken("select")) + return token + + def endTagOther(self, token): + return self.parser.phases["inSelect"].processEndTag(token) + + class InForeignContentPhase(Phase): + breakoutElements = frozenset(["b", "big", "blockquote", "body", "br", + "center", "code", "dd", "div", "dl", "dt", + "em", "embed", "h1", "h2", "h3", + "h4", "h5", "h6", "head", "hr", "i", "img", + "li", "listing", "menu", "meta", "nobr", + "ol", "p", "pre", "ruby", "s", "small", + "span", "strong", "strike", "sub", "sup", + "table", "tt", "u", "ul", "var"]) + + def __init__(self, parser, tree): + Phase.__init__(self, parser, tree) + + def adjustSVGTagNames(self, token): + replacements = {"altglyph": "altGlyph", + "altglyphdef": "altGlyphDef", + "altglyphitem": "altGlyphItem", + "animatecolor": "animateColor", + "animatemotion": "animateMotion", + "animatetransform": "animateTransform", + "clippath": "clipPath", + "feblend": "feBlend", + "fecolormatrix": "feColorMatrix", + "fecomponenttransfer": "feComponentTransfer", + "fecomposite": "feComposite", + "feconvolvematrix": "feConvolveMatrix", + "fediffuselighting": "feDiffuseLighting", + "fedisplacementmap": "feDisplacementMap", + "fedistantlight": "feDistantLight", + "feflood": "feFlood", + "fefunca": "feFuncA", + "fefuncb": "feFuncB", + "fefuncg": "feFuncG", + "fefuncr": "feFuncR", + "fegaussianblur": "feGaussianBlur", + "feimage": "feImage", + "femerge": "feMerge", + "femergenode": "feMergeNode", + "femorphology": "feMorphology", + "feoffset": "feOffset", + "fepointlight": "fePointLight", + "fespecularlighting": "feSpecularLighting", + "fespotlight": "feSpotLight", + "fetile": "feTile", + "feturbulence": "feTurbulence", + "foreignobject": "foreignObject", + "glyphref": "glyphRef", + "lineargradient": "linearGradient", + "radialgradient": "radialGradient", + "textpath": "textPath"} + + if token["name"] in replacements: + token["name"] = replacements[token["name"]] + + def processCharacters(self, token): + if token["data"] == "\u0000": + token["data"] = "\uFFFD" + elif (self.parser.framesetOK and + any(char not in spaceCharacters for char in token["data"])): + self.parser.framesetOK = False + Phase.processCharacters(self, token) + + def processStartTag(self, token): + currentNode = self.tree.openElements[-1] + if (token["name"] in self.breakoutElements or + (token["name"] == "font" and + set(token["data"].keys()) & set(["color", "face", "size"]))): + self.parser.parseError("unexpected-html-element-in-foreign-content", + {"name": token["name"]}) + while (self.tree.openElements[-1].namespace != + self.tree.defaultNamespace and + not self.parser.isHTMLIntegrationPoint(self.tree.openElements[-1]) and + not self.parser.isMathMLTextIntegrationPoint(self.tree.openElements[-1])): + self.tree.openElements.pop() + return token + + else: + if currentNode.namespace == namespaces["mathml"]: + self.parser.adjustMathMLAttributes(token) + elif currentNode.namespace == namespaces["svg"]: + self.adjustSVGTagNames(token) + self.parser.adjustSVGAttributes(token) + self.parser.adjustForeignAttributes(token) + token["namespace"] = currentNode.namespace + self.tree.insertElement(token) + if token["selfClosing"]: + self.tree.openElements.pop() + token["selfClosingAcknowledged"] = True + + def processEndTag(self, token): + nodeIndex = len(self.tree.openElements) - 1 + node = self.tree.openElements[-1] + if node.name.translate(asciiUpper2Lower) != token["name"]: + self.parser.parseError("unexpected-end-tag", {"name": token["name"]}) + + while True: + if node.name.translate(asciiUpper2Lower) == token["name"]: + # XXX this isn't in the spec but it seems necessary + if self.parser.phase == self.parser.phases["inTableText"]: + self.parser.phase.flushCharacters() + self.parser.phase = self.parser.phase.originalPhase + while self.tree.openElements.pop() != node: + assert self.tree.openElements + new_token = None + break + nodeIndex -= 1 + + node = self.tree.openElements[nodeIndex] + if node.namespace != self.tree.defaultNamespace: + continue + else: + new_token = self.parser.phase.processEndTag(token) + break + return new_token + + class AfterBodyPhase(Phase): + def __init__(self, parser, tree): + Phase.__init__(self, parser, tree) + + self.startTagHandler = _utils.MethodDispatcher([ + ("html", self.startTagHtml) + ]) + self.startTagHandler.default = self.startTagOther + + self.endTagHandler = _utils.MethodDispatcher([("html", self.endTagHtml)]) + self.endTagHandler.default = self.endTagOther + + def processEOF(self): + # Stop parsing + pass + + def processComment(self, token): + # This is needed because data is to be appended to the <html> element + # here and not to whatever is currently open. + self.tree.insertComment(token, self.tree.openElements[0]) + + def processCharacters(self, token): + self.parser.parseError("unexpected-char-after-body") + self.parser.phase = self.parser.phases["inBody"] + return token + + def startTagHtml(self, token): + return self.parser.phases["inBody"].processStartTag(token) + + def startTagOther(self, token): + self.parser.parseError("unexpected-start-tag-after-body", + {"name": token["name"]}) + self.parser.phase = self.parser.phases["inBody"] + return token + + def endTagHtml(self, name): + if self.parser.innerHTML: + self.parser.parseError("unexpected-end-tag-after-body-innerhtml") + else: + self.parser.phase = self.parser.phases["afterAfterBody"] + + def endTagOther(self, token): + self.parser.parseError("unexpected-end-tag-after-body", + {"name": token["name"]}) + self.parser.phase = self.parser.phases["inBody"] + return token + + class InFramesetPhase(Phase): + # http://www.whatwg.org/specs/web-apps/current-work/#in-frameset + def __init__(self, parser, tree): + Phase.__init__(self, parser, tree) + + self.startTagHandler = _utils.MethodDispatcher([ + ("html", self.startTagHtml), + ("frameset", self.startTagFrameset), + ("frame", self.startTagFrame), + ("noframes", self.startTagNoframes) + ]) + self.startTagHandler.default = self.startTagOther + + self.endTagHandler = _utils.MethodDispatcher([ + ("frameset", self.endTagFrameset) + ]) + self.endTagHandler.default = self.endTagOther + + def processEOF(self): + if self.tree.openElements[-1].name != "html": + self.parser.parseError("eof-in-frameset") + else: + assert self.parser.innerHTML + + def processCharacters(self, token): + self.parser.parseError("unexpected-char-in-frameset") + + def startTagFrameset(self, token): + self.tree.insertElement(token) + + def startTagFrame(self, token): + self.tree.insertElement(token) + self.tree.openElements.pop() + + def startTagNoframes(self, token): + return self.parser.phases["inBody"].processStartTag(token) + + def startTagOther(self, token): + self.parser.parseError("unexpected-start-tag-in-frameset", + {"name": token["name"]}) + + def endTagFrameset(self, token): + if self.tree.openElements[-1].name == "html": + # innerHTML case + self.parser.parseError("unexpected-frameset-in-frameset-innerhtml") + else: + self.tree.openElements.pop() + if (not self.parser.innerHTML and + self.tree.openElements[-1].name != "frameset"): + # If we're not in innerHTML mode and the current node is not a + # "frameset" element (anymore) then switch. + self.parser.phase = self.parser.phases["afterFrameset"] + + def endTagOther(self, token): + self.parser.parseError("unexpected-end-tag-in-frameset", + {"name": token["name"]}) + + class AfterFramesetPhase(Phase): + # http://www.whatwg.org/specs/web-apps/current-work/#after3 + def __init__(self, parser, tree): + Phase.__init__(self, parser, tree) + + self.startTagHandler = _utils.MethodDispatcher([ + ("html", self.startTagHtml), + ("noframes", self.startTagNoframes) + ]) + self.startTagHandler.default = self.startTagOther + + self.endTagHandler = _utils.MethodDispatcher([ + ("html", self.endTagHtml) + ]) + self.endTagHandler.default = self.endTagOther + + def processEOF(self): + # Stop parsing + pass + + def processCharacters(self, token): + self.parser.parseError("unexpected-char-after-frameset") + + def startTagNoframes(self, token): + return self.parser.phases["inHead"].processStartTag(token) + + def startTagOther(self, token): + self.parser.parseError("unexpected-start-tag-after-frameset", + {"name": token["name"]}) + + def endTagHtml(self, token): + self.parser.phase = self.parser.phases["afterAfterFrameset"] + + def endTagOther(self, token): + self.parser.parseError("unexpected-end-tag-after-frameset", + {"name": token["name"]}) + + class AfterAfterBodyPhase(Phase): + def __init__(self, parser, tree): + Phase.__init__(self, parser, tree) + + self.startTagHandler = _utils.MethodDispatcher([ + ("html", self.startTagHtml) + ]) + self.startTagHandler.default = self.startTagOther + + def processEOF(self): + pass + + def processComment(self, token): + self.tree.insertComment(token, self.tree.document) + + def processSpaceCharacters(self, token): + return self.parser.phases["inBody"].processSpaceCharacters(token) + + def processCharacters(self, token): + self.parser.parseError("expected-eof-but-got-char") + self.parser.phase = self.parser.phases["inBody"] + return token + + def startTagHtml(self, token): + return self.parser.phases["inBody"].processStartTag(token) + + def startTagOther(self, token): + self.parser.parseError("expected-eof-but-got-start-tag", + {"name": token["name"]}) + self.parser.phase = self.parser.phases["inBody"] + return token + + def processEndTag(self, token): + self.parser.parseError("expected-eof-but-got-end-tag", + {"name": token["name"]}) + self.parser.phase = self.parser.phases["inBody"] + return token + + class AfterAfterFramesetPhase(Phase): + def __init__(self, parser, tree): + Phase.__init__(self, parser, tree) + + self.startTagHandler = _utils.MethodDispatcher([ + ("html", self.startTagHtml), + ("noframes", self.startTagNoFrames) + ]) + self.startTagHandler.default = self.startTagOther + + def processEOF(self): + pass + + def processComment(self, token): + self.tree.insertComment(token, self.tree.document) + + def processSpaceCharacters(self, token): + return self.parser.phases["inBody"].processSpaceCharacters(token) + + def processCharacters(self, token): + self.parser.parseError("expected-eof-but-got-char") + + def startTagHtml(self, token): + return self.parser.phases["inBody"].processStartTag(token) + + def startTagNoFrames(self, token): + return self.parser.phases["inHead"].processStartTag(token) + + def startTagOther(self, token): + self.parser.parseError("expected-eof-but-got-start-tag", + {"name": token["name"]}) + + def processEndTag(self, token): + self.parser.parseError("expected-eof-but-got-end-tag", + {"name": token["name"]}) + # pylint:enable=unused-argument + + return { + "initial": InitialPhase, + "beforeHtml": BeforeHtmlPhase, + "beforeHead": BeforeHeadPhase, + "inHead": InHeadPhase, + "inHeadNoscript": InHeadNoscriptPhase, + "afterHead": AfterHeadPhase, + "inBody": InBodyPhase, + "text": TextPhase, + "inTable": InTablePhase, + "inTableText": InTableTextPhase, + "inCaption": InCaptionPhase, + "inColumnGroup": InColumnGroupPhase, + "inTableBody": InTableBodyPhase, + "inRow": InRowPhase, + "inCell": InCellPhase, + "inSelect": InSelectPhase, + "inSelectInTable": InSelectInTablePhase, + "inForeignContent": InForeignContentPhase, + "afterBody": AfterBodyPhase, + "inFrameset": InFramesetPhase, + "afterFrameset": AfterFramesetPhase, + "afterAfterBody": AfterAfterBodyPhase, + "afterAfterFrameset": AfterAfterFramesetPhase, + # XXX after after frameset + } + + +def adjust_attributes(token, replacements): + needs_adjustment = viewkeys(token['data']) & viewkeys(replacements) + if needs_adjustment: + token['data'] = OrderedDict((replacements.get(k, k), v) + for k, v in token['data'].items()) + + +def impliedTagToken(name, type="EndTag", attributes=None, + selfClosing=False): + if attributes is None: + attributes = {} + return {"type": tokenTypes[type], "name": name, "data": attributes, + "selfClosing": selfClosing} + + +class ParseError(Exception): + """Error in parsed document""" + pass diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/serializer.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/serializer.py new file mode 100644 index 00000000..53f4d44c --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/serializer.py @@ -0,0 +1,409 @@ +from __future__ import absolute_import, division, unicode_literals +from pip._vendor.six import text_type + +import re + +from codecs import register_error, xmlcharrefreplace_errors + +from .constants import voidElements, booleanAttributes, spaceCharacters +from .constants import rcdataElements, entities, xmlEntities +from . import treewalkers, _utils +from xml.sax.saxutils import escape + +_quoteAttributeSpecChars = "".join(spaceCharacters) + "\"'=<>`" +_quoteAttributeSpec = re.compile("[" + _quoteAttributeSpecChars + "]") +_quoteAttributeLegacy = re.compile("[" + _quoteAttributeSpecChars + + "\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" + "\x20\x2f\x60\xa0\u1680\u180e\u180f\u2000" + "\u2001\u2002\u2003\u2004\u2005\u2006\u2007" + "\u2008\u2009\u200a\u2028\u2029\u202f\u205f" + "\u3000]") + + +_encode_entity_map = {} +_is_ucs4 = len("\U0010FFFF") == 1 +for k, v in list(entities.items()): + # skip multi-character entities + if ((_is_ucs4 and len(v) > 1) or + (not _is_ucs4 and len(v) > 2)): + continue + if v != "&": + if len(v) == 2: + v = _utils.surrogatePairToCodepoint(v) + else: + v = ord(v) + if v not in _encode_entity_map or k.islower(): + # prefer < over < and similarly for &, >, etc. + _encode_entity_map[v] = k + + +def htmlentityreplace_errors(exc): + if isinstance(exc, (UnicodeEncodeError, UnicodeTranslateError)): + res = [] + codepoints = [] + skip = False + for i, c in enumerate(exc.object[exc.start:exc.end]): + if skip: + skip = False + continue + index = i + exc.start + if _utils.isSurrogatePair(exc.object[index:min([exc.end, index + 2])]): + codepoint = _utils.surrogatePairToCodepoint(exc.object[index:index + 2]) + skip = True + else: + codepoint = ord(c) + codepoints.append(codepoint) + for cp in codepoints: + e = _encode_entity_map.get(cp) + if e: + res.append("&") + res.append(e) + if not e.endswith(";"): + res.append(";") + else: + res.append("&#x%s;" % (hex(cp)[2:])) + return ("".join(res), exc.end) + else: + return xmlcharrefreplace_errors(exc) + + +register_error("htmlentityreplace", htmlentityreplace_errors) + + +def serialize(input, tree="etree", encoding=None, **serializer_opts): + """Serializes the input token stream using the specified treewalker + + :arg input: the token stream to serialize + + :arg tree: the treewalker to use + + :arg encoding: the encoding to use + + :arg serializer_opts: any options to pass to the + :py:class:`html5lib.serializer.HTMLSerializer` that gets created + + :returns: the tree serialized as a string + + Example: + + >>> from html5lib.html5parser import parse + >>> from html5lib.serializer import serialize + >>> token_stream = parse('<html><body><p>Hi!</p></body></html>') + >>> serialize(token_stream, omit_optional_tags=False) + '<html><head></head><body><p>Hi!</p></body></html>' + + """ + # XXX: Should we cache this? + walker = treewalkers.getTreeWalker(tree) + s = HTMLSerializer(**serializer_opts) + return s.render(walker(input), encoding) + + +class HTMLSerializer(object): + + # attribute quoting options + quote_attr_values = "legacy" # be secure by default + quote_char = '"' + use_best_quote_char = True + + # tag syntax options + omit_optional_tags = True + minimize_boolean_attributes = True + use_trailing_solidus = False + space_before_trailing_solidus = True + + # escaping options + escape_lt_in_attrs = False + escape_rcdata = False + resolve_entities = True + + # miscellaneous options + alphabetical_attributes = False + inject_meta_charset = True + strip_whitespace = False + sanitize = False + + options = ("quote_attr_values", "quote_char", "use_best_quote_char", + "omit_optional_tags", "minimize_boolean_attributes", + "use_trailing_solidus", "space_before_trailing_solidus", + "escape_lt_in_attrs", "escape_rcdata", "resolve_entities", + "alphabetical_attributes", "inject_meta_charset", + "strip_whitespace", "sanitize") + + def __init__(self, **kwargs): + """Initialize HTMLSerializer + + :arg inject_meta_charset: Whether or not to inject the meta charset. + + Defaults to ``True``. + + :arg quote_attr_values: Whether to quote attribute values that don't + require quoting per legacy browser behavior (``"legacy"``), when + required by the standard (``"spec"``), or always (``"always"``). + + Defaults to ``"legacy"``. + + :arg quote_char: Use given quote character for attribute quoting. + + Defaults to ``"`` which will use double quotes unless attribute + value contains a double quote, in which case single quotes are + used. + + :arg escape_lt_in_attrs: Whether or not to escape ``<`` in attribute + values. + + Defaults to ``False``. + + :arg escape_rcdata: Whether to escape characters that need to be + escaped within normal elements within rcdata elements such as + style. + + Defaults to ``False``. + + :arg resolve_entities: Whether to resolve named character entities that + appear in the source tree. The XML predefined entities < > + & " ' are unaffected by this setting. + + Defaults to ``True``. + + :arg strip_whitespace: Whether to remove semantically meaningless + whitespace. (This compresses all whitespace to a single space + except within ``pre``.) + + Defaults to ``False``. + + :arg minimize_boolean_attributes: Shortens boolean attributes to give + just the attribute value, for example:: + + <input disabled="disabled"> + + becomes:: + + <input disabled> + + Defaults to ``True``. + + :arg use_trailing_solidus: Includes a close-tag slash at the end of the + start tag of void elements (empty elements whose end tag is + forbidden). E.g. ``<hr/>``. + + Defaults to ``False``. + + :arg space_before_trailing_solidus: Places a space immediately before + the closing slash in a tag using a trailing solidus. E.g. + ``<hr />``. Requires ``use_trailing_solidus=True``. + + Defaults to ``True``. + + :arg sanitize: Strip all unsafe or unknown constructs from output. + See :py:class:`html5lib.filters.sanitizer.Filter`. + + Defaults to ``False``. + + :arg omit_optional_tags: Omit start/end tags that are optional. + + Defaults to ``True``. + + :arg alphabetical_attributes: Reorder attributes to be in alphabetical order. + + Defaults to ``False``. + + """ + unexpected_args = frozenset(kwargs) - frozenset(self.options) + if len(unexpected_args) > 0: + raise TypeError("__init__() got an unexpected keyword argument '%s'" % next(iter(unexpected_args))) + if 'quote_char' in kwargs: + self.use_best_quote_char = False + for attr in self.options: + setattr(self, attr, kwargs.get(attr, getattr(self, attr))) + self.errors = [] + self.strict = False + + def encode(self, string): + assert(isinstance(string, text_type)) + if self.encoding: + return string.encode(self.encoding, "htmlentityreplace") + else: + return string + + def encodeStrict(self, string): + assert(isinstance(string, text_type)) + if self.encoding: + return string.encode(self.encoding, "strict") + else: + return string + + def serialize(self, treewalker, encoding=None): + # pylint:disable=too-many-nested-blocks + self.encoding = encoding + in_cdata = False + self.errors = [] + + if encoding and self.inject_meta_charset: + from .filters.inject_meta_charset import Filter + treewalker = Filter(treewalker, encoding) + # Alphabetical attributes is here under the assumption that none of + # the later filters add or change order of attributes; it needs to be + # before the sanitizer so escaped elements come out correctly + if self.alphabetical_attributes: + from .filters.alphabeticalattributes import Filter + treewalker = Filter(treewalker) + # WhitespaceFilter should be used before OptionalTagFilter + # for maximum efficiently of this latter filter + if self.strip_whitespace: + from .filters.whitespace import Filter + treewalker = Filter(treewalker) + if self.sanitize: + from .filters.sanitizer import Filter + treewalker = Filter(treewalker) + if self.omit_optional_tags: + from .filters.optionaltags import Filter + treewalker = Filter(treewalker) + + for token in treewalker: + type = token["type"] + if type == "Doctype": + doctype = "<!DOCTYPE %s" % token["name"] + + if token["publicId"]: + doctype += ' PUBLIC "%s"' % token["publicId"] + elif token["systemId"]: + doctype += " SYSTEM" + if token["systemId"]: + if token["systemId"].find('"') >= 0: + if token["systemId"].find("'") >= 0: + self.serializeError("System identifer contains both single and double quote characters") + quote_char = "'" + else: + quote_char = '"' + doctype += " %s%s%s" % (quote_char, token["systemId"], quote_char) + + doctype += ">" + yield self.encodeStrict(doctype) + + elif type in ("Characters", "SpaceCharacters"): + if type == "SpaceCharacters" or in_cdata: + if in_cdata and token["data"].find("</") >= 0: + self.serializeError("Unexpected </ in CDATA") + yield self.encode(token["data"]) + else: + yield self.encode(escape(token["data"])) + + elif type in ("StartTag", "EmptyTag"): + name = token["name"] + yield self.encodeStrict("<%s" % name) + if name in rcdataElements and not self.escape_rcdata: + in_cdata = True + elif in_cdata: + self.serializeError("Unexpected child element of a CDATA element") + for (_, attr_name), attr_value in token["data"].items(): + # TODO: Add namespace support here + k = attr_name + v = attr_value + yield self.encodeStrict(' ') + + yield self.encodeStrict(k) + if not self.minimize_boolean_attributes or \ + (k not in booleanAttributes.get(name, tuple()) and + k not in booleanAttributes.get("", tuple())): + yield self.encodeStrict("=") + if self.quote_attr_values == "always" or len(v) == 0: + quote_attr = True + elif self.quote_attr_values == "spec": + quote_attr = _quoteAttributeSpec.search(v) is not None + elif self.quote_attr_values == "legacy": + quote_attr = _quoteAttributeLegacy.search(v) is not None + else: + raise ValueError("quote_attr_values must be one of: " + "'always', 'spec', or 'legacy'") + v = v.replace("&", "&") + if self.escape_lt_in_attrs: + v = v.replace("<", "<") + if quote_attr: + quote_char = self.quote_char + if self.use_best_quote_char: + if "'" in v and '"' not in v: + quote_char = '"' + elif '"' in v and "'" not in v: + quote_char = "'" + if quote_char == "'": + v = v.replace("'", "'") + else: + v = v.replace('"', """) + yield self.encodeStrict(quote_char) + yield self.encode(v) + yield self.encodeStrict(quote_char) + else: + yield self.encode(v) + if name in voidElements and self.use_trailing_solidus: + if self.space_before_trailing_solidus: + yield self.encodeStrict(" /") + else: + yield self.encodeStrict("/") + yield self.encode(">") + + elif type == "EndTag": + name = token["name"] + if name in rcdataElements: + in_cdata = False + elif in_cdata: + self.serializeError("Unexpected child element of a CDATA element") + yield self.encodeStrict("</%s>" % name) + + elif type == "Comment": + data = token["data"] + if data.find("--") >= 0: + self.serializeError("Comment contains --") + yield self.encodeStrict("<!--%s-->" % token["data"]) + + elif type == "Entity": + name = token["name"] + key = name + ";" + if key not in entities: + self.serializeError("Entity %s not recognized" % name) + if self.resolve_entities and key not in xmlEntities: + data = entities[key] + else: + data = "&%s;" % name + yield self.encodeStrict(data) + + else: + self.serializeError(token["data"]) + + def render(self, treewalker, encoding=None): + """Serializes the stream from the treewalker into a string + + :arg treewalker: the treewalker to serialize + + :arg encoding: the string encoding to use + + :returns: the serialized tree + + Example: + + >>> from html5lib import parse, getTreeWalker + >>> from html5lib.serializer import HTMLSerializer + >>> token_stream = parse('<html><body>Hi!</body></html>') + >>> walker = getTreeWalker('etree') + >>> serializer = HTMLSerializer(omit_optional_tags=False) + >>> serializer.render(walker(token_stream)) + '<html><head></head><body>Hi!</body></html>' + + """ + if encoding: + return b"".join(list(self.serialize(treewalker, encoding))) + else: + return "".join(list(self.serialize(treewalker))) + + def serializeError(self, data="XXX ERROR MESSAGE NEEDED"): + # XXX The idea is to make data mandatory. + self.errors.append(data) + if self.strict: + raise SerializeError + + +class SerializeError(Exception): + """Error in serialized tree""" + pass diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treeadapters/__init__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treeadapters/__init__.py new file mode 100644 index 00000000..7ef59590 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treeadapters/__init__.py @@ -0,0 +1,30 @@ +"""Tree adapters let you convert from one tree structure to another + +Example: + +.. code-block:: python + + from pip._vendor import html5lib + from pip._vendor.html5lib.treeadapters import genshi + + doc = '<html><body>Hi!</body></html>' + treebuilder = html5lib.getTreeBuilder('etree') + parser = html5lib.HTMLParser(tree=treebuilder) + tree = parser.parse(doc) + TreeWalker = html5lib.getTreeWalker('etree') + + genshi_tree = genshi.to_genshi(TreeWalker(tree)) + +""" +from __future__ import absolute_import, division, unicode_literals + +from . import sax + +__all__ = ["sax"] + +try: + from . import genshi # noqa +except ImportError: + pass +else: + __all__.append("genshi") diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treeadapters/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treeadapters/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d5672f8b878cc66dea370bf5e7b117d32a1a34e8 GIT binary patch literal 890 zcmZuvPjAyO6t|Nu?b2;jXdl3w+8mlrATCu`A*4y01QQaK1`%MTwYQo&ad4b!J@a7@ z7d{K;TsiG4aN^nN{z)Xt%kz8h_j|VA@5TOp_~}>t`G<$lAN1hqg8vG>@(UP-62vg` zB+k6V%lyR8T1g8d=ChXE$$}&Rf9DD(?M)A20mM2<2crv=AGQ$RU4{A_Bl~_t`Q8V_ z+h0T0{*D3Fd5@yq^fyLmra31mOAEtwNhCL9qbjmc`I>7(F15;t$~iH%tTeh>m`cM^ zku+Ck$#oc>T&Gzf`8W*Y7=Vlq=Ta?J<1r~VW~uTpB%~oKL=n?9&zaIhWQBqTOOwf$ zQq2EX6W=Cd+x>2jTjUkb%cXGSOfASU=}&C^bTU_LGd&g0CL`xfMlRg99W2kh5|VKZ zfIIptZtOL@ZZd;Dw{`u<B8pU(kBd)dZ{NIg(Sa>He!%Gvb`9hWFm}HIY|!Oqkh@6b z>M`TCeUrHFZreA9q+8Br6&pnxZ*b4&_7X*5cmu*gkzYSa=cSUB;k3E0y2Hd;ltSfo zugZm;6O{snp33qDbbumU`(=8qgT@b<7P<|~^Qc?5DTPx|T8ETgR#pU*YLG9|zBMf{ zHF98Eno0?2i><q7Zqg@OD_sX^QNa9vB7I;{*8DvinXDLrHim9A!=rD@xjK5zY{-3E x$+$UMt&Hq-+{$4@smO()G%hxEXObyaNj`lF#AOdm3m<xWUf_AShYxVz{R1gP3&sEd literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treeadapters/__pycache__/genshi.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treeadapters/__pycache__/genshi.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..defd5ba83dafaee0cf319fc7385d190c58ea7cb5 GIT binary patch literal 1634 zcmcIkPj4GV6rY)$U9UHGlDZ+_LXnH8V5K&R%AZ3NMO2A}Dz$DQR)JL`YrV5}Hr{`k z8HXmUPw58;2R;NBF7(rkxN*uC;Lr=a*>%!L95^x7JimGG&F}r4{jAw^Ui`MU|GS0I zpXk~mz<&i>JO;uL!!b&*hZEwF#PAHPWhADF>6wY;S>@S)bIq$Iwr3}Gubw!blPq`( zprg!ug}er{_K;h<07T>(YRMmpES}165G8rWrLtLc9Em7P)$%lrf{cZOIFcdvW8o5I ze$(@lP?-;<<ia(Txz~UAZC@GP-maqk?)QCF+j;urNw){g?$e$A56`**)~;YdcI6J> zUw9xLqZvNOFTX6%E;`5i_hzIZ47btDC=9kTvG{`mA0m*^Haf!?rMC*qA4|;4LsH-~ z%-$Ut&k-(h;KqA!<26`2ZNxcSs5qdFHX4ytG^43qon}-TtjQK%&9M*Z8ANafh%-}~ z(kkc~F3b^O?^pPMU7ryCnk|))EltQd;(yIO{qY~3Y84*)u);cO0NOGjVBV5C9>|T| zxu&}To*J@VMGCal)=}Ps91QmHrQK2EJ5)gJ`15Pk_@vU7{r&Xxmz^v<4!P|39m&J6 zBQxN}VJZ%yQs6ipSerf{cYgHaNys-l@&L@hwmRz@Q&C>jf-9|-2XpL5&S7{cr#uy# z+5^mr%y=goUAjwQh(u+ms65F-<?I~z+z()^gj(9m{UE$1pv;%PLcI$;ILh9WK9_xe ztn6-*%M;DjQy4;_ubo;y-4(ODLQyTc8Z`rMny~lusC^D(j0&`W?**CR8Ie#rhM??t zQs*Br7^PK|S|Bs@m=$D1ekMm09tq_-g5ISMegjS}<{B7Y4q4k!)Q5MV%ws>EhQA`- z2F;tV*JYBg=TUxtIE`X<f8*$2m~A{@T2$`AahS4<uOG-H{vwWs>$>JX^K)H}^{Pc{ z`N<n+D~^N=vLxTW4ZuQw4J>?mTV{i~(N>%V@GiI4-dZZFn=)Oa+D?`vVJhJrW<gnW zJD(2YD0sw_Elz|ClSj-Yya}j$5y-{gu=pL|T%%Y1R|mpd+T^AtTKjL4|5NNb%JTCZ zD#q*JT+zcUO1b`&C=)(QiQqLIlkN$(HE}dq0ODH8swNqRE_^AKDYHqK@`g5e2Z%Ct z_e9yXirmuD`c-{3ve*KGY>F4L4ZmefaSKzT`PGuP@CxvhIF*F7fNOzf5w{FVEX-ZF z-*cPF84N~KcqQRrz;!FR9#T$$cnkA>1{n{lRCIz>W@S=3^|zUokk`W2W5>(b?X4tZ S(>UDLgDW)13R%V<82<q3u7=+L literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treeadapters/__pycache__/sax.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treeadapters/__pycache__/sax.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3016087628a7d6a2365b58c4f0cd67e5e6d3b934 GIT binary patch literal 1452 zcmah}OK&SR6t<mt<=HeULSZ!$50OQi=ptBDR~1#;D_9UA1ynTZRpi8OGmYmF+tZs~ zB^$yI;5V>CNc;@MiXY$=606IK6$@4zPfA;)i<ptmd~?oso@37k&1UW5$Ajm8cnJN5 z9$gOLk72192!<FID8Ug<NJNrKRKZq9gp;_D3%J4@;U#|LCqWco6r-rRe2@FrwGBE& z&)>SJMD?f<HF=%6^Qt`JO<v{or)Y6>j+n>%Z&1`??g;gQSC9?$DrSdHR3-||$8nNp zQk#IqH?fMd)U=B<o@R`XMXb4`LiMm|A8Re+3Gmf$^l6fdSH#94=1t133#FfBlE+u+ z1Iu)a^gm3)sr9v&56gvh0!zJ*5nADEv_TjxLyfOV+1uU)S(9}IER_{mRW<~pMdutX ze_7eie_A^$hv6<-yDOKGIgy_%28#jUow+B!)7I*Ck#;v^?LiC=-n}jY>37j3**;g^ z2IdVu4*35GEdO<^GP8{w0PE-fWwjyyufPf*7F4joP`CB2gZJ-?0c)s%uCnF^e~lLd z=;w7E*H*;(eTx^)xt&ej&W5$%JMO;x;e-kij*h?D7xA2j(=63I)!~e$OmG=asNyWl z(ojpzUr;dz-S$zdg>W5Gd3C2a4E2mZ=IJaf6lk)NaBsB=NOQxb4rBc&%w5hyTg`m| z+aOz(arAA@jenX=OAw4SmHG>MWrDLL*S8iqjB0ACDNVS_>69DCLgSsK%$jQ_Gb-s6 zHl#8;BTIOs@K3TNf$pEZ?0lKd)9eMboy|E&NIUEiS%(cK8z2DhTHLX?VVcSo0%aA} z-L!JaFXQDnp?MysSH^_{kSNnBS)Z4-&$cFMx2+67m{w^$6WoRvj!c86?BT68eW<&2 ztP~6n&e)lhnKW%+{wu1fgXW)VdcN_tU(EP-6E@zqK-sd1-LgknEir}jslG?@ZFu|Z zw6BxApU3(Bq=*IEA1r2*Z199xRk_ADkSLS=nNGxqBA)c^E}@L(cD{W@mk0T+@pLu@ z*o27cBM>MEa0j<Z4F_;LrSw4K!EG&#d)Wp=NSgo~%Xh)Ew_|GK@nxY4$;V@9&%dl# zVgG{B?lKVvHYq$Ml)+^=UQ>nL2E$FYlJ-wgj$6I~$aptY6kN&Bx>rRurD6!XrJPHd ju$;pq@s9Nho+cS91V4g54N`W7d!zwnI(QEXZdCpTY$%qD literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treeadapters/genshi.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treeadapters/genshi.py new file mode 100644 index 00000000..61d5fb6a --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treeadapters/genshi.py @@ -0,0 +1,54 @@ +from __future__ import absolute_import, division, unicode_literals + +from genshi.core import QName, Attrs +from genshi.core import START, END, TEXT, COMMENT, DOCTYPE + + +def to_genshi(walker): + """Convert a tree to a genshi tree + + :arg walker: the treewalker to use to walk the tree to convert it + + :returns: generator of genshi nodes + + """ + text = [] + for token in walker: + type = token["type"] + if type in ("Characters", "SpaceCharacters"): + text.append(token["data"]) + elif text: + yield TEXT, "".join(text), (None, -1, -1) + text = [] + + if type in ("StartTag", "EmptyTag"): + if token["namespace"]: + name = "{%s}%s" % (token["namespace"], token["name"]) + else: + name = token["name"] + attrs = Attrs([(QName("{%s}%s" % attr if attr[0] is not None else attr[1]), value) + for attr, value in token["data"].items()]) + yield (START, (QName(name), attrs), (None, -1, -1)) + if type == "EmptyTag": + type = "EndTag" + + if type == "EndTag": + if token["namespace"]: + name = "{%s}%s" % (token["namespace"], token["name"]) + else: + name = token["name"] + + yield END, QName(name), (None, -1, -1) + + elif type == "Comment": + yield COMMENT, token["data"], (None, -1, -1) + + elif type == "Doctype": + yield DOCTYPE, (token["name"], token["publicId"], + token["systemId"]), (None, -1, -1) + + else: + pass # FIXME: What to do? + + if text: + yield TEXT, "".join(text), (None, -1, -1) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treeadapters/sax.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treeadapters/sax.py new file mode 100644 index 00000000..f4ccea5a --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treeadapters/sax.py @@ -0,0 +1,50 @@ +from __future__ import absolute_import, division, unicode_literals + +from xml.sax.xmlreader import AttributesNSImpl + +from ..constants import adjustForeignAttributes, unadjustForeignAttributes + +prefix_mapping = {} +for prefix, localName, namespace in adjustForeignAttributes.values(): + if prefix is not None: + prefix_mapping[prefix] = namespace + + +def to_sax(walker, handler): + """Call SAX-like content handler based on treewalker walker + + :arg walker: the treewalker to use to walk the tree to convert it + + :arg handler: SAX handler to use + + """ + handler.startDocument() + for prefix, namespace in prefix_mapping.items(): + handler.startPrefixMapping(prefix, namespace) + + for token in walker: + type = token["type"] + if type == "Doctype": + continue + elif type in ("StartTag", "EmptyTag"): + attrs = AttributesNSImpl(token["data"], + unadjustForeignAttributes) + handler.startElementNS((token["namespace"], token["name"]), + token["name"], + attrs) + if type == "EmptyTag": + handler.endElementNS((token["namespace"], token["name"]), + token["name"]) + elif type == "EndTag": + handler.endElementNS((token["namespace"], token["name"]), + token["name"]) + elif type in ("Characters", "SpaceCharacters"): + handler.characters(token["data"]) + elif type == "Comment": + pass + else: + assert False, "Unknown token type" + + for prefix, namespace in prefix_mapping.items(): + handler.endPrefixMapping(prefix) + handler.endDocument() diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treebuilders/__init__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treebuilders/__init__.py new file mode 100644 index 00000000..d44447ea --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treebuilders/__init__.py @@ -0,0 +1,88 @@ +"""A collection of modules for building different kinds of trees from HTML +documents. + +To create a treebuilder for a new type of tree, you need to do +implement several things: + +1. A set of classes for various types of elements: Document, Doctype, Comment, + Element. These must implement the interface of ``base.treebuilders.Node`` + (although comment nodes have a different signature for their constructor, + see ``treebuilders.etree.Comment``) Textual content may also be implemented + as another node type, or not, as your tree implementation requires. + +2. A treebuilder object (called ``TreeBuilder`` by convention) that inherits + from ``treebuilders.base.TreeBuilder``. This has 4 required attributes: + + * ``documentClass`` - the class to use for the bottommost node of a document + * ``elementClass`` - the class to use for HTML Elements + * ``commentClass`` - the class to use for comments + * ``doctypeClass`` - the class to use for doctypes + + It also has one required method: + + * ``getDocument`` - Returns the root node of the complete document tree + +3. If you wish to run the unit tests, you must also create a ``testSerializer`` + method on your treebuilder which accepts a node and returns a string + containing Node and its children serialized according to the format used in + the unittests + +""" + +from __future__ import absolute_import, division, unicode_literals + +from .._utils import default_etree + +treeBuilderCache = {} + + +def getTreeBuilder(treeType, implementation=None, **kwargs): + """Get a TreeBuilder class for various types of trees with built-in support + + :arg treeType: the name of the tree type required (case-insensitive). Supported + values are: + + * "dom" - A generic builder for DOM implementations, defaulting to a + xml.dom.minidom based implementation. + * "etree" - A generic builder for tree implementations exposing an + ElementTree-like interface, defaulting to xml.etree.cElementTree if + available and xml.etree.ElementTree if not. + * "lxml" - A etree-based builder for lxml.etree, handling limitations + of lxml's implementation. + + :arg implementation: (Currently applies to the "etree" and "dom" tree + types). A module implementing the tree type e.g. xml.etree.ElementTree + or xml.etree.cElementTree. + + :arg kwargs: Any additional options to pass to the TreeBuilder when + creating it. + + Example: + + >>> from html5lib.treebuilders import getTreeBuilder + >>> builder = getTreeBuilder('etree') + + """ + + treeType = treeType.lower() + if treeType not in treeBuilderCache: + if treeType == "dom": + from . import dom + # Come up with a sane default (pref. from the stdlib) + if implementation is None: + from xml.dom import minidom + implementation = minidom + # NEVER cache here, caching is done in the dom submodule + return dom.getDomModule(implementation, **kwargs).TreeBuilder + elif treeType == "lxml": + from . import etree_lxml + treeBuilderCache[treeType] = etree_lxml.TreeBuilder + elif treeType == "etree": + from . import etree + if implementation is None: + implementation = default_etree + # NEVER cache here, caching is done in the etree submodule + return etree.getETreeModule(implementation, **kwargs).TreeBuilder + else: + raise ValueError("""Unrecognised treebuilder "%s" """ % treeType) + return treeBuilderCache.get(treeType) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treebuilders/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treebuilders/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5b578bc0d27f5484690854eb80686199c7c51f9c GIT binary patch literal 3271 zcmai1O>f*p7`FF2Zd!UkNPMUoMWA-8WK&w;5S5D1R#4Fvi3Sc4$UEzq%}!!_wlm|T zsWunN5%CN70dV2K&+(O0{{knTckIpXwnE*Ny|!oG@8^A9@2!g$qaXho{M5S?1pfp} zpC+!qz+pebNd)_W2t^|ev&McSYwkC*)_yAtL{qfVcGlVNgn<h7yP_vLqWep@-xKX8 zL4S?++d;6)5}l?paZ2Y*k6ETgkxI+P+OScfQlat#Ce(N=jm#Z8Qn|3S&lyR(jLz8C zdygJQLMKIr9d-~!dzvLiawi%0`@9}$yiU$?dBWW3RL-?*vQu5)sT9m<CUm5-X(~w< zv+`IPo-#Lq7j`F#J|3`LJar_Sq}<xt(_?OwF09w<-IJ9DyTk6)j&0Hv+1+G!bw=tp zBgWYMYU6<IO{A49E39J+2i!z5l{;z1Jn;?>ha+y~fTFLXvV+H3$l;KbUE`^n=;C04 zq<Rx9$C_mmeoVPoq|vH_oV&tEpA%S71|qq2rbwJN-ZLvD8xB`2NxB=<?hl83wkMyt z0ttewql9Jrl=0MRHiF;tG)h6fam#qFVaj-?e5y7Xs*H!5w2CSiU#^8D_oy)PX`zgy z%HE{>FS*3@=n&Xp*Afm83HZAQ55FYbNHZL=(J8rh4A%g!KI+Jk-5fqBXUQp#pI3tP z30_e{#Zi<+%RXVXH-d5Jj2abA5-_0aI;_u8c$csN`&%$6E2I#(3RIYYO%F%fITT5w z-c%$)6e?7MWv;J=(HqoJ1I&Ts!y;E|1iV4C-gPbo2MD8Ykg9iCANK=Sm7LO}bGb-R zCILpVNX~(D_v-k3YQB>|V2-9iHjLJbJoubxf)84Fo)Ta7D7rOZ55~S@Pn4ZdQcaP2 z6-BNbLp7YOI@-6A2je*zpwd`>g7WiJJtu@vqANe)`vQV<#yFX%WWsoo$f*N<t4i@) zAjryh&d@U;2hu}Lz*SC!MJ)-q3kICAWCA#Xy+9nbVSpz|wDH`A2q<2_A_F*q5D4X@ zj-FCXKBOpm38oGD&GIcivN{FqVl<dGuIveQtSs<dUdHwWmg7``G7$R92FZlwMIpz$ zNL}n3_;Esy>C?s0#PJOd`!`Or;4pX*oZ;7nM_u#B48(raFb_pTG*eLfSu+e~p=cfT z%x%#YowSv;&p`FF)>$}f9(HEoIGi<p3lF<bphI*an?kk++1^<j``U+H7tVs)L4F(S zYgqps>k-!1&M+ow-M_jB`Z|Xfmi4)HabXs`6TAq24qbS7afU05k#*i|1;JO~WX_hl zwr)D=w%5p+2*k1z<tBc_xGja+6jREkM>N~v=D_1^552JCE0Oc8ni!}G$yX!foD4uf zRzi=Jxm8Xb%l?2psZ>_<hk`PAk`}PcjjX!DKfKO1gw8g=6}#*}=D<i&O}=_!-TU^@ zD~t$$*99f40YIGaQh%Oh=>Yl$8IXuyMsx;9&B@qP>fn4ojC)M{zj+_*s<>tH*;HFH z&OKCX)AcN)Dr}|dXlZo4>M%K34U=R^h^g_pV;C66T%~-JR*kffSQVi0u@X*-omDj6 zz*ZIiyrBsXw4<`V2~N*NN`a&*Q_d&Hb7373NSStDwXY@6JL++=nwuSV?QUV{T_wdR zoK91Pg4aDhPc;!kRdY)2dB{Y(7P#51UxF4keVJE)CkF=ub{@xIDJSRZ5b0vWa+)zm zDLn7|(FvfAx0Kx+-U<Qe>KyZ2PwB!tKE))P2SAmrhbudo$VKfv!;+T@#qiqiKjQ?s z8s~TJ+^J^m#AWHHsT!@k!BC*+J)qw$S@3E|a9+F5U)gZ&s;}_Xer2(20`4zEuvkAd z#B7gEbyIfhUMO2sOz>gk1!KA^+x{9N>kxT<<@?;oL?7gex`xU#x4!X_-C+GoWjoa; z(v+8Jt<J?=o=jvJc%x;Pk`7PI8uXRxe&}V7{9A2#VJSRw0qfqV>Cnzg*m<AU>%Gwr zL>Bjr(WY!-t=}zsWRobVytE3svQyR3d*BT(wEr2HccK5^2iq>2Zco*8%SW_z<LP9i zZ`>60$R9CYlY}<g^Ac^7wK{sc9mn7k7srF?sdsfLlB-Z}Kg22cpcm42y@4ZaH7?UN zzI5)<ePcZ|?_*y-eB56vyK#)+9>--A$K!(DM&sDfXfiaD3|KuVJ8|JuYJG|f{)Gfy f-bb`_dXKjDZdd;u?p(p0?cvmFyxmxDw3`0`f|U!& literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treebuilders/__pycache__/base.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treebuilders/__pycache__/base.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fb73ba16ce6304b6277559d18e82e592a2f23037 GIT binary patch literal 11278 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 I*7Di^2XCINTL1t6 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treebuilders/__pycache__/dom.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treebuilders/__pycache__/dom.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..52c4364b667794392a1158489801229c180498c2 GIT binary patch literal 9224 zcmb7KOOG7ab*@`g-Cg~h=5RE8NRcU8ls&OIq@`F+6pEI_heE?_Dk3e)6)EkWt{SSF z{hC`f)Ns(902%@$fh+_h2oS(Pfb6pIA`AbJENhXCSNa292wvp-&aJBH9&*f4H|qAS z`>J!!J@=gNoa(pg^~z_zTmO9TtY!Vdn)}$OzlSTDq6n-&4XmN^)zJ3sq2oJ>ZT7$& z7W{(Lok4L}@=HU{_vGFkl>Ks02#SNsu<BRQRth}SYkp1Y<w0#&_v=!x3>w2Fe+l(! zP<v$g&2TAf?kWFR;NG^@>fe9@Yt2cPIvde=upNi(-f%M3apDEN2fe5_9wp7~QLj4= z!uFsShq^O})>P8CxgB>l2I0-lWYQbmTeFkWus7-j<6+{qFt+uL;<_qvH#$-H4H?Ew zxjP<3ac2~BiOQ%m45LY>8}e>tI1aW4;q^{89_xqcPnV1E!}$eV4zB1E6i@7@>O%-F zupdEGv9;$swLY{STaTShJ8%N`kr%kJ>f2~{(5@cakDbTvrc0rruZTWp&zUI-?veG> zjom#9;wZPeSUmsa`}9jRg_f@Z%eT!#eMcT+`DRJWFPNqLVo(k$kaH=Ow-?ld2JXwj zQqaV2B{+r$E$@EsUKn2;4?o!M4T4awUmA?N5bfpl_v2XqvKPf&KAa!^^16*Hs-T#v zsnv#xU>Vhd=t|)r9EPJ9o8U&_U{g0R=)W!9#Lu@^FT}&ig-LI6euGase{t)Jjq$}d z12)Okeh`j=vA*y{JRJOV(A&5W>oAnDp^h$KL)Rw{6R+LI?#Au*GKmn%)b0;oz`=Sp zDc?qJXU+=Ai>;~E$2MUztUYBIaub(&CR`+y4#d&hfL=z4dp~>#RnbeBD9oAS7;c3? zOlr4Z!rgZvP$qS$SNyoRSQlCU6)GT5#cI#i&Dj1*jn05vr|<R)Q?;jN&eWbd?c&st z*3wj6%6G*}DmXl%?A<Ua#M_fWm>h47;~PWNxLaXxP3v*WW_|qSDAZTS-EDUHOI;my z;*hE!yeEYRoxygfS3uF4D*{Md9v}TOS`wE+Iw+B9yB&owBspxiPhym)j-@K9Xg5?* z?f&S+yO+;@{sz{Jd}IT&&2tiG5RPQ;47JbSu2Q>=VeR%A5|*md4_-`=%y~XBe@2@I zI8FN$B?Zdl5IxdoLD2W-h&uNoqGYk}NRoaHPne^qD7$+YNhIfuIg;LZ5lLpX1^bcf zH2FKA(+#83Q+3Mf7jEYoT+}B>B~?eCVnM4Sdn!t|W}9>P3R@}sxx)z61C2)Y*3cCd zQ5e-birVFKpU=XpSnB`_m5haVbMgy^lK%qAgOF|xhvvd}r#zqATC36|@rbtDNu}L3 z-VOCyyS=sD8JHeTbE;QakSl$L1-D3Z)Aj2t&av1Ru+)sn%RB||BDQ<VbMW<~biAUb z@VmJ35A}eb=wDDAbZDV#TpGYZLHwizXLdU9g7PB;cUB3ia9>_f3+m#|8o?6X*<)){ z1<l~tBhRk}%fWH9)j~I{hP6H0uRm7kT?t-7ZzEU@PM~)wI2oM6Zxf>o5Gld%zr1_) z5WOaxNWJ9q72-5_iNy*{VXfgxY-N0;oB7CsE@O-?v7pEkZ$ykj14^yVG(t3dU(}SV z41XJyh_1m>&BG1n9G%bieEA{dnKGU)plexy_QD5FR)t)<mDH#mf{cFk@eN?J(ifdb zOuP{IBg{U`3tk#@h8scW@;ewKcC~gidb4>80;XLSM@V`p+IH%#A!N8eAj%YiI7xBR z(QsTM&7=xU2uyM13*e1ZwD49C_?#MxY<a@oC8b8Ta7ybh)`9i8)mw)<ZphTAMCz#Z z>(b)DS=)V!Dl)1`i#v7Zc_|n>N1aL<#tq*IcVcdCQiDSeb^JlNIo6>j^|><+I&nw8 z$w_XE;RiSc7?7D<>3uTnp|Dg#xoX+oJ%0qI_vhy<Q=M{^q8T<UV{@#GMcFhv-zLKv zsnqKz)*NHPFQT55bht?-4^S>V{T&9Rd$g=}FC3X%BdF)=6g?VA?E}pAt^2lqMaZ|= zX7&U6=47P1Lb_iuY9^ae)!}gbAQUY#?4%xv>>T9cXJ{jaPd!lsqCb+Z%{?P$gEG&L z1`pcKx{>@I#A=wB+42ijBP+tDYwBC}UF#lps$IxfE1E-7#~Bx1$Xw)CHhVgX4Ra)3 zv@NN0d8TAUx_L=?6n^=U9KNI=y$4uNnmRO6GmC|zzo#4+M_8(+JY2A8ZyjMz53chJ z=sBJ({6thSgM>;LOf43E=#&hRGy+K-kIsQ^^eNY%bS<@e@d!jMOwPB6p&~D_Uc0DF zm42`@A!>l-f_`1KKL5>U_RO9+u|2h8xC|Xk5!s!BO}k&#*VDRv0!JxuPFW|cnLF}K zedc0w83NdWd&-*9emKh7T9(!#Ljqctt>wGMJ{DS<Vb8bf9nDj(DfzXMfq>%b_hA;z zyWarn&gId%?bqh-*9zvyG7!)Ly%+%abwY~XW-koHr!Bg$q&~kw^beR2alQrXvx<12 zrdDka2g0*qfR7^ch2<8sfJZ~LfD{-l=qva*eBt8l)^)f8GKoaMU_1(`$hlr5Ro<qK zeqTTIdl=uxm1)I~kDwL#>I>9y8$=@{h!+1KK|g|MLzez)j5x%#R(L+g2-`;SaE_Xz z*zWzA3*_WB<cC;~_5!Ns>60-82DP&K_NIMX+OxV?48Q}Ip*mneIfn_Fp_u5yA=K9( zG^)lO#-S6^pF#45eI$cEKc88LWlaOFf53wDr?6_G#}jzShx#hp=ppq_S%}XOJ9de; zbo%<|EJTstW9<VL*H9R~gi=uhY>t==I?g%0;4RmVcnpAi-J0XMm6GRr1+Rp9y<(#z z3g*ZzuKXi#19#C^C^8f*IF|V&&v%eVg7i%u2??H6+^L`#lpdA+g4BtLJ-;Y*;$jc@ z*x+Ih87LJH8+%Ck5EnD$V{mabI3ZYA`L%yjemy7v6C>hUJ9#Mfy@Om#hJC5N{P33? z$U$S+@C3TE2S<veA-;RaMzmql`Y=<O2`(fnJT<p&=Gli%jLe>&0-P-GkT}fWmA(u+ z_kjkI0(Nuf;r;=2kgnR_fTSLz>540ZP82-^At^>!IoyoQ@w2`#JvZIN=s9;E<7O)7 z0Ui~5bIL-_MbRM7T*LLOFf9N=!01k0<nxL=D}CpQnigqv6l4>-02eK^7pBE_QO=Ot zlCzR{lkJT`uX`g%yy#(spzlTi%S^Q6FB|BWN#@SONr;SS%CJ#vo*;dL1;HXFF5w5M zp7DJoK*Tn;*m(;Dv|~I(UUiV5(v7hgl$v-%baP&&2It|i95llS3G6KRX?(>@H&Hv( zOwY@AVX0@4vZxOu8~8CAo-+`UF+r>$9x*Ad5z_+*svu&-Dl-RG9e6p*)HQ=}v$H)A z+advr2qdW+>0L9Kt}LCE-nMS1sM!cfEX7680Y&3Uos&i_O>BySJ)tl>6qZ_64g1g7 zt$88LuaN5)E$?$(6<N-hvxOBuW#!6vXi}`k|GtG4o<ncfj1qdk#*oZs9R``_DV?AD zjGvIrqUX$<>VCR3rE_&rVXy1XJt5fS-=3wlzL|~?V*hoH*ux;eJh2Ot7v!3IwPh?x zmBQ&{9)3PtG^a+q19`$(;L*`k0<-%~*76YX-*J~o@~{ALp18RH@fp%YkkldwGTUl- zW=4b%g!darILEg`-2<-LMKXGyqF-b3f6P(zlSA;xJVlF(E$l9>`E4#ob3%EUqoqVf zsqH-=l%y(;G`Zs6&XIBy;ml24pd;Tm3Lwj-?BU?2M_n=~Np+4ZAtTeXd5nL6T>TkV z{Lk-BX14S~z)RO4;+mi`RWq7?>%OC3%}B<}5xn$4bl-}ZmUkt?@@ZV?(>1vL(*2VD zH1<q=kFlrQE}6T2nWH3N<4EQd-G0@Wgf!Oy@O7*$QC52du-c}Pj@D`>yF_4Z(9Vxp z6VE_zmXz;Y`}9t`b?fRi{W*JHV`I^1sc|JgK}!~mzr`WzEJWw_6^~%&zi_1<!G#}K zc4|oGHyObl21MsJY<)k8ATN$uYfA@F+)X~0^3|WPxXXeenIV&^uYDHWQsFge(5=Y} z4S^KKrjuwGd3w0y7*N9^>@a3t7Tf2J(%ZomokW4C)NNE7Ud<td6By@I>aNlpwV<{+ zRJe#9>==NMLV*3$3JL&m3Lp+J?os)v0wloeLPlnR+gDEvG%A|dEVmL>EW&em99Q%@ zjs#caYeYbZuTXb%pIQ;Uin5?TVtw*Ppd{QcOfI4Z|JX0`nNzjG+472L(_NLE#@0Vc zFVd`8@1|{fMk~@&Fg=^fw0^BdyI6x1lt966WsGPjdVZ7kc<A}P^pvQ(=((Qul+p8l z(&Ob%tYlBbIC8<YtM~1%l`hK2^0OmHe~ghS3o3gY^)}|z86&eERO3c}i7gVaG`Tk7 zWS+F90JI`NvEkLto{PR?d!SPP>7F$!>}<x%@o}`R(D5QFzatQCrT-EE+^jS$aV3<i zGY@5bR-W?7ze}H7#&b*k6Zvz^Xr6U<>TQbC`C4sF?pix<#wVu*dBPir``wu*+}255 z&^TdXuQ<cW<i7R4cL_WjKeJ|P=QQX$1=^ak3bd#~90WPrTeUR8Uuq@R?&;~d=+bLf zZ(X_b>yNITITxKddoDUF#pQ3+nce1r?#sK4g_g^^<?m<ka(6kep3fX@I{f^3E`9#| z<=qmd^AVcq;N1dR&qdOB>0ESqw}Ret(YrE05)P+*NqG~;N*df>2C2Wgd98J)O@fVe zS_G}Sjg|d+K8^;=U(Ii?fBgQ3GGE$jS8m<hzbn%^ej=|d{}GF5F^D8o^MnC+BfRMC zgpvMBc?1IFJmV211>G6l3-$LnoZ+Fo4j#%&C%-Ij$r;He#R&gW2m}2$7_wG1X@z2M z6fh0l;#>l6V~%7M)zg2$mX}c^_9)VSiwa(u+xkJ$L|WH)`V^zi`TGHe{T^4uMVT@y z;;QgHsyb<(wol@&kzTK$cG|At4qs$bm|bzz3hs*OcNMKG_Odz)<Bin(&kw;4i+ExG zzX1oyOjHFBfe-?WK<IiXa3yj3<K758^yR_|(9M0;$&3M3G{66YE6oIY%C(#86?^xv z7oLkGArHm;+T3duTIQr^{=|T%b=b=`^Z0@Z;pq@e*ZZuA3&@jz@DpjMOR}RH3Z$s) z=IbY~yz-9sw%)@1+A?3JZEnZg8ZXu~L5n7m*YpEPwL2aR!Y)JGNa#ySJHr72&7qcH zP2T_fg2Ojhlvz+AC4G_<+uLz(5a~Kw_^^ao6Hs+i{+Tl8j&rY-c$dtJz02GK$*Qe5 POsIO97C7ENTkZb`ZL=<Z literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treebuilders/__pycache__/etree.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treebuilders/__pycache__/etree.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fa8fc8cdf8be8cf820ed7c2798975a90738198e6 GIT binary patch literal 11818 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 AGXMYp literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treebuilders/__pycache__/etree_lxml.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treebuilders/__pycache__/etree_lxml.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..66fcfb324b8165c688767dc319a747558e5e1dad GIT binary patch literal 11744 zcmbVSU5p%8R<6J9uCDIs`SEx>cATWwi4#v0kG<J!vf4E!iGLDnomtCv;@#e4o1U&3 zPuKKxk8jo3p57i<(iU+LD}@(?5L)dkFYtl{LVyrR2zUY>0F`(_@RA1*NCAlm3BK># zs_LHcc$1}Db?er>x9&an-1C3xD^pY6d%wN>{tK@f#y=YqKL_>Ka7BNI!Z#X*Z~9i( z+_W0jrroeNorYtw&F&T&1-Ta+MY)$6CExK2U3atGC}T{~FLk}mN~0om7wuldL*4Pq zs8<_P((a*NYt&HZoYP^oQS~d0nV=ZX`qh!ym<y`mA%ALQhVzZXZyJ8hpMGHY)4{^X zZXCh$j6aL#S$SUc=lnwtjK)!a-am}{G4wC^N6>#HD2GqrjVFBjhOxBR`ZLoo-tPO` z-JrhKSM_LnYpbu~PVaU-UJvTs`<vb6AXWjYomJIRJInQ(Xz%zztG*s6)S`OauWv^| zy%p6rx7+Jpe@$NPwc^g*{5AG&^`oe>+6`W;-|NKd{p}d9aiKNUy4}J0>#g=igmpH8 zdV4#H`<wNk8*B!>*z2`61FW;&itDQ?Xl>M2gZN$$^y&&DT2T;bsQmuDUIftU0s<f- zaD3?=W^DC({TMH7sUYH<t!_7msLmZm->64hLA$foX`^pPHnG<4cKi1TWD9%U=wShF zx834~w^Sdy*^IvKc{hXmaUJMu_csY}#O-pgcr((_1a;NN`q_>y_S-vK*b^~P@Ad24 zq37LN$DUffo%9u~5wGhh+U;!xyan}OvlG`_^^2{zbrtx$)lxl-@IC>J8cTLE-CB+M z-R(GNb~bsCiR*XncA`$dm&|PUI_<t6G`pQRP_1sX@(Iq~STYl56*&CF(ht-7rbd6c z-S0(l3;V)DLCArv%?@xIfI@B#roMmbyWiV=|AnR9Q_C+bC3Y+F+k`0laqib}Me`^E zqhW%dEYP_H+O&ldoumq!Y!iDoftfbBk3Zh|_61zg0*awIG@8cHLTL_dl$LLRlFb$D z-XR(jcWWD%Z(s2fH`<BfVDpN<<RnfMbk|f3GpK16Gbnz`P;<C__RTZ#=GK|5&erMG z?M~M}efG}!YX9s@KAYrf-VJ(wU!7TxH@ja2C!8U{$k;$dX9Ocn;gzkO#BDY^y-wV0 zK7*;FA_~JS;y*Y%xxwXZ)Cyq3D}=n+OuS}uQ@9cJYO{G~yVcb_ikK5<CyGOCn?i8{ zS41?qraT{v{1-9cQRMp$4guoIFXCPZia`OwrsS7^R5x)mnA@Zk{&>$1gh=!a9>{H$ zI97cW7JyGl{U$J#RGRH|Aa(`h2O3hdcy0eSxW5;0MRM}Q*KD?Sj;l5o=8yLr2%!oi zG(vM^gx1gu?U4y7nu6k}qZpi&ZsU}|fsInj_j_PhAU%a}$r6B)Qu@3PvZT`5+QRW) z;0~5Cmmu0O2lF|669e|(iMSHNB^3+-qQ;J?j^X)WJS4RyAeFTQTVI}7@JPPk-Z3jn zt~!iyikMJGSO~Q|#oE&-z!Ivz6{vV8@x})+u}^Y=5^7pRZ3$Q8qHs;uac$RDY~8an z9+J&rub{YXd}PKzKN<Rm=0}EK`q22${LosnsRkdEKe8TzU446GQPG9gLvv)3x>jyN zj2wkP26x35`{3H(Vk=s|kP1;n^yNoRGA9}dWpoj1$H1s>j;xQ(=xb89Mwa^1hbG_< z0sy|P&{hMvJ6o^Fy%1gY9jO%;j9sgD%rEFCJxY&Rv)LyzL3IyJ-#uc?L*%Sk3kFFG zqe>%V*S^0vv_p3UQrjr2-_Z44`_6+~#{FL#+S2;R*txA|;O;S|%s21+=$6q_u{Sj0 z%E*fTL26a*MOE|GPvfbu=9iBezPn*XpT^T4m;#eWm;jHF!P7e>?G?gy|M<|jXuLna zYwun8WAo1OTgJy$&js`|@$3fI`W1Pvn#~u^WitvsrvQ(wUc>l9yzgB*Jd}<7*zEnT zz&sxwmecqVA&nQpBjF;~8kxJ!&>=Rk;-^C=JnGlbR*;&DS}{HrJ~1pDHFis~#&il# z>7fxG9~MU@&x3pGJth4!x?g%_{tOa<dKNHP>aT7ayY793^`8u%8WAJ@d)97w*NX{N zc>*R&-3KI3j|}t|cFQs=`^#gf{JCLiSmr9bm7bT6s0`iE99D+jnnmb7w(czB<X?*G zL+lDGKBrd{m=6)=l#a@HBi#|+`SC5%(;Q&_w=ss(k!a8M#<yQJc1_S6cQdnF#ral; zpnqBUe{N}hc<h<^?jmUzXPM0?0&;#OvE$Zl^#r(TP=3ZwRq$Zy+?OtX>%z_NT)R|1 z8J!;-nS89DI2oOg;{2d6JQ<ygJ~Qj8gc*cm2PL#|$Y3s??=)>Z>h?hmo#(!E`ZT7k zpFVv)apG2|s|sA+V;7paAm>2+d{S)1vFfZ23eq8CPDVe&>6gBgl-64j`!PyHbW*|w zI=!`iQt9+y<n&tIi#IPOWo-~NJAT8{7D01cb(1pnfhb<texm}xOJUUMZ$}O43sDmu ztS7O4+CgGRSgWwQ69*CMJ5f@-3;hq{3K}1a)?SYy2w6N|QmU`iGuTy9O>M$v46_E? zh3Zi!i7O99!);#DHf~bWRzzl0Bp!~Xse;?V{jH?1*^1liN#VBYZ*QqGr-eih);jkA zNM%j+H^05vU4aFmo?~AD2Hs|r6lFN>5e&h=Uz$=+vbWgj`8WySD)yV$P@~FyX38)r z^&-8R)r<5Fih8NU(?<d0G7>u~Dco&!x1rqG&Y56{CI!(iu*If`k|>BTce*%<#8P*Y z8DOW=>UIV}x@oO}MDJVyXy3pU#V8E3YI>GuLjT}jvn(;7s^&31u@7a<T(FLti?)ZS zMYJuN^X74D4()8=zh=%^Rk<AWv4wA<9W&2k<O$0)k7Gv9oI(HK6!sP0$RJe9=em73 z0@3;9{ZJ>S2i;BOv}CIaZpqY@J$rS+ey4{aM7L}a<KATbEf(CV=-Q;VcSSg$MntMG zOvkKRbC*3!y^W_mikC`P6z{XBK=B$>wQJgzc0YoG7>cO$?a+9L8q};acsbt{oQuo_ zLDjE!;Ht=h!3Tk9M&G7Y*C&~;N>$HG6ffM?T=7P4L7bSOrM@nATRp4qyJoNIL*b*( zfygu=Fbfb=5Rrr~ERM7=|1s*N7^+RJafA<BJ}j@9si^+|PhRu`>7l|d<vq)OA*|4+ zen4^Ng;k385$1==<~&qzr9H~Jto}q`!2F^j=S758p(5cyu;tF5-vYMqZh3MgQ77KW z>i-v7r=Yxw=`8TUQ~R>AA}q3BT$U-}PDYS#1BX&f@vw4)^7tt5Zs3ZJqoD2l{yek= zwg79|)WH9$b;qH-I4Gq8FD0eKT0X1&n2UIK!ieJmede9(cA^+EXY2fLa(-ILu%%y# z`}$ZPPuAm}@f3qnCXfr~&Tu1?TuU|eJZ_3+qN2$zVwd7g(Zf)uSWuw|Zq!#;dzl4= zle)@+oUZ3`G?)A=8WM+sL|sM|Ci$3G#>OdG=a+FsT-5;MQapHI@|3BaA{bk<a}gW_ zhPURx=z|lVzx#ytIAPnvx07HHy@{L6^h<aW8`-cNt5$a{#p7(_%70`U{-Obj%<l^9 zh7%MRD1wh=He5WH1Fuo>5Bso|AD9UGXisd)FZnJ!GFX7Vhx@c&@vFGc_)~rj_gMsV zru`YbG3Ouo&{#A5S%2<9xpBxp<j<pj{zGtW<1i>_F{#iAdxNfRpjIxoNr3#32ni&g zBjS}td~6LNO@3&>q_;!Iw|x7Drel0We;ZtkviPO})7})*-t`M{X=Hz7pe-}`$(gQC zQ_daPyEc003Ru4Dm(gBEdl~JH`0m~iyxpwC)exrc5Tq|I0^KBU1-^m1w%zR#b~p;^ z1OPl3zoe@SzkX400kDA!Tk7;dTzI$?hNZ!&30&lk<(T$g7juI;Ze<Uiidcgb5Zy%q z3>h1)s&?Qe=y*g7ISBaSg1`j74tZgV(Rmq6ZSPt!b{iMqp1kWr;`r84N}D2T_EAVK zF)ST1EYT*WDWxa>rJ-}qxO3{3_GX=xLGk-1qurB{wzhbFaQ!Gk636efW9{|{bDd^m zA>Q8V2FY~0AE<VaZ%r6+si56(QBss7iM<i*h+qM-MO}><kM86j;fmN~fax4)Waw5f z-f^(m;LBeWsX4}T<dOin5kc-XR7iv*1t8Nl4Ui)U5vY3^sDpngsB=&oqs|u8p$(|B z85jx+_yd*aegfJ`>Rqgbz(f-^3hkw4QxRwC7K?AQAYL`99F3~)uz{$043-+``b%7? z5~n31*m?P<z)lVgBU*(6-Fhygb;15~O1%7xqdz1dL@rFGs`@S}2Q$xo^kmGF^DrZG zF4%{BPO${`kvc__tAj*=GqNDUw2*Rz(I}`~h_hng24(bm{!GgIReuWXSb?QtO5ECI zY#Z!2J2?51ag!Q~Ikiw!<<vqg@X!h=HcXfqCXEqIIS^o=orln?BZ@5e;#kb0NGUU% z7HzfK0pe~`nlUmHyp)-xBzKSo)lp}avH%90#H=KI_#S%EK$Iq>)LuV`Vg42aBFYVF zDrlkQFSOM$hfsC%$2<2e9P%tG5FWB;><qi(p2;x~IjlL&LKgZes`oKEDTt4Qh#Xv+ zON8NO>ox+7IU+QnKZBuZB<x`FM!*cjNiXB?F*My+6_Vf!Z!CR1H-u<Hb91t>Dk`!u zY)0%>&_7H|w5k>g$RwV?BccgVVOxaiAJLtK=DsMZ(^vOEM5u0XE*>2aO40!=rfT9j z1!JGprGs{3-uoxMF2`pMK8N{Jl3V63#uMaGuRUkaXe()&Y7%F!rP~-Z9mZ4_G?*k$ z4JOeG2!Z|a0{?=xpBBPB6O6SZNt1F$PLUx;Fk;4%ILnMBDa<p%w38Xlc^B4Os?~;n z7^&~!&BTMN4G)^>l$7P5*pTW-s=DKi07<F<bn$Z-y`SegX!`_L8bO9yI{U>qZoKHh zc&E}MX==Tcn<zq{1Y2>}8Sh+X-P8b%6(~piE3ORZpQA7{s+b5YlLn^_)CWH1RRN1S z3z1Q4tlefoa!^E#K&kbH7G4J;k^A`@T%ze+bEZ%&RBg|4ZI&~R98(+p`H#oXU-UH; zlZqsBN})z5_ER-7nP<pU2pG)$JVkIp2ZawlAZqG^sBZG85Rph}PS2E-(kaDg%1$rD zOphTiDuw^RH72jmkuvH02MhFE?lESc3G`i<I27g+IW5&izn0MSq4vP}i24@^&HUYe z{=eV^gY)Hsr6KbHl!hVAXd!)KT^zf|2t|?1obbO1O)3t*D9#`b`Re0R8$GVwXHjRt zW7DL4uxQvs|G(o(vl=z0ioAwm>(aFPDsD*)3yN~o$#99zNpMGf6Wt<elEb;meCy`h zS5qF1#E=xekO`A&pd)%0x~&KiLb&1#e9DueN>MjikeV_R{0<x5VIk6lU_FLUDP!f; z-$Nxe#u4T+i`M+%V^1&EkY}_8^9M=2J%`G(pj?P(P0-$^kY-Q=2h5bJBiTII5vUh4 zp<Nn7pA?uxkCS;VIa5Nvf~+UPdyM>1h^MW|46~tVZ>E@t6s`P&X-389f}%)WYq%IL z9F4*3<c?(NJ#rx54rvroo7{ddC4QFiOdgIKt3~O@CmK0<9-CZgZ+LDG25BS+2FV1m zp{iut(7Hhk;!gMPMy~E0Ib5XT)9AWnBqc&}FcuO<qO)9ImC%uH7!`D_!I4P_C&uOA zQ6TdY@TiTD3ZYa%vg{~;gU4ziW_N;lQr6_y5vhv{aJYau5P=mI)f;I)(l2Ns&s!@x z=2=Rr$R+l2^3TP91b&htbT_i4iNiRQj`3*Y8Qy%F1Q-WK$0s3szMKx2<DO~lNF-ET z&6<>t>^^%Vr-u?=qBSDBUq=P5BKA!`oz5d1L~$Jvf3TvnlC*SU@!Eyh?cU44l!JIB zaDfyR?i;qcCgTcv9QuoBw}%d*7{y@`ETY|u;)+(i`PT)5XZT6LBVV526OOHTrw(FZ z$ZT-(;6c59?=;^|hb@&7_n!XNBT5|B6p39}N!vkU>Q~d@B5jsRVlpEN(BBAp`+#dy zv^Ml<I_qh~TFFh8jEzBug!4F$gu05}KmHa%)F{cIRjXzWj!u%L769p+dwjQ?RbS!J zNEjtr5T6|Zm1rS0KM+z4b<cC@GXha$>ahV?P;^_>ODve)SNB+)LXmlD)Cfs&3!m-u zVohcF&eS&gUL3R40^<LJ`lImg6>EF8k?~mc2Bu2Ex73T|GO|BX!U#`<cI+U!{bGz@ zgl{2EhS*T-#)vVGtk9DH2U<kDIx9K__S(V3(DFk#ti5>rebH*L(?|TC-)K#KR}_8n zzxXXxG<pOxPXNM+K<qE@@dqqOKS==}d<9CYq`PRCM4x)V27c(%Y*UvZLXzV!ncXAg z-)?n!UnWL5Dc#)#P{-iO$KsUZbCzWaC1=^+$1FaD6i|t5u^<$5VSz3zNh$!r3kEWw zG9m=)ZIq+)GEQ>L>aQ`5sRTxV__n=u9bXAdzT>FB(BmNt>=2*ojZD9=QBXgUCkQ<K z6uV*BFU3dzNZ!7JfTue`IB(B8e}L7>Lu7La(H*YsWlzYoTYg0#wft%hF{4;hM-7OT zPi2K#x`O3Ta|}bFB7B_tF96CKa=mp3A|sq07W^583n6rzaAt_l0?84`>(_J!c|>h} z2z~Rcg@>Al^-8<QJckSZEZU9$es}0Hc!_jIZ&=zbBULjubcZDgLY9Z+q0?m6{wOlu z+${sNUX$-03Yn$%L>(Y6KT&@Y>pmr9d}u{o$6*etlj-8YRQ=jJZ(O}{LFbJ>GoKed z@|k&J@Jg0r)>+w1RN`|pWQBY9g06QP-vu&J<;&M0^*h^rDCI`+owH}pzVzzAku<aO z{K@F~f%W|JpPA=H$_?H;n2l25s6V=E)&0)e8a`nJThXp#?rT3g4W2!B^Q|j4nm6A1 z);m`(Hdijad+B=f^=sEIy?(u^_jL6;XU=Qu^F3}n4bLt;ttG0sVj`q+rJyazRQO)o zUhP0rt|23<_AzD&Un+LN^kRr69&@}pfuluTgw+}qe9Dw1ti?r0rm#i%hEAKC6q1tG zri_RY`O)7(*)SWD89!KSZFePfBJnUSBotne&yz%&DyA;fLlz<(Dmo1I0p~4ZtsBgT z<M6l(u0bD5%-yEwoTQXKYUM)|C1suGMs~YVl>~fhF7Ff4St#H-W_^{Cg}E7{pySRn zkS>foEs8EWE>Fk^TQy{K;j`iyX(7AH46uzPkj<>I2h+G}7SUS7Q`H_UJSv^I*phi! z!aXZX3;Vt8ML?iFW--O$7g-3tcpAx6X5MJrdu*%WD@^ST;A_}^PsitJ<BH*_c3As) z79$qaOB&g~j#@I6%H4L*?Pjuf4jnKWKjcVp2Ix%u4z7q12FB&{zvW$Zi}-r0=z8vq zSEv<5$}b&HO3fyYPJe8;wjFOPe0Zp+m=)EUq9_(>M9w}?XZduUh4?OI)+pq)gGAR! zyrhOlmeZdKYipNBzlG0w6*awhMq@3M6#J`TfP97EQPBD}N8Mn-9Ze7ecdXOp?m7Kw i<awf2To=ch$Jx>vAw9_7@@$7GL3^e&Q**!NF8v?FQnL;K literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treebuilders/base.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treebuilders/base.py new file mode 100644 index 00000000..73973db5 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treebuilders/base.py @@ -0,0 +1,417 @@ +from __future__ import absolute_import, division, unicode_literals +from pip._vendor.six import text_type + +from ..constants import scopingElements, tableInsertModeElements, namespaces + +# The scope markers are inserted when entering object elements, +# marquees, table cells, and table captions, and are used to prevent formatting +# from "leaking" into tables, object elements, and marquees. +Marker = None + +listElementsMap = { + None: (frozenset(scopingElements), False), + "button": (frozenset(scopingElements | set([(namespaces["html"], "button")])), False), + "list": (frozenset(scopingElements | set([(namespaces["html"], "ol"), + (namespaces["html"], "ul")])), False), + "table": (frozenset([(namespaces["html"], "html"), + (namespaces["html"], "table")]), False), + "select": (frozenset([(namespaces["html"], "optgroup"), + (namespaces["html"], "option")]), True) +} + + +class Node(object): + """Represents an item in the tree""" + def __init__(self, name): + """Creates a Node + + :arg name: The tag name associated with the node + + """ + # The tag name assocaited with the node + self.name = name + # The parent of the current node (or None for the document node) + self.parent = None + # The value of the current node (applies to text nodes and comments) + self.value = None + # A dict holding name -> value pairs for attributes of the node + self.attributes = {} + # A list of child nodes of the current node. This must include all + # elements but not necessarily other node types. + self.childNodes = [] + # A list of miscellaneous flags that can be set on the node. + self._flags = [] + + def __str__(self): + attributesStr = " ".join(["%s=\"%s\"" % (name, value) + for name, value in + self.attributes.items()]) + if attributesStr: + return "<%s %s>" % (self.name, attributesStr) + else: + return "<%s>" % (self.name) + + def __repr__(self): + return "<%s>" % (self.name) + + def appendChild(self, node): + """Insert node as a child of the current node + + :arg node: the node to insert + + """ + raise NotImplementedError + + def insertText(self, data, insertBefore=None): + """Insert data as text in the current node, positioned before the + start of node insertBefore or to the end of the node's text. + + :arg data: the data to insert + + :arg insertBefore: True if you want to insert the text before the node + and False if you want to insert it after the node + + """ + raise NotImplementedError + + def insertBefore(self, node, refNode): + """Insert node as a child of the current node, before refNode in the + list of child nodes. Raises ValueError if refNode is not a child of + the current node + + :arg node: the node to insert + + :arg refNode: the child node to insert the node before + + """ + raise NotImplementedError + + def removeChild(self, node): + """Remove node from the children of the current node + + :arg node: the child node to remove + + """ + raise NotImplementedError + + def reparentChildren(self, newParent): + """Move all the children of the current node to newParent. + This is needed so that trees that don't store text as nodes move the + text in the correct way + + :arg newParent: the node to move all this node's children to + + """ + # XXX - should this method be made more general? + for child in self.childNodes: + newParent.appendChild(child) + self.childNodes = [] + + def cloneNode(self): + """Return a shallow copy of the current node i.e. a node with the same + name and attributes but with no parent or child nodes + """ + raise NotImplementedError + + def hasContent(self): + """Return true if the node has children or text, false otherwise + """ + raise NotImplementedError + + +class ActiveFormattingElements(list): + def append(self, node): + equalCount = 0 + if node != Marker: + for element in self[::-1]: + if element == Marker: + break + if self.nodesEqual(element, node): + equalCount += 1 + if equalCount == 3: + self.remove(element) + break + list.append(self, node) + + def nodesEqual(self, node1, node2): + if not node1.nameTuple == node2.nameTuple: + return False + + if not node1.attributes == node2.attributes: + return False + + return True + + +class TreeBuilder(object): + """Base treebuilder implementation + + * documentClass - the class to use for the bottommost node of a document + * elementClass - the class to use for HTML Elements + * commentClass - the class to use for comments + * doctypeClass - the class to use for doctypes + + """ + # pylint:disable=not-callable + + # Document class + documentClass = None + + # The class to use for creating a node + elementClass = None + + # The class to use for creating comments + commentClass = None + + # The class to use for creating doctypes + doctypeClass = None + + # Fragment class + fragmentClass = None + + def __init__(self, namespaceHTMLElements): + """Create a TreeBuilder + + :arg namespaceHTMLElements: whether or not to namespace HTML elements + + """ + if namespaceHTMLElements: + self.defaultNamespace = "http://www.w3.org/1999/xhtml" + else: + self.defaultNamespace = None + self.reset() + + def reset(self): + self.openElements = [] + self.activeFormattingElements = ActiveFormattingElements() + + # XXX - rename these to headElement, formElement + self.headPointer = None + self.formPointer = None + + self.insertFromTable = False + + self.document = self.documentClass() + + def elementInScope(self, target, variant=None): + + # If we pass a node in we match that. if we pass a string + # match any node with that name + exactNode = hasattr(target, "nameTuple") + if not exactNode: + if isinstance(target, text_type): + target = (namespaces["html"], target) + assert isinstance(target, tuple) + + listElements, invert = listElementsMap[variant] + + for node in reversed(self.openElements): + if exactNode and node == target: + return True + elif not exactNode and node.nameTuple == target: + return True + elif (invert ^ (node.nameTuple in listElements)): + return False + + assert False # We should never reach this point + + def reconstructActiveFormattingElements(self): + # Within this algorithm the order of steps described in the + # specification is not quite the same as the order of steps in the + # code. It should still do the same though. + + # Step 1: stop the algorithm when there's nothing to do. + if not self.activeFormattingElements: + return + + # Step 2 and step 3: we start with the last element. So i is -1. + i = len(self.activeFormattingElements) - 1 + entry = self.activeFormattingElements[i] + if entry == Marker or entry in self.openElements: + return + + # Step 6 + while entry != Marker and entry not in self.openElements: + if i == 0: + # This will be reset to 0 below + i = -1 + break + i -= 1 + # Step 5: let entry be one earlier in the list. + entry = self.activeFormattingElements[i] + + while True: + # Step 7 + i += 1 + + # Step 8 + entry = self.activeFormattingElements[i] + clone = entry.cloneNode() # Mainly to get a new copy of the attributes + + # Step 9 + element = self.insertElement({"type": "StartTag", + "name": clone.name, + "namespace": clone.namespace, + "data": clone.attributes}) + + # Step 10 + self.activeFormattingElements[i] = element + + # Step 11 + if element == self.activeFormattingElements[-1]: + break + + def clearActiveFormattingElements(self): + entry = self.activeFormattingElements.pop() + while self.activeFormattingElements and entry != Marker: + entry = self.activeFormattingElements.pop() + + def elementInActiveFormattingElements(self, name): + """Check if an element exists between the end of the active + formatting elements and the last marker. If it does, return it, else + return false""" + + for item in self.activeFormattingElements[::-1]: + # Check for Marker first because if it's a Marker it doesn't have a + # name attribute. + if item == Marker: + break + elif item.name == name: + return item + return False + + def insertRoot(self, token): + element = self.createElement(token) + self.openElements.append(element) + self.document.appendChild(element) + + def insertDoctype(self, token): + name = token["name"] + publicId = token["publicId"] + systemId = token["systemId"] + + doctype = self.doctypeClass(name, publicId, systemId) + self.document.appendChild(doctype) + + def insertComment(self, token, parent=None): + if parent is None: + parent = self.openElements[-1] + parent.appendChild(self.commentClass(token["data"])) + + def createElement(self, token): + """Create an element but don't insert it anywhere""" + name = token["name"] + namespace = token.get("namespace", self.defaultNamespace) + element = self.elementClass(name, namespace) + element.attributes = token["data"] + return element + + def _getInsertFromTable(self): + return self._insertFromTable + + def _setInsertFromTable(self, value): + """Switch the function used to insert an element from the + normal one to the misnested table one and back again""" + self._insertFromTable = value + if value: + self.insertElement = self.insertElementTable + else: + self.insertElement = self.insertElementNormal + + insertFromTable = property(_getInsertFromTable, _setInsertFromTable) + + def insertElementNormal(self, token): + name = token["name"] + assert isinstance(name, text_type), "Element %s not unicode" % name + namespace = token.get("namespace", self.defaultNamespace) + element = self.elementClass(name, namespace) + element.attributes = token["data"] + self.openElements[-1].appendChild(element) + self.openElements.append(element) + return element + + def insertElementTable(self, token): + """Create an element and insert it into the tree""" + element = self.createElement(token) + if self.openElements[-1].name not in tableInsertModeElements: + return self.insertElementNormal(token) + else: + # We should be in the InTable mode. This means we want to do + # special magic element rearranging + parent, insertBefore = self.getTableMisnestedNodePosition() + if insertBefore is None: + parent.appendChild(element) + else: + parent.insertBefore(element, insertBefore) + self.openElements.append(element) + return element + + def insertText(self, data, parent=None): + """Insert text data.""" + if parent is None: + parent = self.openElements[-1] + + if (not self.insertFromTable or (self.insertFromTable and + self.openElements[-1].name + not in tableInsertModeElements)): + parent.insertText(data) + else: + # We should be in the InTable mode. This means we want to do + # special magic element rearranging + parent, insertBefore = self.getTableMisnestedNodePosition() + parent.insertText(data, insertBefore) + + def getTableMisnestedNodePosition(self): + """Get the foster parent element, and sibling to insert before + (or None) when inserting a misnested table node""" + # The foster parent element is the one which comes before the most + # recently opened table element + # XXX - this is really inelegant + lastTable = None + fosterParent = None + insertBefore = None + for elm in self.openElements[::-1]: + if elm.name == "table": + lastTable = elm + break + if lastTable: + # XXX - we should really check that this parent is actually a + # node here + if lastTable.parent: + fosterParent = lastTable.parent + insertBefore = lastTable + else: + fosterParent = self.openElements[ + self.openElements.index(lastTable) - 1] + else: + fosterParent = self.openElements[0] + return fosterParent, insertBefore + + def generateImpliedEndTags(self, exclude=None): + name = self.openElements[-1].name + # XXX td, th and tr are not actually needed + if (name in frozenset(("dd", "dt", "li", "option", "optgroup", "p", "rp", "rt")) and + name != exclude): + self.openElements.pop() + # XXX This is not entirely what the specification says. We should + # investigate it more closely. + self.generateImpliedEndTags(exclude) + + def getDocument(self): + """Return the final tree""" + return self.document + + def getFragment(self): + """Return the final fragment""" + # assert self.innerHTML + fragment = self.fragmentClass() + self.openElements[0].reparentChildren(fragment) + return fragment + + def testSerializer(self, node): + """Serialize the subtree of node in the format required by unit tests + + :arg node: the node from which to start serializing + + """ + raise NotImplementedError diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treebuilders/dom.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treebuilders/dom.py new file mode 100644 index 00000000..dcfac220 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treebuilders/dom.py @@ -0,0 +1,236 @@ +from __future__ import absolute_import, division, unicode_literals + + +from collections import MutableMapping +from xml.dom import minidom, Node +import weakref + +from . import base +from .. import constants +from ..constants import namespaces +from .._utils import moduleFactoryFactory + + +def getDomBuilder(DomImplementation): + Dom = DomImplementation + + class AttrList(MutableMapping): + def __init__(self, element): + self.element = element + + def __iter__(self): + return iter(self.element.attributes.keys()) + + def __setitem__(self, name, value): + if isinstance(name, tuple): + raise NotImplementedError + else: + attr = self.element.ownerDocument.createAttribute(name) + attr.value = value + self.element.attributes[name] = attr + + def __len__(self): + return len(self.element.attributes) + + def items(self): + return list(self.element.attributes.items()) + + def values(self): + return list(self.element.attributes.values()) + + def __getitem__(self, name): + if isinstance(name, tuple): + raise NotImplementedError + else: + return self.element.attributes[name].value + + def __delitem__(self, name): + if isinstance(name, tuple): + raise NotImplementedError + else: + del self.element.attributes[name] + + class NodeBuilder(base.Node): + def __init__(self, element): + base.Node.__init__(self, element.nodeName) + self.element = element + + namespace = property(lambda self: hasattr(self.element, "namespaceURI") and + self.element.namespaceURI or None) + + def appendChild(self, node): + node.parent = self + self.element.appendChild(node.element) + + def insertText(self, data, insertBefore=None): + text = self.element.ownerDocument.createTextNode(data) + if insertBefore: + self.element.insertBefore(text, insertBefore.element) + else: + self.element.appendChild(text) + + def insertBefore(self, node, refNode): + self.element.insertBefore(node.element, refNode.element) + node.parent = self + + def removeChild(self, node): + if node.element.parentNode == self.element: + self.element.removeChild(node.element) + node.parent = None + + def reparentChildren(self, newParent): + while self.element.hasChildNodes(): + child = self.element.firstChild + self.element.removeChild(child) + newParent.element.appendChild(child) + self.childNodes = [] + + def getAttributes(self): + return AttrList(self.element) + + def setAttributes(self, attributes): + if attributes: + for name, value in list(attributes.items()): + if isinstance(name, tuple): + if name[0] is not None: + qualifiedName = (name[0] + ":" + name[1]) + else: + qualifiedName = name[1] + self.element.setAttributeNS(name[2], qualifiedName, + value) + else: + self.element.setAttribute( + name, value) + attributes = property(getAttributes, setAttributes) + + def cloneNode(self): + return NodeBuilder(self.element.cloneNode(False)) + + def hasContent(self): + return self.element.hasChildNodes() + + def getNameTuple(self): + if self.namespace is None: + return namespaces["html"], self.name + else: + return self.namespace, self.name + + nameTuple = property(getNameTuple) + + class TreeBuilder(base.TreeBuilder): # pylint:disable=unused-variable + def documentClass(self): + self.dom = Dom.getDOMImplementation().createDocument(None, None, None) + return weakref.proxy(self) + + def insertDoctype(self, token): + name = token["name"] + publicId = token["publicId"] + systemId = token["systemId"] + + domimpl = Dom.getDOMImplementation() + doctype = domimpl.createDocumentType(name, publicId, systemId) + self.document.appendChild(NodeBuilder(doctype)) + if Dom == minidom: + doctype.ownerDocument = self.dom + + def elementClass(self, name, namespace=None): + if namespace is None and self.defaultNamespace is None: + node = self.dom.createElement(name) + else: + node = self.dom.createElementNS(namespace, name) + + return NodeBuilder(node) + + def commentClass(self, data): + return NodeBuilder(self.dom.createComment(data)) + + def fragmentClass(self): + return NodeBuilder(self.dom.createDocumentFragment()) + + def appendChild(self, node): + self.dom.appendChild(node.element) + + def testSerializer(self, element): + return testSerializer(element) + + def getDocument(self): + return self.dom + + def getFragment(self): + return base.TreeBuilder.getFragment(self).element + + def insertText(self, data, parent=None): + data = data + if parent != self: + base.TreeBuilder.insertText(self, data, parent) + else: + # HACK: allow text nodes as children of the document node + if hasattr(self.dom, '_child_node_types'): + # pylint:disable=protected-access + if Node.TEXT_NODE not in self.dom._child_node_types: + self.dom._child_node_types = list(self.dom._child_node_types) + self.dom._child_node_types.append(Node.TEXT_NODE) + self.dom.appendChild(self.dom.createTextNode(data)) + + implementation = DomImplementation + name = None + + def testSerializer(element): + element.normalize() + rv = [] + + def serializeElement(element, indent=0): + if element.nodeType == Node.DOCUMENT_TYPE_NODE: + if element.name: + if element.publicId or element.systemId: + publicId = element.publicId or "" + systemId = element.systemId or "" + rv.append("""|%s<!DOCTYPE %s "%s" "%s">""" % + (' ' * indent, element.name, publicId, systemId)) + else: + rv.append("|%s<!DOCTYPE %s>" % (' ' * indent, element.name)) + else: + rv.append("|%s<!DOCTYPE >" % (' ' * indent,)) + elif element.nodeType == Node.DOCUMENT_NODE: + rv.append("#document") + elif element.nodeType == Node.DOCUMENT_FRAGMENT_NODE: + rv.append("#document-fragment") + elif element.nodeType == Node.COMMENT_NODE: + rv.append("|%s<!-- %s -->" % (' ' * indent, element.nodeValue)) + elif element.nodeType == Node.TEXT_NODE: + rv.append("|%s\"%s\"" % (' ' * indent, element.nodeValue)) + else: + if (hasattr(element, "namespaceURI") and + element.namespaceURI is not None): + name = "%s %s" % (constants.prefixes[element.namespaceURI], + element.nodeName) + else: + name = element.nodeName + rv.append("|%s<%s>" % (' ' * indent, name)) + if element.hasAttributes(): + attributes = [] + for i in range(len(element.attributes)): + attr = element.attributes.item(i) + name = attr.nodeName + value = attr.value + ns = attr.namespaceURI + if ns: + name = "%s %s" % (constants.prefixes[ns], attr.localName) + else: + name = attr.nodeName + attributes.append((name, value)) + + for name, value in sorted(attributes): + rv.append('|%s%s="%s"' % (' ' * (indent + 2), name, value)) + indent += 2 + for child in element.childNodes: + serializeElement(child, indent) + serializeElement(element, 0) + + return "\n".join(rv) + + return locals() + + +# The actual means to get a module! +getDomModule = moduleFactoryFactory(getDomBuilder) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treebuilders/etree.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treebuilders/etree.py new file mode 100644 index 00000000..0dedf441 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treebuilders/etree.py @@ -0,0 +1,340 @@ +from __future__ import absolute_import, division, unicode_literals +# pylint:disable=protected-access + +from pip._vendor.six import text_type + +import re + +from . import base +from .. import _ihatexml +from .. import constants +from ..constants import namespaces +from .._utils import moduleFactoryFactory + +tag_regexp = re.compile("{([^}]*)}(.*)") + + +def getETreeBuilder(ElementTreeImplementation, fullTree=False): + ElementTree = ElementTreeImplementation + ElementTreeCommentType = ElementTree.Comment("asd").tag + + class Element(base.Node): + def __init__(self, name, namespace=None): + self._name = name + self._namespace = namespace + self._element = ElementTree.Element(self._getETreeTag(name, + namespace)) + if namespace is None: + self.nameTuple = namespaces["html"], self._name + else: + self.nameTuple = self._namespace, self._name + self.parent = None + self._childNodes = [] + self._flags = [] + + def _getETreeTag(self, name, namespace): + if namespace is None: + etree_tag = name + else: + etree_tag = "{%s}%s" % (namespace, name) + return etree_tag + + def _setName(self, name): + self._name = name + self._element.tag = self._getETreeTag(self._name, self._namespace) + + def _getName(self): + return self._name + + name = property(_getName, _setName) + + def _setNamespace(self, namespace): + self._namespace = namespace + self._element.tag = self._getETreeTag(self._name, self._namespace) + + def _getNamespace(self): + return self._namespace + + namespace = property(_getNamespace, _setNamespace) + + def _getAttributes(self): + return self._element.attrib + + def _setAttributes(self, attributes): + # Delete existing attributes first + # XXX - there may be a better way to do this... + for key in list(self._element.attrib.keys()): + del self._element.attrib[key] + for key, value in attributes.items(): + if isinstance(key, tuple): + name = "{%s}%s" % (key[2], key[1]) + else: + name = key + self._element.set(name, value) + + attributes = property(_getAttributes, _setAttributes) + + def _getChildNodes(self): + return self._childNodes + + def _setChildNodes(self, value): + del self._element[:] + self._childNodes = [] + for element in value: + self.insertChild(element) + + childNodes = property(_getChildNodes, _setChildNodes) + + def hasContent(self): + """Return true if the node has children or text""" + return bool(self._element.text or len(self._element)) + + def appendChild(self, node): + self._childNodes.append(node) + self._element.append(node._element) + node.parent = self + + def insertBefore(self, node, refNode): + index = list(self._element).index(refNode._element) + self._element.insert(index, node._element) + node.parent = self + + def removeChild(self, node): + self._childNodes.remove(node) + self._element.remove(node._element) + node.parent = None + + def insertText(self, data, insertBefore=None): + if not(len(self._element)): + if not self._element.text: + self._element.text = "" + self._element.text += data + elif insertBefore is None: + # Insert the text as the tail of the last child element + if not self._element[-1].tail: + self._element[-1].tail = "" + self._element[-1].tail += data + else: + # Insert the text before the specified node + children = list(self._element) + index = children.index(insertBefore._element) + if index > 0: + if not self._element[index - 1].tail: + self._element[index - 1].tail = "" + self._element[index - 1].tail += data + else: + if not self._element.text: + self._element.text = "" + self._element.text += data + + def cloneNode(self): + element = type(self)(self.name, self.namespace) + for name, value in self.attributes.items(): + element.attributes[name] = value + return element + + def reparentChildren(self, newParent): + if newParent.childNodes: + newParent.childNodes[-1]._element.tail += self._element.text + else: + if not newParent._element.text: + newParent._element.text = "" + if self._element.text is not None: + newParent._element.text += self._element.text + self._element.text = "" + base.Node.reparentChildren(self, newParent) + + class Comment(Element): + def __init__(self, data): + # Use the superclass constructor to set all properties on the + # wrapper element + self._element = ElementTree.Comment(data) + self.parent = None + self._childNodes = [] + self._flags = [] + + def _getData(self): + return self._element.text + + def _setData(self, value): + self._element.text = value + + data = property(_getData, _setData) + + class DocumentType(Element): + def __init__(self, name, publicId, systemId): + Element.__init__(self, "<!DOCTYPE>") + self._element.text = name + self.publicId = publicId + self.systemId = systemId + + def _getPublicId(self): + return self._element.get("publicId", "") + + def _setPublicId(self, value): + if value is not None: + self._element.set("publicId", value) + + publicId = property(_getPublicId, _setPublicId) + + def _getSystemId(self): + return self._element.get("systemId", "") + + def _setSystemId(self, value): + if value is not None: + self._element.set("systemId", value) + + systemId = property(_getSystemId, _setSystemId) + + class Document(Element): + def __init__(self): + Element.__init__(self, "DOCUMENT_ROOT") + + class DocumentFragment(Element): + def __init__(self): + Element.__init__(self, "DOCUMENT_FRAGMENT") + + def testSerializer(element): + rv = [] + + def serializeElement(element, indent=0): + if not(hasattr(element, "tag")): + element = element.getroot() + if element.tag == "<!DOCTYPE>": + if element.get("publicId") or element.get("systemId"): + publicId = element.get("publicId") or "" + systemId = element.get("systemId") or "" + rv.append("""<!DOCTYPE %s "%s" "%s">""" % + (element.text, publicId, systemId)) + else: + rv.append("<!DOCTYPE %s>" % (element.text,)) + elif element.tag == "DOCUMENT_ROOT": + rv.append("#document") + if element.text is not None: + rv.append("|%s\"%s\"" % (' ' * (indent + 2), element.text)) + if element.tail is not None: + raise TypeError("Document node cannot have tail") + if hasattr(element, "attrib") and len(element.attrib): + raise TypeError("Document node cannot have attributes") + elif element.tag == ElementTreeCommentType: + rv.append("|%s<!-- %s -->" % (' ' * indent, element.text)) + else: + assert isinstance(element.tag, text_type), \ + "Expected unicode, got %s, %s" % (type(element.tag), element.tag) + nsmatch = tag_regexp.match(element.tag) + + if nsmatch is None: + name = element.tag + else: + ns, name = nsmatch.groups() + prefix = constants.prefixes[ns] + name = "%s %s" % (prefix, name) + rv.append("|%s<%s>" % (' ' * indent, name)) + + if hasattr(element, "attrib"): + attributes = [] + for name, value in element.attrib.items(): + nsmatch = tag_regexp.match(name) + if nsmatch is not None: + ns, name = nsmatch.groups() + prefix = constants.prefixes[ns] + attr_string = "%s %s" % (prefix, name) + else: + attr_string = name + attributes.append((attr_string, value)) + + for name, value in sorted(attributes): + rv.append('|%s%s="%s"' % (' ' * (indent + 2), name, value)) + if element.text: + rv.append("|%s\"%s\"" % (' ' * (indent + 2), element.text)) + indent += 2 + for child in element: + serializeElement(child, indent) + if element.tail: + rv.append("|%s\"%s\"" % (' ' * (indent - 2), element.tail)) + serializeElement(element, 0) + + return "\n".join(rv) + + def tostring(element): # pylint:disable=unused-variable + """Serialize an element and its child nodes to a string""" + rv = [] + filter = _ihatexml.InfosetFilter() + + def serializeElement(element): + if isinstance(element, ElementTree.ElementTree): + element = element.getroot() + + if element.tag == "<!DOCTYPE>": + if element.get("publicId") or element.get("systemId"): + publicId = element.get("publicId") or "" + systemId = element.get("systemId") or "" + rv.append("""<!DOCTYPE %s PUBLIC "%s" "%s">""" % + (element.text, publicId, systemId)) + else: + rv.append("<!DOCTYPE %s>" % (element.text,)) + elif element.tag == "DOCUMENT_ROOT": + if element.text is not None: + rv.append(element.text) + if element.tail is not None: + raise TypeError("Document node cannot have tail") + if hasattr(element, "attrib") and len(element.attrib): + raise TypeError("Document node cannot have attributes") + + for child in element: + serializeElement(child) + + elif element.tag == ElementTreeCommentType: + rv.append("<!--%s-->" % (element.text,)) + else: + # This is assumed to be an ordinary element + if not element.attrib: + rv.append("<%s>" % (filter.fromXmlName(element.tag),)) + else: + attr = " ".join(["%s=\"%s\"" % ( + filter.fromXmlName(name), value) + for name, value in element.attrib.items()]) + rv.append("<%s %s>" % (element.tag, attr)) + if element.text: + rv.append(element.text) + + for child in element: + serializeElement(child) + + rv.append("</%s>" % (element.tag,)) + + if element.tail: + rv.append(element.tail) + + serializeElement(element) + + return "".join(rv) + + class TreeBuilder(base.TreeBuilder): # pylint:disable=unused-variable + documentClass = Document + doctypeClass = DocumentType + elementClass = Element + commentClass = Comment + fragmentClass = DocumentFragment + implementation = ElementTreeImplementation + + def testSerializer(self, element): + return testSerializer(element) + + def getDocument(self): + if fullTree: + return self.document._element + else: + if self.defaultNamespace is not None: + return self.document._element.find( + "{%s}html" % self.defaultNamespace) + else: + return self.document._element.find("html") + + def getFragment(self): + return base.TreeBuilder.getFragment(self)._element + + return locals() + + +getETreeModule = moduleFactoryFactory(getETreeBuilder) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treebuilders/etree_lxml.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treebuilders/etree_lxml.py new file mode 100644 index 00000000..ca12a99c --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treebuilders/etree_lxml.py @@ -0,0 +1,366 @@ +"""Module for supporting the lxml.etree library. The idea here is to use as much +of the native library as possible, without using fragile hacks like custom element +names that break between releases. The downside of this is that we cannot represent +all possible trees; specifically the following are known to cause problems: + +Text or comments as siblings of the root element +Docypes with no name + +When any of these things occur, we emit a DataLossWarning +""" + +from __future__ import absolute_import, division, unicode_literals +# pylint:disable=protected-access + +import warnings +import re +import sys + +from . import base +from ..constants import DataLossWarning +from .. import constants +from . import etree as etree_builders +from .. import _ihatexml + +import lxml.etree as etree + + +fullTree = True +tag_regexp = re.compile("{([^}]*)}(.*)") + +comment_type = etree.Comment("asd").tag + + +class DocumentType(object): + def __init__(self, name, publicId, systemId): + self.name = name + self.publicId = publicId + self.systemId = systemId + + +class Document(object): + def __init__(self): + self._elementTree = None + self._childNodes = [] + + def appendChild(self, element): + self._elementTree.getroot().addnext(element._element) + + def _getChildNodes(self): + return self._childNodes + + childNodes = property(_getChildNodes) + + +def testSerializer(element): + rv = [] + infosetFilter = _ihatexml.InfosetFilter(preventDoubleDashComments=True) + + def serializeElement(element, indent=0): + if not hasattr(element, "tag"): + if hasattr(element, "getroot"): + # Full tree case + rv.append("#document") + if element.docinfo.internalDTD: + if not (element.docinfo.public_id or + element.docinfo.system_url): + dtd_str = "<!DOCTYPE %s>" % element.docinfo.root_name + else: + dtd_str = """<!DOCTYPE %s "%s" "%s">""" % ( + element.docinfo.root_name, + element.docinfo.public_id, + element.docinfo.system_url) + rv.append("|%s%s" % (' ' * (indent + 2), dtd_str)) + next_element = element.getroot() + while next_element.getprevious() is not None: + next_element = next_element.getprevious() + while next_element is not None: + serializeElement(next_element, indent + 2) + next_element = next_element.getnext() + elif isinstance(element, str) or isinstance(element, bytes): + # Text in a fragment + assert isinstance(element, str) or sys.version_info[0] == 2 + rv.append("|%s\"%s\"" % (' ' * indent, element)) + else: + # Fragment case + rv.append("#document-fragment") + for next_element in element: + serializeElement(next_element, indent + 2) + elif element.tag == comment_type: + rv.append("|%s<!-- %s -->" % (' ' * indent, element.text)) + if hasattr(element, "tail") and element.tail: + rv.append("|%s\"%s\"" % (' ' * indent, element.tail)) + else: + assert isinstance(element, etree._Element) + nsmatch = etree_builders.tag_regexp.match(element.tag) + if nsmatch is not None: + ns = nsmatch.group(1) + tag = nsmatch.group(2) + prefix = constants.prefixes[ns] + rv.append("|%s<%s %s>" % (' ' * indent, prefix, + infosetFilter.fromXmlName(tag))) + else: + rv.append("|%s<%s>" % (' ' * indent, + infosetFilter.fromXmlName(element.tag))) + + if hasattr(element, "attrib"): + attributes = [] + for name, value in element.attrib.items(): + nsmatch = tag_regexp.match(name) + if nsmatch is not None: + ns, name = nsmatch.groups() + name = infosetFilter.fromXmlName(name) + prefix = constants.prefixes[ns] + attr_string = "%s %s" % (prefix, name) + else: + attr_string = infosetFilter.fromXmlName(name) + attributes.append((attr_string, value)) + + for name, value in sorted(attributes): + rv.append('|%s%s="%s"' % (' ' * (indent + 2), name, value)) + + if element.text: + rv.append("|%s\"%s\"" % (' ' * (indent + 2), element.text)) + indent += 2 + for child in element: + serializeElement(child, indent) + if hasattr(element, "tail") and element.tail: + rv.append("|%s\"%s\"" % (' ' * (indent - 2), element.tail)) + serializeElement(element, 0) + + return "\n".join(rv) + + +def tostring(element): + """Serialize an element and its child nodes to a string""" + rv = [] + + def serializeElement(element): + if not hasattr(element, "tag"): + if element.docinfo.internalDTD: + if element.docinfo.doctype: + dtd_str = element.docinfo.doctype + else: + dtd_str = "<!DOCTYPE %s>" % element.docinfo.root_name + rv.append(dtd_str) + serializeElement(element.getroot()) + + elif element.tag == comment_type: + rv.append("<!--%s-->" % (element.text,)) + + else: + # This is assumed to be an ordinary element + if not element.attrib: + rv.append("<%s>" % (element.tag,)) + else: + attr = " ".join(["%s=\"%s\"" % (name, value) + for name, value in element.attrib.items()]) + rv.append("<%s %s>" % (element.tag, attr)) + if element.text: + rv.append(element.text) + + for child in element: + serializeElement(child) + + rv.append("</%s>" % (element.tag,)) + + if hasattr(element, "tail") and element.tail: + rv.append(element.tail) + + serializeElement(element) + + return "".join(rv) + + +class TreeBuilder(base.TreeBuilder): + documentClass = Document + doctypeClass = DocumentType + elementClass = None + commentClass = None + fragmentClass = Document + implementation = etree + + def __init__(self, namespaceHTMLElements, fullTree=False): + builder = etree_builders.getETreeModule(etree, fullTree=fullTree) + infosetFilter = self.infosetFilter = _ihatexml.InfosetFilter(preventDoubleDashComments=True) + self.namespaceHTMLElements = namespaceHTMLElements + + class Attributes(dict): + def __init__(self, element, value=None): + if value is None: + value = {} + self._element = element + dict.__init__(self, value) # pylint:disable=non-parent-init-called + for key, value in self.items(): + if isinstance(key, tuple): + name = "{%s}%s" % (key[2], infosetFilter.coerceAttribute(key[1])) + else: + name = infosetFilter.coerceAttribute(key) + self._element._element.attrib[name] = value + + def __setitem__(self, key, value): + dict.__setitem__(self, key, value) + if isinstance(key, tuple): + name = "{%s}%s" % (key[2], infosetFilter.coerceAttribute(key[1])) + else: + name = infosetFilter.coerceAttribute(key) + self._element._element.attrib[name] = value + + class Element(builder.Element): + def __init__(self, name, namespace): + name = infosetFilter.coerceElement(name) + builder.Element.__init__(self, name, namespace=namespace) + self._attributes = Attributes(self) + + def _setName(self, name): + self._name = infosetFilter.coerceElement(name) + self._element.tag = self._getETreeTag( + self._name, self._namespace) + + def _getName(self): + return infosetFilter.fromXmlName(self._name) + + name = property(_getName, _setName) + + def _getAttributes(self): + return self._attributes + + def _setAttributes(self, attributes): + self._attributes = Attributes(self, attributes) + + attributes = property(_getAttributes, _setAttributes) + + def insertText(self, data, insertBefore=None): + data = infosetFilter.coerceCharacters(data) + builder.Element.insertText(self, data, insertBefore) + + def appendChild(self, child): + builder.Element.appendChild(self, child) + + class Comment(builder.Comment): + def __init__(self, data): + data = infosetFilter.coerceComment(data) + builder.Comment.__init__(self, data) + + def _setData(self, data): + data = infosetFilter.coerceComment(data) + self._element.text = data + + def _getData(self): + return self._element.text + + data = property(_getData, _setData) + + self.elementClass = Element + self.commentClass = Comment + # self.fragmentClass = builder.DocumentFragment + base.TreeBuilder.__init__(self, namespaceHTMLElements) + + def reset(self): + base.TreeBuilder.reset(self) + self.insertComment = self.insertCommentInitial + self.initial_comments = [] + self.doctype = None + + def testSerializer(self, element): + return testSerializer(element) + + def getDocument(self): + if fullTree: + return self.document._elementTree + else: + return self.document._elementTree.getroot() + + def getFragment(self): + fragment = [] + element = self.openElements[0]._element + if element.text: + fragment.append(element.text) + fragment.extend(list(element)) + if element.tail: + fragment.append(element.tail) + return fragment + + def insertDoctype(self, token): + name = token["name"] + publicId = token["publicId"] + systemId = token["systemId"] + + if not name: + warnings.warn("lxml cannot represent empty doctype", DataLossWarning) + self.doctype = None + else: + coercedName = self.infosetFilter.coerceElement(name) + if coercedName != name: + warnings.warn("lxml cannot represent non-xml doctype", DataLossWarning) + + doctype = self.doctypeClass(coercedName, publicId, systemId) + self.doctype = doctype + + def insertCommentInitial(self, data, parent=None): + assert parent is None or parent is self.document + assert self.document._elementTree is None + self.initial_comments.append(data) + + def insertCommentMain(self, data, parent=None): + if (parent == self.document and + self.document._elementTree.getroot()[-1].tag == comment_type): + warnings.warn("lxml cannot represent adjacent comments beyond the root elements", DataLossWarning) + super(TreeBuilder, self).insertComment(data, parent) + + def insertRoot(self, token): + # Because of the way libxml2 works, it doesn't seem to be possible to + # alter information like the doctype after the tree has been parsed. + # Therefore we need to use the built-in parser to create our initial + # tree, after which we can add elements like normal + docStr = "" + if self.doctype: + assert self.doctype.name + docStr += "<!DOCTYPE %s" % self.doctype.name + if (self.doctype.publicId is not None or + self.doctype.systemId is not None): + docStr += (' PUBLIC "%s" ' % + (self.infosetFilter.coercePubid(self.doctype.publicId or ""))) + if self.doctype.systemId: + sysid = self.doctype.systemId + if sysid.find("'") >= 0 and sysid.find('"') >= 0: + warnings.warn("DOCTYPE system cannot contain single and double quotes", DataLossWarning) + sysid = sysid.replace("'", 'U00027') + if sysid.find("'") >= 0: + docStr += '"%s"' % sysid + else: + docStr += "'%s'" % sysid + else: + docStr += "''" + docStr += ">" + if self.doctype.name != token["name"]: + warnings.warn("lxml cannot represent doctype with a different name to the root element", DataLossWarning) + docStr += "<THIS_SHOULD_NEVER_APPEAR_PUBLICLY/>" + root = etree.fromstring(docStr) + + # Append the initial comments: + for comment_token in self.initial_comments: + comment = self.commentClass(comment_token["data"]) + root.addprevious(comment._element) + + # Create the root document and add the ElementTree to it + self.document = self.documentClass() + self.document._elementTree = root.getroottree() + + # Give the root element the right name + name = token["name"] + namespace = token.get("namespace", self.defaultNamespace) + if namespace is None: + etree_tag = name + else: + etree_tag = "{%s}%s" % (namespace, name) + root.tag = etree_tag + + # Add the root element to the internal child/open data structures + root_element = self.elementClass(name, namespace) + root_element._element = root + self.document._childNodes.append(root_element) + self.openElements.append(root_element) + + # Reset to the default insert comment function + self.insertComment = self.insertCommentMain diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treewalkers/__init__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treewalkers/__init__.py new file mode 100644 index 00000000..9bec2076 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treewalkers/__init__.py @@ -0,0 +1,154 @@ +"""A collection of modules for iterating through different kinds of +tree, generating tokens identical to those produced by the tokenizer +module. + +To create a tree walker for a new type of tree, you need to do +implement a tree walker object (called TreeWalker by convention) that +implements a 'serialize' method taking a tree as sole argument and +returning an iterator generating tokens. +""" + +from __future__ import absolute_import, division, unicode_literals + +from .. import constants +from .._utils import default_etree + +__all__ = ["getTreeWalker", "pprint"] + +treeWalkerCache = {} + + +def getTreeWalker(treeType, implementation=None, **kwargs): + """Get a TreeWalker class for various types of tree with built-in support + + :arg str treeType: the name of the tree type required (case-insensitive). + Supported values are: + + * "dom": The xml.dom.minidom DOM implementation + * "etree": A generic walker for tree implementations exposing an + elementtree-like interface (known to work with ElementTree, + cElementTree and lxml.etree). + * "lxml": Optimized walker for lxml.etree + * "genshi": a Genshi stream + + :arg implementation: A module implementing the tree type e.g. + xml.etree.ElementTree or cElementTree (Currently applies to the "etree" + tree type only). + + :arg kwargs: keyword arguments passed to the etree walker--for other + walkers, this has no effect + + :returns: a TreeWalker class + + """ + + treeType = treeType.lower() + if treeType not in treeWalkerCache: + if treeType == "dom": + from . import dom + treeWalkerCache[treeType] = dom.TreeWalker + elif treeType == "genshi": + from . import genshi + treeWalkerCache[treeType] = genshi.TreeWalker + elif treeType == "lxml": + from . import etree_lxml + treeWalkerCache[treeType] = etree_lxml.TreeWalker + elif treeType == "etree": + from . import etree + if implementation is None: + implementation = default_etree + # XXX: NEVER cache here, caching is done in the etree submodule + return etree.getETreeModule(implementation, **kwargs).TreeWalker + return treeWalkerCache.get(treeType) + + +def concatenateCharacterTokens(tokens): + pendingCharacters = [] + for token in tokens: + type = token["type"] + if type in ("Characters", "SpaceCharacters"): + pendingCharacters.append(token["data"]) + else: + if pendingCharacters: + yield {"type": "Characters", "data": "".join(pendingCharacters)} + pendingCharacters = [] + yield token + if pendingCharacters: + yield {"type": "Characters", "data": "".join(pendingCharacters)} + + +def pprint(walker): + """Pretty printer for tree walkers + + Takes a TreeWalker instance and pretty prints the output of walking the tree. + + :arg walker: a TreeWalker instance + + """ + output = [] + indent = 0 + for token in concatenateCharacterTokens(walker): + type = token["type"] + if type in ("StartTag", "EmptyTag"): + # tag name + if token["namespace"] and token["namespace"] != constants.namespaces["html"]: + if token["namespace"] in constants.prefixes: + ns = constants.prefixes[token["namespace"]] + else: + ns = token["namespace"] + name = "%s %s" % (ns, token["name"]) + else: + name = token["name"] + output.append("%s<%s>" % (" " * indent, name)) + indent += 2 + # attributes (sorted for consistent ordering) + attrs = token["data"] + for (namespace, localname), value in sorted(attrs.items()): + if namespace: + if namespace in constants.prefixes: + ns = constants.prefixes[namespace] + else: + ns = namespace + name = "%s %s" % (ns, localname) + else: + name = localname + output.append("%s%s=\"%s\"" % (" " * indent, name, value)) + # self-closing + if type == "EmptyTag": + indent -= 2 + + elif type == "EndTag": + indent -= 2 + + elif type == "Comment": + output.append("%s<!-- %s -->" % (" " * indent, token["data"])) + + elif type == "Doctype": + if token["name"]: + if token["publicId"]: + output.append("""%s<!DOCTYPE %s "%s" "%s">""" % + (" " * indent, + token["name"], + token["publicId"], + token["systemId"] if token["systemId"] else "")) + elif token["systemId"]: + output.append("""%s<!DOCTYPE %s "" "%s">""" % + (" " * indent, + token["name"], + token["systemId"])) + else: + output.append("%s<!DOCTYPE %s>" % (" " * indent, + token["name"])) + else: + output.append("%s<!DOCTYPE >" % (" " * indent,)) + + elif type == "Characters": + output.append("%s\"%s\"" % (" " * indent, token["data"])) + + elif type == "SpaceCharacters": + assert False, "concatenateCharacterTokens should have got rid of all Space tokens" + + else: + raise ValueError("Unknown token type, %s" % type) + + return "\n".join(output) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treewalkers/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treewalkers/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4b114a0dff001ad215a99185cbca742b2aca6440 GIT binary patch literal 3958 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treewalkers/__pycache__/base.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treewalkers/__pycache__/base.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f4bec4b6046085526f3afc20cf104b9bb944e434 GIT binary patch literal 6946 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 RDb<9&vLE!O&wN*T@;_zbu2TR2 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treewalkers/__pycache__/dom.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treewalkers/__pycache__/dom.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..91d63d0d3acf8f139c17391dba05d19b8052896d GIT binary patch literal 1673 zcma)6UvCpf5Z}E&zO%6*1UDpvN`0tQ8I>5ds?-OBNNt1CmNSZ-rmRX&XYZPvv*&Ym z@6rT?C)0kHzVx9VqaR^k+ZW#Z)Thpzi5(C^oHTQ@GqW?lot@b)YqiQxe{4Pd)g|O_ za^Z78z7M3o0mccZk|dPT#9~%rGn=B$l1}0>7i60|vXpqtqvRpsE-$?#yd=D_KeJhx zdp*+dUqKwwu+5cdpi`M=B8-!1sxssA_&C;aIx#ExBp#+*gfh;AillB(;{>31MR6}I z29Xv+40QfkAlwJip92$wQBIh}DYsq{W+N>4J99wH<sSE8UE*Z`R56vl5@J7+he8c8 z4t{uSC<SQ&>3@Np(J{&B*gCY-Cz(BVVC@2xfV`2@JGcAbQyy7|C3O$HDqy`dvKH1V z?EW(*FRYVqvl`egkFU(gjJC<suV2`(UOBU86eN3mRs9Bh^~^#U=-SA-OOAe?>o|eG zJJ;+J$Ww>CSAjkPe>z^9k&(N|c^z{81wQLwxrk*0klrYe{sY#{5$$25o8UzdF(*(P z8Z<s;{sb!DKb;DN1!1f0ZfoyRC+LU$CyzT}&~0~=hXxM}s4~tZN`&#J`9Q|Q9d3Mm zsxy)7a8~Yje(V=p*lMf2-QNy-omPLR8_abMnpqk1{Se7quxjV~PLT?;7)QoBGnFXI zR6Kyj(Z)Fxr<$!i6WR8;65E7T5rLjYL$SBJW8C8+SXrjSNCseG-s`xgI9s8r9Ynfy z5KE2$G^@6{kCvIe*DF?A93By|wZ-zm?)JllKl9J^#@h?N3%dJ3!!eE)as<VJ_{POU z0Dk=aPSka%-+!%UmQ0(|czSz~1CHBwjt&Otoi8}53JQ<Kgr}-`kR|df84sEn^zAQ2 z-|8k$ldb8gxeT?y6SPGZ#Zs3cu>KSnp;cP9R%z9$Qis-Qg_dAl2Q6x<VDate8_Pl1 zdNa;qE^t0@2#dKWfq?xo?-a@^qgd&zsA9uX*TAak$nbb`whof1LF@+$PeiASv7^t| z-vqF9`mp?$CgLRP#n5(>XYT`06lv-D*#!h|mtg7jVGt_QNQp^t1@A+EC3w8>ymbM< zTP0XJ1r5*mVThd_hNcpRNy>AHay1N(@<`4tY6F6)8^|`1-9)y$fI`AsP(CmuT?o|Q z^ljfRv;n?}VK~aOTtR$=m!oWC_$nIjB#~RtZpCw8$b9(Mf^@PghPl%5u~^<>5$|2; TjemEJ{~mUe#!jkR(2Dl|#_*s{ literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treewalkers/__pycache__/etree.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treewalkers/__pycache__/etree.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d35a5b8863319f7197e04b698e22c9d7184f662f GIT binary patch literal 3515 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 F{{ikhg_-~W literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treewalkers/__pycache__/etree_lxml.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treewalkers/__pycache__/etree_lxml.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..de6eb30f9de2aaaf308248dd041fede2ca6e4da7 GIT binary patch literal 6608 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 N<rm7Oa<2UH{{h_4Rww`f literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treewalkers/__pycache__/genshi.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treewalkers/__pycache__/genshi.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5be538e191ed84811f72948527bdeaf4d07b175a GIT binary patch literal 1847 zcmZ`(OK;mo5Z+x<Bt=oOtjJE>rVsQGKtK{3eW8aSh+(Tmi&}YDh|@&^me$e<Ek5Ms z%5eg+D4?8!{DdBQ>7}QjKcPQjuRZzFA5auUXUI4Wik8IA?#}buotgcp-FEN)eDy)2 zNyu;Hjn9Pj4H)@zAc6=QlZ0}bFwPQ#8x(mgHj@T#RBHp)7Pk_c+lj-Sq{*9!%iT(5 zf~>_`iO0R9&D%+bcakN(lyrF)<PBlP%Sn&-U~LO0K9}@)KUv``lzc%%Q@GEFaKql= z>cZfwqP0r~-YH-r14Azb`*{}6Rp>{_ER#w*B07%pC`)yBo<@^Qgnk^UPzG^6pt^B; z6eQuGp&Ps7%{yal3`g6#eQ)P$f3&$X+`YBAHPrU@&8_h_w}#pr5ATf!mUb##f3&MD zP{+AdbGEiO$D6u|%zDXgeW~rOn>#zh(fE`iLaNREAP-L&ZkYCtvq%i%FbPwYYc~Zj z`7D@(`2^2%_M!3(82LpYA>mXI&IA?g8R3R7gbA}L8gLJmcE>Ud_kwsD$_Ylq4>N}Y zo#q0FASFHdv>=CMn>@H&vI0C#oATq6w}3|rTCfEJiCY?lahFhXbZL(itfWUC%(d>f zXS#y?OZUzm_y;U>1P3$~z|oe<reT^7Ol{_2e4w3~43DF1p6f<<3`f_EO5rCW-vM-g ze7>%d+4?M+UD=;UvAD8v^k_fZ_)s9L8a^0_Os+ptN&HD1?XP2$$JL?p^@kAYQFL|o zL_5BZsrLOg9=r#HFq3-Jp*`wS$H4jNxqmL~>Y4t;KwbDcFdP`w&3zB|S<w4NX_RK! zC=5lWO#WJ!_gQI`c3~aT(gDiKW<*N&<g>ztJKO+itMrsnw3NAEa$I<YTeJ=t40^z> zk)sXd2vW4_9o%qJH3VHl?=K5SSyM~CJoySTV;9ZB0c+-w*$)L1Y>g;qYE)}ujTF|@ zSeRAb+C{s{+mCxB?Sf^qwp>)%On(9F4tW2oFe}U^VtyUf$bYY*+VW4ZbkTCb&|CT) z*tMqY1(mBH@d|T6EB*oS+ZF%%2?t3BC4j>#U*UK`k1hj}>!7z(>D>jbZeczrmHj2) zFRLZhQ|DA)t*F%ldul<HS?Yn_`NF8<R8?h;w25h#Sln_M$l!vsVA9Pvn*=eokZ!(i zB<(`;r@0E!Nhlj=vVx=!ggap}Q%}ahLuprA(2@$a+Jfprb{E*%o@5EOr*v^=s_;Zf zcp5<<vWa>!3ndnaY$5TGV6jOo9JvHU+w*jqW{=ZBN3J3BZDg7$xY6b`N`*E>paM;O zZK&WOw*#eQw4Z|toJ4*A+I)GErN^OEq43Y7bgJpG#P^_TnVP(d+Y3N2Mt%bb!8(WE zg5RVa*!5VK^`QrP@O!MsYFVFlnM*q`x)sG$hce^o@*CYzH}MEwOK2=a=lk0A{Uj6f z7}uWfAI<9w_`ZA(qE}$v0Epc!E0n9S!rRL6T>^w1iJZ~kJbFBstGNV^5+6Q^y(m$Q zw_dgOB$Ka_iHWbWS0@4UQswD?(^2P?NPG-*6YdpDL*-RL)TMzq{tL2puGJ^Kj+K`q P_&)RKMfyJTSl9R)afP|G literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treewalkers/base.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treewalkers/base.py new file mode 100644 index 00000000..80c474c4 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treewalkers/base.py @@ -0,0 +1,252 @@ +from __future__ import absolute_import, division, unicode_literals + +from xml.dom import Node +from ..constants import namespaces, voidElements, spaceCharacters + +__all__ = ["DOCUMENT", "DOCTYPE", "TEXT", "ELEMENT", "COMMENT", "ENTITY", "UNKNOWN", + "TreeWalker", "NonRecursiveTreeWalker"] + +DOCUMENT = Node.DOCUMENT_NODE +DOCTYPE = Node.DOCUMENT_TYPE_NODE +TEXT = Node.TEXT_NODE +ELEMENT = Node.ELEMENT_NODE +COMMENT = Node.COMMENT_NODE +ENTITY = Node.ENTITY_NODE +UNKNOWN = "<#UNKNOWN#>" + +spaceCharacters = "".join(spaceCharacters) + + +class TreeWalker(object): + """Walks a tree yielding tokens + + Tokens are dicts that all have a ``type`` field specifying the type of the + token. + + """ + def __init__(self, tree): + """Creates a TreeWalker + + :arg tree: the tree to walk + + """ + self.tree = tree + + def __iter__(self): + raise NotImplementedError + + def error(self, msg): + """Generates an error token with the given message + + :arg msg: the error message + + :returns: SerializeError token + + """ + return {"type": "SerializeError", "data": msg} + + def emptyTag(self, namespace, name, attrs, hasChildren=False): + """Generates an EmptyTag token + + :arg namespace: the namespace of the token--can be ``None`` + + :arg name: the name of the element + + :arg attrs: the attributes of the element as a dict + + :arg hasChildren: whether or not to yield a SerializationError because + this tag shouldn't have children + + :returns: EmptyTag token + + """ + yield {"type": "EmptyTag", "name": name, + "namespace": namespace, + "data": attrs} + if hasChildren: + yield self.error("Void element has children") + + def startTag(self, namespace, name, attrs): + """Generates a StartTag token + + :arg namespace: the namespace of the token--can be ``None`` + + :arg name: the name of the element + + :arg attrs: the attributes of the element as a dict + + :returns: StartTag token + + """ + return {"type": "StartTag", + "name": name, + "namespace": namespace, + "data": attrs} + + def endTag(self, namespace, name): + """Generates an EndTag token + + :arg namespace: the namespace of the token--can be ``None`` + + :arg name: the name of the element + + :returns: EndTag token + + """ + return {"type": "EndTag", + "name": name, + "namespace": namespace} + + def text(self, data): + """Generates SpaceCharacters and Characters tokens + + Depending on what's in the data, this generates one or more + ``SpaceCharacters`` and ``Characters`` tokens. + + For example: + + >>> from html5lib.treewalkers.base import TreeWalker + >>> # Give it an empty tree just so it instantiates + >>> walker = TreeWalker([]) + >>> list(walker.text('')) + [] + >>> list(walker.text(' ')) + [{u'data': ' ', u'type': u'SpaceCharacters'}] + >>> list(walker.text(' abc ')) # doctest: +NORMALIZE_WHITESPACE + [{u'data': ' ', u'type': u'SpaceCharacters'}, + {u'data': u'abc', u'type': u'Characters'}, + {u'data': u' ', u'type': u'SpaceCharacters'}] + + :arg data: the text data + + :returns: one or more ``SpaceCharacters`` and ``Characters`` tokens + + """ + data = data + middle = data.lstrip(spaceCharacters) + left = data[:len(data) - len(middle)] + if left: + yield {"type": "SpaceCharacters", "data": left} + data = middle + middle = data.rstrip(spaceCharacters) + right = data[len(middle):] + if middle: + yield {"type": "Characters", "data": middle} + if right: + yield {"type": "SpaceCharacters", "data": right} + + def comment(self, data): + """Generates a Comment token + + :arg data: the comment + + :returns: Comment token + + """ + return {"type": "Comment", "data": data} + + def doctype(self, name, publicId=None, systemId=None): + """Generates a Doctype token + + :arg name: + + :arg publicId: + + :arg systemId: + + :returns: the Doctype token + + """ + return {"type": "Doctype", + "name": name, + "publicId": publicId, + "systemId": systemId} + + def entity(self, name): + """Generates an Entity token + + :arg name: the entity name + + :returns: an Entity token + + """ + return {"type": "Entity", "name": name} + + def unknown(self, nodeType): + """Handles unknown node types""" + return self.error("Unknown node type: " + nodeType) + + +class NonRecursiveTreeWalker(TreeWalker): + def getNodeDetails(self, node): + raise NotImplementedError + + def getFirstChild(self, node): + raise NotImplementedError + + def getNextSibling(self, node): + raise NotImplementedError + + def getParentNode(self, node): + raise NotImplementedError + + def __iter__(self): + currentNode = self.tree + while currentNode is not None: + details = self.getNodeDetails(currentNode) + type, details = details[0], details[1:] + hasChildren = False + + if type == DOCTYPE: + yield self.doctype(*details) + + elif type == TEXT: + for token in self.text(*details): + yield token + + elif type == ELEMENT: + namespace, name, attributes, hasChildren = details + if (not namespace or namespace == namespaces["html"]) and name in voidElements: + for token in self.emptyTag(namespace, name, attributes, + hasChildren): + yield token + hasChildren = False + else: + yield self.startTag(namespace, name, attributes) + + elif type == COMMENT: + yield self.comment(details[0]) + + elif type == ENTITY: + yield self.entity(details[0]) + + elif type == DOCUMENT: + hasChildren = True + + else: + yield self.unknown(details[0]) + + if hasChildren: + firstChild = self.getFirstChild(currentNode) + else: + firstChild = None + + if firstChild is not None: + currentNode = firstChild + else: + while currentNode is not None: + details = self.getNodeDetails(currentNode) + type, details = details[0], details[1:] + if type == ELEMENT: + namespace, name, attributes, hasChildren = details + if (namespace and namespace != namespaces["html"]) or name not in voidElements: + yield self.endTag(namespace, name) + if self.tree is currentNode: + currentNode = None + break + nextSibling = self.getNextSibling(currentNode) + if nextSibling is not None: + currentNode = nextSibling + break + else: + currentNode = self.getParentNode(currentNode) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treewalkers/dom.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treewalkers/dom.py new file mode 100644 index 00000000..b0c89b00 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treewalkers/dom.py @@ -0,0 +1,43 @@ +from __future__ import absolute_import, division, unicode_literals + +from xml.dom import Node + +from . import base + + +class TreeWalker(base.NonRecursiveTreeWalker): + def getNodeDetails(self, node): + if node.nodeType == Node.DOCUMENT_TYPE_NODE: + return base.DOCTYPE, node.name, node.publicId, node.systemId + + elif node.nodeType in (Node.TEXT_NODE, Node.CDATA_SECTION_NODE): + return base.TEXT, node.nodeValue + + elif node.nodeType == Node.ELEMENT_NODE: + attrs = {} + for attr in list(node.attributes.keys()): + attr = node.getAttributeNode(attr) + if attr.namespaceURI: + attrs[(attr.namespaceURI, attr.localName)] = attr.value + else: + attrs[(None, attr.name)] = attr.value + return (base.ELEMENT, node.namespaceURI, node.nodeName, + attrs, node.hasChildNodes()) + + elif node.nodeType == Node.COMMENT_NODE: + return base.COMMENT, node.nodeValue + + elif node.nodeType in (Node.DOCUMENT_NODE, Node.DOCUMENT_FRAGMENT_NODE): + return (base.DOCUMENT,) + + else: + return base.UNKNOWN, node.nodeType + + def getFirstChild(self, node): + return node.firstChild + + def getNextSibling(self, node): + return node.nextSibling + + def getParentNode(self, node): + return node.parentNode diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treewalkers/etree.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treewalkers/etree.py new file mode 100644 index 00000000..95fc0c17 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treewalkers/etree.py @@ -0,0 +1,130 @@ +from __future__ import absolute_import, division, unicode_literals + +from collections import OrderedDict +import re + +from pip._vendor.six import string_types + +from . import base +from .._utils import moduleFactoryFactory + +tag_regexp = re.compile("{([^}]*)}(.*)") + + +def getETreeBuilder(ElementTreeImplementation): + ElementTree = ElementTreeImplementation + ElementTreeCommentType = ElementTree.Comment("asd").tag + + class TreeWalker(base.NonRecursiveTreeWalker): # pylint:disable=unused-variable + """Given the particular ElementTree representation, this implementation, + to avoid using recursion, returns "nodes" as tuples with the following + content: + + 1. The current element + + 2. The index of the element relative to its parent + + 3. A stack of ancestor elements + + 4. A flag "text", "tail" or None to indicate if the current node is a + text node; either the text or tail of the current element (1) + """ + def getNodeDetails(self, node): + if isinstance(node, tuple): # It might be the root Element + elt, _, _, flag = node + if flag in ("text", "tail"): + return base.TEXT, getattr(elt, flag) + else: + node = elt + + if not(hasattr(node, "tag")): + node = node.getroot() + + if node.tag in ("DOCUMENT_ROOT", "DOCUMENT_FRAGMENT"): + return (base.DOCUMENT,) + + elif node.tag == "<!DOCTYPE>": + return (base.DOCTYPE, node.text, + node.get("publicId"), node.get("systemId")) + + elif node.tag == ElementTreeCommentType: + return base.COMMENT, node.text + + else: + assert isinstance(node.tag, string_types), type(node.tag) + # This is assumed to be an ordinary element + match = tag_regexp.match(node.tag) + if match: + namespace, tag = match.groups() + else: + namespace = None + tag = node.tag + attrs = OrderedDict() + for name, value in list(node.attrib.items()): + match = tag_regexp.match(name) + if match: + attrs[(match.group(1), match.group(2))] = value + else: + attrs[(None, name)] = value + return (base.ELEMENT, namespace, tag, + attrs, len(node) or node.text) + + def getFirstChild(self, node): + if isinstance(node, tuple): + element, key, parents, flag = node + else: + element, key, parents, flag = node, None, [], None + + if flag in ("text", "tail"): + return None + else: + if element.text: + return element, key, parents, "text" + elif len(element): + parents.append(element) + return element[0], 0, parents, None + else: + return None + + def getNextSibling(self, node): + if isinstance(node, tuple): + element, key, parents, flag = node + else: + return None + + if flag == "text": + if len(element): + parents.append(element) + return element[0], 0, parents, None + else: + return None + else: + if element.tail and flag != "tail": + return element, key, parents, "tail" + elif key < len(parents[-1]) - 1: + return parents[-1][key + 1], key + 1, parents, None + else: + return None + + def getParentNode(self, node): + if isinstance(node, tuple): + element, key, parents, flag = node + else: + return None + + if flag == "text": + if not parents: + return element + else: + return element, key, parents, None + else: + parent = parents.pop() + if not parents: + return parent + else: + assert list(parents[-1]).count(parent) == 1 + return parent, list(parents[-1]).index(parent), parents, None + + return locals() + +getETreeModule = moduleFactoryFactory(getETreeBuilder) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treewalkers/etree_lxml.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treewalkers/etree_lxml.py new file mode 100644 index 00000000..e81ddf33 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treewalkers/etree_lxml.py @@ -0,0 +1,213 @@ +from __future__ import absolute_import, division, unicode_literals +from pip._vendor.six import text_type + +from lxml import etree +from ..treebuilders.etree import tag_regexp + +from . import base + +from .. import _ihatexml + + +def ensure_str(s): + if s is None: + return None + elif isinstance(s, text_type): + return s + else: + return s.decode("ascii", "strict") + + +class Root(object): + def __init__(self, et): + self.elementtree = et + self.children = [] + + try: + if et.docinfo.internalDTD: + self.children.append(Doctype(self, + ensure_str(et.docinfo.root_name), + ensure_str(et.docinfo.public_id), + ensure_str(et.docinfo.system_url))) + except AttributeError: + pass + + try: + node = et.getroot() + except AttributeError: + node = et + + while node.getprevious() is not None: + node = node.getprevious() + while node is not None: + self.children.append(node) + node = node.getnext() + + self.text = None + self.tail = None + + def __getitem__(self, key): + return self.children[key] + + def getnext(self): + return None + + def __len__(self): + return 1 + + +class Doctype(object): + def __init__(self, root_node, name, public_id, system_id): + self.root_node = root_node + self.name = name + self.public_id = public_id + self.system_id = system_id + + self.text = None + self.tail = None + + def getnext(self): + return self.root_node.children[1] + + +class FragmentRoot(Root): + def __init__(self, children): + self.children = [FragmentWrapper(self, child) for child in children] + self.text = self.tail = None + + def getnext(self): + return None + + +class FragmentWrapper(object): + def __init__(self, fragment_root, obj): + self.root_node = fragment_root + self.obj = obj + if hasattr(self.obj, 'text'): + self.text = ensure_str(self.obj.text) + else: + self.text = None + if hasattr(self.obj, 'tail'): + self.tail = ensure_str(self.obj.tail) + else: + self.tail = None + + def __getattr__(self, name): + return getattr(self.obj, name) + + def getnext(self): + siblings = self.root_node.children + idx = siblings.index(self) + if idx < len(siblings) - 1: + return siblings[idx + 1] + else: + return None + + def __getitem__(self, key): + return self.obj[key] + + def __bool__(self): + return bool(self.obj) + + def getparent(self): + return None + + def __str__(self): + return str(self.obj) + + def __unicode__(self): + return str(self.obj) + + def __len__(self): + return len(self.obj) + + +class TreeWalker(base.NonRecursiveTreeWalker): + def __init__(self, tree): + # pylint:disable=redefined-variable-type + if isinstance(tree, list): + self.fragmentChildren = set(tree) + tree = FragmentRoot(tree) + else: + self.fragmentChildren = set() + tree = Root(tree) + base.NonRecursiveTreeWalker.__init__(self, tree) + self.filter = _ihatexml.InfosetFilter() + + def getNodeDetails(self, node): + if isinstance(node, tuple): # Text node + node, key = node + assert key in ("text", "tail"), "Text nodes are text or tail, found %s" % key + return base.TEXT, ensure_str(getattr(node, key)) + + elif isinstance(node, Root): + return (base.DOCUMENT,) + + elif isinstance(node, Doctype): + return base.DOCTYPE, node.name, node.public_id, node.system_id + + elif isinstance(node, FragmentWrapper) and not hasattr(node, "tag"): + return base.TEXT, ensure_str(node.obj) + + elif node.tag == etree.Comment: + return base.COMMENT, ensure_str(node.text) + + elif node.tag == etree.Entity: + return base.ENTITY, ensure_str(node.text)[1:-1] # strip &; + + else: + # This is assumed to be an ordinary element + match = tag_regexp.match(ensure_str(node.tag)) + if match: + namespace, tag = match.groups() + else: + namespace = None + tag = ensure_str(node.tag) + attrs = {} + for name, value in list(node.attrib.items()): + name = ensure_str(name) + value = ensure_str(value) + match = tag_regexp.match(name) + if match: + attrs[(match.group(1), match.group(2))] = value + else: + attrs[(None, name)] = value + return (base.ELEMENT, namespace, self.filter.fromXmlName(tag), + attrs, len(node) > 0 or node.text) + + def getFirstChild(self, node): + assert not isinstance(node, tuple), "Text nodes have no children" + + assert len(node) or node.text, "Node has no children" + if node.text: + return (node, "text") + else: + return node[0] + + def getNextSibling(self, node): + if isinstance(node, tuple): # Text node + node, key = node + assert key in ("text", "tail"), "Text nodes are text or tail, found %s" % key + if key == "text": + # XXX: we cannot use a "bool(node) and node[0] or None" construct here + # because node[0] might evaluate to False if it has no child element + if len(node): + return node[0] + else: + return None + else: # tail + return node.getnext() + + return (node, "tail") if node.tail else node.getnext() + + def getParentNode(self, node): + if isinstance(node, tuple): # Text node + node, key = node + assert key in ("text", "tail"), "Text nodes are text or tail, found %s" % key + if key == "text": + return node + # else: fallback to "normal" processing + elif node in self.fragmentChildren: + return None + + return node.getparent() diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treewalkers/genshi.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treewalkers/genshi.py new file mode 100644 index 00000000..7483be27 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/html5lib/treewalkers/genshi.py @@ -0,0 +1,69 @@ +from __future__ import absolute_import, division, unicode_literals + +from genshi.core import QName +from genshi.core import START, END, XML_NAMESPACE, DOCTYPE, TEXT +from genshi.core import START_NS, END_NS, START_CDATA, END_CDATA, PI, COMMENT + +from . import base + +from ..constants import voidElements, namespaces + + +class TreeWalker(base.TreeWalker): + def __iter__(self): + # Buffer the events so we can pass in the following one + previous = None + for event in self.tree: + if previous is not None: + for token in self.tokens(previous, event): + yield token + previous = event + + # Don't forget the final event! + if previous is not None: + for token in self.tokens(previous, None): + yield token + + def tokens(self, event, next): + kind, data, _ = event + if kind == START: + tag, attribs = data + name = tag.localname + namespace = tag.namespace + converted_attribs = {} + for k, v in attribs: + if isinstance(k, QName): + converted_attribs[(k.namespace, k.localname)] = v + else: + converted_attribs[(None, k)] = v + + if namespace == namespaces["html"] and name in voidElements: + for token in self.emptyTag(namespace, name, converted_attribs, + not next or next[0] != END or + next[1] != tag): + yield token + else: + yield self.startTag(namespace, name, converted_attribs) + + elif kind == END: + name = data.localname + namespace = data.namespace + if namespace != namespaces["html"] or name not in voidElements: + yield self.endTag(namespace, name) + + elif kind == COMMENT: + yield self.comment(data) + + elif kind == TEXT: + for token in self.text(data): + yield token + + elif kind == DOCTYPE: + yield self.doctype(*data) + + elif kind in (XML_NAMESPACE, DOCTYPE, START_NS, END_NS, + START_CDATA, END_CDATA, PI): + pass + + else: + yield self.unknown(kind) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/__init__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/__init__.py new file mode 100644 index 00000000..847bf935 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/__init__.py @@ -0,0 +1,2 @@ +from .package_data import __version__ +from .core import * diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d8fa20cad85e1044b90fb9bc0fad8e625b456093 GIT binary patch literal 208 zcmXr!<>iW5rx$C*z`*brh~a<<$Z`PUVhJFT!jQt4!;s4u#mER^GvzRaFr+XCGib8B zWCTiUGT!2jk1tCtD$dN$i;o9#8MXX0nQ!qFBqnDkrl-cIB$gx=flR!`lAK?Zx{{%Y z4afl#zby1iatrheG7EH*N;7j(bPWnKlJX6VQb0mr3^X_|CBH~NGbJxkKR!M)FS8^* ZUaz3?7Kcr4eoARhsvXD;#USH(7y)>7G?D-S literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/__pycache__/codec.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/__pycache__/codec.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b9e07b156693bf61e43f866167f1809e160362c0 GIT binary patch literal 3055 zcmchZ&5zqe6u@Wv9VeUJhSJhfAZ;(WQnO17f&(oJ-3s-R0~J&<RF>D{-8$G#`s@H* zoC-BP0)GP>;lPO_{39c7J@wQ(7kF=+-DE#nwL-$tyqS43nU6QW_hv3HExBL(*1P?v z#n>aZ@R?X%$5i};LNLKomT{kFny+QLuV;pDWTtO&CN!a^mT#%t_U+gnIKr56zwt2> zrm!9|Va3+Ko$9`e8e2H1aZuAlO$#**;iASx%@S(bsA-B8YFaVrmZyfljJhS!MqOL! zR#3Mhmc`0L<{uOKP39eY%yF5XDXln<h9Z`hi0eE|!_7FA*0|0aH#YhoUI!S$WBdc_ zk8$7Z^WLNH9z6Nu$0vXOd^;lb?x$m69aGUo5i_3)=4-eG-10;2>jF0_Oe`6~!bLQs zc@5`|q*auVL}f⩔l<<*Dw`56qP3UmpYs%(Ru@3X;VJs4|v6k*M)hLm0E@MQYX2k z;lNfO8u+iB?x%S%9*u@j#-bb3Cc1aRT%<|9-97j1+T@&MU}Hy50~fQpY=DJjX>AQ5 z3ro<bqNj20>C!0TbW0i{EJHLLjaU4_U<G^p{myEcjaEm==;G!$NyWvryLUE+YnKG6 zR0_U|b1{U~MC9QrnL6r??y1pfsRhl?G>5k}gB#jTOBtqDAI|@8mj!biHVrg!sX*rg z1cRr;5|!H|mPwF7YH^H8)bk}wPuXJ)Uf<*D%yu(VIzf<!SsVn?4T5Ya#wnFsL2!2* zrge)lU%is~oT{WIc5qTU-oilPXs!#Si7@Sbbh_)9isLBufaO9%Ptld97_xICk08$C zybROp%3C0!5$U6|qp~9PcPu=ERGUa0C`u=W&?jbPz-N^qoKvjW5Ej)%;|j|=m0pnE zy~3ymwQRGAC5(yv&85oNV7D(!oXQ#)rCB-T37l0nJg978zRM<dWtSG|seD)5!e}zE zD{IOt^CXU<TFtt(!kY4z=JWc?oC~1%A$f1nbsqnNADqMnB|JxYlEOu<1mip*>;o|@ zivVJ27NayNr4^1w=ovs(R6I#zFidi<aeyjmZY6n$fl0-sLbgf>6Y^vlP+AZd<FrH% zO?Gf-)#m_*vK?%Wx3*#kYOi`7CoI-bFuv<{E=T9Xno62QHF8Jp^0v~g=xyHOJ7*6A z(c3?E-!q^?8zSz3*n)E;j-vEsY<LY*K`c5PsQ#ZA-B6MIDUAMwqd$XDr;etjKGopu z(ioT&Qzu4#2AQIgin79-YRDWP;B7^%GnVfYzsPbrV;T8XER(*eSib*MmhIA6VEI>M z*`Bf7*kk#7#j?AP<wkXo<<^U{EX}Zpk_1kmZ4}pwP|ta;p>8ff?IuN%7iE}7v9xD= z!z(n(DHKx2YYk3Ql^zEQZg>?-huDTQ)J_lpQ3-F5=#n@~VonW(wK>Oi<op12#d|3B zIM!X>(jBDMRrEfCXYCNrGkErR-i^+OczzQnTv*vW>Ym4jtC)6qrusgfDRQh+2f97x zF&FP`O}1{95Qo_<NXi)cc(okxqPZ#N6M8tzHjOuPAgaIUgrCHrc<u==-~@w(38}ts zLb?^MQHL&yk`1`vr8Z>)T}h1FrBx#FLi+*l1W)fvgI)!mEe*QY=C_*cB=f7Mj#{u! zSDy~Z7LtZ$`&yZ8w}u+r6TY%6_1q|ALp>^P<oL3oi*P=ViaBtebYwiB4IOp1vbi1O zMB8{3!o3VT6?6&=W243`{Aub3mr>_+q!A5aVKa4vSDru*EO-lr)bJv(qhU5m(zx~< zTA4ikk&4u@I2>u!T9527L-*i5Xf;P}#(BSfRa_+?3j*y7#(sP!Xq^+CvmNiaeq8?- D!MTEN literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/__pycache__/compat.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/__pycache__/compat.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..531d7b856caa3bd2f29eeaef6964e8eb5c0b7e7a GIT binary patch literal 568 zcma)3K}*9h6i&K!>xMh|2YQ`sYndP(L>%g&mtHn6qDa>lu#h$}%>>1h^Urwk2leVj z|AHsq>zE8dF!0{@lDvHR@@2o@?_Ir(uRj=L?-)PB!RiE~8e#$lT(bEZIidrt7k24@ z3m#$%+R#CC!Jn}~_mkt10k8R9MimW0Vm!sDd`y--u@%Q|o?vHNl$ip7l_%4Mkgv>m z*z|P}+Cqmq*Q3QUmoSR%ZWk(=04+6fb1zCzCd{Es!%P)AwPXEIcjjt3JB?$PuA_Sy zHyzCX)&pX##}GrKWu4kMt-Et|QRdV@oE!e`pZq(xW6{ACf9AmO%}(+-jL(v3Fo~kW z0F<bLQrTc>bD38nDAPh{BXppRvMN&&ec4TvjSDSBAxbOY+!$rZ;_A0Je{;IGrHvFM s1Fv>7Wkl_f^sF(&kZMEQTRddFX<q6d6$+M89Mk_b|K@Yw@mqfD8$O?Oy#N3J literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/__pycache__/core.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/__pycache__/core.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f264d75619381b64f0f8ac7ae269d3a11203ad38 GIT binary patch literal 9108 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 Y@0~+hEVzYfuUzm8hYJV1Desa02gyt>n*aa+ literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/__pycache__/idnadata.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/__pycache__/idnadata.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0e1e8e32c7a190e520794bb2f838cb074dcd478a GIT binary patch literal 29747 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 Nms=pF#c#i7{cnyJ9)bV> literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/__pycache__/intranges.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/__pycache__/intranges.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ca48aff94b4fbe11def737a269cc0692634414fb GIT binary patch literal 1769 zcmZuxNpIXX6ecNYJdtf6OWW9JkrFNt%mB{VaZW9q1+CFu0vAXE6fhFVvdEcHtPy3B z@)Br}!?d^lkzV?5df~Mv|Ak)M_o(sGpcJ@0@-6z__xNOaIez=+;N4#xLjEQ<8iVx< z=w=fJLH3BCf)#X+ia><Fl07CO(SbP-3!)2iC~k=u=18#Dq`#QnqJ+dh<;Sw*DKBzk zxf=4kv~nc1S?7~fNM2Vc?2T0=hjme$_2H_Sq(#BYdU7B&o))Scab1@thE1kQBeU9q z*&DVpHK}SVL0QX6OCw90+FX^WZpV@jm7c`Cp0TO6kJq^@#pC`uZ}(e%zt!i1!Jt3j zZ^jsJX->d7svgzScvEX9so|%5Za&USf2?#q%FDFyKlpqNV&XQRNd9xLP@~>AKJI>h z5T65vWH$pyd;_cr_8*{|-(j$%Au~FqBQj+om<FfXQp*}TgKvktJD7$|DCm9C$_|Ns z+0Z6jB{-sd6|%EJ4w-&=^Z;Z5%G#6P*eaPu4SOHhuz}owP9#7RZ_L<?Qn)t_jvo9% zEZmw=$X%3v34y-4gz|sV#{mn-lmv9jOd`xWEl1LP7jtNHq?1h#ZL)cVb<%>LAo>XR zIyZGT1|U=WA2hv{ORDfxOD<2-%ob;GOBo4ixYqMYO>(~d6vW$@Ti8ItxlxdZd=PtM zuY7o|sWMYS3j76=m!smENOMN;?QQ;Ki#KQsLM)ZVySA<hX$IcfIp$I0aDD+z2e9gQ zT*oMFrErl4!v%#bT_>$7u;Z2!KnnaO?OEi_flh>#k+{WHHNl<hv|zfpNa5^6=T<tJ zyXCCb8mQfx_=D)%;P#(yH|(U^sPgL3L7f-k(dN<kKy7Xb6#1S&1q!7%a#5xm0BUP| zP@TDZSG#1W)x<lG!KV2F2GZ@)5Wc(gHeI2Nen!8dU8e8CNrq1YHk`408ZW`30a`r+ zQhrZ>Mr`+-gUpB7XD;%Yasfo+MeT40Z**b!8oKd@so!7K3c?&h_fGJa(aCch!xv<T zZ%wqT?}1#Sc7eIT7PiZaj~5?<c?{H1{fTSHi;&lOSp&t(AnwEZ>Q5KE#d#1PV1orK z=!{L7rSG9op>)_Zz`{EW^{x$k5waC1%o%;lrXiGI*g#MLIizZ*i4I8_GD3;o6~SxL zU~xjJLt!7cx>tG~)Pur4#(N^f-~I4(M_Q>Tc?sMd@_k5Svd@R`Y#MwN6<2UDfBM>N z<GZxqF82qXxE`!GKlURJw(A_^@UB|7*v?5IhgKs38lS2Df(y}!#vHqj=WgPHN*Nd8 zO<;UJ8e2z`PvO0DO)+@7ZJL)4!9+_i7SpAm3&dKXAzK2PA>lMfe;v1wBtm6LqE}$= nS?2?7W5PQ(JRvDG63KP9CrZ?Xe1=gQ<Z{TmtowO4=!X9S)_%q1 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/__pycache__/package_data.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/__pycache__/package_data.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..82f2343b9cccc2b004fdc4d80d66304a7e5f16aa GIT binary patch literal 162 zcmXr!<>iW5rxz>Az`*brh~a<{$Z`PUVh$jY!Vtxf!Whh;$yCK`q-Wu$$#{!9KE5oq zs5mn}FFt-HLlF~D6`1&CqhFF+pkI(#pqo^hnUkVxP?(XFZ(x)H5&~nOzPyzDBK^#i myhQzi#N_P6^wjv2#F9k4g34PQHo5sJr8%i~Ap47fm;nF?h$%M! literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/__pycache__/uts46data.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/__pycache__/uts46data.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..75cc8b2da06eac76dfc4372a49806f28a0a171f7 GIT binary patch literal 241757 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 IE5}X$2SkErZ~y=R literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/codec.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/codec.py new file mode 100644 index 00000000..98c65ead --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/codec.py @@ -0,0 +1,118 @@ +from .core import encode, decode, alabel, ulabel, IDNAError +import codecs +import re + +_unicode_dots_re = re.compile(u'[\u002e\u3002\uff0e\uff61]') + +class Codec(codecs.Codec): + + def encode(self, data, errors='strict'): + + if errors != 'strict': + raise IDNAError("Unsupported error handling \"{0}\"".format(errors)) + + if not data: + return "", 0 + + return encode(data), len(data) + + def decode(self, data, errors='strict'): + + if errors != 'strict': + raise IDNAError("Unsupported error handling \"{0}\"".format(errors)) + + if not data: + return u"", 0 + + return decode(data), len(data) + +class IncrementalEncoder(codecs.BufferedIncrementalEncoder): + def _buffer_encode(self, data, errors, final): + if errors != 'strict': + raise IDNAError("Unsupported error handling \"{0}\"".format(errors)) + + if not data: + return ("", 0) + + labels = _unicode_dots_re.split(data) + trailing_dot = u'' + 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(alabel(label)) + if size: + size += 1 + size += len(label) + + # Join with U+002E + result = ".".join(result) + trailing_dot + size += len(trailing_dot) + return (result, size) + +class IncrementalDecoder(codecs.BufferedIncrementalDecoder): + def _buffer_decode(self, data, errors, final): + if errors != 'strict': + raise IDNAError("Unsupported error handling \"{0}\"".format(errors)) + + if not data: + return (u"", 0) + + # IDNA allows decoding to operate on Unicode strings, too. + if isinstance(data, unicode): + labels = _unicode_dots_re.split(data) + else: + # Must be ASCII string + data = str(data) + unicode(data, "ascii") + labels = data.split(".") + + trailing_dot = u'' + if labels: + if not labels[-1]: + trailing_dot = u'.' + del labels[-1] + elif not final: + # Keep potentially unfinished label until the next call + del labels[-1] + if labels: + trailing_dot = u'.' + + result = [] + size = 0 + for label in labels: + result.append(ulabel(label)) + if size: + size += 1 + size += len(label) + + result = u".".join(result) + trailing_dot + size += len(trailing_dot) + return (result, size) + + +class StreamWriter(Codec, codecs.StreamWriter): + pass + +class StreamReader(Codec, codecs.StreamReader): + pass + +def getregentry(): + return codecs.CodecInfo( + name='idna', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamwriter=StreamWriter, + streamreader=StreamReader, + ) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/compat.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/compat.py new file mode 100644 index 00000000..4d47f336 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/compat.py @@ -0,0 +1,12 @@ +from .core import * +from .codec import * + +def ToASCII(label): + return encode(label) + +def ToUnicode(label): + return decode(label) + +def nameprep(s): + raise NotImplementedError("IDNA 2008 does not utilise nameprep protocol") + diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/core.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/core.py new file mode 100644 index 00000000..104624ad --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/core.py @@ -0,0 +1,396 @@ +from . import idnadata +import bisect +import unicodedata +import re +import sys +from .intranges import intranges_contain + +_virama_combining_class = 9 +_alabel_prefix = b'xn--' +_unicode_dots_re = re.compile(u'[\u002e\u3002\uff0e\uff61]') + +if sys.version_info[0] == 3: + unicode = str + unichr = chr + +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): + v = unicodedata.combining(unichr(cp)) + if v == 0: + if not unicodedata.name(unichr(cp)): + raise ValueError("Unknown character in unicodedata") + return v + +def _is_script(cp, script): + return intranges_contain(ord(cp), idnadata.scripts[script]) + +def _punycode(s): + return s.encode('punycode') + +def _unot(s): + return 'U+{0:04X}'.format(s) + + +def valid_label_length(label): + + if len(label) > 63: + return False + return True + + +def valid_string_length(label, trailing_dot): + + if len(label) > (254 if trailing_dot else 253): + return False + return True + + +def check_bidi(label, check_ltr=False): + + # 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 {0} at position {1}'.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 {0} must be directionality L, R or AL'.format(repr(label))) + + valid_ending = False + number_type = False + for (idx, cp) in enumerate(label, 1): + direction = unicodedata.bidirectional(cp) + + if rtl: + # Bidi rule 2 + if not direction in ['R', 'AL', 'AN', 'EN', 'ES', 'CS', 'ET', 'ON', 'BN', 'NSM']: + raise IDNABidiError('Invalid direction for codepoint at position {0} 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 not direction in ['L', 'EN', 'ES', 'CS', 'ET', 'ON', 'BN', 'NSM']: + raise IDNABidiError('Invalid direction for codepoint at position {0} 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): + + if unicodedata.category(label[0])[0] == 'M': + raise IDNAError('Label begins with an illegal combining character') + return True + + +def check_hyphen_ok(label): + + 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): + + if unicodedata.normalize('NFC', label) != label: + raise IDNAError('Label must be in Normalization Form C') + + +def valid_contextj(label, pos): + + 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 + if joining_type in [ord('L'), ord('D')]: + ok = True + 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 + if joining_type in [ord('R'), ord('D')]: + ok = True + 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, pos, exception=False): + + 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 == u'\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 + + +def check_label(label): + + 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 {0} not allowed at position {1} in {2}'.format( + _unot(cp_value), pos+1, repr(label))) + except ValueError: + raise IDNAError('Unknown codepoint adjacent to joiner {0} at position {1} in {2}'.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 {0} not allowed at position {1} in {2}'.format(_unot(cp_value), pos+1, repr(label))) + else: + raise InvalidCodepoint('Codepoint {0} at position {1} of {2} not allowed'.format(_unot(cp_value), pos+1, repr(label))) + + check_bidi(label) + + +def alabel(label): + + try: + label = label.encode('ascii') + ulabel(label) + if not valid_label_length(label): + raise IDNAError('Label too long') + return label + except UnicodeEncodeError: + pass + + if not label: + raise IDNAError('No Input') + + label = unicode(label) + check_label(label) + label = _punycode(label) + label = _alabel_prefix + label + + if not valid_label_length(label): + raise IDNAError('Label too long') + + return label + + +def ulabel(label): + + if not isinstance(label, (bytes, bytearray)): + try: + label = label.encode('ascii') + except UnicodeEncodeError: + check_label(label) + return label + + label = label.lower() + if label.startswith(_alabel_prefix): + label = label[len(_alabel_prefix):] + else: + check_label(label) + return label.decode('ascii') + + label = label.decode('punycode') + check_label(label) + return label + + +def uts46_remap(domain, std3_rules=True, transitional=False): + """Re-map the characters in the string according to UTS46 processing.""" + from .uts46data import uts46data + output = u"" + try: + for pos, char in enumerate(domain): + code_point = ord(char) + uts46row = uts46data[code_point if code_point < 256 else + bisect.bisect_left(uts46data, (code_point, "Z")) - 1] + status = uts46row[1] + replacement = uts46row[2] if len(uts46row) == 3 else None + 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() + return unicodedata.normalize("NFC", output) + except IndexError: + raise InvalidCodepoint( + "Codepoint {0} not allowed at position {1} in {2}".format( + _unot(code_point), pos + 1, repr(domain))) + + +def encode(s, strict=False, uts46=False, std3_rules=False, transitional=False): + + if isinstance(s, (bytes, bytearray)): + s = s.decode("ascii") + 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, strict=False, uts46=False, std3_rules=False): + + if isinstance(s, (bytes, bytearray)): + s = s.decode("ascii") + 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(u'.') + 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(u'') + return u'.'.join(result) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/idnadata.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/idnadata.py new file mode 100644 index 00000000..a80c959d --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/idnadata.py @@ -0,0 +1,1979 @@ +# This file is automatically generated by tools/idna-data + +__version__ = "11.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, + 0x340000004db6, + 0x4e0000009ff0, + 0xf9000000fa6e, + 0xfa700000fada, + 0x200000002a6d7, + 0x2a7000002b735, + 0x2b7400002b81e, + 0x2b8200002cea2, + 0x2ceb00002ebe1, + 0x2f8000002fa1e, + ), + 'Hebrew': ( + 0x591000005c8, + 0x5d0000005eb, + 0x5ef000005f5, + 0xfb1d0000fb37, + 0xfb380000fb3d, + 0xfb3e0000fb3f, + 0xfb400000fb42, + 0xfb430000fb45, + 0xfb460000fb50, + ), + 'Hiragana': ( + 0x304100003097, + 0x309d000030a0, + 0x1b0010001b11f, + 0x1f2000001f201, + ), + 'Katakana': ( + 0x30a1000030fb, + 0x30fd00003100, + 0x31f000003200, + 0x32d0000032ff, + 0x330000003358, + 0xff660000ff70, + 0xff710000ff9e, + 0x1b0000001b001, + ), +} +joining_types = { + 0x600: 85, + 0x601: 85, + 0x602: 85, + 0x603: 85, + 0x604: 85, + 0x605: 85, + 0x608: 85, + 0x60b: 85, + 0x620: 68, + 0x621: 85, + 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, + 0x66e: 68, + 0x66f: 68, + 0x671: 82, + 0x672: 82, + 0x673: 82, + 0x674: 85, + 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, + 0x6dd: 85, + 0x6ee: 82, + 0x6ef: 82, + 0x6fa: 68, + 0x6fb: 68, + 0x6fc: 68, + 0x6ff: 68, + 0x70f: 84, + 0x710: 82, + 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, + 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, + 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, + 0x7fa: 67, + 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: 85, + 0x857: 85, + 0x858: 85, + 0x860: 68, + 0x861: 85, + 0x862: 68, + 0x863: 68, + 0x864: 68, + 0x865: 68, + 0x866: 85, + 0x867: 82, + 0x868: 68, + 0x869: 82, + 0x86a: 82, + 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, + 0x8ad: 85, + 0x8ae: 82, + 0x8af: 68, + 0x8b0: 68, + 0x8b1: 82, + 0x8b2: 82, + 0x8b3: 68, + 0x8b4: 68, + 0x8b6: 68, + 0x8b7: 68, + 0x8b8: 68, + 0x8b9: 82, + 0x8ba: 68, + 0x8bb: 68, + 0x8bc: 68, + 0x8bd: 68, + 0x8e2: 85, + 0x1806: 85, + 0x1807: 68, + 0x180a: 67, + 0x180e: 85, + 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, + 0x1880: 85, + 0x1881: 85, + 0x1882: 85, + 0x1883: 85, + 0x1884: 85, + 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, + 0x18aa: 68, + 0x200c: 85, + 0x200d: 67, + 0x202f: 85, + 0x2066: 85, + 0x2067: 85, + 0x2068: 85, + 0x2069: 85, + 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, + 0xa873: 85, + 0x10ac0: 68, + 0x10ac1: 68, + 0x10ac2: 68, + 0x10ac3: 68, + 0x10ac4: 68, + 0x10ac5: 82, + 0x10ac6: 85, + 0x10ac7: 82, + 0x10ac8: 85, + 0x10ac9: 82, + 0x10aca: 82, + 0x10acb: 85, + 0x10acc: 85, + 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, + 0x10ae2: 85, + 0x10ae3: 85, + 0x10ae4: 82, + 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, + 0x10baf: 85, + 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, + 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, + 0x10f45: 85, + 0x10f51: 68, + 0x10f52: 68, + 0x10f53: 68, + 0x10f54: 82, + 0x110bd: 85, + 0x110cd: 85, + 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, +} +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, + 0x8a0000008b5, + 0x8b6000008be, + 0x8d3000008e2, + 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, + 0xb5600000b58, + 0xb5f00000b64, + 0xb6600000b70, + 0xb7100000b72, + 0xb8200000b84, + 0xb8500000b8b, + 0xb8e00000b91, + 0xb9200000b96, + 0xb9900000b9b, + 0xb9c00000b9d, + 0xb9e00000ba0, + 0xba300000ba5, + 0xba800000bab, + 0xbae00000bba, + 0xbbe00000bc3, + 0xbc600000bc9, + 0xbca00000bce, + 0xbd000000bd1, + 0xbd700000bd8, + 0xbe600000bf0, + 0xc0000000c0d, + 0xc0e00000c11, + 0xc1200000c29, + 0xc2a00000c3a, + 0xc3d00000c45, + 0xc4600000c49, + 0xc4a00000c4e, + 0xc5500000c57, + 0xc5800000c5b, + 0xc6000000c64, + 0xc6600000c70, + 0xc8000000c84, + 0xc8500000c8d, + 0xc8e00000c91, + 0xc9200000ca9, + 0xcaa00000cb4, + 0xcb500000cba, + 0xcbc00000cc5, + 0xcc600000cc9, + 0xcca00000cce, + 0xcd500000cd7, + 0xcde00000cdf, + 0xce000000ce4, + 0xce600000cf0, + 0xcf100000cf3, + 0xd0000000d04, + 0xd0500000d0d, + 0xd0e00000d11, + 0xd1200000d45, + 0xd4600000d49, + 0xd4a00000d4f, + 0xd5400000d58, + 0xd5f00000d64, + 0xd6600000d70, + 0xd7a00000d80, + 0xd8200000d84, + 0xd8500000d97, + 0xd9a00000db2, + 0xdb300000dbc, + 0xdbd00000dbe, + 0xdc000000dc7, + 0xdca00000dcb, + 0xdcf00000dd5, + 0xdd600000dd7, + 0xdd800000de0, + 0xde600000df0, + 0xdf200000df4, + 0xe0100000e33, + 0xe3400000e3b, + 0xe4000000e4f, + 0xe5000000e5a, + 0xe8100000e83, + 0xe8400000e85, + 0xe8700000e89, + 0xe8a00000e8b, + 0xe8d00000e8e, + 0xe9400000e98, + 0xe9900000ea0, + 0xea100000ea4, + 0xea500000ea6, + 0xea700000ea8, + 0xeaa00000eac, + 0xead00000eb3, + 0xeb400000eba, + 0xebb00000ebe, + 0xec000000ec5, + 0xec600000ec7, + 0xec800000ece, + 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, + 0x17000000170d, + 0x170e00001715, + 0x172000001735, + 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, + 0x1b0000001b4c, + 0x1b5000001b5a, + 0x1b6b00001b74, + 0x1b8000001bf4, + 0x1c0000001c38, + 0x1c4000001c4a, + 0x1c4d00001c7e, + 0x1cd000001cd3, + 0x1cd400001cfa, + 0x1d0000001d2c, + 0x1d2f00001d30, + 0x1d3b00001d3c, + 0x1d4e00001d4f, + 0x1d6b00001d78, + 0x1d7900001d9b, + 0x1dc000001dfa, + 0x1dfb00001e00, + 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, + 0x2c3000002c5f, + 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, + 0x31a0000031bb, + 0x31f000003200, + 0x340000004db6, + 0x4e0000009ff0, + 0xa0000000a48d, + 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, + 0xa7f70000a7f8, + 0xa7fa0000a828, + 0xa8400000a874, + 0xa8800000a8c6, + 0xa8d00000a8da, + 0xa8e00000a8f8, + 0xa8fb0000a8fc, + 0xa8fd0000a92e, + 0xa9300000a954, + 0xa9800000a9c1, + 0xa9cf0000a9da, + 0xa9e00000a9ff, + 0xaa000000aa37, + 0xaa400000aa4e, + 0xaa500000aa5a, + 0xaa600000aa77, + 0xaa7a0000aac3, + 0xaadb0000aade, + 0xaae00000aaf0, + 0xaaf20000aaf7, + 0xab010000ab07, + 0xab090000ab0f, + 0xab110000ab17, + 0xab200000ab27, + 0xab280000ab2f, + 0xab300000ab5b, + 0xab600000ab66, + 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, + 0x1060000010737, + 0x1074000010756, + 0x1076000010768, + 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, + 0x10f0000010f1d, + 0x10f2700010f28, + 0x10f3000010f51, + 0x1100000011047, + 0x1106600011070, + 0x1107f000110bb, + 0x110d0000110e9, + 0x110f0000110fa, + 0x1110000011135, + 0x1113600011140, + 0x1114400011147, + 0x1115000011174, + 0x1117600011177, + 0x11180000111c5, + 0x111c9000111cd, + 0x111d0000111db, + 0x111dc000111dd, + 0x1120000011212, + 0x1121300011238, + 0x1123e0001123f, + 0x1128000011287, + 0x1128800011289, + 0x1128a0001128e, + 0x1128f0001129e, + 0x1129f000112a9, + 0x112b0000112eb, + 0x112f0000112fa, + 0x1130000011304, + 0x113050001130d, + 0x1130f00011311, + 0x1131300011329, + 0x1132a00011331, + 0x1133200011334, + 0x113350001133a, + 0x1133b00011345, + 0x1134700011349, + 0x1134b0001134e, + 0x1135000011351, + 0x1135700011358, + 0x1135d00011364, + 0x113660001136d, + 0x1137000011375, + 0x114000001144b, + 0x114500001145a, + 0x1145e0001145f, + 0x11480000114c6, + 0x114c7000114c8, + 0x114d0000114da, + 0x11580000115b6, + 0x115b8000115c1, + 0x115d8000115de, + 0x1160000011641, + 0x1164400011645, + 0x116500001165a, + 0x11680000116b8, + 0x116c0000116ca, + 0x117000001171b, + 0x1171d0001172c, + 0x117300001173a, + 0x118000001183b, + 0x118c0000118ea, + 0x118ff00011900, + 0x11a0000011a3f, + 0x11a4700011a48, + 0x11a5000011a84, + 0x11a8600011a9a, + 0x11a9d00011a9e, + 0x11ac000011af9, + 0x11c0000011c09, + 0x11c0a00011c37, + 0x11c3800011c41, + 0x11c5000011c5a, + 0x11c7200011c90, + 0x11c9200011ca8, + 0x11ca900011cb7, + 0x11d0000011d07, + 0x11d0800011d0a, + 0x11d0b00011d37, + 0x11d3a00011d3b, + 0x11d3c00011d3e, + 0x11d3f00011d48, + 0x11d5000011d5a, + 0x11d6000011d66, + 0x11d6700011d69, + 0x11d6a00011d8f, + 0x11d9000011d92, + 0x11d9300011d99, + 0x11da000011daa, + 0x11ee000011ef7, + 0x120000001239a, + 0x1248000012544, + 0x130000001342f, + 0x1440000014647, + 0x1680000016a39, + 0x16a4000016a5f, + 0x16a6000016a6a, + 0x16ad000016aee, + 0x16af000016af5, + 0x16b0000016b37, + 0x16b4000016b44, + 0x16b5000016b5a, + 0x16b6300016b78, + 0x16b7d00016b90, + 0x16e6000016e80, + 0x16f0000016f45, + 0x16f5000016f7f, + 0x16f8f00016fa0, + 0x16fe000016fe2, + 0x17000000187f2, + 0x1880000018af3, + 0x1b0000001b11f, + 0x1b1700001b2fc, + 0x1bc000001bc6b, + 0x1bc700001bc7d, + 0x1bc800001bc89, + 0x1bc900001bc9a, + 0x1bc9d0001bc9f, + 0x1da000001da37, + 0x1da3b0001da6d, + 0x1da750001da76, + 0x1da840001da85, + 0x1da9b0001daa0, + 0x1daa10001dab0, + 0x1e0000001e007, + 0x1e0080001e019, + 0x1e01b0001e022, + 0x1e0230001e025, + 0x1e0260001e02b, + 0x1e8000001e8c5, + 0x1e8d00001e8d7, + 0x1e9220001e94b, + 0x1e9500001e95a, + 0x200000002a6d7, + 0x2a7000002b735, + 0x2b7400002b81e, + 0x2b8200002cea2, + 0x2ceb00002ebe1, + ), + 'CONTEXTJ': ( + 0x200c0000200e, + ), + 'CONTEXTO': ( + 0xb7000000b8, + 0x37500000376, + 0x5f3000005f5, + 0x6600000066a, + 0x6f0000006fa, + 0x30fb000030fc, + ), +} diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/intranges.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/intranges.py new file mode 100644 index 00000000..fa8a7356 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/intranges.py @@ -0,0 +1,53 @@ +""" +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 + +def intranges_from_list(list_): + """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, end): + return (start << 32) | end + +def _decode_range(r): + return (r >> 32), (r & ((1 << 32) - 1)) + + +def intranges_contain(int_, ranges): + """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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/package_data.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/package_data.py new file mode 100644 index 00000000..257e8989 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/package_data.py @@ -0,0 +1,2 @@ +__version__ = '2.8' + diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/uts46data.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/uts46data.py new file mode 100644 index 00000000..a68ed4c0 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/idna/uts46data.py @@ -0,0 +1,8205 @@ +# This file is automatically generated by tools/idna-data +# vim: set fileencoding=utf-8 : + +"""IDNA Mapping Table from UTS46.""" + + +__version__ = "11.0.0" +def _seg_0(): + return [ + (0x0, '3'), + (0x1, '3'), + (0x2, '3'), + (0x3, '3'), + (0x4, '3'), + (0x5, '3'), + (0x6, '3'), + (0x7, '3'), + (0x8, '3'), + (0x9, '3'), + (0xA, '3'), + (0xB, '3'), + (0xC, '3'), + (0xD, '3'), + (0xE, '3'), + (0xF, '3'), + (0x10, '3'), + (0x11, '3'), + (0x12, '3'), + (0x13, '3'), + (0x14, '3'), + (0x15, '3'), + (0x16, '3'), + (0x17, '3'), + (0x18, '3'), + (0x19, '3'), + (0x1A, '3'), + (0x1B, '3'), + (0x1C, '3'), + (0x1D, '3'), + (0x1E, '3'), + (0x1F, '3'), + (0x20, '3'), + (0x21, '3'), + (0x22, '3'), + (0x23, '3'), + (0x24, '3'), + (0x25, '3'), + (0x26, '3'), + (0x27, '3'), + (0x28, '3'), + (0x29, '3'), + (0x2A, '3'), + (0x2B, '3'), + (0x2C, '3'), + (0x2D, 'V'), + (0x2E, 'V'), + (0x2F, '3'), + (0x30, 'V'), + (0x31, 'V'), + (0x32, 'V'), + (0x33, 'V'), + (0x34, 'V'), + (0x35, 'V'), + (0x36, 'V'), + (0x37, 'V'), + (0x38, 'V'), + (0x39, 'V'), + (0x3A, '3'), + (0x3B, '3'), + (0x3C, '3'), + (0x3D, '3'), + (0x3E, '3'), + (0x3F, '3'), + (0x40, '3'), + (0x41, 'M', u'a'), + (0x42, 'M', u'b'), + (0x43, 'M', u'c'), + (0x44, 'M', u'd'), + (0x45, 'M', u'e'), + (0x46, 'M', u'f'), + (0x47, 'M', u'g'), + (0x48, 'M', u'h'), + (0x49, 'M', u'i'), + (0x4A, 'M', u'j'), + (0x4B, 'M', u'k'), + (0x4C, 'M', u'l'), + (0x4D, 'M', u'm'), + (0x4E, 'M', u'n'), + (0x4F, 'M', u'o'), + (0x50, 'M', u'p'), + (0x51, 'M', u'q'), + (0x52, 'M', u'r'), + (0x53, 'M', u's'), + (0x54, 'M', u't'), + (0x55, 'M', u'u'), + (0x56, 'M', u'v'), + (0x57, 'M', u'w'), + (0x58, 'M', u'x'), + (0x59, 'M', u'y'), + (0x5A, 'M', u'z'), + (0x5B, '3'), + (0x5C, '3'), + (0x5D, '3'), + (0x5E, '3'), + (0x5F, '3'), + (0x60, '3'), + (0x61, 'V'), + (0x62, 'V'), + (0x63, 'V'), + ] + +def _seg_1(): + 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, '3'), + (0x7C, '3'), + (0x7D, '3'), + (0x7E, '3'), + (0x7F, '3'), + (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, '3', u' '), + (0xA1, 'V'), + (0xA2, 'V'), + (0xA3, 'V'), + (0xA4, 'V'), + (0xA5, 'V'), + (0xA6, 'V'), + (0xA7, 'V'), + (0xA8, '3', u' ̈'), + (0xA9, 'V'), + (0xAA, 'M', u'a'), + (0xAB, 'V'), + (0xAC, 'V'), + (0xAD, 'I'), + (0xAE, 'V'), + (0xAF, '3', u' ̄'), + (0xB0, 'V'), + (0xB1, 'V'), + (0xB2, 'M', u'2'), + (0xB3, 'M', u'3'), + (0xB4, '3', u' ́'), + (0xB5, 'M', u'μ'), + (0xB6, 'V'), + (0xB7, 'V'), + (0xB8, '3', u' ̧'), + (0xB9, 'M', u'1'), + (0xBA, 'M', u'o'), + (0xBB, 'V'), + (0xBC, 'M', u'1⁄4'), + (0xBD, 'M', u'1⁄2'), + (0xBE, 'M', u'3⁄4'), + (0xBF, 'V'), + (0xC0, 'M', u'à'), + (0xC1, 'M', u'á'), + (0xC2, 'M', u'â'), + (0xC3, 'M', u'ã'), + (0xC4, 'M', u'ä'), + (0xC5, 'M', u'å'), + (0xC6, 'M', u'æ'), + (0xC7, 'M', u'ç'), + ] + +def _seg_2(): + return [ + (0xC8, 'M', u'è'), + (0xC9, 'M', u'é'), + (0xCA, 'M', u'ê'), + (0xCB, 'M', u'ë'), + (0xCC, 'M', u'ì'), + (0xCD, 'M', u'í'), + (0xCE, 'M', u'î'), + (0xCF, 'M', u'ï'), + (0xD0, 'M', u'ð'), + (0xD1, 'M', u'ñ'), + (0xD2, 'M', u'ò'), + (0xD3, 'M', u'ó'), + (0xD4, 'M', u'ô'), + (0xD5, 'M', u'õ'), + (0xD6, 'M', u'ö'), + (0xD7, 'V'), + (0xD8, 'M', u'ø'), + (0xD9, 'M', u'ù'), + (0xDA, 'M', u'ú'), + (0xDB, 'M', u'û'), + (0xDC, 'M', u'ü'), + (0xDD, 'M', u'ý'), + (0xDE, 'M', u'þ'), + (0xDF, 'D', u'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', u'ā'), + (0x101, 'V'), + (0x102, 'M', u'ă'), + (0x103, 'V'), + (0x104, 'M', u'ą'), + (0x105, 'V'), + (0x106, 'M', u'ć'), + (0x107, 'V'), + (0x108, 'M', u'ĉ'), + (0x109, 'V'), + (0x10A, 'M', u'ċ'), + (0x10B, 'V'), + (0x10C, 'M', u'č'), + (0x10D, 'V'), + (0x10E, 'M', u'ď'), + (0x10F, 'V'), + (0x110, 'M', u'đ'), + (0x111, 'V'), + (0x112, 'M', u'ē'), + (0x113, 'V'), + (0x114, 'M', u'ĕ'), + (0x115, 'V'), + (0x116, 'M', u'ė'), + (0x117, 'V'), + (0x118, 'M', u'ę'), + (0x119, 'V'), + (0x11A, 'M', u'ě'), + (0x11B, 'V'), + (0x11C, 'M', u'ĝ'), + (0x11D, 'V'), + (0x11E, 'M', u'ğ'), + (0x11F, 'V'), + (0x120, 'M', u'ġ'), + (0x121, 'V'), + (0x122, 'M', u'ģ'), + (0x123, 'V'), + (0x124, 'M', u'ĥ'), + (0x125, 'V'), + (0x126, 'M', u'ħ'), + (0x127, 'V'), + (0x128, 'M', u'ĩ'), + (0x129, 'V'), + (0x12A, 'M', u'ī'), + (0x12B, 'V'), + ] + +def _seg_3(): + return [ + (0x12C, 'M', u'ĭ'), + (0x12D, 'V'), + (0x12E, 'M', u'į'), + (0x12F, 'V'), + (0x130, 'M', u'i̇'), + (0x131, 'V'), + (0x132, 'M', u'ij'), + (0x134, 'M', u'ĵ'), + (0x135, 'V'), + (0x136, 'M', u'ķ'), + (0x137, 'V'), + (0x139, 'M', u'ĺ'), + (0x13A, 'V'), + (0x13B, 'M', u'ļ'), + (0x13C, 'V'), + (0x13D, 'M', u'ľ'), + (0x13E, 'V'), + (0x13F, 'M', u'l·'), + (0x141, 'M', u'ł'), + (0x142, 'V'), + (0x143, 'M', u'ń'), + (0x144, 'V'), + (0x145, 'M', u'ņ'), + (0x146, 'V'), + (0x147, 'M', u'ň'), + (0x148, 'V'), + (0x149, 'M', u'ʼn'), + (0x14A, 'M', u'ŋ'), + (0x14B, 'V'), + (0x14C, 'M', u'ō'), + (0x14D, 'V'), + (0x14E, 'M', u'ŏ'), + (0x14F, 'V'), + (0x150, 'M', u'ő'), + (0x151, 'V'), + (0x152, 'M', u'œ'), + (0x153, 'V'), + (0x154, 'M', u'ŕ'), + (0x155, 'V'), + (0x156, 'M', u'ŗ'), + (0x157, 'V'), + (0x158, 'M', u'ř'), + (0x159, 'V'), + (0x15A, 'M', u'ś'), + (0x15B, 'V'), + (0x15C, 'M', u'ŝ'), + (0x15D, 'V'), + (0x15E, 'M', u'ş'), + (0x15F, 'V'), + (0x160, 'M', u'š'), + (0x161, 'V'), + (0x162, 'M', u'ţ'), + (0x163, 'V'), + (0x164, 'M', u'ť'), + (0x165, 'V'), + (0x166, 'M', u'ŧ'), + (0x167, 'V'), + (0x168, 'M', u'ũ'), + (0x169, 'V'), + (0x16A, 'M', u'ū'), + (0x16B, 'V'), + (0x16C, 'M', u'ŭ'), + (0x16D, 'V'), + (0x16E, 'M', u'ů'), + (0x16F, 'V'), + (0x170, 'M', u'ű'), + (0x171, 'V'), + (0x172, 'M', u'ų'), + (0x173, 'V'), + (0x174, 'M', u'ŵ'), + (0x175, 'V'), + (0x176, 'M', u'ŷ'), + (0x177, 'V'), + (0x178, 'M', u'ÿ'), + (0x179, 'M', u'ź'), + (0x17A, 'V'), + (0x17B, 'M', u'ż'), + (0x17C, 'V'), + (0x17D, 'M', u'ž'), + (0x17E, 'V'), + (0x17F, 'M', u's'), + (0x180, 'V'), + (0x181, 'M', u'ɓ'), + (0x182, 'M', u'ƃ'), + (0x183, 'V'), + (0x184, 'M', u'ƅ'), + (0x185, 'V'), + (0x186, 'M', u'ɔ'), + (0x187, 'M', u'ƈ'), + (0x188, 'V'), + (0x189, 'M', u'ɖ'), + (0x18A, 'M', u'ɗ'), + (0x18B, 'M', u'ƌ'), + (0x18C, 'V'), + (0x18E, 'M', u'ǝ'), + (0x18F, 'M', u'ə'), + (0x190, 'M', u'ɛ'), + (0x191, 'M', u'ƒ'), + (0x192, 'V'), + (0x193, 'M', u'ɠ'), + ] + +def _seg_4(): + return [ + (0x194, 'M', u'ɣ'), + (0x195, 'V'), + (0x196, 'M', u'ɩ'), + (0x197, 'M', u'ɨ'), + (0x198, 'M', u'ƙ'), + (0x199, 'V'), + (0x19C, 'M', u'ɯ'), + (0x19D, 'M', u'ɲ'), + (0x19E, 'V'), + (0x19F, 'M', u'ɵ'), + (0x1A0, 'M', u'ơ'), + (0x1A1, 'V'), + (0x1A2, 'M', u'ƣ'), + (0x1A3, 'V'), + (0x1A4, 'M', u'ƥ'), + (0x1A5, 'V'), + (0x1A6, 'M', u'ʀ'), + (0x1A7, 'M', u'ƨ'), + (0x1A8, 'V'), + (0x1A9, 'M', u'ʃ'), + (0x1AA, 'V'), + (0x1AC, 'M', u'ƭ'), + (0x1AD, 'V'), + (0x1AE, 'M', u'ʈ'), + (0x1AF, 'M', u'ư'), + (0x1B0, 'V'), + (0x1B1, 'M', u'ʊ'), + (0x1B2, 'M', u'ʋ'), + (0x1B3, 'M', u'ƴ'), + (0x1B4, 'V'), + (0x1B5, 'M', u'ƶ'), + (0x1B6, 'V'), + (0x1B7, 'M', u'ʒ'), + (0x1B8, 'M', u'ƹ'), + (0x1B9, 'V'), + (0x1BC, 'M', u'ƽ'), + (0x1BD, 'V'), + (0x1C4, 'M', u'dž'), + (0x1C7, 'M', u'lj'), + (0x1CA, 'M', u'nj'), + (0x1CD, 'M', u'ǎ'), + (0x1CE, 'V'), + (0x1CF, 'M', u'ǐ'), + (0x1D0, 'V'), + (0x1D1, 'M', u'ǒ'), + (0x1D2, 'V'), + (0x1D3, 'M', u'ǔ'), + (0x1D4, 'V'), + (0x1D5, 'M', u'ǖ'), + (0x1D6, 'V'), + (0x1D7, 'M', u'ǘ'), + (0x1D8, 'V'), + (0x1D9, 'M', u'ǚ'), + (0x1DA, 'V'), + (0x1DB, 'M', u'ǜ'), + (0x1DC, 'V'), + (0x1DE, 'M', u'ǟ'), + (0x1DF, 'V'), + (0x1E0, 'M', u'ǡ'), + (0x1E1, 'V'), + (0x1E2, 'M', u'ǣ'), + (0x1E3, 'V'), + (0x1E4, 'M', u'ǥ'), + (0x1E5, 'V'), + (0x1E6, 'M', u'ǧ'), + (0x1E7, 'V'), + (0x1E8, 'M', u'ǩ'), + (0x1E9, 'V'), + (0x1EA, 'M', u'ǫ'), + (0x1EB, 'V'), + (0x1EC, 'M', u'ǭ'), + (0x1ED, 'V'), + (0x1EE, 'M', u'ǯ'), + (0x1EF, 'V'), + (0x1F1, 'M', u'dz'), + (0x1F4, 'M', u'ǵ'), + (0x1F5, 'V'), + (0x1F6, 'M', u'ƕ'), + (0x1F7, 'M', u'ƿ'), + (0x1F8, 'M', u'ǹ'), + (0x1F9, 'V'), + (0x1FA, 'M', u'ǻ'), + (0x1FB, 'V'), + (0x1FC, 'M', u'ǽ'), + (0x1FD, 'V'), + (0x1FE, 'M', u'ǿ'), + (0x1FF, 'V'), + (0x200, 'M', u'ȁ'), + (0x201, 'V'), + (0x202, 'M', u'ȃ'), + (0x203, 'V'), + (0x204, 'M', u'ȅ'), + (0x205, 'V'), + (0x206, 'M', u'ȇ'), + (0x207, 'V'), + (0x208, 'M', u'ȉ'), + (0x209, 'V'), + (0x20A, 'M', u'ȋ'), + (0x20B, 'V'), + (0x20C, 'M', u'ȍ'), + ] + +def _seg_5(): + return [ + (0x20D, 'V'), + (0x20E, 'M', u'ȏ'), + (0x20F, 'V'), + (0x210, 'M', u'ȑ'), + (0x211, 'V'), + (0x212, 'M', u'ȓ'), + (0x213, 'V'), + (0x214, 'M', u'ȕ'), + (0x215, 'V'), + (0x216, 'M', u'ȗ'), + (0x217, 'V'), + (0x218, 'M', u'ș'), + (0x219, 'V'), + (0x21A, 'M', u'ț'), + (0x21B, 'V'), + (0x21C, 'M', u'ȝ'), + (0x21D, 'V'), + (0x21E, 'M', u'ȟ'), + (0x21F, 'V'), + (0x220, 'M', u'ƞ'), + (0x221, 'V'), + (0x222, 'M', u'ȣ'), + (0x223, 'V'), + (0x224, 'M', u'ȥ'), + (0x225, 'V'), + (0x226, 'M', u'ȧ'), + (0x227, 'V'), + (0x228, 'M', u'ȩ'), + (0x229, 'V'), + (0x22A, 'M', u'ȫ'), + (0x22B, 'V'), + (0x22C, 'M', u'ȭ'), + (0x22D, 'V'), + (0x22E, 'M', u'ȯ'), + (0x22F, 'V'), + (0x230, 'M', u'ȱ'), + (0x231, 'V'), + (0x232, 'M', u'ȳ'), + (0x233, 'V'), + (0x23A, 'M', u'ⱥ'), + (0x23B, 'M', u'ȼ'), + (0x23C, 'V'), + (0x23D, 'M', u'ƚ'), + (0x23E, 'M', u'ⱦ'), + (0x23F, 'V'), + (0x241, 'M', u'ɂ'), + (0x242, 'V'), + (0x243, 'M', u'ƀ'), + (0x244, 'M', u'ʉ'), + (0x245, 'M', u'ʌ'), + (0x246, 'M', u'ɇ'), + (0x247, 'V'), + (0x248, 'M', u'ɉ'), + (0x249, 'V'), + (0x24A, 'M', u'ɋ'), + (0x24B, 'V'), + (0x24C, 'M', u'ɍ'), + (0x24D, 'V'), + (0x24E, 'M', u'ɏ'), + (0x24F, 'V'), + (0x2B0, 'M', u'h'), + (0x2B1, 'M', u'ɦ'), + (0x2B2, 'M', u'j'), + (0x2B3, 'M', u'r'), + (0x2B4, 'M', u'ɹ'), + (0x2B5, 'M', u'ɻ'), + (0x2B6, 'M', u'ʁ'), + (0x2B7, 'M', u'w'), + (0x2B8, 'M', u'y'), + (0x2B9, 'V'), + (0x2D8, '3', u' ̆'), + (0x2D9, '3', u' ̇'), + (0x2DA, '3', u' ̊'), + (0x2DB, '3', u' ̨'), + (0x2DC, '3', u' ̃'), + (0x2DD, '3', u' ̋'), + (0x2DE, 'V'), + (0x2E0, 'M', u'ɣ'), + (0x2E1, 'M', u'l'), + (0x2E2, 'M', u's'), + (0x2E3, 'M', u'x'), + (0x2E4, 'M', u'ʕ'), + (0x2E5, 'V'), + (0x340, 'M', u'̀'), + (0x341, 'M', u'́'), + (0x342, 'V'), + (0x343, 'M', u'̓'), + (0x344, 'M', u'̈́'), + (0x345, 'M', u'ι'), + (0x346, 'V'), + (0x34F, 'I'), + (0x350, 'V'), + (0x370, 'M', u'ͱ'), + (0x371, 'V'), + (0x372, 'M', u'ͳ'), + (0x373, 'V'), + (0x374, 'M', u'ʹ'), + (0x375, 'V'), + (0x376, 'M', u'ͷ'), + (0x377, 'V'), + ] + +def _seg_6(): + return [ + (0x378, 'X'), + (0x37A, '3', u' ι'), + (0x37B, 'V'), + (0x37E, '3', u';'), + (0x37F, 'M', u'ϳ'), + (0x380, 'X'), + (0x384, '3', u' ́'), + (0x385, '3', u' ̈́'), + (0x386, 'M', u'ά'), + (0x387, 'M', u'·'), + (0x388, 'M', u'έ'), + (0x389, 'M', u'ή'), + (0x38A, 'M', u'ί'), + (0x38B, 'X'), + (0x38C, 'M', u'ό'), + (0x38D, 'X'), + (0x38E, 'M', u'ύ'), + (0x38F, 'M', u'ώ'), + (0x390, 'V'), + (0x391, 'M', u'α'), + (0x392, 'M', u'β'), + (0x393, 'M', u'γ'), + (0x394, 'M', u'δ'), + (0x395, 'M', u'ε'), + (0x396, 'M', u'ζ'), + (0x397, 'M', u'η'), + (0x398, 'M', u'θ'), + (0x399, 'M', u'ι'), + (0x39A, 'M', u'κ'), + (0x39B, 'M', u'λ'), + (0x39C, 'M', u'μ'), + (0x39D, 'M', u'ν'), + (0x39E, 'M', u'ξ'), + (0x39F, 'M', u'ο'), + (0x3A0, 'M', u'π'), + (0x3A1, 'M', u'ρ'), + (0x3A2, 'X'), + (0x3A3, 'M', u'σ'), + (0x3A4, 'M', u'τ'), + (0x3A5, 'M', u'υ'), + (0x3A6, 'M', u'φ'), + (0x3A7, 'M', u'χ'), + (0x3A8, 'M', u'ψ'), + (0x3A9, 'M', u'ω'), + (0x3AA, 'M', u'ϊ'), + (0x3AB, 'M', u'ϋ'), + (0x3AC, 'V'), + (0x3C2, 'D', u'σ'), + (0x3C3, 'V'), + (0x3CF, 'M', u'ϗ'), + (0x3D0, 'M', u'β'), + (0x3D1, 'M', u'θ'), + (0x3D2, 'M', u'υ'), + (0x3D3, 'M', u'ύ'), + (0x3D4, 'M', u'ϋ'), + (0x3D5, 'M', u'φ'), + (0x3D6, 'M', u'π'), + (0x3D7, 'V'), + (0x3D8, 'M', u'ϙ'), + (0x3D9, 'V'), + (0x3DA, 'M', u'ϛ'), + (0x3DB, 'V'), + (0x3DC, 'M', u'ϝ'), + (0x3DD, 'V'), + (0x3DE, 'M', u'ϟ'), + (0x3DF, 'V'), + (0x3E0, 'M', u'ϡ'), + (0x3E1, 'V'), + (0x3E2, 'M', u'ϣ'), + (0x3E3, 'V'), + (0x3E4, 'M', u'ϥ'), + (0x3E5, 'V'), + (0x3E6, 'M', u'ϧ'), + (0x3E7, 'V'), + (0x3E8, 'M', u'ϩ'), + (0x3E9, 'V'), + (0x3EA, 'M', u'ϫ'), + (0x3EB, 'V'), + (0x3EC, 'M', u'ϭ'), + (0x3ED, 'V'), + (0x3EE, 'M', u'ϯ'), + (0x3EF, 'V'), + (0x3F0, 'M', u'κ'), + (0x3F1, 'M', u'ρ'), + (0x3F2, 'M', u'σ'), + (0x3F3, 'V'), + (0x3F4, 'M', u'θ'), + (0x3F5, 'M', u'ε'), + (0x3F6, 'V'), + (0x3F7, 'M', u'ϸ'), + (0x3F8, 'V'), + (0x3F9, 'M', u'σ'), + (0x3FA, 'M', u'ϻ'), + (0x3FB, 'V'), + (0x3FD, 'M', u'ͻ'), + (0x3FE, 'M', u'ͼ'), + (0x3FF, 'M', u'ͽ'), + (0x400, 'M', u'ѐ'), + (0x401, 'M', u'ё'), + (0x402, 'M', u'ђ'), + ] + +def _seg_7(): + return [ + (0x403, 'M', u'ѓ'), + (0x404, 'M', u'є'), + (0x405, 'M', u'ѕ'), + (0x406, 'M', u'і'), + (0x407, 'M', u'ї'), + (0x408, 'M', u'ј'), + (0x409, 'M', u'љ'), + (0x40A, 'M', u'њ'), + (0x40B, 'M', u'ћ'), + (0x40C, 'M', u'ќ'), + (0x40D, 'M', u'ѝ'), + (0x40E, 'M', u'ў'), + (0x40F, 'M', u'џ'), + (0x410, 'M', u'а'), + (0x411, 'M', u'б'), + (0x412, 'M', u'в'), + (0x413, 'M', u'г'), + (0x414, 'M', u'д'), + (0x415, 'M', u'е'), + (0x416, 'M', u'ж'), + (0x417, 'M', u'з'), + (0x418, 'M', u'и'), + (0x419, 'M', u'й'), + (0x41A, 'M', u'к'), + (0x41B, 'M', u'л'), + (0x41C, 'M', u'м'), + (0x41D, 'M', u'н'), + (0x41E, 'M', u'о'), + (0x41F, 'M', u'п'), + (0x420, 'M', u'р'), + (0x421, 'M', u'с'), + (0x422, 'M', u'т'), + (0x423, 'M', u'у'), + (0x424, 'M', u'ф'), + (0x425, 'M', u'х'), + (0x426, 'M', u'ц'), + (0x427, 'M', u'ч'), + (0x428, 'M', u'ш'), + (0x429, 'M', u'щ'), + (0x42A, 'M', u'ъ'), + (0x42B, 'M', u'ы'), + (0x42C, 'M', u'ь'), + (0x42D, 'M', u'э'), + (0x42E, 'M', u'ю'), + (0x42F, 'M', u'я'), + (0x430, 'V'), + (0x460, 'M', u'ѡ'), + (0x461, 'V'), + (0x462, 'M', u'ѣ'), + (0x463, 'V'), + (0x464, 'M', u'ѥ'), + (0x465, 'V'), + (0x466, 'M', u'ѧ'), + (0x467, 'V'), + (0x468, 'M', u'ѩ'), + (0x469, 'V'), + (0x46A, 'M', u'ѫ'), + (0x46B, 'V'), + (0x46C, 'M', u'ѭ'), + (0x46D, 'V'), + (0x46E, 'M', u'ѯ'), + (0x46F, 'V'), + (0x470, 'M', u'ѱ'), + (0x471, 'V'), + (0x472, 'M', u'ѳ'), + (0x473, 'V'), + (0x474, 'M', u'ѵ'), + (0x475, 'V'), + (0x476, 'M', u'ѷ'), + (0x477, 'V'), + (0x478, 'M', u'ѹ'), + (0x479, 'V'), + (0x47A, 'M', u'ѻ'), + (0x47B, 'V'), + (0x47C, 'M', u'ѽ'), + (0x47D, 'V'), + (0x47E, 'M', u'ѿ'), + (0x47F, 'V'), + (0x480, 'M', u'ҁ'), + (0x481, 'V'), + (0x48A, 'M', u'ҋ'), + (0x48B, 'V'), + (0x48C, 'M', u'ҍ'), + (0x48D, 'V'), + (0x48E, 'M', u'ҏ'), + (0x48F, 'V'), + (0x490, 'M', u'ґ'), + (0x491, 'V'), + (0x492, 'M', u'ғ'), + (0x493, 'V'), + (0x494, 'M', u'ҕ'), + (0x495, 'V'), + (0x496, 'M', u'җ'), + (0x497, 'V'), + (0x498, 'M', u'ҙ'), + (0x499, 'V'), + (0x49A, 'M', u'қ'), + (0x49B, 'V'), + (0x49C, 'M', u'ҝ'), + (0x49D, 'V'), + ] + +def _seg_8(): + return [ + (0x49E, 'M', u'ҟ'), + (0x49F, 'V'), + (0x4A0, 'M', u'ҡ'), + (0x4A1, 'V'), + (0x4A2, 'M', u'ң'), + (0x4A3, 'V'), + (0x4A4, 'M', u'ҥ'), + (0x4A5, 'V'), + (0x4A6, 'M', u'ҧ'), + (0x4A7, 'V'), + (0x4A8, 'M', u'ҩ'), + (0x4A9, 'V'), + (0x4AA, 'M', u'ҫ'), + (0x4AB, 'V'), + (0x4AC, 'M', u'ҭ'), + (0x4AD, 'V'), + (0x4AE, 'M', u'ү'), + (0x4AF, 'V'), + (0x4B0, 'M', u'ұ'), + (0x4B1, 'V'), + (0x4B2, 'M', u'ҳ'), + (0x4B3, 'V'), + (0x4B4, 'M', u'ҵ'), + (0x4B5, 'V'), + (0x4B6, 'M', u'ҷ'), + (0x4B7, 'V'), + (0x4B8, 'M', u'ҹ'), + (0x4B9, 'V'), + (0x4BA, 'M', u'һ'), + (0x4BB, 'V'), + (0x4BC, 'M', u'ҽ'), + (0x4BD, 'V'), + (0x4BE, 'M', u'ҿ'), + (0x4BF, 'V'), + (0x4C0, 'X'), + (0x4C1, 'M', u'ӂ'), + (0x4C2, 'V'), + (0x4C3, 'M', u'ӄ'), + (0x4C4, 'V'), + (0x4C5, 'M', u'ӆ'), + (0x4C6, 'V'), + (0x4C7, 'M', u'ӈ'), + (0x4C8, 'V'), + (0x4C9, 'M', u'ӊ'), + (0x4CA, 'V'), + (0x4CB, 'M', u'ӌ'), + (0x4CC, 'V'), + (0x4CD, 'M', u'ӎ'), + (0x4CE, 'V'), + (0x4D0, 'M', u'ӑ'), + (0x4D1, 'V'), + (0x4D2, 'M', u'ӓ'), + (0x4D3, 'V'), + (0x4D4, 'M', u'ӕ'), + (0x4D5, 'V'), + (0x4D6, 'M', u'ӗ'), + (0x4D7, 'V'), + (0x4D8, 'M', u'ә'), + (0x4D9, 'V'), + (0x4DA, 'M', u'ӛ'), + (0x4DB, 'V'), + (0x4DC, 'M', u'ӝ'), + (0x4DD, 'V'), + (0x4DE, 'M', u'ӟ'), + (0x4DF, 'V'), + (0x4E0, 'M', u'ӡ'), + (0x4E1, 'V'), + (0x4E2, 'M', u'ӣ'), + (0x4E3, 'V'), + (0x4E4, 'M', u'ӥ'), + (0x4E5, 'V'), + (0x4E6, 'M', u'ӧ'), + (0x4E7, 'V'), + (0x4E8, 'M', u'ө'), + (0x4E9, 'V'), + (0x4EA, 'M', u'ӫ'), + (0x4EB, 'V'), + (0x4EC, 'M', u'ӭ'), + (0x4ED, 'V'), + (0x4EE, 'M', u'ӯ'), + (0x4EF, 'V'), + (0x4F0, 'M', u'ӱ'), + (0x4F1, 'V'), + (0x4F2, 'M', u'ӳ'), + (0x4F3, 'V'), + (0x4F4, 'M', u'ӵ'), + (0x4F5, 'V'), + (0x4F6, 'M', u'ӷ'), + (0x4F7, 'V'), + (0x4F8, 'M', u'ӹ'), + (0x4F9, 'V'), + (0x4FA, 'M', u'ӻ'), + (0x4FB, 'V'), + (0x4FC, 'M', u'ӽ'), + (0x4FD, 'V'), + (0x4FE, 'M', u'ӿ'), + (0x4FF, 'V'), + (0x500, 'M', u'ԁ'), + (0x501, 'V'), + (0x502, 'M', u'ԃ'), + ] + +def _seg_9(): + return [ + (0x503, 'V'), + (0x504, 'M', u'ԅ'), + (0x505, 'V'), + (0x506, 'M', u'ԇ'), + (0x507, 'V'), + (0x508, 'M', u'ԉ'), + (0x509, 'V'), + (0x50A, 'M', u'ԋ'), + (0x50B, 'V'), + (0x50C, 'M', u'ԍ'), + (0x50D, 'V'), + (0x50E, 'M', u'ԏ'), + (0x50F, 'V'), + (0x510, 'M', u'ԑ'), + (0x511, 'V'), + (0x512, 'M', u'ԓ'), + (0x513, 'V'), + (0x514, 'M', u'ԕ'), + (0x515, 'V'), + (0x516, 'M', u'ԗ'), + (0x517, 'V'), + (0x518, 'M', u'ԙ'), + (0x519, 'V'), + (0x51A, 'M', u'ԛ'), + (0x51B, 'V'), + (0x51C, 'M', u'ԝ'), + (0x51D, 'V'), + (0x51E, 'M', u'ԟ'), + (0x51F, 'V'), + (0x520, 'M', u'ԡ'), + (0x521, 'V'), + (0x522, 'M', u'ԣ'), + (0x523, 'V'), + (0x524, 'M', u'ԥ'), + (0x525, 'V'), + (0x526, 'M', u'ԧ'), + (0x527, 'V'), + (0x528, 'M', u'ԩ'), + (0x529, 'V'), + (0x52A, 'M', u'ԫ'), + (0x52B, 'V'), + (0x52C, 'M', u'ԭ'), + (0x52D, 'V'), + (0x52E, 'M', u'ԯ'), + (0x52F, 'V'), + (0x530, 'X'), + (0x531, 'M', u'ա'), + (0x532, 'M', u'բ'), + (0x533, 'M', u'գ'), + (0x534, 'M', u'դ'), + (0x535, 'M', u'ե'), + (0x536, 'M', u'զ'), + (0x537, 'M', u'է'), + (0x538, 'M', u'ը'), + (0x539, 'M', u'թ'), + (0x53A, 'M', u'ժ'), + (0x53B, 'M', u'ի'), + (0x53C, 'M', u'լ'), + (0x53D, 'M', u'խ'), + (0x53E, 'M', u'ծ'), + (0x53F, 'M', u'կ'), + (0x540, 'M', u'հ'), + (0x541, 'M', u'ձ'), + (0x542, 'M', u'ղ'), + (0x543, 'M', u'ճ'), + (0x544, 'M', u'մ'), + (0x545, 'M', u'յ'), + (0x546, 'M', u'ն'), + (0x547, 'M', u'շ'), + (0x548, 'M', u'ո'), + (0x549, 'M', u'չ'), + (0x54A, 'M', u'պ'), + (0x54B, 'M', u'ջ'), + (0x54C, 'M', u'ռ'), + (0x54D, 'M', u'ս'), + (0x54E, 'M', u'վ'), + (0x54F, 'M', u'տ'), + (0x550, 'M', u'ր'), + (0x551, 'M', u'ց'), + (0x552, 'M', u'ւ'), + (0x553, 'M', u'փ'), + (0x554, 'M', u'ք'), + (0x555, 'M', u'օ'), + (0x556, 'M', u'ֆ'), + (0x557, 'X'), + (0x559, 'V'), + (0x587, 'M', u'եւ'), + (0x588, 'V'), + (0x58B, 'X'), + (0x58D, 'V'), + (0x590, 'X'), + (0x591, 'V'), + (0x5C8, 'X'), + (0x5D0, 'V'), + (0x5EB, 'X'), + (0x5EF, 'V'), + (0x5F5, 'X'), + (0x606, 'V'), + (0x61C, 'X'), + (0x61E, 'V'), + ] + +def _seg_10(): + return [ + (0x675, 'M', u'اٴ'), + (0x676, 'M', u'وٴ'), + (0x677, 'M', u'ۇٴ'), + (0x678, 'M', u'يٴ'), + (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'), + (0x8A0, 'V'), + (0x8B5, 'X'), + (0x8B6, 'V'), + (0x8BE, 'X'), + (0x8D3, 'V'), + (0x8E2, 'X'), + (0x8E3, 'V'), + (0x958, 'M', u'क़'), + (0x959, 'M', u'ख़'), + (0x95A, 'M', u'ग़'), + (0x95B, 'M', u'ज़'), + (0x95C, 'M', u'ड़'), + (0x95D, 'M', u'ढ़'), + (0x95E, 'M', u'फ़'), + (0x95F, 'M', u'य़'), + (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', u'ড়'), + (0x9DD, 'M', u'ঢ়'), + (0x9DE, 'X'), + (0x9DF, 'M', u'য়'), + (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', u'ਲ਼'), + (0xA34, 'X'), + (0xA35, 'V'), + (0xA36, 'M', u'ਸ਼'), + (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', u'ਖ਼'), + (0xA5A, 'M', u'ਗ਼'), + (0xA5B, 'M', u'ਜ਼'), + ] + +def _seg_11(): + return [ + (0xA5C, 'V'), + (0xA5D, 'X'), + (0xA5E, 'M', u'ਫ਼'), + (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'), + (0xB56, 'V'), + (0xB58, 'X'), + (0xB5C, 'M', u'ଡ଼'), + (0xB5D, 'M', u'ଢ଼'), + (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'), + ] + +def _seg_12(): + return [ + (0xC29, 'X'), + (0xC2A, 'V'), + (0xC3A, 'X'), + (0xC3D, 'V'), + (0xC45, 'X'), + (0xC46, 'V'), + (0xC49, 'X'), + (0xC4A, 'V'), + (0xC4E, 'X'), + (0xC55, 'V'), + (0xC57, 'X'), + (0xC58, 'V'), + (0xC5B, 'X'), + (0xC60, 'V'), + (0xC64, 'X'), + (0xC66, 'V'), + (0xC70, 'X'), + (0xC78, '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'), + (0xCDE, 'V'), + (0xCDF, 'X'), + (0xCE0, 'V'), + (0xCE4, 'X'), + (0xCE6, 'V'), + (0xCF0, 'X'), + (0xCF1, 'V'), + (0xCF3, 'X'), + (0xD00, 'V'), + (0xD04, 'X'), + (0xD05, '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'), + (0xD82, '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', u'ํา'), + (0xE34, 'V'), + (0xE3B, 'X'), + (0xE3F, 'V'), + (0xE5C, 'X'), + (0xE81, 'V'), + (0xE83, 'X'), + (0xE84, 'V'), + (0xE85, 'X'), + (0xE87, 'V'), + (0xE89, 'X'), + (0xE8A, 'V'), + (0xE8B, 'X'), + (0xE8D, 'V'), + (0xE8E, 'X'), + (0xE94, 'V'), + ] + +def _seg_13(): + return [ + (0xE98, 'X'), + (0xE99, 'V'), + (0xEA0, 'X'), + (0xEA1, 'V'), + (0xEA4, 'X'), + (0xEA5, 'V'), + (0xEA6, 'X'), + (0xEA7, 'V'), + (0xEA8, 'X'), + (0xEAA, 'V'), + (0xEAC, 'X'), + (0xEAD, 'V'), + (0xEB3, 'M', u'ໍາ'), + (0xEB4, 'V'), + (0xEBA, 'X'), + (0xEBB, 'V'), + (0xEBE, 'X'), + (0xEC0, 'V'), + (0xEC5, 'X'), + (0xEC6, 'V'), + (0xEC7, 'X'), + (0xEC8, 'V'), + (0xECE, 'X'), + (0xED0, 'V'), + (0xEDA, 'X'), + (0xEDC, 'M', u'ຫນ'), + (0xEDD, 'M', u'ຫມ'), + (0xEDE, 'V'), + (0xEE0, 'X'), + (0xF00, 'V'), + (0xF0C, 'M', u'་'), + (0xF0D, 'V'), + (0xF43, 'M', u'གྷ'), + (0xF44, 'V'), + (0xF48, 'X'), + (0xF49, 'V'), + (0xF4D, 'M', u'ཌྷ'), + (0xF4E, 'V'), + (0xF52, 'M', u'དྷ'), + (0xF53, 'V'), + (0xF57, 'M', u'བྷ'), + (0xF58, 'V'), + (0xF5C, 'M', u'ཛྷ'), + (0xF5D, 'V'), + (0xF69, 'M', u'ཀྵ'), + (0xF6A, 'V'), + (0xF6D, 'X'), + (0xF71, 'V'), + (0xF73, 'M', u'ཱི'), + (0xF74, 'V'), + (0xF75, 'M', u'ཱུ'), + (0xF76, 'M', u'ྲྀ'), + (0xF77, 'M', u'ྲཱྀ'), + (0xF78, 'M', u'ླྀ'), + (0xF79, 'M', u'ླཱྀ'), + (0xF7A, 'V'), + (0xF81, 'M', u'ཱྀ'), + (0xF82, 'V'), + (0xF93, 'M', u'ྒྷ'), + (0xF94, 'V'), + (0xF98, 'X'), + (0xF99, 'V'), + (0xF9D, 'M', u'ྜྷ'), + (0xF9E, 'V'), + (0xFA2, 'M', u'ྡྷ'), + (0xFA3, 'V'), + (0xFA7, 'M', u'ྦྷ'), + (0xFA8, 'V'), + (0xFAC, 'M', u'ྫྷ'), + (0xFAD, 'V'), + (0xFB9, 'M', u'ྐྵ'), + (0xFBA, 'V'), + (0xFBD, 'X'), + (0xFBE, 'V'), + (0xFCD, 'X'), + (0xFCE, 'V'), + (0xFDB, 'X'), + (0x1000, 'V'), + (0x10A0, 'X'), + (0x10C7, 'M', u'ⴧ'), + (0x10C8, 'X'), + (0x10CD, 'M', u'ⴭ'), + (0x10CE, 'X'), + (0x10D0, 'V'), + (0x10FC, 'M', u'ნ'), + (0x10FD, 'V'), + (0x115F, 'X'), + (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'), + ] + +def _seg_14(): + return [ + (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', u'Ᏸ'), + (0x13F9, 'M', u'Ᏹ'), + (0x13FA, 'M', u'Ᏺ'), + (0x13FB, 'M', u'Ᏻ'), + (0x13FC, 'M', u'Ᏼ'), + (0x13FD, 'M', u'Ᏽ'), + (0x13FE, 'X'), + (0x1400, 'V'), + (0x1680, 'X'), + (0x1681, 'V'), + (0x169D, 'X'), + (0x16A0, 'V'), + (0x16F9, 'X'), + (0x1700, 'V'), + (0x170D, 'X'), + (0x170E, 'V'), + (0x1715, 'X'), + (0x1720, 'V'), + (0x1737, 'X'), + (0x1740, 'V'), + (0x1754, 'X'), + (0x1760, 'V'), + (0x176D, 'X'), + (0x176E, 'V'), + (0x1771, 'X'), + (0x1772, 'V'), + (0x1774, 'X'), + (0x1780, 'V'), + (0x17B4, 'X'), + (0x17B6, 'V'), + (0x17DE, 'X'), + (0x17E0, 'V'), + (0x17EA, 'X'), + (0x17F0, 'V'), + (0x17FA, 'X'), + (0x1800, 'V'), + (0x1806, 'X'), + (0x1807, 'V'), + (0x180B, 'I'), + (0x180E, 'X'), + (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'), + (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'), + ] + +def _seg_15(): + return [ + (0x1A9A, 'X'), + (0x1AA0, 'V'), + (0x1AAE, 'X'), + (0x1AB0, 'V'), + (0x1ABF, 'X'), + (0x1B00, 'V'), + (0x1B4C, 'X'), + (0x1B50, 'V'), + (0x1B7D, 'X'), + (0x1B80, 'V'), + (0x1BF4, 'X'), + (0x1BFC, 'V'), + (0x1C38, 'X'), + (0x1C3B, 'V'), + (0x1C4A, 'X'), + (0x1C4D, 'V'), + (0x1C80, 'M', u'в'), + (0x1C81, 'M', u'д'), + (0x1C82, 'M', u'о'), + (0x1C83, 'M', u'с'), + (0x1C84, 'M', u'т'), + (0x1C86, 'M', u'ъ'), + (0x1C87, 'M', u'ѣ'), + (0x1C88, 'M', u'ꙋ'), + (0x1C89, 'X'), + (0x1CC0, 'V'), + (0x1CC8, 'X'), + (0x1CD0, 'V'), + (0x1CFA, 'X'), + (0x1D00, 'V'), + (0x1D2C, 'M', u'a'), + (0x1D2D, 'M', u'æ'), + (0x1D2E, 'M', u'b'), + (0x1D2F, 'V'), + (0x1D30, 'M', u'd'), + (0x1D31, 'M', u'e'), + (0x1D32, 'M', u'ǝ'), + (0x1D33, 'M', u'g'), + (0x1D34, 'M', u'h'), + (0x1D35, 'M', u'i'), + (0x1D36, 'M', u'j'), + (0x1D37, 'M', u'k'), + (0x1D38, 'M', u'l'), + (0x1D39, 'M', u'm'), + (0x1D3A, 'M', u'n'), + (0x1D3B, 'V'), + (0x1D3C, 'M', u'o'), + (0x1D3D, 'M', u'ȣ'), + (0x1D3E, 'M', u'p'), + (0x1D3F, 'M', u'r'), + (0x1D40, 'M', u't'), + (0x1D41, 'M', u'u'), + (0x1D42, 'M', u'w'), + (0x1D43, 'M', u'a'), + (0x1D44, 'M', u'ɐ'), + (0x1D45, 'M', u'ɑ'), + (0x1D46, 'M', u'ᴂ'), + (0x1D47, 'M', u'b'), + (0x1D48, 'M', u'd'), + (0x1D49, 'M', u'e'), + (0x1D4A, 'M', u'ə'), + (0x1D4B, 'M', u'ɛ'), + (0x1D4C, 'M', u'ɜ'), + (0x1D4D, 'M', u'g'), + (0x1D4E, 'V'), + (0x1D4F, 'M', u'k'), + (0x1D50, 'M', u'm'), + (0x1D51, 'M', u'ŋ'), + (0x1D52, 'M', u'o'), + (0x1D53, 'M', u'ɔ'), + (0x1D54, 'M', u'ᴖ'), + (0x1D55, 'M', u'ᴗ'), + (0x1D56, 'M', u'p'), + (0x1D57, 'M', u't'), + (0x1D58, 'M', u'u'), + (0x1D59, 'M', u'ᴝ'), + (0x1D5A, 'M', u'ɯ'), + (0x1D5B, 'M', u'v'), + (0x1D5C, 'M', u'ᴥ'), + (0x1D5D, 'M', u'β'), + (0x1D5E, 'M', u'γ'), + (0x1D5F, 'M', u'δ'), + (0x1D60, 'M', u'φ'), + (0x1D61, 'M', u'χ'), + (0x1D62, 'M', u'i'), + (0x1D63, 'M', u'r'), + (0x1D64, 'M', u'u'), + (0x1D65, 'M', u'v'), + (0x1D66, 'M', u'β'), + (0x1D67, 'M', u'γ'), + (0x1D68, 'M', u'ρ'), + (0x1D69, 'M', u'φ'), + (0x1D6A, 'M', u'χ'), + (0x1D6B, 'V'), + (0x1D78, 'M', u'н'), + (0x1D79, 'V'), + (0x1D9B, 'M', u'ɒ'), + (0x1D9C, 'M', u'c'), + (0x1D9D, 'M', u'ɕ'), + (0x1D9E, 'M', u'ð'), + ] + +def _seg_16(): + return [ + (0x1D9F, 'M', u'ɜ'), + (0x1DA0, 'M', u'f'), + (0x1DA1, 'M', u'ɟ'), + (0x1DA2, 'M', u'ɡ'), + (0x1DA3, 'M', u'ɥ'), + (0x1DA4, 'M', u'ɨ'), + (0x1DA5, 'M', u'ɩ'), + (0x1DA6, 'M', u'ɪ'), + (0x1DA7, 'M', u'ᵻ'), + (0x1DA8, 'M', u'ʝ'), + (0x1DA9, 'M', u'ɭ'), + (0x1DAA, 'M', u'ᶅ'), + (0x1DAB, 'M', u'ʟ'), + (0x1DAC, 'M', u'ɱ'), + (0x1DAD, 'M', u'ɰ'), + (0x1DAE, 'M', u'ɲ'), + (0x1DAF, 'M', u'ɳ'), + (0x1DB0, 'M', u'ɴ'), + (0x1DB1, 'M', u'ɵ'), + (0x1DB2, 'M', u'ɸ'), + (0x1DB3, 'M', u'ʂ'), + (0x1DB4, 'M', u'ʃ'), + (0x1DB5, 'M', u'ƫ'), + (0x1DB6, 'M', u'ʉ'), + (0x1DB7, 'M', u'ʊ'), + (0x1DB8, 'M', u'ᴜ'), + (0x1DB9, 'M', u'ʋ'), + (0x1DBA, 'M', u'ʌ'), + (0x1DBB, 'M', u'z'), + (0x1DBC, 'M', u'ʐ'), + (0x1DBD, 'M', u'ʑ'), + (0x1DBE, 'M', u'ʒ'), + (0x1DBF, 'M', u'θ'), + (0x1DC0, 'V'), + (0x1DFA, 'X'), + (0x1DFB, 'V'), + (0x1E00, 'M', u'ḁ'), + (0x1E01, 'V'), + (0x1E02, 'M', u'ḃ'), + (0x1E03, 'V'), + (0x1E04, 'M', u'ḅ'), + (0x1E05, 'V'), + (0x1E06, 'M', u'ḇ'), + (0x1E07, 'V'), + (0x1E08, 'M', u'ḉ'), + (0x1E09, 'V'), + (0x1E0A, 'M', u'ḋ'), + (0x1E0B, 'V'), + (0x1E0C, 'M', u'ḍ'), + (0x1E0D, 'V'), + (0x1E0E, 'M', u'ḏ'), + (0x1E0F, 'V'), + (0x1E10, 'M', u'ḑ'), + (0x1E11, 'V'), + (0x1E12, 'M', u'ḓ'), + (0x1E13, 'V'), + (0x1E14, 'M', u'ḕ'), + (0x1E15, 'V'), + (0x1E16, 'M', u'ḗ'), + (0x1E17, 'V'), + (0x1E18, 'M', u'ḙ'), + (0x1E19, 'V'), + (0x1E1A, 'M', u'ḛ'), + (0x1E1B, 'V'), + (0x1E1C, 'M', u'ḝ'), + (0x1E1D, 'V'), + (0x1E1E, 'M', u'ḟ'), + (0x1E1F, 'V'), + (0x1E20, 'M', u'ḡ'), + (0x1E21, 'V'), + (0x1E22, 'M', u'ḣ'), + (0x1E23, 'V'), + (0x1E24, 'M', u'ḥ'), + (0x1E25, 'V'), + (0x1E26, 'M', u'ḧ'), + (0x1E27, 'V'), + (0x1E28, 'M', u'ḩ'), + (0x1E29, 'V'), + (0x1E2A, 'M', u'ḫ'), + (0x1E2B, 'V'), + (0x1E2C, 'M', u'ḭ'), + (0x1E2D, 'V'), + (0x1E2E, 'M', u'ḯ'), + (0x1E2F, 'V'), + (0x1E30, 'M', u'ḱ'), + (0x1E31, 'V'), + (0x1E32, 'M', u'ḳ'), + (0x1E33, 'V'), + (0x1E34, 'M', u'ḵ'), + (0x1E35, 'V'), + (0x1E36, 'M', u'ḷ'), + (0x1E37, 'V'), + (0x1E38, 'M', u'ḹ'), + (0x1E39, 'V'), + (0x1E3A, 'M', u'ḻ'), + (0x1E3B, 'V'), + (0x1E3C, 'M', u'ḽ'), + (0x1E3D, 'V'), + (0x1E3E, 'M', u'ḿ'), + (0x1E3F, 'V'), + ] + +def _seg_17(): + return [ + (0x1E40, 'M', u'ṁ'), + (0x1E41, 'V'), + (0x1E42, 'M', u'ṃ'), + (0x1E43, 'V'), + (0x1E44, 'M', u'ṅ'), + (0x1E45, 'V'), + (0x1E46, 'M', u'ṇ'), + (0x1E47, 'V'), + (0x1E48, 'M', u'ṉ'), + (0x1E49, 'V'), + (0x1E4A, 'M', u'ṋ'), + (0x1E4B, 'V'), + (0x1E4C, 'M', u'ṍ'), + (0x1E4D, 'V'), + (0x1E4E, 'M', u'ṏ'), + (0x1E4F, 'V'), + (0x1E50, 'M', u'ṑ'), + (0x1E51, 'V'), + (0x1E52, 'M', u'ṓ'), + (0x1E53, 'V'), + (0x1E54, 'M', u'ṕ'), + (0x1E55, 'V'), + (0x1E56, 'M', u'ṗ'), + (0x1E57, 'V'), + (0x1E58, 'M', u'ṙ'), + (0x1E59, 'V'), + (0x1E5A, 'M', u'ṛ'), + (0x1E5B, 'V'), + (0x1E5C, 'M', u'ṝ'), + (0x1E5D, 'V'), + (0x1E5E, 'M', u'ṟ'), + (0x1E5F, 'V'), + (0x1E60, 'M', u'ṡ'), + (0x1E61, 'V'), + (0x1E62, 'M', u'ṣ'), + (0x1E63, 'V'), + (0x1E64, 'M', u'ṥ'), + (0x1E65, 'V'), + (0x1E66, 'M', u'ṧ'), + (0x1E67, 'V'), + (0x1E68, 'M', u'ṩ'), + (0x1E69, 'V'), + (0x1E6A, 'M', u'ṫ'), + (0x1E6B, 'V'), + (0x1E6C, 'M', u'ṭ'), + (0x1E6D, 'V'), + (0x1E6E, 'M', u'ṯ'), + (0x1E6F, 'V'), + (0x1E70, 'M', u'ṱ'), + (0x1E71, 'V'), + (0x1E72, 'M', u'ṳ'), + (0x1E73, 'V'), + (0x1E74, 'M', u'ṵ'), + (0x1E75, 'V'), + (0x1E76, 'M', u'ṷ'), + (0x1E77, 'V'), + (0x1E78, 'M', u'ṹ'), + (0x1E79, 'V'), + (0x1E7A, 'M', u'ṻ'), + (0x1E7B, 'V'), + (0x1E7C, 'M', u'ṽ'), + (0x1E7D, 'V'), + (0x1E7E, 'M', u'ṿ'), + (0x1E7F, 'V'), + (0x1E80, 'M', u'ẁ'), + (0x1E81, 'V'), + (0x1E82, 'M', u'ẃ'), + (0x1E83, 'V'), + (0x1E84, 'M', u'ẅ'), + (0x1E85, 'V'), + (0x1E86, 'M', u'ẇ'), + (0x1E87, 'V'), + (0x1E88, 'M', u'ẉ'), + (0x1E89, 'V'), + (0x1E8A, 'M', u'ẋ'), + (0x1E8B, 'V'), + (0x1E8C, 'M', u'ẍ'), + (0x1E8D, 'V'), + (0x1E8E, 'M', u'ẏ'), + (0x1E8F, 'V'), + (0x1E90, 'M', u'ẑ'), + (0x1E91, 'V'), + (0x1E92, 'M', u'ẓ'), + (0x1E93, 'V'), + (0x1E94, 'M', u'ẕ'), + (0x1E95, 'V'), + (0x1E9A, 'M', u'aʾ'), + (0x1E9B, 'M', u'ṡ'), + (0x1E9C, 'V'), + (0x1E9E, 'M', u'ss'), + (0x1E9F, 'V'), + (0x1EA0, 'M', u'ạ'), + (0x1EA1, 'V'), + (0x1EA2, 'M', u'ả'), + (0x1EA3, 'V'), + (0x1EA4, 'M', u'ấ'), + (0x1EA5, 'V'), + (0x1EA6, 'M', u'ầ'), + (0x1EA7, 'V'), + (0x1EA8, 'M', u'ẩ'), + ] + +def _seg_18(): + return [ + (0x1EA9, 'V'), + (0x1EAA, 'M', u'ẫ'), + (0x1EAB, 'V'), + (0x1EAC, 'M', u'ậ'), + (0x1EAD, 'V'), + (0x1EAE, 'M', u'ắ'), + (0x1EAF, 'V'), + (0x1EB0, 'M', u'ằ'), + (0x1EB1, 'V'), + (0x1EB2, 'M', u'ẳ'), + (0x1EB3, 'V'), + (0x1EB4, 'M', u'ẵ'), + (0x1EB5, 'V'), + (0x1EB6, 'M', u'ặ'), + (0x1EB7, 'V'), + (0x1EB8, 'M', u'ẹ'), + (0x1EB9, 'V'), + (0x1EBA, 'M', u'ẻ'), + (0x1EBB, 'V'), + (0x1EBC, 'M', u'ẽ'), + (0x1EBD, 'V'), + (0x1EBE, 'M', u'ế'), + (0x1EBF, 'V'), + (0x1EC0, 'M', u'ề'), + (0x1EC1, 'V'), + (0x1EC2, 'M', u'ể'), + (0x1EC3, 'V'), + (0x1EC4, 'M', u'ễ'), + (0x1EC5, 'V'), + (0x1EC6, 'M', u'ệ'), + (0x1EC7, 'V'), + (0x1EC8, 'M', u'ỉ'), + (0x1EC9, 'V'), + (0x1ECA, 'M', u'ị'), + (0x1ECB, 'V'), + (0x1ECC, 'M', u'ọ'), + (0x1ECD, 'V'), + (0x1ECE, 'M', u'ỏ'), + (0x1ECF, 'V'), + (0x1ED0, 'M', u'ố'), + (0x1ED1, 'V'), + (0x1ED2, 'M', u'ồ'), + (0x1ED3, 'V'), + (0x1ED4, 'M', u'ổ'), + (0x1ED5, 'V'), + (0x1ED6, 'M', u'ỗ'), + (0x1ED7, 'V'), + (0x1ED8, 'M', u'ộ'), + (0x1ED9, 'V'), + (0x1EDA, 'M', u'ớ'), + (0x1EDB, 'V'), + (0x1EDC, 'M', u'ờ'), + (0x1EDD, 'V'), + (0x1EDE, 'M', u'ở'), + (0x1EDF, 'V'), + (0x1EE0, 'M', u'ỡ'), + (0x1EE1, 'V'), + (0x1EE2, 'M', u'ợ'), + (0x1EE3, 'V'), + (0x1EE4, 'M', u'ụ'), + (0x1EE5, 'V'), + (0x1EE6, 'M', u'ủ'), + (0x1EE7, 'V'), + (0x1EE8, 'M', u'ứ'), + (0x1EE9, 'V'), + (0x1EEA, 'M', u'ừ'), + (0x1EEB, 'V'), + (0x1EEC, 'M', u'ử'), + (0x1EED, 'V'), + (0x1EEE, 'M', u'ữ'), + (0x1EEF, 'V'), + (0x1EF0, 'M', u'ự'), + (0x1EF1, 'V'), + (0x1EF2, 'M', u'ỳ'), + (0x1EF3, 'V'), + (0x1EF4, 'M', u'ỵ'), + (0x1EF5, 'V'), + (0x1EF6, 'M', u'ỷ'), + (0x1EF7, 'V'), + (0x1EF8, 'M', u'ỹ'), + (0x1EF9, 'V'), + (0x1EFA, 'M', u'ỻ'), + (0x1EFB, 'V'), + (0x1EFC, 'M', u'ỽ'), + (0x1EFD, 'V'), + (0x1EFE, 'M', u'ỿ'), + (0x1EFF, 'V'), + (0x1F08, 'M', u'ἀ'), + (0x1F09, 'M', u'ἁ'), + (0x1F0A, 'M', u'ἂ'), + (0x1F0B, 'M', u'ἃ'), + (0x1F0C, 'M', u'ἄ'), + (0x1F0D, 'M', u'ἅ'), + (0x1F0E, 'M', u'ἆ'), + (0x1F0F, 'M', u'ἇ'), + (0x1F10, 'V'), + (0x1F16, 'X'), + (0x1F18, 'M', u'ἐ'), + (0x1F19, 'M', u'ἑ'), + (0x1F1A, 'M', u'ἒ'), + ] + +def _seg_19(): + return [ + (0x1F1B, 'M', u'ἓ'), + (0x1F1C, 'M', u'ἔ'), + (0x1F1D, 'M', u'ἕ'), + (0x1F1E, 'X'), + (0x1F20, 'V'), + (0x1F28, 'M', u'ἠ'), + (0x1F29, 'M', u'ἡ'), + (0x1F2A, 'M', u'ἢ'), + (0x1F2B, 'M', u'ἣ'), + (0x1F2C, 'M', u'ἤ'), + (0x1F2D, 'M', u'ἥ'), + (0x1F2E, 'M', u'ἦ'), + (0x1F2F, 'M', u'ἧ'), + (0x1F30, 'V'), + (0x1F38, 'M', u'ἰ'), + (0x1F39, 'M', u'ἱ'), + (0x1F3A, 'M', u'ἲ'), + (0x1F3B, 'M', u'ἳ'), + (0x1F3C, 'M', u'ἴ'), + (0x1F3D, 'M', u'ἵ'), + (0x1F3E, 'M', u'ἶ'), + (0x1F3F, 'M', u'ἷ'), + (0x1F40, 'V'), + (0x1F46, 'X'), + (0x1F48, 'M', u'ὀ'), + (0x1F49, 'M', u'ὁ'), + (0x1F4A, 'M', u'ὂ'), + (0x1F4B, 'M', u'ὃ'), + (0x1F4C, 'M', u'ὄ'), + (0x1F4D, 'M', u'ὅ'), + (0x1F4E, 'X'), + (0x1F50, 'V'), + (0x1F58, 'X'), + (0x1F59, 'M', u'ὑ'), + (0x1F5A, 'X'), + (0x1F5B, 'M', u'ὓ'), + (0x1F5C, 'X'), + (0x1F5D, 'M', u'ὕ'), + (0x1F5E, 'X'), + (0x1F5F, 'M', u'ὗ'), + (0x1F60, 'V'), + (0x1F68, 'M', u'ὠ'), + (0x1F69, 'M', u'ὡ'), + (0x1F6A, 'M', u'ὢ'), + (0x1F6B, 'M', u'ὣ'), + (0x1F6C, 'M', u'ὤ'), + (0x1F6D, 'M', u'ὥ'), + (0x1F6E, 'M', u'ὦ'), + (0x1F6F, 'M', u'ὧ'), + (0x1F70, 'V'), + (0x1F71, 'M', u'ά'), + (0x1F72, 'V'), + (0x1F73, 'M', u'έ'), + (0x1F74, 'V'), + (0x1F75, 'M', u'ή'), + (0x1F76, 'V'), + (0x1F77, 'M', u'ί'), + (0x1F78, 'V'), + (0x1F79, 'M', u'ό'), + (0x1F7A, 'V'), + (0x1F7B, 'M', u'ύ'), + (0x1F7C, 'V'), + (0x1F7D, 'M', u'ώ'), + (0x1F7E, 'X'), + (0x1F80, 'M', u'ἀι'), + (0x1F81, 'M', u'ἁι'), + (0x1F82, 'M', u'ἂι'), + (0x1F83, 'M', u'ἃι'), + (0x1F84, 'M', u'ἄι'), + (0x1F85, 'M', u'ἅι'), + (0x1F86, 'M', u'ἆι'), + (0x1F87, 'M', u'ἇι'), + (0x1F88, 'M', u'ἀι'), + (0x1F89, 'M', u'ἁι'), + (0x1F8A, 'M', u'ἂι'), + (0x1F8B, 'M', u'ἃι'), + (0x1F8C, 'M', u'ἄι'), + (0x1F8D, 'M', u'ἅι'), + (0x1F8E, 'M', u'ἆι'), + (0x1F8F, 'M', u'ἇι'), + (0x1F90, 'M', u'ἠι'), + (0x1F91, 'M', u'ἡι'), + (0x1F92, 'M', u'ἢι'), + (0x1F93, 'M', u'ἣι'), + (0x1F94, 'M', u'ἤι'), + (0x1F95, 'M', u'ἥι'), + (0x1F96, 'M', u'ἦι'), + (0x1F97, 'M', u'ἧι'), + (0x1F98, 'M', u'ἠι'), + (0x1F99, 'M', u'ἡι'), + (0x1F9A, 'M', u'ἢι'), + (0x1F9B, 'M', u'ἣι'), + (0x1F9C, 'M', u'ἤι'), + (0x1F9D, 'M', u'ἥι'), + (0x1F9E, 'M', u'ἦι'), + (0x1F9F, 'M', u'ἧι'), + (0x1FA0, 'M', u'ὠι'), + (0x1FA1, 'M', u'ὡι'), + (0x1FA2, 'M', u'ὢι'), + (0x1FA3, 'M', u'ὣι'), + ] + +def _seg_20(): + return [ + (0x1FA4, 'M', u'ὤι'), + (0x1FA5, 'M', u'ὥι'), + (0x1FA6, 'M', u'ὦι'), + (0x1FA7, 'M', u'ὧι'), + (0x1FA8, 'M', u'ὠι'), + (0x1FA9, 'M', u'ὡι'), + (0x1FAA, 'M', u'ὢι'), + (0x1FAB, 'M', u'ὣι'), + (0x1FAC, 'M', u'ὤι'), + (0x1FAD, 'M', u'ὥι'), + (0x1FAE, 'M', u'ὦι'), + (0x1FAF, 'M', u'ὧι'), + (0x1FB0, 'V'), + (0x1FB2, 'M', u'ὰι'), + (0x1FB3, 'M', u'αι'), + (0x1FB4, 'M', u'άι'), + (0x1FB5, 'X'), + (0x1FB6, 'V'), + (0x1FB7, 'M', u'ᾶι'), + (0x1FB8, 'M', u'ᾰ'), + (0x1FB9, 'M', u'ᾱ'), + (0x1FBA, 'M', u'ὰ'), + (0x1FBB, 'M', u'ά'), + (0x1FBC, 'M', u'αι'), + (0x1FBD, '3', u' ̓'), + (0x1FBE, 'M', u'ι'), + (0x1FBF, '3', u' ̓'), + (0x1FC0, '3', u' ͂'), + (0x1FC1, '3', u' ̈͂'), + (0x1FC2, 'M', u'ὴι'), + (0x1FC3, 'M', u'ηι'), + (0x1FC4, 'M', u'ήι'), + (0x1FC5, 'X'), + (0x1FC6, 'V'), + (0x1FC7, 'M', u'ῆι'), + (0x1FC8, 'M', u'ὲ'), + (0x1FC9, 'M', u'έ'), + (0x1FCA, 'M', u'ὴ'), + (0x1FCB, 'M', u'ή'), + (0x1FCC, 'M', u'ηι'), + (0x1FCD, '3', u' ̓̀'), + (0x1FCE, '3', u' ̓́'), + (0x1FCF, '3', u' ̓͂'), + (0x1FD0, 'V'), + (0x1FD3, 'M', u'ΐ'), + (0x1FD4, 'X'), + (0x1FD6, 'V'), + (0x1FD8, 'M', u'ῐ'), + (0x1FD9, 'M', u'ῑ'), + (0x1FDA, 'M', u'ὶ'), + (0x1FDB, 'M', u'ί'), + (0x1FDC, 'X'), + (0x1FDD, '3', u' ̔̀'), + (0x1FDE, '3', u' ̔́'), + (0x1FDF, '3', u' ̔͂'), + (0x1FE0, 'V'), + (0x1FE3, 'M', u'ΰ'), + (0x1FE4, 'V'), + (0x1FE8, 'M', u'ῠ'), + (0x1FE9, 'M', u'ῡ'), + (0x1FEA, 'M', u'ὺ'), + (0x1FEB, 'M', u'ύ'), + (0x1FEC, 'M', u'ῥ'), + (0x1FED, '3', u' ̈̀'), + (0x1FEE, '3', u' ̈́'), + (0x1FEF, '3', u'`'), + (0x1FF0, 'X'), + (0x1FF2, 'M', u'ὼι'), + (0x1FF3, 'M', u'ωι'), + (0x1FF4, 'M', u'ώι'), + (0x1FF5, 'X'), + (0x1FF6, 'V'), + (0x1FF7, 'M', u'ῶι'), + (0x1FF8, 'M', u'ὸ'), + (0x1FF9, 'M', u'ό'), + (0x1FFA, 'M', u'ὼ'), + (0x1FFB, 'M', u'ώ'), + (0x1FFC, 'M', u'ωι'), + (0x1FFD, '3', u' ́'), + (0x1FFE, '3', u' ̔'), + (0x1FFF, 'X'), + (0x2000, '3', u' '), + (0x200B, 'I'), + (0x200C, 'D', u''), + (0x200E, 'X'), + (0x2010, 'V'), + (0x2011, 'M', u'‐'), + (0x2012, 'V'), + (0x2017, '3', u' ̳'), + (0x2018, 'V'), + (0x2024, 'X'), + (0x2027, 'V'), + (0x2028, 'X'), + (0x202F, '3', u' '), + (0x2030, 'V'), + (0x2033, 'M', u'′′'), + (0x2034, 'M', u'′′′'), + (0x2035, 'V'), + (0x2036, 'M', u'‵‵'), + (0x2037, 'M', u'‵‵‵'), + ] + +def _seg_21(): + return [ + (0x2038, 'V'), + (0x203C, '3', u'!!'), + (0x203D, 'V'), + (0x203E, '3', u' ̅'), + (0x203F, 'V'), + (0x2047, '3', u'??'), + (0x2048, '3', u'?!'), + (0x2049, '3', u'!?'), + (0x204A, 'V'), + (0x2057, 'M', u'′′′′'), + (0x2058, 'V'), + (0x205F, '3', u' '), + (0x2060, 'I'), + (0x2061, 'X'), + (0x2064, 'I'), + (0x2065, 'X'), + (0x2070, 'M', u'0'), + (0x2071, 'M', u'i'), + (0x2072, 'X'), + (0x2074, 'M', u'4'), + (0x2075, 'M', u'5'), + (0x2076, 'M', u'6'), + (0x2077, 'M', u'7'), + (0x2078, 'M', u'8'), + (0x2079, 'M', u'9'), + (0x207A, '3', u'+'), + (0x207B, 'M', u'−'), + (0x207C, '3', u'='), + (0x207D, '3', u'('), + (0x207E, '3', u')'), + (0x207F, 'M', u'n'), + (0x2080, 'M', u'0'), + (0x2081, 'M', u'1'), + (0x2082, 'M', u'2'), + (0x2083, 'M', u'3'), + (0x2084, 'M', u'4'), + (0x2085, 'M', u'5'), + (0x2086, 'M', u'6'), + (0x2087, 'M', u'7'), + (0x2088, 'M', u'8'), + (0x2089, 'M', u'9'), + (0x208A, '3', u'+'), + (0x208B, 'M', u'−'), + (0x208C, '3', u'='), + (0x208D, '3', u'('), + (0x208E, '3', u')'), + (0x208F, 'X'), + (0x2090, 'M', u'a'), + (0x2091, 'M', u'e'), + (0x2092, 'M', u'o'), + (0x2093, 'M', u'x'), + (0x2094, 'M', u'ə'), + (0x2095, 'M', u'h'), + (0x2096, 'M', u'k'), + (0x2097, 'M', u'l'), + (0x2098, 'M', u'm'), + (0x2099, 'M', u'n'), + (0x209A, 'M', u'p'), + (0x209B, 'M', u's'), + (0x209C, 'M', u't'), + (0x209D, 'X'), + (0x20A0, 'V'), + (0x20A8, 'M', u'rs'), + (0x20A9, 'V'), + (0x20C0, 'X'), + (0x20D0, 'V'), + (0x20F1, 'X'), + (0x2100, '3', u'a/c'), + (0x2101, '3', u'a/s'), + (0x2102, 'M', u'c'), + (0x2103, 'M', u'°c'), + (0x2104, 'V'), + (0x2105, '3', u'c/o'), + (0x2106, '3', u'c/u'), + (0x2107, 'M', u'ɛ'), + (0x2108, 'V'), + (0x2109, 'M', u'°f'), + (0x210A, 'M', u'g'), + (0x210B, 'M', u'h'), + (0x210F, 'M', u'ħ'), + (0x2110, 'M', u'i'), + (0x2112, 'M', u'l'), + (0x2114, 'V'), + (0x2115, 'M', u'n'), + (0x2116, 'M', u'no'), + (0x2117, 'V'), + (0x2119, 'M', u'p'), + (0x211A, 'M', u'q'), + (0x211B, 'M', u'r'), + (0x211E, 'V'), + (0x2120, 'M', u'sm'), + (0x2121, 'M', u'tel'), + (0x2122, 'M', u'tm'), + (0x2123, 'V'), + (0x2124, 'M', u'z'), + (0x2125, 'V'), + (0x2126, 'M', u'ω'), + (0x2127, 'V'), + (0x2128, 'M', u'z'), + (0x2129, 'V'), + ] + +def _seg_22(): + return [ + (0x212A, 'M', u'k'), + (0x212B, 'M', u'å'), + (0x212C, 'M', u'b'), + (0x212D, 'M', u'c'), + (0x212E, 'V'), + (0x212F, 'M', u'e'), + (0x2131, 'M', u'f'), + (0x2132, 'X'), + (0x2133, 'M', u'm'), + (0x2134, 'M', u'o'), + (0x2135, 'M', u'א'), + (0x2136, 'M', u'ב'), + (0x2137, 'M', u'ג'), + (0x2138, 'M', u'ד'), + (0x2139, 'M', u'i'), + (0x213A, 'V'), + (0x213B, 'M', u'fax'), + (0x213C, 'M', u'π'), + (0x213D, 'M', u'γ'), + (0x213F, 'M', u'π'), + (0x2140, 'M', u'∑'), + (0x2141, 'V'), + (0x2145, 'M', u'd'), + (0x2147, 'M', u'e'), + (0x2148, 'M', u'i'), + (0x2149, 'M', u'j'), + (0x214A, 'V'), + (0x2150, 'M', u'1⁄7'), + (0x2151, 'M', u'1⁄9'), + (0x2152, 'M', u'1⁄10'), + (0x2153, 'M', u'1⁄3'), + (0x2154, 'M', u'2⁄3'), + (0x2155, 'M', u'1⁄5'), + (0x2156, 'M', u'2⁄5'), + (0x2157, 'M', u'3⁄5'), + (0x2158, 'M', u'4⁄5'), + (0x2159, 'M', u'1⁄6'), + (0x215A, 'M', u'5⁄6'), + (0x215B, 'M', u'1⁄8'), + (0x215C, 'M', u'3⁄8'), + (0x215D, 'M', u'5⁄8'), + (0x215E, 'M', u'7⁄8'), + (0x215F, 'M', u'1⁄'), + (0x2160, 'M', u'i'), + (0x2161, 'M', u'ii'), + (0x2162, 'M', u'iii'), + (0x2163, 'M', u'iv'), + (0x2164, 'M', u'v'), + (0x2165, 'M', u'vi'), + (0x2166, 'M', u'vii'), + (0x2167, 'M', u'viii'), + (0x2168, 'M', u'ix'), + (0x2169, 'M', u'x'), + (0x216A, 'M', u'xi'), + (0x216B, 'M', u'xii'), + (0x216C, 'M', u'l'), + (0x216D, 'M', u'c'), + (0x216E, 'M', u'd'), + (0x216F, 'M', u'm'), + (0x2170, 'M', u'i'), + (0x2171, 'M', u'ii'), + (0x2172, 'M', u'iii'), + (0x2173, 'M', u'iv'), + (0x2174, 'M', u'v'), + (0x2175, 'M', u'vi'), + (0x2176, 'M', u'vii'), + (0x2177, 'M', u'viii'), + (0x2178, 'M', u'ix'), + (0x2179, 'M', u'x'), + (0x217A, 'M', u'xi'), + (0x217B, 'M', u'xii'), + (0x217C, 'M', u'l'), + (0x217D, 'M', u'c'), + (0x217E, 'M', u'd'), + (0x217F, 'M', u'm'), + (0x2180, 'V'), + (0x2183, 'X'), + (0x2184, 'V'), + (0x2189, 'M', u'0⁄3'), + (0x218A, 'V'), + (0x218C, 'X'), + (0x2190, 'V'), + (0x222C, 'M', u'∫∫'), + (0x222D, 'M', u'∫∫∫'), + (0x222E, 'V'), + (0x222F, 'M', u'∮∮'), + (0x2230, 'M', u'∮∮∮'), + (0x2231, 'V'), + (0x2260, '3'), + (0x2261, 'V'), + (0x226E, '3'), + (0x2270, 'V'), + (0x2329, 'M', u'〈'), + (0x232A, 'M', u'〉'), + (0x232B, 'V'), + (0x2427, 'X'), + (0x2440, 'V'), + (0x244B, 'X'), + (0x2460, 'M', u'1'), + (0x2461, 'M', u'2'), + ] + +def _seg_23(): + return [ + (0x2462, 'M', u'3'), + (0x2463, 'M', u'4'), + (0x2464, 'M', u'5'), + (0x2465, 'M', u'6'), + (0x2466, 'M', u'7'), + (0x2467, 'M', u'8'), + (0x2468, 'M', u'9'), + (0x2469, 'M', u'10'), + (0x246A, 'M', u'11'), + (0x246B, 'M', u'12'), + (0x246C, 'M', u'13'), + (0x246D, 'M', u'14'), + (0x246E, 'M', u'15'), + (0x246F, 'M', u'16'), + (0x2470, 'M', u'17'), + (0x2471, 'M', u'18'), + (0x2472, 'M', u'19'), + (0x2473, 'M', u'20'), + (0x2474, '3', u'(1)'), + (0x2475, '3', u'(2)'), + (0x2476, '3', u'(3)'), + (0x2477, '3', u'(4)'), + (0x2478, '3', u'(5)'), + (0x2479, '3', u'(6)'), + (0x247A, '3', u'(7)'), + (0x247B, '3', u'(8)'), + (0x247C, '3', u'(9)'), + (0x247D, '3', u'(10)'), + (0x247E, '3', u'(11)'), + (0x247F, '3', u'(12)'), + (0x2480, '3', u'(13)'), + (0x2481, '3', u'(14)'), + (0x2482, '3', u'(15)'), + (0x2483, '3', u'(16)'), + (0x2484, '3', u'(17)'), + (0x2485, '3', u'(18)'), + (0x2486, '3', u'(19)'), + (0x2487, '3', u'(20)'), + (0x2488, 'X'), + (0x249C, '3', u'(a)'), + (0x249D, '3', u'(b)'), + (0x249E, '3', u'(c)'), + (0x249F, '3', u'(d)'), + (0x24A0, '3', u'(e)'), + (0x24A1, '3', u'(f)'), + (0x24A2, '3', u'(g)'), + (0x24A3, '3', u'(h)'), + (0x24A4, '3', u'(i)'), + (0x24A5, '3', u'(j)'), + (0x24A6, '3', u'(k)'), + (0x24A7, '3', u'(l)'), + (0x24A8, '3', u'(m)'), + (0x24A9, '3', u'(n)'), + (0x24AA, '3', u'(o)'), + (0x24AB, '3', u'(p)'), + (0x24AC, '3', u'(q)'), + (0x24AD, '3', u'(r)'), + (0x24AE, '3', u'(s)'), + (0x24AF, '3', u'(t)'), + (0x24B0, '3', u'(u)'), + (0x24B1, '3', u'(v)'), + (0x24B2, '3', u'(w)'), + (0x24B3, '3', u'(x)'), + (0x24B4, '3', u'(y)'), + (0x24B5, '3', u'(z)'), + (0x24B6, 'M', u'a'), + (0x24B7, 'M', u'b'), + (0x24B8, 'M', u'c'), + (0x24B9, 'M', u'd'), + (0x24BA, 'M', u'e'), + (0x24BB, 'M', u'f'), + (0x24BC, 'M', u'g'), + (0x24BD, 'M', u'h'), + (0x24BE, 'M', u'i'), + (0x24BF, 'M', u'j'), + (0x24C0, 'M', u'k'), + (0x24C1, 'M', u'l'), + (0x24C2, 'M', u'm'), + (0x24C3, 'M', u'n'), + (0x24C4, 'M', u'o'), + (0x24C5, 'M', u'p'), + (0x24C6, 'M', u'q'), + (0x24C7, 'M', u'r'), + (0x24C8, 'M', u's'), + (0x24C9, 'M', u't'), + (0x24CA, 'M', u'u'), + (0x24CB, 'M', u'v'), + (0x24CC, 'M', u'w'), + (0x24CD, 'M', u'x'), + (0x24CE, 'M', u'y'), + (0x24CF, 'M', u'z'), + (0x24D0, 'M', u'a'), + (0x24D1, 'M', u'b'), + (0x24D2, 'M', u'c'), + (0x24D3, 'M', u'd'), + (0x24D4, 'M', u'e'), + (0x24D5, 'M', u'f'), + (0x24D6, 'M', u'g'), + (0x24D7, 'M', u'h'), + (0x24D8, 'M', u'i'), + ] + +def _seg_24(): + return [ + (0x24D9, 'M', u'j'), + (0x24DA, 'M', u'k'), + (0x24DB, 'M', u'l'), + (0x24DC, 'M', u'm'), + (0x24DD, 'M', u'n'), + (0x24DE, 'M', u'o'), + (0x24DF, 'M', u'p'), + (0x24E0, 'M', u'q'), + (0x24E1, 'M', u'r'), + (0x24E2, 'M', u's'), + (0x24E3, 'M', u't'), + (0x24E4, 'M', u'u'), + (0x24E5, 'M', u'v'), + (0x24E6, 'M', u'w'), + (0x24E7, 'M', u'x'), + (0x24E8, 'M', u'y'), + (0x24E9, 'M', u'z'), + (0x24EA, 'M', u'0'), + (0x24EB, 'V'), + (0x2A0C, 'M', u'∫∫∫∫'), + (0x2A0D, 'V'), + (0x2A74, '3', u'::='), + (0x2A75, '3', u'=='), + (0x2A76, '3', u'==='), + (0x2A77, 'V'), + (0x2ADC, 'M', u'⫝̸'), + (0x2ADD, 'V'), + (0x2B74, 'X'), + (0x2B76, 'V'), + (0x2B96, 'X'), + (0x2B98, 'V'), + (0x2BC9, 'X'), + (0x2BCA, 'V'), + (0x2BFF, 'X'), + (0x2C00, 'M', u'ⰰ'), + (0x2C01, 'M', u'ⰱ'), + (0x2C02, 'M', u'ⰲ'), + (0x2C03, 'M', u'ⰳ'), + (0x2C04, 'M', u'ⰴ'), + (0x2C05, 'M', u'ⰵ'), + (0x2C06, 'M', u'ⰶ'), + (0x2C07, 'M', u'ⰷ'), + (0x2C08, 'M', u'ⰸ'), + (0x2C09, 'M', u'ⰹ'), + (0x2C0A, 'M', u'ⰺ'), + (0x2C0B, 'M', u'ⰻ'), + (0x2C0C, 'M', u'ⰼ'), + (0x2C0D, 'M', u'ⰽ'), + (0x2C0E, 'M', u'ⰾ'), + (0x2C0F, 'M', u'ⰿ'), + (0x2C10, 'M', u'ⱀ'), + (0x2C11, 'M', u'ⱁ'), + (0x2C12, 'M', u'ⱂ'), + (0x2C13, 'M', u'ⱃ'), + (0x2C14, 'M', u'ⱄ'), + (0x2C15, 'M', u'ⱅ'), + (0x2C16, 'M', u'ⱆ'), + (0x2C17, 'M', u'ⱇ'), + (0x2C18, 'M', u'ⱈ'), + (0x2C19, 'M', u'ⱉ'), + (0x2C1A, 'M', u'ⱊ'), + (0x2C1B, 'M', u'ⱋ'), + (0x2C1C, 'M', u'ⱌ'), + (0x2C1D, 'M', u'ⱍ'), + (0x2C1E, 'M', u'ⱎ'), + (0x2C1F, 'M', u'ⱏ'), + (0x2C20, 'M', u'ⱐ'), + (0x2C21, 'M', u'ⱑ'), + (0x2C22, 'M', u'ⱒ'), + (0x2C23, 'M', u'ⱓ'), + (0x2C24, 'M', u'ⱔ'), + (0x2C25, 'M', u'ⱕ'), + (0x2C26, 'M', u'ⱖ'), + (0x2C27, 'M', u'ⱗ'), + (0x2C28, 'M', u'ⱘ'), + (0x2C29, 'M', u'ⱙ'), + (0x2C2A, 'M', u'ⱚ'), + (0x2C2B, 'M', u'ⱛ'), + (0x2C2C, 'M', u'ⱜ'), + (0x2C2D, 'M', u'ⱝ'), + (0x2C2E, 'M', u'ⱞ'), + (0x2C2F, 'X'), + (0x2C30, 'V'), + (0x2C5F, 'X'), + (0x2C60, 'M', u'ⱡ'), + (0x2C61, 'V'), + (0x2C62, 'M', u'ɫ'), + (0x2C63, 'M', u'ᵽ'), + (0x2C64, 'M', u'ɽ'), + (0x2C65, 'V'), + (0x2C67, 'M', u'ⱨ'), + (0x2C68, 'V'), + (0x2C69, 'M', u'ⱪ'), + (0x2C6A, 'V'), + (0x2C6B, 'M', u'ⱬ'), + (0x2C6C, 'V'), + (0x2C6D, 'M', u'ɑ'), + (0x2C6E, 'M', u'ɱ'), + (0x2C6F, 'M', u'ɐ'), + (0x2C70, 'M', u'ɒ'), + ] + +def _seg_25(): + return [ + (0x2C71, 'V'), + (0x2C72, 'M', u'ⱳ'), + (0x2C73, 'V'), + (0x2C75, 'M', u'ⱶ'), + (0x2C76, 'V'), + (0x2C7C, 'M', u'j'), + (0x2C7D, 'M', u'v'), + (0x2C7E, 'M', u'ȿ'), + (0x2C7F, 'M', u'ɀ'), + (0x2C80, 'M', u'ⲁ'), + (0x2C81, 'V'), + (0x2C82, 'M', u'ⲃ'), + (0x2C83, 'V'), + (0x2C84, 'M', u'ⲅ'), + (0x2C85, 'V'), + (0x2C86, 'M', u'ⲇ'), + (0x2C87, 'V'), + (0x2C88, 'M', u'ⲉ'), + (0x2C89, 'V'), + (0x2C8A, 'M', u'ⲋ'), + (0x2C8B, 'V'), + (0x2C8C, 'M', u'ⲍ'), + (0x2C8D, 'V'), + (0x2C8E, 'M', u'ⲏ'), + (0x2C8F, 'V'), + (0x2C90, 'M', u'ⲑ'), + (0x2C91, 'V'), + (0x2C92, 'M', u'ⲓ'), + (0x2C93, 'V'), + (0x2C94, 'M', u'ⲕ'), + (0x2C95, 'V'), + (0x2C96, 'M', u'ⲗ'), + (0x2C97, 'V'), + (0x2C98, 'M', u'ⲙ'), + (0x2C99, 'V'), + (0x2C9A, 'M', u'ⲛ'), + (0x2C9B, 'V'), + (0x2C9C, 'M', u'ⲝ'), + (0x2C9D, 'V'), + (0x2C9E, 'M', u'ⲟ'), + (0x2C9F, 'V'), + (0x2CA0, 'M', u'ⲡ'), + (0x2CA1, 'V'), + (0x2CA2, 'M', u'ⲣ'), + (0x2CA3, 'V'), + (0x2CA4, 'M', u'ⲥ'), + (0x2CA5, 'V'), + (0x2CA6, 'M', u'ⲧ'), + (0x2CA7, 'V'), + (0x2CA8, 'M', u'ⲩ'), + (0x2CA9, 'V'), + (0x2CAA, 'M', u'ⲫ'), + (0x2CAB, 'V'), + (0x2CAC, 'M', u'ⲭ'), + (0x2CAD, 'V'), + (0x2CAE, 'M', u'ⲯ'), + (0x2CAF, 'V'), + (0x2CB0, 'M', u'ⲱ'), + (0x2CB1, 'V'), + (0x2CB2, 'M', u'ⲳ'), + (0x2CB3, 'V'), + (0x2CB4, 'M', u'ⲵ'), + (0x2CB5, 'V'), + (0x2CB6, 'M', u'ⲷ'), + (0x2CB7, 'V'), + (0x2CB8, 'M', u'ⲹ'), + (0x2CB9, 'V'), + (0x2CBA, 'M', u'ⲻ'), + (0x2CBB, 'V'), + (0x2CBC, 'M', u'ⲽ'), + (0x2CBD, 'V'), + (0x2CBE, 'M', u'ⲿ'), + (0x2CBF, 'V'), + (0x2CC0, 'M', u'ⳁ'), + (0x2CC1, 'V'), + (0x2CC2, 'M', u'ⳃ'), + (0x2CC3, 'V'), + (0x2CC4, 'M', u'ⳅ'), + (0x2CC5, 'V'), + (0x2CC6, 'M', u'ⳇ'), + (0x2CC7, 'V'), + (0x2CC8, 'M', u'ⳉ'), + (0x2CC9, 'V'), + (0x2CCA, 'M', u'ⳋ'), + (0x2CCB, 'V'), + (0x2CCC, 'M', u'ⳍ'), + (0x2CCD, 'V'), + (0x2CCE, 'M', u'ⳏ'), + (0x2CCF, 'V'), + (0x2CD0, 'M', u'ⳑ'), + (0x2CD1, 'V'), + (0x2CD2, 'M', u'ⳓ'), + (0x2CD3, 'V'), + (0x2CD4, 'M', u'ⳕ'), + (0x2CD5, 'V'), + (0x2CD6, 'M', u'ⳗ'), + (0x2CD7, 'V'), + (0x2CD8, 'M', u'ⳙ'), + (0x2CD9, 'V'), + (0x2CDA, 'M', u'ⳛ'), + ] + +def _seg_26(): + return [ + (0x2CDB, 'V'), + (0x2CDC, 'M', u'ⳝ'), + (0x2CDD, 'V'), + (0x2CDE, 'M', u'ⳟ'), + (0x2CDF, 'V'), + (0x2CE0, 'M', u'ⳡ'), + (0x2CE1, 'V'), + (0x2CE2, 'M', u'ⳣ'), + (0x2CE3, 'V'), + (0x2CEB, 'M', u'ⳬ'), + (0x2CEC, 'V'), + (0x2CED, 'M', u'ⳮ'), + (0x2CEE, 'V'), + (0x2CF2, 'M', u'ⳳ'), + (0x2CF3, 'V'), + (0x2CF4, 'X'), + (0x2CF9, 'V'), + (0x2D26, 'X'), + (0x2D27, 'V'), + (0x2D28, 'X'), + (0x2D2D, 'V'), + (0x2D2E, 'X'), + (0x2D30, 'V'), + (0x2D68, 'X'), + (0x2D6F, 'M', u'ⵡ'), + (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'), + (0x2E4F, 'X'), + (0x2E80, 'V'), + (0x2E9A, 'X'), + (0x2E9B, 'V'), + (0x2E9F, 'M', u'母'), + (0x2EA0, 'V'), + (0x2EF3, 'M', u'龟'), + (0x2EF4, 'X'), + (0x2F00, 'M', u'一'), + (0x2F01, 'M', u'丨'), + (0x2F02, 'M', u'丶'), + (0x2F03, 'M', u'丿'), + (0x2F04, 'M', u'乙'), + (0x2F05, 'M', u'亅'), + (0x2F06, 'M', u'二'), + (0x2F07, 'M', u'亠'), + (0x2F08, 'M', u'人'), + (0x2F09, 'M', u'儿'), + (0x2F0A, 'M', u'入'), + (0x2F0B, 'M', u'八'), + (0x2F0C, 'M', u'冂'), + (0x2F0D, 'M', u'冖'), + (0x2F0E, 'M', u'冫'), + (0x2F0F, 'M', u'几'), + (0x2F10, 'M', u'凵'), + (0x2F11, 'M', u'刀'), + (0x2F12, 'M', u'力'), + (0x2F13, 'M', u'勹'), + (0x2F14, 'M', u'匕'), + (0x2F15, 'M', u'匚'), + (0x2F16, 'M', u'匸'), + (0x2F17, 'M', u'十'), + (0x2F18, 'M', u'卜'), + (0x2F19, 'M', u'卩'), + (0x2F1A, 'M', u'厂'), + (0x2F1B, 'M', u'厶'), + (0x2F1C, 'M', u'又'), + (0x2F1D, 'M', u'口'), + (0x2F1E, 'M', u'囗'), + (0x2F1F, 'M', u'土'), + (0x2F20, 'M', u'士'), + (0x2F21, 'M', u'夂'), + (0x2F22, 'M', u'夊'), + (0x2F23, 'M', u'夕'), + (0x2F24, 'M', u'大'), + (0x2F25, 'M', u'女'), + (0x2F26, 'M', u'子'), + (0x2F27, 'M', u'宀'), + (0x2F28, 'M', u'寸'), + (0x2F29, 'M', u'小'), + (0x2F2A, 'M', u'尢'), + (0x2F2B, 'M', u'尸'), + (0x2F2C, 'M', u'屮'), + (0x2F2D, 'M', u'山'), + ] + +def _seg_27(): + return [ + (0x2F2E, 'M', u'巛'), + (0x2F2F, 'M', u'工'), + (0x2F30, 'M', u'己'), + (0x2F31, 'M', u'巾'), + (0x2F32, 'M', u'干'), + (0x2F33, 'M', u'幺'), + (0x2F34, 'M', u'广'), + (0x2F35, 'M', u'廴'), + (0x2F36, 'M', u'廾'), + (0x2F37, 'M', u'弋'), + (0x2F38, 'M', u'弓'), + (0x2F39, 'M', u'彐'), + (0x2F3A, 'M', u'彡'), + (0x2F3B, 'M', u'彳'), + (0x2F3C, 'M', u'心'), + (0x2F3D, 'M', u'戈'), + (0x2F3E, 'M', u'戶'), + (0x2F3F, 'M', u'手'), + (0x2F40, 'M', u'支'), + (0x2F41, 'M', u'攴'), + (0x2F42, 'M', u'文'), + (0x2F43, 'M', u'斗'), + (0x2F44, 'M', u'斤'), + (0x2F45, 'M', u'方'), + (0x2F46, 'M', u'无'), + (0x2F47, 'M', u'日'), + (0x2F48, 'M', u'曰'), + (0x2F49, 'M', u'月'), + (0x2F4A, 'M', u'木'), + (0x2F4B, 'M', u'欠'), + (0x2F4C, 'M', u'止'), + (0x2F4D, 'M', u'歹'), + (0x2F4E, 'M', u'殳'), + (0x2F4F, 'M', u'毋'), + (0x2F50, 'M', u'比'), + (0x2F51, 'M', u'毛'), + (0x2F52, 'M', u'氏'), + (0x2F53, 'M', u'气'), + (0x2F54, 'M', u'水'), + (0x2F55, 'M', u'火'), + (0x2F56, 'M', u'爪'), + (0x2F57, 'M', u'父'), + (0x2F58, 'M', u'爻'), + (0x2F59, 'M', u'爿'), + (0x2F5A, 'M', u'片'), + (0x2F5B, 'M', u'牙'), + (0x2F5C, 'M', u'牛'), + (0x2F5D, 'M', u'犬'), + (0x2F5E, 'M', u'玄'), + (0x2F5F, 'M', u'玉'), + (0x2F60, 'M', u'瓜'), + (0x2F61, 'M', u'瓦'), + (0x2F62, 'M', u'甘'), + (0x2F63, 'M', u'生'), + (0x2F64, 'M', u'用'), + (0x2F65, 'M', u'田'), + (0x2F66, 'M', u'疋'), + (0x2F67, 'M', u'疒'), + (0x2F68, 'M', u'癶'), + (0x2F69, 'M', u'白'), + (0x2F6A, 'M', u'皮'), + (0x2F6B, 'M', u'皿'), + (0x2F6C, 'M', u'目'), + (0x2F6D, 'M', u'矛'), + (0x2F6E, 'M', u'矢'), + (0x2F6F, 'M', u'石'), + (0x2F70, 'M', u'示'), + (0x2F71, 'M', u'禸'), + (0x2F72, 'M', u'禾'), + (0x2F73, 'M', u'穴'), + (0x2F74, 'M', u'立'), + (0x2F75, 'M', u'竹'), + (0x2F76, 'M', u'米'), + (0x2F77, 'M', u'糸'), + (0x2F78, 'M', u'缶'), + (0x2F79, 'M', u'网'), + (0x2F7A, 'M', u'羊'), + (0x2F7B, 'M', u'羽'), + (0x2F7C, 'M', u'老'), + (0x2F7D, 'M', u'而'), + (0x2F7E, 'M', u'耒'), + (0x2F7F, 'M', u'耳'), + (0x2F80, 'M', u'聿'), + (0x2F81, 'M', u'肉'), + (0x2F82, 'M', u'臣'), + (0x2F83, 'M', u'自'), + (0x2F84, 'M', u'至'), + (0x2F85, 'M', u'臼'), + (0x2F86, 'M', u'舌'), + (0x2F87, 'M', u'舛'), + (0x2F88, 'M', u'舟'), + (0x2F89, 'M', u'艮'), + (0x2F8A, 'M', u'色'), + (0x2F8B, 'M', u'艸'), + (0x2F8C, 'M', u'虍'), + (0x2F8D, 'M', u'虫'), + (0x2F8E, 'M', u'血'), + (0x2F8F, 'M', u'行'), + (0x2F90, 'M', u'衣'), + (0x2F91, 'M', u'襾'), + ] + +def _seg_28(): + return [ + (0x2F92, 'M', u'見'), + (0x2F93, 'M', u'角'), + (0x2F94, 'M', u'言'), + (0x2F95, 'M', u'谷'), + (0x2F96, 'M', u'豆'), + (0x2F97, 'M', u'豕'), + (0x2F98, 'M', u'豸'), + (0x2F99, 'M', u'貝'), + (0x2F9A, 'M', u'赤'), + (0x2F9B, 'M', u'走'), + (0x2F9C, 'M', u'足'), + (0x2F9D, 'M', u'身'), + (0x2F9E, 'M', u'車'), + (0x2F9F, 'M', u'辛'), + (0x2FA0, 'M', u'辰'), + (0x2FA1, 'M', u'辵'), + (0x2FA2, 'M', u'邑'), + (0x2FA3, 'M', u'酉'), + (0x2FA4, 'M', u'釆'), + (0x2FA5, 'M', u'里'), + (0x2FA6, 'M', u'金'), + (0x2FA7, 'M', u'長'), + (0x2FA8, 'M', u'門'), + (0x2FA9, 'M', u'阜'), + (0x2FAA, 'M', u'隶'), + (0x2FAB, 'M', u'隹'), + (0x2FAC, 'M', u'雨'), + (0x2FAD, 'M', u'靑'), + (0x2FAE, 'M', u'非'), + (0x2FAF, 'M', u'面'), + (0x2FB0, 'M', u'革'), + (0x2FB1, 'M', u'韋'), + (0x2FB2, 'M', u'韭'), + (0x2FB3, 'M', u'音'), + (0x2FB4, 'M', u'頁'), + (0x2FB5, 'M', u'風'), + (0x2FB6, 'M', u'飛'), + (0x2FB7, 'M', u'食'), + (0x2FB8, 'M', u'首'), + (0x2FB9, 'M', u'香'), + (0x2FBA, 'M', u'馬'), + (0x2FBB, 'M', u'骨'), + (0x2FBC, 'M', u'高'), + (0x2FBD, 'M', u'髟'), + (0x2FBE, 'M', u'鬥'), + (0x2FBF, 'M', u'鬯'), + (0x2FC0, 'M', u'鬲'), + (0x2FC1, 'M', u'鬼'), + (0x2FC2, 'M', u'魚'), + (0x2FC3, 'M', u'鳥'), + (0x2FC4, 'M', u'鹵'), + (0x2FC5, 'M', u'鹿'), + (0x2FC6, 'M', u'麥'), + (0x2FC7, 'M', u'麻'), + (0x2FC8, 'M', u'黃'), + (0x2FC9, 'M', u'黍'), + (0x2FCA, 'M', u'黑'), + (0x2FCB, 'M', u'黹'), + (0x2FCC, 'M', u'黽'), + (0x2FCD, 'M', u'鼎'), + (0x2FCE, 'M', u'鼓'), + (0x2FCF, 'M', u'鼠'), + (0x2FD0, 'M', u'鼻'), + (0x2FD1, 'M', u'齊'), + (0x2FD2, 'M', u'齒'), + (0x2FD3, 'M', u'龍'), + (0x2FD4, 'M', u'龜'), + (0x2FD5, 'M', u'龠'), + (0x2FD6, 'X'), + (0x3000, '3', u' '), + (0x3001, 'V'), + (0x3002, 'M', u'.'), + (0x3003, 'V'), + (0x3036, 'M', u'〒'), + (0x3037, 'V'), + (0x3038, 'M', u'十'), + (0x3039, 'M', u'卄'), + (0x303A, 'M', u'卅'), + (0x303B, 'V'), + (0x3040, 'X'), + (0x3041, 'V'), + (0x3097, 'X'), + (0x3099, 'V'), + (0x309B, '3', u' ゙'), + (0x309C, '3', u' ゚'), + (0x309D, 'V'), + (0x309F, 'M', u'より'), + (0x30A0, 'V'), + (0x30FF, 'M', u'コト'), + (0x3100, 'X'), + (0x3105, 'V'), + (0x3130, 'X'), + (0x3131, 'M', u'ᄀ'), + (0x3132, 'M', u'ᄁ'), + (0x3133, 'M', u'ᆪ'), + (0x3134, 'M', u'ᄂ'), + (0x3135, 'M', u'ᆬ'), + (0x3136, 'M', u'ᆭ'), + (0x3137, 'M', u'ᄃ'), + (0x3138, 'M', u'ᄄ'), + ] + +def _seg_29(): + return [ + (0x3139, 'M', u'ᄅ'), + (0x313A, 'M', u'ᆰ'), + (0x313B, 'M', u'ᆱ'), + (0x313C, 'M', u'ᆲ'), + (0x313D, 'M', u'ᆳ'), + (0x313E, 'M', u'ᆴ'), + (0x313F, 'M', u'ᆵ'), + (0x3140, 'M', u'ᄚ'), + (0x3141, 'M', u'ᄆ'), + (0x3142, 'M', u'ᄇ'), + (0x3143, 'M', u'ᄈ'), + (0x3144, 'M', u'ᄡ'), + (0x3145, 'M', u'ᄉ'), + (0x3146, 'M', u'ᄊ'), + (0x3147, 'M', u'ᄋ'), + (0x3148, 'M', u'ᄌ'), + (0x3149, 'M', u'ᄍ'), + (0x314A, 'M', u'ᄎ'), + (0x314B, 'M', u'ᄏ'), + (0x314C, 'M', u'ᄐ'), + (0x314D, 'M', u'ᄑ'), + (0x314E, 'M', u'ᄒ'), + (0x314F, 'M', u'ᅡ'), + (0x3150, 'M', u'ᅢ'), + (0x3151, 'M', u'ᅣ'), + (0x3152, 'M', u'ᅤ'), + (0x3153, 'M', u'ᅥ'), + (0x3154, 'M', u'ᅦ'), + (0x3155, 'M', u'ᅧ'), + (0x3156, 'M', u'ᅨ'), + (0x3157, 'M', u'ᅩ'), + (0x3158, 'M', u'ᅪ'), + (0x3159, 'M', u'ᅫ'), + (0x315A, 'M', u'ᅬ'), + (0x315B, 'M', u'ᅭ'), + (0x315C, 'M', u'ᅮ'), + (0x315D, 'M', u'ᅯ'), + (0x315E, 'M', u'ᅰ'), + (0x315F, 'M', u'ᅱ'), + (0x3160, 'M', u'ᅲ'), + (0x3161, 'M', u'ᅳ'), + (0x3162, 'M', u'ᅴ'), + (0x3163, 'M', u'ᅵ'), + (0x3164, 'X'), + (0x3165, 'M', u'ᄔ'), + (0x3166, 'M', u'ᄕ'), + (0x3167, 'M', u'ᇇ'), + (0x3168, 'M', u'ᇈ'), + (0x3169, 'M', u'ᇌ'), + (0x316A, 'M', u'ᇎ'), + (0x316B, 'M', u'ᇓ'), + (0x316C, 'M', u'ᇗ'), + (0x316D, 'M', u'ᇙ'), + (0x316E, 'M', u'ᄜ'), + (0x316F, 'M', u'ᇝ'), + (0x3170, 'M', u'ᇟ'), + (0x3171, 'M', u'ᄝ'), + (0x3172, 'M', u'ᄞ'), + (0x3173, 'M', u'ᄠ'), + (0x3174, 'M', u'ᄢ'), + (0x3175, 'M', u'ᄣ'), + (0x3176, 'M', u'ᄧ'), + (0x3177, 'M', u'ᄩ'), + (0x3178, 'M', u'ᄫ'), + (0x3179, 'M', u'ᄬ'), + (0x317A, 'M', u'ᄭ'), + (0x317B, 'M', u'ᄮ'), + (0x317C, 'M', u'ᄯ'), + (0x317D, 'M', u'ᄲ'), + (0x317E, 'M', u'ᄶ'), + (0x317F, 'M', u'ᅀ'), + (0x3180, 'M', u'ᅇ'), + (0x3181, 'M', u'ᅌ'), + (0x3182, 'M', u'ᇱ'), + (0x3183, 'M', u'ᇲ'), + (0x3184, 'M', u'ᅗ'), + (0x3185, 'M', u'ᅘ'), + (0x3186, 'M', u'ᅙ'), + (0x3187, 'M', u'ᆄ'), + (0x3188, 'M', u'ᆅ'), + (0x3189, 'M', u'ᆈ'), + (0x318A, 'M', u'ᆑ'), + (0x318B, 'M', u'ᆒ'), + (0x318C, 'M', u'ᆔ'), + (0x318D, 'M', u'ᆞ'), + (0x318E, 'M', u'ᆡ'), + (0x318F, 'X'), + (0x3190, 'V'), + (0x3192, 'M', u'一'), + (0x3193, 'M', u'二'), + (0x3194, 'M', u'三'), + (0x3195, 'M', u'四'), + (0x3196, 'M', u'上'), + (0x3197, 'M', u'中'), + (0x3198, 'M', u'下'), + (0x3199, 'M', u'甲'), + (0x319A, 'M', u'乙'), + (0x319B, 'M', u'丙'), + (0x319C, 'M', u'丁'), + (0x319D, 'M', u'天'), + ] + +def _seg_30(): + return [ + (0x319E, 'M', u'地'), + (0x319F, 'M', u'人'), + (0x31A0, 'V'), + (0x31BB, 'X'), + (0x31C0, 'V'), + (0x31E4, 'X'), + (0x31F0, 'V'), + (0x3200, '3', u'(ᄀ)'), + (0x3201, '3', u'(ᄂ)'), + (0x3202, '3', u'(ᄃ)'), + (0x3203, '3', u'(ᄅ)'), + (0x3204, '3', u'(ᄆ)'), + (0x3205, '3', u'(ᄇ)'), + (0x3206, '3', u'(ᄉ)'), + (0x3207, '3', u'(ᄋ)'), + (0x3208, '3', u'(ᄌ)'), + (0x3209, '3', u'(ᄎ)'), + (0x320A, '3', u'(ᄏ)'), + (0x320B, '3', u'(ᄐ)'), + (0x320C, '3', u'(ᄑ)'), + (0x320D, '3', u'(ᄒ)'), + (0x320E, '3', u'(가)'), + (0x320F, '3', u'(나)'), + (0x3210, '3', u'(다)'), + (0x3211, '3', u'(라)'), + (0x3212, '3', u'(마)'), + (0x3213, '3', u'(바)'), + (0x3214, '3', u'(사)'), + (0x3215, '3', u'(아)'), + (0x3216, '3', u'(자)'), + (0x3217, '3', u'(차)'), + (0x3218, '3', u'(카)'), + (0x3219, '3', u'(타)'), + (0x321A, '3', u'(파)'), + (0x321B, '3', u'(하)'), + (0x321C, '3', u'(주)'), + (0x321D, '3', u'(오전)'), + (0x321E, '3', u'(오후)'), + (0x321F, 'X'), + (0x3220, '3', u'(一)'), + (0x3221, '3', u'(二)'), + (0x3222, '3', u'(三)'), + (0x3223, '3', u'(四)'), + (0x3224, '3', u'(五)'), + (0x3225, '3', u'(六)'), + (0x3226, '3', u'(七)'), + (0x3227, '3', u'(八)'), + (0x3228, '3', u'(九)'), + (0x3229, '3', u'(十)'), + (0x322A, '3', u'(月)'), + (0x322B, '3', u'(火)'), + (0x322C, '3', u'(水)'), + (0x322D, '3', u'(木)'), + (0x322E, '3', u'(金)'), + (0x322F, '3', u'(土)'), + (0x3230, '3', u'(日)'), + (0x3231, '3', u'(株)'), + (0x3232, '3', u'(有)'), + (0x3233, '3', u'(社)'), + (0x3234, '3', u'(名)'), + (0x3235, '3', u'(特)'), + (0x3236, '3', u'(財)'), + (0x3237, '3', u'(祝)'), + (0x3238, '3', u'(労)'), + (0x3239, '3', u'(代)'), + (0x323A, '3', u'(呼)'), + (0x323B, '3', u'(学)'), + (0x323C, '3', u'(監)'), + (0x323D, '3', u'(企)'), + (0x323E, '3', u'(資)'), + (0x323F, '3', u'(協)'), + (0x3240, '3', u'(祭)'), + (0x3241, '3', u'(休)'), + (0x3242, '3', u'(自)'), + (0x3243, '3', u'(至)'), + (0x3244, 'M', u'問'), + (0x3245, 'M', u'幼'), + (0x3246, 'M', u'文'), + (0x3247, 'M', u'箏'), + (0x3248, 'V'), + (0x3250, 'M', u'pte'), + (0x3251, 'M', u'21'), + (0x3252, 'M', u'22'), + (0x3253, 'M', u'23'), + (0x3254, 'M', u'24'), + (0x3255, 'M', u'25'), + (0x3256, 'M', u'26'), + (0x3257, 'M', u'27'), + (0x3258, 'M', u'28'), + (0x3259, 'M', u'29'), + (0x325A, 'M', u'30'), + (0x325B, 'M', u'31'), + (0x325C, 'M', u'32'), + (0x325D, 'M', u'33'), + (0x325E, 'M', u'34'), + (0x325F, 'M', u'35'), + (0x3260, 'M', u'ᄀ'), + (0x3261, 'M', u'ᄂ'), + (0x3262, 'M', u'ᄃ'), + (0x3263, 'M', u'ᄅ'), + ] + +def _seg_31(): + return [ + (0x3264, 'M', u'ᄆ'), + (0x3265, 'M', u'ᄇ'), + (0x3266, 'M', u'ᄉ'), + (0x3267, 'M', u'ᄋ'), + (0x3268, 'M', u'ᄌ'), + (0x3269, 'M', u'ᄎ'), + (0x326A, 'M', u'ᄏ'), + (0x326B, 'M', u'ᄐ'), + (0x326C, 'M', u'ᄑ'), + (0x326D, 'M', u'ᄒ'), + (0x326E, 'M', u'가'), + (0x326F, 'M', u'나'), + (0x3270, 'M', u'다'), + (0x3271, 'M', u'라'), + (0x3272, 'M', u'마'), + (0x3273, 'M', u'바'), + (0x3274, 'M', u'사'), + (0x3275, 'M', u'아'), + (0x3276, 'M', u'자'), + (0x3277, 'M', u'차'), + (0x3278, 'M', u'카'), + (0x3279, 'M', u'타'), + (0x327A, 'M', u'파'), + (0x327B, 'M', u'하'), + (0x327C, 'M', u'참고'), + (0x327D, 'M', u'주의'), + (0x327E, 'M', u'우'), + (0x327F, 'V'), + (0x3280, 'M', u'一'), + (0x3281, 'M', u'二'), + (0x3282, 'M', u'三'), + (0x3283, 'M', u'四'), + (0x3284, 'M', u'五'), + (0x3285, 'M', u'六'), + (0x3286, 'M', u'七'), + (0x3287, 'M', u'八'), + (0x3288, 'M', u'九'), + (0x3289, 'M', u'十'), + (0x328A, 'M', u'月'), + (0x328B, 'M', u'火'), + (0x328C, 'M', u'水'), + (0x328D, 'M', u'木'), + (0x328E, 'M', u'金'), + (0x328F, 'M', u'土'), + (0x3290, 'M', u'日'), + (0x3291, 'M', u'株'), + (0x3292, 'M', u'有'), + (0x3293, 'M', u'社'), + (0x3294, 'M', u'名'), + (0x3295, 'M', u'特'), + (0x3296, 'M', u'財'), + (0x3297, 'M', u'祝'), + (0x3298, 'M', u'労'), + (0x3299, 'M', u'秘'), + (0x329A, 'M', u'男'), + (0x329B, 'M', u'女'), + (0x329C, 'M', u'適'), + (0x329D, 'M', u'優'), + (0x329E, 'M', u'印'), + (0x329F, 'M', u'注'), + (0x32A0, 'M', u'項'), + (0x32A1, 'M', u'休'), + (0x32A2, 'M', u'写'), + (0x32A3, 'M', u'正'), + (0x32A4, 'M', u'上'), + (0x32A5, 'M', u'中'), + (0x32A6, 'M', u'下'), + (0x32A7, 'M', u'左'), + (0x32A8, 'M', u'右'), + (0x32A9, 'M', u'医'), + (0x32AA, 'M', u'宗'), + (0x32AB, 'M', u'学'), + (0x32AC, 'M', u'監'), + (0x32AD, 'M', u'企'), + (0x32AE, 'M', u'資'), + (0x32AF, 'M', u'協'), + (0x32B0, 'M', u'夜'), + (0x32B1, 'M', u'36'), + (0x32B2, 'M', u'37'), + (0x32B3, 'M', u'38'), + (0x32B4, 'M', u'39'), + (0x32B5, 'M', u'40'), + (0x32B6, 'M', u'41'), + (0x32B7, 'M', u'42'), + (0x32B8, 'M', u'43'), + (0x32B9, 'M', u'44'), + (0x32BA, 'M', u'45'), + (0x32BB, 'M', u'46'), + (0x32BC, 'M', u'47'), + (0x32BD, 'M', u'48'), + (0x32BE, 'M', u'49'), + (0x32BF, 'M', u'50'), + (0x32C0, 'M', u'1月'), + (0x32C1, 'M', u'2月'), + (0x32C2, 'M', u'3月'), + (0x32C3, 'M', u'4月'), + (0x32C4, 'M', u'5月'), + (0x32C5, 'M', u'6月'), + (0x32C6, 'M', u'7月'), + (0x32C7, 'M', u'8月'), + ] + +def _seg_32(): + return [ + (0x32C8, 'M', u'9月'), + (0x32C9, 'M', u'10月'), + (0x32CA, 'M', u'11月'), + (0x32CB, 'M', u'12月'), + (0x32CC, 'M', u'hg'), + (0x32CD, 'M', u'erg'), + (0x32CE, 'M', u'ev'), + (0x32CF, 'M', u'ltd'), + (0x32D0, 'M', u'ア'), + (0x32D1, 'M', u'イ'), + (0x32D2, 'M', u'ウ'), + (0x32D3, 'M', u'エ'), + (0x32D4, 'M', u'オ'), + (0x32D5, 'M', u'カ'), + (0x32D6, 'M', u'キ'), + (0x32D7, 'M', u'ク'), + (0x32D8, 'M', u'ケ'), + (0x32D9, 'M', u'コ'), + (0x32DA, 'M', u'サ'), + (0x32DB, 'M', u'シ'), + (0x32DC, 'M', u'ス'), + (0x32DD, 'M', u'セ'), + (0x32DE, 'M', u'ソ'), + (0x32DF, 'M', u'タ'), + (0x32E0, 'M', u'チ'), + (0x32E1, 'M', u'ツ'), + (0x32E2, 'M', u'テ'), + (0x32E3, 'M', u'ト'), + (0x32E4, 'M', u'ナ'), + (0x32E5, 'M', u'ニ'), + (0x32E6, 'M', u'ヌ'), + (0x32E7, 'M', u'ネ'), + (0x32E8, 'M', u'ノ'), + (0x32E9, 'M', u'ハ'), + (0x32EA, 'M', u'ヒ'), + (0x32EB, 'M', u'フ'), + (0x32EC, 'M', u'ヘ'), + (0x32ED, 'M', u'ホ'), + (0x32EE, 'M', u'マ'), + (0x32EF, 'M', u'ミ'), + (0x32F0, 'M', u'ム'), + (0x32F1, 'M', u'メ'), + (0x32F2, 'M', u'モ'), + (0x32F3, 'M', u'ヤ'), + (0x32F4, 'M', u'ユ'), + (0x32F5, 'M', u'ヨ'), + (0x32F6, 'M', u'ラ'), + (0x32F7, 'M', u'リ'), + (0x32F8, 'M', u'ル'), + (0x32F9, 'M', u'レ'), + (0x32FA, 'M', u'ロ'), + (0x32FB, 'M', u'ワ'), + (0x32FC, 'M', u'ヰ'), + (0x32FD, 'M', u'ヱ'), + (0x32FE, 'M', u'ヲ'), + (0x32FF, 'X'), + (0x3300, 'M', u'アパート'), + (0x3301, 'M', u'アルファ'), + (0x3302, 'M', u'アンペア'), + (0x3303, 'M', u'アール'), + (0x3304, 'M', u'イニング'), + (0x3305, 'M', u'インチ'), + (0x3306, 'M', u'ウォン'), + (0x3307, 'M', u'エスクード'), + (0x3308, 'M', u'エーカー'), + (0x3309, 'M', u'オンス'), + (0x330A, 'M', u'オーム'), + (0x330B, 'M', u'カイリ'), + (0x330C, 'M', u'カラット'), + (0x330D, 'M', u'カロリー'), + (0x330E, 'M', u'ガロン'), + (0x330F, 'M', u'ガンマ'), + (0x3310, 'M', u'ギガ'), + (0x3311, 'M', u'ギニー'), + (0x3312, 'M', u'キュリー'), + (0x3313, 'M', u'ギルダー'), + (0x3314, 'M', u'キロ'), + (0x3315, 'M', u'キログラム'), + (0x3316, 'M', u'キロメートル'), + (0x3317, 'M', u'キロワット'), + (0x3318, 'M', u'グラム'), + (0x3319, 'M', u'グラムトン'), + (0x331A, 'M', u'クルゼイロ'), + (0x331B, 'M', u'クローネ'), + (0x331C, 'M', u'ケース'), + (0x331D, 'M', u'コルナ'), + (0x331E, 'M', u'コーポ'), + (0x331F, 'M', u'サイクル'), + (0x3320, 'M', u'サンチーム'), + (0x3321, 'M', u'シリング'), + (0x3322, 'M', u'センチ'), + (0x3323, 'M', u'セント'), + (0x3324, 'M', u'ダース'), + (0x3325, 'M', u'デシ'), + (0x3326, 'M', u'ドル'), + (0x3327, 'M', u'トン'), + (0x3328, 'M', u'ナノ'), + (0x3329, 'M', u'ノット'), + (0x332A, 'M', u'ハイツ'), + (0x332B, 'M', u'パーセント'), + ] + +def _seg_33(): + return [ + (0x332C, 'M', u'パーツ'), + (0x332D, 'M', u'バーレル'), + (0x332E, 'M', u'ピアストル'), + (0x332F, 'M', u'ピクル'), + (0x3330, 'M', u'ピコ'), + (0x3331, 'M', u'ビル'), + (0x3332, 'M', u'ファラッド'), + (0x3333, 'M', u'フィート'), + (0x3334, 'M', u'ブッシェル'), + (0x3335, 'M', u'フラン'), + (0x3336, 'M', u'ヘクタール'), + (0x3337, 'M', u'ペソ'), + (0x3338, 'M', u'ペニヒ'), + (0x3339, 'M', u'ヘルツ'), + (0x333A, 'M', u'ペンス'), + (0x333B, 'M', u'ページ'), + (0x333C, 'M', u'ベータ'), + (0x333D, 'M', u'ポイント'), + (0x333E, 'M', u'ボルト'), + (0x333F, 'M', u'ホン'), + (0x3340, 'M', u'ポンド'), + (0x3341, 'M', u'ホール'), + (0x3342, 'M', u'ホーン'), + (0x3343, 'M', u'マイクロ'), + (0x3344, 'M', u'マイル'), + (0x3345, 'M', u'マッハ'), + (0x3346, 'M', u'マルク'), + (0x3347, 'M', u'マンション'), + (0x3348, 'M', u'ミクロン'), + (0x3349, 'M', u'ミリ'), + (0x334A, 'M', u'ミリバール'), + (0x334B, 'M', u'メガ'), + (0x334C, 'M', u'メガトン'), + (0x334D, 'M', u'メートル'), + (0x334E, 'M', u'ヤード'), + (0x334F, 'M', u'ヤール'), + (0x3350, 'M', u'ユアン'), + (0x3351, 'M', u'リットル'), + (0x3352, 'M', u'リラ'), + (0x3353, 'M', u'ルピー'), + (0x3354, 'M', u'ルーブル'), + (0x3355, 'M', u'レム'), + (0x3356, 'M', u'レントゲン'), + (0x3357, 'M', u'ワット'), + (0x3358, 'M', u'0点'), + (0x3359, 'M', u'1点'), + (0x335A, 'M', u'2点'), + (0x335B, 'M', u'3点'), + (0x335C, 'M', u'4点'), + (0x335D, 'M', u'5点'), + (0x335E, 'M', u'6点'), + (0x335F, 'M', u'7点'), + (0x3360, 'M', u'8点'), + (0x3361, 'M', u'9点'), + (0x3362, 'M', u'10点'), + (0x3363, 'M', u'11点'), + (0x3364, 'M', u'12点'), + (0x3365, 'M', u'13点'), + (0x3366, 'M', u'14点'), + (0x3367, 'M', u'15点'), + (0x3368, 'M', u'16点'), + (0x3369, 'M', u'17点'), + (0x336A, 'M', u'18点'), + (0x336B, 'M', u'19点'), + (0x336C, 'M', u'20点'), + (0x336D, 'M', u'21点'), + (0x336E, 'M', u'22点'), + (0x336F, 'M', u'23点'), + (0x3370, 'M', u'24点'), + (0x3371, 'M', u'hpa'), + (0x3372, 'M', u'da'), + (0x3373, 'M', u'au'), + (0x3374, 'M', u'bar'), + (0x3375, 'M', u'ov'), + (0x3376, 'M', u'pc'), + (0x3377, 'M', u'dm'), + (0x3378, 'M', u'dm2'), + (0x3379, 'M', u'dm3'), + (0x337A, 'M', u'iu'), + (0x337B, 'M', u'平成'), + (0x337C, 'M', u'昭和'), + (0x337D, 'M', u'大正'), + (0x337E, 'M', u'明治'), + (0x337F, 'M', u'株式会社'), + (0x3380, 'M', u'pa'), + (0x3381, 'M', u'na'), + (0x3382, 'M', u'μa'), + (0x3383, 'M', u'ma'), + (0x3384, 'M', u'ka'), + (0x3385, 'M', u'kb'), + (0x3386, 'M', u'mb'), + (0x3387, 'M', u'gb'), + (0x3388, 'M', u'cal'), + (0x3389, 'M', u'kcal'), + (0x338A, 'M', u'pf'), + (0x338B, 'M', u'nf'), + (0x338C, 'M', u'μf'), + (0x338D, 'M', u'μg'), + (0x338E, 'M', u'mg'), + (0x338F, 'M', u'kg'), + ] + +def _seg_34(): + return [ + (0x3390, 'M', u'hz'), + (0x3391, 'M', u'khz'), + (0x3392, 'M', u'mhz'), + (0x3393, 'M', u'ghz'), + (0x3394, 'M', u'thz'), + (0x3395, 'M', u'μl'), + (0x3396, 'M', u'ml'), + (0x3397, 'M', u'dl'), + (0x3398, 'M', u'kl'), + (0x3399, 'M', u'fm'), + (0x339A, 'M', u'nm'), + (0x339B, 'M', u'μm'), + (0x339C, 'M', u'mm'), + (0x339D, 'M', u'cm'), + (0x339E, 'M', u'km'), + (0x339F, 'M', u'mm2'), + (0x33A0, 'M', u'cm2'), + (0x33A1, 'M', u'm2'), + (0x33A2, 'M', u'km2'), + (0x33A3, 'M', u'mm3'), + (0x33A4, 'M', u'cm3'), + (0x33A5, 'M', u'm3'), + (0x33A6, 'M', u'km3'), + (0x33A7, 'M', u'm∕s'), + (0x33A8, 'M', u'm∕s2'), + (0x33A9, 'M', u'pa'), + (0x33AA, 'M', u'kpa'), + (0x33AB, 'M', u'mpa'), + (0x33AC, 'M', u'gpa'), + (0x33AD, 'M', u'rad'), + (0x33AE, 'M', u'rad∕s'), + (0x33AF, 'M', u'rad∕s2'), + (0x33B0, 'M', u'ps'), + (0x33B1, 'M', u'ns'), + (0x33B2, 'M', u'μs'), + (0x33B3, 'M', u'ms'), + (0x33B4, 'M', u'pv'), + (0x33B5, 'M', u'nv'), + (0x33B6, 'M', u'μv'), + (0x33B7, 'M', u'mv'), + (0x33B8, 'M', u'kv'), + (0x33B9, 'M', u'mv'), + (0x33BA, 'M', u'pw'), + (0x33BB, 'M', u'nw'), + (0x33BC, 'M', u'μw'), + (0x33BD, 'M', u'mw'), + (0x33BE, 'M', u'kw'), + (0x33BF, 'M', u'mw'), + (0x33C0, 'M', u'kω'), + (0x33C1, 'M', u'mω'), + (0x33C2, 'X'), + (0x33C3, 'M', u'bq'), + (0x33C4, 'M', u'cc'), + (0x33C5, 'M', u'cd'), + (0x33C6, 'M', u'c∕kg'), + (0x33C7, 'X'), + (0x33C8, 'M', u'db'), + (0x33C9, 'M', u'gy'), + (0x33CA, 'M', u'ha'), + (0x33CB, 'M', u'hp'), + (0x33CC, 'M', u'in'), + (0x33CD, 'M', u'kk'), + (0x33CE, 'M', u'km'), + (0x33CF, 'M', u'kt'), + (0x33D0, 'M', u'lm'), + (0x33D1, 'M', u'ln'), + (0x33D2, 'M', u'log'), + (0x33D3, 'M', u'lx'), + (0x33D4, 'M', u'mb'), + (0x33D5, 'M', u'mil'), + (0x33D6, 'M', u'mol'), + (0x33D7, 'M', u'ph'), + (0x33D8, 'X'), + (0x33D9, 'M', u'ppm'), + (0x33DA, 'M', u'pr'), + (0x33DB, 'M', u'sr'), + (0x33DC, 'M', u'sv'), + (0x33DD, 'M', u'wb'), + (0x33DE, 'M', u'v∕m'), + (0x33DF, 'M', u'a∕m'), + (0x33E0, 'M', u'1日'), + (0x33E1, 'M', u'2日'), + (0x33E2, 'M', u'3日'), + (0x33E3, 'M', u'4日'), + (0x33E4, 'M', u'5日'), + (0x33E5, 'M', u'6日'), + (0x33E6, 'M', u'7日'), + (0x33E7, 'M', u'8日'), + (0x33E8, 'M', u'9日'), + (0x33E9, 'M', u'10日'), + (0x33EA, 'M', u'11日'), + (0x33EB, 'M', u'12日'), + (0x33EC, 'M', u'13日'), + (0x33ED, 'M', u'14日'), + (0x33EE, 'M', u'15日'), + (0x33EF, 'M', u'16日'), + (0x33F0, 'M', u'17日'), + (0x33F1, 'M', u'18日'), + (0x33F2, 'M', u'19日'), + (0x33F3, 'M', u'20日'), + ] + +def _seg_35(): + return [ + (0x33F4, 'M', u'21日'), + (0x33F5, 'M', u'22日'), + (0x33F6, 'M', u'23日'), + (0x33F7, 'M', u'24日'), + (0x33F8, 'M', u'25日'), + (0x33F9, 'M', u'26日'), + (0x33FA, 'M', u'27日'), + (0x33FB, 'M', u'28日'), + (0x33FC, 'M', u'29日'), + (0x33FD, 'M', u'30日'), + (0x33FE, 'M', u'31日'), + (0x33FF, 'M', u'gal'), + (0x3400, 'V'), + (0x4DB6, 'X'), + (0x4DC0, 'V'), + (0x9FF0, 'X'), + (0xA000, 'V'), + (0xA48D, 'X'), + (0xA490, 'V'), + (0xA4C7, 'X'), + (0xA4D0, 'V'), + (0xA62C, 'X'), + (0xA640, 'M', u'ꙁ'), + (0xA641, 'V'), + (0xA642, 'M', u'ꙃ'), + (0xA643, 'V'), + (0xA644, 'M', u'ꙅ'), + (0xA645, 'V'), + (0xA646, 'M', u'ꙇ'), + (0xA647, 'V'), + (0xA648, 'M', u'ꙉ'), + (0xA649, 'V'), + (0xA64A, 'M', u'ꙋ'), + (0xA64B, 'V'), + (0xA64C, 'M', u'ꙍ'), + (0xA64D, 'V'), + (0xA64E, 'M', u'ꙏ'), + (0xA64F, 'V'), + (0xA650, 'M', u'ꙑ'), + (0xA651, 'V'), + (0xA652, 'M', u'ꙓ'), + (0xA653, 'V'), + (0xA654, 'M', u'ꙕ'), + (0xA655, 'V'), + (0xA656, 'M', u'ꙗ'), + (0xA657, 'V'), + (0xA658, 'M', u'ꙙ'), + (0xA659, 'V'), + (0xA65A, 'M', u'ꙛ'), + (0xA65B, 'V'), + (0xA65C, 'M', u'ꙝ'), + (0xA65D, 'V'), + (0xA65E, 'M', u'ꙟ'), + (0xA65F, 'V'), + (0xA660, 'M', u'ꙡ'), + (0xA661, 'V'), + (0xA662, 'M', u'ꙣ'), + (0xA663, 'V'), + (0xA664, 'M', u'ꙥ'), + (0xA665, 'V'), + (0xA666, 'M', u'ꙧ'), + (0xA667, 'V'), + (0xA668, 'M', u'ꙩ'), + (0xA669, 'V'), + (0xA66A, 'M', u'ꙫ'), + (0xA66B, 'V'), + (0xA66C, 'M', u'ꙭ'), + (0xA66D, 'V'), + (0xA680, 'M', u'ꚁ'), + (0xA681, 'V'), + (0xA682, 'M', u'ꚃ'), + (0xA683, 'V'), + (0xA684, 'M', u'ꚅ'), + (0xA685, 'V'), + (0xA686, 'M', u'ꚇ'), + (0xA687, 'V'), + (0xA688, 'M', u'ꚉ'), + (0xA689, 'V'), + (0xA68A, 'M', u'ꚋ'), + (0xA68B, 'V'), + (0xA68C, 'M', u'ꚍ'), + (0xA68D, 'V'), + (0xA68E, 'M', u'ꚏ'), + (0xA68F, 'V'), + (0xA690, 'M', u'ꚑ'), + (0xA691, 'V'), + (0xA692, 'M', u'ꚓ'), + (0xA693, 'V'), + (0xA694, 'M', u'ꚕ'), + (0xA695, 'V'), + (0xA696, 'M', u'ꚗ'), + (0xA697, 'V'), + (0xA698, 'M', u'ꚙ'), + (0xA699, 'V'), + (0xA69A, 'M', u'ꚛ'), + (0xA69B, 'V'), + (0xA69C, 'M', u'ъ'), + (0xA69D, 'M', u'ь'), + (0xA69E, 'V'), + (0xA6F8, 'X'), + ] + +def _seg_36(): + return [ + (0xA700, 'V'), + (0xA722, 'M', u'ꜣ'), + (0xA723, 'V'), + (0xA724, 'M', u'ꜥ'), + (0xA725, 'V'), + (0xA726, 'M', u'ꜧ'), + (0xA727, 'V'), + (0xA728, 'M', u'ꜩ'), + (0xA729, 'V'), + (0xA72A, 'M', u'ꜫ'), + (0xA72B, 'V'), + (0xA72C, 'M', u'ꜭ'), + (0xA72D, 'V'), + (0xA72E, 'M', u'ꜯ'), + (0xA72F, 'V'), + (0xA732, 'M', u'ꜳ'), + (0xA733, 'V'), + (0xA734, 'M', u'ꜵ'), + (0xA735, 'V'), + (0xA736, 'M', u'ꜷ'), + (0xA737, 'V'), + (0xA738, 'M', u'ꜹ'), + (0xA739, 'V'), + (0xA73A, 'M', u'ꜻ'), + (0xA73B, 'V'), + (0xA73C, 'M', u'ꜽ'), + (0xA73D, 'V'), + (0xA73E, 'M', u'ꜿ'), + (0xA73F, 'V'), + (0xA740, 'M', u'ꝁ'), + (0xA741, 'V'), + (0xA742, 'M', u'ꝃ'), + (0xA743, 'V'), + (0xA744, 'M', u'ꝅ'), + (0xA745, 'V'), + (0xA746, 'M', u'ꝇ'), + (0xA747, 'V'), + (0xA748, 'M', u'ꝉ'), + (0xA749, 'V'), + (0xA74A, 'M', u'ꝋ'), + (0xA74B, 'V'), + (0xA74C, 'M', u'ꝍ'), + (0xA74D, 'V'), + (0xA74E, 'M', u'ꝏ'), + (0xA74F, 'V'), + (0xA750, 'M', u'ꝑ'), + (0xA751, 'V'), + (0xA752, 'M', u'ꝓ'), + (0xA753, 'V'), + (0xA754, 'M', u'ꝕ'), + (0xA755, 'V'), + (0xA756, 'M', u'ꝗ'), + (0xA757, 'V'), + (0xA758, 'M', u'ꝙ'), + (0xA759, 'V'), + (0xA75A, 'M', u'ꝛ'), + (0xA75B, 'V'), + (0xA75C, 'M', u'ꝝ'), + (0xA75D, 'V'), + (0xA75E, 'M', u'ꝟ'), + (0xA75F, 'V'), + (0xA760, 'M', u'ꝡ'), + (0xA761, 'V'), + (0xA762, 'M', u'ꝣ'), + (0xA763, 'V'), + (0xA764, 'M', u'ꝥ'), + (0xA765, 'V'), + (0xA766, 'M', u'ꝧ'), + (0xA767, 'V'), + (0xA768, 'M', u'ꝩ'), + (0xA769, 'V'), + (0xA76A, 'M', u'ꝫ'), + (0xA76B, 'V'), + (0xA76C, 'M', u'ꝭ'), + (0xA76D, 'V'), + (0xA76E, 'M', u'ꝯ'), + (0xA76F, 'V'), + (0xA770, 'M', u'ꝯ'), + (0xA771, 'V'), + (0xA779, 'M', u'ꝺ'), + (0xA77A, 'V'), + (0xA77B, 'M', u'ꝼ'), + (0xA77C, 'V'), + (0xA77D, 'M', u'ᵹ'), + (0xA77E, 'M', u'ꝿ'), + (0xA77F, 'V'), + (0xA780, 'M', u'ꞁ'), + (0xA781, 'V'), + (0xA782, 'M', u'ꞃ'), + (0xA783, 'V'), + (0xA784, 'M', u'ꞅ'), + (0xA785, 'V'), + (0xA786, 'M', u'ꞇ'), + (0xA787, 'V'), + (0xA78B, 'M', u'ꞌ'), + (0xA78C, 'V'), + (0xA78D, 'M', u'ɥ'), + (0xA78E, 'V'), + (0xA790, 'M', u'ꞑ'), + (0xA791, 'V'), + ] + +def _seg_37(): + return [ + (0xA792, 'M', u'ꞓ'), + (0xA793, 'V'), + (0xA796, 'M', u'ꞗ'), + (0xA797, 'V'), + (0xA798, 'M', u'ꞙ'), + (0xA799, 'V'), + (0xA79A, 'M', u'ꞛ'), + (0xA79B, 'V'), + (0xA79C, 'M', u'ꞝ'), + (0xA79D, 'V'), + (0xA79E, 'M', u'ꞟ'), + (0xA79F, 'V'), + (0xA7A0, 'M', u'ꞡ'), + (0xA7A1, 'V'), + (0xA7A2, 'M', u'ꞣ'), + (0xA7A3, 'V'), + (0xA7A4, 'M', u'ꞥ'), + (0xA7A5, 'V'), + (0xA7A6, 'M', u'ꞧ'), + (0xA7A7, 'V'), + (0xA7A8, 'M', u'ꞩ'), + (0xA7A9, 'V'), + (0xA7AA, 'M', u'ɦ'), + (0xA7AB, 'M', u'ɜ'), + (0xA7AC, 'M', u'ɡ'), + (0xA7AD, 'M', u'ɬ'), + (0xA7AE, 'M', u'ɪ'), + (0xA7AF, 'V'), + (0xA7B0, 'M', u'ʞ'), + (0xA7B1, 'M', u'ʇ'), + (0xA7B2, 'M', u'ʝ'), + (0xA7B3, 'M', u'ꭓ'), + (0xA7B4, 'M', u'ꞵ'), + (0xA7B5, 'V'), + (0xA7B6, 'M', u'ꞷ'), + (0xA7B7, 'V'), + (0xA7B8, 'X'), + (0xA7B9, 'V'), + (0xA7BA, 'X'), + (0xA7F7, 'V'), + (0xA7F8, 'M', u'ħ'), + (0xA7F9, 'M', u'œ'), + (0xA7FA, 'V'), + (0xA82C, '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', u'ꜧ'), + (0xAB5D, 'M', u'ꬷ'), + (0xAB5E, 'M', u'ɫ'), + (0xAB5F, 'M', u'ꭒ'), + (0xAB60, 'V'), + (0xAB66, 'X'), + (0xAB70, 'M', u'Ꭰ'), + (0xAB71, 'M', u'Ꭱ'), + (0xAB72, 'M', u'Ꭲ'), + (0xAB73, 'M', u'Ꭳ'), + (0xAB74, 'M', u'Ꭴ'), + (0xAB75, 'M', u'Ꭵ'), + (0xAB76, 'M', u'Ꭶ'), + (0xAB77, 'M', u'Ꭷ'), + (0xAB78, 'M', u'Ꭸ'), + (0xAB79, 'M', u'Ꭹ'), + (0xAB7A, 'M', u'Ꭺ'), + ] + +def _seg_38(): + return [ + (0xAB7B, 'M', u'Ꭻ'), + (0xAB7C, 'M', u'Ꭼ'), + (0xAB7D, 'M', u'Ꭽ'), + (0xAB7E, 'M', u'Ꭾ'), + (0xAB7F, 'M', u'Ꭿ'), + (0xAB80, 'M', u'Ꮀ'), + (0xAB81, 'M', u'Ꮁ'), + (0xAB82, 'M', u'Ꮂ'), + (0xAB83, 'M', u'Ꮃ'), + (0xAB84, 'M', u'Ꮄ'), + (0xAB85, 'M', u'Ꮅ'), + (0xAB86, 'M', u'Ꮆ'), + (0xAB87, 'M', u'Ꮇ'), + (0xAB88, 'M', u'Ꮈ'), + (0xAB89, 'M', u'Ꮉ'), + (0xAB8A, 'M', u'Ꮊ'), + (0xAB8B, 'M', u'Ꮋ'), + (0xAB8C, 'M', u'Ꮌ'), + (0xAB8D, 'M', u'Ꮍ'), + (0xAB8E, 'M', u'Ꮎ'), + (0xAB8F, 'M', u'Ꮏ'), + (0xAB90, 'M', u'Ꮐ'), + (0xAB91, 'M', u'Ꮑ'), + (0xAB92, 'M', u'Ꮒ'), + (0xAB93, 'M', u'Ꮓ'), + (0xAB94, 'M', u'Ꮔ'), + (0xAB95, 'M', u'Ꮕ'), + (0xAB96, 'M', u'Ꮖ'), + (0xAB97, 'M', u'Ꮗ'), + (0xAB98, 'M', u'Ꮘ'), + (0xAB99, 'M', u'Ꮙ'), + (0xAB9A, 'M', u'Ꮚ'), + (0xAB9B, 'M', u'Ꮛ'), + (0xAB9C, 'M', u'Ꮜ'), + (0xAB9D, 'M', u'Ꮝ'), + (0xAB9E, 'M', u'Ꮞ'), + (0xAB9F, 'M', u'Ꮟ'), + (0xABA0, 'M', u'Ꮠ'), + (0xABA1, 'M', u'Ꮡ'), + (0xABA2, 'M', u'Ꮢ'), + (0xABA3, 'M', u'Ꮣ'), + (0xABA4, 'M', u'Ꮤ'), + (0xABA5, 'M', u'Ꮥ'), + (0xABA6, 'M', u'Ꮦ'), + (0xABA7, 'M', u'Ꮧ'), + (0xABA8, 'M', u'Ꮨ'), + (0xABA9, 'M', u'Ꮩ'), + (0xABAA, 'M', u'Ꮪ'), + (0xABAB, 'M', u'Ꮫ'), + (0xABAC, 'M', u'Ꮬ'), + (0xABAD, 'M', u'Ꮭ'), + (0xABAE, 'M', u'Ꮮ'), + (0xABAF, 'M', u'Ꮯ'), + (0xABB0, 'M', u'Ꮰ'), + (0xABB1, 'M', u'Ꮱ'), + (0xABB2, 'M', u'Ꮲ'), + (0xABB3, 'M', u'Ꮳ'), + (0xABB4, 'M', u'Ꮴ'), + (0xABB5, 'M', u'Ꮵ'), + (0xABB6, 'M', u'Ꮶ'), + (0xABB7, 'M', u'Ꮷ'), + (0xABB8, 'M', u'Ꮸ'), + (0xABB9, 'M', u'Ꮹ'), + (0xABBA, 'M', u'Ꮺ'), + (0xABBB, 'M', u'Ꮻ'), + (0xABBC, 'M', u'Ꮼ'), + (0xABBD, 'M', u'Ꮽ'), + (0xABBE, 'M', u'Ꮾ'), + (0xABBF, 'M', u'Ꮿ'), + (0xABC0, 'V'), + (0xABEE, 'X'), + (0xABF0, 'V'), + (0xABFA, 'X'), + (0xAC00, 'V'), + (0xD7A4, 'X'), + (0xD7B0, 'V'), + (0xD7C7, 'X'), + (0xD7CB, 'V'), + (0xD7FC, 'X'), + (0xF900, 'M', u'豈'), + (0xF901, 'M', u'更'), + (0xF902, 'M', u'車'), + (0xF903, 'M', u'賈'), + (0xF904, 'M', u'滑'), + (0xF905, 'M', u'串'), + (0xF906, 'M', u'句'), + (0xF907, 'M', u'龜'), + (0xF909, 'M', u'契'), + (0xF90A, 'M', u'金'), + (0xF90B, 'M', u'喇'), + (0xF90C, 'M', u'奈'), + (0xF90D, 'M', u'懶'), + (0xF90E, 'M', u'癩'), + (0xF90F, 'M', u'羅'), + (0xF910, 'M', u'蘿'), + (0xF911, 'M', u'螺'), + (0xF912, 'M', u'裸'), + (0xF913, 'M', u'邏'), + (0xF914, 'M', u'樂'), + (0xF915, 'M', u'洛'), + ] + +def _seg_39(): + return [ + (0xF916, 'M', u'烙'), + (0xF917, 'M', u'珞'), + (0xF918, 'M', u'落'), + (0xF919, 'M', u'酪'), + (0xF91A, 'M', u'駱'), + (0xF91B, 'M', u'亂'), + (0xF91C, 'M', u'卵'), + (0xF91D, 'M', u'欄'), + (0xF91E, 'M', u'爛'), + (0xF91F, 'M', u'蘭'), + (0xF920, 'M', u'鸞'), + (0xF921, 'M', u'嵐'), + (0xF922, 'M', u'濫'), + (0xF923, 'M', u'藍'), + (0xF924, 'M', u'襤'), + (0xF925, 'M', u'拉'), + (0xF926, 'M', u'臘'), + (0xF927, 'M', u'蠟'), + (0xF928, 'M', u'廊'), + (0xF929, 'M', u'朗'), + (0xF92A, 'M', u'浪'), + (0xF92B, 'M', u'狼'), + (0xF92C, 'M', u'郎'), + (0xF92D, 'M', u'來'), + (0xF92E, 'M', u'冷'), + (0xF92F, 'M', u'勞'), + (0xF930, 'M', u'擄'), + (0xF931, 'M', u'櫓'), + (0xF932, 'M', u'爐'), + (0xF933, 'M', u'盧'), + (0xF934, 'M', u'老'), + (0xF935, 'M', u'蘆'), + (0xF936, 'M', u'虜'), + (0xF937, 'M', u'路'), + (0xF938, 'M', u'露'), + (0xF939, 'M', u'魯'), + (0xF93A, 'M', u'鷺'), + (0xF93B, 'M', u'碌'), + (0xF93C, 'M', u'祿'), + (0xF93D, 'M', u'綠'), + (0xF93E, 'M', u'菉'), + (0xF93F, 'M', u'錄'), + (0xF940, 'M', u'鹿'), + (0xF941, 'M', u'論'), + (0xF942, 'M', u'壟'), + (0xF943, 'M', u'弄'), + (0xF944, 'M', u'籠'), + (0xF945, 'M', u'聾'), + (0xF946, 'M', u'牢'), + (0xF947, 'M', u'磊'), + (0xF948, 'M', u'賂'), + (0xF949, 'M', u'雷'), + (0xF94A, 'M', u'壘'), + (0xF94B, 'M', u'屢'), + (0xF94C, 'M', u'樓'), + (0xF94D, 'M', u'淚'), + (0xF94E, 'M', u'漏'), + (0xF94F, 'M', u'累'), + (0xF950, 'M', u'縷'), + (0xF951, 'M', u'陋'), + (0xF952, 'M', u'勒'), + (0xF953, 'M', u'肋'), + (0xF954, 'M', u'凜'), + (0xF955, 'M', u'凌'), + (0xF956, 'M', u'稜'), + (0xF957, 'M', u'綾'), + (0xF958, 'M', u'菱'), + (0xF959, 'M', u'陵'), + (0xF95A, 'M', u'讀'), + (0xF95B, 'M', u'拏'), + (0xF95C, 'M', u'樂'), + (0xF95D, 'M', u'諾'), + (0xF95E, 'M', u'丹'), + (0xF95F, 'M', u'寧'), + (0xF960, 'M', u'怒'), + (0xF961, 'M', u'率'), + (0xF962, 'M', u'異'), + (0xF963, 'M', u'北'), + (0xF964, 'M', u'磻'), + (0xF965, 'M', u'便'), + (0xF966, 'M', u'復'), + (0xF967, 'M', u'不'), + (0xF968, 'M', u'泌'), + (0xF969, 'M', u'數'), + (0xF96A, 'M', u'索'), + (0xF96B, 'M', u'參'), + (0xF96C, 'M', u'塞'), + (0xF96D, 'M', u'省'), + (0xF96E, 'M', u'葉'), + (0xF96F, 'M', u'說'), + (0xF970, 'M', u'殺'), + (0xF971, 'M', u'辰'), + (0xF972, 'M', u'沈'), + (0xF973, 'M', u'拾'), + (0xF974, 'M', u'若'), + (0xF975, 'M', u'掠'), + (0xF976, 'M', u'略'), + (0xF977, 'M', u'亮'), + (0xF978, 'M', u'兩'), + (0xF979, 'M', u'凉'), + ] + +def _seg_40(): + return [ + (0xF97A, 'M', u'梁'), + (0xF97B, 'M', u'糧'), + (0xF97C, 'M', u'良'), + (0xF97D, 'M', u'諒'), + (0xF97E, 'M', u'量'), + (0xF97F, 'M', u'勵'), + (0xF980, 'M', u'呂'), + (0xF981, 'M', u'女'), + (0xF982, 'M', u'廬'), + (0xF983, 'M', u'旅'), + (0xF984, 'M', u'濾'), + (0xF985, 'M', u'礪'), + (0xF986, 'M', u'閭'), + (0xF987, 'M', u'驪'), + (0xF988, 'M', u'麗'), + (0xF989, 'M', u'黎'), + (0xF98A, 'M', u'力'), + (0xF98B, 'M', u'曆'), + (0xF98C, 'M', u'歷'), + (0xF98D, 'M', u'轢'), + (0xF98E, 'M', u'年'), + (0xF98F, 'M', u'憐'), + (0xF990, 'M', u'戀'), + (0xF991, 'M', u'撚'), + (0xF992, 'M', u'漣'), + (0xF993, 'M', u'煉'), + (0xF994, 'M', u'璉'), + (0xF995, 'M', u'秊'), + (0xF996, 'M', u'練'), + (0xF997, 'M', u'聯'), + (0xF998, 'M', u'輦'), + (0xF999, 'M', u'蓮'), + (0xF99A, 'M', u'連'), + (0xF99B, 'M', u'鍊'), + (0xF99C, 'M', u'列'), + (0xF99D, 'M', u'劣'), + (0xF99E, 'M', u'咽'), + (0xF99F, 'M', u'烈'), + (0xF9A0, 'M', u'裂'), + (0xF9A1, 'M', u'說'), + (0xF9A2, 'M', u'廉'), + (0xF9A3, 'M', u'念'), + (0xF9A4, 'M', u'捻'), + (0xF9A5, 'M', u'殮'), + (0xF9A6, 'M', u'簾'), + (0xF9A7, 'M', u'獵'), + (0xF9A8, 'M', u'令'), + (0xF9A9, 'M', u'囹'), + (0xF9AA, 'M', u'寧'), + (0xF9AB, 'M', u'嶺'), + (0xF9AC, 'M', u'怜'), + (0xF9AD, 'M', u'玲'), + (0xF9AE, 'M', u'瑩'), + (0xF9AF, 'M', u'羚'), + (0xF9B0, 'M', u'聆'), + (0xF9B1, 'M', u'鈴'), + (0xF9B2, 'M', u'零'), + (0xF9B3, 'M', u'靈'), + (0xF9B4, 'M', u'領'), + (0xF9B5, 'M', u'例'), + (0xF9B6, 'M', u'禮'), + (0xF9B7, 'M', u'醴'), + (0xF9B8, 'M', u'隸'), + (0xF9B9, 'M', u'惡'), + (0xF9BA, 'M', u'了'), + (0xF9BB, 'M', u'僚'), + (0xF9BC, 'M', u'寮'), + (0xF9BD, 'M', u'尿'), + (0xF9BE, 'M', u'料'), + (0xF9BF, 'M', u'樂'), + (0xF9C0, 'M', u'燎'), + (0xF9C1, 'M', u'療'), + (0xF9C2, 'M', u'蓼'), + (0xF9C3, 'M', u'遼'), + (0xF9C4, 'M', u'龍'), + (0xF9C5, 'M', u'暈'), + (0xF9C6, 'M', u'阮'), + (0xF9C7, 'M', u'劉'), + (0xF9C8, 'M', u'杻'), + (0xF9C9, 'M', u'柳'), + (0xF9CA, 'M', u'流'), + (0xF9CB, 'M', u'溜'), + (0xF9CC, 'M', u'琉'), + (0xF9CD, 'M', u'留'), + (0xF9CE, 'M', u'硫'), + (0xF9CF, 'M', u'紐'), + (0xF9D0, 'M', u'類'), + (0xF9D1, 'M', u'六'), + (0xF9D2, 'M', u'戮'), + (0xF9D3, 'M', u'陸'), + (0xF9D4, 'M', u'倫'), + (0xF9D5, 'M', u'崙'), + (0xF9D6, 'M', u'淪'), + (0xF9D7, 'M', u'輪'), + (0xF9D8, 'M', u'律'), + (0xF9D9, 'M', u'慄'), + (0xF9DA, 'M', u'栗'), + (0xF9DB, 'M', u'率'), + (0xF9DC, 'M', u'隆'), + (0xF9DD, 'M', u'利'), + ] + +def _seg_41(): + return [ + (0xF9DE, 'M', u'吏'), + (0xF9DF, 'M', u'履'), + (0xF9E0, 'M', u'易'), + (0xF9E1, 'M', u'李'), + (0xF9E2, 'M', u'梨'), + (0xF9E3, 'M', u'泥'), + (0xF9E4, 'M', u'理'), + (0xF9E5, 'M', u'痢'), + (0xF9E6, 'M', u'罹'), + (0xF9E7, 'M', u'裏'), + (0xF9E8, 'M', u'裡'), + (0xF9E9, 'M', u'里'), + (0xF9EA, 'M', u'離'), + (0xF9EB, 'M', u'匿'), + (0xF9EC, 'M', u'溺'), + (0xF9ED, 'M', u'吝'), + (0xF9EE, 'M', u'燐'), + (0xF9EF, 'M', u'璘'), + (0xF9F0, 'M', u'藺'), + (0xF9F1, 'M', u'隣'), + (0xF9F2, 'M', u'鱗'), + (0xF9F3, 'M', u'麟'), + (0xF9F4, 'M', u'林'), + (0xF9F5, 'M', u'淋'), + (0xF9F6, 'M', u'臨'), + (0xF9F7, 'M', u'立'), + (0xF9F8, 'M', u'笠'), + (0xF9F9, 'M', u'粒'), + (0xF9FA, 'M', u'狀'), + (0xF9FB, 'M', u'炙'), + (0xF9FC, 'M', u'識'), + (0xF9FD, 'M', u'什'), + (0xF9FE, 'M', u'茶'), + (0xF9FF, 'M', u'刺'), + (0xFA00, 'M', u'切'), + (0xFA01, 'M', u'度'), + (0xFA02, 'M', u'拓'), + (0xFA03, 'M', u'糖'), + (0xFA04, 'M', u'宅'), + (0xFA05, 'M', u'洞'), + (0xFA06, 'M', u'暴'), + (0xFA07, 'M', u'輻'), + (0xFA08, 'M', u'行'), + (0xFA09, 'M', u'降'), + (0xFA0A, 'M', u'見'), + (0xFA0B, 'M', u'廓'), + (0xFA0C, 'M', u'兀'), + (0xFA0D, 'M', u'嗀'), + (0xFA0E, 'V'), + (0xFA10, 'M', u'塚'), + (0xFA11, 'V'), + (0xFA12, 'M', u'晴'), + (0xFA13, 'V'), + (0xFA15, 'M', u'凞'), + (0xFA16, 'M', u'猪'), + (0xFA17, 'M', u'益'), + (0xFA18, 'M', u'礼'), + (0xFA19, 'M', u'神'), + (0xFA1A, 'M', u'祥'), + (0xFA1B, 'M', u'福'), + (0xFA1C, 'M', u'靖'), + (0xFA1D, 'M', u'精'), + (0xFA1E, 'M', u'羽'), + (0xFA1F, 'V'), + (0xFA20, 'M', u'蘒'), + (0xFA21, 'V'), + (0xFA22, 'M', u'諸'), + (0xFA23, 'V'), + (0xFA25, 'M', u'逸'), + (0xFA26, 'M', u'都'), + (0xFA27, 'V'), + (0xFA2A, 'M', u'飯'), + (0xFA2B, 'M', u'飼'), + (0xFA2C, 'M', u'館'), + (0xFA2D, 'M', u'鶴'), + (0xFA2E, 'M', u'郞'), + (0xFA2F, 'M', u'隷'), + (0xFA30, 'M', u'侮'), + (0xFA31, 'M', u'僧'), + (0xFA32, 'M', u'免'), + (0xFA33, 'M', u'勉'), + (0xFA34, 'M', u'勤'), + (0xFA35, 'M', u'卑'), + (0xFA36, 'M', u'喝'), + (0xFA37, 'M', u'嘆'), + (0xFA38, 'M', u'器'), + (0xFA39, 'M', u'塀'), + (0xFA3A, 'M', u'墨'), + (0xFA3B, 'M', u'層'), + (0xFA3C, 'M', u'屮'), + (0xFA3D, 'M', u'悔'), + (0xFA3E, 'M', u'慨'), + (0xFA3F, 'M', u'憎'), + (0xFA40, 'M', u'懲'), + (0xFA41, 'M', u'敏'), + (0xFA42, 'M', u'既'), + (0xFA43, 'M', u'暑'), + (0xFA44, 'M', u'梅'), + (0xFA45, 'M', u'海'), + (0xFA46, 'M', u'渚'), + ] + +def _seg_42(): + return [ + (0xFA47, 'M', u'漢'), + (0xFA48, 'M', u'煮'), + (0xFA49, 'M', u'爫'), + (0xFA4A, 'M', u'琢'), + (0xFA4B, 'M', u'碑'), + (0xFA4C, 'M', u'社'), + (0xFA4D, 'M', u'祉'), + (0xFA4E, 'M', u'祈'), + (0xFA4F, 'M', u'祐'), + (0xFA50, 'M', u'祖'), + (0xFA51, 'M', u'祝'), + (0xFA52, 'M', u'禍'), + (0xFA53, 'M', u'禎'), + (0xFA54, 'M', u'穀'), + (0xFA55, 'M', u'突'), + (0xFA56, 'M', u'節'), + (0xFA57, 'M', u'練'), + (0xFA58, 'M', u'縉'), + (0xFA59, 'M', u'繁'), + (0xFA5A, 'M', u'署'), + (0xFA5B, 'M', u'者'), + (0xFA5C, 'M', u'臭'), + (0xFA5D, 'M', u'艹'), + (0xFA5F, 'M', u'著'), + (0xFA60, 'M', u'褐'), + (0xFA61, 'M', u'視'), + (0xFA62, 'M', u'謁'), + (0xFA63, 'M', u'謹'), + (0xFA64, 'M', u'賓'), + (0xFA65, 'M', u'贈'), + (0xFA66, 'M', u'辶'), + (0xFA67, 'M', u'逸'), + (0xFA68, 'M', u'難'), + (0xFA69, 'M', u'響'), + (0xFA6A, 'M', u'頻'), + (0xFA6B, 'M', u'恵'), + (0xFA6C, 'M', u'𤋮'), + (0xFA6D, 'M', u'舘'), + (0xFA6E, 'X'), + (0xFA70, 'M', u'並'), + (0xFA71, 'M', u'况'), + (0xFA72, 'M', u'全'), + (0xFA73, 'M', u'侀'), + (0xFA74, 'M', u'充'), + (0xFA75, 'M', u'冀'), + (0xFA76, 'M', u'勇'), + (0xFA77, 'M', u'勺'), + (0xFA78, 'M', u'喝'), + (0xFA79, 'M', u'啕'), + (0xFA7A, 'M', u'喙'), + (0xFA7B, 'M', u'嗢'), + (0xFA7C, 'M', u'塚'), + (0xFA7D, 'M', u'墳'), + (0xFA7E, 'M', u'奄'), + (0xFA7F, 'M', u'奔'), + (0xFA80, 'M', u'婢'), + (0xFA81, 'M', u'嬨'), + (0xFA82, 'M', u'廒'), + (0xFA83, 'M', u'廙'), + (0xFA84, 'M', u'彩'), + (0xFA85, 'M', u'徭'), + (0xFA86, 'M', u'惘'), + (0xFA87, 'M', u'慎'), + (0xFA88, 'M', u'愈'), + (0xFA89, 'M', u'憎'), + (0xFA8A, 'M', u'慠'), + (0xFA8B, 'M', u'懲'), + (0xFA8C, 'M', u'戴'), + (0xFA8D, 'M', u'揄'), + (0xFA8E, 'M', u'搜'), + (0xFA8F, 'M', u'摒'), + (0xFA90, 'M', u'敖'), + (0xFA91, 'M', u'晴'), + (0xFA92, 'M', u'朗'), + (0xFA93, 'M', u'望'), + (0xFA94, 'M', u'杖'), + (0xFA95, 'M', u'歹'), + (0xFA96, 'M', u'殺'), + (0xFA97, 'M', u'流'), + (0xFA98, 'M', u'滛'), + (0xFA99, 'M', u'滋'), + (0xFA9A, 'M', u'漢'), + (0xFA9B, 'M', u'瀞'), + (0xFA9C, 'M', u'煮'), + (0xFA9D, 'M', u'瞧'), + (0xFA9E, 'M', u'爵'), + (0xFA9F, 'M', u'犯'), + (0xFAA0, 'M', u'猪'), + (0xFAA1, 'M', u'瑱'), + (0xFAA2, 'M', u'甆'), + (0xFAA3, 'M', u'画'), + (0xFAA4, 'M', u'瘝'), + (0xFAA5, 'M', u'瘟'), + (0xFAA6, 'M', u'益'), + (0xFAA7, 'M', u'盛'), + (0xFAA8, 'M', u'直'), + (0xFAA9, 'M', u'睊'), + (0xFAAA, 'M', u'着'), + (0xFAAB, 'M', u'磌'), + (0xFAAC, 'M', u'窱'), + ] + +def _seg_43(): + return [ + (0xFAAD, 'M', u'節'), + (0xFAAE, 'M', u'类'), + (0xFAAF, 'M', u'絛'), + (0xFAB0, 'M', u'練'), + (0xFAB1, 'M', u'缾'), + (0xFAB2, 'M', u'者'), + (0xFAB3, 'M', u'荒'), + (0xFAB4, 'M', u'華'), + (0xFAB5, 'M', u'蝹'), + (0xFAB6, 'M', u'襁'), + (0xFAB7, 'M', u'覆'), + (0xFAB8, 'M', u'視'), + (0xFAB9, 'M', u'調'), + (0xFABA, 'M', u'諸'), + (0xFABB, 'M', u'請'), + (0xFABC, 'M', u'謁'), + (0xFABD, 'M', u'諾'), + (0xFABE, 'M', u'諭'), + (0xFABF, 'M', u'謹'), + (0xFAC0, 'M', u'變'), + (0xFAC1, 'M', u'贈'), + (0xFAC2, 'M', u'輸'), + (0xFAC3, 'M', u'遲'), + (0xFAC4, 'M', u'醙'), + (0xFAC5, 'M', u'鉶'), + (0xFAC6, 'M', u'陼'), + (0xFAC7, 'M', u'難'), + (0xFAC8, 'M', u'靖'), + (0xFAC9, 'M', u'韛'), + (0xFACA, 'M', u'響'), + (0xFACB, 'M', u'頋'), + (0xFACC, 'M', u'頻'), + (0xFACD, 'M', u'鬒'), + (0xFACE, 'M', u'龜'), + (0xFACF, 'M', u'𢡊'), + (0xFAD0, 'M', u'𢡄'), + (0xFAD1, 'M', u'𣏕'), + (0xFAD2, 'M', u'㮝'), + (0xFAD3, 'M', u'䀘'), + (0xFAD4, 'M', u'䀹'), + (0xFAD5, 'M', u'𥉉'), + (0xFAD6, 'M', u'𥳐'), + (0xFAD7, 'M', u'𧻓'), + (0xFAD8, 'M', u'齃'), + (0xFAD9, 'M', u'龎'), + (0xFADA, 'X'), + (0xFB00, 'M', u'ff'), + (0xFB01, 'M', u'fi'), + (0xFB02, 'M', u'fl'), + (0xFB03, 'M', u'ffi'), + (0xFB04, 'M', u'ffl'), + (0xFB05, 'M', u'st'), + (0xFB07, 'X'), + (0xFB13, 'M', u'մն'), + (0xFB14, 'M', u'մե'), + (0xFB15, 'M', u'մի'), + (0xFB16, 'M', u'վն'), + (0xFB17, 'M', u'մխ'), + (0xFB18, 'X'), + (0xFB1D, 'M', u'יִ'), + (0xFB1E, 'V'), + (0xFB1F, 'M', u'ײַ'), + (0xFB20, 'M', u'ע'), + (0xFB21, 'M', u'א'), + (0xFB22, 'M', u'ד'), + (0xFB23, 'M', u'ה'), + (0xFB24, 'M', u'כ'), + (0xFB25, 'M', u'ל'), + (0xFB26, 'M', u'ם'), + (0xFB27, 'M', u'ר'), + (0xFB28, 'M', u'ת'), + (0xFB29, '3', u'+'), + (0xFB2A, 'M', u'שׁ'), + (0xFB2B, 'M', u'שׂ'), + (0xFB2C, 'M', u'שּׁ'), + (0xFB2D, 'M', u'שּׂ'), + (0xFB2E, 'M', u'אַ'), + (0xFB2F, 'M', u'אָ'), + (0xFB30, 'M', u'אּ'), + (0xFB31, 'M', u'בּ'), + (0xFB32, 'M', u'גּ'), + (0xFB33, 'M', u'דּ'), + (0xFB34, 'M', u'הּ'), + (0xFB35, 'M', u'וּ'), + (0xFB36, 'M', u'זּ'), + (0xFB37, 'X'), + (0xFB38, 'M', u'טּ'), + (0xFB39, 'M', u'יּ'), + (0xFB3A, 'M', u'ךּ'), + (0xFB3B, 'M', u'כּ'), + (0xFB3C, 'M', u'לּ'), + (0xFB3D, 'X'), + (0xFB3E, 'M', u'מּ'), + (0xFB3F, 'X'), + (0xFB40, 'M', u'נּ'), + (0xFB41, 'M', u'סּ'), + (0xFB42, 'X'), + (0xFB43, 'M', u'ףּ'), + (0xFB44, 'M', u'פּ'), + (0xFB45, 'X'), + ] + +def _seg_44(): + return [ + (0xFB46, 'M', u'צּ'), + (0xFB47, 'M', u'קּ'), + (0xFB48, 'M', u'רּ'), + (0xFB49, 'M', u'שּ'), + (0xFB4A, 'M', u'תּ'), + (0xFB4B, 'M', u'וֹ'), + (0xFB4C, 'M', u'בֿ'), + (0xFB4D, 'M', u'כֿ'), + (0xFB4E, 'M', u'פֿ'), + (0xFB4F, 'M', u'אל'), + (0xFB50, 'M', u'ٱ'), + (0xFB52, 'M', u'ٻ'), + (0xFB56, 'M', u'پ'), + (0xFB5A, 'M', u'ڀ'), + (0xFB5E, 'M', u'ٺ'), + (0xFB62, 'M', u'ٿ'), + (0xFB66, 'M', u'ٹ'), + (0xFB6A, 'M', u'ڤ'), + (0xFB6E, 'M', u'ڦ'), + (0xFB72, 'M', u'ڄ'), + (0xFB76, 'M', u'ڃ'), + (0xFB7A, 'M', u'چ'), + (0xFB7E, 'M', u'ڇ'), + (0xFB82, 'M', u'ڍ'), + (0xFB84, 'M', u'ڌ'), + (0xFB86, 'M', u'ڎ'), + (0xFB88, 'M', u'ڈ'), + (0xFB8A, 'M', u'ژ'), + (0xFB8C, 'M', u'ڑ'), + (0xFB8E, 'M', u'ک'), + (0xFB92, 'M', u'گ'), + (0xFB96, 'M', u'ڳ'), + (0xFB9A, 'M', u'ڱ'), + (0xFB9E, 'M', u'ں'), + (0xFBA0, 'M', u'ڻ'), + (0xFBA4, 'M', u'ۀ'), + (0xFBA6, 'M', u'ہ'), + (0xFBAA, 'M', u'ھ'), + (0xFBAE, 'M', u'ے'), + (0xFBB0, 'M', u'ۓ'), + (0xFBB2, 'V'), + (0xFBC2, 'X'), + (0xFBD3, 'M', u'ڭ'), + (0xFBD7, 'M', u'ۇ'), + (0xFBD9, 'M', u'ۆ'), + (0xFBDB, 'M', u'ۈ'), + (0xFBDD, 'M', u'ۇٴ'), + (0xFBDE, 'M', u'ۋ'), + (0xFBE0, 'M', u'ۅ'), + (0xFBE2, 'M', u'ۉ'), + (0xFBE4, 'M', u'ې'), + (0xFBE8, 'M', u'ى'), + (0xFBEA, 'M', u'ئا'), + (0xFBEC, 'M', u'ئە'), + (0xFBEE, 'M', u'ئو'), + (0xFBF0, 'M', u'ئۇ'), + (0xFBF2, 'M', u'ئۆ'), + (0xFBF4, 'M', u'ئۈ'), + (0xFBF6, 'M', u'ئې'), + (0xFBF9, 'M', u'ئى'), + (0xFBFC, 'M', u'ی'), + (0xFC00, 'M', u'ئج'), + (0xFC01, 'M', u'ئح'), + (0xFC02, 'M', u'ئم'), + (0xFC03, 'M', u'ئى'), + (0xFC04, 'M', u'ئي'), + (0xFC05, 'M', u'بج'), + (0xFC06, 'M', u'بح'), + (0xFC07, 'M', u'بخ'), + (0xFC08, 'M', u'بم'), + (0xFC09, 'M', u'بى'), + (0xFC0A, 'M', u'بي'), + (0xFC0B, 'M', u'تج'), + (0xFC0C, 'M', u'تح'), + (0xFC0D, 'M', u'تخ'), + (0xFC0E, 'M', u'تم'), + (0xFC0F, 'M', u'تى'), + (0xFC10, 'M', u'تي'), + (0xFC11, 'M', u'ثج'), + (0xFC12, 'M', u'ثم'), + (0xFC13, 'M', u'ثى'), + (0xFC14, 'M', u'ثي'), + (0xFC15, 'M', u'جح'), + (0xFC16, 'M', u'جم'), + (0xFC17, 'M', u'حج'), + (0xFC18, 'M', u'حم'), + (0xFC19, 'M', u'خج'), + (0xFC1A, 'M', u'خح'), + (0xFC1B, 'M', u'خم'), + (0xFC1C, 'M', u'سج'), + (0xFC1D, 'M', u'سح'), + (0xFC1E, 'M', u'سخ'), + (0xFC1F, 'M', u'سم'), + (0xFC20, 'M', u'صح'), + (0xFC21, 'M', u'صم'), + (0xFC22, 'M', u'ضج'), + (0xFC23, 'M', u'ضح'), + (0xFC24, 'M', u'ضخ'), + (0xFC25, 'M', u'ضم'), + (0xFC26, 'M', u'طح'), + ] + +def _seg_45(): + return [ + (0xFC27, 'M', u'طم'), + (0xFC28, 'M', u'ظم'), + (0xFC29, 'M', u'عج'), + (0xFC2A, 'M', u'عم'), + (0xFC2B, 'M', u'غج'), + (0xFC2C, 'M', u'غم'), + (0xFC2D, 'M', u'فج'), + (0xFC2E, 'M', u'فح'), + (0xFC2F, 'M', u'فخ'), + (0xFC30, 'M', u'فم'), + (0xFC31, 'M', u'فى'), + (0xFC32, 'M', u'في'), + (0xFC33, 'M', u'قح'), + (0xFC34, 'M', u'قم'), + (0xFC35, 'M', u'قى'), + (0xFC36, 'M', u'قي'), + (0xFC37, 'M', u'كا'), + (0xFC38, 'M', u'كج'), + (0xFC39, 'M', u'كح'), + (0xFC3A, 'M', u'كخ'), + (0xFC3B, 'M', u'كل'), + (0xFC3C, 'M', u'كم'), + (0xFC3D, 'M', u'كى'), + (0xFC3E, 'M', u'كي'), + (0xFC3F, 'M', u'لج'), + (0xFC40, 'M', u'لح'), + (0xFC41, 'M', u'لخ'), + (0xFC42, 'M', u'لم'), + (0xFC43, 'M', u'لى'), + (0xFC44, 'M', u'لي'), + (0xFC45, 'M', u'مج'), + (0xFC46, 'M', u'مح'), + (0xFC47, 'M', u'مخ'), + (0xFC48, 'M', u'مم'), + (0xFC49, 'M', u'مى'), + (0xFC4A, 'M', u'مي'), + (0xFC4B, 'M', u'نج'), + (0xFC4C, 'M', u'نح'), + (0xFC4D, 'M', u'نخ'), + (0xFC4E, 'M', u'نم'), + (0xFC4F, 'M', u'نى'), + (0xFC50, 'M', u'ني'), + (0xFC51, 'M', u'هج'), + (0xFC52, 'M', u'هم'), + (0xFC53, 'M', u'هى'), + (0xFC54, 'M', u'هي'), + (0xFC55, 'M', u'يج'), + (0xFC56, 'M', u'يح'), + (0xFC57, 'M', u'يخ'), + (0xFC58, 'M', u'يم'), + (0xFC59, 'M', u'يى'), + (0xFC5A, 'M', u'يي'), + (0xFC5B, 'M', u'ذٰ'), + (0xFC5C, 'M', u'رٰ'), + (0xFC5D, 'M', u'ىٰ'), + (0xFC5E, '3', u' ٌّ'), + (0xFC5F, '3', u' ٍّ'), + (0xFC60, '3', u' َّ'), + (0xFC61, '3', u' ُّ'), + (0xFC62, '3', u' ِّ'), + (0xFC63, '3', u' ّٰ'), + (0xFC64, 'M', u'ئر'), + (0xFC65, 'M', u'ئز'), + (0xFC66, 'M', u'ئم'), + (0xFC67, 'M', u'ئن'), + (0xFC68, 'M', u'ئى'), + (0xFC69, 'M', u'ئي'), + (0xFC6A, 'M', u'بر'), + (0xFC6B, 'M', u'بز'), + (0xFC6C, 'M', u'بم'), + (0xFC6D, 'M', u'بن'), + (0xFC6E, 'M', u'بى'), + (0xFC6F, 'M', u'بي'), + (0xFC70, 'M', u'تر'), + (0xFC71, 'M', u'تز'), + (0xFC72, 'M', u'تم'), + (0xFC73, 'M', u'تن'), + (0xFC74, 'M', u'تى'), + (0xFC75, 'M', u'تي'), + (0xFC76, 'M', u'ثر'), + (0xFC77, 'M', u'ثز'), + (0xFC78, 'M', u'ثم'), + (0xFC79, 'M', u'ثن'), + (0xFC7A, 'M', u'ثى'), + (0xFC7B, 'M', u'ثي'), + (0xFC7C, 'M', u'فى'), + (0xFC7D, 'M', u'في'), + (0xFC7E, 'M', u'قى'), + (0xFC7F, 'M', u'قي'), + (0xFC80, 'M', u'كا'), + (0xFC81, 'M', u'كل'), + (0xFC82, 'M', u'كم'), + (0xFC83, 'M', u'كى'), + (0xFC84, 'M', u'كي'), + (0xFC85, 'M', u'لم'), + (0xFC86, 'M', u'لى'), + (0xFC87, 'M', u'لي'), + (0xFC88, 'M', u'ما'), + (0xFC89, 'M', u'مم'), + (0xFC8A, 'M', u'نر'), + ] + +def _seg_46(): + return [ + (0xFC8B, 'M', u'نز'), + (0xFC8C, 'M', u'نم'), + (0xFC8D, 'M', u'نن'), + (0xFC8E, 'M', u'نى'), + (0xFC8F, 'M', u'ني'), + (0xFC90, 'M', u'ىٰ'), + (0xFC91, 'M', u'ير'), + (0xFC92, 'M', u'يز'), + (0xFC93, 'M', u'يم'), + (0xFC94, 'M', u'ين'), + (0xFC95, 'M', u'يى'), + (0xFC96, 'M', u'يي'), + (0xFC97, 'M', u'ئج'), + (0xFC98, 'M', u'ئح'), + (0xFC99, 'M', u'ئخ'), + (0xFC9A, 'M', u'ئم'), + (0xFC9B, 'M', u'ئه'), + (0xFC9C, 'M', u'بج'), + (0xFC9D, 'M', u'بح'), + (0xFC9E, 'M', u'بخ'), + (0xFC9F, 'M', u'بم'), + (0xFCA0, 'M', u'به'), + (0xFCA1, 'M', u'تج'), + (0xFCA2, 'M', u'تح'), + (0xFCA3, 'M', u'تخ'), + (0xFCA4, 'M', u'تم'), + (0xFCA5, 'M', u'ته'), + (0xFCA6, 'M', u'ثم'), + (0xFCA7, 'M', u'جح'), + (0xFCA8, 'M', u'جم'), + (0xFCA9, 'M', u'حج'), + (0xFCAA, 'M', u'حم'), + (0xFCAB, 'M', u'خج'), + (0xFCAC, 'M', u'خم'), + (0xFCAD, 'M', u'سج'), + (0xFCAE, 'M', u'سح'), + (0xFCAF, 'M', u'سخ'), + (0xFCB0, 'M', u'سم'), + (0xFCB1, 'M', u'صح'), + (0xFCB2, 'M', u'صخ'), + (0xFCB3, 'M', u'صم'), + (0xFCB4, 'M', u'ضج'), + (0xFCB5, 'M', u'ضح'), + (0xFCB6, 'M', u'ضخ'), + (0xFCB7, 'M', u'ضم'), + (0xFCB8, 'M', u'طح'), + (0xFCB9, 'M', u'ظم'), + (0xFCBA, 'M', u'عج'), + (0xFCBB, 'M', u'عم'), + (0xFCBC, 'M', u'غج'), + (0xFCBD, 'M', u'غم'), + (0xFCBE, 'M', u'فج'), + (0xFCBF, 'M', u'فح'), + (0xFCC0, 'M', u'فخ'), + (0xFCC1, 'M', u'فم'), + (0xFCC2, 'M', u'قح'), + (0xFCC3, 'M', u'قم'), + (0xFCC4, 'M', u'كج'), + (0xFCC5, 'M', u'كح'), + (0xFCC6, 'M', u'كخ'), + (0xFCC7, 'M', u'كل'), + (0xFCC8, 'M', u'كم'), + (0xFCC9, 'M', u'لج'), + (0xFCCA, 'M', u'لح'), + (0xFCCB, 'M', u'لخ'), + (0xFCCC, 'M', u'لم'), + (0xFCCD, 'M', u'له'), + (0xFCCE, 'M', u'مج'), + (0xFCCF, 'M', u'مح'), + (0xFCD0, 'M', u'مخ'), + (0xFCD1, 'M', u'مم'), + (0xFCD2, 'M', u'نج'), + (0xFCD3, 'M', u'نح'), + (0xFCD4, 'M', u'نخ'), + (0xFCD5, 'M', u'نم'), + (0xFCD6, 'M', u'نه'), + (0xFCD7, 'M', u'هج'), + (0xFCD8, 'M', u'هم'), + (0xFCD9, 'M', u'هٰ'), + (0xFCDA, 'M', u'يج'), + (0xFCDB, 'M', u'يح'), + (0xFCDC, 'M', u'يخ'), + (0xFCDD, 'M', u'يم'), + (0xFCDE, 'M', u'يه'), + (0xFCDF, 'M', u'ئم'), + (0xFCE0, 'M', u'ئه'), + (0xFCE1, 'M', u'بم'), + (0xFCE2, 'M', u'به'), + (0xFCE3, 'M', u'تم'), + (0xFCE4, 'M', u'ته'), + (0xFCE5, 'M', u'ثم'), + (0xFCE6, 'M', u'ثه'), + (0xFCE7, 'M', u'سم'), + (0xFCE8, 'M', u'سه'), + (0xFCE9, 'M', u'شم'), + (0xFCEA, 'M', u'شه'), + (0xFCEB, 'M', u'كل'), + (0xFCEC, 'M', u'كم'), + (0xFCED, 'M', u'لم'), + (0xFCEE, 'M', u'نم'), + ] + +def _seg_47(): + return [ + (0xFCEF, 'M', u'نه'), + (0xFCF0, 'M', u'يم'), + (0xFCF1, 'M', u'يه'), + (0xFCF2, 'M', u'ـَّ'), + (0xFCF3, 'M', u'ـُّ'), + (0xFCF4, 'M', u'ـِّ'), + (0xFCF5, 'M', u'طى'), + (0xFCF6, 'M', u'طي'), + (0xFCF7, 'M', u'عى'), + (0xFCF8, 'M', u'عي'), + (0xFCF9, 'M', u'غى'), + (0xFCFA, 'M', u'غي'), + (0xFCFB, 'M', u'سى'), + (0xFCFC, 'M', u'سي'), + (0xFCFD, 'M', u'شى'), + (0xFCFE, 'M', u'شي'), + (0xFCFF, 'M', u'حى'), + (0xFD00, 'M', u'حي'), + (0xFD01, 'M', u'جى'), + (0xFD02, 'M', u'جي'), + (0xFD03, 'M', u'خى'), + (0xFD04, 'M', u'خي'), + (0xFD05, 'M', u'صى'), + (0xFD06, 'M', u'صي'), + (0xFD07, 'M', u'ضى'), + (0xFD08, 'M', u'ضي'), + (0xFD09, 'M', u'شج'), + (0xFD0A, 'M', u'شح'), + (0xFD0B, 'M', u'شخ'), + (0xFD0C, 'M', u'شم'), + (0xFD0D, 'M', u'شر'), + (0xFD0E, 'M', u'سر'), + (0xFD0F, 'M', u'صر'), + (0xFD10, 'M', u'ضر'), + (0xFD11, 'M', u'طى'), + (0xFD12, 'M', u'طي'), + (0xFD13, 'M', u'عى'), + (0xFD14, 'M', u'عي'), + (0xFD15, 'M', u'غى'), + (0xFD16, 'M', u'غي'), + (0xFD17, 'M', u'سى'), + (0xFD18, 'M', u'سي'), + (0xFD19, 'M', u'شى'), + (0xFD1A, 'M', u'شي'), + (0xFD1B, 'M', u'حى'), + (0xFD1C, 'M', u'حي'), + (0xFD1D, 'M', u'جى'), + (0xFD1E, 'M', u'جي'), + (0xFD1F, 'M', u'خى'), + (0xFD20, 'M', u'خي'), + (0xFD21, 'M', u'صى'), + (0xFD22, 'M', u'صي'), + (0xFD23, 'M', u'ضى'), + (0xFD24, 'M', u'ضي'), + (0xFD25, 'M', u'شج'), + (0xFD26, 'M', u'شح'), + (0xFD27, 'M', u'شخ'), + (0xFD28, 'M', u'شم'), + (0xFD29, 'M', u'شر'), + (0xFD2A, 'M', u'سر'), + (0xFD2B, 'M', u'صر'), + (0xFD2C, 'M', u'ضر'), + (0xFD2D, 'M', u'شج'), + (0xFD2E, 'M', u'شح'), + (0xFD2F, 'M', u'شخ'), + (0xFD30, 'M', u'شم'), + (0xFD31, 'M', u'سه'), + (0xFD32, 'M', u'شه'), + (0xFD33, 'M', u'طم'), + (0xFD34, 'M', u'سج'), + (0xFD35, 'M', u'سح'), + (0xFD36, 'M', u'سخ'), + (0xFD37, 'M', u'شج'), + (0xFD38, 'M', u'شح'), + (0xFD39, 'M', u'شخ'), + (0xFD3A, 'M', u'طم'), + (0xFD3B, 'M', u'ظم'), + (0xFD3C, 'M', u'اً'), + (0xFD3E, 'V'), + (0xFD40, 'X'), + (0xFD50, 'M', u'تجم'), + (0xFD51, 'M', u'تحج'), + (0xFD53, 'M', u'تحم'), + (0xFD54, 'M', u'تخم'), + (0xFD55, 'M', u'تمج'), + (0xFD56, 'M', u'تمح'), + (0xFD57, 'M', u'تمخ'), + (0xFD58, 'M', u'جمح'), + (0xFD5A, 'M', u'حمي'), + (0xFD5B, 'M', u'حمى'), + (0xFD5C, 'M', u'سحج'), + (0xFD5D, 'M', u'سجح'), + (0xFD5E, 'M', u'سجى'), + (0xFD5F, 'M', u'سمح'), + (0xFD61, 'M', u'سمج'), + (0xFD62, 'M', u'سمم'), + (0xFD64, 'M', u'صحح'), + (0xFD66, 'M', u'صمم'), + (0xFD67, 'M', u'شحم'), + (0xFD69, 'M', u'شجي'), + ] + +def _seg_48(): + return [ + (0xFD6A, 'M', u'شمخ'), + (0xFD6C, 'M', u'شمم'), + (0xFD6E, 'M', u'ضحى'), + (0xFD6F, 'M', u'ضخم'), + (0xFD71, 'M', u'طمح'), + (0xFD73, 'M', u'طمم'), + (0xFD74, 'M', u'طمي'), + (0xFD75, 'M', u'عجم'), + (0xFD76, 'M', u'عمم'), + (0xFD78, 'M', u'عمى'), + (0xFD79, 'M', u'غمم'), + (0xFD7A, 'M', u'غمي'), + (0xFD7B, 'M', u'غمى'), + (0xFD7C, 'M', u'فخم'), + (0xFD7E, 'M', u'قمح'), + (0xFD7F, 'M', u'قمم'), + (0xFD80, 'M', u'لحم'), + (0xFD81, 'M', u'لحي'), + (0xFD82, 'M', u'لحى'), + (0xFD83, 'M', u'لجج'), + (0xFD85, 'M', u'لخم'), + (0xFD87, 'M', u'لمح'), + (0xFD89, 'M', u'محج'), + (0xFD8A, 'M', u'محم'), + (0xFD8B, 'M', u'محي'), + (0xFD8C, 'M', u'مجح'), + (0xFD8D, 'M', u'مجم'), + (0xFD8E, 'M', u'مخج'), + (0xFD8F, 'M', u'مخم'), + (0xFD90, 'X'), + (0xFD92, 'M', u'مجخ'), + (0xFD93, 'M', u'همج'), + (0xFD94, 'M', u'همم'), + (0xFD95, 'M', u'نحم'), + (0xFD96, 'M', u'نحى'), + (0xFD97, 'M', u'نجم'), + (0xFD99, 'M', u'نجى'), + (0xFD9A, 'M', u'نمي'), + (0xFD9B, 'M', u'نمى'), + (0xFD9C, 'M', u'يمم'), + (0xFD9E, 'M', u'بخي'), + (0xFD9F, 'M', u'تجي'), + (0xFDA0, 'M', u'تجى'), + (0xFDA1, 'M', u'تخي'), + (0xFDA2, 'M', u'تخى'), + (0xFDA3, 'M', u'تمي'), + (0xFDA4, 'M', u'تمى'), + (0xFDA5, 'M', u'جمي'), + (0xFDA6, 'M', u'جحى'), + (0xFDA7, 'M', u'جمى'), + (0xFDA8, 'M', u'سخى'), + (0xFDA9, 'M', u'صحي'), + (0xFDAA, 'M', u'شحي'), + (0xFDAB, 'M', u'ضحي'), + (0xFDAC, 'M', u'لجي'), + (0xFDAD, 'M', u'لمي'), + (0xFDAE, 'M', u'يحي'), + (0xFDAF, 'M', u'يجي'), + (0xFDB0, 'M', u'يمي'), + (0xFDB1, 'M', u'ممي'), + (0xFDB2, 'M', u'قمي'), + (0xFDB3, 'M', u'نحي'), + (0xFDB4, 'M', u'قمح'), + (0xFDB5, 'M', u'لحم'), + (0xFDB6, 'M', u'عمي'), + (0xFDB7, 'M', u'كمي'), + (0xFDB8, 'M', u'نجح'), + (0xFDB9, 'M', u'مخي'), + (0xFDBA, 'M', u'لجم'), + (0xFDBB, 'M', u'كمم'), + (0xFDBC, 'M', u'لجم'), + (0xFDBD, 'M', u'نجح'), + (0xFDBE, 'M', u'جحي'), + (0xFDBF, 'M', u'حجي'), + (0xFDC0, 'M', u'مجي'), + (0xFDC1, 'M', u'فمي'), + (0xFDC2, 'M', u'بحي'), + (0xFDC3, 'M', u'كمم'), + (0xFDC4, 'M', u'عجم'), + (0xFDC5, 'M', u'صمم'), + (0xFDC6, 'M', u'سخي'), + (0xFDC7, 'M', u'نجي'), + (0xFDC8, 'X'), + (0xFDF0, 'M', u'صلے'), + (0xFDF1, 'M', u'قلے'), + (0xFDF2, 'M', u'الله'), + (0xFDF3, 'M', u'اكبر'), + (0xFDF4, 'M', u'محمد'), + (0xFDF5, 'M', u'صلعم'), + (0xFDF6, 'M', u'رسول'), + (0xFDF7, 'M', u'عليه'), + (0xFDF8, 'M', u'وسلم'), + (0xFDF9, 'M', u'صلى'), + (0xFDFA, '3', u'صلى الله عليه وسلم'), + (0xFDFB, '3', u'جل جلاله'), + (0xFDFC, 'M', u'ریال'), + (0xFDFD, 'V'), + (0xFDFE, 'X'), + (0xFE00, 'I'), + (0xFE10, '3', u','), + ] + +def _seg_49(): + return [ + (0xFE11, 'M', u'、'), + (0xFE12, 'X'), + (0xFE13, '3', u':'), + (0xFE14, '3', u';'), + (0xFE15, '3', u'!'), + (0xFE16, '3', u'?'), + (0xFE17, 'M', u'〖'), + (0xFE18, 'M', u'〗'), + (0xFE19, 'X'), + (0xFE20, 'V'), + (0xFE30, 'X'), + (0xFE31, 'M', u'—'), + (0xFE32, 'M', u'–'), + (0xFE33, '3', u'_'), + (0xFE35, '3', u'('), + (0xFE36, '3', u')'), + (0xFE37, '3', u'{'), + (0xFE38, '3', u'}'), + (0xFE39, 'M', u'〔'), + (0xFE3A, 'M', u'〕'), + (0xFE3B, 'M', u'【'), + (0xFE3C, 'M', u'】'), + (0xFE3D, 'M', u'《'), + (0xFE3E, 'M', u'》'), + (0xFE3F, 'M', u'〈'), + (0xFE40, 'M', u'〉'), + (0xFE41, 'M', u'「'), + (0xFE42, 'M', u'」'), + (0xFE43, 'M', u'『'), + (0xFE44, 'M', u'』'), + (0xFE45, 'V'), + (0xFE47, '3', u'['), + (0xFE48, '3', u']'), + (0xFE49, '3', u' ̅'), + (0xFE4D, '3', u'_'), + (0xFE50, '3', u','), + (0xFE51, 'M', u'、'), + (0xFE52, 'X'), + (0xFE54, '3', u';'), + (0xFE55, '3', u':'), + (0xFE56, '3', u'?'), + (0xFE57, '3', u'!'), + (0xFE58, 'M', u'—'), + (0xFE59, '3', u'('), + (0xFE5A, '3', u')'), + (0xFE5B, '3', u'{'), + (0xFE5C, '3', u'}'), + (0xFE5D, 'M', u'〔'), + (0xFE5E, 'M', u'〕'), + (0xFE5F, '3', u'#'), + (0xFE60, '3', u'&'), + (0xFE61, '3', u'*'), + (0xFE62, '3', u'+'), + (0xFE63, 'M', u'-'), + (0xFE64, '3', u'<'), + (0xFE65, '3', u'>'), + (0xFE66, '3', u'='), + (0xFE67, 'X'), + (0xFE68, '3', u'\\'), + (0xFE69, '3', u'$'), + (0xFE6A, '3', u'%'), + (0xFE6B, '3', u'@'), + (0xFE6C, 'X'), + (0xFE70, '3', u' ً'), + (0xFE71, 'M', u'ـً'), + (0xFE72, '3', u' ٌ'), + (0xFE73, 'V'), + (0xFE74, '3', u' ٍ'), + (0xFE75, 'X'), + (0xFE76, '3', u' َ'), + (0xFE77, 'M', u'ـَ'), + (0xFE78, '3', u' ُ'), + (0xFE79, 'M', u'ـُ'), + (0xFE7A, '3', u' ِ'), + (0xFE7B, 'M', u'ـِ'), + (0xFE7C, '3', u' ّ'), + (0xFE7D, 'M', u'ـّ'), + (0xFE7E, '3', u' ْ'), + (0xFE7F, 'M', u'ـْ'), + (0xFE80, 'M', u'ء'), + (0xFE81, 'M', u'آ'), + (0xFE83, 'M', u'أ'), + (0xFE85, 'M', u'ؤ'), + (0xFE87, 'M', u'إ'), + (0xFE89, 'M', u'ئ'), + (0xFE8D, 'M', u'ا'), + (0xFE8F, 'M', u'ب'), + (0xFE93, 'M', u'ة'), + (0xFE95, 'M', u'ت'), + (0xFE99, 'M', u'ث'), + (0xFE9D, 'M', u'ج'), + (0xFEA1, 'M', u'ح'), + (0xFEA5, 'M', u'خ'), + (0xFEA9, 'M', u'د'), + (0xFEAB, 'M', u'ذ'), + (0xFEAD, 'M', u'ر'), + (0xFEAF, 'M', u'ز'), + (0xFEB1, 'M', u'س'), + (0xFEB5, 'M', u'ش'), + (0xFEB9, 'M', u'ص'), + ] + +def _seg_50(): + return [ + (0xFEBD, 'M', u'ض'), + (0xFEC1, 'M', u'ط'), + (0xFEC5, 'M', u'ظ'), + (0xFEC9, 'M', u'ع'), + (0xFECD, 'M', u'غ'), + (0xFED1, 'M', u'ف'), + (0xFED5, 'M', u'ق'), + (0xFED9, 'M', u'ك'), + (0xFEDD, 'M', u'ل'), + (0xFEE1, 'M', u'م'), + (0xFEE5, 'M', u'ن'), + (0xFEE9, 'M', u'ه'), + (0xFEED, 'M', u'و'), + (0xFEEF, 'M', u'ى'), + (0xFEF1, 'M', u'ي'), + (0xFEF5, 'M', u'لآ'), + (0xFEF7, 'M', u'لأ'), + (0xFEF9, 'M', u'لإ'), + (0xFEFB, 'M', u'لا'), + (0xFEFD, 'X'), + (0xFEFF, 'I'), + (0xFF00, 'X'), + (0xFF01, '3', u'!'), + (0xFF02, '3', u'"'), + (0xFF03, '3', u'#'), + (0xFF04, '3', u'$'), + (0xFF05, '3', u'%'), + (0xFF06, '3', u'&'), + (0xFF07, '3', u'\''), + (0xFF08, '3', u'('), + (0xFF09, '3', u')'), + (0xFF0A, '3', u'*'), + (0xFF0B, '3', u'+'), + (0xFF0C, '3', u','), + (0xFF0D, 'M', u'-'), + (0xFF0E, 'M', u'.'), + (0xFF0F, '3', u'/'), + (0xFF10, 'M', u'0'), + (0xFF11, 'M', u'1'), + (0xFF12, 'M', u'2'), + (0xFF13, 'M', u'3'), + (0xFF14, 'M', u'4'), + (0xFF15, 'M', u'5'), + (0xFF16, 'M', u'6'), + (0xFF17, 'M', u'7'), + (0xFF18, 'M', u'8'), + (0xFF19, 'M', u'9'), + (0xFF1A, '3', u':'), + (0xFF1B, '3', u';'), + (0xFF1C, '3', u'<'), + (0xFF1D, '3', u'='), + (0xFF1E, '3', u'>'), + (0xFF1F, '3', u'?'), + (0xFF20, '3', u'@'), + (0xFF21, 'M', u'a'), + (0xFF22, 'M', u'b'), + (0xFF23, 'M', u'c'), + (0xFF24, 'M', u'd'), + (0xFF25, 'M', u'e'), + (0xFF26, 'M', u'f'), + (0xFF27, 'M', u'g'), + (0xFF28, 'M', u'h'), + (0xFF29, 'M', u'i'), + (0xFF2A, 'M', u'j'), + (0xFF2B, 'M', u'k'), + (0xFF2C, 'M', u'l'), + (0xFF2D, 'M', u'm'), + (0xFF2E, 'M', u'n'), + (0xFF2F, 'M', u'o'), + (0xFF30, 'M', u'p'), + (0xFF31, 'M', u'q'), + (0xFF32, 'M', u'r'), + (0xFF33, 'M', u's'), + (0xFF34, 'M', u't'), + (0xFF35, 'M', u'u'), + (0xFF36, 'M', u'v'), + (0xFF37, 'M', u'w'), + (0xFF38, 'M', u'x'), + (0xFF39, 'M', u'y'), + (0xFF3A, 'M', u'z'), + (0xFF3B, '3', u'['), + (0xFF3C, '3', u'\\'), + (0xFF3D, '3', u']'), + (0xFF3E, '3', u'^'), + (0xFF3F, '3', u'_'), + (0xFF40, '3', u'`'), + (0xFF41, 'M', u'a'), + (0xFF42, 'M', u'b'), + (0xFF43, 'M', u'c'), + (0xFF44, 'M', u'd'), + (0xFF45, 'M', u'e'), + (0xFF46, 'M', u'f'), + (0xFF47, 'M', u'g'), + (0xFF48, 'M', u'h'), + (0xFF49, 'M', u'i'), + (0xFF4A, 'M', u'j'), + (0xFF4B, 'M', u'k'), + (0xFF4C, 'M', u'l'), + (0xFF4D, 'M', u'm'), + (0xFF4E, 'M', u'n'), + ] + +def _seg_51(): + return [ + (0xFF4F, 'M', u'o'), + (0xFF50, 'M', u'p'), + (0xFF51, 'M', u'q'), + (0xFF52, 'M', u'r'), + (0xFF53, 'M', u's'), + (0xFF54, 'M', u't'), + (0xFF55, 'M', u'u'), + (0xFF56, 'M', u'v'), + (0xFF57, 'M', u'w'), + (0xFF58, 'M', u'x'), + (0xFF59, 'M', u'y'), + (0xFF5A, 'M', u'z'), + (0xFF5B, '3', u'{'), + (0xFF5C, '3', u'|'), + (0xFF5D, '3', u'}'), + (0xFF5E, '3', u'~'), + (0xFF5F, 'M', u'⦅'), + (0xFF60, 'M', u'⦆'), + (0xFF61, 'M', u'.'), + (0xFF62, 'M', u'「'), + (0xFF63, 'M', u'」'), + (0xFF64, 'M', u'、'), + (0xFF65, 'M', u'・'), + (0xFF66, 'M', u'ヲ'), + (0xFF67, 'M', u'ァ'), + (0xFF68, 'M', u'ィ'), + (0xFF69, 'M', u'ゥ'), + (0xFF6A, 'M', u'ェ'), + (0xFF6B, 'M', u'ォ'), + (0xFF6C, 'M', u'ャ'), + (0xFF6D, 'M', u'ュ'), + (0xFF6E, 'M', u'ョ'), + (0xFF6F, 'M', u'ッ'), + (0xFF70, 'M', u'ー'), + (0xFF71, 'M', u'ア'), + (0xFF72, 'M', u'イ'), + (0xFF73, 'M', u'ウ'), + (0xFF74, 'M', u'エ'), + (0xFF75, 'M', u'オ'), + (0xFF76, 'M', u'カ'), + (0xFF77, 'M', u'キ'), + (0xFF78, 'M', u'ク'), + (0xFF79, 'M', u'ケ'), + (0xFF7A, 'M', u'コ'), + (0xFF7B, 'M', u'サ'), + (0xFF7C, 'M', u'シ'), + (0xFF7D, 'M', u'ス'), + (0xFF7E, 'M', u'セ'), + (0xFF7F, 'M', u'ソ'), + (0xFF80, 'M', u'タ'), + (0xFF81, 'M', u'チ'), + (0xFF82, 'M', u'ツ'), + (0xFF83, 'M', u'テ'), + (0xFF84, 'M', u'ト'), + (0xFF85, 'M', u'ナ'), + (0xFF86, 'M', u'ニ'), + (0xFF87, 'M', u'ヌ'), + (0xFF88, 'M', u'ネ'), + (0xFF89, 'M', u'ノ'), + (0xFF8A, 'M', u'ハ'), + (0xFF8B, 'M', u'ヒ'), + (0xFF8C, 'M', u'フ'), + (0xFF8D, 'M', u'ヘ'), + (0xFF8E, 'M', u'ホ'), + (0xFF8F, 'M', u'マ'), + (0xFF90, 'M', u'ミ'), + (0xFF91, 'M', u'ム'), + (0xFF92, 'M', u'メ'), + (0xFF93, 'M', u'モ'), + (0xFF94, 'M', u'ヤ'), + (0xFF95, 'M', u'ユ'), + (0xFF96, 'M', u'ヨ'), + (0xFF97, 'M', u'ラ'), + (0xFF98, 'M', u'リ'), + (0xFF99, 'M', u'ル'), + (0xFF9A, 'M', u'レ'), + (0xFF9B, 'M', u'ロ'), + (0xFF9C, 'M', u'ワ'), + (0xFF9D, 'M', u'ン'), + (0xFF9E, 'M', u'゙'), + (0xFF9F, 'M', u'゚'), + (0xFFA0, 'X'), + (0xFFA1, 'M', u'ᄀ'), + (0xFFA2, 'M', u'ᄁ'), + (0xFFA3, 'M', u'ᆪ'), + (0xFFA4, 'M', u'ᄂ'), + (0xFFA5, 'M', u'ᆬ'), + (0xFFA6, 'M', u'ᆭ'), + (0xFFA7, 'M', u'ᄃ'), + (0xFFA8, 'M', u'ᄄ'), + (0xFFA9, 'M', u'ᄅ'), + (0xFFAA, 'M', u'ᆰ'), + (0xFFAB, 'M', u'ᆱ'), + (0xFFAC, 'M', u'ᆲ'), + (0xFFAD, 'M', u'ᆳ'), + (0xFFAE, 'M', u'ᆴ'), + (0xFFAF, 'M', u'ᆵ'), + (0xFFB0, 'M', u'ᄚ'), + (0xFFB1, 'M', u'ᄆ'), + (0xFFB2, 'M', u'ᄇ'), + ] + +def _seg_52(): + return [ + (0xFFB3, 'M', u'ᄈ'), + (0xFFB4, 'M', u'ᄡ'), + (0xFFB5, 'M', u'ᄉ'), + (0xFFB6, 'M', u'ᄊ'), + (0xFFB7, 'M', u'ᄋ'), + (0xFFB8, 'M', u'ᄌ'), + (0xFFB9, 'M', u'ᄍ'), + (0xFFBA, 'M', u'ᄎ'), + (0xFFBB, 'M', u'ᄏ'), + (0xFFBC, 'M', u'ᄐ'), + (0xFFBD, 'M', u'ᄑ'), + (0xFFBE, 'M', u'ᄒ'), + (0xFFBF, 'X'), + (0xFFC2, 'M', u'ᅡ'), + (0xFFC3, 'M', u'ᅢ'), + (0xFFC4, 'M', u'ᅣ'), + (0xFFC5, 'M', u'ᅤ'), + (0xFFC6, 'M', u'ᅥ'), + (0xFFC7, 'M', u'ᅦ'), + (0xFFC8, 'X'), + (0xFFCA, 'M', u'ᅧ'), + (0xFFCB, 'M', u'ᅨ'), + (0xFFCC, 'M', u'ᅩ'), + (0xFFCD, 'M', u'ᅪ'), + (0xFFCE, 'M', u'ᅫ'), + (0xFFCF, 'M', u'ᅬ'), + (0xFFD0, 'X'), + (0xFFD2, 'M', u'ᅭ'), + (0xFFD3, 'M', u'ᅮ'), + (0xFFD4, 'M', u'ᅯ'), + (0xFFD5, 'M', u'ᅰ'), + (0xFFD6, 'M', u'ᅱ'), + (0xFFD7, 'M', u'ᅲ'), + (0xFFD8, 'X'), + (0xFFDA, 'M', u'ᅳ'), + (0xFFDB, 'M', u'ᅴ'), + (0xFFDC, 'M', u'ᅵ'), + (0xFFDD, 'X'), + (0xFFE0, 'M', u'¢'), + (0xFFE1, 'M', u'£'), + (0xFFE2, 'M', u'¬'), + (0xFFE3, '3', u' ̄'), + (0xFFE4, 'M', u'¦'), + (0xFFE5, 'M', u'¥'), + (0xFFE6, 'M', u'₩'), + (0xFFE7, 'X'), + (0xFFE8, 'M', u'│'), + (0xFFE9, 'M', u'←'), + (0xFFEA, 'M', u'↑'), + (0xFFEB, 'M', u'→'), + (0xFFEC, 'M', u'↓'), + (0xFFED, 'M', u'■'), + (0xFFEE, 'M', u'○'), + (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'), + (0x1019C, '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', u'𐐨'), + (0x10401, 'M', u'𐐩'), + ] + +def _seg_53(): + return [ + (0x10402, 'M', u'𐐪'), + (0x10403, 'M', u'𐐫'), + (0x10404, 'M', u'𐐬'), + (0x10405, 'M', u'𐐭'), + (0x10406, 'M', u'𐐮'), + (0x10407, 'M', u'𐐯'), + (0x10408, 'M', u'𐐰'), + (0x10409, 'M', u'𐐱'), + (0x1040A, 'M', u'𐐲'), + (0x1040B, 'M', u'𐐳'), + (0x1040C, 'M', u'𐐴'), + (0x1040D, 'M', u'𐐵'), + (0x1040E, 'M', u'𐐶'), + (0x1040F, 'M', u'𐐷'), + (0x10410, 'M', u'𐐸'), + (0x10411, 'M', u'𐐹'), + (0x10412, 'M', u'𐐺'), + (0x10413, 'M', u'𐐻'), + (0x10414, 'M', u'𐐼'), + (0x10415, 'M', u'𐐽'), + (0x10416, 'M', u'𐐾'), + (0x10417, 'M', u'𐐿'), + (0x10418, 'M', u'𐑀'), + (0x10419, 'M', u'𐑁'), + (0x1041A, 'M', u'𐑂'), + (0x1041B, 'M', u'𐑃'), + (0x1041C, 'M', u'𐑄'), + (0x1041D, 'M', u'𐑅'), + (0x1041E, 'M', u'𐑆'), + (0x1041F, 'M', u'𐑇'), + (0x10420, 'M', u'𐑈'), + (0x10421, 'M', u'𐑉'), + (0x10422, 'M', u'𐑊'), + (0x10423, 'M', u'𐑋'), + (0x10424, 'M', u'𐑌'), + (0x10425, 'M', u'𐑍'), + (0x10426, 'M', u'𐑎'), + (0x10427, 'M', u'𐑏'), + (0x10428, 'V'), + (0x1049E, 'X'), + (0x104A0, 'V'), + (0x104AA, 'X'), + (0x104B0, 'M', u'𐓘'), + (0x104B1, 'M', u'𐓙'), + (0x104B2, 'M', u'𐓚'), + (0x104B3, 'M', u'𐓛'), + (0x104B4, 'M', u'𐓜'), + (0x104B5, 'M', u'𐓝'), + (0x104B6, 'M', u'𐓞'), + (0x104B7, 'M', u'𐓟'), + (0x104B8, 'M', u'𐓠'), + (0x104B9, 'M', u'𐓡'), + (0x104BA, 'M', u'𐓢'), + (0x104BB, 'M', u'𐓣'), + (0x104BC, 'M', u'𐓤'), + (0x104BD, 'M', u'𐓥'), + (0x104BE, 'M', u'𐓦'), + (0x104BF, 'M', u'𐓧'), + (0x104C0, 'M', u'𐓨'), + (0x104C1, 'M', u'𐓩'), + (0x104C2, 'M', u'𐓪'), + (0x104C3, 'M', u'𐓫'), + (0x104C4, 'M', u'𐓬'), + (0x104C5, 'M', u'𐓭'), + (0x104C6, 'M', u'𐓮'), + (0x104C7, 'M', u'𐓯'), + (0x104C8, 'M', u'𐓰'), + (0x104C9, 'M', u'𐓱'), + (0x104CA, 'M', u'𐓲'), + (0x104CB, 'M', u'𐓳'), + (0x104CC, 'M', u'𐓴'), + (0x104CD, 'M', u'𐓵'), + (0x104CE, 'M', u'𐓶'), + (0x104CF, 'M', u'𐓷'), + (0x104D0, 'M', u'𐓸'), + (0x104D1, 'M', u'𐓹'), + (0x104D2, 'M', u'𐓺'), + (0x104D3, 'M', u'𐓻'), + (0x104D4, 'X'), + (0x104D8, 'V'), + (0x104FC, 'X'), + (0x10500, 'V'), + (0x10528, 'X'), + (0x10530, 'V'), + (0x10564, 'X'), + (0x1056F, 'V'), + (0x10570, 'X'), + (0x10600, 'V'), + (0x10737, 'X'), + (0x10740, 'V'), + (0x10756, 'X'), + (0x10760, 'V'), + (0x10768, 'X'), + (0x10800, 'V'), + (0x10806, 'X'), + (0x10808, 'V'), + (0x10809, 'X'), + (0x1080A, 'V'), + (0x10836, 'X'), + (0x10837, 'V'), + ] + +def _seg_54(): + return [ + (0x10839, 'X'), + (0x1083C, 'V'), + (0x1083D, 'X'), + (0x1083F, 'V'), + (0x10856, 'X'), + (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', u'𐳀'), + (0x10C81, 'M', u'𐳁'), + (0x10C82, 'M', u'𐳂'), + (0x10C83, 'M', u'𐳃'), + (0x10C84, 'M', u'𐳄'), + (0x10C85, 'M', u'𐳅'), + (0x10C86, 'M', u'𐳆'), + (0x10C87, 'M', u'𐳇'), + (0x10C88, 'M', u'𐳈'), + (0x10C89, 'M', u'𐳉'), + (0x10C8A, 'M', u'𐳊'), + (0x10C8B, 'M', u'𐳋'), + (0x10C8C, 'M', u'𐳌'), + (0x10C8D, 'M', u'𐳍'), + (0x10C8E, 'M', u'𐳎'), + (0x10C8F, 'M', u'𐳏'), + (0x10C90, 'M', u'𐳐'), + (0x10C91, 'M', u'𐳑'), + (0x10C92, 'M', u'𐳒'), + (0x10C93, 'M', u'𐳓'), + (0x10C94, 'M', u'𐳔'), + (0x10C95, 'M', u'𐳕'), + (0x10C96, 'M', u'𐳖'), + (0x10C97, 'M', u'𐳗'), + (0x10C98, 'M', u'𐳘'), + (0x10C99, 'M', u'𐳙'), + (0x10C9A, 'M', u'𐳚'), + (0x10C9B, 'M', u'𐳛'), + (0x10C9C, 'M', u'𐳜'), + (0x10C9D, 'M', u'𐳝'), + (0x10C9E, 'M', u'𐳞'), + (0x10C9F, 'M', u'𐳟'), + (0x10CA0, 'M', u'𐳠'), + (0x10CA1, 'M', u'𐳡'), + (0x10CA2, 'M', u'𐳢'), + (0x10CA3, 'M', u'𐳣'), + (0x10CA4, 'M', u'𐳤'), + (0x10CA5, 'M', u'𐳥'), + (0x10CA6, 'M', u'𐳦'), + (0x10CA7, 'M', u'𐳧'), + (0x10CA8, 'M', u'𐳨'), + ] + +def _seg_55(): + return [ + (0x10CA9, 'M', u'𐳩'), + (0x10CAA, 'M', u'𐳪'), + (0x10CAB, 'M', u'𐳫'), + (0x10CAC, 'M', u'𐳬'), + (0x10CAD, 'M', u'𐳭'), + (0x10CAE, 'M', u'𐳮'), + (0x10CAF, 'M', u'𐳯'), + (0x10CB0, 'M', u'𐳰'), + (0x10CB1, 'M', u'𐳱'), + (0x10CB2, 'M', u'𐳲'), + (0x10CB3, 'X'), + (0x10CC0, 'V'), + (0x10CF3, 'X'), + (0x10CFA, 'V'), + (0x10D28, 'X'), + (0x10D30, 'V'), + (0x10D3A, 'X'), + (0x10E60, 'V'), + (0x10E7F, 'X'), + (0x10F00, 'V'), + (0x10F28, 'X'), + (0x10F30, 'V'), + (0x10F5A, 'X'), + (0x11000, 'V'), + (0x1104E, 'X'), + (0x11052, 'V'), + (0x11070, 'X'), + (0x1107F, 'V'), + (0x110BD, 'X'), + (0x110BE, 'V'), + (0x110C2, 'X'), + (0x110D0, 'V'), + (0x110E9, 'X'), + (0x110F0, 'V'), + (0x110FA, 'X'), + (0x11100, 'V'), + (0x11135, 'X'), + (0x11136, 'V'), + (0x11147, 'X'), + (0x11150, 'V'), + (0x11177, 'X'), + (0x11180, 'V'), + (0x111CE, 'X'), + (0x111D0, 'V'), + (0x111E0, 'X'), + (0x111E1, 'V'), + (0x111F5, 'X'), + (0x11200, 'V'), + (0x11212, 'X'), + (0x11213, 'V'), + (0x1123F, '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'), + (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'), + (0x11400, 'V'), + (0x1145A, 'X'), + (0x1145B, 'V'), + (0x1145C, 'X'), + (0x1145D, 'V'), + ] + +def _seg_56(): + return [ + (0x1145F, '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'), + (0x116B8, 'X'), + (0x116C0, 'V'), + (0x116CA, 'X'), + (0x11700, 'V'), + (0x1171B, 'X'), + (0x1171D, 'V'), + (0x1172C, 'X'), + (0x11730, 'V'), + (0x11740, 'X'), + (0x11800, 'V'), + (0x1183C, 'X'), + (0x118A0, 'M', u'𑣀'), + (0x118A1, 'M', u'𑣁'), + (0x118A2, 'M', u'𑣂'), + (0x118A3, 'M', u'𑣃'), + (0x118A4, 'M', u'𑣄'), + (0x118A5, 'M', u'𑣅'), + (0x118A6, 'M', u'𑣆'), + (0x118A7, 'M', u'𑣇'), + (0x118A8, 'M', u'𑣈'), + (0x118A9, 'M', u'𑣉'), + (0x118AA, 'M', u'𑣊'), + (0x118AB, 'M', u'𑣋'), + (0x118AC, 'M', u'𑣌'), + (0x118AD, 'M', u'𑣍'), + (0x118AE, 'M', u'𑣎'), + (0x118AF, 'M', u'𑣏'), + (0x118B0, 'M', u'𑣐'), + (0x118B1, 'M', u'𑣑'), + (0x118B2, 'M', u'𑣒'), + (0x118B3, 'M', u'𑣓'), + (0x118B4, 'M', u'𑣔'), + (0x118B5, 'M', u'𑣕'), + (0x118B6, 'M', u'𑣖'), + (0x118B7, 'M', u'𑣗'), + (0x118B8, 'M', u'𑣘'), + (0x118B9, 'M', u'𑣙'), + (0x118BA, 'M', u'𑣚'), + (0x118BB, 'M', u'𑣛'), + (0x118BC, 'M', u'𑣜'), + (0x118BD, 'M', u'𑣝'), + (0x118BE, 'M', u'𑣞'), + (0x118BF, 'M', u'𑣟'), + (0x118C0, 'V'), + (0x118F3, 'X'), + (0x118FF, 'V'), + (0x11900, 'X'), + (0x11A00, 'V'), + (0x11A48, 'X'), + (0x11A50, 'V'), + (0x11A84, 'X'), + (0x11A86, 'V'), + (0x11AA3, 'X'), + (0x11AC0, 'V'), + (0x11AF9, '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'), + ] + +def _seg_57(): + return [ + (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'), + (0x12000, 'V'), + (0x1239A, 'X'), + (0x12400, 'V'), + (0x1246F, 'X'), + (0x12470, 'V'), + (0x12475, 'X'), + (0x12480, 'V'), + (0x12544, 'X'), + (0x13000, 'V'), + (0x1342F, 'X'), + (0x14400, 'V'), + (0x14647, 'X'), + (0x16800, 'V'), + (0x16A39, 'X'), + (0x16A40, 'V'), + (0x16A5F, 'X'), + (0x16A60, 'V'), + (0x16A6A, 'X'), + (0x16A6E, 'V'), + (0x16A70, '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'), + (0x16E60, 'V'), + (0x16E9B, 'X'), + (0x16F00, 'V'), + (0x16F45, 'X'), + (0x16F50, 'V'), + (0x16F7F, 'X'), + (0x16F8F, 'V'), + (0x16FA0, 'X'), + (0x16FE0, 'V'), + (0x16FE2, 'X'), + (0x17000, 'V'), + (0x187F2, 'X'), + (0x18800, 'V'), + (0x18AF3, 'X'), + (0x1B000, 'V'), + (0x1B11F, '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'), + (0x1D000, 'V'), + (0x1D0F6, 'X'), + (0x1D100, 'V'), + (0x1D127, 'X'), + (0x1D129, 'V'), + (0x1D15E, 'M', u'𝅗𝅥'), + (0x1D15F, 'M', u'𝅘𝅥'), + (0x1D160, 'M', u'𝅘𝅥𝅮'), + (0x1D161, 'M', u'𝅘𝅥𝅯'), + (0x1D162, 'M', u'𝅘𝅥𝅰'), + (0x1D163, 'M', u'𝅘𝅥𝅱'), + (0x1D164, 'M', u'𝅘𝅥𝅲'), + (0x1D165, 'V'), + (0x1D173, 'X'), + (0x1D17B, 'V'), + (0x1D1BB, 'M', u'𝆹𝅥'), + (0x1D1BC, 'M', u'𝆺𝅥'), + (0x1D1BD, 'M', u'𝆹𝅥𝅮'), + (0x1D1BE, 'M', u'𝆺𝅥𝅮'), + (0x1D1BF, 'M', u'𝆹𝅥𝅯'), + (0x1D1C0, 'M', u'𝆺𝅥𝅯'), + (0x1D1C1, 'V'), + (0x1D1E9, 'X'), + (0x1D200, 'V'), + ] + +def _seg_58(): + return [ + (0x1D246, 'X'), + (0x1D2E0, 'V'), + (0x1D2F4, 'X'), + (0x1D300, 'V'), + (0x1D357, 'X'), + (0x1D360, 'V'), + (0x1D379, 'X'), + (0x1D400, 'M', u'a'), + (0x1D401, 'M', u'b'), + (0x1D402, 'M', u'c'), + (0x1D403, 'M', u'd'), + (0x1D404, 'M', u'e'), + (0x1D405, 'M', u'f'), + (0x1D406, 'M', u'g'), + (0x1D407, 'M', u'h'), + (0x1D408, 'M', u'i'), + (0x1D409, 'M', u'j'), + (0x1D40A, 'M', u'k'), + (0x1D40B, 'M', u'l'), + (0x1D40C, 'M', u'm'), + (0x1D40D, 'M', u'n'), + (0x1D40E, 'M', u'o'), + (0x1D40F, 'M', u'p'), + (0x1D410, 'M', u'q'), + (0x1D411, 'M', u'r'), + (0x1D412, 'M', u's'), + (0x1D413, 'M', u't'), + (0x1D414, 'M', u'u'), + (0x1D415, 'M', u'v'), + (0x1D416, 'M', u'w'), + (0x1D417, 'M', u'x'), + (0x1D418, 'M', u'y'), + (0x1D419, 'M', u'z'), + (0x1D41A, 'M', u'a'), + (0x1D41B, 'M', u'b'), + (0x1D41C, 'M', u'c'), + (0x1D41D, 'M', u'd'), + (0x1D41E, 'M', u'e'), + (0x1D41F, 'M', u'f'), + (0x1D420, 'M', u'g'), + (0x1D421, 'M', u'h'), + (0x1D422, 'M', u'i'), + (0x1D423, 'M', u'j'), + (0x1D424, 'M', u'k'), + (0x1D425, 'M', u'l'), + (0x1D426, 'M', u'm'), + (0x1D427, 'M', u'n'), + (0x1D428, 'M', u'o'), + (0x1D429, 'M', u'p'), + (0x1D42A, 'M', u'q'), + (0x1D42B, 'M', u'r'), + (0x1D42C, 'M', u's'), + (0x1D42D, 'M', u't'), + (0x1D42E, 'M', u'u'), + (0x1D42F, 'M', u'v'), + (0x1D430, 'M', u'w'), + (0x1D431, 'M', u'x'), + (0x1D432, 'M', u'y'), + (0x1D433, 'M', u'z'), + (0x1D434, 'M', u'a'), + (0x1D435, 'M', u'b'), + (0x1D436, 'M', u'c'), + (0x1D437, 'M', u'd'), + (0x1D438, 'M', u'e'), + (0x1D439, 'M', u'f'), + (0x1D43A, 'M', u'g'), + (0x1D43B, 'M', u'h'), + (0x1D43C, 'M', u'i'), + (0x1D43D, 'M', u'j'), + (0x1D43E, 'M', u'k'), + (0x1D43F, 'M', u'l'), + (0x1D440, 'M', u'm'), + (0x1D441, 'M', u'n'), + (0x1D442, 'M', u'o'), + (0x1D443, 'M', u'p'), + (0x1D444, 'M', u'q'), + (0x1D445, 'M', u'r'), + (0x1D446, 'M', u's'), + (0x1D447, 'M', u't'), + (0x1D448, 'M', u'u'), + (0x1D449, 'M', u'v'), + (0x1D44A, 'M', u'w'), + (0x1D44B, 'M', u'x'), + (0x1D44C, 'M', u'y'), + (0x1D44D, 'M', u'z'), + (0x1D44E, 'M', u'a'), + (0x1D44F, 'M', u'b'), + (0x1D450, 'M', u'c'), + (0x1D451, 'M', u'd'), + (0x1D452, 'M', u'e'), + (0x1D453, 'M', u'f'), + (0x1D454, 'M', u'g'), + (0x1D455, 'X'), + (0x1D456, 'M', u'i'), + (0x1D457, 'M', u'j'), + (0x1D458, 'M', u'k'), + (0x1D459, 'M', u'l'), + (0x1D45A, 'M', u'm'), + (0x1D45B, 'M', u'n'), + (0x1D45C, 'M', u'o'), + ] + +def _seg_59(): + return [ + (0x1D45D, 'M', u'p'), + (0x1D45E, 'M', u'q'), + (0x1D45F, 'M', u'r'), + (0x1D460, 'M', u's'), + (0x1D461, 'M', u't'), + (0x1D462, 'M', u'u'), + (0x1D463, 'M', u'v'), + (0x1D464, 'M', u'w'), + (0x1D465, 'M', u'x'), + (0x1D466, 'M', u'y'), + (0x1D467, 'M', u'z'), + (0x1D468, 'M', u'a'), + (0x1D469, 'M', u'b'), + (0x1D46A, 'M', u'c'), + (0x1D46B, 'M', u'd'), + (0x1D46C, 'M', u'e'), + (0x1D46D, 'M', u'f'), + (0x1D46E, 'M', u'g'), + (0x1D46F, 'M', u'h'), + (0x1D470, 'M', u'i'), + (0x1D471, 'M', u'j'), + (0x1D472, 'M', u'k'), + (0x1D473, 'M', u'l'), + (0x1D474, 'M', u'm'), + (0x1D475, 'M', u'n'), + (0x1D476, 'M', u'o'), + (0x1D477, 'M', u'p'), + (0x1D478, 'M', u'q'), + (0x1D479, 'M', u'r'), + (0x1D47A, 'M', u's'), + (0x1D47B, 'M', u't'), + (0x1D47C, 'M', u'u'), + (0x1D47D, 'M', u'v'), + (0x1D47E, 'M', u'w'), + (0x1D47F, 'M', u'x'), + (0x1D480, 'M', u'y'), + (0x1D481, 'M', u'z'), + (0x1D482, 'M', u'a'), + (0x1D483, 'M', u'b'), + (0x1D484, 'M', u'c'), + (0x1D485, 'M', u'd'), + (0x1D486, 'M', u'e'), + (0x1D487, 'M', u'f'), + (0x1D488, 'M', u'g'), + (0x1D489, 'M', u'h'), + (0x1D48A, 'M', u'i'), + (0x1D48B, 'M', u'j'), + (0x1D48C, 'M', u'k'), + (0x1D48D, 'M', u'l'), + (0x1D48E, 'M', u'm'), + (0x1D48F, 'M', u'n'), + (0x1D490, 'M', u'o'), + (0x1D491, 'M', u'p'), + (0x1D492, 'M', u'q'), + (0x1D493, 'M', u'r'), + (0x1D494, 'M', u's'), + (0x1D495, 'M', u't'), + (0x1D496, 'M', u'u'), + (0x1D497, 'M', u'v'), + (0x1D498, 'M', u'w'), + (0x1D499, 'M', u'x'), + (0x1D49A, 'M', u'y'), + (0x1D49B, 'M', u'z'), + (0x1D49C, 'M', u'a'), + (0x1D49D, 'X'), + (0x1D49E, 'M', u'c'), + (0x1D49F, 'M', u'd'), + (0x1D4A0, 'X'), + (0x1D4A2, 'M', u'g'), + (0x1D4A3, 'X'), + (0x1D4A5, 'M', u'j'), + (0x1D4A6, 'M', u'k'), + (0x1D4A7, 'X'), + (0x1D4A9, 'M', u'n'), + (0x1D4AA, 'M', u'o'), + (0x1D4AB, 'M', u'p'), + (0x1D4AC, 'M', u'q'), + (0x1D4AD, 'X'), + (0x1D4AE, 'M', u's'), + (0x1D4AF, 'M', u't'), + (0x1D4B0, 'M', u'u'), + (0x1D4B1, 'M', u'v'), + (0x1D4B2, 'M', u'w'), + (0x1D4B3, 'M', u'x'), + (0x1D4B4, 'M', u'y'), + (0x1D4B5, 'M', u'z'), + (0x1D4B6, 'M', u'a'), + (0x1D4B7, 'M', u'b'), + (0x1D4B8, 'M', u'c'), + (0x1D4B9, 'M', u'd'), + (0x1D4BA, 'X'), + (0x1D4BB, 'M', u'f'), + (0x1D4BC, 'X'), + (0x1D4BD, 'M', u'h'), + (0x1D4BE, 'M', u'i'), + (0x1D4BF, 'M', u'j'), + (0x1D4C0, 'M', u'k'), + (0x1D4C1, 'M', u'l'), + (0x1D4C2, 'M', u'm'), + (0x1D4C3, 'M', u'n'), + ] + +def _seg_60(): + return [ + (0x1D4C4, 'X'), + (0x1D4C5, 'M', u'p'), + (0x1D4C6, 'M', u'q'), + (0x1D4C7, 'M', u'r'), + (0x1D4C8, 'M', u's'), + (0x1D4C9, 'M', u't'), + (0x1D4CA, 'M', u'u'), + (0x1D4CB, 'M', u'v'), + (0x1D4CC, 'M', u'w'), + (0x1D4CD, 'M', u'x'), + (0x1D4CE, 'M', u'y'), + (0x1D4CF, 'M', u'z'), + (0x1D4D0, 'M', u'a'), + (0x1D4D1, 'M', u'b'), + (0x1D4D2, 'M', u'c'), + (0x1D4D3, 'M', u'd'), + (0x1D4D4, 'M', u'e'), + (0x1D4D5, 'M', u'f'), + (0x1D4D6, 'M', u'g'), + (0x1D4D7, 'M', u'h'), + (0x1D4D8, 'M', u'i'), + (0x1D4D9, 'M', u'j'), + (0x1D4DA, 'M', u'k'), + (0x1D4DB, 'M', u'l'), + (0x1D4DC, 'M', u'm'), + (0x1D4DD, 'M', u'n'), + (0x1D4DE, 'M', u'o'), + (0x1D4DF, 'M', u'p'), + (0x1D4E0, 'M', u'q'), + (0x1D4E1, 'M', u'r'), + (0x1D4E2, 'M', u's'), + (0x1D4E3, 'M', u't'), + (0x1D4E4, 'M', u'u'), + (0x1D4E5, 'M', u'v'), + (0x1D4E6, 'M', u'w'), + (0x1D4E7, 'M', u'x'), + (0x1D4E8, 'M', u'y'), + (0x1D4E9, 'M', u'z'), + (0x1D4EA, 'M', u'a'), + (0x1D4EB, 'M', u'b'), + (0x1D4EC, 'M', u'c'), + (0x1D4ED, 'M', u'd'), + (0x1D4EE, 'M', u'e'), + (0x1D4EF, 'M', u'f'), + (0x1D4F0, 'M', u'g'), + (0x1D4F1, 'M', u'h'), + (0x1D4F2, 'M', u'i'), + (0x1D4F3, 'M', u'j'), + (0x1D4F4, 'M', u'k'), + (0x1D4F5, 'M', u'l'), + (0x1D4F6, 'M', u'm'), + (0x1D4F7, 'M', u'n'), + (0x1D4F8, 'M', u'o'), + (0x1D4F9, 'M', u'p'), + (0x1D4FA, 'M', u'q'), + (0x1D4FB, 'M', u'r'), + (0x1D4FC, 'M', u's'), + (0x1D4FD, 'M', u't'), + (0x1D4FE, 'M', u'u'), + (0x1D4FF, 'M', u'v'), + (0x1D500, 'M', u'w'), + (0x1D501, 'M', u'x'), + (0x1D502, 'M', u'y'), + (0x1D503, 'M', u'z'), + (0x1D504, 'M', u'a'), + (0x1D505, 'M', u'b'), + (0x1D506, 'X'), + (0x1D507, 'M', u'd'), + (0x1D508, 'M', u'e'), + (0x1D509, 'M', u'f'), + (0x1D50A, 'M', u'g'), + (0x1D50B, 'X'), + (0x1D50D, 'M', u'j'), + (0x1D50E, 'M', u'k'), + (0x1D50F, 'M', u'l'), + (0x1D510, 'M', u'm'), + (0x1D511, 'M', u'n'), + (0x1D512, 'M', u'o'), + (0x1D513, 'M', u'p'), + (0x1D514, 'M', u'q'), + (0x1D515, 'X'), + (0x1D516, 'M', u's'), + (0x1D517, 'M', u't'), + (0x1D518, 'M', u'u'), + (0x1D519, 'M', u'v'), + (0x1D51A, 'M', u'w'), + (0x1D51B, 'M', u'x'), + (0x1D51C, 'M', u'y'), + (0x1D51D, 'X'), + (0x1D51E, 'M', u'a'), + (0x1D51F, 'M', u'b'), + (0x1D520, 'M', u'c'), + (0x1D521, 'M', u'd'), + (0x1D522, 'M', u'e'), + (0x1D523, 'M', u'f'), + (0x1D524, 'M', u'g'), + (0x1D525, 'M', u'h'), + (0x1D526, 'M', u'i'), + (0x1D527, 'M', u'j'), + (0x1D528, 'M', u'k'), + ] + +def _seg_61(): + return [ + (0x1D529, 'M', u'l'), + (0x1D52A, 'M', u'm'), + (0x1D52B, 'M', u'n'), + (0x1D52C, 'M', u'o'), + (0x1D52D, 'M', u'p'), + (0x1D52E, 'M', u'q'), + (0x1D52F, 'M', u'r'), + (0x1D530, 'M', u's'), + (0x1D531, 'M', u't'), + (0x1D532, 'M', u'u'), + (0x1D533, 'M', u'v'), + (0x1D534, 'M', u'w'), + (0x1D535, 'M', u'x'), + (0x1D536, 'M', u'y'), + (0x1D537, 'M', u'z'), + (0x1D538, 'M', u'a'), + (0x1D539, 'M', u'b'), + (0x1D53A, 'X'), + (0x1D53B, 'M', u'd'), + (0x1D53C, 'M', u'e'), + (0x1D53D, 'M', u'f'), + (0x1D53E, 'M', u'g'), + (0x1D53F, 'X'), + (0x1D540, 'M', u'i'), + (0x1D541, 'M', u'j'), + (0x1D542, 'M', u'k'), + (0x1D543, 'M', u'l'), + (0x1D544, 'M', u'm'), + (0x1D545, 'X'), + (0x1D546, 'M', u'o'), + (0x1D547, 'X'), + (0x1D54A, 'M', u's'), + (0x1D54B, 'M', u't'), + (0x1D54C, 'M', u'u'), + (0x1D54D, 'M', u'v'), + (0x1D54E, 'M', u'w'), + (0x1D54F, 'M', u'x'), + (0x1D550, 'M', u'y'), + (0x1D551, 'X'), + (0x1D552, 'M', u'a'), + (0x1D553, 'M', u'b'), + (0x1D554, 'M', u'c'), + (0x1D555, 'M', u'd'), + (0x1D556, 'M', u'e'), + (0x1D557, 'M', u'f'), + (0x1D558, 'M', u'g'), + (0x1D559, 'M', u'h'), + (0x1D55A, 'M', u'i'), + (0x1D55B, 'M', u'j'), + (0x1D55C, 'M', u'k'), + (0x1D55D, 'M', u'l'), + (0x1D55E, 'M', u'm'), + (0x1D55F, 'M', u'n'), + (0x1D560, 'M', u'o'), + (0x1D561, 'M', u'p'), + (0x1D562, 'M', u'q'), + (0x1D563, 'M', u'r'), + (0x1D564, 'M', u's'), + (0x1D565, 'M', u't'), + (0x1D566, 'M', u'u'), + (0x1D567, 'M', u'v'), + (0x1D568, 'M', u'w'), + (0x1D569, 'M', u'x'), + (0x1D56A, 'M', u'y'), + (0x1D56B, 'M', u'z'), + (0x1D56C, 'M', u'a'), + (0x1D56D, 'M', u'b'), + (0x1D56E, 'M', u'c'), + (0x1D56F, 'M', u'd'), + (0x1D570, 'M', u'e'), + (0x1D571, 'M', u'f'), + (0x1D572, 'M', u'g'), + (0x1D573, 'M', u'h'), + (0x1D574, 'M', u'i'), + (0x1D575, 'M', u'j'), + (0x1D576, 'M', u'k'), + (0x1D577, 'M', u'l'), + (0x1D578, 'M', u'm'), + (0x1D579, 'M', u'n'), + (0x1D57A, 'M', u'o'), + (0x1D57B, 'M', u'p'), + (0x1D57C, 'M', u'q'), + (0x1D57D, 'M', u'r'), + (0x1D57E, 'M', u's'), + (0x1D57F, 'M', u't'), + (0x1D580, 'M', u'u'), + (0x1D581, 'M', u'v'), + (0x1D582, 'M', u'w'), + (0x1D583, 'M', u'x'), + (0x1D584, 'M', u'y'), + (0x1D585, 'M', u'z'), + (0x1D586, 'M', u'a'), + (0x1D587, 'M', u'b'), + (0x1D588, 'M', u'c'), + (0x1D589, 'M', u'd'), + (0x1D58A, 'M', u'e'), + (0x1D58B, 'M', u'f'), + (0x1D58C, 'M', u'g'), + (0x1D58D, 'M', u'h'), + (0x1D58E, 'M', u'i'), + ] + +def _seg_62(): + return [ + (0x1D58F, 'M', u'j'), + (0x1D590, 'M', u'k'), + (0x1D591, 'M', u'l'), + (0x1D592, 'M', u'm'), + (0x1D593, 'M', u'n'), + (0x1D594, 'M', u'o'), + (0x1D595, 'M', u'p'), + (0x1D596, 'M', u'q'), + (0x1D597, 'M', u'r'), + (0x1D598, 'M', u's'), + (0x1D599, 'M', u't'), + (0x1D59A, 'M', u'u'), + (0x1D59B, 'M', u'v'), + (0x1D59C, 'M', u'w'), + (0x1D59D, 'M', u'x'), + (0x1D59E, 'M', u'y'), + (0x1D59F, 'M', u'z'), + (0x1D5A0, 'M', u'a'), + (0x1D5A1, 'M', u'b'), + (0x1D5A2, 'M', u'c'), + (0x1D5A3, 'M', u'd'), + (0x1D5A4, 'M', u'e'), + (0x1D5A5, 'M', u'f'), + (0x1D5A6, 'M', u'g'), + (0x1D5A7, 'M', u'h'), + (0x1D5A8, 'M', u'i'), + (0x1D5A9, 'M', u'j'), + (0x1D5AA, 'M', u'k'), + (0x1D5AB, 'M', u'l'), + (0x1D5AC, 'M', u'm'), + (0x1D5AD, 'M', u'n'), + (0x1D5AE, 'M', u'o'), + (0x1D5AF, 'M', u'p'), + (0x1D5B0, 'M', u'q'), + (0x1D5B1, 'M', u'r'), + (0x1D5B2, 'M', u's'), + (0x1D5B3, 'M', u't'), + (0x1D5B4, 'M', u'u'), + (0x1D5B5, 'M', u'v'), + (0x1D5B6, 'M', u'w'), + (0x1D5B7, 'M', u'x'), + (0x1D5B8, 'M', u'y'), + (0x1D5B9, 'M', u'z'), + (0x1D5BA, 'M', u'a'), + (0x1D5BB, 'M', u'b'), + (0x1D5BC, 'M', u'c'), + (0x1D5BD, 'M', u'd'), + (0x1D5BE, 'M', u'e'), + (0x1D5BF, 'M', u'f'), + (0x1D5C0, 'M', u'g'), + (0x1D5C1, 'M', u'h'), + (0x1D5C2, 'M', u'i'), + (0x1D5C3, 'M', u'j'), + (0x1D5C4, 'M', u'k'), + (0x1D5C5, 'M', u'l'), + (0x1D5C6, 'M', u'm'), + (0x1D5C7, 'M', u'n'), + (0x1D5C8, 'M', u'o'), + (0x1D5C9, 'M', u'p'), + (0x1D5CA, 'M', u'q'), + (0x1D5CB, 'M', u'r'), + (0x1D5CC, 'M', u's'), + (0x1D5CD, 'M', u't'), + (0x1D5CE, 'M', u'u'), + (0x1D5CF, 'M', u'v'), + (0x1D5D0, 'M', u'w'), + (0x1D5D1, 'M', u'x'), + (0x1D5D2, 'M', u'y'), + (0x1D5D3, 'M', u'z'), + (0x1D5D4, 'M', u'a'), + (0x1D5D5, 'M', u'b'), + (0x1D5D6, 'M', u'c'), + (0x1D5D7, 'M', u'd'), + (0x1D5D8, 'M', u'e'), + (0x1D5D9, 'M', u'f'), + (0x1D5DA, 'M', u'g'), + (0x1D5DB, 'M', u'h'), + (0x1D5DC, 'M', u'i'), + (0x1D5DD, 'M', u'j'), + (0x1D5DE, 'M', u'k'), + (0x1D5DF, 'M', u'l'), + (0x1D5E0, 'M', u'm'), + (0x1D5E1, 'M', u'n'), + (0x1D5E2, 'M', u'o'), + (0x1D5E3, 'M', u'p'), + (0x1D5E4, 'M', u'q'), + (0x1D5E5, 'M', u'r'), + (0x1D5E6, 'M', u's'), + (0x1D5E7, 'M', u't'), + (0x1D5E8, 'M', u'u'), + (0x1D5E9, 'M', u'v'), + (0x1D5EA, 'M', u'w'), + (0x1D5EB, 'M', u'x'), + (0x1D5EC, 'M', u'y'), + (0x1D5ED, 'M', u'z'), + (0x1D5EE, 'M', u'a'), + (0x1D5EF, 'M', u'b'), + (0x1D5F0, 'M', u'c'), + (0x1D5F1, 'M', u'd'), + (0x1D5F2, 'M', u'e'), + ] + +def _seg_63(): + return [ + (0x1D5F3, 'M', u'f'), + (0x1D5F4, 'M', u'g'), + (0x1D5F5, 'M', u'h'), + (0x1D5F6, 'M', u'i'), + (0x1D5F7, 'M', u'j'), + (0x1D5F8, 'M', u'k'), + (0x1D5F9, 'M', u'l'), + (0x1D5FA, 'M', u'm'), + (0x1D5FB, 'M', u'n'), + (0x1D5FC, 'M', u'o'), + (0x1D5FD, 'M', u'p'), + (0x1D5FE, 'M', u'q'), + (0x1D5FF, 'M', u'r'), + (0x1D600, 'M', u's'), + (0x1D601, 'M', u't'), + (0x1D602, 'M', u'u'), + (0x1D603, 'M', u'v'), + (0x1D604, 'M', u'w'), + (0x1D605, 'M', u'x'), + (0x1D606, 'M', u'y'), + (0x1D607, 'M', u'z'), + (0x1D608, 'M', u'a'), + (0x1D609, 'M', u'b'), + (0x1D60A, 'M', u'c'), + (0x1D60B, 'M', u'd'), + (0x1D60C, 'M', u'e'), + (0x1D60D, 'M', u'f'), + (0x1D60E, 'M', u'g'), + (0x1D60F, 'M', u'h'), + (0x1D610, 'M', u'i'), + (0x1D611, 'M', u'j'), + (0x1D612, 'M', u'k'), + (0x1D613, 'M', u'l'), + (0x1D614, 'M', u'm'), + (0x1D615, 'M', u'n'), + (0x1D616, 'M', u'o'), + (0x1D617, 'M', u'p'), + (0x1D618, 'M', u'q'), + (0x1D619, 'M', u'r'), + (0x1D61A, 'M', u's'), + (0x1D61B, 'M', u't'), + (0x1D61C, 'M', u'u'), + (0x1D61D, 'M', u'v'), + (0x1D61E, 'M', u'w'), + (0x1D61F, 'M', u'x'), + (0x1D620, 'M', u'y'), + (0x1D621, 'M', u'z'), + (0x1D622, 'M', u'a'), + (0x1D623, 'M', u'b'), + (0x1D624, 'M', u'c'), + (0x1D625, 'M', u'd'), + (0x1D626, 'M', u'e'), + (0x1D627, 'M', u'f'), + (0x1D628, 'M', u'g'), + (0x1D629, 'M', u'h'), + (0x1D62A, 'M', u'i'), + (0x1D62B, 'M', u'j'), + (0x1D62C, 'M', u'k'), + (0x1D62D, 'M', u'l'), + (0x1D62E, 'M', u'm'), + (0x1D62F, 'M', u'n'), + (0x1D630, 'M', u'o'), + (0x1D631, 'M', u'p'), + (0x1D632, 'M', u'q'), + (0x1D633, 'M', u'r'), + (0x1D634, 'M', u's'), + (0x1D635, 'M', u't'), + (0x1D636, 'M', u'u'), + (0x1D637, 'M', u'v'), + (0x1D638, 'M', u'w'), + (0x1D639, 'M', u'x'), + (0x1D63A, 'M', u'y'), + (0x1D63B, 'M', u'z'), + (0x1D63C, 'M', u'a'), + (0x1D63D, 'M', u'b'), + (0x1D63E, 'M', u'c'), + (0x1D63F, 'M', u'd'), + (0x1D640, 'M', u'e'), + (0x1D641, 'M', u'f'), + (0x1D642, 'M', u'g'), + (0x1D643, 'M', u'h'), + (0x1D644, 'M', u'i'), + (0x1D645, 'M', u'j'), + (0x1D646, 'M', u'k'), + (0x1D647, 'M', u'l'), + (0x1D648, 'M', u'm'), + (0x1D649, 'M', u'n'), + (0x1D64A, 'M', u'o'), + (0x1D64B, 'M', u'p'), + (0x1D64C, 'M', u'q'), + (0x1D64D, 'M', u'r'), + (0x1D64E, 'M', u's'), + (0x1D64F, 'M', u't'), + (0x1D650, 'M', u'u'), + (0x1D651, 'M', u'v'), + (0x1D652, 'M', u'w'), + (0x1D653, 'M', u'x'), + (0x1D654, 'M', u'y'), + (0x1D655, 'M', u'z'), + (0x1D656, 'M', u'a'), + ] + +def _seg_64(): + return [ + (0x1D657, 'M', u'b'), + (0x1D658, 'M', u'c'), + (0x1D659, 'M', u'd'), + (0x1D65A, 'M', u'e'), + (0x1D65B, 'M', u'f'), + (0x1D65C, 'M', u'g'), + (0x1D65D, 'M', u'h'), + (0x1D65E, 'M', u'i'), + (0x1D65F, 'M', u'j'), + (0x1D660, 'M', u'k'), + (0x1D661, 'M', u'l'), + (0x1D662, 'M', u'm'), + (0x1D663, 'M', u'n'), + (0x1D664, 'M', u'o'), + (0x1D665, 'M', u'p'), + (0x1D666, 'M', u'q'), + (0x1D667, 'M', u'r'), + (0x1D668, 'M', u's'), + (0x1D669, 'M', u't'), + (0x1D66A, 'M', u'u'), + (0x1D66B, 'M', u'v'), + (0x1D66C, 'M', u'w'), + (0x1D66D, 'M', u'x'), + (0x1D66E, 'M', u'y'), + (0x1D66F, 'M', u'z'), + (0x1D670, 'M', u'a'), + (0x1D671, 'M', u'b'), + (0x1D672, 'M', u'c'), + (0x1D673, 'M', u'd'), + (0x1D674, 'M', u'e'), + (0x1D675, 'M', u'f'), + (0x1D676, 'M', u'g'), + (0x1D677, 'M', u'h'), + (0x1D678, 'M', u'i'), + (0x1D679, 'M', u'j'), + (0x1D67A, 'M', u'k'), + (0x1D67B, 'M', u'l'), + (0x1D67C, 'M', u'm'), + (0x1D67D, 'M', u'n'), + (0x1D67E, 'M', u'o'), + (0x1D67F, 'M', u'p'), + (0x1D680, 'M', u'q'), + (0x1D681, 'M', u'r'), + (0x1D682, 'M', u's'), + (0x1D683, 'M', u't'), + (0x1D684, 'M', u'u'), + (0x1D685, 'M', u'v'), + (0x1D686, 'M', u'w'), + (0x1D687, 'M', u'x'), + (0x1D688, 'M', u'y'), + (0x1D689, 'M', u'z'), + (0x1D68A, 'M', u'a'), + (0x1D68B, 'M', u'b'), + (0x1D68C, 'M', u'c'), + (0x1D68D, 'M', u'd'), + (0x1D68E, 'M', u'e'), + (0x1D68F, 'M', u'f'), + (0x1D690, 'M', u'g'), + (0x1D691, 'M', u'h'), + (0x1D692, 'M', u'i'), + (0x1D693, 'M', u'j'), + (0x1D694, 'M', u'k'), + (0x1D695, 'M', u'l'), + (0x1D696, 'M', u'm'), + (0x1D697, 'M', u'n'), + (0x1D698, 'M', u'o'), + (0x1D699, 'M', u'p'), + (0x1D69A, 'M', u'q'), + (0x1D69B, 'M', u'r'), + (0x1D69C, 'M', u's'), + (0x1D69D, 'M', u't'), + (0x1D69E, 'M', u'u'), + (0x1D69F, 'M', u'v'), + (0x1D6A0, 'M', u'w'), + (0x1D6A1, 'M', u'x'), + (0x1D6A2, 'M', u'y'), + (0x1D6A3, 'M', u'z'), + (0x1D6A4, 'M', u'ı'), + (0x1D6A5, 'M', u'ȷ'), + (0x1D6A6, 'X'), + (0x1D6A8, 'M', u'α'), + (0x1D6A9, 'M', u'β'), + (0x1D6AA, 'M', u'γ'), + (0x1D6AB, 'M', u'δ'), + (0x1D6AC, 'M', u'ε'), + (0x1D6AD, 'M', u'ζ'), + (0x1D6AE, 'M', u'η'), + (0x1D6AF, 'M', u'θ'), + (0x1D6B0, 'M', u'ι'), + (0x1D6B1, 'M', u'κ'), + (0x1D6B2, 'M', u'λ'), + (0x1D6B3, 'M', u'μ'), + (0x1D6B4, 'M', u'ν'), + (0x1D6B5, 'M', u'ξ'), + (0x1D6B6, 'M', u'ο'), + (0x1D6B7, 'M', u'π'), + (0x1D6B8, 'M', u'ρ'), + (0x1D6B9, 'M', u'θ'), + (0x1D6BA, 'M', u'σ'), + (0x1D6BB, 'M', u'τ'), + ] + +def _seg_65(): + return [ + (0x1D6BC, 'M', u'υ'), + (0x1D6BD, 'M', u'φ'), + (0x1D6BE, 'M', u'χ'), + (0x1D6BF, 'M', u'ψ'), + (0x1D6C0, 'M', u'ω'), + (0x1D6C1, 'M', u'∇'), + (0x1D6C2, 'M', u'α'), + (0x1D6C3, 'M', u'β'), + (0x1D6C4, 'M', u'γ'), + (0x1D6C5, 'M', u'δ'), + (0x1D6C6, 'M', u'ε'), + (0x1D6C7, 'M', u'ζ'), + (0x1D6C8, 'M', u'η'), + (0x1D6C9, 'M', u'θ'), + (0x1D6CA, 'M', u'ι'), + (0x1D6CB, 'M', u'κ'), + (0x1D6CC, 'M', u'λ'), + (0x1D6CD, 'M', u'μ'), + (0x1D6CE, 'M', u'ν'), + (0x1D6CF, 'M', u'ξ'), + (0x1D6D0, 'M', u'ο'), + (0x1D6D1, 'M', u'π'), + (0x1D6D2, 'M', u'ρ'), + (0x1D6D3, 'M', u'σ'), + (0x1D6D5, 'M', u'τ'), + (0x1D6D6, 'M', u'υ'), + (0x1D6D7, 'M', u'φ'), + (0x1D6D8, 'M', u'χ'), + (0x1D6D9, 'M', u'ψ'), + (0x1D6DA, 'M', u'ω'), + (0x1D6DB, 'M', u'∂'), + (0x1D6DC, 'M', u'ε'), + (0x1D6DD, 'M', u'θ'), + (0x1D6DE, 'M', u'κ'), + (0x1D6DF, 'M', u'φ'), + (0x1D6E0, 'M', u'ρ'), + (0x1D6E1, 'M', u'π'), + (0x1D6E2, 'M', u'α'), + (0x1D6E3, 'M', u'β'), + (0x1D6E4, 'M', u'γ'), + (0x1D6E5, 'M', u'δ'), + (0x1D6E6, 'M', u'ε'), + (0x1D6E7, 'M', u'ζ'), + (0x1D6E8, 'M', u'η'), + (0x1D6E9, 'M', u'θ'), + (0x1D6EA, 'M', u'ι'), + (0x1D6EB, 'M', u'κ'), + (0x1D6EC, 'M', u'λ'), + (0x1D6ED, 'M', u'μ'), + (0x1D6EE, 'M', u'ν'), + (0x1D6EF, 'M', u'ξ'), + (0x1D6F0, 'M', u'ο'), + (0x1D6F1, 'M', u'π'), + (0x1D6F2, 'M', u'ρ'), + (0x1D6F3, 'M', u'θ'), + (0x1D6F4, 'M', u'σ'), + (0x1D6F5, 'M', u'τ'), + (0x1D6F6, 'M', u'υ'), + (0x1D6F7, 'M', u'φ'), + (0x1D6F8, 'M', u'χ'), + (0x1D6F9, 'M', u'ψ'), + (0x1D6FA, 'M', u'ω'), + (0x1D6FB, 'M', u'∇'), + (0x1D6FC, 'M', u'α'), + (0x1D6FD, 'M', u'β'), + (0x1D6FE, 'M', u'γ'), + (0x1D6FF, 'M', u'δ'), + (0x1D700, 'M', u'ε'), + (0x1D701, 'M', u'ζ'), + (0x1D702, 'M', u'η'), + (0x1D703, 'M', u'θ'), + (0x1D704, 'M', u'ι'), + (0x1D705, 'M', u'κ'), + (0x1D706, 'M', u'λ'), + (0x1D707, 'M', u'μ'), + (0x1D708, 'M', u'ν'), + (0x1D709, 'M', u'ξ'), + (0x1D70A, 'M', u'ο'), + (0x1D70B, 'M', u'π'), + (0x1D70C, 'M', u'ρ'), + (0x1D70D, 'M', u'σ'), + (0x1D70F, 'M', u'τ'), + (0x1D710, 'M', u'υ'), + (0x1D711, 'M', u'φ'), + (0x1D712, 'M', u'χ'), + (0x1D713, 'M', u'ψ'), + (0x1D714, 'M', u'ω'), + (0x1D715, 'M', u'∂'), + (0x1D716, 'M', u'ε'), + (0x1D717, 'M', u'θ'), + (0x1D718, 'M', u'κ'), + (0x1D719, 'M', u'φ'), + (0x1D71A, 'M', u'ρ'), + (0x1D71B, 'M', u'π'), + (0x1D71C, 'M', u'α'), + (0x1D71D, 'M', u'β'), + (0x1D71E, 'M', u'γ'), + (0x1D71F, 'M', u'δ'), + (0x1D720, 'M', u'ε'), + (0x1D721, 'M', u'ζ'), + ] + +def _seg_66(): + return [ + (0x1D722, 'M', u'η'), + (0x1D723, 'M', u'θ'), + (0x1D724, 'M', u'ι'), + (0x1D725, 'M', u'κ'), + (0x1D726, 'M', u'λ'), + (0x1D727, 'M', u'μ'), + (0x1D728, 'M', u'ν'), + (0x1D729, 'M', u'ξ'), + (0x1D72A, 'M', u'ο'), + (0x1D72B, 'M', u'π'), + (0x1D72C, 'M', u'ρ'), + (0x1D72D, 'M', u'θ'), + (0x1D72E, 'M', u'σ'), + (0x1D72F, 'M', u'τ'), + (0x1D730, 'M', u'υ'), + (0x1D731, 'M', u'φ'), + (0x1D732, 'M', u'χ'), + (0x1D733, 'M', u'ψ'), + (0x1D734, 'M', u'ω'), + (0x1D735, 'M', u'∇'), + (0x1D736, 'M', u'α'), + (0x1D737, 'M', u'β'), + (0x1D738, 'M', u'γ'), + (0x1D739, 'M', u'δ'), + (0x1D73A, 'M', u'ε'), + (0x1D73B, 'M', u'ζ'), + (0x1D73C, 'M', u'η'), + (0x1D73D, 'M', u'θ'), + (0x1D73E, 'M', u'ι'), + (0x1D73F, 'M', u'κ'), + (0x1D740, 'M', u'λ'), + (0x1D741, 'M', u'μ'), + (0x1D742, 'M', u'ν'), + (0x1D743, 'M', u'ξ'), + (0x1D744, 'M', u'ο'), + (0x1D745, 'M', u'π'), + (0x1D746, 'M', u'ρ'), + (0x1D747, 'M', u'σ'), + (0x1D749, 'M', u'τ'), + (0x1D74A, 'M', u'υ'), + (0x1D74B, 'M', u'φ'), + (0x1D74C, 'M', u'χ'), + (0x1D74D, 'M', u'ψ'), + (0x1D74E, 'M', u'ω'), + (0x1D74F, 'M', u'∂'), + (0x1D750, 'M', u'ε'), + (0x1D751, 'M', u'θ'), + (0x1D752, 'M', u'κ'), + (0x1D753, 'M', u'φ'), + (0x1D754, 'M', u'ρ'), + (0x1D755, 'M', u'π'), + (0x1D756, 'M', u'α'), + (0x1D757, 'M', u'β'), + (0x1D758, 'M', u'γ'), + (0x1D759, 'M', u'δ'), + (0x1D75A, 'M', u'ε'), + (0x1D75B, 'M', u'ζ'), + (0x1D75C, 'M', u'η'), + (0x1D75D, 'M', u'θ'), + (0x1D75E, 'M', u'ι'), + (0x1D75F, 'M', u'κ'), + (0x1D760, 'M', u'λ'), + (0x1D761, 'M', u'μ'), + (0x1D762, 'M', u'ν'), + (0x1D763, 'M', u'ξ'), + (0x1D764, 'M', u'ο'), + (0x1D765, 'M', u'π'), + (0x1D766, 'M', u'ρ'), + (0x1D767, 'M', u'θ'), + (0x1D768, 'M', u'σ'), + (0x1D769, 'M', u'τ'), + (0x1D76A, 'M', u'υ'), + (0x1D76B, 'M', u'φ'), + (0x1D76C, 'M', u'χ'), + (0x1D76D, 'M', u'ψ'), + (0x1D76E, 'M', u'ω'), + (0x1D76F, 'M', u'∇'), + (0x1D770, 'M', u'α'), + (0x1D771, 'M', u'β'), + (0x1D772, 'M', u'γ'), + (0x1D773, 'M', u'δ'), + (0x1D774, 'M', u'ε'), + (0x1D775, 'M', u'ζ'), + (0x1D776, 'M', u'η'), + (0x1D777, 'M', u'θ'), + (0x1D778, 'M', u'ι'), + (0x1D779, 'M', u'κ'), + (0x1D77A, 'M', u'λ'), + (0x1D77B, 'M', u'μ'), + (0x1D77C, 'M', u'ν'), + (0x1D77D, 'M', u'ξ'), + (0x1D77E, 'M', u'ο'), + (0x1D77F, 'M', u'π'), + (0x1D780, 'M', u'ρ'), + (0x1D781, 'M', u'σ'), + (0x1D783, 'M', u'τ'), + (0x1D784, 'M', u'υ'), + (0x1D785, 'M', u'φ'), + (0x1D786, 'M', u'χ'), + (0x1D787, 'M', u'ψ'), + ] + +def _seg_67(): + return [ + (0x1D788, 'M', u'ω'), + (0x1D789, 'M', u'∂'), + (0x1D78A, 'M', u'ε'), + (0x1D78B, 'M', u'θ'), + (0x1D78C, 'M', u'κ'), + (0x1D78D, 'M', u'φ'), + (0x1D78E, 'M', u'ρ'), + (0x1D78F, 'M', u'π'), + (0x1D790, 'M', u'α'), + (0x1D791, 'M', u'β'), + (0x1D792, 'M', u'γ'), + (0x1D793, 'M', u'δ'), + (0x1D794, 'M', u'ε'), + (0x1D795, 'M', u'ζ'), + (0x1D796, 'M', u'η'), + (0x1D797, 'M', u'θ'), + (0x1D798, 'M', u'ι'), + (0x1D799, 'M', u'κ'), + (0x1D79A, 'M', u'λ'), + (0x1D79B, 'M', u'μ'), + (0x1D79C, 'M', u'ν'), + (0x1D79D, 'M', u'ξ'), + (0x1D79E, 'M', u'ο'), + (0x1D79F, 'M', u'π'), + (0x1D7A0, 'M', u'ρ'), + (0x1D7A1, 'M', u'θ'), + (0x1D7A2, 'M', u'σ'), + (0x1D7A3, 'M', u'τ'), + (0x1D7A4, 'M', u'υ'), + (0x1D7A5, 'M', u'φ'), + (0x1D7A6, 'M', u'χ'), + (0x1D7A7, 'M', u'ψ'), + (0x1D7A8, 'M', u'ω'), + (0x1D7A9, 'M', u'∇'), + (0x1D7AA, 'M', u'α'), + (0x1D7AB, 'M', u'β'), + (0x1D7AC, 'M', u'γ'), + (0x1D7AD, 'M', u'δ'), + (0x1D7AE, 'M', u'ε'), + (0x1D7AF, 'M', u'ζ'), + (0x1D7B0, 'M', u'η'), + (0x1D7B1, 'M', u'θ'), + (0x1D7B2, 'M', u'ι'), + (0x1D7B3, 'M', u'κ'), + (0x1D7B4, 'M', u'λ'), + (0x1D7B5, 'M', u'μ'), + (0x1D7B6, 'M', u'ν'), + (0x1D7B7, 'M', u'ξ'), + (0x1D7B8, 'M', u'ο'), + (0x1D7B9, 'M', u'π'), + (0x1D7BA, 'M', u'ρ'), + (0x1D7BB, 'M', u'σ'), + (0x1D7BD, 'M', u'τ'), + (0x1D7BE, 'M', u'υ'), + (0x1D7BF, 'M', u'φ'), + (0x1D7C0, 'M', u'χ'), + (0x1D7C1, 'M', u'ψ'), + (0x1D7C2, 'M', u'ω'), + (0x1D7C3, 'M', u'∂'), + (0x1D7C4, 'M', u'ε'), + (0x1D7C5, 'M', u'θ'), + (0x1D7C6, 'M', u'κ'), + (0x1D7C7, 'M', u'φ'), + (0x1D7C8, 'M', u'ρ'), + (0x1D7C9, 'M', u'π'), + (0x1D7CA, 'M', u'ϝ'), + (0x1D7CC, 'X'), + (0x1D7CE, 'M', u'0'), + (0x1D7CF, 'M', u'1'), + (0x1D7D0, 'M', u'2'), + (0x1D7D1, 'M', u'3'), + (0x1D7D2, 'M', u'4'), + (0x1D7D3, 'M', u'5'), + (0x1D7D4, 'M', u'6'), + (0x1D7D5, 'M', u'7'), + (0x1D7D6, 'M', u'8'), + (0x1D7D7, 'M', u'9'), + (0x1D7D8, 'M', u'0'), + (0x1D7D9, 'M', u'1'), + (0x1D7DA, 'M', u'2'), + (0x1D7DB, 'M', u'3'), + (0x1D7DC, 'M', u'4'), + (0x1D7DD, 'M', u'5'), + (0x1D7DE, 'M', u'6'), + (0x1D7DF, 'M', u'7'), + (0x1D7E0, 'M', u'8'), + (0x1D7E1, 'M', u'9'), + (0x1D7E2, 'M', u'0'), + (0x1D7E3, 'M', u'1'), + (0x1D7E4, 'M', u'2'), + (0x1D7E5, 'M', u'3'), + (0x1D7E6, 'M', u'4'), + (0x1D7E7, 'M', u'5'), + (0x1D7E8, 'M', u'6'), + (0x1D7E9, 'M', u'7'), + (0x1D7EA, 'M', u'8'), + (0x1D7EB, 'M', u'9'), + (0x1D7EC, 'M', u'0'), + (0x1D7ED, 'M', u'1'), + (0x1D7EE, 'M', u'2'), + ] + +def _seg_68(): + return [ + (0x1D7EF, 'M', u'3'), + (0x1D7F0, 'M', u'4'), + (0x1D7F1, 'M', u'5'), + (0x1D7F2, 'M', u'6'), + (0x1D7F3, 'M', u'7'), + (0x1D7F4, 'M', u'8'), + (0x1D7F5, 'M', u'9'), + (0x1D7F6, 'M', u'0'), + (0x1D7F7, 'M', u'1'), + (0x1D7F8, 'M', u'2'), + (0x1D7F9, 'M', u'3'), + (0x1D7FA, 'M', u'4'), + (0x1D7FB, 'M', u'5'), + (0x1D7FC, 'M', u'6'), + (0x1D7FD, 'M', u'7'), + (0x1D7FE, 'M', u'8'), + (0x1D7FF, 'M', u'9'), + (0x1D800, 'V'), + (0x1DA8C, 'X'), + (0x1DA9B, 'V'), + (0x1DAA0, 'X'), + (0x1DAA1, 'V'), + (0x1DAB0, 'X'), + (0x1E000, 'V'), + (0x1E007, 'X'), + (0x1E008, 'V'), + (0x1E019, 'X'), + (0x1E01B, 'V'), + (0x1E022, 'X'), + (0x1E023, 'V'), + (0x1E025, 'X'), + (0x1E026, 'V'), + (0x1E02B, 'X'), + (0x1E800, 'V'), + (0x1E8C5, 'X'), + (0x1E8C7, 'V'), + (0x1E8D7, 'X'), + (0x1E900, 'M', u'𞤢'), + (0x1E901, 'M', u'𞤣'), + (0x1E902, 'M', u'𞤤'), + (0x1E903, 'M', u'𞤥'), + (0x1E904, 'M', u'𞤦'), + (0x1E905, 'M', u'𞤧'), + (0x1E906, 'M', u'𞤨'), + (0x1E907, 'M', u'𞤩'), + (0x1E908, 'M', u'𞤪'), + (0x1E909, 'M', u'𞤫'), + (0x1E90A, 'M', u'𞤬'), + (0x1E90B, 'M', u'𞤭'), + (0x1E90C, 'M', u'𞤮'), + (0x1E90D, 'M', u'𞤯'), + (0x1E90E, 'M', u'𞤰'), + (0x1E90F, 'M', u'𞤱'), + (0x1E910, 'M', u'𞤲'), + (0x1E911, 'M', u'𞤳'), + (0x1E912, 'M', u'𞤴'), + (0x1E913, 'M', u'𞤵'), + (0x1E914, 'M', u'𞤶'), + (0x1E915, 'M', u'𞤷'), + (0x1E916, 'M', u'𞤸'), + (0x1E917, 'M', u'𞤹'), + (0x1E918, 'M', u'𞤺'), + (0x1E919, 'M', u'𞤻'), + (0x1E91A, 'M', u'𞤼'), + (0x1E91B, 'M', u'𞤽'), + (0x1E91C, 'M', u'𞤾'), + (0x1E91D, 'M', u'𞤿'), + (0x1E91E, 'M', u'𞥀'), + (0x1E91F, 'M', u'𞥁'), + (0x1E920, 'M', u'𞥂'), + (0x1E921, 'M', u'𞥃'), + (0x1E922, 'V'), + (0x1E94B, 'X'), + (0x1E950, 'V'), + (0x1E95A, 'X'), + (0x1E95E, 'V'), + (0x1E960, 'X'), + (0x1EC71, 'V'), + (0x1ECB5, 'X'), + (0x1EE00, 'M', u'ا'), + (0x1EE01, 'M', u'ب'), + (0x1EE02, 'M', u'ج'), + (0x1EE03, 'M', u'د'), + (0x1EE04, 'X'), + (0x1EE05, 'M', u'و'), + (0x1EE06, 'M', u'ز'), + (0x1EE07, 'M', u'ح'), + (0x1EE08, 'M', u'ط'), + (0x1EE09, 'M', u'ي'), + (0x1EE0A, 'M', u'ك'), + (0x1EE0B, 'M', u'ل'), + (0x1EE0C, 'M', u'م'), + (0x1EE0D, 'M', u'ن'), + (0x1EE0E, 'M', u'س'), + (0x1EE0F, 'M', u'ع'), + (0x1EE10, 'M', u'ف'), + (0x1EE11, 'M', u'ص'), + (0x1EE12, 'M', u'ق'), + (0x1EE13, 'M', u'ر'), + (0x1EE14, 'M', u'ش'), + ] + +def _seg_69(): + return [ + (0x1EE15, 'M', u'ت'), + (0x1EE16, 'M', u'ث'), + (0x1EE17, 'M', u'خ'), + (0x1EE18, 'M', u'ذ'), + (0x1EE19, 'M', u'ض'), + (0x1EE1A, 'M', u'ظ'), + (0x1EE1B, 'M', u'غ'), + (0x1EE1C, 'M', u'ٮ'), + (0x1EE1D, 'M', u'ں'), + (0x1EE1E, 'M', u'ڡ'), + (0x1EE1F, 'M', u'ٯ'), + (0x1EE20, 'X'), + (0x1EE21, 'M', u'ب'), + (0x1EE22, 'M', u'ج'), + (0x1EE23, 'X'), + (0x1EE24, 'M', u'ه'), + (0x1EE25, 'X'), + (0x1EE27, 'M', u'ح'), + (0x1EE28, 'X'), + (0x1EE29, 'M', u'ي'), + (0x1EE2A, 'M', u'ك'), + (0x1EE2B, 'M', u'ل'), + (0x1EE2C, 'M', u'م'), + (0x1EE2D, 'M', u'ن'), + (0x1EE2E, 'M', u'س'), + (0x1EE2F, 'M', u'ع'), + (0x1EE30, 'M', u'ف'), + (0x1EE31, 'M', u'ص'), + (0x1EE32, 'M', u'ق'), + (0x1EE33, 'X'), + (0x1EE34, 'M', u'ش'), + (0x1EE35, 'M', u'ت'), + (0x1EE36, 'M', u'ث'), + (0x1EE37, 'M', u'خ'), + (0x1EE38, 'X'), + (0x1EE39, 'M', u'ض'), + (0x1EE3A, 'X'), + (0x1EE3B, 'M', u'غ'), + (0x1EE3C, 'X'), + (0x1EE42, 'M', u'ج'), + (0x1EE43, 'X'), + (0x1EE47, 'M', u'ح'), + (0x1EE48, 'X'), + (0x1EE49, 'M', u'ي'), + (0x1EE4A, 'X'), + (0x1EE4B, 'M', u'ل'), + (0x1EE4C, 'X'), + (0x1EE4D, 'M', u'ن'), + (0x1EE4E, 'M', u'س'), + (0x1EE4F, 'M', u'ع'), + (0x1EE50, 'X'), + (0x1EE51, 'M', u'ص'), + (0x1EE52, 'M', u'ق'), + (0x1EE53, 'X'), + (0x1EE54, 'M', u'ش'), + (0x1EE55, 'X'), + (0x1EE57, 'M', u'خ'), + (0x1EE58, 'X'), + (0x1EE59, 'M', u'ض'), + (0x1EE5A, 'X'), + (0x1EE5B, 'M', u'غ'), + (0x1EE5C, 'X'), + (0x1EE5D, 'M', u'ں'), + (0x1EE5E, 'X'), + (0x1EE5F, 'M', u'ٯ'), + (0x1EE60, 'X'), + (0x1EE61, 'M', u'ب'), + (0x1EE62, 'M', u'ج'), + (0x1EE63, 'X'), + (0x1EE64, 'M', u'ه'), + (0x1EE65, 'X'), + (0x1EE67, 'M', u'ح'), + (0x1EE68, 'M', u'ط'), + (0x1EE69, 'M', u'ي'), + (0x1EE6A, 'M', u'ك'), + (0x1EE6B, 'X'), + (0x1EE6C, 'M', u'م'), + (0x1EE6D, 'M', u'ن'), + (0x1EE6E, 'M', u'س'), + (0x1EE6F, 'M', u'ع'), + (0x1EE70, 'M', u'ف'), + (0x1EE71, 'M', u'ص'), + (0x1EE72, 'M', u'ق'), + (0x1EE73, 'X'), + (0x1EE74, 'M', u'ش'), + (0x1EE75, 'M', u'ت'), + (0x1EE76, 'M', u'ث'), + (0x1EE77, 'M', u'خ'), + (0x1EE78, 'X'), + (0x1EE79, 'M', u'ض'), + (0x1EE7A, 'M', u'ظ'), + (0x1EE7B, 'M', u'غ'), + (0x1EE7C, 'M', u'ٮ'), + (0x1EE7D, 'X'), + (0x1EE7E, 'M', u'ڡ'), + (0x1EE7F, 'X'), + (0x1EE80, 'M', u'ا'), + (0x1EE81, 'M', u'ب'), + (0x1EE82, 'M', u'ج'), + (0x1EE83, 'M', u'د'), + ] + +def _seg_70(): + return [ + (0x1EE84, 'M', u'ه'), + (0x1EE85, 'M', u'و'), + (0x1EE86, 'M', u'ز'), + (0x1EE87, 'M', u'ح'), + (0x1EE88, 'M', u'ط'), + (0x1EE89, 'M', u'ي'), + (0x1EE8A, 'X'), + (0x1EE8B, 'M', u'ل'), + (0x1EE8C, 'M', u'م'), + (0x1EE8D, 'M', u'ن'), + (0x1EE8E, 'M', u'س'), + (0x1EE8F, 'M', u'ع'), + (0x1EE90, 'M', u'ف'), + (0x1EE91, 'M', u'ص'), + (0x1EE92, 'M', u'ق'), + (0x1EE93, 'M', u'ر'), + (0x1EE94, 'M', u'ش'), + (0x1EE95, 'M', u'ت'), + (0x1EE96, 'M', u'ث'), + (0x1EE97, 'M', u'خ'), + (0x1EE98, 'M', u'ذ'), + (0x1EE99, 'M', u'ض'), + (0x1EE9A, 'M', u'ظ'), + (0x1EE9B, 'M', u'غ'), + (0x1EE9C, 'X'), + (0x1EEA1, 'M', u'ب'), + (0x1EEA2, 'M', u'ج'), + (0x1EEA3, 'M', u'د'), + (0x1EEA4, 'X'), + (0x1EEA5, 'M', u'و'), + (0x1EEA6, 'M', u'ز'), + (0x1EEA7, 'M', u'ح'), + (0x1EEA8, 'M', u'ط'), + (0x1EEA9, 'M', u'ي'), + (0x1EEAA, 'X'), + (0x1EEAB, 'M', u'ل'), + (0x1EEAC, 'M', u'م'), + (0x1EEAD, 'M', u'ن'), + (0x1EEAE, 'M', u'س'), + (0x1EEAF, 'M', u'ع'), + (0x1EEB0, 'M', u'ف'), + (0x1EEB1, 'M', u'ص'), + (0x1EEB2, 'M', u'ق'), + (0x1EEB3, 'M', u'ر'), + (0x1EEB4, 'M', u'ش'), + (0x1EEB5, 'M', u'ت'), + (0x1EEB6, 'M', u'ث'), + (0x1EEB7, 'M', u'خ'), + (0x1EEB8, 'M', u'ذ'), + (0x1EEB9, 'M', u'ض'), + (0x1EEBA, 'M', u'ظ'), + (0x1EEBB, 'M', u'غ'), + (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, '3', u'0,'), + (0x1F102, '3', u'1,'), + (0x1F103, '3', u'2,'), + (0x1F104, '3', u'3,'), + (0x1F105, '3', u'4,'), + (0x1F106, '3', u'5,'), + (0x1F107, '3', u'6,'), + (0x1F108, '3', u'7,'), + (0x1F109, '3', u'8,'), + (0x1F10A, '3', u'9,'), + (0x1F10B, 'V'), + (0x1F10D, 'X'), + (0x1F110, '3', u'(a)'), + (0x1F111, '3', u'(b)'), + (0x1F112, '3', u'(c)'), + (0x1F113, '3', u'(d)'), + (0x1F114, '3', u'(e)'), + (0x1F115, '3', u'(f)'), + (0x1F116, '3', u'(g)'), + (0x1F117, '3', u'(h)'), + (0x1F118, '3', u'(i)'), + (0x1F119, '3', u'(j)'), + (0x1F11A, '3', u'(k)'), + (0x1F11B, '3', u'(l)'), + (0x1F11C, '3', u'(m)'), + (0x1F11D, '3', u'(n)'), + (0x1F11E, '3', u'(o)'), + (0x1F11F, '3', u'(p)'), + (0x1F120, '3', u'(q)'), + (0x1F121, '3', u'(r)'), + (0x1F122, '3', u'(s)'), + (0x1F123, '3', u'(t)'), + (0x1F124, '3', u'(u)'), + ] + +def _seg_71(): + return [ + (0x1F125, '3', u'(v)'), + (0x1F126, '3', u'(w)'), + (0x1F127, '3', u'(x)'), + (0x1F128, '3', u'(y)'), + (0x1F129, '3', u'(z)'), + (0x1F12A, 'M', u'〔s〕'), + (0x1F12B, 'M', u'c'), + (0x1F12C, 'M', u'r'), + (0x1F12D, 'M', u'cd'), + (0x1F12E, 'M', u'wz'), + (0x1F12F, 'V'), + (0x1F130, 'M', u'a'), + (0x1F131, 'M', u'b'), + (0x1F132, 'M', u'c'), + (0x1F133, 'M', u'd'), + (0x1F134, 'M', u'e'), + (0x1F135, 'M', u'f'), + (0x1F136, 'M', u'g'), + (0x1F137, 'M', u'h'), + (0x1F138, 'M', u'i'), + (0x1F139, 'M', u'j'), + (0x1F13A, 'M', u'k'), + (0x1F13B, 'M', u'l'), + (0x1F13C, 'M', u'm'), + (0x1F13D, 'M', u'n'), + (0x1F13E, 'M', u'o'), + (0x1F13F, 'M', u'p'), + (0x1F140, 'M', u'q'), + (0x1F141, 'M', u'r'), + (0x1F142, 'M', u's'), + (0x1F143, 'M', u't'), + (0x1F144, 'M', u'u'), + (0x1F145, 'M', u'v'), + (0x1F146, 'M', u'w'), + (0x1F147, 'M', u'x'), + (0x1F148, 'M', u'y'), + (0x1F149, 'M', u'z'), + (0x1F14A, 'M', u'hv'), + (0x1F14B, 'M', u'mv'), + (0x1F14C, 'M', u'sd'), + (0x1F14D, 'M', u'ss'), + (0x1F14E, 'M', u'ppv'), + (0x1F14F, 'M', u'wc'), + (0x1F150, 'V'), + (0x1F16A, 'M', u'mc'), + (0x1F16B, 'M', u'md'), + (0x1F16C, 'X'), + (0x1F170, 'V'), + (0x1F190, 'M', u'dj'), + (0x1F191, 'V'), + (0x1F1AD, 'X'), + (0x1F1E6, 'V'), + (0x1F200, 'M', u'ほか'), + (0x1F201, 'M', u'ココ'), + (0x1F202, 'M', u'サ'), + (0x1F203, 'X'), + (0x1F210, 'M', u'手'), + (0x1F211, 'M', u'字'), + (0x1F212, 'M', u'双'), + (0x1F213, 'M', u'デ'), + (0x1F214, 'M', u'二'), + (0x1F215, 'M', u'多'), + (0x1F216, 'M', u'解'), + (0x1F217, 'M', u'天'), + (0x1F218, 'M', u'交'), + (0x1F219, 'M', u'映'), + (0x1F21A, 'M', u'無'), + (0x1F21B, 'M', u'料'), + (0x1F21C, 'M', u'前'), + (0x1F21D, 'M', u'後'), + (0x1F21E, 'M', u'再'), + (0x1F21F, 'M', u'新'), + (0x1F220, 'M', u'初'), + (0x1F221, 'M', u'終'), + (0x1F222, 'M', u'生'), + (0x1F223, 'M', u'販'), + (0x1F224, 'M', u'声'), + (0x1F225, 'M', u'吹'), + (0x1F226, 'M', u'演'), + (0x1F227, 'M', u'投'), + (0x1F228, 'M', u'捕'), + (0x1F229, 'M', u'一'), + (0x1F22A, 'M', u'三'), + (0x1F22B, 'M', u'遊'), + (0x1F22C, 'M', u'左'), + (0x1F22D, 'M', u'中'), + (0x1F22E, 'M', u'右'), + (0x1F22F, 'M', u'指'), + (0x1F230, 'M', u'走'), + (0x1F231, 'M', u'打'), + (0x1F232, 'M', u'禁'), + (0x1F233, 'M', u'空'), + (0x1F234, 'M', u'合'), + (0x1F235, 'M', u'満'), + (0x1F236, 'M', u'有'), + (0x1F237, 'M', u'月'), + (0x1F238, 'M', u'申'), + (0x1F239, 'M', u'割'), + (0x1F23A, 'M', u'営'), + (0x1F23B, 'M', u'配'), + ] + +def _seg_72(): + return [ + (0x1F23C, 'X'), + (0x1F240, 'M', u'〔本〕'), + (0x1F241, 'M', u'〔三〕'), + (0x1F242, 'M', u'〔二〕'), + (0x1F243, 'M', u'〔安〕'), + (0x1F244, 'M', u'〔点〕'), + (0x1F245, 'M', u'〔打〕'), + (0x1F246, 'M', u'〔盗〕'), + (0x1F247, 'M', u'〔勝〕'), + (0x1F248, 'M', u'〔敗〕'), + (0x1F249, 'X'), + (0x1F250, 'M', u'得'), + (0x1F251, 'M', u'可'), + (0x1F252, 'X'), + (0x1F260, 'V'), + (0x1F266, 'X'), + (0x1F300, 'V'), + (0x1F6D5, 'X'), + (0x1F6E0, 'V'), + (0x1F6ED, 'X'), + (0x1F6F0, 'V'), + (0x1F6FA, 'X'), + (0x1F700, 'V'), + (0x1F774, 'X'), + (0x1F780, 'V'), + (0x1F7D9, 'X'), + (0x1F800, 'V'), + (0x1F80C, 'X'), + (0x1F810, 'V'), + (0x1F848, 'X'), + (0x1F850, 'V'), + (0x1F85A, 'X'), + (0x1F860, 'V'), + (0x1F888, 'X'), + (0x1F890, 'V'), + (0x1F8AE, 'X'), + (0x1F900, 'V'), + (0x1F90C, 'X'), + (0x1F910, 'V'), + (0x1F93F, 'X'), + (0x1F940, 'V'), + (0x1F971, 'X'), + (0x1F973, 'V'), + (0x1F977, 'X'), + (0x1F97A, 'V'), + (0x1F97B, 'X'), + (0x1F97C, 'V'), + (0x1F9A3, 'X'), + (0x1F9B0, 'V'), + (0x1F9BA, 'X'), + (0x1F9C0, 'V'), + (0x1F9C3, 'X'), + (0x1F9D0, 'V'), + (0x1FA00, 'X'), + (0x1FA60, 'V'), + (0x1FA6E, 'X'), + (0x20000, 'V'), + (0x2A6D7, 'X'), + (0x2A700, 'V'), + (0x2B735, 'X'), + (0x2B740, 'V'), + (0x2B81E, 'X'), + (0x2B820, 'V'), + (0x2CEA2, 'X'), + (0x2CEB0, 'V'), + (0x2EBE1, 'X'), + (0x2F800, 'M', u'丽'), + (0x2F801, 'M', u'丸'), + (0x2F802, 'M', u'乁'), + (0x2F803, 'M', u'𠄢'), + (0x2F804, 'M', u'你'), + (0x2F805, 'M', u'侮'), + (0x2F806, 'M', u'侻'), + (0x2F807, 'M', u'倂'), + (0x2F808, 'M', u'偺'), + (0x2F809, 'M', u'備'), + (0x2F80A, 'M', u'僧'), + (0x2F80B, 'M', u'像'), + (0x2F80C, 'M', u'㒞'), + (0x2F80D, 'M', u'𠘺'), + (0x2F80E, 'M', u'免'), + (0x2F80F, 'M', u'兔'), + (0x2F810, 'M', u'兤'), + (0x2F811, 'M', u'具'), + (0x2F812, 'M', u'𠔜'), + (0x2F813, 'M', u'㒹'), + (0x2F814, 'M', u'內'), + (0x2F815, 'M', u'再'), + (0x2F816, 'M', u'𠕋'), + (0x2F817, 'M', u'冗'), + (0x2F818, 'M', u'冤'), + (0x2F819, 'M', u'仌'), + (0x2F81A, 'M', u'冬'), + (0x2F81B, 'M', u'况'), + (0x2F81C, 'M', u'𩇟'), + (0x2F81D, 'M', u'凵'), + (0x2F81E, 'M', u'刃'), + (0x2F81F, 'M', u'㓟'), + (0x2F820, 'M', u'刻'), + (0x2F821, 'M', u'剆'), + ] + +def _seg_73(): + return [ + (0x2F822, 'M', u'割'), + (0x2F823, 'M', u'剷'), + (0x2F824, 'M', u'㔕'), + (0x2F825, 'M', u'勇'), + (0x2F826, 'M', u'勉'), + (0x2F827, 'M', u'勤'), + (0x2F828, 'M', u'勺'), + (0x2F829, 'M', u'包'), + (0x2F82A, 'M', u'匆'), + (0x2F82B, 'M', u'北'), + (0x2F82C, 'M', u'卉'), + (0x2F82D, 'M', u'卑'), + (0x2F82E, 'M', u'博'), + (0x2F82F, 'M', u'即'), + (0x2F830, 'M', u'卽'), + (0x2F831, 'M', u'卿'), + (0x2F834, 'M', u'𠨬'), + (0x2F835, 'M', u'灰'), + (0x2F836, 'M', u'及'), + (0x2F837, 'M', u'叟'), + (0x2F838, 'M', u'𠭣'), + (0x2F839, 'M', u'叫'), + (0x2F83A, 'M', u'叱'), + (0x2F83B, 'M', u'吆'), + (0x2F83C, 'M', u'咞'), + (0x2F83D, 'M', u'吸'), + (0x2F83E, 'M', u'呈'), + (0x2F83F, 'M', u'周'), + (0x2F840, 'M', u'咢'), + (0x2F841, 'M', u'哶'), + (0x2F842, 'M', u'唐'), + (0x2F843, 'M', u'啓'), + (0x2F844, 'M', u'啣'), + (0x2F845, 'M', u'善'), + (0x2F847, 'M', u'喙'), + (0x2F848, 'M', u'喫'), + (0x2F849, 'M', u'喳'), + (0x2F84A, 'M', u'嗂'), + (0x2F84B, 'M', u'圖'), + (0x2F84C, 'M', u'嘆'), + (0x2F84D, 'M', u'圗'), + (0x2F84E, 'M', u'噑'), + (0x2F84F, 'M', u'噴'), + (0x2F850, 'M', u'切'), + (0x2F851, 'M', u'壮'), + (0x2F852, 'M', u'城'), + (0x2F853, 'M', u'埴'), + (0x2F854, 'M', u'堍'), + (0x2F855, 'M', u'型'), + (0x2F856, 'M', u'堲'), + (0x2F857, 'M', u'報'), + (0x2F858, 'M', u'墬'), + (0x2F859, 'M', u'𡓤'), + (0x2F85A, 'M', u'売'), + (0x2F85B, 'M', u'壷'), + (0x2F85C, 'M', u'夆'), + (0x2F85D, 'M', u'多'), + (0x2F85E, 'M', u'夢'), + (0x2F85F, 'M', u'奢'), + (0x2F860, 'M', u'𡚨'), + (0x2F861, 'M', u'𡛪'), + (0x2F862, 'M', u'姬'), + (0x2F863, 'M', u'娛'), + (0x2F864, 'M', u'娧'), + (0x2F865, 'M', u'姘'), + (0x2F866, 'M', u'婦'), + (0x2F867, 'M', u'㛮'), + (0x2F868, 'X'), + (0x2F869, 'M', u'嬈'), + (0x2F86A, 'M', u'嬾'), + (0x2F86C, 'M', u'𡧈'), + (0x2F86D, 'M', u'寃'), + (0x2F86E, 'M', u'寘'), + (0x2F86F, 'M', u'寧'), + (0x2F870, 'M', u'寳'), + (0x2F871, 'M', u'𡬘'), + (0x2F872, 'M', u'寿'), + (0x2F873, 'M', u'将'), + (0x2F874, 'X'), + (0x2F875, 'M', u'尢'), + (0x2F876, 'M', u'㞁'), + (0x2F877, 'M', u'屠'), + (0x2F878, 'M', u'屮'), + (0x2F879, 'M', u'峀'), + (0x2F87A, 'M', u'岍'), + (0x2F87B, 'M', u'𡷤'), + (0x2F87C, 'M', u'嵃'), + (0x2F87D, 'M', u'𡷦'), + (0x2F87E, 'M', u'嵮'), + (0x2F87F, 'M', u'嵫'), + (0x2F880, 'M', u'嵼'), + (0x2F881, 'M', u'巡'), + (0x2F882, 'M', u'巢'), + (0x2F883, 'M', u'㠯'), + (0x2F884, 'M', u'巽'), + (0x2F885, 'M', u'帨'), + (0x2F886, 'M', u'帽'), + (0x2F887, 'M', u'幩'), + (0x2F888, 'M', u'㡢'), + (0x2F889, 'M', u'𢆃'), + ] + +def _seg_74(): + return [ + (0x2F88A, 'M', u'㡼'), + (0x2F88B, 'M', u'庰'), + (0x2F88C, 'M', u'庳'), + (0x2F88D, 'M', u'庶'), + (0x2F88E, 'M', u'廊'), + (0x2F88F, 'M', u'𪎒'), + (0x2F890, 'M', u'廾'), + (0x2F891, 'M', u'𢌱'), + (0x2F893, 'M', u'舁'), + (0x2F894, 'M', u'弢'), + (0x2F896, 'M', u'㣇'), + (0x2F897, 'M', u'𣊸'), + (0x2F898, 'M', u'𦇚'), + (0x2F899, 'M', u'形'), + (0x2F89A, 'M', u'彫'), + (0x2F89B, 'M', u'㣣'), + (0x2F89C, 'M', u'徚'), + (0x2F89D, 'M', u'忍'), + (0x2F89E, 'M', u'志'), + (0x2F89F, 'M', u'忹'), + (0x2F8A0, 'M', u'悁'), + (0x2F8A1, 'M', u'㤺'), + (0x2F8A2, 'M', u'㤜'), + (0x2F8A3, 'M', u'悔'), + (0x2F8A4, 'M', u'𢛔'), + (0x2F8A5, 'M', u'惇'), + (0x2F8A6, 'M', u'慈'), + (0x2F8A7, 'M', u'慌'), + (0x2F8A8, 'M', u'慎'), + (0x2F8A9, 'M', u'慌'), + (0x2F8AA, 'M', u'慺'), + (0x2F8AB, 'M', u'憎'), + (0x2F8AC, 'M', u'憲'), + (0x2F8AD, 'M', u'憤'), + (0x2F8AE, 'M', u'憯'), + (0x2F8AF, 'M', u'懞'), + (0x2F8B0, 'M', u'懲'), + (0x2F8B1, 'M', u'懶'), + (0x2F8B2, 'M', u'成'), + (0x2F8B3, 'M', u'戛'), + (0x2F8B4, 'M', u'扝'), + (0x2F8B5, 'M', u'抱'), + (0x2F8B6, 'M', u'拔'), + (0x2F8B7, 'M', u'捐'), + (0x2F8B8, 'M', u'𢬌'), + (0x2F8B9, 'M', u'挽'), + (0x2F8BA, 'M', u'拼'), + (0x2F8BB, 'M', u'捨'), + (0x2F8BC, 'M', u'掃'), + (0x2F8BD, 'M', u'揤'), + (0x2F8BE, 'M', u'𢯱'), + (0x2F8BF, 'M', u'搢'), + (0x2F8C0, 'M', u'揅'), + (0x2F8C1, 'M', u'掩'), + (0x2F8C2, 'M', u'㨮'), + (0x2F8C3, 'M', u'摩'), + (0x2F8C4, 'M', u'摾'), + (0x2F8C5, 'M', u'撝'), + (0x2F8C6, 'M', u'摷'), + (0x2F8C7, 'M', u'㩬'), + (0x2F8C8, 'M', u'敏'), + (0x2F8C9, 'M', u'敬'), + (0x2F8CA, 'M', u'𣀊'), + (0x2F8CB, 'M', u'旣'), + (0x2F8CC, 'M', u'書'), + (0x2F8CD, 'M', u'晉'), + (0x2F8CE, 'M', u'㬙'), + (0x2F8CF, 'M', u'暑'), + (0x2F8D0, 'M', u'㬈'), + (0x2F8D1, 'M', u'㫤'), + (0x2F8D2, 'M', u'冒'), + (0x2F8D3, 'M', u'冕'), + (0x2F8D4, 'M', u'最'), + (0x2F8D5, 'M', u'暜'), + (0x2F8D6, 'M', u'肭'), + (0x2F8D7, 'M', u'䏙'), + (0x2F8D8, 'M', u'朗'), + (0x2F8D9, 'M', u'望'), + (0x2F8DA, 'M', u'朡'), + (0x2F8DB, 'M', u'杞'), + (0x2F8DC, 'M', u'杓'), + (0x2F8DD, 'M', u'𣏃'), + (0x2F8DE, 'M', u'㭉'), + (0x2F8DF, 'M', u'柺'), + (0x2F8E0, 'M', u'枅'), + (0x2F8E1, 'M', u'桒'), + (0x2F8E2, 'M', u'梅'), + (0x2F8E3, 'M', u'𣑭'), + (0x2F8E4, 'M', u'梎'), + (0x2F8E5, 'M', u'栟'), + (0x2F8E6, 'M', u'椔'), + (0x2F8E7, 'M', u'㮝'), + (0x2F8E8, 'M', u'楂'), + (0x2F8E9, 'M', u'榣'), + (0x2F8EA, 'M', u'槪'), + (0x2F8EB, 'M', u'檨'), + (0x2F8EC, 'M', u'𣚣'), + (0x2F8ED, 'M', u'櫛'), + (0x2F8EE, 'M', u'㰘'), + (0x2F8EF, 'M', u'次'), + ] + +def _seg_75(): + return [ + (0x2F8F0, 'M', u'𣢧'), + (0x2F8F1, 'M', u'歔'), + (0x2F8F2, 'M', u'㱎'), + (0x2F8F3, 'M', u'歲'), + (0x2F8F4, 'M', u'殟'), + (0x2F8F5, 'M', u'殺'), + (0x2F8F6, 'M', u'殻'), + (0x2F8F7, 'M', u'𣪍'), + (0x2F8F8, 'M', u'𡴋'), + (0x2F8F9, 'M', u'𣫺'), + (0x2F8FA, 'M', u'汎'), + (0x2F8FB, 'M', u'𣲼'), + (0x2F8FC, 'M', u'沿'), + (0x2F8FD, 'M', u'泍'), + (0x2F8FE, 'M', u'汧'), + (0x2F8FF, 'M', u'洖'), + (0x2F900, 'M', u'派'), + (0x2F901, 'M', u'海'), + (0x2F902, 'M', u'流'), + (0x2F903, 'M', u'浩'), + (0x2F904, 'M', u'浸'), + (0x2F905, 'M', u'涅'), + (0x2F906, 'M', u'𣴞'), + (0x2F907, 'M', u'洴'), + (0x2F908, 'M', u'港'), + (0x2F909, 'M', u'湮'), + (0x2F90A, 'M', u'㴳'), + (0x2F90B, 'M', u'滋'), + (0x2F90C, 'M', u'滇'), + (0x2F90D, 'M', u'𣻑'), + (0x2F90E, 'M', u'淹'), + (0x2F90F, 'M', u'潮'), + (0x2F910, 'M', u'𣽞'), + (0x2F911, 'M', u'𣾎'), + (0x2F912, 'M', u'濆'), + (0x2F913, 'M', u'瀹'), + (0x2F914, 'M', u'瀞'), + (0x2F915, 'M', u'瀛'), + (0x2F916, 'M', u'㶖'), + (0x2F917, 'M', u'灊'), + (0x2F918, 'M', u'災'), + (0x2F919, 'M', u'灷'), + (0x2F91A, 'M', u'炭'), + (0x2F91B, 'M', u'𠔥'), + (0x2F91C, 'M', u'煅'), + (0x2F91D, 'M', u'𤉣'), + (0x2F91E, 'M', u'熜'), + (0x2F91F, 'X'), + (0x2F920, 'M', u'爨'), + (0x2F921, 'M', u'爵'), + (0x2F922, 'M', u'牐'), + (0x2F923, 'M', u'𤘈'), + (0x2F924, 'M', u'犀'), + (0x2F925, 'M', u'犕'), + (0x2F926, 'M', u'𤜵'), + (0x2F927, 'M', u'𤠔'), + (0x2F928, 'M', u'獺'), + (0x2F929, 'M', u'王'), + (0x2F92A, 'M', u'㺬'), + (0x2F92B, 'M', u'玥'), + (0x2F92C, 'M', u'㺸'), + (0x2F92E, 'M', u'瑇'), + (0x2F92F, 'M', u'瑜'), + (0x2F930, 'M', u'瑱'), + (0x2F931, 'M', u'璅'), + (0x2F932, 'M', u'瓊'), + (0x2F933, 'M', u'㼛'), + (0x2F934, 'M', u'甤'), + (0x2F935, 'M', u'𤰶'), + (0x2F936, 'M', u'甾'), + (0x2F937, 'M', u'𤲒'), + (0x2F938, 'M', u'異'), + (0x2F939, 'M', u'𢆟'), + (0x2F93A, 'M', u'瘐'), + (0x2F93B, 'M', u'𤾡'), + (0x2F93C, 'M', u'𤾸'), + (0x2F93D, 'M', u'𥁄'), + (0x2F93E, 'M', u'㿼'), + (0x2F93F, 'M', u'䀈'), + (0x2F940, 'M', u'直'), + (0x2F941, 'M', u'𥃳'), + (0x2F942, 'M', u'𥃲'), + (0x2F943, 'M', u'𥄙'), + (0x2F944, 'M', u'𥄳'), + (0x2F945, 'M', u'眞'), + (0x2F946, 'M', u'真'), + (0x2F948, 'M', u'睊'), + (0x2F949, 'M', u'䀹'), + (0x2F94A, 'M', u'瞋'), + (0x2F94B, 'M', u'䁆'), + (0x2F94C, 'M', u'䂖'), + (0x2F94D, 'M', u'𥐝'), + (0x2F94E, 'M', u'硎'), + (0x2F94F, 'M', u'碌'), + (0x2F950, 'M', u'磌'), + (0x2F951, 'M', u'䃣'), + (0x2F952, 'M', u'𥘦'), + (0x2F953, 'M', u'祖'), + (0x2F954, 'M', u'𥚚'), + (0x2F955, 'M', u'𥛅'), + ] + +def _seg_76(): + return [ + (0x2F956, 'M', u'福'), + (0x2F957, 'M', u'秫'), + (0x2F958, 'M', u'䄯'), + (0x2F959, 'M', u'穀'), + (0x2F95A, 'M', u'穊'), + (0x2F95B, 'M', u'穏'), + (0x2F95C, 'M', u'𥥼'), + (0x2F95D, 'M', u'𥪧'), + (0x2F95F, 'X'), + (0x2F960, 'M', u'䈂'), + (0x2F961, 'M', u'𥮫'), + (0x2F962, 'M', u'篆'), + (0x2F963, 'M', u'築'), + (0x2F964, 'M', u'䈧'), + (0x2F965, 'M', u'𥲀'), + (0x2F966, 'M', u'糒'), + (0x2F967, 'M', u'䊠'), + (0x2F968, 'M', u'糨'), + (0x2F969, 'M', u'糣'), + (0x2F96A, 'M', u'紀'), + (0x2F96B, 'M', u'𥾆'), + (0x2F96C, 'M', u'絣'), + (0x2F96D, 'M', u'䌁'), + (0x2F96E, 'M', u'緇'), + (0x2F96F, 'M', u'縂'), + (0x2F970, 'M', u'繅'), + (0x2F971, 'M', u'䌴'), + (0x2F972, 'M', u'𦈨'), + (0x2F973, 'M', u'𦉇'), + (0x2F974, 'M', u'䍙'), + (0x2F975, 'M', u'𦋙'), + (0x2F976, 'M', u'罺'), + (0x2F977, 'M', u'𦌾'), + (0x2F978, 'M', u'羕'), + (0x2F979, 'M', u'翺'), + (0x2F97A, 'M', u'者'), + (0x2F97B, 'M', u'𦓚'), + (0x2F97C, 'M', u'𦔣'), + (0x2F97D, 'M', u'聠'), + (0x2F97E, 'M', u'𦖨'), + (0x2F97F, 'M', u'聰'), + (0x2F980, 'M', u'𣍟'), + (0x2F981, 'M', u'䏕'), + (0x2F982, 'M', u'育'), + (0x2F983, 'M', u'脃'), + (0x2F984, 'M', u'䐋'), + (0x2F985, 'M', u'脾'), + (0x2F986, 'M', u'媵'), + (0x2F987, 'M', u'𦞧'), + (0x2F988, 'M', u'𦞵'), + (0x2F989, 'M', u'𣎓'), + (0x2F98A, 'M', u'𣎜'), + (0x2F98B, 'M', u'舁'), + (0x2F98C, 'M', u'舄'), + (0x2F98D, 'M', u'辞'), + (0x2F98E, 'M', u'䑫'), + (0x2F98F, 'M', u'芑'), + (0x2F990, 'M', u'芋'), + (0x2F991, 'M', u'芝'), + (0x2F992, 'M', u'劳'), + (0x2F993, 'M', u'花'), + (0x2F994, 'M', u'芳'), + (0x2F995, 'M', u'芽'), + (0x2F996, 'M', u'苦'), + (0x2F997, 'M', u'𦬼'), + (0x2F998, 'M', u'若'), + (0x2F999, 'M', u'茝'), + (0x2F99A, 'M', u'荣'), + (0x2F99B, 'M', u'莭'), + (0x2F99C, 'M', u'茣'), + (0x2F99D, 'M', u'莽'), + (0x2F99E, 'M', u'菧'), + (0x2F99F, 'M', u'著'), + (0x2F9A0, 'M', u'荓'), + (0x2F9A1, 'M', u'菊'), + (0x2F9A2, 'M', u'菌'), + (0x2F9A3, 'M', u'菜'), + (0x2F9A4, 'M', u'𦰶'), + (0x2F9A5, 'M', u'𦵫'), + (0x2F9A6, 'M', u'𦳕'), + (0x2F9A7, 'M', u'䔫'), + (0x2F9A8, 'M', u'蓱'), + (0x2F9A9, 'M', u'蓳'), + (0x2F9AA, 'M', u'蔖'), + (0x2F9AB, 'M', u'𧏊'), + (0x2F9AC, 'M', u'蕤'), + (0x2F9AD, 'M', u'𦼬'), + (0x2F9AE, 'M', u'䕝'), + (0x2F9AF, 'M', u'䕡'), + (0x2F9B0, 'M', u'𦾱'), + (0x2F9B1, 'M', u'𧃒'), + (0x2F9B2, 'M', u'䕫'), + (0x2F9B3, 'M', u'虐'), + (0x2F9B4, 'M', u'虜'), + (0x2F9B5, 'M', u'虧'), + (0x2F9B6, 'M', u'虩'), + (0x2F9B7, 'M', u'蚩'), + (0x2F9B8, 'M', u'蚈'), + (0x2F9B9, 'M', u'蜎'), + (0x2F9BA, 'M', u'蛢'), + ] + +def _seg_77(): + return [ + (0x2F9BB, 'M', u'蝹'), + (0x2F9BC, 'M', u'蜨'), + (0x2F9BD, 'M', u'蝫'), + (0x2F9BE, 'M', u'螆'), + (0x2F9BF, 'X'), + (0x2F9C0, 'M', u'蟡'), + (0x2F9C1, 'M', u'蠁'), + (0x2F9C2, 'M', u'䗹'), + (0x2F9C3, 'M', u'衠'), + (0x2F9C4, 'M', u'衣'), + (0x2F9C5, 'M', u'𧙧'), + (0x2F9C6, 'M', u'裗'), + (0x2F9C7, 'M', u'裞'), + (0x2F9C8, 'M', u'䘵'), + (0x2F9C9, 'M', u'裺'), + (0x2F9CA, 'M', u'㒻'), + (0x2F9CB, 'M', u'𧢮'), + (0x2F9CC, 'M', u'𧥦'), + (0x2F9CD, 'M', u'䚾'), + (0x2F9CE, 'M', u'䛇'), + (0x2F9CF, 'M', u'誠'), + (0x2F9D0, 'M', u'諭'), + (0x2F9D1, 'M', u'變'), + (0x2F9D2, 'M', u'豕'), + (0x2F9D3, 'M', u'𧲨'), + (0x2F9D4, 'M', u'貫'), + (0x2F9D5, 'M', u'賁'), + (0x2F9D6, 'M', u'贛'), + (0x2F9D7, 'M', u'起'), + (0x2F9D8, 'M', u'𧼯'), + (0x2F9D9, 'M', u'𠠄'), + (0x2F9DA, 'M', u'跋'), + (0x2F9DB, 'M', u'趼'), + (0x2F9DC, 'M', u'跰'), + (0x2F9DD, 'M', u'𠣞'), + (0x2F9DE, 'M', u'軔'), + (0x2F9DF, 'M', u'輸'), + (0x2F9E0, 'M', u'𨗒'), + (0x2F9E1, 'M', u'𨗭'), + (0x2F9E2, 'M', u'邔'), + (0x2F9E3, 'M', u'郱'), + (0x2F9E4, 'M', u'鄑'), + (0x2F9E5, 'M', u'𨜮'), + (0x2F9E6, 'M', u'鄛'), + (0x2F9E7, 'M', u'鈸'), + (0x2F9E8, 'M', u'鋗'), + (0x2F9E9, 'M', u'鋘'), + (0x2F9EA, 'M', u'鉼'), + (0x2F9EB, 'M', u'鏹'), + (0x2F9EC, 'M', u'鐕'), + (0x2F9ED, 'M', u'𨯺'), + (0x2F9EE, 'M', u'開'), + (0x2F9EF, 'M', u'䦕'), + (0x2F9F0, 'M', u'閷'), + (0x2F9F1, 'M', u'𨵷'), + (0x2F9F2, 'M', u'䧦'), + (0x2F9F3, 'M', u'雃'), + (0x2F9F4, 'M', u'嶲'), + (0x2F9F5, 'M', u'霣'), + (0x2F9F6, 'M', u'𩅅'), + (0x2F9F7, 'M', u'𩈚'), + (0x2F9F8, 'M', u'䩮'), + (0x2F9F9, 'M', u'䩶'), + (0x2F9FA, 'M', u'韠'), + (0x2F9FB, 'M', u'𩐊'), + (0x2F9FC, 'M', u'䪲'), + (0x2F9FD, 'M', u'𩒖'), + (0x2F9FE, 'M', u'頋'), + (0x2FA00, 'M', u'頩'), + (0x2FA01, 'M', u'𩖶'), + (0x2FA02, 'M', u'飢'), + (0x2FA03, 'M', u'䬳'), + (0x2FA04, 'M', u'餩'), + (0x2FA05, 'M', u'馧'), + (0x2FA06, 'M', u'駂'), + (0x2FA07, 'M', u'駾'), + (0x2FA08, 'M', u'䯎'), + (0x2FA09, 'M', u'𩬰'), + (0x2FA0A, 'M', u'鬒'), + (0x2FA0B, 'M', u'鱀'), + (0x2FA0C, 'M', u'鳽'), + (0x2FA0D, 'M', u'䳎'), + (0x2FA0E, 'M', u'䳭'), + (0x2FA0F, 'M', u'鵧'), + (0x2FA10, 'M', u'𪃎'), + (0x2FA11, 'M', u'䳸'), + (0x2FA12, 'M', u'𪄅'), + (0x2FA13, 'M', u'𪈎'), + (0x2FA14, 'M', u'𪊑'), + (0x2FA15, 'M', u'麻'), + (0x2FA16, 'M', u'䵖'), + (0x2FA17, 'M', u'黹'), + (0x2FA18, 'M', u'黾'), + (0x2FA19, 'M', u'鼅'), + (0x2FA1A, 'M', u'鼏'), + (0x2FA1B, 'M', u'鼖'), + (0x2FA1C, 'M', u'鼻'), + (0x2FA1D, 'M', u'𪘀'), + (0x2FA1E, 'X'), + (0xE0100, 'I'), + ] + +def _seg_78(): + return [ + (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() +) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/ipaddress.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/ipaddress.py new file mode 100644 index 00000000..f2d07668 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/ipaddress.py @@ -0,0 +1,2419 @@ +# 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. + +""" + +from __future__ import unicode_literals + + +import itertools +import struct + +__version__ = '1.0.22' + +# Compatibility functions +_compat_int_types = (int,) +try: + _compat_int_types = (int, long) +except NameError: + pass +try: + _compat_str = unicode +except NameError: + _compat_str = str + assert bytes != str +if b'\0'[0] == 0: # Python 3 semantics + def _compat_bytes_to_byte_vals(byt): + return byt +else: + def _compat_bytes_to_byte_vals(byt): + return [struct.unpack(b'!B', b)[0] for b in byt] +try: + _compat_int_from_byte_vals = int.from_bytes +except AttributeError: + def _compat_int_from_byte_vals(bytvals, endianess): + assert endianess == 'big' + res = 0 + for bv in bytvals: + assert isinstance(bv, _compat_int_types) + res = (res << 8) + bv + return res + + +def _compat_to_bytes(intval, length, endianess): + assert isinstance(intval, _compat_int_types) + assert endianess == 'big' + if length == 4: + if intval < 0 or intval >= 2 ** 32: + raise struct.error("integer out of range for 'I' format code") + return struct.pack(b'!I', intval) + elif length == 16: + if intval < 0 or intval >= 2 ** 128: + raise struct.error("integer out of range for 'QQ' format code") + return struct.pack(b'!QQ', intval >> 64, intval & 0xffffffffffffffff) + else: + raise NotImplementedError() + + +if hasattr(int, 'bit_length'): + # Not int.bit_length , since that won't work in 2.7 where long exists + def _compat_bit_length(i): + return i.bit_length() +else: + def _compat_bit_length(i): + for res in itertools.count(): + if i >> res == 0: + return res + + +def _compat_range(start, end, step=1): + assert step > 0 + i = start + while i < end: + yield i + i += step + + +class _TotalOrderingMixin(object): + __slots__ = () + + # Helper that derives the other comparison operations from + # __lt__ and __eq__ + # We avoid functools.total_ordering because it doesn't handle + # NotImplemented correctly yet (http://bugs.python.org/issue10042) + def __eq__(self, other): + raise NotImplementedError + + def __ne__(self, other): + equal = self.__eq__(other) + if equal is NotImplemented: + return NotImplemented + return not equal + + def __lt__(self, other): + raise NotImplementedError + + def __le__(self, other): + less = self.__lt__(other) + if less is NotImplemented or not less: + return self.__eq__(other) + return less + + def __gt__(self, other): + less = self.__lt__(other) + if less is NotImplemented: + return NotImplemented + equal = self.__eq__(other) + if equal is NotImplemented: + return NotImplemented + return not (less or equal) + + def __ge__(self, other): + less = self.__lt__(other) + if less is NotImplemented: + return NotImplemented + return not less + + +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 + + if isinstance(address, bytes): + raise AddressValueError( + '%r does not appear to be an IPv4 or IPv6 address. ' + 'Did you pass in a bytes (str in Python 2) instead of' + ' a unicode object?' % address) + + raise ValueError('%r does not appear to be an IPv4 or IPv6 address' % + 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 + + if isinstance(address, bytes): + raise AddressValueError( + '%r does not appear to be an IPv4 or IPv6 network. ' + 'Did you pass in a bytes (str in Python 2) instead of' + ' a unicode object?' % address) + + raise ValueError('%r does not appear to be an IPv4 or IPv6 network' % + address) + + +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('%r does not appear to be an IPv4 or IPv6 interface' % + address) + + +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 _compat_to_bytes(address, 4, 'big') + except (struct.error, 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 _compat_to_bytes(address, 16, 'big') + except (struct.error, 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 = _compat_str(address).split('/') + if len(addr) > 2: + raise AddressValueError("Only one '/' permitted in %r" % address) + 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, _compat_bit_length(~number & (number - 1))) + + +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), + _compat_bit_length(last_int - first_int + 1) - 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 iterator 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(_TotalOrderingMixin): + + """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 _compat_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() + + @property + def version(self): + msg = '%200s has no version specified' % (type(self),) + raise NotImplementedError(msg) + + 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. ' + 'Did you pass in a bytes (str in Python 2) instead of' + ' a unicode object?') + 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 = _compat_to_bytes(ip_int, 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) + + @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 _BaseV4._DECIMAL_DIGITS.issuperset(prefixlen_str): + 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) + + def __reduce__(self): + return self.__class__, (_compat_str(self),) + + +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, _IPAddressBase): + return NotImplemented + if not isinstance(other, _BaseAddress): + raise TypeError('%s and %s are not of the same type' % ( + self, other)) + 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, _compat_int_types): + return NotImplemented + return self.__class__(int(self) + other) + + def __sub__(self, other): + if not isinstance(other, _compat_int_types): + return NotImplemented + return self.__class__(int(self) - other) + + def __repr__(self): + return '%s(%r)' % (self.__class__.__name__, _compat_str(self)) + + def __str__(self): + return _compat_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,) + + +class _BaseNetwork(_IPAddressBase): + + """A generic IP network object. + + This IP class contains the version independent methods which are + used by networks. + + """ + def __init__(self, address): + self._cache = {} + + def __repr__(self): + return '%s(%r)' % (self.__class__.__name__, _compat_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 _compat_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 _compat_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, _IPAddressBase): + return NotImplemented + if not isinstance(other, _BaseNetwork): + raise TypeError('%s and %s are not of the same type' % ( + self, other)) + 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 (int(self.network_address) <= int(other._ip) <= + int(self.broadcast_address)) + + 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))) + + @property + def broadcast_address(self): + x = self._cache.get('broadcast_address') + if x is None: + x = self._address_class(int(self.network_address) | + int(self.hostmask)) + self._cache['broadcast_address'] = x + return x + + @property + def hostmask(self): + x = self._cache.get('hostmask') + if x is None: + x = self._address_class(int(self.netmask) ^ self._ALL_ONES) + self._cache['hostmask'] = x + return x + + @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 _compat_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("%s and %s are not of the same version" (a, b)) + return (b.network_address <= a.network_address and + b.broadcast_address >= a.broadcast_address) + except AttributeError: + raise TypeError("Unable to test subnet containment " + "between %s and %s" % (a, 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 address is allocated for private networks. + + Returns: + A boolean, True if the address is reserved per + iana-ipv4-special-registry or iana-ipv6-special-registry. + + """ + return (self.network_address.is_private and + self.broadcast_address.is_private) + + @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 _BaseV4(object): + + """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 + _DECIMAL_DIGITS = frozenset('0123456789') + + # the valid octets for host and netmasks. only useful for IPv4. + _valid_mask_octets = frozenset([255, 254, 252, 248, 240, 224, 192, 128, 0]) + + _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 _compat_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, _compat_int_types): + prefixlen = arg + 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 _compat_int_from_byte_vals( + map(cls._parse_octet, octets), 'big') + except ValueError as exc: + raise AddressValueError("%s in %r" % (exc, ip_str)) + + @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") + # Whitelist the characters, since int() allows a lot of bizarre stuff. + if not cls._DECIMAL_DIGITS.issuperset(octet_str): + 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) + # Convert to integer (we know digits are legal) + octet_int = int(octet_str, 10) + # Any octets that look like they *might* be written in octal, + # and which don't look exactly the same in both octal and + # decimal are rejected as ambiguous + if octet_int > 7 and octet_str[0] == '0': + msg = "Ambiguous (octal/decimal) value in %r not permitted" + raise ValueError(msg % octet_str) + 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(_compat_str(struct.unpack(b'!B', b)[0] + if isinstance(b, bytes) + else b) + for b in _compat_to_bytes(ip_int, 4, 'big')) + + def _is_hostmask(self, ip_str): + """Test if the IP string is a hostmask (rather than a netmask). + + Args: + ip_str: A string, the potential hostmask. + + Returns: + A boolean, True if the IP string is a hostmask. + + """ + bits = ip_str.split('.') + try: + parts = [x for x in map(int, bits) if x in self._valid_mask_octets] + except ValueError: + return False + if len(parts) != len(bits): + return False + if parts[0] < parts[-1]: + return True + return False + + 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 = _compat_str(self).split('.')[::-1] + return '.'.join(reverse_octets) + '.in-addr.arpa' + + @property + def max_prefixlen(self): + return self._max_prefixlen + + @property + def version(self): + return self._version + + +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, _compat_int_types): + self._check_int_address(address) + self._ip = address + return + + # Constructing from a packed address + if isinstance(address, bytes): + self._check_packed_address(address, 4) + bvs = _compat_bytes_to_byte_vals(address) + self._ip = _compat_int_from_byte_vals(bvs, 'big') + return + + # Assume input argument to be string or any object representation + # which converts into a formatted IP string. + addr_str = _compat_str(address) + if '/' in addr_str: + raise AddressValueError("Unexpected '/' in %r" % address) + 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 + def is_private(self): + """Test if this address is allocated for private networks. + + Returns: + A boolean, True if the address is reserved per + iana-ipv4-special-registry. + + """ + return any(self in net for net in self._constants._private_networks) + + @property + def is_global(self): + 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 + + +class IPv4Interface(IPv4Address): + + def __init__(self, address): + if isinstance(address, (bytes, _compat_int_types)): + IPv4Address.__init__(self, address) + self.network = IPv4Network(self._ip) + self._prefixlen = self._max_prefixlen + return + + if isinstance(address, tuple): + IPv4Address.__init__(self, address[0]) + if len(address) > 1: + self._prefixlen = int(address[1]) + else: + self._prefixlen = self._max_prefixlen + + self.network = IPv4Network(address, strict=False) + self.netmask = self.network.netmask + self.hostmask = self.network.hostmask + return + + addr = _split_optional_netmask(address) + IPv4Address.__init__(self, addr[0]) + + self.network = IPv4Network(address, strict=False) + self._prefixlen = self.network._prefixlen + + self.netmask = self.network.netmask + self.hostmask = self.network.hostmask + + def __str__(self): + return '%s/%d' % (self._string_from_ip_int(self._ip), + self.network.prefixlen) + + def __eq__(self, other): + address_equal = IPv4Address.__eq__(self, other) + if not address_equal or address_equal is NotImplemented: + 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 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.0.2/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. + + """ + _BaseNetwork.__init__(self, address) + + # Constructing from a packed address or integer + if isinstance(address, (_compat_int_types, bytes)): + self.network_address = IPv4Address(address) + self.netmask, self._prefixlen = self._make_netmask( + self._max_prefixlen) + # fixme: address/network test here. + return + + if isinstance(address, tuple): + if len(address) > 1: + arg = address[1] + else: + # We weren't given an address[1] + arg = self._max_prefixlen + self.network_address = IPv4Address(address[0]) + self.netmask, self._prefixlen = self._make_netmask(arg) + 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)) + return + + # Assume input argument to be string or any object representation + # which converts into a formatted IP prefix string. + addr = _split_optional_netmask(address) + self.network_address = IPv4Address(self._ip_int_from_string(addr[0])) + + if len(addr) == 2: + arg = addr[1] + else: + arg = self._max_prefixlen + self.netmask, self._prefixlen = self._make_netmask(arg) + + if strict: + if (IPv4Address(int(self.network_address) & int(self.netmask)) != + self.network_address): + raise ValueError('%s has host bits set' % self) + self.network_address = IPv4Address(int(self.network_address) & + int(self.netmask)) + + if self._prefixlen == (self._max_prefixlen - 1): + self.hosts = self.__iter__ + + @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. + + """ + 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(object): + + _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') + + _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/29'), + 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'), + ] + + _reserved_network = IPv4Network('240.0.0.0/4') + + _unspecified_address = IPv4Address('0.0.0.0') + + +IPv4Address._constants = _IPv4Constants + + +class _BaseV6(object): + + """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, _compat_int_types): + prefixlen = arg + 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') + + parts = ip_str.split(':') + + # 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)) + 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. + _max_parts = cls._HEXTET_COUNT + 1 + 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 _compat_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)) + + @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]. + + """ + # Whitelist the characters, since int() allows a lot of bizarre stuff. + 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. + + Args: + ip_str: A string, the IPv6 address. + + Returns: + A string, the expanded IPv6 address. + + """ + if isinstance(self, IPv6Network): + ip_str = _compat_str(self.network_address) + elif isinstance(self, IPv6Interface): + ip_str = _compat_str(self.ip) + else: + ip_str = _compat_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' + + @property + def max_prefixlen(self): + return self._max_prefixlen + + @property + def version(self): + return self._version + + +class IPv6Address(_BaseV6, _BaseAddress): + + """Represent and manipulate single IPv6 Addresses.""" + + __slots__ = ('_ip', '__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, _compat_int_types): + self._check_int_address(address) + self._ip = address + return + + # Constructing from a packed address + if isinstance(address, bytes): + self._check_packed_address(address, 16) + bvs = _compat_bytes_to_byte_vals(address) + self._ip = _compat_int_from_byte_vals(bvs, 'big') + return + + # Assume input argument to be string or any object representation + # which converts into a formatted IP string. + addr_str = _compat_str(address) + if '/' in addr_str: + raise AddressValueError("Unexpected '/' in %r" % address) + self._ip = self._ip_int_from_string(addr_str) + + @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. + + """ + 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. + + """ + 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. + + """ + 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 + def is_private(self): + """Test if this address is allocated for private networks. + + Returns: + A boolean, True if the address is reserved per + iana-ipv6-special-registry. + + """ + return any(self in net for net in self._constants._private_networks) + + @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-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._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. + + """ + 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): + if isinstance(address, (bytes, _compat_int_types)): + IPv6Address.__init__(self, address) + self.network = IPv6Network(self._ip) + self._prefixlen = self._max_prefixlen + return + if isinstance(address, tuple): + IPv6Address.__init__(self, address[0]) + if len(address) > 1: + self._prefixlen = int(address[1]) + else: + self._prefixlen = self._max_prefixlen + self.network = IPv6Network(address, strict=False) + self.netmask = self.network.netmask + self.hostmask = self.network.hostmask + return + + addr = _split_optional_netmask(address) + IPv6Address.__init__(self, addr[0]) + self.network = IPv6Network(address, strict=False) + self.netmask = self.network.netmask + self._prefixlen = self.network._prefixlen + self.hostmask = self.network.hostmask + + def __str__(self): + return '%s/%d' % (self._string_from_ip_int(self._ip), + self.network.prefixlen) + + def __eq__(self, other): + address_equal = IPv6Address.__eq__(self, other) + if not address_equal or address_equal is NotImplemented: + 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 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 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 self._ip == 1 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. + + """ + _BaseNetwork.__init__(self, address) + + # Efficient constructor from integer or packed address + if isinstance(address, (bytes, _compat_int_types)): + self.network_address = IPv6Address(address) + self.netmask, self._prefixlen = self._make_netmask( + self._max_prefixlen) + return + + if isinstance(address, tuple): + if len(address) > 1: + arg = address[1] + else: + arg = self._max_prefixlen + self.netmask, self._prefixlen = self._make_netmask(arg) + self.network_address = IPv6Address(address[0]) + 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)) + return + + # Assume input argument to be string or any object representation + # which converts into a formatted IP prefix string. + addr = _split_optional_netmask(address) + + self.network_address = IPv6Address(self._ip_int_from_string(addr[0])) + + if len(addr) == 2: + arg = addr[1] + else: + arg = self._max_prefixlen + self.netmask, self._prefixlen = self._make_netmask(arg) + + if strict: + if (IPv6Address(int(self.network_address) & int(self.netmask)) != + self.network_address): + raise ValueError('%s has host bits set' % self) + self.network_address = IPv6Address(int(self.network_address) & + int(self.netmask)) + + if self._prefixlen == (self._max_prefixlen - 1): + self.hosts = self.__iter__ + + 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 _compat_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(object): + + _linklocal_network = IPv6Network('fe80::/10') + + _multicast_network = IPv6Network('ff00::/8') + + _private_networks = [ + IPv6Network('::1/128'), + IPv6Network('::/128'), + IPv6Network('::ffff:0:0/96'), + IPv6Network('100::/64'), + IPv6Network('2001::/23'), + IPv6Network('2001:2::/48'), + IPv6Network('2001:db8::/32'), + IPv6Network('2001:10::/28'), + IPv6Network('fc00::/7'), + IPv6Network('fe80::/10'), + ] + + _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 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/lockfile/__init__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/lockfile/__init__.py new file mode 100644 index 00000000..a6f44a55 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/lockfile/__init__.py @@ -0,0 +1,347 @@ +# -*- coding: utf-8 -*- + +""" +lockfile.py - Platform-independent advisory file locks. + +Requires Python 2.5 unless you apply 2.4.diff +Locking is done on a per-thread basis instead of a per-process basis. + +Usage: + +>>> lock = LockFile('somefile') +>>> try: +... lock.acquire() +... except AlreadyLocked: +... print 'somefile', 'is locked already.' +... except LockFailed: +... print 'somefile', 'can\\'t be locked.' +... else: +... print 'got lock' +got lock +>>> print lock.is_locked() +True +>>> lock.release() + +>>> lock = LockFile('somefile') +>>> print lock.is_locked() +False +>>> with lock: +... print lock.is_locked() +True +>>> print lock.is_locked() +False + +>>> lock = LockFile('somefile') +>>> # It is okay to lock twice from the same thread... +>>> with lock: +... lock.acquire() +... +>>> # Though no counter is kept, so you can't unlock multiple times... +>>> print lock.is_locked() +False + +Exceptions: + + Error - base class for other exceptions + LockError - base class for all locking exceptions + AlreadyLocked - Another thread or process already holds the lock + LockFailed - Lock failed for some other reason + UnlockError - base class for all unlocking exceptions + AlreadyUnlocked - File was not locked. + NotMyLock - File was locked but not by the current thread/process +""" + +from __future__ import absolute_import + +import functools +import os +import socket +import threading +import warnings + +# Work with PEP8 and non-PEP8 versions of threading module. +if not hasattr(threading, "current_thread"): + threading.current_thread = threading.currentThread +if not hasattr(threading.Thread, "get_name"): + threading.Thread.get_name = threading.Thread.getName + +__all__ = ['Error', 'LockError', 'LockTimeout', 'AlreadyLocked', + 'LockFailed', 'UnlockError', 'NotLocked', 'NotMyLock', + 'LinkFileLock', 'MkdirFileLock', 'SQLiteFileLock', + 'LockBase', 'locked'] + + +class Error(Exception): + """ + Base class for other exceptions. + + >>> try: + ... raise Error + ... except Exception: + ... pass + """ + pass + + +class LockError(Error): + """ + Base class for error arising from attempts to acquire the lock. + + >>> try: + ... raise LockError + ... except Error: + ... pass + """ + pass + + +class LockTimeout(LockError): + """Raised when lock creation fails within a user-defined period of time. + + >>> try: + ... raise LockTimeout + ... except LockError: + ... pass + """ + pass + + +class AlreadyLocked(LockError): + """Some other thread/process is locking the file. + + >>> try: + ... raise AlreadyLocked + ... except LockError: + ... pass + """ + pass + + +class LockFailed(LockError): + """Lock file creation failed for some other reason. + + >>> try: + ... raise LockFailed + ... except LockError: + ... pass + """ + pass + + +class UnlockError(Error): + """ + Base class for errors arising from attempts to release the lock. + + >>> try: + ... raise UnlockError + ... except Error: + ... pass + """ + pass + + +class NotLocked(UnlockError): + """Raised when an attempt is made to unlock an unlocked file. + + >>> try: + ... raise NotLocked + ... except UnlockError: + ... pass + """ + pass + + +class NotMyLock(UnlockError): + """Raised when an attempt is made to unlock a file someone else locked. + + >>> try: + ... raise NotMyLock + ... except UnlockError: + ... pass + """ + pass + + +class _SharedBase(object): + def __init__(self, path): + self.path = path + + def acquire(self, timeout=None): + """ + Acquire the lock. + + * If timeout is omitted (or None), wait forever trying to lock the + file. + + * If timeout > 0, try to acquire the lock for that many seconds. If + the lock period expires and the file is still locked, raise + LockTimeout. + + * If timeout <= 0, raise AlreadyLocked immediately if the file is + already locked. + """ + raise NotImplemented("implement in subclass") + + def release(self): + """ + Release the lock. + + If the file is not locked, raise NotLocked. + """ + raise NotImplemented("implement in subclass") + + def __enter__(self): + """ + Context manager support. + """ + self.acquire() + return self + + def __exit__(self, *_exc): + """ + Context manager support. + """ + self.release() + + def __repr__(self): + return "<%s: %r>" % (self.__class__.__name__, self.path) + + +class LockBase(_SharedBase): + """Base class for platform-specific lock classes.""" + def __init__(self, path, threaded=True, timeout=None): + """ + >>> lock = LockBase('somefile') + >>> lock = LockBase('somefile', threaded=False) + """ + super(LockBase, self).__init__(path) + self.lock_file = os.path.abspath(path) + ".lock" + self.hostname = socket.gethostname() + self.pid = os.getpid() + if threaded: + t = threading.current_thread() + # Thread objects in Python 2.4 and earlier do not have ident + # attrs. Worm around that. + ident = getattr(t, "ident", hash(t)) + self.tname = "-%x" % (ident & 0xffffffff) + else: + self.tname = "" + dirname = os.path.dirname(self.lock_file) + + # unique name is mostly about the current process, but must + # also contain the path -- otherwise, two adjacent locked + # files conflict (one file gets locked, creating lock-file and + # unique file, the other one gets locked, creating lock-file + # and overwriting the already existing lock-file, then one + # gets unlocked, deleting both lock-file and unique file, + # finally the last lock errors out upon releasing. + self.unique_name = os.path.join(dirname, + "%s%s.%s%s" % (self.hostname, + self.tname, + self.pid, + hash(self.path))) + self.timeout = timeout + + def is_locked(self): + """ + Tell whether or not the file is locked. + """ + raise NotImplemented("implement in subclass") + + def i_am_locking(self): + """ + Return True if this object is locking the file. + """ + raise NotImplemented("implement in subclass") + + def break_lock(self): + """ + Remove a lock. Useful if a locking thread failed to unlock. + """ + raise NotImplemented("implement in subclass") + + def __repr__(self): + return "<%s: %r -- %r>" % (self.__class__.__name__, self.unique_name, + self.path) + + +def _fl_helper(cls, mod, *args, **kwds): + warnings.warn("Import from %s module instead of lockfile package" % mod, + DeprecationWarning, stacklevel=2) + # This is a bit funky, but it's only for awhile. The way the unit tests + # are constructed this function winds up as an unbound method, so it + # actually takes three args, not two. We want to toss out self. + if not isinstance(args[0], str): + # We are testing, avoid the first arg + args = args[1:] + if len(args) == 1 and not kwds: + kwds["threaded"] = True + return cls(*args, **kwds) + + +def LinkFileLock(*args, **kwds): + """Factory function provided for backwards compatibility. + + Do not use in new code. Instead, import LinkLockFile from the + lockfile.linklockfile module. + """ + from . import linklockfile + return _fl_helper(linklockfile.LinkLockFile, "lockfile.linklockfile", + *args, **kwds) + + +def MkdirFileLock(*args, **kwds): + """Factory function provided for backwards compatibility. + + Do not use in new code. Instead, import MkdirLockFile from the + lockfile.mkdirlockfile module. + """ + from . import mkdirlockfile + return _fl_helper(mkdirlockfile.MkdirLockFile, "lockfile.mkdirlockfile", + *args, **kwds) + + +def SQLiteFileLock(*args, **kwds): + """Factory function provided for backwards compatibility. + + Do not use in new code. Instead, import SQLiteLockFile from the + lockfile.mkdirlockfile module. + """ + from . import sqlitelockfile + return _fl_helper(sqlitelockfile.SQLiteLockFile, "lockfile.sqlitelockfile", + *args, **kwds) + + +def locked(path, timeout=None): + """Decorator which enables locks for decorated function. + + Arguments: + - path: path for lockfile. + - timeout (optional): Timeout for acquiring lock. + + Usage: + @locked('/var/run/myname', timeout=0) + def myname(...): + ... + """ + def decor(func): + @functools.wraps(func) + def wrapper(*args, **kwargs): + lock = FileLock(path, timeout=timeout) + lock.acquire() + try: + return func(*args, **kwargs) + finally: + lock.release() + return wrapper + return decor + + +if hasattr(os, "link"): + from . import linklockfile as _llf + LockFile = _llf.LinkLockFile +else: + from . import mkdirlockfile as _mlf + LockFile = _mlf.MkdirLockFile + +FileLock = LockFile diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/lockfile/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/lockfile/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4f5bfd5189521f2f1456a1b6ddedefcfbac63285 GIT binary patch literal 9860 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 J4w$N9{Q(Foii!XL literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/lockfile/__pycache__/linklockfile.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/lockfile/__pycache__/linklockfile.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9c86f7cc55db0627c0f7fc9b03b87932249d977d GIT binary patch literal 2239 zcma)7Uyl?;5by5!yK{TX0h^OQYDR>EP2lc=MiL_jqC!k?F*y@pf|<;2_rc80?Cf>- z2)8+2Ts{B~zG&hHFfl&(=2w|leYsa2eX^=&fje><C+X_yuBxu;s$bW9u(%jJ_-*yu z2LT~}l6{{I{B;=WYapC(nv;S?lp@b^7BMqhk;N@;=XT*lPT@vw;YD8IM}E<YT15~A zl-wfR;qEiSUE$2EXo0g$()0G<RMMmMkz}CCywW00i%BVUe~+TTt^M2OaC9S4q7IO| znWVYkb*o=$T+Z3Ac5qQIApIsSL|N&2@zY$2gd2(AL-h0Vvw*n{LwyWHkce^u_n>fx zMZCo`8re;(k;6UiKO>RLTRec-;|shEvu~pB)a~2pcx2*&u%<sF7be4@P%6}An1oxf z9abtGKMWIH7U?jY$Z{g2-U-XCFbCrcmwT&05W=^yu@UBYz}0a7sTa<xvJiOC`QHE3 zyBO+6cz40C-b`{O8oU0G!FBP&njVMo84Ps>61~&aWS3-=(;3Uyj8JlyjL+CaTcbdJ zL}5*dwmCzcWiq4R)B9x1?vY){+^8i#-=$+4WX@Bn-OQblr))0CV75lK%ywbt3hY1m z9ejD2k0-%s&6x4^1NaI?!E-9Rb8lX@fI2gpwVztMP?ZsrzjCtq(&vlD(=LP4U%-ir zjW$I&di+awxC47fns~<@y~N$uYp_1r#0WkE;Jnl1Ii0k*KLc#vC)@cwK=>xicg@^u z^=tNcFg?Cy0EpEcLW;Er&nbye-NWQgSLWyoA1A5Csv`=9+f^z>Q`@alg2l9ZPKBuo zlLn$jB={b@J@W9UAMyL+TJKnG160QKLN!jeD-n;ALe$PMFX1hCU*7pb%2G-POlnWh zF>fPNvr^SIVykW;o?^sK?cLcl7PYN(qHAC2cx-gs%FNQolk7<X&}kv-s9cCi&jtgL zZ^>i0=Zi6qjStrtsb7c;LGbtWHC;^BCh6qTph|OoX?^?Apj^Mqam$SOJ1{Nf8U}>% ztfB9hi`B_a?akA46pmBtKnP{DOFOj7j!~a3QJ=vFJ4>uXeap7Gv<>?<Ycrb$^sF`Q z?te9_^W%nC8~kv_cW*F{y$rBGW<;IPfO_EB94BvUD`S~K^NgwwwQEp6mx9a#T?a8T z=M7#EDLtz{U24iYF7>>m)6>lk-c<05;h@qXN(Vb(A$qO4m8!UrNf%<0r;&7l)UJ4v zDy`%Z-0_f{Lb42`N98-nhp)(cz}21<xqwD_1s19egqXZ_Act-GMt0_^2eN|zHreR_ zqv7pk_};A<g}c#y&o*&25uOE&{|H6C5Atg;l<7Ehx_qECukL)f`wL*$6sKI#5JYCd z%AQfP!Y2)U=5jj19|-G9ylT%gKHm({B<}>s<w;aJJa6qZP6|^6c(6A>PhlxAc^x`E zc`)*QnuiDfE?Dl*oje6AL=)r@|CvoLoi_u;vYG<_ON_w)n$5@rc?(n(c5s66y>%eI z*IHPyR_({8Ys7IK#BovbDi^@F<9NGDa_lFt^5U46!#I{_FottTuzYd_$$2E<L4shD z*s5?Cp!tr?f)(HQE#EPcUK<^5Rl1VkLLv$z{%{&-6N%xQ*43ciz#IFI={)9y!<^Rs TC(Ru;@G&biXfq!gLumg4ruz-I literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/lockfile/__pycache__/mkdirlockfile.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/lockfile/__pycache__/mkdirlockfile.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a7c102c3d60b48f7fcd8fb829e651fb28bd4e6ac GIT binary patch literal 2601 zcmb7FOOF#r5bo}IcszcrSr%9xhY`v`oWL$xqT~`bkN^=8I7qt^WE3>A-D7s_dDz`! z*tNWum|u`v_y@V<9x3Pi0#1F3loQt+b4pc@%|5i3%&4oYr@E(JUsd0()!ZL{TYs@y zCFE~%<S~K23qx`soNyYGg!(jLKBKs1vEdtfHhojimT&3V_HAx(GcF~L?<8fvoVdQ5 zRQyU(^{YwEuTk<X;TE^w5N?Og%<$`+ZIfo{J!m3Lrk2_rnZ@Hg45DP1iCj56dKJki zOIz<LZn2f~IO`6+Zp%=)$USUFamZD<mF2jcvrqPMp(;psq9n}5xvJfZMcC$A67nu; zTs#IacVWo;KtkeEPJG5Gc-i14x86|j^9;9n2{?;8y!?iMr!KF+T;f$;gW2JAz65ib z8{pBhsy!L-NN5wm!pT+SydJP#XW#3BC3%#-^x7V53cGnG_Sbh>T?{=wINLD3fgwK! zl9N82k|~|CsWCGt$ywj%n^V%aIDGHhFiJ3-o^hVc*pvii9av)`U2pzuZEblm8ga)v zX4=QsWtN0!+4biC*?hyxcQK$Lzw@vi%kc2<q_ig2*W{XPHC<tW^~wo?D2?(UP%M+m z9JcdaW%jcuRb@0OK<&!e&19aolTca3WDFy&D&sU7jl%#1O;edNjC-Q4f4b1GN_mmv zUx`=+$-nnD@?^L%jD|Nm<0$4gZ;f_4*{w~EpY#Y`g(=U(1}aD08wn<Bv05MQ3n&VL zTBHkvSPjFaHZ|$w{IS@rFZ}8<+y)Q2TY;f7*8t2;0ZfCks7`5$`6352r+qpj2W&3c zgqaRZu?e}QUo5^m;x1<gMq1ASh_J)B40$~;_Wsy!<nzqWC?(HG`m;%Ld*F(HD8V-` z^_>~v=0$Q~PR)KfFZbO66Mw;}O1}yg)Miw?<z#zd*}KA?DFYkc&29NJuX79bRsc=( zCkj?9am3hs4JR6aL(mVBGaQj;6+3?*qo>bFzKnXfGh_X;Gq4G@jh;T!bF<tMSjsQo z{({f%U%kf&3q<_n+Pqf1*X>A`N1l1@?r01pQb4zt32#kKR@S5!Nv~ZLv=)VYa<->? zfd_|leTA@9vDcmEinsuOS0<uF8A*Fj)NpO-q>BdfrSG>N2$2b8$bG4taIXu1?Pbae zg-A1HKX~x`(e_S(J3HKqWG=-D928|F=z+3i9EL-IWvk3=7^ceV#u?OwCC=d{ZG!{2 z3$z_3`lt-}zs77qF5=<R+~v!#kefgVU8W9gP=`6xW_89WgH@eYX%$u`T>+`ds)k8j zS~XT!gHFyJhw1!}T?{-vIAhb(D18bH<crLRT+IQCz_WSYuK;RT(Pw5<ewN!Dddorz zGM#zE0q_n;%E)83n?`HWD6*7h`65G?i!WGbA-~~u#<_=5XoyhTt|~_|C}g4pHtA^V zREdvpspIVcr|fYWN9jOWB7w5i8En!b%2@wLV=2Nogv;U{e3n?#L`Sl&qjxe&^S#HS zgmtZ>gv|iEa33Q8*ashJt7#VYp|CI#(R8{k;s%Hw!H~LF(8-14Ir`xI>H5#ZNze>g z%2uHMp#Q_lT-aghzn?S)BX+tmsu~6DL`NI0p~q;IzIz}#lS?P;I<oPDY3KsBIvtwt zfH@i(@o?`GSYx|`K;0)VE<w|S7NPfG8!@JI#t<r_E6?yG!brCh4IK!pbJCNdNMoow zO!!SuD3*|{18FjydS&7jak7})4%|@#?I_}0B7O*Df0<sQlhxy%9&T;2off9o#hVL% z3pbY=1WCrnG4j<Q7>(QUTv7@Go^^vjUmD_5P#`vtV8X>MB)5?qLQ`{C>jJL|gr!6T zK^0TC=3a9g$8bz7Yc8SQ-Z&o%&?_+P0t;7ML4s{ecu1}SQAA(1x&svjgw7szDE-6J WtWeIEg=bsX7j&64pw;M?dFFrM;$Qp# literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/lockfile/__pycache__/pidlockfile.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/lockfile/__pycache__/pidlockfile.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..77adfe7898b791c4eb2ba9d7a60a752524d5e2b3 GIT binary patch literal 4801 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 H-i7}FC}F+? literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/lockfile/__pycache__/sqlitelockfile.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/lockfile/__pycache__/sqlitelockfile.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..24471fb3d91ee78429c2ada1d5b452fcec0a2532 GIT binary patch literal 3700 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 J^Nnwt{{x<MbEW_Q literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/lockfile/__pycache__/symlinklockfile.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/lockfile/__pycache__/symlinklockfile.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c0c371d81b8eedb52702cf7d2b7997dd607117ce GIT binary patch literal 2124 zcmah~O>-MH7?!l3UOOKRp>5hwc3KME8Jctg100|PTHsR5A(<)c!0g!8rdfMG97zkr z<6dxn0K*Lqy>sEfjTwFcKVh$&@)tPqzS<2*UC$toq<8g7uO2<`hu>OS^1l9U>znsH zLjEQfnhEkQbomGdPB=|TMng(bW+@Aqo{iAp1~*ePvqCGgLpyUqCv!tLYlSUJJ|o=X z_6gy3Y|V_&<7|%v&M8<V0j*YgeOaWXilZbO7eaMUDJrbWeN+raANOQjwYr7EkC<!m z^JDy|+BohfSzMH=TKXszagS?F%m--utQjEeLYEI=h)GB}0o)WYuX2-HCp0wqC2n&E zB#XPebwWa$d%O*^!#jKlW|uGX6_{Jx0PJhk%HDC7Ciw^<e43>3<PDVk-e3?*>8rx; z`3JD<momwp__E%7XD8U&?+%btY&cucA3&FPU{GX8r({Z}Y--F*N)#I!Lvu=o){Jtx zL8c_KIDz|FSKy-pTcC}~jiMw^R1{ULkd-;^sl&>W<1|rKyUdfLGLG_I76)c!$~Zj` z9eqe0B4I$OqiPO+C1MRU|2)`M*?4=LjPLf#B;|MS9Ub<IdpjJLbdSD`b6$w;6rPN) z+-}}?_PsSe77$2e3A)s;Wvgs*b&j&FGt>hH`>^4g+R!y2e}OOsSB+YtGo?AwK%P=X zhjd1svPQE5GaZ>?2PmWO!ut0=9j_y8u)8LXQSzAN$|TAjdE!q>@CRCFMg&JP8%xh> z%Tor{o;6l~R4!+*w{@A!=nphsRvt&o%{QEAH>ZDx*}P72#=%vTd_|7l{t{AT59Y^u z4(zVLu%5i$1g!sEFHsm97%PLLG7+(l{P_ok@Ndh>`fcea((lz#tyM8UMOL5u@-wzS zJ`6hI5`0%C`cEKnmD6}aEaO)T4Mymp%K2jN6Cnywb&{x;MW}$wg#+7kI0zRHSTc>{ zabSoQT-U~3aCM|Fz}V0MB3{D1PJ<dh<ZCbxdyTqumAVWXU8l>;Wu~zXYbNV3lX}!Q zCRgTzps_MQa<JiyaiC-1J_x`!nGtzafu})cjV~^PY{2@KGPRGIb!820&^YJ?ohn9m zvRYG_7pkFga=l(b7GnOU-!GMq+WxT*S>jf$L~4d&E-*i9f;LdHanMZLWsdnTuE0t_ zYr^Ik5^)+s`FaPoNc0@3`Jv17MIM^H&+&kHp?N@WVsRK^G#WDsC4hDVQzNOf*-qsD zz!9&2kq@9too;lpG4G21UcDHEKL?_?0gy1s01%AU2&+24vd>`&JfkV9Tr4&kB0gp@ zV*)weg<cm8<Z1H-kQc&tG0q!c;38S#+Bwc9C;+9k2&KTYi?LN+A6_uhaq;juh}Y&J zo^K4;eite6utZ}Ch7#>XQC9FWMY$72M`bT<G)@%pVh}~Tc8X27M7)XvI!;p~ZlZJ^ zWm>}g6D=4p!X%Q53Fq0~E!S}k*VMY8jrSgusuXaqzzC?{|1wAw(SIX#tm_EZWdSRK ZKD_A0%6-3n#eGaziF-TDh1}mX{{?Mc;LHF3 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/lockfile/linklockfile.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/lockfile/linklockfile.py new file mode 100644 index 00000000..2ca9be04 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/lockfile/linklockfile.py @@ -0,0 +1,73 @@ +from __future__ import absolute_import + +import time +import os + +from . import (LockBase, LockFailed, NotLocked, NotMyLock, LockTimeout, + AlreadyLocked) + + +class LinkLockFile(LockBase): + """Lock access to a file using atomic property of link(2). + + >>> lock = LinkLockFile('somefile') + >>> lock = LinkLockFile('somefile', threaded=False) + """ + + def acquire(self, timeout=None): + try: + open(self.unique_name, "wb").close() + except IOError: + raise LockFailed("failed to create %s" % self.unique_name) + + timeout = timeout if timeout is not None else self.timeout + end_time = time.time() + if timeout is not None and timeout > 0: + end_time += timeout + + while True: + # Try and create a hard link to it. + try: + os.link(self.unique_name, self.lock_file) + except OSError: + # Link creation failed. Maybe we've double-locked? + nlinks = os.stat(self.unique_name).st_nlink + if nlinks == 2: + # The original link plus the one I created == 2. We're + # good to go. + return + else: + # Otherwise the lock creation failed. + if timeout is not None and time.time() > end_time: + os.unlink(self.unique_name) + if timeout > 0: + raise LockTimeout("Timeout waiting to acquire" + " lock for %s" % + self.path) + else: + raise AlreadyLocked("%s is already locked" % + self.path) + time.sleep(timeout is not None and timeout / 10 or 0.1) + else: + # Link creation succeeded. We're good to go. + return + + def release(self): + if not self.is_locked(): + raise NotLocked("%s is not locked" % self.path) + elif not os.path.exists(self.unique_name): + raise NotMyLock("%s is locked, but not by me" % self.path) + os.unlink(self.unique_name) + os.unlink(self.lock_file) + + def is_locked(self): + return os.path.exists(self.lock_file) + + def i_am_locking(self): + return (self.is_locked() and + os.path.exists(self.unique_name) and + os.stat(self.unique_name).st_nlink == 2) + + def break_lock(self): + if os.path.exists(self.lock_file): + os.unlink(self.lock_file) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/lockfile/mkdirlockfile.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/lockfile/mkdirlockfile.py new file mode 100644 index 00000000..05a8c96c --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/lockfile/mkdirlockfile.py @@ -0,0 +1,84 @@ +from __future__ import absolute_import, division + +import time +import os +import sys +import errno + +from . import (LockBase, LockFailed, NotLocked, NotMyLock, LockTimeout, + AlreadyLocked) + + +class MkdirLockFile(LockBase): + """Lock file by creating a directory.""" + def __init__(self, path, threaded=True, timeout=None): + """ + >>> lock = MkdirLockFile('somefile') + >>> lock = MkdirLockFile('somefile', threaded=False) + """ + LockBase.__init__(self, path, threaded, timeout) + # Lock file itself is a directory. Place the unique file name into + # it. + self.unique_name = os.path.join(self.lock_file, + "%s.%s%s" % (self.hostname, + self.tname, + self.pid)) + + def acquire(self, timeout=None): + timeout = timeout if timeout is not None else self.timeout + end_time = time.time() + if timeout is not None and timeout > 0: + end_time += timeout + + if timeout is None: + wait = 0.1 + else: + wait = max(0, timeout / 10) + + while True: + try: + os.mkdir(self.lock_file) + except OSError: + err = sys.exc_info()[1] + if err.errno == errno.EEXIST: + # Already locked. + if os.path.exists(self.unique_name): + # Already locked by me. + return + if timeout is not None and time.time() > end_time: + if timeout > 0: + raise LockTimeout("Timeout waiting to acquire" + " lock for %s" % + self.path) + else: + # Someone else has the lock. + raise AlreadyLocked("%s is already locked" % + self.path) + time.sleep(wait) + else: + # Couldn't create the lock for some other reason + raise LockFailed("failed to create %s" % self.lock_file) + else: + open(self.unique_name, "wb").close() + return + + def release(self): + if not self.is_locked(): + raise NotLocked("%s is not locked" % self.path) + elif not os.path.exists(self.unique_name): + raise NotMyLock("%s is locked, but not by me" % self.path) + os.unlink(self.unique_name) + os.rmdir(self.lock_file) + + def is_locked(self): + return os.path.exists(self.lock_file) + + def i_am_locking(self): + return (self.is_locked() and + os.path.exists(self.unique_name)) + + def break_lock(self): + if os.path.exists(self.lock_file): + for name in os.listdir(self.lock_file): + os.unlink(os.path.join(self.lock_file, name)) + os.rmdir(self.lock_file) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/lockfile/pidlockfile.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/lockfile/pidlockfile.py new file mode 100644 index 00000000..069e85b1 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/lockfile/pidlockfile.py @@ -0,0 +1,190 @@ +# -*- coding: utf-8 -*- + +# pidlockfile.py +# +# Copyright © 2008–2009 Ben Finney <ben+python@benfinney.id.au> +# +# This is free software: you may copy, modify, and/or distribute this work +# under the terms of the Python Software Foundation License, version 2 or +# later as published by the Python Software Foundation. +# No warranty expressed or implied. See the file LICENSE.PSF-2 for details. + +""" Lockfile behaviour implemented via Unix PID files. + """ + +from __future__ import absolute_import + +import errno +import os +import time + +from . import (LockBase, AlreadyLocked, LockFailed, NotLocked, NotMyLock, + LockTimeout) + + +class PIDLockFile(LockBase): + """ Lockfile implemented as a Unix PID file. + + The lock file is a normal file named by the attribute `path`. + A lock's PID file contains a single line of text, containing + the process ID (PID) of the process that acquired the lock. + + >>> lock = PIDLockFile('somefile') + >>> lock = PIDLockFile('somefile') + """ + + def __init__(self, path, threaded=False, timeout=None): + # pid lockfiles don't support threaded operation, so always force + # False as the threaded arg. + LockBase.__init__(self, path, False, timeout) + self.unique_name = self.path + + def read_pid(self): + """ Get the PID from the lock file. + """ + return read_pid_from_pidfile(self.path) + + def is_locked(self): + """ Test if the lock is currently held. + + The lock is held if the PID file for this lock exists. + + """ + return os.path.exists(self.path) + + def i_am_locking(self): + """ Test if the lock is held by the current process. + + Returns ``True`` if the current process ID matches the + number stored in the PID file. + """ + return self.is_locked() and os.getpid() == self.read_pid() + + def acquire(self, timeout=None): + """ Acquire the lock. + + Creates the PID file for this lock, or raises an error if + the lock could not be acquired. + """ + + timeout = timeout if timeout is not None else self.timeout + end_time = time.time() + if timeout is not None and timeout > 0: + end_time += timeout + + while True: + try: + write_pid_to_pidfile(self.path) + except OSError as exc: + if exc.errno == errno.EEXIST: + # The lock creation failed. Maybe sleep a bit. + if time.time() > end_time: + if timeout is not None and timeout > 0: + raise LockTimeout("Timeout waiting to acquire" + " lock for %s" % + self.path) + else: + raise AlreadyLocked("%s is already locked" % + self.path) + time.sleep(timeout is not None and timeout / 10 or 0.1) + else: + raise LockFailed("failed to create %s" % self.path) + else: + return + + def release(self): + """ Release the lock. + + Removes the PID file to release the lock, or raises an + error if the current process does not hold the lock. + + """ + if not self.is_locked(): + raise NotLocked("%s is not locked" % self.path) + if not self.i_am_locking(): + raise NotMyLock("%s is locked, but not by me" % self.path) + remove_existing_pidfile(self.path) + + def break_lock(self): + """ Break an existing lock. + + Removes the PID file if it already exists, otherwise does + nothing. + + """ + remove_existing_pidfile(self.path) + + +def read_pid_from_pidfile(pidfile_path): + """ Read the PID recorded in the named PID file. + + Read and return the numeric PID recorded as text in the named + PID file. If the PID file cannot be read, or if the content is + not a valid PID, return ``None``. + + """ + pid = None + try: + pidfile = open(pidfile_path, 'r') + except IOError: + pass + else: + # According to the FHS 2.3 section on PID files in /var/run: + # + # The file must consist of the process identifier in + # ASCII-encoded decimal, followed by a newline character. + # + # Programs that read PID files should be somewhat flexible + # in what they accept; i.e., they should ignore extra + # whitespace, leading zeroes, absence of the trailing + # newline, or additional lines in the PID file. + + line = pidfile.readline().strip() + try: + pid = int(line) + except ValueError: + pass + pidfile.close() + + return pid + + +def write_pid_to_pidfile(pidfile_path): + """ Write the PID in the named PID file. + + Get the numeric process ID (“PID”) of the current process + and write it to the named file as a line of text. + + """ + open_flags = (os.O_CREAT | os.O_EXCL | os.O_WRONLY) + open_mode = 0o644 + pidfile_fd = os.open(pidfile_path, open_flags, open_mode) + pidfile = os.fdopen(pidfile_fd, 'w') + + # According to the FHS 2.3 section on PID files in /var/run: + # + # The file must consist of the process identifier in + # ASCII-encoded decimal, followed by a newline character. For + # example, if crond was process number 25, /var/run/crond.pid + # would contain three characters: two, five, and newline. + + pid = os.getpid() + pidfile.write("%s\n" % pid) + pidfile.close() + + +def remove_existing_pidfile(pidfile_path): + """ Remove the named PID file if it exists. + + Removing a PID file that doesn't already exist puts us in the + desired state, so we ignore the condition if the file does not + exist. + + """ + try: + os.remove(pidfile_path) + except OSError as exc: + if exc.errno == errno.ENOENT: + pass + else: + raise diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/lockfile/sqlitelockfile.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/lockfile/sqlitelockfile.py new file mode 100644 index 00000000..f997e244 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/lockfile/sqlitelockfile.py @@ -0,0 +1,156 @@ +from __future__ import absolute_import, division + +import time +import os + +try: + unicode +except NameError: + unicode = str + +from . import LockBase, NotLocked, NotMyLock, LockTimeout, AlreadyLocked + + +class SQLiteLockFile(LockBase): + "Demonstrate SQL-based locking." + + testdb = None + + def __init__(self, path, threaded=True, timeout=None): + """ + >>> lock = SQLiteLockFile('somefile') + >>> lock = SQLiteLockFile('somefile', threaded=False) + """ + LockBase.__init__(self, path, threaded, timeout) + self.lock_file = unicode(self.lock_file) + self.unique_name = unicode(self.unique_name) + + if SQLiteLockFile.testdb is None: + import tempfile + _fd, testdb = tempfile.mkstemp() + os.close(_fd) + os.unlink(testdb) + del _fd, tempfile + SQLiteLockFile.testdb = testdb + + import sqlite3 + self.connection = sqlite3.connect(SQLiteLockFile.testdb) + + c = self.connection.cursor() + try: + c.execute("create table locks" + "(" + " lock_file varchar(32)," + " unique_name varchar(32)" + ")") + except sqlite3.OperationalError: + pass + else: + self.connection.commit() + import atexit + atexit.register(os.unlink, SQLiteLockFile.testdb) + + def acquire(self, timeout=None): + timeout = timeout if timeout is not None else self.timeout + end_time = time.time() + if timeout is not None and timeout > 0: + end_time += timeout + + if timeout is None: + wait = 0.1 + elif timeout <= 0: + wait = 0 + else: + wait = timeout / 10 + + cursor = self.connection.cursor() + + while True: + if not self.is_locked(): + # Not locked. Try to lock it. + cursor.execute("insert into locks" + " (lock_file, unique_name)" + " values" + " (?, ?)", + (self.lock_file, self.unique_name)) + self.connection.commit() + + # Check to see if we are the only lock holder. + cursor.execute("select * from locks" + " where unique_name = ?", + (self.unique_name,)) + rows = cursor.fetchall() + if len(rows) > 1: + # Nope. Someone else got there. Remove our lock. + cursor.execute("delete from locks" + " where unique_name = ?", + (self.unique_name,)) + self.connection.commit() + else: + # Yup. We're done, so go home. + return + else: + # Check to see if we are the only lock holder. + cursor.execute("select * from locks" + " where unique_name = ?", + (self.unique_name,)) + rows = cursor.fetchall() + if len(rows) == 1: + # We're the locker, so go home. + return + + # Maybe we should wait a bit longer. + if timeout is not None and time.time() > end_time: + if timeout > 0: + # No more waiting. + raise LockTimeout("Timeout waiting to acquire" + " lock for %s" % + self.path) + else: + # Someone else has the lock and we are impatient.. + raise AlreadyLocked("%s is already locked" % self.path) + + # Well, okay. We'll give it a bit longer. + time.sleep(wait) + + def release(self): + if not self.is_locked(): + raise NotLocked("%s is not locked" % self.path) + if not self.i_am_locking(): + raise NotMyLock("%s is locked, but not by me (by %s)" % + (self.unique_name, self._who_is_locking())) + cursor = self.connection.cursor() + cursor.execute("delete from locks" + " where unique_name = ?", + (self.unique_name,)) + self.connection.commit() + + def _who_is_locking(self): + cursor = self.connection.cursor() + cursor.execute("select unique_name from locks" + " where lock_file = ?", + (self.lock_file,)) + return cursor.fetchone()[0] + + def is_locked(self): + cursor = self.connection.cursor() + cursor.execute("select * from locks" + " where lock_file = ?", + (self.lock_file,)) + rows = cursor.fetchall() + return not not rows + + def i_am_locking(self): + cursor = self.connection.cursor() + cursor.execute("select * from locks" + " where lock_file = ?" + " and unique_name = ?", + (self.lock_file, self.unique_name)) + return not not cursor.fetchall() + + def break_lock(self): + cursor = self.connection.cursor() + cursor.execute("delete from locks" + " where lock_file = ?", + (self.lock_file,)) + self.connection.commit() diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/lockfile/symlinklockfile.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/lockfile/symlinklockfile.py new file mode 100644 index 00000000..23b41f58 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/lockfile/symlinklockfile.py @@ -0,0 +1,70 @@ +from __future__ import absolute_import + +import os +import time + +from . import (LockBase, NotLocked, NotMyLock, LockTimeout, + AlreadyLocked) + + +class SymlinkLockFile(LockBase): + """Lock access to a file using symlink(2).""" + + def __init__(self, path, threaded=True, timeout=None): + # super(SymlinkLockFile).__init(...) + LockBase.__init__(self, path, threaded, timeout) + # split it back! + self.unique_name = os.path.split(self.unique_name)[1] + + def acquire(self, timeout=None): + # Hopefully unnecessary for symlink. + # try: + # open(self.unique_name, "wb").close() + # except IOError: + # raise LockFailed("failed to create %s" % self.unique_name) + timeout = timeout if timeout is not None else self.timeout + end_time = time.time() + if timeout is not None and timeout > 0: + end_time += timeout + + while True: + # Try and create a symbolic link to it. + try: + os.symlink(self.unique_name, self.lock_file) + except OSError: + # Link creation failed. Maybe we've double-locked? + if self.i_am_locking(): + # Linked to out unique name. Proceed. + return + else: + # Otherwise the lock creation failed. + if timeout is not None and time.time() > end_time: + if timeout > 0: + raise LockTimeout("Timeout waiting to acquire" + " lock for %s" % + self.path) + else: + raise AlreadyLocked("%s is already locked" % + self.path) + time.sleep(timeout / 10 if timeout is not None else 0.1) + else: + # Link creation succeeded. We're good to go. + return + + def release(self): + if not self.is_locked(): + raise NotLocked("%s is not locked" % self.path) + elif not self.i_am_locking(): + raise NotMyLock("%s is locked, but not by me" % self.path) + os.unlink(self.lock_file) + + def is_locked(self): + return os.path.islink(self.lock_file) + + def i_am_locking(self): + return (os.path.islink(self.lock_file) + and os.readlink(self.lock_file) == self.unique_name) + + def break_lock(self): + if os.path.islink(self.lock_file): # exists && link + os.unlink(self.lock_file) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/msgpack/__init__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/msgpack/__init__.py new file mode 100644 index 00000000..2afca5ad --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/msgpack/__init__.py @@ -0,0 +1,66 @@ +# coding: utf-8 +from pip._vendor.msgpack._version import version +from pip._vendor.msgpack.exceptions import * + +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(ExtType, cls).__new__(cls, code, data) + + +import os +if os.environ.get('MSGPACK_PUREPYTHON'): + from pip._vendor.msgpack.fallback import Packer, unpackb, Unpacker +else: + try: + from pip._vendor.msgpack._packer import Packer + from pip._vendor.msgpack._unpacker import unpackb, Unpacker + except ImportError: + from pip._vendor.msgpack.fallback import Packer, unpackb, Unpacker + + +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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/msgpack/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/msgpack/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1dd3b74e9d746fe91c63751402856ba4815474a9 GIT binary patch literal 2022 zcmb7E-H#hJ5Vv<Xo6RP<kMua8rNxL!5TxdgLjtKF1fo@es>i8!rPmc`vspXW<o2t! zb01L(5;>_a(7yv-_;YyhD^L9wcw+2L!WA74IP!RQ?2P9(^BaHAZ2I5*-ueC)7ok7V zxlsrGGnnEJ5EN0IpcDrfYu!q$J-ynAojQSo(H%q`S~)|s!eFKD)SB8s1x{2GH*lFd ztPVZuO)>9+t(MeMKk(CfP){2{1EcKgQv!BBX==N<p`I-Lv;Pof?>dMrANu@PjP&m! zFON`W?IYTt%`+6N&?UMI>ndHLtFX3ME4ak!!5Ui$USX@jI<4-acIyRTLv5_8M~sU> zo`H(r1L0>;%BUO_35)fS`LJh-AfPZ5V2T2Z;=q1}`j}eOKJx<S8FEli0r!ro-ae6g zrv)3oGgAm>1!sa~QV@0`iG)ou$Ve&<iYPwp#Pb{U>cG^i*asoe1WP=%L`%YrQ~VPK zizRKaTnCG#E!3W12mW%1^AD+Wh%?86WQki6iemmzk?sUdtzmTn-X>5ah|=92uf#cJ zBpnG!dO93AZqZ0a3rp`*GQlxK@#04i<JL>(H-C74>!Y@({DBx`LPlB4lnqW)O+&xU zdCpbExKRGLQ8JpF#He7LSHPjFhGE8z!?0~DJ5Gdh^aaY%K|nQXVHhWo5MlTm`s?Ej znHC$xpt#W+4H9}|^U330zPUxU$;|MGWi;m-vy^Ux;UF8xFzghkya|{2FvSuGgnjIp z`5LU_<ynb3^H^NvfeJ(jL*<8In$uCD^+p&z8AZu#2STTL9EQfXYR*E9S(1RQ1-BT{ z#(Y)lm$cB3J(xll*uxGsmT}EwRb$=`TK9JE?0o*k-Eil@{o6Z__P+dP8*=0B07n>C z)lsI|(o^08qc9HsUk7Jxi(iI?UjY$YAoQ5i=q~8u8VHH{K%M9KDbQtzC-%?+QUIl( zuP_k88t?lAhQ5sCy&;Pw>E>M$Wt1HAfdqyCadXlYlCvo7`sVa5W8|hO)6H%fW|#DH zPVz!RV~LJA1RzYDs$v`|N5g<V!MSovZ^}J9j`)EHT)hSSSfsGb-BpPHO$|h&LavXw zw#1s7dT7kLWenC8Pz+Z5T;l|cfDVrz{wF%l<cMd)+)Rm~?Ee4<$=5Y70fDYF&50H- zLr@j%zt@HxVM^rkw?JP&(BUs2tii_w4bc=mwIp<GA5Q>`f$_6}Q4#=ZGp|&i=joy} zoihCU(LgXky1;NA-2#Gj$?;>BEsl{m&twG6tKTFZmB`DAoiFR0Y!?)^Z7B!HKn?w% z$ht%&cwK~lXTUA_y9HZi9jhMZZ^Kvn)!+^2<Ib#yJM(7|zRmm0b;5#c7ad_IF)OL2 z>T#aH!)<uSHBZV%#>$1Nvg~NU^Gw+XOkR9fKT47wRH!WGqMd>(7u_0`EDf$+xLLx4 zhOK{<7CD#ZEj0WvB{z_jljIRq6)oZ6qocG?6)nZNtQiLBw?lcKl<&}|IuqhLhz9no dhP~eKa09Pf7RWWcgfH8k@7279gB{Dke*-Ey0_p$& literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/msgpack/__pycache__/_version.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/msgpack/__pycache__/_version.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..eabe2f2bd54aa1379736217fc8fa899967d8fd86 GIT binary patch literal 184 zcmXr!<>iW5rxz>2z`*brh~a=4$Z`PUVh$jY!V<-h!W_(?$@&t=V|d95BG`b0pC)q= zBakj)0udlRnvA#D%TkMqGxPISG8BOnf{9<&`X#vq`URN<x=E#(IVrjZg&9ft21Y3$ tAux_FOU+BkFVfE~PA^DI&ejL=!KUaHRNmsS$<0qG%}KQb*;Ne03;=CXD(L_K literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/msgpack/__pycache__/exceptions.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/msgpack/__pycache__/exceptions.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5c9b8584086cd05df9b2150ebb43481eb2946a11 GIT binary patch literal 2125 zcmcIl%Wl&^6t!a~aona&i^Kw<Y8D^}qG@TjfGTJ~2q{HEWf4Fl*E4A?T-zPneMH^0 zD_HRvZ1^B=`3qK@J82$GTd7?z(M;yd<IcV3KD=75yI+2{zB1b|{upDejQJXR`W?et zLm0w5Lzl*>)iHrf!UDFW30wlUMH#rPu?1WaRp6>LrG095%2;tk4J$QS#*GTFE2e;_ zw8Sd#w5S8uWmVsBurecNu`(+iS%VB$G(H;5IUo8An~B*PdfLDsjgBddPDz*@OO$Zd zDrUE$#Ph#x9QiWIf;j5EUzdrJzL!bSVr(mwY`DjQD9xlNSQaxJ@OPOPhD;8wGLfqw z+F`kth*_)Mv<rvx$lH^g7cS>}vB*Q3PjkMXd*S&`m2(mMoc}UZ1#0Ty?~A2uFIh^0 zWN|wWLb15Kzq=hTuLxSwogc_Z#A<0T-60c}hKi)E<XDm6)YB3M$JF?0W~Omq#0*#| z74ECN+m-4~9)|6vrAUObXh0B*>Dbq{N^1@Viip8;gm3&@Z8Og{yX#)&-SD*<q*EWf zM)Rv*yT<K}zS}=}VJ<h6idFByCBKh02aYF)PLe@JkGwX<h>MN-n2v-m=t!)t(SiFI zMh+0AGXvpi2^;@N8aSj<)HaSX<q<<Z`GFe!lZe;oI=WBH6N4KkC5(u2Tr=BnrPB{b zDT=Zr8Hjm1m0?$r+Z8D|raifmA~uMEjPrStOddDPirJeVs?Zu7@F~Ek4T4SULN|m- zan$ZD^k09x-DF5A85~G~gn=4Nz?PPNx@oEzT$xk@Ns(rX^Sjv7em2bB+_(;Ux7{pH zdSsS_k>AH8>a@~<I)#ln5=m-0reiBw@zIBktXV_9u4dFfT&NiDE=A65D+Z<SdA*o4 z=GyQg8}5;k6a&a_!nd+whO8LHc<;wW%z~6DFG%6A!(AD%>^PAu?jjYEJk#Ez6KS3# zu|ln6+gJ^<M=3j?oT9xv8t%4Sm!VxEYV`at#q`13<QYZj!jK4C5xx}>b7c7DfmGcv zKI|8RpO=;<=?J1s?npJVHirG6M|shX=IOjD4;W&f7gwG<S$+1D(cen*e=>3h3_KiT zgmAk#MMdQNE2qB(x@IdXorODcgrYj7b3%udrn9JDphuCwtCFj5p7+0SFZGv)vbtf@ LZ{BXyFjoHoyM)E8 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/msgpack/__pycache__/fallback.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/msgpack/__pycache__/fallback.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a1c283307843513634372b6e23d78aeb5c56e797 GIT binary patch literal 24648 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 b9P$S(N%)scr%D~U-drx%+x=of{~h?h6wXe0 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/msgpack/_version.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/msgpack/_version.py new file mode 100644 index 00000000..d28f0deb --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/msgpack/_version.py @@ -0,0 +1 @@ +version = (0, 5, 6) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/msgpack/exceptions.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/msgpack/exceptions.py new file mode 100644 index 00000000..97668814 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/msgpack/exceptions.py @@ -0,0 +1,41 @@ +class UnpackException(Exception): + """Deprecated. Use Exception instead to catch all exception during unpacking.""" + + +class BufferFull(UnpackException): + pass + + +class OutOfData(UnpackException): + pass + + +class UnpackValueError(UnpackException, ValueError): + """Deprecated. Use ValueError instead.""" + + +class ExtraData(UnpackValueError): + def __init__(self, unpacked, extra): + self.unpacked = unpacked + self.extra = extra + + def __str__(self): + return "unpack(b) received extra data." + + +class PackException(Exception): + """Deprecated. Use Exception instead to catch all exception during packing.""" + + +class PackValueError(PackException, ValueError): + """PackValueError is raised when type of input data is supported but it's value is unsupported. + + Deprecated. Use ValueError instead. + """ + + +class PackOverflowError(PackValueError, OverflowError): + """PackOverflowError is raised when integer value is out of range of msgpack support [-2**31, 2**32). + + Deprecated. Use ValueError instead. + """ diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/msgpack/fallback.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/msgpack/fallback.py new file mode 100644 index 00000000..94184218 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/msgpack/fallback.py @@ -0,0 +1,977 @@ +"""Fallback pure Python implementation of msgpack""" + +import sys +import struct +import warnings + +if sys.version_info[0] == 3: + PY3 = True + int_types = int + Unicode = str + xrange = range + def dict_iteritems(d): + return d.items() +else: + PY3 = False + int_types = (int, long) + Unicode = unicode + def dict_iteritems(d): + return d.iteritems() + + +if hasattr(sys, 'pypy_version_info'): + # cStringIO is slow on PyPy, StringIO is faster. However: PyPy's own + # StringBuilder is fastest. + from __pypy__ import newlist_hint + try: + from __pypy__.builders import BytesBuilder as StringBuilder + except ImportError: + from __pypy__.builders import StringBuilder + USING_STRINGBUILDER = True + class StringIO(object): + def __init__(self, s=b''): + if s: + self.builder = StringBuilder(len(s)) + self.builder.append(s) + else: + self.builder = StringBuilder() + 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: + USING_STRINGBUILDER = False + from io import BytesIO as StringIO + newlist_hint = lambda size: [] + + +from pip._vendor.msgpack.exceptions import ( + BufferFull, + OutOfData, + UnpackValueError, + PackValueError, + PackOverflowError, + ExtraData) + +from pip._vendor.msgpack import ExtType + + +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): + try: + view = memoryview(obj) + except TypeError: + # try to use legacy buffer protocol if 2.7, otherwise re-raise + if not PY3: + view = memoryview(buffer(obj)) + warnings.warn("using old buffer interface to unpack %s; " + "this leads to unpacking errors if slicing is used and " + "will be removed in a future version" % type(obj), + RuntimeWarning) + else: + raise + if view.itemsize != 1: + raise ValueError("cannot unpack from multi-byte object") + return view + + +def unpack(stream, **kwargs): + warnings.warn( + "Direct calling implementation's unpack() is deprecated, Use msgpack.unpack() or unpackb() instead.", + PendingDeprecationWarning) + data = stream.read() + return unpackb(data, **kwargs) + + +def unpackb(packed, **kwargs): + """ + Unpack an object from `packed`. + + Raises `ExtraData` when `packed` contains extra bytes. + See :class:`Unpacker` for options. + """ + unpacker = Unpacker(None, **kwargs) + unpacker.feed(packed) + try: + ret = unpacker._unpack() + except OutOfData: + raise UnpackValueError("Data is not enough.") + if unpacker._got_extradata(): + raise ExtraData(ret, unpacker._get_extradata()) + return ret + + +class Unpacker(object): + """Streaming unpacker. + + arguments: + + :param file_like: + File-like object having `.read(n)` method. + If specified, unpacker reads serialized data from it and :meth:`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 (default). + Otherwise, unpack to Python str (or unicode on Python 2) by decoding + with UTF-8 encoding (recommended). + Currently, the default is true, but it will be changed to false in + near future. So you must specify it explicitly for keeping backward + compatibility. + + *encoding* option which is deprecated overrides this option. + + :param callable object_hook: + When specified, it should be callable. + Unpacker calls it with a dict argument after unpacking msgpack map. + (See also simplejson) + + :param callable 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 encoding: + Encoding used for decoding msgpack raw. + If it is None (default), msgpack raw is deserialized to Python bytes. + + :param str unicode_errors: + (deprecated) Used for decoding msgpack raw with *encoding*. + (default: `'strict'`) + + :param int max_buffer_size: + Limits size of data waiting unpacked. 0 means system's INT_MAX (default). + Raises `BufferFull` exception when it is insufficient. + You should set this parameter when unpacking data from untrusted source. + + :param int max_str_len: + Limits max length of str. (default: 2**31-1) + + :param int max_bin_len: + Limits max length of bin. (default: 2**31-1) + + :param int max_array_len: + Limits max length of array. (default: 2**31-1) + + :param int max_map_len: + Limits max length of map. (default: 2**31-1) + + + example of streaming deserialize from file-like object:: + + unpacker = Unpacker(file_like, raw=False) + for o in unpacker: + process(o) + + example of streaming deserialize from socket:: + + unpacker = Unpacker(raw=False) + while True: + buf = sock.recv(1024**2) + if not buf: + break + unpacker.feed(buf) + for o in unpacker: + process(o) + """ + + def __init__(self, file_like=None, read_size=0, use_list=True, raw=True, + object_hook=None, object_pairs_hook=None, list_hook=None, + encoding=None, unicode_errors=None, max_buffer_size=0, + ext_hook=ExtType, + max_str_len=2147483647, # 2**32-1 + max_bin_len=2147483647, + max_array_len=2147483647, + max_map_len=2147483647, + max_ext_len=2147483647): + + if encoding is not None: + warnings.warn( + "encoding is deprecated, Use raw=False instead.", + PendingDeprecationWarning) + + 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() + # Some very old pythons don't support `struct.unpack_from()` with a + # `bytearray`. So we wrap it in a `buffer()` there. + if sys.version_info < (2, 7, 6): + self._buffer_view = buffer(self._buffer) + else: + self._buffer_view = self._buffer + #: 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 + + self._max_buffer_size = max_buffer_size or 2**31-1 + 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._encoding = encoding + self._unicode_errors = unicode_errors + self._use_list = use_list + 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 + + self._buffer += view + + 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): + return self._read(n) + + def _read(self, n): + # (int) -> bytearray + self._reserve(n) + i = self._buff_i + self._buff_i = i+n + return self._buffer[i:i+n] + + def _reserve(self, n): + 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 + 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: + self._buff_i = 0 # rollback + raise OutOfData + + def _read_header(self, execute=EX_CONSTRUCT): + 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 UnpackValueError("%s exceeds max_str_len(%s)", n, 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 UnpackValueError("%s exceeds max_array_len(%s)", n, self._max_array_len) + elif b & 0b11110000 == 0b10000000: + n = b & 0b00001111 + typ = TYPE_MAP + if n > self._max_map_len: + raise UnpackValueError("%s exceeds max_map_len(%s)", n, self._max_map_len) + elif b == 0xc0: + obj = None + elif b == 0xc2: + obj = False + elif b == 0xc3: + obj = True + elif b == 0xc4: + typ = TYPE_BIN + self._reserve(1) + n = self._buffer[self._buff_i] + self._buff_i += 1 + if n > self._max_bin_len: + raise UnpackValueError("%s exceeds max_bin_len(%s)" % (n, self._max_bin_len)) + obj = self._read(n) + elif b == 0xc5: + typ = TYPE_BIN + self._reserve(2) + n = struct.unpack_from(">H", self._buffer_view, self._buff_i)[0] + self._buff_i += 2 + if n > self._max_bin_len: + raise UnpackValueError("%s exceeds max_bin_len(%s)" % (n, self._max_bin_len)) + obj = self._read(n) + elif b == 0xc6: + typ = TYPE_BIN + self._reserve(4) + n = struct.unpack_from(">I", self._buffer_view, self._buff_i)[0] + self._buff_i += 4 + if n > self._max_bin_len: + raise UnpackValueError("%s exceeds max_bin_len(%s)" % (n, self._max_bin_len)) + obj = self._read(n) + elif b == 0xc7: # ext 8 + typ = TYPE_EXT + self._reserve(2) + L, n = struct.unpack_from('Bb', self._buffer_view, self._buff_i) + self._buff_i += 2 + if L > self._max_ext_len: + raise UnpackValueError("%s exceeds max_ext_len(%s)" % (L, self._max_ext_len)) + obj = self._read(L) + elif b == 0xc8: # ext 16 + typ = TYPE_EXT + self._reserve(3) + L, n = struct.unpack_from('>Hb', self._buffer_view, self._buff_i) + self._buff_i += 3 + if L > self._max_ext_len: + raise UnpackValueError("%s exceeds max_ext_len(%s)" % (L, self._max_ext_len)) + obj = self._read(L) + elif b == 0xc9: # ext 32 + typ = TYPE_EXT + self._reserve(5) + L, n = struct.unpack_from('>Ib', self._buffer_view, self._buff_i) + self._buff_i += 5 + if L > self._max_ext_len: + raise UnpackValueError("%s exceeds max_ext_len(%s)" % (L, self._max_ext_len)) + obj = self._read(L) + elif b == 0xca: + self._reserve(4) + obj = struct.unpack_from(">f", self._buffer_view, self._buff_i)[0] + self._buff_i += 4 + elif b == 0xcb: + self._reserve(8) + obj = struct.unpack_from(">d", self._buffer_view, self._buff_i)[0] + self._buff_i += 8 + elif b == 0xcc: + self._reserve(1) + obj = self._buffer[self._buff_i] + self._buff_i += 1 + elif b == 0xcd: + self._reserve(2) + obj = struct.unpack_from(">H", self._buffer_view, self._buff_i)[0] + self._buff_i += 2 + elif b == 0xce: + self._reserve(4) + obj = struct.unpack_from(">I", self._buffer_view, self._buff_i)[0] + self._buff_i += 4 + elif b == 0xcf: + self._reserve(8) + obj = struct.unpack_from(">Q", self._buffer_view, self._buff_i)[0] + self._buff_i += 8 + elif b == 0xd0: + self._reserve(1) + obj = struct.unpack_from("b", self._buffer_view, self._buff_i)[0] + self._buff_i += 1 + elif b == 0xd1: + self._reserve(2) + obj = struct.unpack_from(">h", self._buffer_view, self._buff_i)[0] + self._buff_i += 2 + elif b == 0xd2: + self._reserve(4) + obj = struct.unpack_from(">i", self._buffer_view, self._buff_i)[0] + self._buff_i += 4 + elif b == 0xd3: + self._reserve(8) + obj = struct.unpack_from(">q", self._buffer_view, self._buff_i)[0] + self._buff_i += 8 + elif b == 0xd4: # fixext 1 + typ = TYPE_EXT + if self._max_ext_len < 1: + raise UnpackValueError("%s exceeds max_ext_len(%s)" % (1, self._max_ext_len)) + self._reserve(2) + n, obj = struct.unpack_from("b1s", self._buffer_view, self._buff_i) + self._buff_i += 2 + elif b == 0xd5: # fixext 2 + typ = TYPE_EXT + if self._max_ext_len < 2: + raise UnpackValueError("%s exceeds max_ext_len(%s)" % (2, self._max_ext_len)) + self._reserve(3) + n, obj = struct.unpack_from("b2s", self._buffer_view, self._buff_i) + self._buff_i += 3 + elif b == 0xd6: # fixext 4 + typ = TYPE_EXT + if self._max_ext_len < 4: + raise UnpackValueError("%s exceeds max_ext_len(%s)" % (4, self._max_ext_len)) + self._reserve(5) + n, obj = struct.unpack_from("b4s", self._buffer_view, self._buff_i) + self._buff_i += 5 + elif b == 0xd7: # fixext 8 + typ = TYPE_EXT + if self._max_ext_len < 8: + raise UnpackValueError("%s exceeds max_ext_len(%s)" % (8, self._max_ext_len)) + self._reserve(9) + n, obj = struct.unpack_from("b8s", self._buffer_view, self._buff_i) + self._buff_i += 9 + elif b == 0xd8: # fixext 16 + typ = TYPE_EXT + if self._max_ext_len < 16: + raise UnpackValueError("%s exceeds max_ext_len(%s)" % (16, self._max_ext_len)) + self._reserve(17) + n, obj = struct.unpack_from("b16s", self._buffer_view, self._buff_i) + self._buff_i += 17 + elif b == 0xd9: + typ = TYPE_RAW + self._reserve(1) + n = self._buffer[self._buff_i] + self._buff_i += 1 + if n > self._max_str_len: + raise UnpackValueError("%s exceeds max_str_len(%s)", n, self._max_str_len) + obj = self._read(n) + elif b == 0xda: + typ = TYPE_RAW + self._reserve(2) + n, = struct.unpack_from(">H", self._buffer_view, self._buff_i) + self._buff_i += 2 + if n > self._max_str_len: + raise UnpackValueError("%s exceeds max_str_len(%s)", n, self._max_str_len) + obj = self._read(n) + elif b == 0xdb: + typ = TYPE_RAW + self._reserve(4) + n, = struct.unpack_from(">I", self._buffer_view, self._buff_i) + self._buff_i += 4 + if n > self._max_str_len: + raise UnpackValueError("%s exceeds max_str_len(%s)", n, self._max_str_len) + obj = self._read(n) + elif b == 0xdc: + typ = TYPE_ARRAY + self._reserve(2) + n, = struct.unpack_from(">H", self._buffer_view, self._buff_i) + self._buff_i += 2 + if n > self._max_array_len: + raise UnpackValueError("%s exceeds max_array_len(%s)", n, self._max_array_len) + elif b == 0xdd: + typ = TYPE_ARRAY + self._reserve(4) + n, = struct.unpack_from(">I", self._buffer_view, self._buff_i) + self._buff_i += 4 + if n > self._max_array_len: + raise UnpackValueError("%s exceeds max_array_len(%s)", n, self._max_array_len) + elif b == 0xde: + self._reserve(2) + n, = struct.unpack_from(">H", self._buffer_view, self._buff_i) + self._buff_i += 2 + if n > self._max_map_len: + raise UnpackValueError("%s exceeds max_map_len(%s)", n, self._max_map_len) + typ = TYPE_MAP + elif b == 0xdf: + self._reserve(4) + n, = struct.unpack_from(">I", self._buffer_view, self._buff_i) + self._buff_i += 4 + if n > self._max_map_len: + raise UnpackValueError("%s exceeds max_map_len(%s)", n, self._max_map_len) + typ = TYPE_MAP + else: + raise UnpackValueError("Unknown header: 0x%x" % b) + return typ, n, obj + + def _unpack(self, execute=EX_CONSTRUCT): + typ, n, obj = self._read_header(execute) + + if execute == EX_READ_ARRAY_HEADER: + if typ != TYPE_ARRAY: + raise UnpackValueError("Expected array") + return n + if execute == EX_READ_MAP_HEADER: + if typ != TYPE_MAP: + raise UnpackValueError("Expected map") + return n + # TODO should we eliminate the recursion? + if typ == TYPE_ARRAY: + if execute == EX_SKIP: + for i in xrange(n): + # TODO check whether we need to call `list_hook` + self._unpack(EX_SKIP) + return + ret = newlist_hint(n) + for i in xrange(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 xrange(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 xrange(n)) + else: + ret = {} + for _ in xrange(n): + key = self._unpack(EX_CONSTRUCT) + 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._encoding is not None: + obj = obj.decode(self._encoding, self._unicode_errors) + elif self._raw: + obj = bytes(obj) + else: + obj = obj.decode('utf_8') + return obj + if typ == TYPE_EXT: + return self._ext_hook(n, bytes(obj)) + if typ == TYPE_BIN: + return 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 + + next = __next__ + + def skip(self, write_bytes=None): + self._unpack(EX_SKIP) + if write_bytes is not None: + warnings.warn("`write_bytes` option is deprecated. Use `.tell()` instead.", DeprecationWarning) + write_bytes(self._buffer[self._buf_checkpoint:self._buff_i]) + self._consume() + + def unpack(self, write_bytes=None): + ret = self._unpack(EX_CONSTRUCT) + if write_bytes is not None: + warnings.warn("`write_bytes` option is deprecated. Use `.tell()` instead.", DeprecationWarning) + write_bytes(self._buffer[self._buf_checkpoint:self._buff_i]) + self._consume() + return ret + + def read_array_header(self, write_bytes=None): + ret = self._unpack(EX_READ_ARRAY_HEADER) + if write_bytes is not None: + warnings.warn("`write_bytes` option is deprecated. Use `.tell()` instead.", DeprecationWarning) + write_bytes(self._buffer[self._buf_checkpoint:self._buff_i]) + self._consume() + return ret + + def read_map_header(self, write_bytes=None): + ret = self._unpack(EX_READ_MAP_HEADER) + if write_bytes is not None: + warnings.warn("`write_bytes` option is deprecated. Use `.tell()` instead.", DeprecationWarning) + write_bytes(self._buffer[self._buf_checkpoint:self._buff_i]) + self._consume() + return ret + + def tell(self): + return self._stream_offset + + +class Packer(object): + """ + MessagePack Packer + + usage: + + packer = Packer() + astream.write(packer.pack(a)) + astream.write(packer.pack(b)) + + Packer's constructor has some keyword arguments: + + :param callable default: + 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. + + :param bool strict_types: + If set to true, types will be checked to be exact. Derived classes + from serializeable 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 str encoding: + (deprecated) Convert unicode to bytes with this encoding. (default: 'utf-8') + + :param str unicode_errors: + Error handler for encoding unicode. (default: 'strict') + """ + def __init__(self, default=None, encoding=None, unicode_errors=None, + use_single_float=False, autoreset=True, use_bin_type=False, + strict_types=False): + if encoding is None: + encoding = 'utf_8' + else: + warnings.warn( + "encoding is deprecated, Use raw=False instead.", + PendingDeprecationWarning) + + if unicode_errors is None: + unicode_errors = 'strict' + + self._strict_types = strict_types + self._use_float = use_single_float + self._autoreset = autoreset + self._use_bin_type = use_bin_type + self._encoding = encoding + self._unicode_errors = unicode_errors + self._buffer = StringIO() + if default is not None: + if 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 PackValueError("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_types): + 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 PackOverflowError("Integer value out of range") + if check(obj, (bytes, bytearray)): + n = len(obj) + if n >= 2**32: + raise PackValueError("%s is too large" % type(obj).__name__) + self._pack_bin_header(n) + return self._buffer.write(obj) + if check(obj, Unicode): + if self._encoding is None: + raise TypeError( + "Can't encode unicode string: " + "no encoding is specified") + obj = obj.encode(self._encoding, self._unicode_errors) + n = len(obj) + if n >= 2**32: + raise PackValueError("String is too large") + self._pack_raw_header(n) + return self._buffer.write(obj) + if check(obj, memoryview): + n = len(obj) * obj.itemsize + if n >= 2**32: + raise PackValueError("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): + 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 xrange(n): + self._pack(obj[i], nest_limit - 1) + return + if check(obj, dict): + return self._pack_map_pairs(len(obj), dict_iteritems(obj), + nest_limit - 1) + if not default_used and self._default is not None: + obj = self._default(obj) + default_used = 1 + continue + raise TypeError("Cannot serialize %r" % (obj, )) + + def pack(self, obj): + try: + self._pack(obj) + except: + self._buffer = StringIO() # force reset + raise + ret = self._buffer.getvalue() + if self._autoreset: + self._buffer = StringIO() + elif USING_STRINGBUILDER: + self._buffer = StringIO(ret) + return ret + + def pack_map_pairs(self, pairs): + self._pack_map_pairs(len(pairs), pairs) + ret = self._buffer.getvalue() + if self._autoreset: + self._buffer = StringIO() + elif USING_STRINGBUILDER: + self._buffer = StringIO(ret) + return ret + + def pack_array_header(self, n): + if n >= 2**32: + raise PackValueError + self._pack_array_header(n) + ret = self._buffer.getvalue() + if self._autoreset: + self._buffer = StringIO() + elif USING_STRINGBUILDER: + self._buffer = StringIO(ret) + return ret + + def pack_map_header(self, n): + if n >= 2**32: + raise PackValueError + self._pack_map_header(n) + ret = self._buffer.getvalue() + if self._autoreset: + self._buffer = StringIO() + elif USING_STRINGBUILDER: + self._buffer = StringIO(ret) + 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 PackValueError("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 PackValueError("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 PackValueError("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 PackValueError('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 PackValueError('Bin is too large') + + def bytes(self): + return self._buffer.getvalue() + + def reset(self): + self._buffer = StringIO() diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/__about__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/__about__.py new file mode 100644 index 00000000..7481c9e2 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/__about__.py @@ -0,0 +1,27 @@ +# 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 absolute_import, division, print_function + +__all__ = [ + "__title__", + "__summary__", + "__uri__", + "__version__", + "__author__", + "__email__", + "__license__", + "__copyright__", +] + +__title__ = "packaging" +__summary__ = "Core utilities for Python packages" +__uri__ = "https://github.com/pypa/packaging" + +__version__ = "19.0" + +__author__ = "Donald Stufft and individual contributors" +__email__ = "donald@stufft.io" + +__license__ = "BSD or Apache License, Version 2.0" +__copyright__ = "Copyright 2014-2019 %s" % __author__ diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/__init__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/__init__.py new file mode 100644 index 00000000..a0cf67df --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/__init__.py @@ -0,0 +1,26 @@ +# 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 absolute_import, division, print_function + +from .__about__ import ( + __author__, + __copyright__, + __email__, + __license__, + __summary__, + __title__, + __uri__, + __version__, +) + +__all__ = [ + "__title__", + "__summary__", + "__uri__", + "__version__", + "__author__", + "__email__", + "__license__", + "__copyright__", +] diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/__pycache__/__about__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/__pycache__/__about__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c70efde2f3797b3ab64bfc65c0618c7e1eb8d199 GIT binary patch literal 682 zcmYk3OK;Oa5P;Wq9?q*x0rk98;t+|%Y2eZdRfYD5P^Cy5R-l#b*~BYsuh~bW<R5Y2 z2j$8I{sJdv6QOoT`)Ou0kDb{!qf!6M&)L`CAtArWlM|zUi`P6LfIv`^DquksvapI+ z6c7j@f)=!)16_!rw~kp0`m7BD)`21G!idFi!g_GZ`Y>h#I1{~d!iMl{NhZ(#U{x}S z_NQrPROzhXvTBsJ`xxX#8ma32Nuy<L`O4L~^>&YQD{Uz_-w!x9uBuYKMWf5P)AH!u z2<>yx=yRSrTPTe>W{N76<uRs|xu}gVGvYi~%~s2GVSQMW=HJq_tk=7XJEaA6R+iFA zVdzR}`mn`vH9ZCivwK-s+nDPlSxZ~EY?iAkX|_$8JeFx)Ud`sa$-S!666n&p)ymSe z1}bYmCb+buxvH&}nX^ip-53s`x8@K!lWKSIVR=un`+KZf2>S8(_}BFFaZ<X#2IqJG zr=W}Z<=ZLZioP<RCL_Owm9tLcxEjBh=*Xjm@Ow*3+=*^`SI494;eTHDJo+93k0Ig* z(POWB{JlwR)g+B<rkRr^Oy}Q=OwAYIU5Cpzq6VcOmyuw*OgUWitl944ca;KHiW~nF TLlG~cFnB7Rs1=}uD4xMT!q~?3 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5b1af78a698821849cb39428f031e2ab2314baf4 GIT binary patch literal 520 zcmYk2&u-f=48~<UiT`)#u!mR<ZHn%?4SRxJwv*6-a6&f`CR&~>1;``qvIp|Dr@q2Y zBNJeV1pXirB)<>((6-gnpZgz=sZuZM>J<F`!ZCekpu)r|N_0Z0PASt_qA<nGE@-Kj zw9+febxwsYsMIA@x}sXw)aZu$7P!O}=2&2f71sMgx7d7B>-Lp5t93TN>9&)zG4x<) zbUw@lnxmPF8|ItQn<2n+9Cm^8*F+|YxdP~7I5-b5w*Wggp1j!~0;eTFPo1&+tO2aq z^~2O(k|`2({&Z;yCRnNG0MVOE!?E|G3gBzj@s*$vw1SmDzQvb<obh#iBVL|kh@O{u z{zT<7!Ga-Px~+?B>oP1OR~ydz&r1JA#7<|~{BPxNrCad#(<ack8O?aNjmF~L!>_~E yJv^e6&H=}MK<77OxBJ=c&9L79n8C2{{dk&-kK{1g{<D~x-ZI{$@0&EazW)HVx`p!q literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/__pycache__/_compat.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/__pycache__/_compat.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2717832dea1854e0a51488eb540d26778159ca0f GIT binary patch literal 955 zcmah{OKTf35Y}UDZ(PSYGz9uMxR=5nVu$1!LZOA;LZMLT(jw%QoNThMNZJGk_vAqG zS9<9W(zU1jg`PSiw{A)g9hljfk@lNUpLDRf+5hxy{8@5BzLN*WAb$mJKR{4K(SnpT zr6o&Q$x}|T$BHP8bad8H<OxyyoTc4$6+zY0J@ZD#Gn#HxUERm8>ZtAwNgpZpo+Q0{ zz$OXzTXJgaqIFv2Wm6mHW0ha#Hm@r`Y)oD`F>9;LL4ACW#O{GD$teB}hD8Uw2X0?N zcuQ`{EuAq%6}yQQyQ53~g*kFY7fkUP$;mQ;@zM39KLUGgv~+qTM^kC_C@ZA3qpRGV zLZ{SDhQ>JT%m93CI2O%5g`i1F6-n8{!6{cfjCp}*;t$qgQD?HSN8@!XivkoO_(gvV zZU+$V=z`vn1z#c*J^l)`J<kg3qe_<A_uXl31roQOs)YH@DvuD_pdvpGC$4NJP2TKI z+q_V_dl#qEdT(E0E4aASm8#98k=eOC$*Yrz$m+6@Zrsd$Pl!ri3Go~Wq4tDcC;vUq z_}5>@z&3^)s0!ixLX@>?3(N;XT(q)St(Yyq4Qvx;@YH7Wcf$-J^BZfWo<SLS#MGcj ze#>cmGt$gOxGB&ea`Q$9%!IFy0w!+%cSyh={(Yit91^aiw-cEisFDG)pS7+vz}}z` z1|NXIU7p*y^@B@o@X3n2n$@1a`?!zc02ZC`0|=n3KxWqW!zG1IKo6`Qgup32T#0pr SBP_PIS<HuY7)3N@UH%hm$nKi} literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/__pycache__/_structures.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/__pycache__/_structures.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4f8a8cbb53558b2e1cc406df5b9838a71c01a9dd GIT binary patch literal 2812 zcmcImOK;Oa5Z<*D$4QeWeL!2JO57kqP0B+;LVzNHKwNU6CkwQ4y_>`(ankj=Qmfw5 z1Am1JKgd^3`~^<TY+^_%8;93MyJPR{?l&_#^TiKqwaUBCt@j^`gnS_jtpLv*=;2Ek zIN@|iM%1Ar!!bstV^Z>(aD$sygqxx;HJzd;PKi^5*#a-ZY*Eiz!h%_gTW?9T^c7Ab zO*5{$$KiMwDZ%{FWGq!|bN|c_{c#YlPoy6x){6p9!Mle$l4ig|2YPq}gCGv$MK z#uaf)Zt?<1z~&anA}?_pq{Yj;0<y%{con40YkVDKnb&y(WQA|=O^|DR3oP7@?KeTs z4}5j*Q2@b)68j72AqIt0SZQ=61dMzlO&S+MG3-eTUiI*;(^jKNd*V+Hjw64_4-QWU z$K%5X9H(?=XCmNZ*`B!G2e<DB{Wc4gj64-d5w<4hvCWti6Ums3py)TD7aNIbtwg(I zqX~<&ja7J1MA1t!rBk$(cAG|A7`WjeF5t0EDoe2Dr^OOs5ER!iwgzu$pfjzf&4DE- z(*pBKAKWxFNL(DNfsog+EXIb4vGoO{`ht6?`#l_4gQL<=1Y;XnD4<(Hxfa4p2;m8x z8c7H%kfK4T+`toY8MY4HFl21*XqExul(Fp$15lT400u^p#DFT9n;;wLCHj+t8h~p% z8K|gRLQT8Gqs2?i@~scobSnb|b^izj?A^~oL0`~*Y$%s}QS-RbxX~4TSNUfmNwSO@ zC@~g@K4Z7xsH6lM$sVXXt?V|dSS*1%0`$1T*l5h7AwE|bJB{4oOe4#1h{S4?c%8D2 z!zK<}IABu98#v%aEu^j{60AtgFj%P}?y{+EF8{RN1J#d)CE0=g9~n~Kg!8jQJ}1YE z@<9@{St6xUj*ie>v{!Qqz1X{cO@BglvH~YcB(d~M)>m>b2X#fR%PkXq^{oZ4ofH>W zqPu)3OtAZTP*^ZJ+OQDiuQ_ie!qG|nC<pleaGfrt$2rg|5#G|jRvO{yf_;($wG!*) zLm@3Z%Y#~t`ZP&o6ao@YX8~q6B{vhsle@4`?%{xx|M%pEJaPwm7P+Cm+bki!_9FZ; sg0CJ-Scw@c@k1=O#>XeZQ`$w%OKB_`+fQfw{2cd$NUYmtW8Z@Q9jnmo7XSbN literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/__pycache__/markers.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/__pycache__/markers.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fe657a487bd1f1dccd5daa75939790b33b476697 GIT binary patch literal 8830 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 X6j?x6#PnY<ts_~(8nI4UmNoUiX#%o3 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/__pycache__/requirements.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/__pycache__/requirements.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ac3dc0a598a9ee6fb67bb1f38452f98d1787ca48 GIT binary patch literal 3941 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/__pycache__/specifiers.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/__pycache__/specifiers.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a92aa4267e23d8f05d0aec351c1c41deda07b7b3 GIT binary patch literal 19746 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/__pycache__/utils.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/__pycache__/utils.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6f97d4aca6db753132b3cec80d0a268764ec12b7 GIT binary patch literal 1398 zcmbVMPj4GV6rY*>XK!q`v;hf;!-5d46|%A5Rz(piT;PyPs}`9?tF>oh&u0I1X6z(x za>1PYJ>bB{;6uz2PL()t&WZOXZfFoE)_%X8eecbi_ulXAe%bHGFMdsr{t5{BgS>Mw zSbqhgzXRZe(~?wlOe;2Kl{fY%>R9QIeeQ9;461M(R?#@3MEFIA2WvX+@{mVAk#WpB zybJd&&YqBA{08EYp=a;p6Wx>xBQjaFjWV{w<x*<d)OOG+S)1&5QBMs#AHJcuh1tQk z^)fFde<qaki#Cf@_``0N9_>ug4==oXAYX&%y8wn1l+z2cW(8XlNP`_-(Ot;mem2eP zrj}EPyAqiaGjV1;y_ndbY)*w5QtQ`wC4MHV4{@#@?U}0GYh}ATS;&&_j$Y0u&FBk` zDks@e)Vxu9Z9YB8XR@B{EsQL6+Me6@ZXJbD2bdprnlN<-@TLINp~4mLCoIl;hCurC zk~}B%woeQ_iB&?OQVRMf<a;tBmr!8AI6d*y;|p4NoE1K5)^tt53p6GuLgb4FMRd&$ z*gM}qT=;p;ixgenIq9m`E`kq!U1Smbx*I=?MG9aQynb<Bu{$T;oI{E&XZy|Bww!J2 z#@2JT-<_@JY`tq6hqEpq4<M(%`Y}%6dODXnf&Wsd^F+%^mbpqylWb^DvrHS6WuGUL zg-PbQPMTUIz?~^Y!sYR?P@<j+?P8ruGf&K1B&Yd#BGJ9(rO-~LL@9C&Tg9vrwMpFu zg+sLRUyUw5UPTXIq@&@^r<Pcn-XaO7Orv}Na6yg+mlTMCGM)i3FB!*KqlYj>9;6B* z%+isiXKt3R0Y~7fyFU}PIBV6x1B`|2`(*Xt*1SLyaOl(hvVmdM2kFh8!~d0$x(BBW znYs@*wT*xS{!dcseR$jfd7DlrZ5wT%AFC+kVu=fX2XNR|5$+5DY#`cZI=5low(uU< z@VHS`ZY)zm#c217M%FgkbliHa64uAK)`OV%(m`?1r)X2I4cc58{jc2Y_J6eoE76|- zkdV<H9k7u3UQF-#p8<Y^tGB`wx($0a&fqI!7D{B9!mcaiQ~3xVA|wb{m@Cmn)23== nDO49#_=37X?_}qCh@9Hae%0_rDGo52#^SeGhu!sJuM_+Yehg7B literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/__pycache__/version.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/__pycache__/version.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e518a5b6be1afdd8dc63012141f4310f62b1fc52 GIT binary patch literal 11951 zcmb_i&2!sGc1Hss2~iaFVM+cN*#m#fShOu!_IP(aj-t_gcxF7A<#_Fhouci<LTpH) zM3Hm@l5K`cRieq}lykOHIpvgGa?E)Td)nI`atKbT<TQUks!~2A`Mn2#0x41BU74(I zG`e5+>-YL~zYp{WBP02z|1$sVxAU6zUs~#Cp}dUb|1UDBNm19fL`7`r6@AO77=r5b zx>+&#nW<#>nXP1{A<cSj%c@v_$;hnCNlOl`Whz6SxsjK7IV=luL>A?!99zro>6KwQ zE;HY0mBJUAoRHRcnzX!;J)=^@`w2OT_epOQ?_+qMk~zHRyfM6wd)bW%IgR`TMwyf+ z@jr!hTAulbOl3;GBWEz`v^*=%;dxTNTRDXhY?;LfSsvlEJTEVx?F^4}aZgm<k(cCq zsF{)P%gcD4mHI=iH2Xbxpp}ep)LrqL_3glOYFn+Q3PMZPc4~gD*$9g*Rci#!>UN_V z;Jy64pe`b`?lo3xjau+3%(PtPdtvU8r?|(+*WQ|2eU-cx?=^PZdQB$pqmS-BczExd zvUC6AZ@<0!pd4CG(v<O9&FXrXQ(oP3F{B~AozQ40FEm?CKL|7RX4S1%X$JJ8=P=Tz zNdEiCURi<G(e}hc&C~+1nOC*|kkA4>s{J!8H^|o8zsuYB-KTlm!MbO!)popwy%P~& z`vFK^v)zWYl^1NQhV9h=rEJ%}Q?0wcf9DtRjDKM_S2nzAz{54u06jcNz-;NYyoRK~ zn+?0RdI;{C&tthZ^US_~_r87W)<Sn`jHAx{P3q>kL%C!q5^a^IYzP_FC>K-o&zhP< z&FjVM!B*>ftJa!Z*{;>)+`{wqmFB`tNmZO2ut7G}^_E-Rbk{J?>+uNltye0CA*PUg z!lPw%VTq!sQaSn2f-EEXW5_(MBBWN)rKlJzZ3fS+{W;I~W6&STMM8)D!u9Rd=5|9~ zv$uULh3&65x9hY9tKfamOqh`nY(jFJhP&lCPMCL`t)|?rQ@P+c&$r!r+>&z~*{nJa zb0C!wB|M??G+`Z?W%Lk3Rm;@&HL`tTq>k-l&|!e5Ne2O*89EH`%*r8|$1_KV0iG5e z2zU<Bp@3&zjzj(?FvU+G-?0$&$TMMOd8TzFY2FYd&m~bV>7lvq`s<<TY<jP-x~A{d zSNkX;mJpER%+l0pG)=Up(&*+Bh$^=NfSx82<E5noR;?qXAX@k6pfJikz|`R(5=%k{ zpqqHb6nQe3r|?73JTSAxy1TU^-KA^P6G>~o*Eg?v;5hS(yvh9~6e4&!Y@BLy3&)IC z($!h?3^PsIko_pKjzdFSB?K|)Ck{c;L(4G<kJct8T)hj-%BGC=Ta>Y&k&s<S8bCM1 z_At8D1$2o?Ru{V?^4K(NNCZ<~8hH@GXn&golQ?u&`e=f0(zK8cF0}Xj4=0%V-Z+9_ zYJZyqXWpFP9}OgU?HDUeeQzB>Ftxu;g3UK4`1W9e2W;gx5$QGb{mD@Tqy23XY`i(a ze>9Nb#xYiy`rbK$U}~=#0H7Z|DSe9M&me=A5P{g!{bGR4*@3OIVRXcX!6!HLh8gBz z$~FAJZB#vV20g-Jxf$HsYSq0huMv1s(J(L|=xF70Cd_Vm!Fp5nA7gYL{V|fCMW%_o zF!g@r5+Bs%(y*Eaj5<l#Day`Kc8Rk0C?kVSU8amwl`2t2<EL<T4?3PT!Lnsx3Cl?T zxwVSc?vMDhjO70lvLDjj9-H#ebfS_&nKd}d7Rs!}Q655>H95+8lv$gjJdE<VoZ!9% zl-aCD{Rqlaa+>RlD8qo~@+itM<GDPBGMn;%AD3q#gXh?8>yd0a)On$4*=V8nL`QQ3 z8MI^=plrxU_hOk17_Ly2vB?$|p&Q5$cdA=0SPao3NBUEpz;G!>voe9{KnA_z+(n~L zdXZMRJ>6r<!g`2+daM>Q{CJuq7i2x~jw%U7nh6gUtX`EE!Z5>p9p@fE66H13kBcFC zP<8e71o}y_0Yg7B@Ao1@NiVl27kh@8{qu$0(h|I!>}peOxj|?uucg%7;HiNV1mZYk z`XzHaz=sH=XL5fCAF{3Om3poEO&68kp6r?bd<1Z8M1>XDoQZTiOrbl|i!KdzI8s`J z$fPf;49egCAAT%Ohp)970np<V#uL35+3h<5Roc2dRG3r|gFi_j=o6&ap*$7}GK`%R zit%0=;H4gG_;CzPXILa|dV8X8c=*4^8h;dHucgNCn?5}4V+~KcaWgf1-wGde+`C(a zg^A2)z5MwRG8B%~d<RU9m$I3{^-eFVdf<*A>J4xfX)JI)MoPwPvOY5hk?sQ?4=YiM z^@x$aNFhB)={{V!G|{hd7tmFat*pp?46T-GwmcQQQe>#AA5%s<lXs6I`Bo%_ibO@x zf-17_)Q6Ojd6H5X`<j_T4WA*gDFV%Gl4dTL2mkHq*{AZV-LapzbM0qTcsk#)=Srcd zwzCK&x%Ii%V!4#ziG(>U^-j%u@mkD<x~lS=x?Cl#NMghLWd((oj{@jJ3i5oWJ^OMO z8i7n8XiI$;c|r3F<j!vD>e_QE;qdxv{j?^H&8+$grjjYmJ@E*EqUQyf>4=kBRDO(j z8kJbX=E|X%=hH6CFWk8K!L1+t_$RkN{GMVVp}5k{USSeSnQ$giyRjZ-*R|Pzp#`N9 zX8cyY7KHEi13{V8-74E-&X(H>jWrMPuJ&rJUWWrnekEdHt_o6Xz)E}4;pkg(tkYZI z{|&&|QqshjDCk9@>tlLRFB<Ak(9&fivCu$b&HYOhWOi4qX}kK%dK`I(82WVA=olNi z)c1s1?;!TEsj07C&UAG3Wk;7eFwz8TQHIS)Oq_qLaqB8tEwpCPigMig^<&tm8)nDY z6M&t5tOc14M&8x2VEQV#mqU?OQ6yFgW81li!E>Rt5dReU2>V$n%hXYj@P((sJnUVt z;sqji2q89GVb*O?@GZ;)+c11fW@H1A{Br~|@YPo|Uays+uA}Z(NIsdcTE;X@F(LB0 zg}h)Ofw`8>Q10J>mmJ&L`G_C0AKl?6g&I+w{pkK8E4rm83v(YnyIMM5`iPna{4UxI zoEqW&VtgXR17OUj^YK_$N(YCzh{zeoQElH_BSXJuEbOnPgM9|oT(ki{7mwE+hoGO# zIZx-GMHDB!iB!Nl^`%+2v(l+{RJG&QTkCl70=I)EO0>O8r8gd|k??IFS82b<C~*M4 zIZYr5@ClE4rUA~*B?CH*8wujxxpw-y^t=yZ4b^vtt}oFPI$%Xd^$z|<-5WQPneFp| zI_?kE#~>(+H|LLi5#j2cL-{jk%>j=!N4`IUL4*(w2z>CWMq`kWUnO9+AeKmX@a{o< zG>dLc=}M`)p)T4Co`jb3q$s*SI`)>4{NEr;oI}rm77$+MBy__`4R2Yb+$RWsB8VFW zdxzp+Z$1w84ts^Jvp9ls;w%<XPMpP2loMxh4CTaG97j2E7AH_noW&C;C(hy|%89c$ zg>vF7PNU4<e&9Ib>kkf0n?wI?^XE_fD{T|mrLGf6=R2urKI8ub1@g|ID&Z{Q#MS+C z0Rr@-EXjTPD-oDDn=^dU-wv`#c~3NSX#_cmc=va7dL!z+CpIjZBZW&ngCVZ9;F417 z5bE@}E+5wo?}^qgxwVjL9f@0uT$kteQ5sQ>{cRTR?Ql@QjE6TyI4^QO%J~@Q<D5_I z5$p+8)Z^v$bo|LFS^qosW%z)XBV&gQ&#nq2OM+O$mL0__I@+@$><9L=*$U7T|5}6w zK7=8<t<NunqSmJ<UJos<c@6JnOD+8;jYk8UTKi%g<L|o7sW5K>ADLetqXQHXotn|3 z5oYOhz-x}5jT=efW|-lf7CjnlszLi5Y08x*5iC~Tn)foy`kt$*>(Q4YiqWb9<6cwE z?Uo|PQ2mUuWQwlC^l5O^vvGs48|;BA)FvbPVvK8`mWIiH@8(+S28*BrCz)4ycG z{yUO?37MuBgei)KF3yM<F)4I0qfd%SQy1CpzdhE^^6p~O%G2iOy)Za@P+W{hNCF3n zne+jA9uYKP6Z^jblf(;B^XQ8dM6waj<Jaf{n+wM42ErMehO%Lh;>*hhg?M;x2?!%< zj13$^y#KTfGum}zK>;cwwap>5!cbX2<zlEz4^)<+{(_+_9vyo)9wEnVf6r}0+=iVU zw^`iwuiTdBHtce0lfXsi1`eR%vLfcTO>DFCibT1~^xtQPMeNnpw-_K4FZ*TT5vpNd zb~o3B{gvi8(II;)JpM$K2dsxp#Y|1bnx{Pq>f5<_>`f||SCN;7qHTGf#vm~Y&5dTQ zG0@{mKK48~1SdIi|AXXHEKn1skrxxj401{nNz&V+eQfD21uYRJmVa_wNWwN~{pjl= z?_Qqm5kZ{Egl0`|k0f}G2;U6ALgAVLSg7e#3QL!o*!cXts3D(r03K?ZN#PkzsKF83 zgM$Q^IYu5p#4$A)J*7B}&=e~OJ@Q!+Hj*Db05LV$Da3^?Vo1>OF_ZH?05dgRN@4Dj z42kVQOd63%o<$)h*@l?_7f>2709b6I!zCi0Szwmm&dwjW;jSighhnu8uCWF>War~^ z1_hs^I0gm21~7&6z$^_+p=%9}-Kmsh^WcZGhV&G9$*_a?OZgsHL()((%df>%4ixa2 z2#J^jC~MOJQ=n+f^@KKTtYSi2U*NY#Z;*CAj^0R}-nqAbdJkN~#e`0*;pK$Rbj10P zrBth+6@ei(D7q)9qDAF{^r%CVf?OXEPP$K_>G7e75c^@cdse!;?`fq;<Vg><CQw2E zX>%w!H91&z#5r>ty_XZBvA9zS;=y6cE@ql@f;qw`I6^l-jwn#~Sqjy38Wj$g!%om6 zaUF4%P(1L<6s|N`I8I_z<<hCXm?VOExGF{;32Svv(d{i<9J~AAlW!j04fFTDD1Y<d z?x!C=ysLhW7PUaxEy_suDf;+&w3V9*Y!cspAaqH}>EDoi`Z8(hGrBc{;N?szbeThW zgx<UURL>rKiGCeTRVbvmX{j+OB0FwR+eN+95%+pu8oOF!7H<?IyCpMtJA=0ogdRVU zLwJLKBa3(|%L4TZ*f*m%SVt>pD(DCm^tbSFI~wiUFvF3RP`IH<(UnlFs71^xisvp- zX&G5)Aj%L570Hj$2Z9~+oFEl4lz&QPas=S*WFyNz%r>^SRt{XbQ7)i<N^)SMKt_p0 zDPzGN-%lp&_Pk;04BgH?c{=aRJ?q(QU9+6bd@w}7ptS?Akn~Le%@f6T$?$~6A(O>y zKj47Nx9+Cr+ir4cuU^~qY<HzPe`7v);njEWf@^$qiO;ud0q&gP9@*>#09?3c-?(O9 zh=4AX;!9=SNzpo!8uTf>&y#v~j)KXs$u)nPtl>Sak;SJ+OsUsVG{RiXm$kK8kY*$s zwTFfn$*kQ@wvs8@mlKzZE;}Z^)gi|sG~Cb7H9YO~cwvt3AqeaSP30#_hjd)O1-pW} zCSj#rpqUn&sjN^`TV+j%0zGp`Yzq7eg@8Y{1{^A(yJ3;6?jd?he{cuRGWNkTV#LuC zmuRt&%Ry!sQDsPa)c$plLF^%dsc@UoAxKNDqQ&fxKVzvKZpkzzAO;+O>0~04V>d%r z&T!8Gy*ioIEQBFb?k*fi;tOpgzVZDuiu?lzCK@#|BXEKqX4aoa`(F}M@YLF;V^224 z`}j&)7h7^1u$WvyC&UjfMDYW<lA%t~(XgsFtUw>eq*wJ=R7ipm6h{ZTxJex&$D3G= z26BMZpHfE3C(5R%M6&XaG{FdQ`^>>9CSe6c1Xw&QY<%3N^kit(Yq&%^RD&ZQG@Erl z9Fq7T^kSV(Vn+M}F@*lfR56)0O@^+I(1p-*xl?pCgHM4hJ#|aBh9>a+2JNMDbW3w} z8+#GgSrieVXoo4<`{8i4S+C<JEv^{*>J?SjxSH+=Y*(p|&vT?}18%)eS3c>2r{rKh z2Qc`4YM6iI*0;U8N;MS+IKpgnLznM}@cjz4L8H^RN<|kP)EAV|cM*=_vr39?(z;Z) zLmBM~rXj@vUKm=F&{~YHo-Pp~{!L_)FeCBT3r5i}5udOMW7)B@W49@C5&iL*Y}~qI N8e=c5ck_ld{QtVWK1l!o literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/_compat.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/_compat.py new file mode 100644 index 00000000..25da473c --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/_compat.py @@ -0,0 +1,31 @@ +# 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 absolute_import, division, print_function + +import sys + + +PY2 = sys.version_info[0] == 2 +PY3 = sys.version_info[0] == 3 + +# flake8: noqa + +if PY3: + string_types = (str,) +else: + string_types = (basestring,) + + +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(meta): + def __new__(cls, name, this_bases, d): + return meta(name, bases, d) + + return type.__new__(metaclass, "temporary_class", (), {}) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/_structures.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/_structures.py new file mode 100644 index 00000000..68dcca63 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/_structures.py @@ -0,0 +1,68 @@ +# 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 absolute_import, division, print_function + + +class Infinity(object): + def __repr__(self): + return "Infinity" + + def __hash__(self): + return hash(repr(self)) + + def __lt__(self, other): + return False + + def __le__(self, other): + return False + + def __eq__(self, other): + return isinstance(other, self.__class__) + + def __ne__(self, other): + return not isinstance(other, self.__class__) + + def __gt__(self, other): + return True + + def __ge__(self, other): + return True + + def __neg__(self): + return NegativeInfinity + + +Infinity = Infinity() + + +class NegativeInfinity(object): + def __repr__(self): + return "-Infinity" + + def __hash__(self): + return hash(repr(self)) + + def __lt__(self, other): + return True + + def __le__(self, other): + return True + + def __eq__(self, other): + return isinstance(other, self.__class__) + + def __ne__(self, other): + return not isinstance(other, self.__class__) + + def __gt__(self, other): + return False + + def __ge__(self, other): + return False + + def __neg__(self): + return Infinity + + +NegativeInfinity = NegativeInfinity() diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/markers.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/markers.py new file mode 100644 index 00000000..54824768 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/markers.py @@ -0,0 +1,296 @@ +# 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 absolute_import, division, print_function + +import operator +import os +import platform +import sys + +from pip._vendor.pyparsing import ParseException, ParseResults, stringStart, stringEnd +from pip._vendor.pyparsing import ZeroOrMore, Group, Forward, QuotedString +from pip._vendor.pyparsing import Literal as L # noqa + +from ._compat import string_types +from .specifiers import Specifier, InvalidSpecifier + + +__all__ = [ + "InvalidMarker", + "UndefinedComparison", + "UndefinedEnvironmentName", + "Marker", + "default_environment", +] + + +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 Node(object): + def __init__(self, value): + self.value = value + + def __str__(self): + return str(self.value) + + def __repr__(self): + return "<{0}({1!r})>".format(self.__class__.__name__, str(self)) + + def serialize(self): + raise NotImplementedError + + +class Variable(Node): + def serialize(self): + return str(self) + + +class Value(Node): + def serialize(self): + return '"{0}"'.format(self) + + +class Op(Node): + def serialize(self): + return str(self) + + +VARIABLE = ( + L("implementation_version") + | L("platform_python_implementation") + | L("implementation_name") + | L("python_full_version") + | L("platform_release") + | L("platform_version") + | L("platform_machine") + | L("platform_system") + | L("python_version") + | L("sys_platform") + | L("os_name") + | L("os.name") + | L("sys.platform") # PEP-345 + | L("platform.version") # PEP-345 + | L("platform.machine") # PEP-345 + | L("platform.python_implementation") # PEP-345 + | L("python_implementation") # PEP-345 + | L("extra") # undocumented setuptools legacy +) +ALIASES = { + "os.name": "os_name", + "sys.platform": "sys_platform", + "platform.version": "platform_version", + "platform.machine": "platform_machine", + "platform.python_implementation": "platform_python_implementation", + "python_implementation": "platform_python_implementation", +} +VARIABLE.setParseAction(lambda s, l, t: Variable(ALIASES.get(t[0], t[0]))) + +VERSION_CMP = ( + L("===") | L("==") | L(">=") | L("<=") | L("!=") | L("~=") | L(">") | L("<") +) + +MARKER_OP = VERSION_CMP | L("not in") | L("in") +MARKER_OP.setParseAction(lambda s, l, t: Op(t[0])) + +MARKER_VALUE = QuotedString("'") | QuotedString('"') +MARKER_VALUE.setParseAction(lambda s, l, t: Value(t[0])) + +BOOLOP = L("and") | L("or") + +MARKER_VAR = VARIABLE | MARKER_VALUE + +MARKER_ITEM = Group(MARKER_VAR + MARKER_OP + MARKER_VAR) +MARKER_ITEM.setParseAction(lambda s, l, t: tuple(t[0])) + +LPAREN = L("(").suppress() +RPAREN = L(")").suppress() + +MARKER_EXPR = Forward() +MARKER_ATOM = MARKER_ITEM | Group(LPAREN + MARKER_EXPR + RPAREN) +MARKER_EXPR << MARKER_ATOM + ZeroOrMore(BOOLOP + MARKER_EXPR) + +MARKER = stringStart + MARKER_EXPR + stringEnd + + +def _coerce_parse_result(results): + if isinstance(results, ParseResults): + return [_coerce_parse_result(i) for i in results] + else: + return results + + +def _format_marker(marker, first=True): + assert isinstance(marker, (list, tuple, string_types)) + + # 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 = { + "in": lambda lhs, rhs: lhs in rhs, + "not in": lambda lhs, rhs: lhs not in rhs, + "<": operator.lt, + "<=": operator.le, + "==": operator.eq, + "!=": operator.ne, + ">=": operator.ge, + ">": operator.gt, +} + + +def _eval_op(lhs, op, rhs): + try: + spec = Specifier("".join([op.serialize(), rhs])) + except InvalidSpecifier: + pass + else: + return spec.contains(lhs) + + oper = _operators.get(op.serialize()) + if oper is None: + raise UndefinedComparison( + "Undefined {0!r} on {1!r} and {2!r}.".format(op, lhs, rhs) + ) + + return oper(lhs, rhs) + + +_undefined = object() + + +def _get_env(environment, name): + value = environment.get(name, _undefined) + + if value is _undefined: + raise UndefinedEnvironmentName( + "{0!r} does not exist in evaluation environment.".format(name) + ) + + return value + + +def _evaluate_markers(markers, environment): + groups = [[]] + + for marker in markers: + assert isinstance(marker, (list, tuple, string_types)) + + if isinstance(marker, list): + groups[-1].append(_evaluate_markers(marker, environment)) + elif isinstance(marker, tuple): + lhs, op, rhs = marker + + if isinstance(lhs, Variable): + lhs_value = _get_env(environment, lhs.value) + rhs_value = rhs.value + else: + lhs_value = lhs.value + rhs_value = _get_env(environment, rhs.value) + + groups[-1].append(_eval_op(lhs_value, op, rhs_value)) + else: + assert marker in ["and", "or"] + if marker == "or": + groups.append([]) + + return any(all(item) for item in groups) + + +def format_full_version(info): + version = "{0.major}.{0.minor}.{0.micro}".format(info) + kind = info.releaselevel + if kind != "final": + version += kind[0] + str(info.serial) + return version + + +def default_environment(): + if hasattr(sys, "implementation"): + iver = format_full_version(sys.implementation.version) + implementation_name = sys.implementation.name + else: + iver = "0" + 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": platform.python_version()[:3], + "sys_platform": sys.platform, + } + + +class Marker(object): + def __init__(self, marker): + try: + self._markers = _coerce_parse_result(MARKER.parseString(marker)) + except ParseException as e: + err_str = "Invalid marker: {0!r}, parse error at {1!r}".format( + marker, marker[e.loc : e.loc + 8] + ) + raise InvalidMarker(err_str) + + def __str__(self): + return _format_marker(self._markers) + + def __repr__(self): + return "<Marker({0!r})>".format(str(self)) + + def evaluate(self, environment=None): + """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 environment is determined from the current Python process. + """ + current_environment = default_environment() + if environment is not None: + current_environment.update(environment) + + return _evaluate_markers(self._markers, current_environment) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/requirements.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/requirements.py new file mode 100644 index 00000000..dbc5f11d --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/requirements.py @@ -0,0 +1,138 @@ +# 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 absolute_import, division, print_function + +import string +import re + +from pip._vendor.pyparsing import stringStart, stringEnd, originalTextFor, ParseException +from pip._vendor.pyparsing import ZeroOrMore, Word, Optional, Regex, Combine +from pip._vendor.pyparsing import Literal as L # noqa +from pip._vendor.six.moves.urllib import parse as urlparse + +from .markers import MARKER_EXPR, Marker +from .specifiers import LegacySpecifier, Specifier, SpecifierSet + + +class InvalidRequirement(ValueError): + """ + An invalid requirement was found, users should refer to PEP 508. + """ + + +ALPHANUM = Word(string.ascii_letters + string.digits) + +LBRACKET = L("[").suppress() +RBRACKET = L("]").suppress() +LPAREN = L("(").suppress() +RPAREN = L(")").suppress() +COMMA = L(",").suppress() +SEMICOLON = L(";").suppress() +AT = L("@").suppress() + +PUNCTUATION = Word("-_.") +IDENTIFIER_END = ALPHANUM | (ZeroOrMore(PUNCTUATION) + ALPHANUM) +IDENTIFIER = Combine(ALPHANUM + ZeroOrMore(IDENTIFIER_END)) + +NAME = IDENTIFIER("name") +EXTRA = IDENTIFIER + +URI = Regex(r"[^ ]+")("url") +URL = AT + URI + +EXTRAS_LIST = EXTRA + ZeroOrMore(COMMA + EXTRA) +EXTRAS = (LBRACKET + Optional(EXTRAS_LIST) + RBRACKET)("extras") + +VERSION_PEP440 = Regex(Specifier._regex_str, re.VERBOSE | re.IGNORECASE) +VERSION_LEGACY = Regex(LegacySpecifier._regex_str, re.VERBOSE | re.IGNORECASE) + +VERSION_ONE = VERSION_PEP440 ^ VERSION_LEGACY +VERSION_MANY = Combine( + VERSION_ONE + ZeroOrMore(COMMA + VERSION_ONE), joinString=",", adjacent=False +)("_raw_spec") +_VERSION_SPEC = Optional(((LPAREN + VERSION_MANY + RPAREN) | VERSION_MANY)) +_VERSION_SPEC.setParseAction(lambda s, l, t: t._raw_spec or "") + +VERSION_SPEC = originalTextFor(_VERSION_SPEC)("specifier") +VERSION_SPEC.setParseAction(lambda s, l, t: t[1]) + +MARKER_EXPR = originalTextFor(MARKER_EXPR())("marker") +MARKER_EXPR.setParseAction( + lambda s, l, t: Marker(s[t._original_start : t._original_end]) +) +MARKER_SEPARATOR = SEMICOLON +MARKER = MARKER_SEPARATOR + MARKER_EXPR + +VERSION_AND_MARKER = VERSION_SPEC + Optional(MARKER) +URL_AND_MARKER = URL + Optional(MARKER) + +NAMED_REQUIREMENT = NAME + Optional(EXTRAS) + (URL_AND_MARKER | VERSION_AND_MARKER) + +REQUIREMENT = stringStart + NAMED_REQUIREMENT + stringEnd +# pyparsing isn't thread safe during initialization, so we do it eagerly, see +# issue #104 +REQUIREMENT.parseString("x[]") + + +class Requirement(object): + """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): + try: + req = REQUIREMENT.parseString(requirement_string) + except ParseException as e: + raise InvalidRequirement( + 'Parse error at "{0!r}": {1}'.format( + requirement_string[e.loc : e.loc + 8], e.msg + ) + ) + + self.name = req.name + if req.url: + parsed_url = urlparse.urlparse(req.url) + if parsed_url.scheme == "file": + if urlparse.urlunparse(parsed_url) != req.url: + raise InvalidRequirement("Invalid URL given") + elif not (parsed_url.scheme and parsed_url.netloc) or ( + not parsed_url.scheme and not parsed_url.netloc + ): + raise InvalidRequirement("Invalid URL: {0}".format(req.url)) + self.url = req.url + else: + self.url = None + self.extras = set(req.extras.asList() if req.extras else []) + self.specifier = SpecifierSet(req.specifier) + self.marker = req.marker if req.marker else None + + def __str__(self): + parts = [self.name] + + if self.extras: + parts.append("[{0}]".format(",".join(sorted(self.extras)))) + + if self.specifier: + parts.append(str(self.specifier)) + + if self.url: + parts.append("@ {0}".format(self.url)) + if self.marker: + parts.append(" ") + + if self.marker: + parts.append("; {0}".format(self.marker)) + + return "".join(parts) + + def __repr__(self): + return "<Requirement({0!r})>".format(str(self)) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/specifiers.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/specifiers.py new file mode 100644 index 00000000..743576a0 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/specifiers.py @@ -0,0 +1,749 @@ +# 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 absolute_import, division, print_function + +import abc +import functools +import itertools +import re + +from ._compat import string_types, with_metaclass +from .version import Version, LegacyVersion, parse + + +class InvalidSpecifier(ValueError): + """ + An invalid specifier was found, users should refer to PEP 440. + """ + + +class BaseSpecifier(with_metaclass(abc.ABCMeta, object)): + @abc.abstractmethod + def __str__(self): + """ + Returns the str representation of this Specifier like object. This + should be representative of the Specifier itself. + """ + + @abc.abstractmethod + def __hash__(self): + """ + Returns a hash value for this Specifier like object. + """ + + @abc.abstractmethod + def __eq__(self, other): + """ + Returns a boolean representing whether or not the two Specifier like + objects are equal. + """ + + @abc.abstractmethod + def __ne__(self, other): + """ + Returns a boolean representing whether or not the two Specifier like + objects are not equal. + """ + + @abc.abstractproperty + def prereleases(self): + """ + Returns whether or not pre-releases as a whole are allowed by this + specifier. + """ + + @prereleases.setter + def prereleases(self, value): + """ + Sets whether or not pre-releases as a whole are allowed by this + specifier. + """ + + @abc.abstractmethod + def contains(self, item, prereleases=None): + """ + Determines if the given item is contained within this specifier. + """ + + @abc.abstractmethod + def filter(self, iterable, prereleases=None): + """ + Takes an iterable of items and filters them so that only items which + are contained within this specifier are allowed in it. + """ + + +class _IndividualSpecifier(BaseSpecifier): + + _operators = {} + + def __init__(self, spec="", prereleases=None): + match = self._regex.search(spec) + if not match: + raise InvalidSpecifier("Invalid specifier: '{0}'".format(spec)) + + self._spec = (match.group("operator").strip(), match.group("version").strip()) + + # Store whether or not this Specifier should accept prereleases + self._prereleases = prereleases + + def __repr__(self): + pre = ( + ", prereleases={0!r}".format(self.prereleases) + if self._prereleases is not None + else "" + ) + + return "<{0}({1!r}{2})>".format(self.__class__.__name__, str(self), pre) + + def __str__(self): + return "{0}{1}".format(*self._spec) + + def __hash__(self): + return hash(self._spec) + + def __eq__(self, other): + if isinstance(other, string_types): + try: + other = self.__class__(other) + except InvalidSpecifier: + return NotImplemented + elif not isinstance(other, self.__class__): + return NotImplemented + + return self._spec == other._spec + + def __ne__(self, other): + if isinstance(other, string_types): + try: + other = self.__class__(other) + except InvalidSpecifier: + return NotImplemented + elif not isinstance(other, self.__class__): + return NotImplemented + + return self._spec != other._spec + + def _get_operator(self, op): + return getattr(self, "_compare_{0}".format(self._operators[op])) + + def _coerce_version(self, version): + if not isinstance(version, (LegacyVersion, Version)): + version = parse(version) + return version + + @property + def operator(self): + return self._spec[0] + + @property + def version(self): + return self._spec[1] + + @property + def prereleases(self): + return self._prereleases + + @prereleases.setter + def prereleases(self, value): + self._prereleases = value + + def __contains__(self, item): + return self.contains(item) + + def contains(self, item, prereleases=None): + # Determine if prereleases are to be allowed or not. + if prereleases is None: + prereleases = self.prereleases + + # Normalize item to a Version or LegacyVersion, this allows us to have + # a shortcut for ``"2.0" in Specifier(">=2") + item = self._coerce_version(item) + + # Determine if we should be supporting prereleases in this specifier + # or not, if we do not support prereleases than we can short circuit + # logic if this version is a prereleases. + if item.is_prerelease and not prereleases: + return False + + # Actually do the comparison to determine if this item is contained + # within this Specifier or not. + return self._get_operator(self.operator)(item, self.version) + + def filter(self, iterable, prereleases=None): + yielded = False + found_prereleases = [] + + kw = {"prereleases": prereleases if prereleases is not None else True} + + # Attempt to iterate over all the values in the iterable and if any of + # them match, yield them. + for version in iterable: + parsed_version = self._coerce_version(version) + + if self.contains(parsed_version, **kw): + # If our version is a prerelease, and we were not set to allow + # prereleases, then we'll store it for later incase nothing + # else matches this specifier. + if parsed_version.is_prerelease and not ( + prereleases or self.prereleases + ): + found_prereleases.append(version) + # Either this is not a prerelease, or we should have been + # accepting prereleases from the beginning. + else: + yielded = True + yield version + + # Now that we've iterated over everything, determine if we've yielded + # any values, and if we have not and we have any prereleases stored up + # then we will go ahead and yield the prereleases. + if not yielded and found_prereleases: + for version in found_prereleases: + yield version + + +class LegacySpecifier(_IndividualSpecifier): + + _regex_str = r""" + (?P<operator>(==|!=|<=|>=|<|>)) + \s* + (?P<version> + [^,;\s)]* # Since this is a "legacy" specifier, and the version + # string can be just about anything, we match everything + # except for whitespace, a semi-colon for marker support, + # a closing paren since versions can be enclosed in + # them, and a comma since it's a version separator. + ) + """ + + _regex = re.compile(r"^\s*" + _regex_str + r"\s*$", re.VERBOSE | re.IGNORECASE) + + _operators = { + "==": "equal", + "!=": "not_equal", + "<=": "less_than_equal", + ">=": "greater_than_equal", + "<": "less_than", + ">": "greater_than", + } + + def _coerce_version(self, version): + if not isinstance(version, LegacyVersion): + version = LegacyVersion(str(version)) + return version + + def _compare_equal(self, prospective, spec): + return prospective == self._coerce_version(spec) + + def _compare_not_equal(self, prospective, spec): + return prospective != self._coerce_version(spec) + + def _compare_less_than_equal(self, prospective, spec): + return prospective <= self._coerce_version(spec) + + def _compare_greater_than_equal(self, prospective, spec): + return prospective >= self._coerce_version(spec) + + def _compare_less_than(self, prospective, spec): + return prospective < self._coerce_version(spec) + + def _compare_greater_than(self, prospective, spec): + return prospective > self._coerce_version(spec) + + +def _require_version_compare(fn): + @functools.wraps(fn) + def wrapped(self, prospective, spec): + if not isinstance(prospective, Version): + return False + return fn(self, prospective, spec) + + return wrapped + + +class Specifier(_IndividualSpecifier): + + _regex_str = r""" + (?P<operator>(~=|==|!=|<=|>=|<|>|===)) + (?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]* # We just match everything, except for whitespace + # since we are only testing for strict identity. + ) + | + (?: + # 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 + (?: # pre release + [-_\.]? + (a|b|c|rc|alpha|beta|pre|preview) + [-_\.]? + [0-9]* + )? + (?: # post release + (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*) + )? + + # You cannot use a wild card and a dev or local version + # together so group them with a | and make them optional. + (?: + (?:[-_\.]?dev[-_\.]?[0-9]*)? # dev release + (?:\+[a-z0-9]+(?:[-_\.][a-z0-9]+)*)? # local + | + \.\* # Wild card syntax of .* + )? + ) + | + (?: + # 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 + [-_\.]? + (a|b|c|rc|alpha|beta|pre|preview) + [-_\.]? + [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 + [-_\.]? + (a|b|c|rc|alpha|beta|pre|preview) + [-_\.]? + [0-9]* + )? + (?: # post release + (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*) + )? + (?:[-_\.]?dev[-_\.]?[0-9]*)? # dev release + ) + ) + """ + + _regex = re.compile(r"^\s*" + _regex_str + r"\s*$", re.VERBOSE | re.IGNORECASE) + + _operators = { + "~=": "compatible", + "==": "equal", + "!=": "not_equal", + "<=": "less_than_equal", + ">=": "greater_than_equal", + "<": "less_than", + ">": "greater_than", + "===": "arbitrary", + } + + @_require_version_compare + def _compare_compatible(self, prospective, spec): + # 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 post and dev releases and we want to treat the pre-release as + # it's own separate segment. + prefix = ".".join( + list( + itertools.takewhile( + lambda x: (not x.startswith("post") and not x.startswith("dev")), + _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 + ) + + @_require_version_compare + def _compare_equal(self, prospective, spec): + # We need special logic to handle prefix matching + if spec.endswith(".*"): + # In the case of prefix matching we want to ignore local segment. + prospective = Version(prospective.public) + # Split the spec out by dots, and pretend that there is an implicit + # dot in between a release segment and a pre-release segment. + spec = _version_split(spec[:-2]) # Remove the trailing .* + + # Split the prospective version out by dots, and pretend that there + # is an implicit dot in between a release segment and a pre-release + # segment. + prospective = _version_split(str(prospective)) + + # 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. + prospective = prospective[: len(spec)] + + # Pad out our two sides with zeros so that they both equal the same + # length. + spec, prospective = _pad_version(spec, prospective) + else: + # Convert our spec string into a Version + 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.local: + prospective = Version(prospective.public) + + return prospective == spec + + @_require_version_compare + def _compare_not_equal(self, prospective, spec): + return not self._compare_equal(prospective, spec) + + @_require_version_compare + def _compare_less_than_equal(self, prospective, spec): + return prospective <= Version(spec) + + @_require_version_compare + def _compare_greater_than_equal(self, prospective, spec): + return prospective >= Version(spec) + + @_require_version_compare + def _compare_less_than(self, prospective, spec): + # Convert our spec to a Version instance, since we'll want to work with + # it as a version. + spec = Version(spec) + + # 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: + if Version(prospective.base_version) == Version(spec.base_version): + 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 + + @_require_version_compare + def _compare_greater_than(self, prospective, spec): + # Convert our spec to a Version instance, since we'll want to work with + # it as a version. + spec = Version(spec) + + # 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: + if Version(prospective.base_version) == Version(spec.base_version): + 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: + if Version(prospective.base_version) == Version(spec.base_version): + 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, spec): + return str(prospective).lower() == str(spec).lower() + + @property + def prereleases(self): + # 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 + + # Look at all of our specifiers and determine if they are inclusive + # operators, and if they are if they are including an explicit + # prerelease. + operator, version = self._spec + if operator in ["==", ">=", "<=", "~=", "==="]: + # The == specifier can include a trailing .*, if it does we + # want to remove before parsing. + if operator == "==" and version.endswith(".*"): + version = version[:-2] + + # Parse the version, and if it is a pre-release than this + # specifier allows pre-releases. + if parse(version).is_prerelease: + return True + + return False + + @prereleases.setter + def prereleases(self, value): + self._prereleases = value + + +_prefix_regex = re.compile(r"^([0-9]+)((?:a|b|c|rc)[0-9]+)$") + + +def _version_split(version): + result = [] + for item in version.split("."): + match = _prefix_regex.search(item) + if match: + result.extend(match.groups()) + else: + result.append(item) + return result + + +def _pad_version(left, right): + 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(*left_split)), list(itertools.chain(*right_split))) + + +class SpecifierSet(BaseSpecifier): + def __init__(self, specifiers="", prereleases=None): + # Split on , to break each indidivual specifier into it's own item, and + # strip each item to remove leading/trailing whitespace. + specifiers = [s.strip() for s in specifiers.split(",") if s.strip()] + + # Parsed each individual specifier, attempting first to make it a + # Specifier and falling back to a LegacySpecifier. + parsed = set() + for specifier in specifiers: + try: + parsed.add(Specifier(specifier)) + except InvalidSpecifier: + parsed.add(LegacySpecifier(specifier)) + + # Turn our parsed specifiers into a frozen set and save them for later. + self._specs = frozenset(parsed) + + # Store our prereleases value so we can use it later to determine if + # we accept prereleases or not. + self._prereleases = prereleases + + def __repr__(self): + pre = ( + ", prereleases={0!r}".format(self.prereleases) + if self._prereleases is not None + else "" + ) + + return "<SpecifierSet({0!r}{1})>".format(str(self), pre) + + def __str__(self): + return ",".join(sorted(str(s) for s in self._specs)) + + def __hash__(self): + return hash(self._specs) + + def __and__(self, other): + if isinstance(other, string_types): + 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: + specifier._prereleases = self._prereleases + elif 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): + if isinstance(other, string_types): + other = SpecifierSet(other) + elif isinstance(other, _IndividualSpecifier): + other = SpecifierSet(str(other)) + elif not isinstance(other, SpecifierSet): + return NotImplemented + + return self._specs == other._specs + + def __ne__(self, other): + if isinstance(other, string_types): + other = SpecifierSet(other) + elif isinstance(other, _IndividualSpecifier): + other = SpecifierSet(str(other)) + elif not isinstance(other, SpecifierSet): + return NotImplemented + + return self._specs != other._specs + + def __len__(self): + return len(self._specs) + + def __iter__(self): + return iter(self._specs) + + @property + def prereleases(self): + # 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. + return any(s.prereleases for s in self._specs) + + @prereleases.setter + def prereleases(self, value): + self._prereleases = value + + def __contains__(self, item): + return self.contains(item) + + def contains(self, item, prereleases=None): + # Ensure that our item is a Version or LegacyVersion instance. + if not isinstance(item, (LegacyVersion, Version)): + item = parse(item) + + # 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: + prereleases = self.prereleases + + # We can determine if we're going to allow pre-releases by looking to + # see if any of the underlying items supports them. If none of them do + # and this item is a pre-release then we do not allow it and we can + # short circuit that here. + # Note: This means that 1.0.dev1 would not be contained in something + # like >=1.0.devabc however it would be in >=1.0.debabc,>0.0.dev0 + if not prereleases and item.is_prerelease: + return False + + # We simply dispatch to the underlying specs here to make sure that the + # given version is contained within all of them. + # Note: This use of all() here means that an empty set of specifiers + # will always return True, this is an explicit design decision. + return all(s.contains(item, prereleases=prereleases) for s in self._specs) + + def filter(self, iterable, prereleases=None): + # 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: + 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: + for spec in self._specs: + iterable = spec.filter(iterable, prereleases=bool(prereleases)) + return iterable + # If we do not have any specifiers, then we need to have a rough filter + # which will filter out any pre-releases, unless there are no final + # releases, and which will filter out LegacyVersion in general. + else: + filtered = [] + found_prereleases = [] + + for item in iterable: + # Ensure that we some kind of Version class for this item. + if not isinstance(item, (LegacyVersion, Version)): + parsed_version = parse(item) + else: + parsed_version = item + + # Filter out any item which is parsed as a LegacyVersion + if isinstance(parsed_version, LegacyVersion): + continue + + # Store any item which is a pre-release for later unless we've + # already found a final version or we are accepting prereleases + if parsed_version.is_prerelease and not prereleases: + if not filtered: + found_prereleases.append(item) + else: + filtered.append(item) + + # If we've found no items except for pre-releases, then we'll go + # ahead and use the pre-releases + if not filtered and found_prereleases and prereleases is None: + return found_prereleases + + return filtered diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/utils.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/utils.py new file mode 100644 index 00000000..88418786 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/utils.py @@ -0,0 +1,57 @@ +# 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 absolute_import, division, print_function + +import re + +from .version import InvalidVersion, Version + + +_canonicalize_regex = re.compile(r"[-_.]+") + + +def canonicalize_name(name): + # This is taken from PEP 503. + return _canonicalize_regex.sub("-", name).lower() + + +def canonicalize_version(version): + """ + This is very similar to Version.__str__, but has one subtle differences + with the way it handles the release segment. + """ + + try: + version = Version(version) + except InvalidVersion: + # Legacy versions cannot be normalized + return version + + parts = [] + + # Epoch + if version.epoch != 0: + parts.append("{0}!".format(version.epoch)) + + # Release segment + # NB: This strips trailing '.0's to normalize + parts.append(re.sub(r"(\.0)+$", "", ".".join(str(x) for x in version.release))) + + # Pre-release + if version.pre is not None: + parts.append("".join(str(x) for x in version.pre)) + + # Post-release + if version.post is not None: + parts.append(".post{0}".format(version.post)) + + # Development release + if version.dev is not None: + parts.append(".dev{0}".format(version.dev)) + + # Local version segment + if version.local is not None: + parts.append("+{0}".format(version.local)) + + return "".join(parts) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/version.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/version.py new file mode 100644 index 00000000..95157a1f --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/packaging/version.py @@ -0,0 +1,420 @@ +# 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 absolute_import, division, print_function + +import collections +import itertools +import re + +from ._structures import Infinity + + +__all__ = ["parse", "Version", "LegacyVersion", "InvalidVersion", "VERSION_PATTERN"] + + +_Version = collections.namedtuple( + "_Version", ["epoch", "release", "dev", "pre", "post", "local"] +) + + +def parse(version): + """ + Parse the given version string and return either a :class:`Version` object + or a :class:`LegacyVersion` object depending on if the given version is + a valid PEP 440 version or a legacy version. + """ + try: + return Version(version) + except InvalidVersion: + return LegacyVersion(version) + + +class InvalidVersion(ValueError): + """ + An invalid version was found, users should refer to PEP 440. + """ + + +class _BaseVersion(object): + def __hash__(self): + return hash(self._key) + + def __lt__(self, other): + return self._compare(other, lambda s, o: s < o) + + def __le__(self, other): + return self._compare(other, lambda s, o: s <= o) + + def __eq__(self, other): + return self._compare(other, lambda s, o: s == o) + + def __ge__(self, other): + return self._compare(other, lambda s, o: s >= o) + + def __gt__(self, other): + return self._compare(other, lambda s, o: s > o) + + def __ne__(self, other): + return self._compare(other, lambda s, o: s != o) + + def _compare(self, other, method): + if not isinstance(other, _BaseVersion): + return NotImplemented + + return method(self._key, other._key) + + +class LegacyVersion(_BaseVersion): + def __init__(self, version): + self._version = str(version) + self._key = _legacy_cmpkey(self._version) + + def __str__(self): + return self._version + + def __repr__(self): + return "<LegacyVersion({0})>".format(repr(str(self))) + + @property + def public(self): + return self._version + + @property + def base_version(self): + return self._version + + @property + def epoch(self): + return -1 + + @property + def release(self): + return None + + @property + def pre(self): + return None + + @property + def post(self): + return None + + @property + def dev(self): + return None + + @property + def local(self): + return None + + @property + def is_prerelease(self): + return False + + @property + def is_postrelease(self): + return False + + @property + def is_devrelease(self): + return False + + +_legacy_version_component_re = re.compile(r"(\d+ | [a-z]+ | \.| -)", re.VERBOSE) + +_legacy_version_replacement_map = { + "pre": "c", + "preview": "c", + "-": "final-", + "rc": "c", + "dev": "@", +} + + +def _parse_version_parts(s): + for part in _legacy_version_component_re.split(s): + part = _legacy_version_replacement_map.get(part, part) + + if not part or part == ".": + continue + + if part[:1] in "0123456789": + # pad for numeric comparison + yield part.zfill(8) + else: + yield "*" + part + + # ensure that alpha/beta/candidate are before final + yield "*final" + + +def _legacy_cmpkey(version): + # We hardcode an epoch of -1 here. A PEP 440 version can only have a epoch + # greater than or equal to 0. This will effectively put the LegacyVersion, + # which uses the defacto standard originally implemented by setuptools, + # as before all PEP 440 versions. + epoch = -1 + + # This scheme is taken from pkg_resources.parse_version setuptools prior to + # it's adoption of the packaging library. + parts = [] + for part in _parse_version_parts(version.lower()): + if part.startswith("*"): + # remove "-" before a prerelease tag + if part < "*final": + while parts and parts[-1] == "*final-": + parts.pop() + + # remove trailing zeros from each series of numeric parts + while parts and parts[-1] == "00000000": + parts.pop() + + parts.append(part) + parts = tuple(parts) + + return epoch, parts + + +# Deliberately not anchored to the start and end of the string, to make it +# easier for 3rd party code to reuse +VERSION_PATTERN = r""" + v? + (?: + (?:(?P<epoch>[0-9]+)!)? # epoch + (?P<release>[0-9]+(?:\.[0-9]+)*) # release segment + (?P<pre> # pre-release + [-_\.]? + (?P<pre_l>(a|b|c|rc|alpha|beta|pre|preview)) + [-_\.]? + (?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>[a-z0-9]+(?:[-_\.][a-z0-9]+)*))? # local version +""" + + +class Version(_BaseVersion): + + _regex = re.compile(r"^\s*" + VERSION_PATTERN + r"\s*$", re.VERBOSE | re.IGNORECASE) + + def __init__(self, version): + # Validate the version and parse it into pieces + match = self._regex.search(version) + if not match: + raise InvalidVersion("Invalid version: '{0}'".format(version)) + + # Store the parsed out pieces of the version + self._version = _Version( + epoch=int(match.group("epoch")) if match.group("epoch") else 0, + release=tuple(int(i) for i in match.group("release").split(".")), + pre=_parse_letter_version(match.group("pre_l"), match.group("pre_n")), + post=_parse_letter_version( + match.group("post_l"), match.group("post_n1") or match.group("post_n2") + ), + dev=_parse_letter_version(match.group("dev_l"), match.group("dev_n")), + local=_parse_local_version(match.group("local")), + ) + + # Generate a key which will be used for sorting + self._key = _cmpkey( + self._version.epoch, + self._version.release, + self._version.pre, + self._version.post, + self._version.dev, + self._version.local, + ) + + def __repr__(self): + return "<Version({0})>".format(repr(str(self))) + + def __str__(self): + parts = [] + + # Epoch + if self.epoch != 0: + parts.append("{0}!".format(self.epoch)) + + # Release segment + parts.append(".".join(str(x) for x in self.release)) + + # Pre-release + if self.pre is not None: + parts.append("".join(str(x) for x in self.pre)) + + # Post-release + if self.post is not None: + parts.append(".post{0}".format(self.post)) + + # Development release + if self.dev is not None: + parts.append(".dev{0}".format(self.dev)) + + # Local version segment + if self.local is not None: + parts.append("+{0}".format(self.local)) + + return "".join(parts) + + @property + def epoch(self): + return self._version.epoch + + @property + def release(self): + return self._version.release + + @property + def pre(self): + return self._version.pre + + @property + def post(self): + return self._version.post[1] if self._version.post else None + + @property + def dev(self): + return self._version.dev[1] if self._version.dev else None + + @property + def local(self): + if self._version.local: + return ".".join(str(x) for x in self._version.local) + else: + return None + + @property + def public(self): + return str(self).split("+", 1)[0] + + @property + def base_version(self): + parts = [] + + # Epoch + if self.epoch != 0: + parts.append("{0}!".format(self.epoch)) + + # Release segment + parts.append(".".join(str(x) for x in self.release)) + + return "".join(parts) + + @property + def is_prerelease(self): + return self.dev is not None or self.pre is not None + + @property + def is_postrelease(self): + return self.post is not None + + @property + def is_devrelease(self): + return self.dev is not None + + +def _parse_letter_version(letter, number): + if letter: + # We consider there to be an implicit 0 in a pre-release if there is + # not a numeral associated with it. + if number is None: + number = 0 + + # 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. + if letter == "alpha": + letter = "a" + elif letter == "beta": + letter = "b" + elif letter in ["c", "pre", "preview"]: + letter = "rc" + elif letter in ["rev", "r"]: + letter = "post" + + return letter, int(number) + if not letter and 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) + letter = "post" + + return letter, int(number) + + +_local_version_separators = re.compile(r"[\._-]") + + +def _parse_local_version(local): + """ + 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) + ) + + +def _cmpkey(epoch, release, pre, post, dev, local): + # When we compare a release version, we want to compare it with all of the + # trailing zeros removed. So we'll use a reverse the list, drop all the now + # leading zeros until we come to something non zero, then take the rest + # re-reverse it back into the correct order and make it a tuple and use + # that for our sorting key. + release = tuple( + reversed(list(itertools.dropwhile(lambda x: x == 0, reversed(release)))) + ) + + # 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 = -Infinity + # Versions without a pre-release (except as noted above) should sort after + # those with one. + elif pre is None: + pre = Infinity + + # Versions without a post segment should sort before those with one. + if post is None: + post = -Infinity + + # Versions without a development segment should sort after those with one. + if dev is None: + dev = Infinity + + if local is None: + # Versions without a local segment should sort before those with one. + local = -Infinity + 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 (-Infinity, i) for i in local) + + return epoch, release, pre, post, dev, local diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/__init__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/__init__.py new file mode 100644 index 00000000..9c1a098f --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/__init__.py @@ -0,0 +1,4 @@ +"""Wrappers to build Python packages using PEP 517 hooks +""" + +__version__ = '0.5.0' diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..88cb31b547dadfe92ca25c87afb712dbfa182918 GIT binary patch literal 233 zcmX|+O$x$53`VC_QT(~XY+cw^MFkOY<5mg^LQz6>iXGHR?6iX3$c+c;)?2u8+J%Al z2!Z4y!%nBUdpr9LW9(!2mu0$zLAQ+r3z)D1OW14HtvtuuBqWLw%~RxuOkM={A8Cw= zQ+Pawr%3ZmOLgM@(&wZ8gvW?y-F((OXXJRRuASEb1ReqM7Qo#clBfV)EUB2VQs1eY xUdbg%y)vNZ-Qoj!15u1h%$^dMxD=6zZ~>%}DS$(dyfM3?$S%>`E*>aUwSUTQKyv^9 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/__pycache__/_in_process.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/__pycache__/_in_process.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..201252ad90bd43b3287ef12824354a3b8cb8f446 GIT binary patch literal 5576 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/__pycache__/build.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/__pycache__/build.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..637205d885328b11389b45a8b86b6f03f3636adc GIT binary patch literal 2715 zcmZuzU2ojR73B;+mdjnqvMk$@tt4y_A>Gs~r!9&Utr0XIY8xO>+&V~HA^}b9j3lnO zBt4v!y<2V{D!&y;-ufT<(ue+>dF@mFK~VIe=gzKe)hHJ;!?|<k&YgSDJ=~wItwmq{ zWB;qaMvn6@=h744{nu#Cf6xghaRd{*U<tD$Pq-c3#I>WBco^Nnp9D$3mb#s!W7onY zv|~5v3Qzb&H0dQh=y)P1`jfR}jX9E!*X5N9mTX9Gd{uNr_{_m<Q*=f2%t@|^p6FxT z5^sn#vHpxD*CiX@xNwr2^5%G3ToD`M>en20XtpV?i7jzm-1ypCNp6bmS0p>)mbi^Q zF8tUPufg_?ydqvd<LZ0411q;Ka6Z=f17{G=_db~Bg^07bR@GRJbUbbH@+7{0a6kU} zPu`7BtLm)TkG?~ooWlV#K|Ryer1*|uj_HQoeNdj~swyY4)FitvYi#`;c7B)@g;XQj zOb>19p^>0@6P<R(?7~?%^Qd(`$MP4*hUR0pwH`ji3_h~MfoDQ3C-re&NYj~|37VLo zIi2dfFoBwAB_&SgTKwHnbi%*iy{jkn-8!#_M|8j8JC9F~s&{@WNMu`jE=y6VyR~)p zuGQMFXQo58MXol<#}J*vL&jOe)f(PM9!c=@(Ma$iTJukIf{mSHN8>u*u!X02>$Khl zU-+$`<1&jtyJJuAHn>14TQ>Ibh9p?2Yu|zk=i8%2$4b1Gx19@0pnu6~Xsw2@+HJdS z2X^@)(w%WQ#;lDn>*;9RYkMo1YsWrT*afF^DZIaT{@|<v8ywDGJCQn7^6@lRvPq9C zmD)h0e-e447xNpxt#oW9@pGkL#(T~D&5z4QQ*K2pW@R?XM=LEMYlKynqg*!g?a$PV zu%xTi>RuD)CGGEDK4q|G0-QX_v<Zr8logHXz^zPcW!$1VF<xFCSEh%|rTOw)n+wCM z#&~t6PmMRO@={T@j5n#yr3sI+M#3>U=o{Z+*toJhHy+&!y=-)H^?&Y8%BFu=WIWut zQ6LW|iIxsqCEvcAkkDuaK~qiDNLt`6J3@!)rlMMg^ERf<Ep!fBXAuiopGQDch#Acz z^y-ILeNiYbCL3s<qBS3&oAs$wfGPG3d*FB|lCwzNW6lCuoo}@$8N$t(tM2>-S^guD z6kG5=^M_7}Ca`C~=U;r1pUL<U>L*u^?jR>R7L{z`5=mBB-pDvBWBGI>Yn@kRoFB*f zR7No#YydS>Y8GdOl9`x64S@tP(CXp9S6gt>_|~-PeEQ%(sY)4NDpgh{I5>Ft@q^C> zuJJN;(wN}vi5*>>^=i<lx^tD*L%KPI-tjo=vkf%$HfAFV4Lwxl*U)SM{tYh_pfSo$ z0PG9*`K;yjt^oKKT)Qo|h32&=xNkR5r2aTSk+OyVvM^d-xI4}wXanJ4>|pdUhPs2` z+tSk^3ib6x)J9Zx)?$Qmj9Lc!VC9##EPJ8I*6Z1dT=$7P6~SRu0>ft3fN)Isyu9XX z7G1-mY;=Z78uV;r)pcx9H>jf^7_UN^DQ;hjDig}5CE_MUF|lA8^h~q_W{QZ~L)9)8 zlkN+53_DI<I+uz}XGv(!hg<5$P&S>FBWj225{6&Nn0f=UU!XPH=m_AOECjr_0B`&_ z!8~GCOYK8pzW4qmIE|`OXL(61@xm(`B(S-6DvNp^4u?m1nW@>F507vopirh-P33O} z+yvQ(plUio9%s`+llJn?&~E14;jo(OA+C>UHGl6Tls#-M(Ot$*PV><zu~U<sOTzk+ zrW$Zv0VR@Q&DJ)#JfhDRJp@4txP{(BylC*ga9U@~n=SNi-%;CwmE6kQ=0~&w*&V@2 zb__TIbnNMF%RX|x+5$8^X!ziKXB-ggKfXsGLe08|#&0ZT`A<%zECwCp6~tfx$Va2P zet^?Wunf@47$+TEo3cJ|)mx<DlZ|GH0V<qJEagoQ|3{E5tBnV2i|x9|*so|~n5MLz zrt}rQZ8|A9ZIq@aL;=^CYVbJ*L!TgjO9qH2q4KFN@*_*w`>W5a#i}J}wMXaEKd>YO zBU`jt<R;-0mDROWjYYHRf{Q<aZK=o$BHA=nSIMdM)ghCt%&=@f1{U(RIBXcq`upl+ zN`FZ1la~trTb5%#6C#E4c5Qjb$S#qvxrA*SCd=dDy-6jeg?x|d&9bpa$hN=!a^!uY bba%ZQZic<+TF5;7WeB<Vf5y-Ydm;NTG`PFe literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/__pycache__/check.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/__pycache__/check.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4e5b2b9ce7b7092c5a52d3b8c3fd81a413ad1c58 GIT binary patch literal 4759 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/__pycache__/colorlog.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/__pycache__/colorlog.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a066546f884179ee674ba6325fd610d3b8607cca GIT binary patch literal 2880 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/__pycache__/compat.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/__pycache__/compat.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f4264bb28b187b37e16f960339b8cd1b874ea0dd GIT binary patch literal 969 zcmaJ<&2JJx6rY(LU_of`potf=2QQll)V4+rjWIDXjVAbkMng0k;4Nh-?5wj(2@O5f ztM=&M;Ke^^uAcfYc=Em3TG6yl^4^>8`F+fGtyX#ez4>7w82iE28jjf`jC2nZupR>r zV#<5mR?!oom^i?1F>nqFdIuyFKCzyJB9yQe;ySqJGv#~+M3?!MqusrJ4AaolVIQJ+ z-@}o&&{0PHr`_irFN(c4ub(v9cRdw*FP7OD%eLLN)jUHitaIjI9uh!m5~G6g3?pq~ z%Gk<+1n0AJdh^)H_(ZJO${C53_`*4Ri*#PHSL_{Dgd{tLFOCZHY}9D`+_+&pRD{fT zj8sV&8#zf8W|+?sUm8aZCPpUxY;1}Li@x4Z4Ih1Dx{5FVY`3ym(n_MFF_=eFXl#BQ z57g!s(3FkfFpNRzRuU%n?>%S@)eLWHCQDNx4Z?t)DiIN4#dw|T4Xi^>BW%REjPV#F zy@Lt4T4OBN>M^%m`3dj-%TQl1)O5A)=mHj9#AM`D^}!dKZr0Z*5t%&IXhWIIve;<# z54P(#`pXAewmxiOC->n*oZepd00cM@Ux}|*cp(-8i|{wzHK3Z5@uhaL<Y3A7%Me@D z2;Di>D!*Jp54YqJBFwAg6CES;U|lg?$8-M?Ow-dhFfN|=i>4F=poT$^Ywo1W)Km{c sokl7SqIje%W_xl?ertsFz}=lGm`}rp^cPb46_UH$6&u2pm7*(u0TD*O1^@s6 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/__pycache__/envbuild.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/__pycache__/envbuild.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fb1746a405ad371ade16e1b2e8cc9167bb0ac658 GIT binary patch literal 4153 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 MT8{6nKMywk2i`PR_y7O^ literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/__pycache__/wrappers.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/__pycache__/wrappers.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..84dc70c7cfc6c90339e96dca1d53d9df1780c1f9 GIT binary patch literal 5434 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/_in_process.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/_in_process.py new file mode 100644 index 00000000..d6524b66 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/_in_process.py @@ -0,0 +1,207 @@ +"""This is invoked in a subprocess to call the build backend hooks. + +It expects: +- Command line args: hook_name, control_dir +- Environment variable: PEP517_BUILD_BACKEND=entry.point:spec +- control_dir/input.json: + - {"kwargs": {...}} + +Results: +- control_dir/output.json + - {"return_val": ...} +""" +from glob import glob +from importlib import import_module +import os +from os.path import join as pjoin +import re +import shutil +import sys + +# This is run as a script, not a module, so it can't do a relative import +import compat + + +class BackendUnavailable(Exception): + """Raised if we cannot import the backend""" + + +def _build_backend(): + """Find and load the build backend""" + ep = os.environ['PEP517_BUILD_BACKEND'] + mod_path, _, obj_path = ep.partition(':') + try: + obj = import_module(mod_path) + except ImportError: + raise BackendUnavailable + if obj_path: + for path_part in obj_path.split('.'): + obj = getattr(obj, path_part) + return obj + + +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 prepare_metadata_for_build_wheel(metadata_directory, config_settings): + """Invoke optional prepare_metadata_for_build_wheel + + Implements a fallback by building a wheel if the hook isn't defined. + """ + backend = _build_backend() + try: + hook = backend.prepare_metadata_for_build_wheel + except AttributeError: + return _get_wheel_metadata_from_wheel(backend, metadata_directory, + config_settings) + else: + return hook(metadata_directory, config_settings) + + +WHEEL_BUILT_MARKER = 'PEP517_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( + backend, metadata_directory, config_settings): + """Build a wheel and extract the metadata from it. + + Fallback for when the build backend does not + define the 'get_wheel_metadata' hook. + """ + from zipfile import ZipFile + whl_basename = backend.build_wheel(metadata_directory, config_settings) + 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 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 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 + + +HOOK_NAMES = { + 'get_requires_for_build_wheel', + 'prepare_metadata_for_build_wheel', + 'build_wheel', + 'get_requires_for_build_sdist', + 'build_sdist', +} + + +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) + hook = globals()[hook_name] + + hook_input = compat.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: + json_out['no_backend'] = True + except GotUnsupportedOperation: + json_out['unsupported'] = True + + compat.write_json(json_out, pjoin(control_dir, 'output.json'), indent=2) + + +if __name__ == '__main__': + main() diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/build.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/build.py new file mode 100644 index 00000000..ac6c9495 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/build.py @@ -0,0 +1,108 @@ +"""Build a project using PEP 517 hooks. +""" +import argparse +import logging +import os +import contextlib +from pip._vendor import pytoml +import shutil +import errno +import tempfile + +from .envbuild import BuildEnvironment +from .wrappers import Pep517HookCaller + +log = logging.getLogger(__name__) + + +@contextlib.contextmanager +def tempdir(): + td = tempfile.mkdtemp() + try: + yield td + finally: + shutil.rmtree(td) + + +def _do_build(hooks, env, dist, dest): + get_requires_name = 'get_requires_for_build_{dist}'.format(**locals()) + get_requires = getattr(hooks, get_requires_name) + reqs = get_requires({}) + log.info('Got build requires: %s', reqs) + + env.pip_install(reqs) + log.info('Installed dynamic build dependencies') + + with tempdir() as td: + log.info('Trying to build %s in %s', dist, td) + build_name = 'build_{dist}'.format(**locals()) + build = getattr(hooks, build_name) + filename = build(td, {}) + source = os.path.join(td, filename) + shutil.move(source, os.path.join(dest, os.path.basename(filename))) + + +def mkdir_p(*args, **kwargs): + """Like `mkdir`, but does not raise an exception if the + directory already exists. + """ + try: + return os.mkdir(*args, **kwargs) + except OSError as exc: + if exc.errno != errno.EEXIST: + raise + + +def build(source_dir, dist, dest=None): + pyproject = os.path.join(source_dir, 'pyproject.toml') + dest = os.path.join(source_dir, dest or 'dist') + mkdir_p(dest) + + with open(pyproject) as f: + pyproject_data = pytoml.load(f) + # Ensure the mandatory data can be loaded + buildsys = pyproject_data['build-system'] + requires = buildsys['requires'] + backend = buildsys['build-backend'] + + hooks = Pep517HookCaller(source_dir, backend) + + with BuildEnvironment() as env: + env.pip_install(requires) + _do_build(hooks, env, dist, dest) + + +parser = argparse.ArgumentParser() +parser.add_argument( + 'source_dir', + help="A directory containing pyproject.toml", +) +parser.add_argument( + '--binary', '-b', + action='store_true', + default=False, +) +parser.add_argument( + '--source', '-s', + action='store_true', + default=False, +) +parser.add_argument( + '--out-dir', '-o', + help="Destination in which to save the builds relative to source dir", +) + + +def main(args): + # determine which dists to build + dists = list(filter(None, ( + 'sdist' if args.source or not args.binary else None, + 'wheel' if args.binary or not args.source else None, + ))) + + for dist in dists: + build(args.source_dir, dist, args.out_dir) + + +if __name__ == '__main__': + main(parser.parse_args()) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/check.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/check.py new file mode 100644 index 00000000..f4cdc6be --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/check.py @@ -0,0 +1,202 @@ +"""Check a project and backend by attempting to build using PEP 517 hooks. +""" +import argparse +import logging +import os +from os.path import isfile, join as pjoin +from pip._vendor.pytoml import TomlError, load as toml_load +import shutil +from subprocess import CalledProcessError +import sys +import tarfile +from tempfile import mkdtemp +import zipfile + +from .colorlog import enable_colourful_output +from .envbuild import BuildEnvironment +from .wrappers import Pep517HookCaller + +log = logging.getLogger(__name__) + + +def check_build_sdist(hooks, build_sys_requires): + with BuildEnvironment() as env: + try: + env.pip_install(build_sys_requires) + log.info('Installed static build dependencies') + except CalledProcessError: + log.error('Failed to install static build dependencies') + return False + + try: + reqs = hooks.get_requires_for_build_sdist({}) + log.info('Got build requires: %s', reqs) + except Exception: + log.error('Failure in get_requires_for_build_sdist', exc_info=True) + return False + + try: + env.pip_install(reqs) + log.info('Installed dynamic build dependencies') + except CalledProcessError: + log.error('Failed to install dynamic build dependencies') + return False + + td = mkdtemp() + log.info('Trying to build sdist in %s', td) + try: + try: + filename = hooks.build_sdist(td, {}) + log.info('build_sdist returned %r', filename) + except Exception: + log.info('Failure in build_sdist', exc_info=True) + return False + + if not filename.endswith('.tar.gz'): + log.error( + "Filename %s doesn't have .tar.gz extension", filename) + return False + + path = pjoin(td, filename) + if isfile(path): + log.info("Output file %s exists", path) + else: + log.error("Output file %s does not exist", path) + return False + + if tarfile.is_tarfile(path): + log.info("Output file is a tar file") + else: + log.error("Output file is not a tar file") + return False + + finally: + shutil.rmtree(td) + + return True + + +def check_build_wheel(hooks, build_sys_requires): + with BuildEnvironment() as env: + try: + env.pip_install(build_sys_requires) + log.info('Installed static build dependencies') + except CalledProcessError: + log.error('Failed to install static build dependencies') + return False + + try: + reqs = hooks.get_requires_for_build_wheel({}) + log.info('Got build requires: %s', reqs) + except Exception: + log.error('Failure in get_requires_for_build_sdist', exc_info=True) + return False + + try: + env.pip_install(reqs) + log.info('Installed dynamic build dependencies') + except CalledProcessError: + log.error('Failed to install dynamic build dependencies') + return False + + td = mkdtemp() + log.info('Trying to build wheel in %s', td) + try: + try: + filename = hooks.build_wheel(td, {}) + log.info('build_wheel returned %r', filename) + except Exception: + log.info('Failure in build_wheel', exc_info=True) + return False + + if not filename.endswith('.whl'): + log.error("Filename %s doesn't have .whl extension", filename) + return False + + path = pjoin(td, filename) + if isfile(path): + log.info("Output file %s exists", path) + else: + log.error("Output file %s does not exist", path) + return False + + if zipfile.is_zipfile(path): + log.info("Output file is a zip file") + else: + log.error("Output file is not a zip file") + return False + + finally: + shutil.rmtree(td) + + return True + + +def check(source_dir): + pyproject = pjoin(source_dir, 'pyproject.toml') + if isfile(pyproject): + log.info('Found pyproject.toml') + else: + log.error('Missing pyproject.toml') + return False + + try: + with open(pyproject) as f: + pyproject_data = toml_load(f) + # Ensure the mandatory data can be loaded + buildsys = pyproject_data['build-system'] + requires = buildsys['requires'] + backend = buildsys['build-backend'] + log.info('Loaded pyproject.toml') + except (TomlError, KeyError): + log.error("Invalid pyproject.toml", exc_info=True) + return False + + hooks = Pep517HookCaller(source_dir, backend) + + sdist_ok = check_build_sdist(hooks, requires) + wheel_ok = check_build_wheel(hooks, requires) + + if not sdist_ok: + log.warning('Sdist checks failed; scroll up to see') + if not wheel_ok: + log.warning('Wheel checks failed') + + return sdist_ok + + +def main(argv=None): + ap = argparse.ArgumentParser() + ap.add_argument( + 'source_dir', + help="A directory containing pyproject.toml") + args = ap.parse_args(argv) + + enable_colourful_output() + + ok = check(args.source_dir) + + if ok: + print(ansi('Checks passed', 'green')) + else: + print(ansi('Checks failed', 'red')) + sys.exit(1) + + +ansi_codes = { + 'reset': '\x1b[0m', + 'bold': '\x1b[1m', + 'red': '\x1b[31m', + 'green': '\x1b[32m', +} + + +def ansi(s, attr): + if os.name != 'nt' and sys.stdout.isatty(): + return ansi_codes[attr] + str(s) + ansi_codes['reset'] + else: + return str(s) + + +if __name__ == '__main__': + main() diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/colorlog.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/colorlog.py new file mode 100644 index 00000000..69c8a59d --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/colorlog.py @@ -0,0 +1,115 @@ +"""Nicer log formatting with colours. + +Code copied from Tornado, Apache licensed. +""" +# Copyright 2012 Facebook +# +# 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 logging +import sys + +try: + import curses +except ImportError: + curses = None + + +def _stderr_supports_color(): + color = False + if curses and hasattr(sys.stderr, 'isatty') and sys.stderr.isatty(): + try: + curses.setupterm() + if curses.tigetnum("colors") > 0: + color = True + except Exception: + pass + return color + + +class LogFormatter(logging.Formatter): + """Log formatter with colour support + """ + DEFAULT_COLORS = { + logging.INFO: 2, # Green + logging.WARNING: 3, # Yellow + logging.ERROR: 1, # Red + logging.CRITICAL: 1, + } + + def __init__(self, color=True, datefmt=None): + r""" + :arg bool color: Enables color support. + :arg string fmt: Log message format. + It will be applied to the attributes dict of log records. The + text between ``%(color)s`` and ``%(end_color)s`` will be colored + depending on the level if color support is on. + :arg dict colors: color mappings from logging level to terminal color + code + :arg string datefmt: Datetime format. + Used for formatting ``(asctime)`` placeholder in ``prefix_fmt``. + .. versionchanged:: 3.2 + Added ``fmt`` and ``datefmt`` arguments. + """ + logging.Formatter.__init__(self, datefmt=datefmt) + self._colors = {} + if color and _stderr_supports_color(): + # The curses module has some str/bytes confusion in + # python3. Until version 3.2.3, most methods return + # bytes, but only accept strings. In addition, we want to + # output these strings with the logging module, which + # works with unicode strings. The explicit calls to + # unicode() below are harmless in python2 but will do the + # right conversion in python 3. + fg_color = (curses.tigetstr("setaf") or + curses.tigetstr("setf") or "") + if (3, 0) < sys.version_info < (3, 2, 3): + fg_color = str(fg_color, "ascii") + + for levelno, code in self.DEFAULT_COLORS.items(): + self._colors[levelno] = str( + curses.tparm(fg_color, code), "ascii") + self._normal = str(curses.tigetstr("sgr0"), "ascii") + + scr = curses.initscr() + self.termwidth = scr.getmaxyx()[1] + curses.endwin() + else: + self._normal = '' + # Default width is usually 80, but too wide is + # worse than too narrow + self.termwidth = 70 + + def formatMessage(self, record): + mlen = len(record.message) + right_text = '{initial}-{name}'.format(initial=record.levelname[0], + name=record.name) + if mlen + len(right_text) < self.termwidth: + space = ' ' * (self.termwidth - (mlen + len(right_text))) + else: + space = ' ' + + if record.levelno in self._colors: + start_color = self._colors[record.levelno] + end_color = self._normal + else: + start_color = end_color = '' + + return record.message + space + start_color + right_text + end_color + + +def enable_colourful_output(level=logging.INFO): + handler = logging.StreamHandler() + handler.setFormatter(LogFormatter()) + logging.root.addHandler(handler) + logging.root.setLevel(level) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/compat.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/compat.py new file mode 100644 index 00000000..01c66fc7 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/compat.py @@ -0,0 +1,23 @@ +"""Handle reading and writing JSON in UTF-8, on Python 3 and 2.""" +import json +import sys + +if sys.version_info[0] >= 3: + # Python 3 + 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, 'r', encoding='utf-8') as f: + return json.load(f) + +else: + # Python 2 + def write_json(obj, path, **kwargs): + with open(path, 'wb') as f: + json.dump(obj, f, encoding='utf-8', **kwargs) + + def read_json(path): + with open(path, 'rb') as f: + return json.load(f) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/envbuild.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/envbuild.py new file mode 100644 index 00000000..f7ac5f46 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/envbuild.py @@ -0,0 +1,158 @@ +"""Build wheels/sdists by installing build deps to a temporary environment. +""" + +import os +import logging +from pip._vendor import pytoml +import shutil +from subprocess import check_call +import sys +from sysconfig import get_paths +from tempfile import mkdtemp + +from .wrappers import Pep517HookCaller + +log = logging.getLogger(__name__) + + +def _load_pyproject(source_dir): + with open(os.path.join(source_dir, 'pyproject.toml')) as f: + pyproject_data = pytoml.load(f) + buildsys = pyproject_data['build-system'] + return buildsys['requires'], buildsys['build-backend'] + + +class BuildEnvironment(object): + """Context manager to install build deps in a simple temporary environment + + Based on code I wrote for pip, which is MIT licensed. + """ + # Copyright (c) 2008-2016 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. + + path = None + + def __init__(self, cleanup=True): + self._cleanup = cleanup + + def __enter__(self): + self.path = mkdtemp(prefix='pep517-build-env-') + log.info('Temporary build environment: %s', self.path) + + self.save_path = os.environ.get('PATH', None) + self.save_pythonpath = os.environ.get('PYTHONPATH', None) + + install_scheme = 'nt' if (os.name == 'nt') else 'posix_prefix' + install_dirs = get_paths(install_scheme, vars={ + 'base': self.path, + 'platbase': self.path, + }) + + scripts = install_dirs['scripts'] + if self.save_path: + os.environ['PATH'] = scripts + os.pathsep + self.save_path + else: + os.environ['PATH'] = scripts + os.pathsep + os.defpath + + if install_dirs['purelib'] == install_dirs['platlib']: + lib_dirs = install_dirs['purelib'] + else: + lib_dirs = install_dirs['purelib'] + os.pathsep + \ + install_dirs['platlib'] + if self.save_pythonpath: + os.environ['PYTHONPATH'] = lib_dirs + os.pathsep + \ + self.save_pythonpath + else: + os.environ['PYTHONPATH'] = lib_dirs + + return self + + def pip_install(self, reqs): + """Install dependencies into this env by calling pip in a subprocess""" + if not reqs: + return + log.info('Calling pip to install %s', reqs) + check_call([ + sys.executable, '-m', 'pip', 'install', '--ignore-installed', + '--prefix', self.path] + list(reqs)) + + def __exit__(self, exc_type, exc_val, exc_tb): + needs_cleanup = ( + self._cleanup and + self.path is not None and + os.path.isdir(self.path) + ) + if needs_cleanup: + shutil.rmtree(self.path) + + if self.save_path is None: + os.environ.pop('PATH', None) + else: + os.environ['PATH'] = self.save_path + + if self.save_pythonpath is None: + os.environ.pop('PYTHONPATH', None) + else: + os.environ['PYTHONPATH'] = self.save_pythonpath + + +def build_wheel(source_dir, wheel_dir, config_settings=None): + """Build a wheel from a source directory using PEP 517 hooks. + + :param str source_dir: Source directory containing pyproject.toml + :param str wheel_dir: Target directory to create wheel in + :param dict config_settings: Options to pass to build backend + + This is a blocking function which will run pip in a subprocess to install + build requirements. + """ + if config_settings is None: + config_settings = {} + requires, backend = _load_pyproject(source_dir) + hooks = Pep517HookCaller(source_dir, backend) + + with BuildEnvironment() as env: + env.pip_install(requires) + reqs = hooks.get_requires_for_build_wheel(config_settings) + env.pip_install(reqs) + return hooks.build_wheel(wheel_dir, config_settings) + + +def build_sdist(source_dir, sdist_dir, config_settings=None): + """Build an sdist from a source directory using PEP 517 hooks. + + :param str source_dir: Source directory containing pyproject.toml + :param str sdist_dir: Target directory to place sdist in + :param dict config_settings: Options to pass to build backend + + This is a blocking function which will run pip in a subprocess to install + build requirements. + """ + if config_settings is None: + config_settings = {} + requires, backend = _load_pyproject(source_dir) + hooks = Pep517HookCaller(source_dir, backend) + + with BuildEnvironment() as env: + env.pip_install(requires) + reqs = hooks.get_requires_for_build_sdist(config_settings) + env.pip_install(reqs) + return hooks.build_sdist(sdist_dir, config_settings) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/wrappers.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/wrappers.py new file mode 100644 index 00000000..b14b8991 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pep517/wrappers.py @@ -0,0 +1,163 @@ +from contextlib import contextmanager +import os +from os.path import dirname, abspath, join as pjoin +import shutil +from subprocess import check_call +import sys +from tempfile import mkdtemp + +from . import compat + +_in_proc_script = pjoin(dirname(abspath(__file__)), '_in_process.py') + + +@contextmanager +def tempdir(): + td = mkdtemp() + try: + yield td + finally: + shutil.rmtree(td) + + +class BackendUnavailable(Exception): + """Will be raised if the backend cannot be imported in the hook process.""" + + +class UnsupportedOperation(Exception): + """May be raised by build_sdist if the backend indicates that it can't.""" + + +def default_subprocess_runner(cmd, cwd=None, extra_environ=None): + """The default method of calling the wrapper subprocess.""" + env = os.environ.copy() + if extra_environ: + env.update(extra_environ) + + check_call(cmd, cwd=cwd, env=env) + + +class Pep517HookCaller(object): + """A wrapper around a source directory to be built with a PEP 517 backend. + + source_dir : The path to the source directory, containing pyproject.toml. + backend : The build backend spec, as per PEP 517, from pyproject.toml. + """ + def __init__(self, source_dir, build_backend): + self.source_dir = abspath(source_dir) + self.build_backend = build_backend + self._subprocess_runner = default_subprocess_runner + + # TODO: Is this over-engineered? Maybe frontends only need to + # set this when creating the wrapper, not on every call. + @contextmanager + def subprocess_runner(self, runner): + prev = self._subprocess_runner + self._subprocess_runner = runner + yield + self._subprocess_runner = prev + + def get_requires_for_build_wheel(self, config_settings=None): + """Identify packages required for building a wheel + + Returns a list of dependency specifications, e.g.: + ["wheel >= 0.25", "setuptools"] + + This does not include requirements specified in pyproject.toml. + It returns the result of calling the equivalently named hook in a + subprocess. + """ + return self._call_hook('get_requires_for_build_wheel', { + 'config_settings': config_settings + }) + + def prepare_metadata_for_build_wheel( + self, metadata_directory, config_settings=None): + """Prepare a *.dist-info folder with metadata for this project. + + Returns the name of the newly created folder. + + If the build backend defines a hook with this name, it will be called + in a subprocess. If not, the backend will be asked to build a wheel, + and the dist-info extracted from that. + """ + return self._call_hook('prepare_metadata_for_build_wheel', { + 'metadata_directory': abspath(metadata_directory), + 'config_settings': config_settings, + }) + + def build_wheel( + self, wheel_directory, config_settings=None, + metadata_directory=None): + """Build a wheel from this project. + + Returns the name of the newly created file. + + In general, this will call the 'build_wheel' hook in the backend. + However, if that was previously called by + 'prepare_metadata_for_build_wheel', and the same metadata_directory is + used, the previously built wheel will be copied to wheel_directory. + """ + 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_sdist(self, config_settings=None): + """Identify packages required for building a wheel + + Returns a list of dependency specifications, e.g.: + ["setuptools >= 26"] + + This does not include requirements specified in pyproject.toml. + It returns the result of calling the equivalently named hook in a + subprocess. + """ + return self._call_hook('get_requires_for_build_sdist', { + 'config_settings': config_settings + }) + + def build_sdist(self, sdist_directory, config_settings=None): + """Build an sdist from this project. + + Returns the name of the newly created file. + + This calls the 'build_sdist' backend hook in a subprocess. + """ + return self._call_hook('build_sdist', { + 'sdist_directory': abspath(sdist_directory), + 'config_settings': config_settings, + }) + + def _call_hook(self, hook_name, kwargs): + # On Python 2, pytoml returns Unicode values (which is correct) but the + # environment passed to check_call needs to contain string values. We + # convert here by encoding using ASCII (the backend can only contain + # letters, digits and _, . and : characters, and will be used as a + # Python identifier, so non-ASCII content is wrong on Python 2 in + # any case). + if sys.version_info[0] == 2: + build_backend = self.build_backend.encode('ASCII') + else: + build_backend = self.build_backend + + with tempdir() as td: + compat.write_json({'kwargs': kwargs}, pjoin(td, 'input.json'), + indent=2) + + # Run the hook in a subprocess + self._subprocess_runner( + [sys.executable, _in_proc_script, hook_name, td], + cwd=self.source_dir, + extra_environ={'PEP517_BUILD_BACKEND': build_backend} + ) + + data = compat.read_json(pjoin(td, 'output.json')) + if data.get('unsupported'): + raise UnsupportedOperation + if data.get('no_backend'): + raise BackendUnavailable + return data['return_val'] diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pkg_resources/__init__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pkg_resources/__init__.py new file mode 100644 index 00000000..fdd40de4 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pkg_resources/__init__.py @@ -0,0 +1,3286 @@ +# coding: utf-8 +""" +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. +""" + +from __future__ import absolute_import + +import sys +import os +import io +import time +import re +import types +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 itertools +import inspect +import ntpath +import posixpath +from pkgutil import get_importer + +try: + import _imp +except ImportError: + # Python 3.2 compatibility + import imp as _imp + +try: + FileExistsError +except NameError: + FileExistsError = OSError + +from pip._vendor import six +from pip._vendor.six.moves import urllib, map, filter + +# capture these to bypass sandboxing +from os import utime +try: + from os import mkdir, rename, unlink + WRITE_SUPPORT = True +except ImportError: + # no write support, probably under GAE + WRITE_SUPPORT = False + +from os import open as os_open +from os.path import isdir, split + +try: + import importlib.machinery as importlib_machinery + # access attribute to force import under delayed import mechanisms. + importlib_machinery.__name__ +except ImportError: + importlib_machinery = None + +from . import py31compat +from pip._vendor import appdirs +from pip._vendor import packaging +__import__('pip._vendor.packaging.version') +__import__('pip._vendor.packaging.specifiers') +__import__('pip._vendor.packaging.requirements') +__import__('pip._vendor.packaging.markers') + + +__metaclass__ = type + + +if (3, 0) < sys.version_info < (3, 4): + raise RuntimeError("Python 3.4 or later is required") + +if six.PY2: + # Those builtin exceptions are only defined in Python 3 + PermissionError = None + NotADirectoryError = None + +# declare some globals that will be defined later to +# satisfy the linters. +require = None +working_set = None +add_activation_listener = None +resources_stream = None +cleanup_resources = None +resource_dir = None +resource_stream = None +set_extraction_path = None +resource_isdir = None +resource_string = None +iter_entry_points = None +resource_listdir = None +resource_filename = None +resource_exists = None +_distribution_finders = None +_namespace_handlers = None +_namespace_packages = None + + +class PEP440Warning(RuntimeWarning): + """ + Used when there is an issue with a version or specifier not complying with + PEP 440. + """ + + +def parse_version(v): + try: + return packaging.version.Version(v) + except packaging.version.InvalidVersion: + return packaging.version.LegacyVersion(v) + + +_state_vars = {} + + +def _declare_state(vartype, **kw): + globals().update(kw) + _state_vars.update(dict.fromkeys(kw, vartype)) + + +def __getstate__(): + state = {} + g = globals() + for k, v in _state_vars.items(): + state[k] = g['_sget_' + v](g[k]) + return state + + +def __setstate__(state): + 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 Mac OS X that would be required to *use* extensions produced by + distutils. But what we want when checking compatibility is to know the + version of Mac OS X that we are *running*. To allow usage of packages that + explicitly require a newer version of Mac OS X, 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(_macosx_vers()[:2]), m.group(3)) + except ValueError: + # not Mac OS X + 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): + return self.args[0] + + @property + def req(self): + return self.args[1] + + def report(self): + return self._template.format(**locals()) + + def with_context(self, required_by): + """ + 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): + 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): + return self.args[0] + + @property + def requirers(self): + 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 = {} + +PY_MAJOR = sys.version[:3] +EGG_DIST = 3 +BINARY_DIST = 2 +SOURCE_DIST = 1 +CHECKOUT_DIST = 0 +DEVELOP_DIST = -1 + + +def register_loader_type(loader_type, provider_factory): + """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 + + +def get_provider(moduleOrReq): + """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) + + +def _macosx_vers(_cache=[]): + if not _cache: + version = platform.mac_ver()[0] + # fallback for MacPorts + if version == '': + plist = '/System/Library/CoreServices/SystemVersion.plist' + if os.path.exists(plist): + if hasattr(plistlib, 'readPlist'): + plist_content = plistlib.readPlist(plist) + if 'ProductVersion' in plist_content: + version = plist_content['ProductVersion'] + + _cache.append(version.split('.')) + return _cache[0] + + +def _macosx_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 Mac OS X. + """ + from sysconfig import get_platform + + plat = get_platform() + if sys.platform == "darwin" and not plat.startswith('macosx-'): + try: + version = _macosx_vers() + machine = os.uname()[4].replace(" ", "_") + return "macosx-%d.%d-%s" % ( + int(version[0]), int(version[1]), + _macosx_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, required): + """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 + + # Mac OS X 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 macosx 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 macosx 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 + + +def run_script(dist_spec, script_name): + """Locate distribution `dist_spec` and run its `script_name` script""" + ns = sys._getframe(1).f_globals + name = ns['__name__'] + ns.clear() + ns['__name__'] = name + require(dist_spec)[0].run_script(script_name, ns) + + +# backward compatibility +run_main = run_script + + +def get_distribution(dist): + """Return a current distribution object for a Requirement or string""" + if isinstance(dist, six.string_types): + dist = Requirement.parse(dist) + if isinstance(dist, Requirement): + dist = get_provider(dist) + if not isinstance(dist, Distribution): + raise TypeError("Expected string, Requirement, or Distribution", dist) + return dist + + +def load_entry_point(dist, group, name): + """Return `name` entry point of `group` for `dist` or raise ImportError""" + return get_distribution(dist).load_entry_point(group, name) + + +def get_entry_map(dist, group=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, group, name): + """Return the EntryPoint object for `group`+`name`, or ``None``""" + return get_distribution(dist).get_entry_info(group, name) + + +class IMetadataProvider: + def has_metadata(name): + """Does the package's distribution contain the named metadata?""" + + def get_metadata(name): + """The named metadata resource as a string""" + + def get_metadata_lines(name): + """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(name): + """Is the named metadata a directory? (like ``os.path.isdir()``)""" + + def metadata_listdir(name): + """List of metadata names in the directory (like ``os.listdir()``)""" + + def run_script(script_name, namespace): + """Execute the named script in the supplied namespace dictionary""" + + +class IResourceProvider(IMetadataProvider): + """An object that provides access to package resources""" + + def get_resource_filename(manager, resource_name): + """Return a true filesystem path for `resource_name` + + `manager` must be an ``IResourceManager``""" + + def get_resource_stream(manager, resource_name): + """Return a readable file-like object for `resource_name` + + `manager` must be an ``IResourceManager``""" + + def get_resource_string(manager, resource_name): + """Return a string containing the contents of `resource_name` + + `manager` must be an ``IResourceManager``""" + + def has_resource(resource_name): + """Does the package contain the named resource?""" + + def resource_isdir(resource_name): + """Is the named resource a directory? (like ``os.path.isdir()``)""" + + def resource_listdir(resource_name): + """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=None): + """Create working set from list of path entries (default=sys.path)""" + self.entries = [] + self.entry_keys = {} + self.by_key = {} + 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): + """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): + """True if `dist` is the active distribution for its project""" + return self.by_key.get(dist.key) == dist + + def find(self, req): + """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 not None and dist not in req: + # XXX add more info + raise VersionConflict(dist, req) + return dist + + def iter_entry_points(self, group, name=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, script_name): + """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): + """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 = {} + 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[key] = 1 + yield self.by_key[key] + + def add(self, dist, entry=None, insert=True, replace=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 + if dist.key not in keys: + keys.append(dist.key) + if dist.key not in keys2: + keys2.append(dist.key) + self._added_new(dist) + + def resolve(self, requirements, env=None, installer=None, + replace_conflicting=False, extras=None): + """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 = {} + # 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 = 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) + + # 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[req] = True + + # return list of distros to activate + return to_activate + + def find_plugins( + self, plugin_env, full_env=None, installer=None, fallback=True): + """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 = {} + distributions = {} + + 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 + + distributions = list(distributions) + distributions.sort() + + return distributions, error_info + + def require(self, *requirements): + """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, existing=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.callbacks[:] + ) + + def __setstate__(self, e_k_b_c): + entries, keys, by_key, callbacks = e_k_b_c + self.entries = entries[:] + self.entry_keys = keys.copy() + self.by_key = by_key.copy() + self.callbacks = callbacks[:] + + +class _ReqExtras(dict): + """ + Map each requirement to the extras that demanded it. + """ + + def markers_pass(self, req, extras=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=None, platform=get_supported_platform(), + python=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): + """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): + """Remove `dist` from the environment""" + self._distmap[dist.key].remove(dist) + + def scan(self, search_path=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): + """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): + """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) + + def best_match( + self, req, working_set, installer=None, replace_conflicting=False): + """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) + + def obtain(self, requirement, installer=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.""" + if installer is not None: + return installer(requirement) + + def __iter__(self): + """Yield the unique project names of the available distributions""" + for key in self._distmap.keys(): + if self[key]: + yield key + + def __iadd__(self, other): + """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): + """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 + """ + + +class ResourceManager: + """Manage resource extraction and packages""" + extraction_path = None + + def __init__(self): + self.cached_files = {} + + def resource_exists(self, package_or_requirement, resource_name): + """Does the named resource exist?""" + return get_provider(package_or_requirement).has_resource(resource_name) + + def resource_isdir(self, package_or_requirement, resource_name): + """Is the named resource an existing directory?""" + return get_provider(package_or_requirement).resource_isdir( + resource_name + ) + + def resource_filename(self, package_or_requirement, resource_name): + """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, resource_name): + """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, resource_name): + """Return specified resource as a string""" + return get_provider(package_or_requirement).get_resource_string( + self, resource_name + ) + + def resource_listdir(self, package_or_requirement, resource_name): + """List the contents of the named resource directory""" + return get_provider(package_or_requirement).resource_listdir( + resource_name + ) + + def extraction_error(self): + """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, names=()): + """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] = 1 + 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 = ( + "%s is writable by group/others and vulnerable to attack " + "when " + "used with get_resource_filename. Consider a more secure " + "location (set with .set_extraction_path or the " + "PYTHON_EGG_CACHE environment variable)." % path + ) + warnings.warn(msg, UserWarning) + + def postprocess(self, tempname, filename): + """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): + """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=False): + """ + 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 + + +def get_default_cache(): + """ + 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 appdirs.user_cache_dir(appname='Python-Eggs') + ) + + +def safe_name(name): + """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): + """ + 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 safe_extra(extra): + """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): + """Convert a project or version name to its filename-escaped form + + Any '-' characters are currently replaced with '_'. + """ + return name.replace('-', '_') + + +def invalid_marker(text): + """ + 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, extra=None): + """ + 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) + + +class NullProvider: + """Try to implement resources and metadata for arbitrary PEP 302 loaders""" + + egg_name = None + egg_info = None + loader = None + + def __init__(self, module): + self.loader = getattr(module, '__loader__', None) + self.module_path = os.path.dirname(getattr(module, '__file__', '')) + + def get_resource_filename(self, manager, resource_name): + return self._fn(self.module_path, resource_name) + + def get_resource_stream(self, manager, resource_name): + return io.BytesIO(self.get_resource_string(manager, resource_name)) + + def get_resource_string(self, manager, resource_name): + return self._get(self._fn(self.module_path, resource_name)) + + def has_resource(self, resource_name): + 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): + if not self.egg_info: + return self.egg_info + + path = self._get_metadata_path(name) + return self._has(path) + + def get_metadata(self, name): + if not self.egg_info: + return "" + value = self._get(self._fn(self.egg_info, name)) + return value.decode('utf-8') if six.PY3 else value + + def get_metadata_lines(self, name): + return yield_lines(self.get_metadata(name)) + + def resource_isdir(self, resource_name): + return self._isdir(self._fn(self.module_path, resource_name)) + + def metadata_isdir(self, name): + return self.egg_info and self._isdir(self._fn(self.egg_info, name)) + + def resource_listdir(self, resource_name): + return self._listdir(self._fn(self.module_path, resource_name)) + + def metadata_listdir(self, name): + if self.egg_info: + return self._listdir(self._fn(self.egg_info, name)) + return [] + + def run_script(self, script_name, namespace): + 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 = open(script_filename).read() + 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): + raise NotImplementedError( + "Can't perform this operation for unregistered loader type" + ) + + def _isdir(self, path): + raise NotImplementedError( + "Can't perform this operation for unregistered loader type" + ) + + def _listdir(self, path): + raise NotImplementedError( + "Can't perform this operation for unregistered loader type" + ) + + def _fn(self, base, resource_name): + 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.readthedocs.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) + ) + if not invalid: + return + + msg = "Use of .. or absolute path in a resource path is not allowed." + + # Aggressively disallow Windows absolute paths + if ntpath.isabs(path) and not posixpath.isabs(path): + raise ValueError(msg) + + # for compatibility, warn; in future + # raise ValueError(msg) + warnings.warn( + msg[:-1] + " and will raise exceptions in a future release.", + DeprecationWarning, + stacklevel=4, + ) + + def _get(self, path): + if hasattr(self.loader, 'get_data'): + return self.loader.get_data(path) + raise NotImplementedError( + "Can't perform this operation for loaders without 'get_data()'" + ) + + +register_loader_type(object, NullProvider) + + +class EggProvider(NullProvider): + """Provider based on a virtual filesystem""" + + def __init__(self, module): + NullProvider.__init__(self, module) + self._setup_prefix() + + def _setup_prefix(self): + # we assume here that our metadata may be nested inside a "basket" + # of multiple eggs; that's why we use module_path instead of .archive + path = self.module_path + old = None + while path != old: + if _is_egg_path(path): + self.egg_name = os.path.basename(path) + self.egg_info = os.path.join(path, 'EGG-INFO') + self.egg_root = path + break + old = path + path, base = os.path.split(path) + + +class DefaultProvider(EggProvider): + """Provides access to package resources in the filesystem""" + + def _has(self, path): + return os.path.exists(path) + + def _isdir(self, path): + return os.path.isdir(path) + + def _listdir(self, path): + return os.listdir(path) + + def get_resource_stream(self, manager, resource_name): + return open(self._fn(self.module_path, resource_name), 'rb') + + def _get(self, path): + 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""" + + module_path = None + + _isdir = _has = lambda self, path: False + + def _get(self, path): + return '' + + def _listdir(self, path): + return [] + + def __init__(self): + pass + + +empty_provider = EmptyProvider() + + +class ZipManifests(dict): + """ + zip manifest builder + """ + + @classmethod + def build(cls, path): + """ + 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. + """ + manifest_mod = collections.namedtuple('manifest_mod', 'manifest mtime') + + def load(self, path): + """ + 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 = None + _zip_manifests = MemoizedZipManifests() + + def __init__(self, module): + EggProvider.__init__(self, 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, resource_name): + 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 + + def _extract_resource(self, manager, zip_path): + + 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 IOError('"os.rename" and "os.unlink" are not supported ' + 'on this platform') + try: + + 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 os.error: + 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 os.error: + # 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): + zip_path = self._zipinfo_name(fspath) + return zip_path in self.zipinfo or zip_path in self._index() + + def _isdir(self, fspath): + 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): + return self._zipinfo_name(self._fn(self.egg_root, resource_name)) + + def _resource_to_zip(self, resource_name): + 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): + self.path = path + + def _get_metadata_path(self, name): + return self.path + + def has_metadata(self, name): + return name == 'PKG-INFO' and os.path.isfile(self.path) + + def get_metadata(self, name): + if name != 'PKG-INFO': + raise KeyError("No metadata except PKG-INFO is available") + + with io.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): + # Python 2.7 compat for: replacement_char = '�' + replacement_char = b'\xef\xbf\xbd'.decode('utf-8') + 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): + 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, egg_info): + self.module_path = path + self.egg_info = egg_info + + +class EggMetadata(ZipProvider): + """Metadata provider for .egg files""" + + def __init__(self, importer): + """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() + + +_declare_state('dict', _distribution_finders={}) + + +def register_finder(importer_type, distribution_finder): + """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, only=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, path_item, only=False): + """ + 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) + for dist in dists: + yield dist + elif subitem.lower().endswith('.dist-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, path_item, only=False): + return () + + +register_finder(object, find_nothing) + + +def _by_version_descending(names): + """ + Given a list of filenames, return them in descending order + by version number. + + >>> names = 'bar', 'foo', 'Python-2.7.10.egg', 'Python-2.7.2.egg' + >>> _by_version_descending(names) + ['Python-2.7.10.egg', 'Python-2.7.2.egg', 'foo', 'bar'] + >>> names = 'Setuptools-1.2.3b1.egg', 'Setuptools-1.2.3.egg' + >>> _by_version_descending(names) + ['Setuptools-1.2.3.egg', 'Setuptools-1.2.3b1.egg'] + >>> names = 'Setuptools-1.2.3b1.egg', 'Setuptools-1.2.3.post1.egg' + >>> _by_version_descending(names) + ['Setuptools-1.2.3.post1.egg', 'Setuptools-1.2.3b1.egg'] + """ + def _by_version(name): + """ + Parse each component of the filename + """ + name, ext = os.path.splitext(name) + parts = itertools.chain(name.split('-'), [ext]) + return [packaging.version.parse(part) for part in parts] + + return sorted(names, key=_by_version, reverse=True) + + +def find_on_path(importer, 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 = safe_listdir(path_item) + + # for performance, before sorting by version, + # screen entries for only those that will yield + # distributions + filtered = ( + entry + for entry in entries + if dist_factory(path_item, entry, only) + ) + + # scan for .egg and .egg-info in directory + path_item_entries = _by_version_descending(filtered) + for entry in path_item_entries: + fullpath = os.path.join(path_item, entry) + factory = dist_factory(path_item, entry, only) + for dist in factory(fullpath): + yield dist + + +def dist_factory(path_item, entry, only): + """ + Return a dist_factory for a path_item and entry + """ + lower = entry.lower() + is_meta = any(map(lower.endswith, ('.egg-info', '.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 + if six.PY2: + __nonzero__ = __bool__ + + def __call__(self, fullpath): + return iter(()) + + +def safe_listdir(path): + """ + 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 + ignorable = ( + e.errno in (errno.ENOTDIR, errno.EACCES, errno.ENOENT) + # Python 2 on Windows needs to be handled this way :( + or getattr(e, "winerror", None) == 267 + ) + if not ignorable: + raise + return () + + +def distributions_from_metadata(path): + root = os.path.dirname(path) + if os.path.isdir(path): + if len(os.listdir(path)) == 0: + # empty metadata dir; skip + return + metadata = 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 + """ + with open(path) as f: + for line in f: + 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, ()) + + +register_finder(pkgutil.ImpImporter, find_on_path) + +if hasattr(importlib_machinery, 'FileFinder'): + register_finder(importlib_machinery.FileFinder, find_on_path) + +_declare_state('dict', _namespace_handlers={}) +_declare_state('dict', _namespace_packages={}) + + +def register_namespace_handler(importer_type, namespace_handler): + """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 + + # capture warnings due to #1111 + with warnings.catch_warnings(): + warnings.simplefilter("ignore") + loader = importer.find_module(packageName) + + 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) + loader.load_module(packageName) + _rebuild_mod_path(path, packageName, module) + return subpath + + +def _rebuild_mod_path(orig_path, package_name, module): + """ + 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): + """Declare that package 'packageName' is a namespace package""" + + _imp.acquire_lock() + try: + if packageName in _namespace_packages: + return + + path = 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: + raise TypeError("Not a package:", parent) + + # 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, parent=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, path_item, packageName, module): + """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 + + +register_namespace_handler(pkgutil.ImpImporter, file_ns_handler) +register_namespace_handler(zipimport.zipimporter, file_ns_handler) + +if hasattr(importlib_machinery, 'FileFinder'): + register_namespace_handler(importlib_machinery.FileFinder, file_ns_handler) + + +def null_ns_handler(importer, path_item, packageName, module): + return None + + +register_namespace_handler(object, null_ns_handler) + + +def normalize_path(filename): + """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): # 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 + + +def _normalize_cached(filename, _cache={}): + try: + return _cache[filename] + except KeyError: + _cache[filename] = result = normalize_path(filename) + return result + + +def _is_egg_path(path): + """ + Determine if given path appears to be an egg. + """ + return path.lower().endswith('.egg') + + +def _is_unpacked_egg(path): + """ + Determine if given path appears to be an unpacked egg. + """ + return ( + _is_egg_path(path) 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]) + + +def yield_lines(strs): + """Yield non-empty/non-comment lines of a string or sequence""" + if isinstance(strs, six.string_types): + for s in strs.splitlines(): + s = s.strip() + # skip blank lines/comments + if s and not s.startswith('#'): + yield s + else: + for ss in strs: + for s in yield_lines(ss): + yield s + + +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, module_name, attrs=(), extras=(), dist=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) + + def load(self, require=True, *args, **kwargs): + """ + 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: + self.require(*args, **kwargs) + return self.resolve() + + def resolve(self): + """ + 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)) + + def require(self, env=None, installer=None): + if self.extras and not self.dist: + raise UnknownExtra("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, dist=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, lines, dist=None): + """Parse an entry point group""" + if not MODULE(group): + raise ValueError("Invalid group name", group) + this = {} + 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, dist=None): + """Parse a map of entry point groups""" + if isinstance(data, dict): + data = data.items() + else: + data = split_sections(data) + maps = {} + 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 _remove_md5_fragment(location): + if not location: + return '' + parsed = urllib.parse.urlparse(location) + if parsed[-1].startswith('md5='): + return urllib.parse.urlunparse(parsed[:-1] + ('',)) + return location + + +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=None, metadata=None, project_name=None, + version=None, py_version=PY_MAJOR, platform=None, + precedence=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, basename, metadata=None, **kw): + 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.parsed_version, + self.precedence, + self.key, + _remove_md5_fragment(self.location), + self.py_version or '', + self.platform or '', + ) + + def __hash__(self): + return hash(self.hashcmp) + + def __lt__(self, other): + return self.hashcmp < other.hashcmp + + def __le__(self, other): + return self.hashcmp <= other.hashcmp + + def __gt__(self, other): + return self.hashcmp > other.hashcmp + + def __ge__(self, other): + return self.hashcmp >= other.hashcmp + + def __eq__(self, other): + 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): + 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"): + self._parsed_version = parse_version(self.version) + + return self._parsed_version + + def _warn_legacy_version(self): + LV = packaging.version.LegacyVersion + is_legacy = isinstance(self._parsed_version, LV) + if not is_legacy: + return + + # While an empty version is technically a legacy version and + # is not a valid PEP 440 version, it's also unlikely to + # actually come from someone and instead it is more likely that + # it comes from setuptools attempting to parse a filename and + # including it in the list. So for that we'll gate this warning + # on if the version is anything at all or not. + if not self.version: + return + + tmpl = textwrap.dedent(""" + '{project_name} ({version})' is being parsed as a legacy, + non PEP 440, + version. You may find odd behavior and sort order. + In particular it will be sorted as less than 0.0. It + is recommended to migrate to PEP 440 compatible + versions. + """).strip().replace('\n', ' ') + + warnings.warn(tmpl.format(**vars(self)), PEP440Warning) + + @property + def version(self): + try: + return self._version + except AttributeError: + 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) + + 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): + """ + 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 = 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=()): + """List of Requirements needed for this distro if `extras` are used""" + dm = self._dep_map + deps = [] + deps.extend(dm.get(None, ())) + for ext in extras: + try: + deps.extend(dm[safe_extra(ext)]) + except KeyError: + raise UnknownExtra( + "%s has no such extra feature %r" % (self, ext) + ) + 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): + for line in self.get_metadata_lines(name): + yield line + + def _get_version(self): + lines = self._get_metadata(self.PKG_INFO) + version = _version_from_file(lines) + + return version + + def activate(self, path=None, replace=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: + 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(Distribution, self).__dir__()) + | set( + attr for attr in self._provider.__dir__() + if not attr.startswith('_') + ) + ) + + if not hasattr(object, '__dir__'): + # python 2.7 not supported + del __dir__ + + @classmethod + def from_filename(cls, filename, metadata=None, **kw): + 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, name): + """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() + + def get_entry_map(self, group=None): + """Return the entry point map for `group`, or the full entry map""" + try: + ep_map = self._ep_map + except AttributeError: + ep_map = self._ep_map = EntryPoint.parse_map( + self._get_metadata('entry_points.txt'), self + ) + if group is not None: + return ep_map.get(group, {}) + return ep_map + + def get_entry_info(self, group, name): + """Return the EntryPoint object for `group`+`name`, or ``None``""" + return self.get_entry_map(group).get(name) + + def insert_on(self, path, loc=None, replace=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 + return True + + def clone(self, **kw): + """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) + return self.__class__(**kw) + + @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): + """Recompute this distribution's dependencies.""" + dm = self.__dep_map = {None: []} + + reqs = [] + # 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 = frozenset(reqs_for_extra(None)) + dm[None].extend(common) + + for extra in self._parsed_pkg_info.get_all('Provides-Extra') or []: + s_extra = safe_extra(extra.strip()) + dm[s_extra] = list(frozenset(reqs_for_extra(extra)) - common) + + return dm + + +_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) + + +class RequirementParseError(ValueError): + def __str__(self): + return ' '.join(self.args) + + +def parse_requirements(strs): + """Yield ``Requirement`` objects for each specification in `strs` + + `strs` must be a string, or a (possibly-nested) iterable thereof. + """ + # create a steppable iterator, so we can handle \-continuations + lines = iter(yield_lines(strs)) + + 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() + try: + line += next(lines) + except StopIteration: + return + yield Requirement(line) + + +class Requirement(packaging.requirements.Requirement): + def __init__(self, requirement_string): + """DO NOT CALL THIS UNDOCUMENTED METHOD; use Requirement.parse()!""" + try: + super(Requirement, self).__init__(requirement_string) + except packaging.requirements.InvalidRequirement as e: + raise RequirementParseError(str(e)) + 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] + self.extras = tuple(map(safe_extra, self.extras)) + self.hashCmp = ( + self.key, + self.specifier, + frozenset(self.extras), + str(self.marker) if self.marker else None, + ) + self.__hash = hash(self.hashCmp) + + def __eq__(self, other): + return ( + isinstance(other, Requirement) and + self.hashCmp == other.hashCmp + ) + + def __ne__(self, other): + return not self == other + + def __contains__(self, item): + 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): + 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, ob): + """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] + + +def ensure_directory(path): + """Ensure that the parent directory of `path` exists""" + dirname = os.path.dirname(path) + py31compat.makedirs(dirname, exist_ok=True) + + +def _bypass_ensure_directory(path): + """Sandbox-bypassing version of ensure_directory()""" + if not WRITE_SUPPORT: + raise IOError('"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): + """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) + + +# 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 = WorkingSet._build_master() + _declare_state('object', working_set=working_set) + + 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()) + +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. + """ diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pkg_resources/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pkg_resources/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3ba45af9979195bf5f72d7671fe67deb7aade67c GIT binary patch literal 99563 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≀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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pkg_resources/__pycache__/py31compat.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pkg_resources/__pycache__/py31compat.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a2c9d7461d3ff29c3de88b2ab993a9a1f4f280db GIT binary patch literal 610 zcmYk3&u-H|5XNVAH>u+|q2ky#@S#bYAWjHXDyaaWf)oU;1u|`Rp|)eM*>$P}1rET= zaN&XW$|<kFiP`Y4Ykl9&SnHYJj>o-T`0D%M^@sudfE!Ctd_=Nu$RtRdL-Kpa1h+X$ z80~D%OOXf!*^xrFzGBi+B5&7EWT;raBY;DJ`l0L=PzeSINuUDrLbWQPAnzm{iBpK9 z4RwLj7#+9S@?=Id+r`OuNyjAnm~7Q=AjdU)L4=o3-4)QVA~X*WJ~D(4duxoqj@B&a z4bMfv&7IG5?%b2piBIedDv|{1iKlVPF>PH?UKC1Z#=4!S(}^+KxRx@e(yl$3oIRR8 zkGT`|MRVl>wajdj>cVlgoP7h+C8VFn!=|i<byn|RF0#4YKX`w2sSifdzuGFjR+ZFd zSQqb7qpV(-nX<!rH9nl_k_r#%m5b896zTXd@YfB=02%gi7jL8KQMU2(*!W+wL9!T6 zVrKdjnOi>P|6}8)7Kg@vVA^Cf*p+o%LK^(RF@DI~vW`DHAGzpS8Jp=U&8oNB^(&>M k{Rd@y)9rO{Smf&l_ew1nb9LVnSq~E+JuKp3)W$vb3v#}TAOHXW literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pkg_resources/py31compat.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pkg_resources/py31compat.py new file mode 100644 index 00000000..a2d3007c --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pkg_resources/py31compat.py @@ -0,0 +1,23 @@ +import os +import errno +import sys + +from pip._vendor import six + + +def _makedirs_31(path, exist_ok=False): + try: + os.makedirs(path) + except OSError as exc: + if not exist_ok or exc.errno != errno.EEXIST: + raise + + +# rely on compatibility behavior until mode considerations +# and exists_ok considerations are disentangled. +# See https://github.com/pypa/setuptools/pull/1083#issuecomment-315168663 +needs_makedirs = ( + six.PY2 or + (3, 4) <= sys.version_info < (3, 4, 1) +) +makedirs = _makedirs_31 if needs_makedirs else os.makedirs diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/progress/__init__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/progress/__init__.py new file mode 100644 index 00000000..e434c257 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/progress/__init__.py @@ -0,0 +1,177 @@ +# Copyright (c) 2012 Giorgos Verigakis <verigak@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. + +from __future__ import division, print_function + +from collections import deque +from datetime import timedelta +from math import ceil +from sys import stderr +try: + from time import monotonic +except ImportError: + from time import time as monotonic + + +__version__ = '1.5' + +HIDE_CURSOR = '\x1b[?25l' +SHOW_CURSOR = '\x1b[?25h' + + +class Infinite(object): + file = stderr + sma_window = 10 # Simple Moving Average window + check_tty = True + hide_cursor = True + + def __init__(self, message='', **kwargs): + self.index = 0 + self.start_ts = monotonic() + self.avg = 0 + self._avg_update_ts = self.start_ts + self._ts = self.start_ts + self._xput = deque(maxlen=self.sma_window) + for key, val in kwargs.items(): + setattr(self, key, val) + + self._width = 0 + self.message = message + + if self.file and self.is_tty(): + if self.hide_cursor: + print(HIDE_CURSOR, end='', file=self.file) + print(self.message, end='', file=self.file) + self.file.flush() + + def __getitem__(self, key): + if key.startswith('_'): + return None + return getattr(self, key, None) + + @property + def elapsed(self): + return int(monotonic() - self.start_ts) + + @property + def elapsed_td(self): + return timedelta(seconds=self.elapsed) + + def update_avg(self, n, dt): + if n > 0: + xput_len = len(self._xput) + self._xput.append(dt / n) + now = monotonic() + # update when we're still filling _xput, then after every second + if (xput_len < self.sma_window or + now - self._avg_update_ts > 1): + self.avg = sum(self._xput) / len(self._xput) + self._avg_update_ts = now + + def update(self): + pass + + def start(self): + pass + + def clearln(self): + if self.file and self.is_tty(): + print('\r\x1b[K', end='', file=self.file) + + def write(self, s): + if self.file and self.is_tty(): + line = self.message + s.ljust(self._width) + print('\r' + line, end='', file=self.file) + self._width = max(self._width, len(s)) + self.file.flush() + + def writeln(self, line): + if self.file and self.is_tty(): + self.clearln() + print(line, end='', file=self.file) + self.file.flush() + + def finish(self): + if self.file and self.is_tty(): + print(file=self.file) + if self.hide_cursor: + print(SHOW_CURSOR, end='', file=self.file) + + def is_tty(self): + return self.file.isatty() if self.check_tty else True + + def next(self, n=1): + now = monotonic() + dt = now - self._ts + self.update_avg(n, dt) + self._ts = now + self.index = self.index + n + self.update() + + def iter(self, it): + with self: + for x in it: + yield x + self.next() + + def __enter__(self): + self.start() + return self + + def __exit__(self, exc_type, exc_val, exc_tb): + self.finish() + + +class Progress(Infinite): + def __init__(self, *args, **kwargs): + super(Progress, self).__init__(*args, **kwargs) + self.max = kwargs.get('max', 100) + + @property + def eta(self): + return int(ceil(self.avg * self.remaining)) + + @property + def eta_td(self): + return timedelta(seconds=self.eta) + + @property + def percent(self): + return self.progress * 100 + + @property + def progress(self): + return min(1, self.index / self.max) + + @property + def remaining(self): + return max(self.max - self.index, 0) + + def start(self): + self.update() + + def goto(self, index): + incr = index - self.index + self.next(incr) + + def iter(self, it): + try: + self.max = len(it) + except TypeError: + pass + + with self: + for x in it: + yield x + self.next() diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/progress/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/progress/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dc284dbf847e151cef4f04146e7d46d1b5105a83 GIT binary patch literal 5509 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 C%R=}7 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/progress/__pycache__/bar.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/progress/__pycache__/bar.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1f57f63c0402fac90acd936cbd93b5e91f95c1ad GIT binary patch literal 2710 zcmbVNOK%%h6rT5t$9C$Z57P1ql#~q6rUD^erI?0?*hG~ou^54@iSO7MGakEl#-xeH z5>hH?d5VWxv7}ufHXyNK$^W>^vdRx&(+zy*&Loc8uqb1n=e=|1oO{pt?hEz0`@yeg zK0H-bl)sdHj{&_2N`C-j3R7dHullM=x)y7`#&l-Hdf)I3Re4uoCbO<8%nFTd-8W&| z%z^EMCTt6Kg}JcZ(1LBluCf~JnzS9*bv6TgM$WImKExWZ8({_WUD&g14)&b1t4zD3 zc!zfonc}IUF-oHLfQ79%%0eE*>FSPJj5rthpv%KFZPV1<M}yJ?rO$zdimx&S>8QTW zG~ZwdpBcWzOy6df?-Ysn6;{C~U7=qH_|5{}+nQZmiV_xH@!0a>Qa^y)(iZY9Enm2+ z;(xMDG0@|HY|siQ?SW-VuJlxpc0}1$$E2ybI<Jg1XnL+3Q^w#uBUg_oV*{F*W9Ha| zX30^DsXaTVIZkfm<gesb*TPyhbT_xR<vAf>ZB-~<Rp?QY33DT2*}8Cs<(>$;kDUp+ zp)fj891Az>53|jd)U9;X=|oqA(HlgGaMuFf8uE}lQZGmC4UQd;6VDMw8pa(_r<X(4 zio>LfPt}SQ3yas0y3nzdFr}Y2$YI1$68@s_hhf}(X*uf;mxs~t^x7zj+3B;F*VhJT zpJ(Kf)cQC~*nltZ=CF+A&I~t&H5#%Y3m33RItQkx4b|0LwfN1cj=JUI<jxe+R&kI{ ztCa-(u+<W7tJNQ{QA~QR)w(<i;$noOClnbar#1OuVuy&$5POsug}skGLZ%5e4@zm8 zqZ*T+Cda0Vk*cIglNZ45D@F~)i2gxA+RVgxTB5qL9`J6Ibdk<heQ{|R@^+YH9$Q@G zRAnO_?9R0x3wh((s^{>>;Np)HTOdaJeqcriCG!L(p9ZBa*d!TF{(}=af|2_Y(Gk2M zX5T@5AofexWV9txD8sx}%G;}+d2hIr9X}|(C-JoxK`8+i#mC9>zav|Tcst$~+0EaI z$ZlSL;K)uQj#sB5BhOT16*!tS<r%QuJqz`o(KDI4t@0CW#<voK9YP66z(g6;v6Brk z^Ip>CVIL<S#MnlmZ$yba|G#xCb?3&HrMy<kZ%X-fDZeV^7p45Xl-KuQtA=$5x>i8x z?_dRNm4GFo3ZSHAMy|o9lg#ybg+L27!IrcoYyqMGY5=dE%8cVmuH#KRH<<R3!Pm%} z!<*nr89T77%w}3{;(N|EU~!wkuL3{Du!_rcf;-p%y4=ZWq?)^3fZn(Yy_Q$^;Llv; zv>lw9jMHZC{Da4<3mupwtl@f)hH25}lrE<lmpCQcT<C!HqFZKZU;+YE;$Dp(g%Ea9 zEaSTq@bk^2GXkWVatKFQ03IPACu9(Id&D^oj~^$OY{(O&O)6X>2|>);pp*s`pjiz_ zRv_DqdQ6>%rvcyA(dlZ~gE?K61V4qB`O{!trEn~f!y`t8SByVP8r_JT+P#>5FLVe! z-Ar+V#6i{>@V;=<EZ|wX5oPQAEWP!gnD`V%-vFglQVwFaG(+R$ooWagZGuwTlHG=2 zF0N*}eyhT{7+nde;EQto>621kE#;@B{H&0-cjeEe{YNSPBv^a}-{91t{54|dh`mni zJTZ!vH^DsPUPO|qPL4`y^1NQg^!Guj2Ii=o?5X_dYG{I{^Rtnkh5Q`hTv`v<Ci2_g z%ik73-}tVS-<J~DZWiZx0ZVdfRQ?t*Dwzj}`b|vtLAz0t?bYaB?2NJz$GylYA5JhU zyNDCk%BxIX0}^rhN%GNw%B(ppvag)?_DDGAire-)^_0A<Ynr3g^v2PK(=hRSsA2pI DUxP33 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/progress/__pycache__/counter.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/progress/__pycache__/counter.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0a5705588f13998dd4c55a469d7911c011b9b918 GIT binary patch literal 1483 zcmbVMOK;Oa5Z?9Lv7II*hypDjK!}$QZ7PtsfKa6#5SOS@Z&r~B*==jEopfzesL}(Z zJR}YXiN|l?!VlUbocaT}^u)|&leVZmfTQ_lXP@)<Cb#SL>dKF~M=K5?zsP~lhVcSO z{uqE0P7{*SkW#`e&JrtSAxrJhrsM(PHg|RicLW=-&;h%`U9eqYgIxjJ<38BFwq3BR zd;;tV;ljGdYs)04@4_o2psG=3ai_~gl*EOQ?Iho&xL_&oVYV7)FsZyH*<F(&&pUW# z^jR=i0LiBS1PLi8p~We;c1XxLgEwsDE_TZduI=ER_@QPXiy-=7pFAZ61+)fqfWZ<t zNLv9@&Zfl2Szbux#2FVaz*{>P$?A6^C*b_v-DZ*Yn!UI;`=pE$K0Cj${-is9i{q4* z=()&vS2lab|7K_C&Rp-Ms+2w6F2osh1VbToYtnc-H(Y8#0A3Vj?NmgOszy=T<z<57 zS`=-R?PRzj>u^{*bO35NR{=N;qVM;pw*NVWzIKXtH?#jpqIA&@4?y`+q;05YwiZxX z#c9mp5VW@##(9uYHX7rH_wykq@yrQ?2EwtSpM=$OAfwRHJ`}nS6AQRu8eq(xIxt6b zHMBKLCzZ2Yv^&rC=;hx?o1b4_8U5PmfzdlgzcKo)(eI3YKh7TB1HCt-;2jtg1n39k z+opxpr<_icg29a4r&9z-X>D6zIk=~9&A^NysnwErRZvkZ5t*v=*4w$r6-(nxu{bM~ zH=>=cLcny^m7AH3G(M^VSK!JVi9=|WPSdTLj(=PMUt+gOWR*nf%CiWVLpg(hIhR;P zc>y4B{w~->TspRDr(pFGNRIzS9<?orGl%MinOgwKvHs(_xlp$XG_I%EQY?lk|MtP? z&qjYT`is#YTj1X{xJF(_xPfpJApi*MBVFI;tR89NUWM&=Zp1aTTY--qyIK~dgpQTi q;fhF%OJWGR7bUV%hbZyPfpUy5SKhs0*WbszIrdGBHdw=fpZ^E+)+GD@ literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/progress/__pycache__/spinner.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/progress/__pycache__/spinner.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7c281135f632b9980682f2eafaa559c5d5c4c237 GIT binary patch literal 1398 zcmbVLOKTKC5bmDW&g>(uZzCciBCL>X(4!&&4<cv?#M2NNHd~#|$n4CdXGf#NQ#=PB z2alqA@}d_X;PZd<QBU~`d$MY#4ZD&{(o0p%*VWto)$2;5QC)sNdk<{J{;;uS;rBdB z7NG(LJYs$BbI!m3Gcx+7Z*q2%fd%$c2DUJ_Oy5H6Km~C{Scq-JE_jH&0y~JSP(xfR za0PK48i*SOc42CXwGQpzi>$>}Gmpb=0wRdQfsmaj+u^0dy%n#9F>ZG0<iEAc_zdm{ z=5t`a0iJJy?OP=;-v$?7sH)0R8pg4ZBR(_Y%Ok!y;_bU#x}KJSVxrtY$u6MUWcS&C zqc*nq3HF4(OhTJ{nr%@|7~aYkT9&fI7{rD$BM~bnUF&2bQ}#oNTw8{+G7+sR9=>C; ziMNifwg>&RordYmN*+cqGq=9BlFVHO+A1V?AYw>lJC#XKiY#kqCGFYtk#h1BIs-9H z94U0hoBZ*Vj%&7bA|vUbOIAp^q&!qDN4Y@|clsg-R5b|t3FHxd*Mnd^??k0X*72yS zt%X>DZZ5M#$|H0GQ6E!>31auK<0u)u=5mW$MzObdfllF}-2!oHD6o1K6$;bnsOn-U zbR0RA;rFXA+J4sdleQlzz@vCX9wS8z3f5!v3bqBuljuE*l2LhGE(srqU+qqk#FGS{ zYeFxyeWvZp{Sc(IoF5}dc!D4$cb*PRbhu6+Cei3QyGg9w4&%uzZhtLFZGY4DyS6{} zLz4RKB5}}JBs@Wqx@?{foI~}0mBFS#1h?lRQLh-q`eL{tqKR}4f0oRKy6(dd8ow^> zn_s1UtL;!nG~8Dtr;*<!BB~=HywLJ!AXf81E^#0vxfGK$UqwF`O(Ur=k^-0XpS_w* Xx!1~}x=yW^(InM*-E4YIi++CrRZSfO literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/progress/bar.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/progress/bar.py new file mode 100644 index 00000000..8819efda --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/progress/bar.py @@ -0,0 +1,91 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2012 Giorgos Verigakis <verigak@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. + +from __future__ import unicode_literals + +import sys + +from . import Progress + + +class Bar(Progress): + width = 32 + suffix = '%(index)d/%(max)d' + bar_prefix = ' |' + bar_suffix = '| ' + empty_fill = ' ' + fill = '#' + + def update(self): + filled_length = int(self.width * self.progress) + empty_length = self.width - filled_length + + message = self.message % self + bar = self.fill * filled_length + empty = self.empty_fill * empty_length + suffix = self.suffix % self + line = ''.join([message, self.bar_prefix, bar, empty, self.bar_suffix, + suffix]) + self.writeln(line) + + +class ChargingBar(Bar): + suffix = '%(percent)d%%' + bar_prefix = ' ' + bar_suffix = ' ' + empty_fill = '∙' + fill = '█' + + +class FillingSquaresBar(ChargingBar): + empty_fill = '▢' + fill = '▣' + + +class FillingCirclesBar(ChargingBar): + empty_fill = '◯' + fill = '◉' + + +class IncrementalBar(Bar): + if sys.platform.startswith('win'): + phases = (u' ', u'▌', u'█') + else: + phases = (' ', '▏', '▎', '▍', '▌', '▋', '▊', '▉', '█') + + def update(self): + nphases = len(self.phases) + filled_len = self.width * self.progress + nfull = int(filled_len) # Number of full chars + phase = int((filled_len - nfull) * nphases) # Phase of last char + nempty = self.width - nfull # Number of empty chars + + message = self.message % self + bar = self.phases[-1] * nfull + current = self.phases[phase] if phase > 0 else '' + empty = self.empty_fill * max(0, nempty - len(current)) + suffix = self.suffix % self + line = ''.join([message, self.bar_prefix, bar, current, empty, + self.bar_suffix, suffix]) + self.writeln(line) + + +class PixelBar(IncrementalBar): + phases = ('⡀', '⡄', '⡆', '⡇', '⣇', '⣧', '⣷', '⣿') + + +class ShadyBar(IncrementalBar): + phases = (' ', '░', '▒', '▓', '█') diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/progress/counter.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/progress/counter.py new file mode 100644 index 00000000..d955ca47 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/progress/counter.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2012 Giorgos Verigakis <verigak@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. + +from __future__ import unicode_literals +from . import Infinite, Progress + + +class Counter(Infinite): + def update(self): + self.write(str(self.index)) + + +class Countdown(Progress): + def update(self): + self.write(str(self.remaining)) + + +class Stack(Progress): + phases = (' ', '▁', '▂', '▃', '▄', '▅', '▆', '▇', '█') + + def update(self): + nphases = len(self.phases) + i = min(nphases - 1, int(self.progress * nphases)) + self.write(self.phases[i]) + + +class Pie(Stack): + phases = ('○', '◔', '◑', '◕', '●') diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/progress/spinner.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/progress/spinner.py new file mode 100644 index 00000000..4e100cab --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/progress/spinner.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2012 Giorgos Verigakis <verigak@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. + +from __future__ import unicode_literals +from . import Infinite + + +class Spinner(Infinite): + phases = ('-', '\\', '|', '/') + hide_cursor = True + + def update(self): + i = self.index % len(self.phases) + self.write(self.phases[i]) + + +class PieSpinner(Spinner): + phases = ['◷', '◶', '◵', '◴'] + + +class MoonSpinner(Spinner): + phases = ['◑', '◒', '◐', '◓'] + + +class LineSpinner(Spinner): + phases = ['⎺', '⎻', '⎼', '⎽', '⎼', '⎻'] + + +class PixelSpinner(Spinner): + phases = ['⣾', '⣷', '⣯', '⣟', '⡿', '⢿', '⣻', '⣽'] diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pyparsing.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pyparsing.py new file mode 100644 index 00000000..9d6a01d5 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pyparsing.py @@ -0,0 +1,6493 @@ +#-*- coding: utf-8 -*- +# module pyparsing.py +# +# Copyright (c) 2003-2019 Paul T. McGuire +# +# 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. +# + +__doc__ = \ +""" +pyparsing module - Classes and methods to define and execute parsing grammars +============================================================================= + +The pyparsing module is an alternative approach to creating and +executing simple grammars, vs. the traditional lex/yacc approach, or the +use of regular expressions. With pyparsing, you don't need to learn +a new syntax for defining grammars or matching expressions - the parsing +module provides a library of classes that you use to construct the +grammar directly in Python. + +Here is a program to parse "Hello, World!" (or any greeting of the form +``"<salutation>, <addressee>!"``), built up using :class:`Word`, +:class:`Literal`, and :class:`And` elements +(the :class:`'+'<ParserElement.__add__>` operators create :class:`And` expressions, +and the strings are auto-converted to :class:`Literal` expressions):: + + from pip._vendor.pyparsing import Word, alphas + + # define grammar of a greeting + greet = Word(alphas) + "," + Word(alphas) + "!" + + hello = "Hello, World!" + print (hello, "->", greet.parseString(hello)) + +The program outputs the following:: + + Hello, World! -> ['Hello', ',', 'World', '!'] + +The Python representation of the grammar is quite readable, owing to the +self-explanatory class names, and the use of '+', '|' and '^' operators. + +The :class:`ParseResults` object returned from +:class:`ParserElement.parseString` can be +accessed as a nested list, a dictionary, or an object with named +attributes. + +The pyparsing module handles some of the problems that are typically +vexing when writing text parsers: + + - extra or missing whitespace (the above program will also handle + "Hello,World!", "Hello , World !", etc.) + - quoted strings + - embedded comments + + +Getting Started - +----------------- +Visit the classes :class:`ParserElement` and :class:`ParseResults` to +see the base classes that most other pyparsing +classes inherit from. Use the docstrings for examples of how to: + + - construct literal match expressions from :class:`Literal` and + :class:`CaselessLiteral` classes + - construct character word-group expressions using the :class:`Word` + class + - see how to create repetitive expressions using :class:`ZeroOrMore` + and :class:`OneOrMore` classes + - use :class:`'+'<And>`, :class:`'|'<MatchFirst>`, :class:`'^'<Or>`, + and :class:`'&'<Each>` operators to combine simple expressions into + more complex ones + - associate names with your parsed results using + :class:`ParserElement.setResultsName` + - find some helpful expression short-cuts like :class:`delimitedList` + and :class:`oneOf` + - find more useful common expressions in the :class:`pyparsing_common` + namespace class +""" + +__version__ = "2.4.0" +__versionTime__ = "07 Apr 2019 18:28 UTC" +__author__ = "Paul McGuire <ptmcg@users.sourceforge.net>" + +import string +from weakref import ref as wkref +import copy +import sys +import warnings +import re +import sre_constants +import collections +import pprint +import traceback +import types +from datetime import datetime + +try: + # Python 3 + from itertools import filterfalse +except ImportError: + from itertools import ifilterfalse as filterfalse + +try: + from _thread import RLock +except ImportError: + from threading import RLock + +try: + # Python 3 + from collections.abc import Iterable + from collections.abc import MutableMapping +except ImportError: + # Python 2.7 + from collections import Iterable + from collections import MutableMapping + +try: + from collections import OrderedDict as _OrderedDict +except ImportError: + try: + from ordereddict import OrderedDict as _OrderedDict + except ImportError: + _OrderedDict = None + +try: + from types import SimpleNamespace +except ImportError: + class SimpleNamespace: pass + +# version compatibility configuration +__compat__ = SimpleNamespace() +__compat__.__doc__ = """ + A cross-version compatibility configuration for pyparsing features that will be + released in a future version. By setting values in this configuration to True, + those features can be enabled in prior versions for compatibility development + and testing. + + - collect_all_And_tokens - flag to enable fix for Issue #63 that fixes erroneous grouping + of results names when an And expression is nested within an Or or MatchFirst; set to + True to enable bugfix to be released in pyparsing 2.4 +""" +__compat__.collect_all_And_tokens = True + + +#~ sys.stderr.write( "testing pyparsing module, version %s, %s\n" % (__version__,__versionTime__ ) ) + +__all__ = [ '__version__', '__versionTime__', '__author__', '__compat__', +'And', 'CaselessKeyword', 'CaselessLiteral', 'CharsNotIn', 'Combine', 'Dict', 'Each', 'Empty', +'FollowedBy', 'Forward', 'GoToColumn', 'Group', 'Keyword', 'LineEnd', 'LineStart', 'Literal', +'PrecededBy', 'MatchFirst', 'NoMatch', 'NotAny', 'OneOrMore', 'OnlyOnce', 'Optional', 'Or', +'ParseBaseException', 'ParseElementEnhance', 'ParseException', 'ParseExpression', 'ParseFatalException', +'ParseResults', 'ParseSyntaxException', 'ParserElement', 'QuotedString', 'RecursiveGrammarException', +'Regex', 'SkipTo', 'StringEnd', 'StringStart', 'Suppress', 'Token', 'TokenConverter', +'White', 'Word', 'WordEnd', 'WordStart', 'ZeroOrMore', 'Char', +'alphanums', 'alphas', 'alphas8bit', 'anyCloseTag', 'anyOpenTag', 'cStyleComment', 'col', +'commaSeparatedList', 'commonHTMLEntity', 'countedArray', 'cppStyleComment', 'dblQuotedString', +'dblSlashComment', 'delimitedList', 'dictOf', 'downcaseTokens', 'empty', 'hexnums', +'htmlComment', 'javaStyleComment', 'line', 'lineEnd', 'lineStart', 'lineno', +'makeHTMLTags', 'makeXMLTags', 'matchOnlyAtCol', 'matchPreviousExpr', 'matchPreviousLiteral', +'nestedExpr', 'nullDebugAction', 'nums', 'oneOf', 'opAssoc', 'operatorPrecedence', 'printables', +'punc8bit', 'pythonStyleComment', 'quotedString', 'removeQuotes', 'replaceHTMLEntity', +'replaceWith', 'restOfLine', 'sglQuotedString', 'srange', 'stringEnd', +'stringStart', 'traceParseAction', 'unicodeString', 'upcaseTokens', 'withAttribute', +'indentedBlock', 'originalTextFor', 'ungroup', 'infixNotation','locatedExpr', 'withClass', +'CloseMatch', 'tokenMap', 'pyparsing_common', 'pyparsing_unicode', 'unicode_set', +] + +system_version = tuple(sys.version_info)[:3] +PY_3 = system_version[0] == 3 +if PY_3: + _MAX_INT = sys.maxsize + basestring = str + unichr = chr + unicode = str + _ustr = str + + # build list of single arg builtins, that can be used as parse actions + singleArgBuiltins = [sum, len, sorted, reversed, list, tuple, set, any, all, min, max] + +else: + _MAX_INT = sys.maxint + range = xrange + + def _ustr(obj): + """Drop-in replacement for str(obj) that tries to be Unicode + friendly. It first tries str(obj). If that fails with + a UnicodeEncodeError, then it tries unicode(obj). It then + < returns the unicode object | encodes it with the default + encoding | ... >. + """ + if isinstance(obj,unicode): + return obj + + try: + # If this works, then _ustr(obj) has the same behaviour as str(obj), so + # it won't break any existing code. + return str(obj) + + except UnicodeEncodeError: + # Else encode it + ret = unicode(obj).encode(sys.getdefaultencoding(), 'xmlcharrefreplace') + xmlcharref = Regex(r'&#\d+;') + xmlcharref.setParseAction(lambda t: '\\u' + hex(int(t[0][2:-1]))[2:]) + return xmlcharref.transformString(ret) + + # build list of single arg builtins, tolerant of Python version, that can be used as parse actions + singleArgBuiltins = [] + import __builtin__ + for fname in "sum len sorted reversed list tuple set any all min max".split(): + try: + singleArgBuiltins.append(getattr(__builtin__,fname)) + except AttributeError: + continue + +_generatorType = type((y for y in range(1))) + +def _xml_escape(data): + """Escape &, <, >, ", ', etc. in a string of data.""" + + # ampersand must be replaced first + from_symbols = '&><"\'' + to_symbols = ('&'+s+';' for s in "amp gt lt quot apos".split()) + for from_,to_ in zip(from_symbols, to_symbols): + data = data.replace(from_, to_) + return data + +alphas = string.ascii_uppercase + string.ascii_lowercase +nums = "0123456789" +hexnums = nums + "ABCDEFabcdef" +alphanums = alphas + nums +_bslash = chr(92) +printables = "".join(c for c in string.printable if c not in string.whitespace) + +class ParseBaseException(Exception): + """base exception class for all parsing runtime exceptions""" + # Performance tuning: we construct a *lot* of these, so keep this + # constructor as small and fast as possible + def __init__( self, pstr, loc=0, msg=None, elem=None ): + self.loc = loc + if msg is None: + self.msg = pstr + self.pstr = "" + else: + self.msg = msg + self.pstr = pstr + self.parserElement = elem + self.args = (pstr, loc, msg) + + @classmethod + def _from_exception(cls, pe): + """ + internal factory method to simplify creating one type of ParseException + from another - avoids having __init__ signature conflicts among subclasses + """ + return cls(pe.pstr, pe.loc, pe.msg, pe.parserElement) + + def __getattr__( self, aname ): + """supported attributes by name are: + - lineno - returns the line number of the exception text + - col - returns the column number of the exception text + - line - returns the line containing the exception text + """ + if( aname == "lineno" ): + return lineno( self.loc, self.pstr ) + elif( aname in ("col", "column") ): + return col( self.loc, self.pstr ) + elif( aname == "line" ): + return line( self.loc, self.pstr ) + else: + raise AttributeError(aname) + + def __str__( self ): + return "%s (at char %d), (line:%d, col:%d)" % \ + ( self.msg, self.loc, self.lineno, self.column ) + def __repr__( self ): + return _ustr(self) + def markInputline( self, markerString = ">!<" ): + """Extracts the exception line from the input string, and marks + the location of the exception with a special symbol. + """ + line_str = self.line + line_column = self.column - 1 + if markerString: + line_str = "".join((line_str[:line_column], + markerString, line_str[line_column:])) + return line_str.strip() + def __dir__(self): + return "lineno col line".split() + dir(type(self)) + +class ParseException(ParseBaseException): + """ + Exception thrown when parse expressions don't match class; + supported attributes by name are: + - lineno - returns the line number of the exception text + - col - returns the column number of the exception text + - line - returns the line containing the exception text + + Example:: + + try: + Word(nums).setName("integer").parseString("ABC") + except ParseException as pe: + print(pe) + print("column: {}".format(pe.col)) + + prints:: + + Expected integer (at char 0), (line:1, col:1) + column: 1 + + """ + + @staticmethod + def explain(exc, depth=16): + """ + Method to take an exception and translate the Python internal traceback into a list + of the pyparsing expressions that caused the exception to be raised. + + Parameters: + + - exc - exception raised during parsing (need not be a ParseException, in support + of Python exceptions that might be raised in a parse action) + - depth (default=16) - number of levels back in the stack trace to list expression + and function names; if None, the full stack trace names will be listed; if 0, only + the failing input line, marker, and exception string will be shown + + Returns a multi-line string listing the ParserElements and/or function names in the + exception's stack trace. + + Note: the diagnostic output will include string representations of the expressions + that failed to parse. These representations will be more helpful if you use `setName` to + give identifiable names to your expressions. Otherwise they will use the default string + forms, which may be cryptic to read. + + explain() is only supported under Python 3. + """ + import inspect + + if depth is None: + depth = sys.getrecursionlimit() + ret = [] + if isinstance(exc, ParseBaseException): + ret.append(exc.line) + ret.append(' ' * (exc.col - 1) + '^') + ret.append("{0}: {1}".format(type(exc).__name__, exc)) + + if depth > 0: + callers = inspect.getinnerframes(exc.__traceback__, context=depth) + seen = set() + for i, ff in enumerate(callers[-depth:]): + frm = ff[0] + + f_self = frm.f_locals.get('self', None) + if isinstance(f_self, ParserElement): + if frm.f_code.co_name not in ('parseImpl', '_parseNoCache'): + continue + if f_self in seen: + continue + seen.add(f_self) + + self_type = type(f_self) + ret.append("{0}.{1} - {2}".format(self_type.__module__, + self_type.__name__, + f_self)) + elif f_self is not None: + self_type = type(f_self) + ret.append("{0}.{1}".format(self_type.__module__, + self_type.__name__)) + else: + code = frm.f_code + if code.co_name in ('wrapper', '<module>'): + continue + + ret.append("{0}".format(code.co_name)) + + depth -= 1 + if not depth: + break + + return '\n'.join(ret) + + +class ParseFatalException(ParseBaseException): + """user-throwable exception thrown when inconsistent parse content + is found; stops all parsing immediately""" + pass + +class ParseSyntaxException(ParseFatalException): + """just like :class:`ParseFatalException`, but thrown internally + when an :class:`ErrorStop<And._ErrorStop>` ('-' operator) indicates + that parsing is to stop immediately because an unbacktrackable + syntax error has been found. + """ + pass + +#~ class ReparseException(ParseBaseException): + #~ """Experimental class - parse actions can raise this exception to cause + #~ pyparsing to reparse the input string: + #~ - with a modified input string, and/or + #~ - with a modified start location + #~ Set the values of the ReparseException in the constructor, and raise the + #~ exception in a parse action to cause pyparsing to use the new string/location. + #~ Setting the values as None causes no change to be made. + #~ """ + #~ def __init_( self, newstring, restartLoc ): + #~ self.newParseText = newstring + #~ self.reparseLoc = restartLoc + +class RecursiveGrammarException(Exception): + """exception thrown by :class:`ParserElement.validate` if the + grammar could be improperly recursive + """ + def __init__( self, parseElementList ): + self.parseElementTrace = parseElementList + + def __str__( self ): + return "RecursiveGrammarException: %s" % self.parseElementTrace + +class _ParseResultsWithOffset(object): + def __init__(self,p1,p2): + self.tup = (p1,p2) + def __getitem__(self,i): + return self.tup[i] + def __repr__(self): + return repr(self.tup[0]) + def setOffset(self,i): + self.tup = (self.tup[0],i) + +class ParseResults(object): + """Structured parse results, to provide multiple means of access to + the parsed data: + + - as a list (``len(results)``) + - by list index (``results[0], results[1]``, etc.) + - by attribute (``results.<resultsName>`` - see :class:`ParserElement.setResultsName`) + + Example:: + + integer = Word(nums) + date_str = (integer.setResultsName("year") + '/' + + integer.setResultsName("month") + '/' + + integer.setResultsName("day")) + # equivalent form: + # date_str = integer("year") + '/' + integer("month") + '/' + integer("day") + + # parseString returns a ParseResults object + result = date_str.parseString("1999/12/31") + + def test(s, fn=repr): + print("%s -> %s" % (s, fn(eval(s)))) + test("list(result)") + test("result[0]") + test("result['month']") + test("result.day") + test("'month' in result") + test("'minutes' in result") + test("result.dump()", str) + + prints:: + + list(result) -> ['1999', '/', '12', '/', '31'] + result[0] -> '1999' + result['month'] -> '12' + result.day -> '31' + 'month' in result -> True + 'minutes' in result -> False + result.dump() -> ['1999', '/', '12', '/', '31'] + - day: 31 + - month: 12 + - year: 1999 + """ + def __new__(cls, toklist=None, name=None, asList=True, modal=True ): + if isinstance(toklist, cls): + return toklist + retobj = object.__new__(cls) + retobj.__doinit = True + return retobj + + # Performance tuning: we construct a *lot* of these, so keep this + # constructor as small and fast as possible + def __init__( self, toklist=None, name=None, asList=True, modal=True, isinstance=isinstance ): + if self.__doinit: + self.__doinit = False + self.__name = None + self.__parent = None + self.__accumNames = {} + self.__asList = asList + self.__modal = modal + if toklist is None: + toklist = [] + if isinstance(toklist, list): + self.__toklist = toklist[:] + elif isinstance(toklist, _generatorType): + self.__toklist = list(toklist) + else: + self.__toklist = [toklist] + self.__tokdict = dict() + + if name is not None and name: + if not modal: + self.__accumNames[name] = 0 + if isinstance(name,int): + name = _ustr(name) # will always return a str, but use _ustr for consistency + self.__name = name + if not (isinstance(toklist, (type(None), basestring, list)) and toklist in (None,'',[])): + if isinstance(toklist,basestring): + toklist = [ toklist ] + if asList: + if isinstance(toklist,ParseResults): + self[name] = _ParseResultsWithOffset(ParseResults(toklist.__toklist), 0) + else: + self[name] = _ParseResultsWithOffset(ParseResults(toklist[0]),0) + self[name].__name = name + else: + try: + self[name] = toklist[0] + except (KeyError,TypeError,IndexError): + self[name] = toklist + + def __getitem__( self, i ): + if isinstance( i, (int,slice) ): + return self.__toklist[i] + else: + if i not in self.__accumNames: + return self.__tokdict[i][-1][0] + else: + return ParseResults([ v[0] for v in self.__tokdict[i] ]) + + def __setitem__( self, k, v, isinstance=isinstance ): + if isinstance(v,_ParseResultsWithOffset): + self.__tokdict[k] = self.__tokdict.get(k,list()) + [v] + sub = v[0] + elif isinstance(k,(int,slice)): + self.__toklist[k] = v + sub = v + else: + self.__tokdict[k] = self.__tokdict.get(k,list()) + [_ParseResultsWithOffset(v,0)] + sub = v + if isinstance(sub,ParseResults): + sub.__parent = wkref(self) + + def __delitem__( self, i ): + if isinstance(i,(int,slice)): + mylen = len( self.__toklist ) + del self.__toklist[i] + + # convert int to slice + if isinstance(i, int): + if i < 0: + i += mylen + i = slice(i, i+1) + # get removed indices + removed = list(range(*i.indices(mylen))) + removed.reverse() + # fixup indices in token dictionary + for name,occurrences in self.__tokdict.items(): + for j in removed: + for k, (value, position) in enumerate(occurrences): + occurrences[k] = _ParseResultsWithOffset(value, position - (position > j)) + else: + del self.__tokdict[i] + + def __contains__( self, k ): + return k in self.__tokdict + + def __len__( self ): return len( self.__toklist ) + def __bool__(self): return ( not not self.__toklist ) + __nonzero__ = __bool__ + def __iter__( self ): return iter( self.__toklist ) + def __reversed__( self ): return iter( self.__toklist[::-1] ) + def _iterkeys( self ): + if hasattr(self.__tokdict, "iterkeys"): + return self.__tokdict.iterkeys() + else: + return iter(self.__tokdict) + + def _itervalues( self ): + return (self[k] for k in self._iterkeys()) + + def _iteritems( self ): + return ((k, self[k]) for k in self._iterkeys()) + + if PY_3: + keys = _iterkeys + """Returns an iterator of all named result keys.""" + + values = _itervalues + """Returns an iterator of all named result values.""" + + items = _iteritems + """Returns an iterator of all named result key-value tuples.""" + + else: + iterkeys = _iterkeys + """Returns an iterator of all named result keys (Python 2.x only).""" + + itervalues = _itervalues + """Returns an iterator of all named result values (Python 2.x only).""" + + iteritems = _iteritems + """Returns an iterator of all named result key-value tuples (Python 2.x only).""" + + def keys( self ): + """Returns all named result keys (as a list in Python 2.x, as an iterator in Python 3.x).""" + return list(self.iterkeys()) + + def values( self ): + """Returns all named result values (as a list in Python 2.x, as an iterator in Python 3.x).""" + return list(self.itervalues()) + + def items( self ): + """Returns all named result key-values (as a list of tuples in Python 2.x, as an iterator in Python 3.x).""" + return list(self.iteritems()) + + def haskeys( self ): + """Since keys() returns an iterator, this method is helpful in bypassing + code that looks for the existence of any defined results names.""" + return bool(self.__tokdict) + + def pop( self, *args, **kwargs): + """ + Removes and returns item at specified index (default= ``last``). + Supports both ``list`` and ``dict`` semantics for ``pop()``. If + passed no argument or an integer argument, it will use ``list`` + semantics and pop tokens from the list of parsed tokens. If passed + a non-integer argument (most likely a string), it will use ``dict`` + semantics and pop the corresponding value from any defined results + names. A second default return value argument is supported, just as in + ``dict.pop()``. + + Example:: + + def remove_first(tokens): + tokens.pop(0) + print(OneOrMore(Word(nums)).parseString("0 123 321")) # -> ['0', '123', '321'] + print(OneOrMore(Word(nums)).addParseAction(remove_first).parseString("0 123 321")) # -> ['123', '321'] + + label = Word(alphas) + patt = label("LABEL") + OneOrMore(Word(nums)) + print(patt.parseString("AAB 123 321").dump()) + + # Use pop() in a parse action to remove named result (note that corresponding value is not + # removed from list form of results) + def remove_LABEL(tokens): + tokens.pop("LABEL") + return tokens + patt.addParseAction(remove_LABEL) + print(patt.parseString("AAB 123 321").dump()) + + prints:: + + ['AAB', '123', '321'] + - LABEL: AAB + + ['AAB', '123', '321'] + """ + if not args: + args = [-1] + for k,v in kwargs.items(): + if k == 'default': + args = (args[0], v) + else: + raise TypeError("pop() got an unexpected keyword argument '%s'" % k) + if (isinstance(args[0], int) or + len(args) == 1 or + args[0] in self): + index = args[0] + ret = self[index] + del self[index] + return ret + else: + defaultvalue = args[1] + return defaultvalue + + def get(self, key, defaultValue=None): + """ + Returns named result matching the given key, or if there is no + such name, then returns the given ``defaultValue`` or ``None`` if no + ``defaultValue`` is specified. + + Similar to ``dict.get()``. + + Example:: + + integer = Word(nums) + date_str = integer("year") + '/' + integer("month") + '/' + integer("day") + + result = date_str.parseString("1999/12/31") + print(result.get("year")) # -> '1999' + print(result.get("hour", "not specified")) # -> 'not specified' + print(result.get("hour")) # -> None + """ + if key in self: + return self[key] + else: + return defaultValue + + def insert( self, index, insStr ): + """ + Inserts new element at location index in the list of parsed tokens. + + Similar to ``list.insert()``. + + Example:: + + print(OneOrMore(Word(nums)).parseString("0 123 321")) # -> ['0', '123', '321'] + + # use a parse action to insert the parse location in the front of the parsed results + def insert_locn(locn, tokens): + tokens.insert(0, locn) + print(OneOrMore(Word(nums)).addParseAction(insert_locn).parseString("0 123 321")) # -> [0, '0', '123', '321'] + """ + self.__toklist.insert(index, insStr) + # fixup indices in token dictionary + for name,occurrences in self.__tokdict.items(): + for k, (value, position) in enumerate(occurrences): + occurrences[k] = _ParseResultsWithOffset(value, position + (position > index)) + + def append( self, item ): + """ + Add single element to end of ParseResults list of elements. + + Example:: + + print(OneOrMore(Word(nums)).parseString("0 123 321")) # -> ['0', '123', '321'] + + # use a parse action to compute the sum of the parsed integers, and add it to the end + def append_sum(tokens): + tokens.append(sum(map(int, tokens))) + print(OneOrMore(Word(nums)).addParseAction(append_sum).parseString("0 123 321")) # -> ['0', '123', '321', 444] + """ + self.__toklist.append(item) + + def extend( self, itemseq ): + """ + Add sequence of elements to end of ParseResults list of elements. + + Example:: + + patt = OneOrMore(Word(alphas)) + + # use a parse action to append the reverse of the matched strings, to make a palindrome + def make_palindrome(tokens): + tokens.extend(reversed([t[::-1] for t in tokens])) + return ''.join(tokens) + print(patt.addParseAction(make_palindrome).parseString("lskdj sdlkjf lksd")) # -> 'lskdjsdlkjflksddsklfjkldsjdksl' + """ + if isinstance(itemseq, ParseResults): + self.__iadd__(itemseq) + else: + self.__toklist.extend(itemseq) + + def clear( self ): + """ + Clear all elements and results names. + """ + del self.__toklist[:] + self.__tokdict.clear() + + def __getattr__( self, name ): + try: + return self[name] + except KeyError: + return "" + + if name in self.__tokdict: + if name not in self.__accumNames: + return self.__tokdict[name][-1][0] + else: + return ParseResults([ v[0] for v in self.__tokdict[name] ]) + else: + return "" + + def __add__( self, other ): + ret = self.copy() + ret += other + return ret + + def __iadd__( self, other ): + if other.__tokdict: + offset = len(self.__toklist) + addoffset = lambda a: offset if a<0 else a+offset + otheritems = other.__tokdict.items() + otherdictitems = [(k, _ParseResultsWithOffset(v[0],addoffset(v[1])) ) + for (k,vlist) in otheritems for v in vlist] + for k,v in otherdictitems: + self[k] = v + if isinstance(v[0],ParseResults): + v[0].__parent = wkref(self) + + self.__toklist += other.__toklist + self.__accumNames.update( other.__accumNames ) + return self + + def __radd__(self, other): + if isinstance(other,int) and other == 0: + # useful for merging many ParseResults using sum() builtin + return self.copy() + else: + # this may raise a TypeError - so be it + return other + self + + def __repr__( self ): + return "(%s, %s)" % ( repr( self.__toklist ), repr( self.__tokdict ) ) + + def __str__( self ): + return '[' + ', '.join(_ustr(i) if isinstance(i, ParseResults) else repr(i) for i in self.__toklist) + ']' + + def _asStringList( self, sep='' ): + out = [] + for item in self.__toklist: + if out and sep: + out.append(sep) + if isinstance( item, ParseResults ): + out += item._asStringList() + else: + out.append( _ustr(item) ) + return out + + def asList( self ): + """ + Returns the parse results as a nested list of matching tokens, all converted to strings. + + Example:: + + patt = OneOrMore(Word(alphas)) + result = patt.parseString("sldkj lsdkj sldkj") + # even though the result prints in string-like form, it is actually a pyparsing ParseResults + print(type(result), result) # -> <class 'pyparsing.ParseResults'> ['sldkj', 'lsdkj', 'sldkj'] + + # Use asList() to create an actual list + result_list = result.asList() + print(type(result_list), result_list) # -> <class 'list'> ['sldkj', 'lsdkj', 'sldkj'] + """ + return [res.asList() if isinstance(res,ParseResults) else res for res in self.__toklist] + + def asDict( self ): + """ + Returns the named parse results as a nested dictionary. + + Example:: + + integer = Word(nums) + date_str = integer("year") + '/' + integer("month") + '/' + integer("day") + + result = date_str.parseString('12/31/1999') + print(type(result), repr(result)) # -> <class 'pyparsing.ParseResults'> (['12', '/', '31', '/', '1999'], {'day': [('1999', 4)], 'year': [('12', 0)], 'month': [('31', 2)]}) + + result_dict = result.asDict() + print(type(result_dict), repr(result_dict)) # -> <class 'dict'> {'day': '1999', 'year': '12', 'month': '31'} + + # even though a ParseResults supports dict-like access, sometime you just need to have a dict + import json + print(json.dumps(result)) # -> Exception: TypeError: ... is not JSON serializable + print(json.dumps(result.asDict())) # -> {"month": "31", "day": "1999", "year": "12"} + """ + if PY_3: + item_fn = self.items + else: + item_fn = self.iteritems + + def toItem(obj): + if isinstance(obj, ParseResults): + if obj.haskeys(): + return obj.asDict() + else: + return [toItem(v) for v in obj] + else: + return obj + + return dict((k,toItem(v)) for k,v in item_fn()) + + def copy( self ): + """ + Returns a new copy of a :class:`ParseResults` object. + """ + ret = ParseResults( self.__toklist ) + ret.__tokdict = dict(self.__tokdict.items()) + ret.__parent = self.__parent + ret.__accumNames.update( self.__accumNames ) + ret.__name = self.__name + return ret + + def asXML( self, doctag=None, namedItemsOnly=False, indent="", formatted=True ): + """ + (Deprecated) Returns the parse results as XML. Tags are created for tokens and lists that have defined results names. + """ + nl = "\n" + out = [] + namedItems = dict((v[1],k) for (k,vlist) in self.__tokdict.items() + for v in vlist) + nextLevelIndent = indent + " " + + # collapse out indents if formatting is not desired + if not formatted: + indent = "" + nextLevelIndent = "" + nl = "" + + selfTag = None + if doctag is not None: + selfTag = doctag + else: + if self.__name: + selfTag = self.__name + + if not selfTag: + if namedItemsOnly: + return "" + else: + selfTag = "ITEM" + + out += [ nl, indent, "<", selfTag, ">" ] + + for i,res in enumerate(self.__toklist): + if isinstance(res,ParseResults): + if i in namedItems: + out += [ res.asXML(namedItems[i], + namedItemsOnly and doctag is None, + nextLevelIndent, + formatted)] + else: + out += [ res.asXML(None, + namedItemsOnly and doctag is None, + nextLevelIndent, + formatted)] + else: + # individual token, see if there is a name for it + resTag = None + if i in namedItems: + resTag = namedItems[i] + if not resTag: + if namedItemsOnly: + continue + else: + resTag = "ITEM" + xmlBodyText = _xml_escape(_ustr(res)) + out += [ nl, nextLevelIndent, "<", resTag, ">", + xmlBodyText, + "</", resTag, ">" ] + + out += [ nl, indent, "</", selfTag, ">" ] + return "".join(out) + + def __lookup(self,sub): + for k,vlist in self.__tokdict.items(): + for v,loc in vlist: + if sub is v: + return k + return None + + def getName(self): + r""" + Returns the results name for this token expression. Useful when several + different expressions might match at a particular location. + + Example:: + + integer = Word(nums) + ssn_expr = Regex(r"\d\d\d-\d\d-\d\d\d\d") + house_number_expr = Suppress('#') + Word(nums, alphanums) + user_data = (Group(house_number_expr)("house_number") + | Group(ssn_expr)("ssn") + | Group(integer)("age")) + user_info = OneOrMore(user_data) + + result = user_info.parseString("22 111-22-3333 #221B") + for item in result: + print(item.getName(), ':', item[0]) + + prints:: + + age : 22 + ssn : 111-22-3333 + house_number : 221B + """ + if self.__name: + return self.__name + elif self.__parent: + par = self.__parent() + if par: + return par.__lookup(self) + else: + return None + elif (len(self) == 1 and + len(self.__tokdict) == 1 and + next(iter(self.__tokdict.values()))[0][1] in (0,-1)): + return next(iter(self.__tokdict.keys())) + else: + return None + + def dump(self, indent='', depth=0, full=True): + """ + Diagnostic method for listing out the contents of + a :class:`ParseResults`. Accepts an optional ``indent`` argument so + that this string can be embedded in a nested display of other data. + + Example:: + + integer = Word(nums) + date_str = integer("year") + '/' + integer("month") + '/' + integer("day") + + result = date_str.parseString('12/31/1999') + print(result.dump()) + + prints:: + + ['12', '/', '31', '/', '1999'] + - day: 1999 + - month: 31 + - year: 12 + """ + out = [] + NL = '\n' + out.append( indent+_ustr(self.asList()) ) + if full: + if self.haskeys(): + items = sorted((str(k), v) for k,v in self.items()) + for k,v in items: + if out: + out.append(NL) + out.append( "%s%s- %s: " % (indent,(' '*depth), k) ) + if isinstance(v,ParseResults): + if v: + out.append( v.dump(indent,depth+1) ) + else: + out.append(_ustr(v)) + else: + out.append(repr(v)) + elif any(isinstance(vv,ParseResults) for vv in self): + v = self + for i,vv in enumerate(v): + if isinstance(vv,ParseResults): + out.append("\n%s%s[%d]:\n%s%s%s" % (indent,(' '*(depth)),i,indent,(' '*(depth+1)),vv.dump(indent,depth+1) )) + else: + out.append("\n%s%s[%d]:\n%s%s%s" % (indent,(' '*(depth)),i,indent,(' '*(depth+1)),_ustr(vv))) + + return "".join(out) + + def pprint(self, *args, **kwargs): + """ + Pretty-printer for parsed results as a list, using the + `pprint <https://docs.python.org/3/library/pprint.html>`_ module. + Accepts additional positional or keyword args as defined for + `pprint.pprint <https://docs.python.org/3/library/pprint.html#pprint.pprint>`_ . + + Example:: + + ident = Word(alphas, alphanums) + num = Word(nums) + func = Forward() + term = ident | num | Group('(' + func + ')') + func <<= ident + Group(Optional(delimitedList(term))) + result = func.parseString("fna a,b,(fnb c,d,200),100") + result.pprint(width=40) + + prints:: + + ['fna', + ['a', + 'b', + ['(', 'fnb', ['c', 'd', '200'], ')'], + '100']] + """ + pprint.pprint(self.asList(), *args, **kwargs) + + # add support for pickle protocol + def __getstate__(self): + return ( self.__toklist, + ( self.__tokdict.copy(), + self.__parent is not None and self.__parent() or None, + self.__accumNames, + self.__name ) ) + + def __setstate__(self,state): + self.__toklist = state[0] + (self.__tokdict, + par, + inAccumNames, + self.__name) = state[1] + self.__accumNames = {} + self.__accumNames.update(inAccumNames) + if par is not None: + self.__parent = wkref(par) + else: + self.__parent = None + + def __getnewargs__(self): + return self.__toklist, self.__name, self.__asList, self.__modal + + def __dir__(self): + return (dir(type(self)) + list(self.keys())) + +MutableMapping.register(ParseResults) + +def col (loc,strg): + """Returns current column within a string, counting newlines as line separators. + The first column is number 1. + + Note: the default parsing behavior is to expand tabs in the input string + before starting the parsing process. See + :class:`ParserElement.parseString` for more + information on parsing strings containing ``<TAB>`` s, and suggested + methods to maintain a consistent view of the parsed string, the parse + location, and line and column positions within the parsed string. + """ + s = strg + return 1 if 0<loc<len(s) and s[loc-1] == '\n' else loc - s.rfind("\n", 0, loc) + +def lineno(loc,strg): + """Returns current line number within a string, counting newlines as line separators. + The first line is number 1. + + Note - the default parsing behavior is to expand tabs in the input string + before starting the parsing process. See :class:`ParserElement.parseString` + for more information on parsing strings containing ``<TAB>`` s, and + suggested methods to maintain a consistent view of the parsed string, the + parse location, and line and column positions within the parsed string. + """ + return strg.count("\n",0,loc) + 1 + +def line( loc, strg ): + """Returns the line of text containing loc within a string, counting newlines as line separators. + """ + lastCR = strg.rfind("\n", 0, loc) + nextCR = strg.find("\n", loc) + if nextCR >= 0: + return strg[lastCR+1:nextCR] + else: + return strg[lastCR+1:] + +def _defaultStartDebugAction( instring, loc, expr ): + print (("Match " + _ustr(expr) + " at loc " + _ustr(loc) + "(%d,%d)" % ( lineno(loc,instring), col(loc,instring) ))) + +def _defaultSuccessDebugAction( instring, startloc, endloc, expr, toks ): + print ("Matched " + _ustr(expr) + " -> " + str(toks.asList())) + +def _defaultExceptionDebugAction( instring, loc, expr, exc ): + print ("Exception raised:" + _ustr(exc)) + +def nullDebugAction(*args): + """'Do-nothing' debug action, to suppress debugging output during parsing.""" + pass + +# Only works on Python 3.x - nonlocal is toxic to Python 2 installs +#~ 'decorator to trim function calls to match the arity of the target' +#~ def _trim_arity(func, maxargs=3): + #~ if func in singleArgBuiltins: + #~ return lambda s,l,t: func(t) + #~ limit = 0 + #~ foundArity = False + #~ def wrapper(*args): + #~ nonlocal limit,foundArity + #~ while 1: + #~ try: + #~ ret = func(*args[limit:]) + #~ foundArity = True + #~ return ret + #~ except TypeError: + #~ if limit == maxargs or foundArity: + #~ raise + #~ limit += 1 + #~ continue + #~ return wrapper + +# this version is Python 2.x-3.x cross-compatible +'decorator to trim function calls to match the arity of the target' +def _trim_arity(func, maxargs=2): + if func in singleArgBuiltins: + return lambda s,l,t: func(t) + limit = [0] + foundArity = [False] + + # traceback return data structure changed in Py3.5 - normalize back to plain tuples + if system_version[:2] >= (3,5): + def extract_stack(limit=0): + # special handling for Python 3.5.0 - extra deep call stack by 1 + offset = -3 if system_version == (3,5,0) else -2 + frame_summary = traceback.extract_stack(limit=-offset+limit-1)[offset] + return [frame_summary[:2]] + def extract_tb(tb, limit=0): + frames = traceback.extract_tb(tb, limit=limit) + frame_summary = frames[-1] + return [frame_summary[:2]] + else: + extract_stack = traceback.extract_stack + extract_tb = traceback.extract_tb + + # synthesize what would be returned by traceback.extract_stack at the call to + # user's parse action 'func', so that we don't incur call penalty at parse time + + LINE_DIFF = 6 + # IF ANY CODE CHANGES, EVEN JUST COMMENTS OR BLANK LINES, BETWEEN THE NEXT LINE AND + # THE CALL TO FUNC INSIDE WRAPPER, LINE_DIFF MUST BE MODIFIED!!!! + this_line = extract_stack(limit=2)[-1] + pa_call_line_synth = (this_line[0], this_line[1]+LINE_DIFF) + + def wrapper(*args): + while 1: + try: + ret = func(*args[limit[0]:]) + foundArity[0] = True + return ret + except TypeError: + # re-raise TypeErrors if they did not come from our arity testing + if foundArity[0]: + raise + else: + try: + tb = sys.exc_info()[-1] + if not extract_tb(tb, limit=2)[-1][:2] == pa_call_line_synth: + raise + finally: + del tb + + if limit[0] <= maxargs: + limit[0] += 1 + continue + raise + + # copy func name to wrapper for sensible debug output + func_name = "<parse action>" + try: + func_name = getattr(func, '__name__', + getattr(func, '__class__').__name__) + except Exception: + func_name = str(func) + wrapper.__name__ = func_name + + return wrapper + +class ParserElement(object): + """Abstract base level parser element class.""" + DEFAULT_WHITE_CHARS = " \n\t\r" + verbose_stacktrace = False + + @staticmethod + def setDefaultWhitespaceChars( chars ): + r""" + Overrides the default whitespace chars + + Example:: + + # default whitespace chars are space, <TAB> and newline + OneOrMore(Word(alphas)).parseString("abc def\nghi jkl") # -> ['abc', 'def', 'ghi', 'jkl'] + + # change to just treat newline as significant + ParserElement.setDefaultWhitespaceChars(" \t") + OneOrMore(Word(alphas)).parseString("abc def\nghi jkl") # -> ['abc', 'def'] + """ + ParserElement.DEFAULT_WHITE_CHARS = chars + + @staticmethod + def inlineLiteralsUsing(cls): + """ + Set class to be used for inclusion of string literals into a parser. + + Example:: + + # default literal class used is Literal + integer = Word(nums) + date_str = integer("year") + '/' + integer("month") + '/' + integer("day") + + date_str.parseString("1999/12/31") # -> ['1999', '/', '12', '/', '31'] + + + # change to Suppress + ParserElement.inlineLiteralsUsing(Suppress) + date_str = integer("year") + '/' + integer("month") + '/' + integer("day") + + date_str.parseString("1999/12/31") # -> ['1999', '12', '31'] + """ + ParserElement._literalStringClass = cls + + def __init__( self, savelist=False ): + self.parseAction = list() + self.failAction = None + #~ self.name = "<unknown>" # don't define self.name, let subclasses try/except upcall + self.strRepr = None + self.resultsName = None + self.saveAsList = savelist + self.skipWhitespace = True + self.whiteChars = set(ParserElement.DEFAULT_WHITE_CHARS) + self.copyDefaultWhiteChars = True + self.mayReturnEmpty = False # used when checking for left-recursion + self.keepTabs = False + self.ignoreExprs = list() + self.debug = False + self.streamlined = False + self.mayIndexError = True # used to optimize exception handling for subclasses that don't advance parse index + self.errmsg = "" + self.modalResults = True # used to mark results names as modal (report only last) or cumulative (list all) + self.debugActions = ( None, None, None ) #custom debug actions + self.re = None + self.callPreparse = True # used to avoid redundant calls to preParse + self.callDuringTry = False + + def copy( self ): + """ + Make a copy of this :class:`ParserElement`. Useful for defining + different parse actions for the same parsing pattern, using copies of + the original parse element. + + Example:: + + integer = Word(nums).setParseAction(lambda toks: int(toks[0])) + integerK = integer.copy().addParseAction(lambda toks: toks[0]*1024) + Suppress("K") + integerM = integer.copy().addParseAction(lambda toks: toks[0]*1024*1024) + Suppress("M") + + print(OneOrMore(integerK | integerM | integer).parseString("5K 100 640K 256M")) + + prints:: + + [5120, 100, 655360, 268435456] + + Equivalent form of ``expr.copy()`` is just ``expr()``:: + + integerM = integer().addParseAction(lambda toks: toks[0]*1024*1024) + Suppress("M") + """ + cpy = copy.copy( self ) + cpy.parseAction = self.parseAction[:] + cpy.ignoreExprs = self.ignoreExprs[:] + if self.copyDefaultWhiteChars: + cpy.whiteChars = ParserElement.DEFAULT_WHITE_CHARS + return cpy + + def setName( self, name ): + """ + Define name for this expression, makes debugging and exception messages clearer. + + Example:: + + Word(nums).parseString("ABC") # -> Exception: Expected W:(0123...) (at char 0), (line:1, col:1) + Word(nums).setName("integer").parseString("ABC") # -> Exception: Expected integer (at char 0), (line:1, col:1) + """ + self.name = name + self.errmsg = "Expected " + self.name + if hasattr(self,"exception"): + self.exception.msg = self.errmsg + return self + + def setResultsName( self, name, listAllMatches=False ): + """ + Define name for referencing matching tokens as a nested attribute + of the returned parse results. + NOTE: this returns a *copy* of the original :class:`ParserElement` object; + this is so that the client can define a basic element, such as an + integer, and reference it in multiple places with different names. + + You can also set results names using the abbreviated syntax, + ``expr("name")`` in place of ``expr.setResultsName("name")`` + - see :class:`__call__`. + + Example:: + + date_str = (integer.setResultsName("year") + '/' + + integer.setResultsName("month") + '/' + + integer.setResultsName("day")) + + # equivalent form: + date_str = integer("year") + '/' + integer("month") + '/' + integer("day") + """ + newself = self.copy() + if name.endswith("*"): + name = name[:-1] + listAllMatches=True + newself.resultsName = name + newself.modalResults = not listAllMatches + return newself + + def setBreak(self,breakFlag = True): + """Method to invoke the Python pdb debugger when this element is + about to be parsed. Set ``breakFlag`` to True to enable, False to + disable. + """ + if breakFlag: + _parseMethod = self._parse + def breaker(instring, loc, doActions=True, callPreParse=True): + import pdb + pdb.set_trace() + return _parseMethod( instring, loc, doActions, callPreParse ) + breaker._originalParseMethod = _parseMethod + self._parse = breaker + else: + if hasattr(self._parse,"_originalParseMethod"): + self._parse = self._parse._originalParseMethod + return self + + def setParseAction( self, *fns, **kwargs ): + """ + Define one or more actions to perform when successfully matching parse element definition. + Parse action fn is a callable method with 0-3 arguments, called as ``fn(s,loc,toks)`` , + ``fn(loc,toks)`` , ``fn(toks)`` , or just ``fn()`` , where: + + - s = the original string being parsed (see note below) + - loc = the location of the matching substring + - toks = a list of the matched tokens, packaged as a :class:`ParseResults` object + + If the functions in fns modify the tokens, they can return them as the return + value from fn, and the modified list of tokens will replace the original. + Otherwise, fn does not need to return any value. + + Optional keyword arguments: + - callDuringTry = (default= ``False`` ) indicate if parse action should be run during lookaheads and alternate testing + + Note: the default parsing behavior is to expand tabs in the input string + before starting the parsing process. See :class:`parseString for more + information on parsing strings containing ``<TAB>`` s, and suggested + methods to maintain a consistent view of the parsed string, the parse + location, and line and column positions within the parsed string. + + Example:: + + integer = Word(nums) + date_str = integer + '/' + integer + '/' + integer + + date_str.parseString("1999/12/31") # -> ['1999', '/', '12', '/', '31'] + + # use parse action to convert to ints at parse time + integer = Word(nums).setParseAction(lambda toks: int(toks[0])) + date_str = integer + '/' + integer + '/' + integer + + # note that integer fields are now ints, not strings + date_str.parseString("1999/12/31") # -> [1999, '/', 12, '/', 31] + """ + self.parseAction = list(map(_trim_arity, list(fns))) + self.callDuringTry = kwargs.get("callDuringTry", False) + return self + + def addParseAction( self, *fns, **kwargs ): + """ + Add one or more parse actions to expression's list of parse actions. See :class:`setParseAction`. + + See examples in :class:`copy`. + """ + self.parseAction += list(map(_trim_arity, list(fns))) + self.callDuringTry = self.callDuringTry or kwargs.get("callDuringTry", False) + return self + + def addCondition(self, *fns, **kwargs): + """Add a boolean predicate function to expression's list of parse actions. See + :class:`setParseAction` for function call signatures. Unlike ``setParseAction``, + functions passed to ``addCondition`` need to return boolean success/fail of the condition. + + Optional keyword arguments: + - message = define a custom message to be used in the raised exception + - fatal = if True, will raise ParseFatalException to stop parsing immediately; otherwise will raise ParseException + + Example:: + + integer = Word(nums).setParseAction(lambda toks: int(toks[0])) + year_int = integer.copy() + year_int.addCondition(lambda toks: toks[0] >= 2000, message="Only support years 2000 and later") + date_str = year_int + '/' + integer + '/' + integer + + result = date_str.parseString("1999/12/31") # -> Exception: Only support years 2000 and later (at char 0), (line:1, col:1) + """ + msg = kwargs.get("message", "failed user-defined condition") + exc_type = ParseFatalException if kwargs.get("fatal", False) else ParseException + for fn in fns: + fn = _trim_arity(fn) + def pa(s,l,t): + if not bool(fn(s,l,t)): + raise exc_type(s,l,msg) + self.parseAction.append(pa) + self.callDuringTry = self.callDuringTry or kwargs.get("callDuringTry", False) + return self + + def setFailAction( self, fn ): + """Define action to perform if parsing fails at this expression. + Fail acton fn is a callable function that takes the arguments + ``fn(s,loc,expr,err)`` where: + - s = string being parsed + - loc = location where expression match was attempted and failed + - expr = the parse expression that failed + - err = the exception thrown + The function returns no value. It may throw :class:`ParseFatalException` + if it is desired to stop parsing immediately.""" + self.failAction = fn + return self + + def _skipIgnorables( self, instring, loc ): + exprsFound = True + while exprsFound: + exprsFound = False + for e in self.ignoreExprs: + try: + while 1: + loc,dummy = e._parse( instring, loc ) + exprsFound = True + except ParseException: + pass + return loc + + def preParse( self, instring, loc ): + if self.ignoreExprs: + loc = self._skipIgnorables( instring, loc ) + + if self.skipWhitespace: + wt = self.whiteChars + instrlen = len(instring) + while loc < instrlen and instring[loc] in wt: + loc += 1 + + return loc + + def parseImpl( self, instring, loc, doActions=True ): + return loc, [] + + def postParse( self, instring, loc, tokenlist ): + return tokenlist + + #~ @profile + def _parseNoCache( self, instring, loc, doActions=True, callPreParse=True ): + debugging = ( self.debug ) #and doActions ) + + if debugging or self.failAction: + #~ print ("Match",self,"at loc",loc,"(%d,%d)" % ( lineno(loc,instring), col(loc,instring) )) + if (self.debugActions[0] ): + self.debugActions[0]( instring, loc, self ) + if callPreParse and self.callPreparse: + preloc = self.preParse( instring, loc ) + else: + preloc = loc + tokensStart = preloc + try: + try: + loc,tokens = self.parseImpl( instring, preloc, doActions ) + except IndexError: + raise ParseException( instring, len(instring), self.errmsg, self ) + except ParseBaseException as err: + #~ print ("Exception raised:", err) + if self.debugActions[2]: + self.debugActions[2]( instring, tokensStart, self, err ) + if self.failAction: + self.failAction( instring, tokensStart, self, err ) + raise + else: + if callPreParse and self.callPreparse: + preloc = self.preParse( instring, loc ) + else: + preloc = loc + tokensStart = preloc + if self.mayIndexError or preloc >= len(instring): + try: + loc,tokens = self.parseImpl( instring, preloc, doActions ) + except IndexError: + raise ParseException( instring, len(instring), self.errmsg, self ) + else: + loc,tokens = self.parseImpl( instring, preloc, doActions ) + + tokens = self.postParse( instring, loc, tokens ) + + retTokens = ParseResults( tokens, self.resultsName, asList=self.saveAsList, modal=self.modalResults ) + if self.parseAction and (doActions or self.callDuringTry): + if debugging: + try: + for fn in self.parseAction: + try: + tokens = fn( instring, tokensStart, retTokens ) + except IndexError as parse_action_exc: + exc = ParseException("exception raised in parse action") + exc.__cause__ = parse_action_exc + raise exc + + if tokens is not None and tokens is not retTokens: + retTokens = ParseResults( tokens, + self.resultsName, + asList=self.saveAsList and isinstance(tokens,(ParseResults,list)), + modal=self.modalResults ) + except ParseBaseException as err: + #~ print "Exception raised in user parse action:", err + if (self.debugActions[2] ): + self.debugActions[2]( instring, tokensStart, self, err ) + raise + else: + for fn in self.parseAction: + try: + tokens = fn( instring, tokensStart, retTokens ) + except IndexError as parse_action_exc: + exc = ParseException("exception raised in parse action") + exc.__cause__ = parse_action_exc + raise exc + + if tokens is not None and tokens is not retTokens: + retTokens = ParseResults( tokens, + self.resultsName, + asList=self.saveAsList and isinstance(tokens,(ParseResults,list)), + modal=self.modalResults ) + if debugging: + #~ print ("Matched",self,"->",retTokens.asList()) + if (self.debugActions[1] ): + self.debugActions[1]( instring, tokensStart, loc, self, retTokens ) + + return loc, retTokens + + def tryParse( self, instring, loc ): + try: + return self._parse( instring, loc, doActions=False )[0] + except ParseFatalException: + raise ParseException( instring, loc, self.errmsg, self) + + def canParseNext(self, instring, loc): + try: + self.tryParse(instring, loc) + except (ParseException, IndexError): + return False + else: + return True + + class _UnboundedCache(object): + def __init__(self): + cache = {} + self.not_in_cache = not_in_cache = object() + + def get(self, key): + return cache.get(key, not_in_cache) + + def set(self, key, value): + cache[key] = value + + def clear(self): + cache.clear() + + def cache_len(self): + return len(cache) + + self.get = types.MethodType(get, self) + self.set = types.MethodType(set, self) + self.clear = types.MethodType(clear, self) + self.__len__ = types.MethodType(cache_len, self) + + if _OrderedDict is not None: + class _FifoCache(object): + def __init__(self, size): + self.not_in_cache = not_in_cache = object() + + cache = _OrderedDict() + + def get(self, key): + return cache.get(key, not_in_cache) + + def set(self, key, value): + cache[key] = value + while len(cache) > size: + try: + cache.popitem(False) + except KeyError: + pass + + def clear(self): + cache.clear() + + def cache_len(self): + return len(cache) + + self.get = types.MethodType(get, self) + self.set = types.MethodType(set, self) + self.clear = types.MethodType(clear, self) + self.__len__ = types.MethodType(cache_len, self) + + else: + class _FifoCache(object): + def __init__(self, size): + self.not_in_cache = not_in_cache = object() + + cache = {} + key_fifo = collections.deque([], size) + + def get(self, key): + return cache.get(key, not_in_cache) + + def set(self, key, value): + cache[key] = value + while len(key_fifo) > size: + cache.pop(key_fifo.popleft(), None) + key_fifo.append(key) + + def clear(self): + cache.clear() + key_fifo.clear() + + def cache_len(self): + return len(cache) + + self.get = types.MethodType(get, self) + self.set = types.MethodType(set, self) + self.clear = types.MethodType(clear, self) + self.__len__ = types.MethodType(cache_len, self) + + # argument cache for optimizing repeated calls when backtracking through recursive expressions + packrat_cache = {} # this is set later by enabledPackrat(); this is here so that resetCache() doesn't fail + packrat_cache_lock = RLock() + packrat_cache_stats = [0, 0] + + # this method gets repeatedly called during backtracking with the same arguments - + # we can cache these arguments and save ourselves the trouble of re-parsing the contained expression + def _parseCache( self, instring, loc, doActions=True, callPreParse=True ): + HIT, MISS = 0, 1 + lookup = (self, instring, loc, callPreParse, doActions) + with ParserElement.packrat_cache_lock: + cache = ParserElement.packrat_cache + value = cache.get(lookup) + if value is cache.not_in_cache: + ParserElement.packrat_cache_stats[MISS] += 1 + try: + value = self._parseNoCache(instring, loc, doActions, callPreParse) + except ParseBaseException as pe: + # cache a copy of the exception, without the traceback + cache.set(lookup, pe.__class__(*pe.args)) + raise + else: + cache.set(lookup, (value[0], value[1].copy())) + return value + else: + ParserElement.packrat_cache_stats[HIT] += 1 + if isinstance(value, Exception): + raise value + return (value[0], value[1].copy()) + + _parse = _parseNoCache + + @staticmethod + def resetCache(): + ParserElement.packrat_cache.clear() + ParserElement.packrat_cache_stats[:] = [0] * len(ParserElement.packrat_cache_stats) + + _packratEnabled = False + @staticmethod + def enablePackrat(cache_size_limit=128): + """Enables "packrat" parsing, which adds memoizing to the parsing logic. + Repeated parse attempts at the same string location (which happens + often in many complex grammars) can immediately return a cached value, + instead of re-executing parsing/validating code. Memoizing is done of + both valid results and parsing exceptions. + + Parameters: + + - cache_size_limit - (default= ``128``) - if an integer value is provided + will limit the size of the packrat cache; if None is passed, then + the cache size will be unbounded; if 0 is passed, the cache will + be effectively disabled. + + This speedup may break existing programs that use parse actions that + have side-effects. For this reason, packrat parsing is disabled when + you first import pyparsing. To activate the packrat feature, your + program must call the class method :class:`ParserElement.enablePackrat`. + For best results, call ``enablePackrat()`` immediately after + importing pyparsing. + + Example:: + + from pip._vendor import pyparsing + pyparsing.ParserElement.enablePackrat() + """ + if not ParserElement._packratEnabled: + ParserElement._packratEnabled = True + if cache_size_limit is None: + ParserElement.packrat_cache = ParserElement._UnboundedCache() + else: + ParserElement.packrat_cache = ParserElement._FifoCache(cache_size_limit) + ParserElement._parse = ParserElement._parseCache + + def parseString( self, instring, parseAll=False ): + """ + Execute the parse expression with the given string. + This is the main interface to the client code, once the complete + expression has been built. + + If you want the grammar to require that the entire input string be + successfully parsed, then set ``parseAll`` to True (equivalent to ending + the grammar with ``StringEnd()``). + + Note: ``parseString`` implicitly calls ``expandtabs()`` on the input string, + in order to report proper column numbers in parse actions. + If the input string contains tabs and + the grammar uses parse actions that use the ``loc`` argument to index into the + string being parsed, you can ensure you have a consistent view of the input + string by: + + - calling ``parseWithTabs`` on your grammar before calling ``parseString`` + (see :class:`parseWithTabs`) + - define your parse action using the full ``(s,loc,toks)`` signature, and + reference the input string using the parse action's ``s`` argument + - explictly expand the tabs in your input string before calling + ``parseString`` + + Example:: + + Word('a').parseString('aaaaabaaa') # -> ['aaaaa'] + Word('a').parseString('aaaaabaaa', parseAll=True) # -> Exception: Expected end of text + """ + ParserElement.resetCache() + if not self.streamlined: + self.streamline() + #~ self.saveAsList = True + for e in self.ignoreExprs: + e.streamline() + if not self.keepTabs: + instring = instring.expandtabs() + try: + loc, tokens = self._parse( instring, 0 ) + if parseAll: + loc = self.preParse( instring, loc ) + se = Empty() + StringEnd() + se._parse( instring, loc ) + except ParseBaseException as exc: + if ParserElement.verbose_stacktrace: + raise + else: + # catch and re-raise exception from here, clears out pyparsing internal stack trace + raise exc + else: + return tokens + + def scanString( self, instring, maxMatches=_MAX_INT, overlap=False ): + """ + Scan the input string for expression matches. Each match will return the + matching tokens, start location, and end location. May be called with optional + ``maxMatches`` argument, to clip scanning after 'n' matches are found. If + ``overlap`` is specified, then overlapping matches will be reported. + + Note that the start and end locations are reported relative to the string + being parsed. See :class:`parseString` for more information on parsing + strings with embedded tabs. + + Example:: + + source = "sldjf123lsdjjkf345sldkjf879lkjsfd987" + print(source) + for tokens,start,end in Word(alphas).scanString(source): + print(' '*start + '^'*(end-start)) + print(' '*start + tokens[0]) + + prints:: + + sldjf123lsdjjkf345sldkjf879lkjsfd987 + ^^^^^ + sldjf + ^^^^^^^ + lsdjjkf + ^^^^^^ + sldkjf + ^^^^^^ + lkjsfd + """ + if not self.streamlined: + self.streamline() + for e in self.ignoreExprs: + e.streamline() + + if not self.keepTabs: + instring = _ustr(instring).expandtabs() + instrlen = len(instring) + loc = 0 + preparseFn = self.preParse + parseFn = self._parse + ParserElement.resetCache() + matches = 0 + try: + while loc <= instrlen and matches < maxMatches: + try: + preloc = preparseFn( instring, loc ) + nextLoc,tokens = parseFn( instring, preloc, callPreParse=False ) + except ParseException: + loc = preloc+1 + else: + if nextLoc > loc: + matches += 1 + yield tokens, preloc, nextLoc + if overlap: + nextloc = preparseFn( instring, loc ) + if nextloc > loc: + loc = nextLoc + else: + loc += 1 + else: + loc = nextLoc + else: + loc = preloc+1 + except ParseBaseException as exc: + if ParserElement.verbose_stacktrace: + raise + else: + # catch and re-raise exception from here, clears out pyparsing internal stack trace + raise exc + + def transformString( self, instring ): + """ + Extension to :class:`scanString`, to modify matching text with modified tokens that may + be returned from a parse action. To use ``transformString``, define a grammar and + attach a parse action to it that modifies the returned token list. + Invoking ``transformString()`` on a target string will then scan for matches, + and replace the matched text patterns according to the logic in the parse + action. ``transformString()`` returns the resulting transformed string. + + Example:: + + wd = Word(alphas) + wd.setParseAction(lambda toks: toks[0].title()) + + print(wd.transformString("now is the winter of our discontent made glorious summer by this sun of york.")) + + prints:: + + Now Is The Winter Of Our Discontent Made Glorious Summer By This Sun Of York. + """ + out = [] + lastE = 0 + # force preservation of <TAB>s, to minimize unwanted transformation of string, and to + # keep string locs straight between transformString and scanString + self.keepTabs = True + try: + for t,s,e in self.scanString( instring ): + out.append( instring[lastE:s] ) + if t: + if isinstance(t,ParseResults): + out += t.asList() + elif isinstance(t,list): + out += t + else: + out.append(t) + lastE = e + out.append(instring[lastE:]) + out = [o for o in out if o] + return "".join(map(_ustr,_flatten(out))) + except ParseBaseException as exc: + if ParserElement.verbose_stacktrace: + raise + else: + # catch and re-raise exception from here, clears out pyparsing internal stack trace + raise exc + + def searchString( self, instring, maxMatches=_MAX_INT ): + """ + Another extension to :class:`scanString`, simplifying the access to the tokens found + to match the given parse expression. May be called with optional + ``maxMatches`` argument, to clip searching after 'n' matches are found. + + Example:: + + # a capitalized word starts with an uppercase letter, followed by zero or more lowercase letters + cap_word = Word(alphas.upper(), alphas.lower()) + + print(cap_word.searchString("More than Iron, more than Lead, more than Gold I need Electricity")) + + # the sum() builtin can be used to merge results into a single ParseResults object + print(sum(cap_word.searchString("More than Iron, more than Lead, more than Gold I need Electricity"))) + + prints:: + + [['More'], ['Iron'], ['Lead'], ['Gold'], ['I'], ['Electricity']] + ['More', 'Iron', 'Lead', 'Gold', 'I', 'Electricity'] + """ + try: + return ParseResults([ t for t,s,e in self.scanString( instring, maxMatches ) ]) + except ParseBaseException as exc: + if ParserElement.verbose_stacktrace: + raise + else: + # catch and re-raise exception from here, clears out pyparsing internal stack trace + raise exc + + def split(self, instring, maxsplit=_MAX_INT, includeSeparators=False): + """ + Generator method to split a string using the given expression as a separator. + May be called with optional ``maxsplit`` argument, to limit the number of splits; + and the optional ``includeSeparators`` argument (default= ``False``), if the separating + matching text should be included in the split results. + + Example:: + + punc = oneOf(list(".,;:/-!?")) + print(list(punc.split("This, this?, this sentence, is badly punctuated!"))) + + prints:: + + ['This', ' this', '', ' this sentence', ' is badly punctuated', ''] + """ + splits = 0 + last = 0 + for t,s,e in self.scanString(instring, maxMatches=maxsplit): + yield instring[last:s] + if includeSeparators: + yield t[0] + last = e + yield instring[last:] + + def __add__(self, other ): + """ + Implementation of + operator - returns :class:`And`. Adding strings to a ParserElement + converts them to :class:`Literal`s by default. + + Example:: + + greet = Word(alphas) + "," + Word(alphas) + "!" + hello = "Hello, World!" + print (hello, "->", greet.parseString(hello)) + + prints:: + + Hello, World! -> ['Hello', ',', 'World', '!'] + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return And( [ self, other ] ) + + def __radd__(self, other ): + """ + Implementation of + operator when left operand is not a :class:`ParserElement` + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return other + self + + def __sub__(self, other): + """ + Implementation of - operator, returns :class:`And` with error stop + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return self + And._ErrorStop() + other + + def __rsub__(self, other ): + """ + Implementation of - operator when left operand is not a :class:`ParserElement` + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return other - self + + def __mul__(self,other): + """ + Implementation of * operator, allows use of ``expr * 3`` in place of + ``expr + expr + expr``. Expressions may also me multiplied by a 2-integer + tuple, similar to ``{min,max}`` multipliers in regular expressions. Tuples + may also include ``None`` as in: + - ``expr*(n,None)`` or ``expr*(n,)`` is equivalent + to ``expr*n + ZeroOrMore(expr)`` + (read as "at least n instances of ``expr``") + - ``expr*(None,n)`` is equivalent to ``expr*(0,n)`` + (read as "0 to n instances of ``expr``") + - ``expr*(None,None)`` is equivalent to ``ZeroOrMore(expr)`` + - ``expr*(1,None)`` is equivalent to ``OneOrMore(expr)`` + + Note that ``expr*(None,n)`` does not raise an exception if + more than n exprs exist in the input stream; that is, + ``expr*(None,n)`` does not enforce a maximum number of expr + occurrences. If this behavior is desired, then write + ``expr*(None,n) + ~expr`` + """ + if isinstance(other,int): + minElements, optElements = other,0 + elif isinstance(other,tuple): + other = (other + (None, None))[:2] + if other[0] is None: + other = (0, other[1]) + if isinstance(other[0],int) and other[1] is None: + if other[0] == 0: + return ZeroOrMore(self) + if other[0] == 1: + return OneOrMore(self) + else: + return self*other[0] + ZeroOrMore(self) + elif isinstance(other[0],int) and isinstance(other[1],int): + minElements, optElements = other + optElements -= minElements + else: + raise TypeError("cannot multiply 'ParserElement' and ('%s','%s') objects", type(other[0]),type(other[1])) + else: + raise TypeError("cannot multiply 'ParserElement' and '%s' objects", type(other)) + + if minElements < 0: + raise ValueError("cannot multiply ParserElement by negative value") + if optElements < 0: + raise ValueError("second tuple value must be greater or equal to first tuple value") + if minElements == optElements == 0: + raise ValueError("cannot multiply ParserElement by 0 or (0,0)") + + if (optElements): + def makeOptionalList(n): + if n>1: + return Optional(self + makeOptionalList(n-1)) + else: + return Optional(self) + if minElements: + if minElements == 1: + ret = self + makeOptionalList(optElements) + else: + ret = And([self]*minElements) + makeOptionalList(optElements) + else: + ret = makeOptionalList(optElements) + else: + if minElements == 1: + ret = self + else: + ret = And([self]*minElements) + return ret + + def __rmul__(self, other): + return self.__mul__(other) + + def __or__(self, other ): + """ + Implementation of | operator - returns :class:`MatchFirst` + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return MatchFirst( [ self, other ] ) + + def __ror__(self, other ): + """ + Implementation of | operator when left operand is not a :class:`ParserElement` + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return other | self + + def __xor__(self, other ): + """ + Implementation of ^ operator - returns :class:`Or` + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return Or( [ self, other ] ) + + def __rxor__(self, other ): + """ + Implementation of ^ operator when left operand is not a :class:`ParserElement` + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return other ^ self + + def __and__(self, other ): + """ + Implementation of & operator - returns :class:`Each` + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return Each( [ self, other ] ) + + def __rand__(self, other ): + """ + Implementation of & operator when left operand is not a :class:`ParserElement` + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return other & self + + def __invert__( self ): + """ + Implementation of ~ operator - returns :class:`NotAny` + """ + return NotAny( self ) + + def __call__(self, name=None): + """ + Shortcut for :class:`setResultsName`, with ``listAllMatches=False``. + + If ``name`` is given with a trailing ``'*'`` character, then ``listAllMatches`` will be + passed as ``True``. + + If ``name` is omitted, same as calling :class:`copy`. + + Example:: + + # these are equivalent + userdata = Word(alphas).setResultsName("name") + Word(nums+"-").setResultsName("socsecno") + userdata = Word(alphas)("name") + Word(nums+"-")("socsecno") + """ + if name is not None: + return self.setResultsName(name) + else: + return self.copy() + + def suppress( self ): + """ + Suppresses the output of this :class:`ParserElement`; useful to keep punctuation from + cluttering up returned output. + """ + return Suppress( self ) + + def leaveWhitespace( self ): + """ + Disables the skipping of whitespace before matching the characters in the + :class:`ParserElement`'s defined pattern. This is normally only used internally by + the pyparsing module, but may be needed in some whitespace-sensitive grammars. + """ + self.skipWhitespace = False + return self + + def setWhitespaceChars( self, chars ): + """ + Overrides the default whitespace chars + """ + self.skipWhitespace = True + self.whiteChars = chars + self.copyDefaultWhiteChars = False + return self + + def parseWithTabs( self ): + """ + Overrides default behavior to expand ``<TAB>``s to spaces before parsing the input string. + Must be called before ``parseString`` when the input grammar contains elements that + match ``<TAB>`` characters. + """ + self.keepTabs = True + return self + + def ignore( self, other ): + """ + Define expression to be ignored (e.g., comments) while doing pattern + matching; may be called repeatedly, to define multiple comment or other + ignorable patterns. + + Example:: + + patt = OneOrMore(Word(alphas)) + patt.parseString('ablaj /* comment */ lskjd') # -> ['ablaj'] + + patt.ignore(cStyleComment) + patt.parseString('ablaj /* comment */ lskjd') # -> ['ablaj', 'lskjd'] + """ + if isinstance(other, basestring): + other = Suppress(other) + + if isinstance( other, Suppress ): + if other not in self.ignoreExprs: + self.ignoreExprs.append(other) + else: + self.ignoreExprs.append( Suppress( other.copy() ) ) + return self + + def setDebugActions( self, startAction, successAction, exceptionAction ): + """ + Enable display of debugging messages while doing pattern matching. + """ + self.debugActions = (startAction or _defaultStartDebugAction, + successAction or _defaultSuccessDebugAction, + exceptionAction or _defaultExceptionDebugAction) + self.debug = True + return self + + def setDebug( self, flag=True ): + """ + Enable display of debugging messages while doing pattern matching. + Set ``flag`` to True to enable, False to disable. + + Example:: + + wd = Word(alphas).setName("alphaword") + integer = Word(nums).setName("numword") + term = wd | integer + + # turn on debugging for wd + wd.setDebug() + + OneOrMore(term).parseString("abc 123 xyz 890") + + prints:: + + Match alphaword at loc 0(1,1) + Matched alphaword -> ['abc'] + Match alphaword at loc 3(1,4) + Exception raised:Expected alphaword (at char 4), (line:1, col:5) + Match alphaword at loc 7(1,8) + Matched alphaword -> ['xyz'] + Match alphaword at loc 11(1,12) + Exception raised:Expected alphaword (at char 12), (line:1, col:13) + Match alphaword at loc 15(1,16) + Exception raised:Expected alphaword (at char 15), (line:1, col:16) + + The output shown is that produced by the default debug actions - custom debug actions can be + specified using :class:`setDebugActions`. Prior to attempting + to match the ``wd`` expression, the debugging message ``"Match <exprname> at loc <n>(<line>,<col>)"`` + is shown. Then if the parse succeeds, a ``"Matched"`` message is shown, or an ``"Exception raised"`` + message is shown. Also note the use of :class:`setName` to assign a human-readable name to the expression, + which makes debugging and exception messages easier to understand - for instance, the default + name created for the :class:`Word` expression without calling ``setName`` is ``"W:(ABCD...)"``. + """ + if flag: + self.setDebugActions( _defaultStartDebugAction, _defaultSuccessDebugAction, _defaultExceptionDebugAction ) + else: + self.debug = False + return self + + def __str__( self ): + return self.name + + def __repr__( self ): + return _ustr(self) + + def streamline( self ): + self.streamlined = True + self.strRepr = None + return self + + def checkRecursion( self, parseElementList ): + pass + + def validate( self, validateTrace=[] ): + """ + Check defined expressions for valid structure, check for infinite recursive definitions. + """ + self.checkRecursion( [] ) + + def parseFile( self, file_or_filename, parseAll=False ): + """ + Execute the parse expression on the given file or filename. + If a filename is specified (instead of a file object), + the entire file is opened, read, and closed before parsing. + """ + try: + file_contents = file_or_filename.read() + except AttributeError: + with open(file_or_filename, "r") as f: + file_contents = f.read() + try: + return self.parseString(file_contents, parseAll) + except ParseBaseException as exc: + if ParserElement.verbose_stacktrace: + raise + else: + # catch and re-raise exception from here, clears out pyparsing internal stack trace + raise exc + + def __eq__(self,other): + if isinstance(other, ParserElement): + return self is other or vars(self) == vars(other) + elif isinstance(other, basestring): + return self.matches(other) + else: + return super(ParserElement,self)==other + + def __ne__(self,other): + return not (self == other) + + def __hash__(self): + return hash(id(self)) + + def __req__(self,other): + return self == other + + def __rne__(self,other): + return not (self == other) + + def matches(self, testString, parseAll=True): + """ + Method for quick testing of a parser against a test string. Good for simple + inline microtests of sub expressions while building up larger parser. + + Parameters: + - testString - to test against this expression for a match + - parseAll - (default= ``True``) - flag to pass to :class:`parseString` when running tests + + Example:: + + expr = Word(nums) + assert expr.matches("100") + """ + try: + self.parseString(_ustr(testString), parseAll=parseAll) + return True + except ParseBaseException: + return False + + def runTests(self, tests, parseAll=True, comment='#', + fullDump=True, printResults=True, failureTests=False, postParse=None): + """ + Execute the parse expression on a series of test strings, showing each + test, the parsed results or where the parse failed. Quick and easy way to + run a parse expression against a list of sample strings. + + Parameters: + - tests - a list of separate test strings, or a multiline string of test strings + - parseAll - (default= ``True``) - flag to pass to :class:`parseString` when running tests + - comment - (default= ``'#'``) - expression for indicating embedded comments in the test + string; pass None to disable comment filtering + - fullDump - (default= ``True``) - dump results as list followed by results names in nested outline; + if False, only dump nested list + - printResults - (default= ``True``) prints test output to stdout + - failureTests - (default= ``False``) indicates if these tests are expected to fail parsing + - postParse - (default= ``None``) optional callback for successful parse results; called as + `fn(test_string, parse_results)` and returns a string to be added to the test output + + Returns: a (success, results) tuple, where success indicates that all tests succeeded + (or failed if ``failureTests`` is True), and the results contain a list of lines of each + test's output + + Example:: + + number_expr = pyparsing_common.number.copy() + + result = number_expr.runTests(''' + # unsigned integer + 100 + # negative integer + -100 + # float with scientific notation + 6.02e23 + # integer with scientific notation + 1e-12 + ''') + print("Success" if result[0] else "Failed!") + + result = number_expr.runTests(''' + # stray character + 100Z + # missing leading digit before '.' + -.100 + # too many '.' + 3.14.159 + ''', failureTests=True) + print("Success" if result[0] else "Failed!") + + prints:: + + # unsigned integer + 100 + [100] + + # negative integer + -100 + [-100] + + # float with scientific notation + 6.02e23 + [6.02e+23] + + # integer with scientific notation + 1e-12 + [1e-12] + + Success + + # stray character + 100Z + ^ + FAIL: Expected end of text (at char 3), (line:1, col:4) + + # missing leading digit before '.' + -.100 + ^ + FAIL: Expected {real number with scientific notation | real number | signed integer} (at char 0), (line:1, col:1) + + # too many '.' + 3.14.159 + ^ + FAIL: Expected end of text (at char 4), (line:1, col:5) + + Success + + Each test string must be on a single line. If you want to test a string that spans multiple + lines, create a test like this:: + + expr.runTest(r"this is a test\\n of strings that spans \\n 3 lines") + + (Note that this is a raw string literal, you must include the leading 'r'.) + """ + if isinstance(tests, basestring): + tests = list(map(str.strip, tests.rstrip().splitlines())) + if isinstance(comment, basestring): + comment = Literal(comment) + allResults = [] + comments = [] + success = True + for t in tests: + if comment is not None and comment.matches(t, False) or comments and not t: + comments.append(t) + continue + if not t: + continue + out = ['\n'.join(comments), t] + comments = [] + try: + # convert newline marks to actual newlines, and strip leading BOM if present + NL = Literal(r'\n').addParseAction(replaceWith('\n')).ignore(quotedString) + BOM = '\ufeff' + t = NL.transformString(t.lstrip(BOM)) + result = self.parseString(t, parseAll=parseAll) + out.append(result.dump(full=fullDump)) + success = success and not failureTests + if postParse is not None: + try: + pp_value = postParse(t, result) + if pp_value is not None: + out.append(str(pp_value)) + except Exception as e: + out.append("{0} failed: {1}: {2}".format(postParse.__name__, type(e).__name__, e)) + except ParseBaseException as pe: + fatal = "(FATAL)" if isinstance(pe, ParseFatalException) else "" + if '\n' in t: + out.append(line(pe.loc, t)) + out.append(' '*(col(pe.loc,t)-1) + '^' + fatal) + else: + out.append(' '*pe.loc + '^' + fatal) + out.append("FAIL: " + str(pe)) + success = success and failureTests + result = pe + except Exception as exc: + out.append("FAIL-EXCEPTION: " + str(exc)) + success = success and failureTests + result = exc + + if printResults: + if fullDump: + out.append('') + print('\n'.join(out)) + + allResults.append((t, result)) + + return success, allResults + + +class Token(ParserElement): + """Abstract :class:`ParserElement` subclass, for defining atomic + matching patterns. + """ + def __init__( self ): + super(Token,self).__init__( savelist=False ) + + +class Empty(Token): + """An empty token, will always match. + """ + def __init__( self ): + super(Empty,self).__init__() + self.name = "Empty" + self.mayReturnEmpty = True + self.mayIndexError = False + + +class NoMatch(Token): + """A token that will never match. + """ + def __init__( self ): + super(NoMatch,self).__init__() + self.name = "NoMatch" + self.mayReturnEmpty = True + self.mayIndexError = False + self.errmsg = "Unmatchable token" + + def parseImpl( self, instring, loc, doActions=True ): + raise ParseException(instring, loc, self.errmsg, self) + + +class Literal(Token): + """Token to exactly match a specified string. + + Example:: + + Literal('blah').parseString('blah') # -> ['blah'] + Literal('blah').parseString('blahfooblah') # -> ['blah'] + Literal('blah').parseString('bla') # -> Exception: Expected "blah" + + For case-insensitive matching, use :class:`CaselessLiteral`. + + For keyword matching (force word break before and after the matched string), + use :class:`Keyword` or :class:`CaselessKeyword`. + """ + def __init__( self, matchString ): + super(Literal,self).__init__() + self.match = matchString + self.matchLen = len(matchString) + try: + self.firstMatchChar = matchString[0] + except IndexError: + warnings.warn("null string passed to Literal; use Empty() instead", + SyntaxWarning, stacklevel=2) + self.__class__ = Empty + self.name = '"%s"' % _ustr(self.match) + self.errmsg = "Expected " + self.name + self.mayReturnEmpty = False + self.mayIndexError = False + + # Performance tuning: this routine gets called a *lot* + # if this is a single character match string and the first character matches, + # short-circuit as quickly as possible, and avoid calling startswith + #~ @profile + def parseImpl( self, instring, loc, doActions=True ): + if (instring[loc] == self.firstMatchChar and + (self.matchLen==1 or instring.startswith(self.match,loc)) ): + return loc+self.matchLen, self.match + raise ParseException(instring, loc, self.errmsg, self) +_L = Literal +ParserElement._literalStringClass = Literal + +class Keyword(Token): + """Token to exactly match a specified string as a keyword, that is, + it must be immediately followed by a non-keyword character. Compare + with :class:`Literal`: + + - ``Literal("if")`` will match the leading ``'if'`` in + ``'ifAndOnlyIf'``. + - ``Keyword("if")`` will not; it will only match the leading + ``'if'`` in ``'if x=1'``, or ``'if(y==2)'`` + + Accepts two optional constructor arguments in addition to the + keyword string: + + - ``identChars`` is a string of characters that would be valid + identifier characters, defaulting to all alphanumerics + "_" and + "$" + - ``caseless`` allows case-insensitive matching, default is ``False``. + + Example:: + + Keyword("start").parseString("start") # -> ['start'] + Keyword("start").parseString("starting") # -> Exception + + For case-insensitive matching, use :class:`CaselessKeyword`. + """ + DEFAULT_KEYWORD_CHARS = alphanums+"_$" + + def __init__( self, matchString, identChars=None, caseless=False ): + super(Keyword,self).__init__() + if identChars is None: + identChars = Keyword.DEFAULT_KEYWORD_CHARS + self.match = matchString + self.matchLen = len(matchString) + try: + self.firstMatchChar = matchString[0] + except IndexError: + warnings.warn("null string passed to Keyword; use Empty() instead", + SyntaxWarning, stacklevel=2) + self.name = '"%s"' % self.match + self.errmsg = "Expected " + self.name + self.mayReturnEmpty = False + self.mayIndexError = False + self.caseless = caseless + if caseless: + self.caselessmatch = matchString.upper() + identChars = identChars.upper() + self.identChars = set(identChars) + + def parseImpl( self, instring, loc, doActions=True ): + if self.caseless: + if ( (instring[ loc:loc+self.matchLen ].upper() == self.caselessmatch) and + (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen].upper() not in self.identChars) and + (loc == 0 or instring[loc-1].upper() not in self.identChars) ): + return loc+self.matchLen, self.match + else: + if (instring[loc] == self.firstMatchChar and + (self.matchLen==1 or instring.startswith(self.match,loc)) and + (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen] not in self.identChars) and + (loc == 0 or instring[loc-1] not in self.identChars) ): + return loc+self.matchLen, self.match + raise ParseException(instring, loc, self.errmsg, self) + + def copy(self): + c = super(Keyword,self).copy() + c.identChars = Keyword.DEFAULT_KEYWORD_CHARS + return c + + @staticmethod + def setDefaultKeywordChars( chars ): + """Overrides the default Keyword chars + """ + Keyword.DEFAULT_KEYWORD_CHARS = chars + +class CaselessLiteral(Literal): + """Token to match a specified string, ignoring case of letters. + Note: the matched results will always be in the case of the given + match string, NOT the case of the input text. + + Example:: + + OneOrMore(CaselessLiteral("CMD")).parseString("cmd CMD Cmd10") # -> ['CMD', 'CMD', 'CMD'] + + (Contrast with example for :class:`CaselessKeyword`.) + """ + def __init__( self, matchString ): + super(CaselessLiteral,self).__init__( matchString.upper() ) + # Preserve the defining literal. + self.returnString = matchString + self.name = "'%s'" % self.returnString + self.errmsg = "Expected " + self.name + + def parseImpl( self, instring, loc, doActions=True ): + if instring[ loc:loc+self.matchLen ].upper() == self.match: + return loc+self.matchLen, self.returnString + raise ParseException(instring, loc, self.errmsg, self) + +class CaselessKeyword(Keyword): + """ + Caseless version of :class:`Keyword`. + + Example:: + + OneOrMore(CaselessKeyword("CMD")).parseString("cmd CMD Cmd10") # -> ['CMD', 'CMD'] + + (Contrast with example for :class:`CaselessLiteral`.) + """ + def __init__( self, matchString, identChars=None ): + super(CaselessKeyword,self).__init__( matchString, identChars, caseless=True ) + +class CloseMatch(Token): + """A variation on :class:`Literal` which matches "close" matches, + that is, strings with at most 'n' mismatching characters. + :class:`CloseMatch` takes parameters: + + - ``match_string`` - string to be matched + - ``maxMismatches`` - (``default=1``) maximum number of + mismatches allowed to count as a match + + The results from a successful parse will contain the matched text + from the input string and the following named results: + + - ``mismatches`` - a list of the positions within the + match_string where mismatches were found + - ``original`` - the original match_string used to compare + against the input string + + If ``mismatches`` is an empty list, then the match was an exact + match. + + Example:: + + patt = CloseMatch("ATCATCGAATGGA") + patt.parseString("ATCATCGAAXGGA") # -> (['ATCATCGAAXGGA'], {'mismatches': [[9]], 'original': ['ATCATCGAATGGA']}) + patt.parseString("ATCAXCGAAXGGA") # -> Exception: Expected 'ATCATCGAATGGA' (with up to 1 mismatches) (at char 0), (line:1, col:1) + + # exact match + patt.parseString("ATCATCGAATGGA") # -> (['ATCATCGAATGGA'], {'mismatches': [[]], 'original': ['ATCATCGAATGGA']}) + + # close match allowing up to 2 mismatches + patt = CloseMatch("ATCATCGAATGGA", maxMismatches=2) + patt.parseString("ATCAXCGAAXGGA") # -> (['ATCAXCGAAXGGA'], {'mismatches': [[4, 9]], 'original': ['ATCATCGAATGGA']}) + """ + def __init__(self, match_string, maxMismatches=1): + super(CloseMatch,self).__init__() + self.name = match_string + self.match_string = match_string + self.maxMismatches = maxMismatches + self.errmsg = "Expected %r (with up to %d mismatches)" % (self.match_string, self.maxMismatches) + self.mayIndexError = False + self.mayReturnEmpty = False + + def parseImpl( self, instring, loc, doActions=True ): + start = loc + instrlen = len(instring) + maxloc = start + len(self.match_string) + + if maxloc <= instrlen: + match_string = self.match_string + match_stringloc = 0 + mismatches = [] + maxMismatches = self.maxMismatches + + for match_stringloc,s_m in enumerate(zip(instring[loc:maxloc], self.match_string)): + src,mat = s_m + if src != mat: + mismatches.append(match_stringloc) + if len(mismatches) > maxMismatches: + break + else: + loc = match_stringloc + 1 + results = ParseResults([instring[start:loc]]) + results['original'] = self.match_string + results['mismatches'] = mismatches + return loc, results + + raise ParseException(instring, loc, self.errmsg, self) + + +class Word(Token): + """Token for matching words composed of allowed character sets. + Defined with string containing all allowed initial characters, an + optional string containing allowed body characters (if omitted, + defaults to the initial character set), and an optional minimum, + maximum, and/or exact length. The default value for ``min`` is + 1 (a minimum value < 1 is not valid); the default values for + ``max`` and ``exact`` are 0, meaning no maximum or exact + length restriction. An optional ``excludeChars`` parameter can + list characters that might be found in the input ``bodyChars`` + string; useful to define a word of all printables except for one or + two characters, for instance. + + :class:`srange` is useful for defining custom character set strings + for defining ``Word`` expressions, using range notation from + regular expression character sets. + + A common mistake is to use :class:`Word` to match a specific literal + string, as in ``Word("Address")``. Remember that :class:`Word` + uses the string argument to define *sets* of matchable characters. + This expression would match "Add", "AAA", "dAred", or any other word + made up of the characters 'A', 'd', 'r', 'e', and 's'. To match an + exact literal string, use :class:`Literal` or :class:`Keyword`. + + pyparsing includes helper strings for building Words: + + - :class:`alphas` + - :class:`nums` + - :class:`alphanums` + - :class:`hexnums` + - :class:`alphas8bit` (alphabetic characters in ASCII range 128-255 + - accented, tilded, umlauted, etc.) + - :class:`punc8bit` (non-alphabetic characters in ASCII range + 128-255 - currency, symbols, superscripts, diacriticals, etc.) + - :class:`printables` (any non-whitespace character) + + Example:: + + # a word composed of digits + integer = Word(nums) # equivalent to Word("0123456789") or Word(srange("0-9")) + + # a word with a leading capital, and zero or more lowercase + capital_word = Word(alphas.upper(), alphas.lower()) + + # hostnames are alphanumeric, with leading alpha, and '-' + hostname = Word(alphas, alphanums+'-') + + # roman numeral (not a strict parser, accepts invalid mix of characters) + roman = Word("IVXLCDM") + + # any string of non-whitespace characters, except for ',' + csv_value = Word(printables, excludeChars=",") + """ + def __init__( self, initChars, bodyChars=None, min=1, max=0, exact=0, asKeyword=False, excludeChars=None ): + super(Word,self).__init__() + if excludeChars: + excludeChars = set(excludeChars) + initChars = ''.join(c for c in initChars if c not in excludeChars) + if bodyChars: + bodyChars = ''.join(c for c in bodyChars if c not in excludeChars) + self.initCharsOrig = initChars + self.initChars = set(initChars) + if bodyChars : + self.bodyCharsOrig = bodyChars + self.bodyChars = set(bodyChars) + else: + self.bodyCharsOrig = initChars + self.bodyChars = set(initChars) + + self.maxSpecified = max > 0 + + if min < 1: + raise ValueError("cannot specify a minimum length < 1; use Optional(Word()) if zero-length word is permitted") + + self.minLen = min + + if max > 0: + self.maxLen = max + else: + self.maxLen = _MAX_INT + + if exact > 0: + self.maxLen = exact + self.minLen = exact + + self.name = _ustr(self) + self.errmsg = "Expected " + self.name + self.mayIndexError = False + self.asKeyword = asKeyword + + if ' ' not in self.initCharsOrig+self.bodyCharsOrig and (min==1 and max==0 and exact==0): + if self.bodyCharsOrig == self.initCharsOrig: + self.reString = "[%s]+" % _escapeRegexRangeChars(self.initCharsOrig) + elif len(self.initCharsOrig) == 1: + self.reString = "%s[%s]*" % \ + (re.escape(self.initCharsOrig), + _escapeRegexRangeChars(self.bodyCharsOrig),) + else: + self.reString = "[%s][%s]*" % \ + (_escapeRegexRangeChars(self.initCharsOrig), + _escapeRegexRangeChars(self.bodyCharsOrig),) + if self.asKeyword: + self.reString = r"\b"+self.reString+r"\b" + try: + self.re = re.compile( self.reString ) + except Exception: + self.re = None + + def parseImpl( self, instring, loc, doActions=True ): + if self.re: + result = self.re.match(instring,loc) + if not result: + raise ParseException(instring, loc, self.errmsg, self) + + loc = result.end() + return loc, result.group() + + if instring[loc] not in self.initChars: + raise ParseException(instring, loc, self.errmsg, self) + + start = loc + loc += 1 + instrlen = len(instring) + bodychars = self.bodyChars + maxloc = start + self.maxLen + maxloc = min( maxloc, instrlen ) + while loc < maxloc and instring[loc] in bodychars: + loc += 1 + + throwException = False + if loc - start < self.minLen: + throwException = True + elif self.maxSpecified and loc < instrlen and instring[loc] in bodychars: + throwException = True + elif self.asKeyword: + if (start>0 and instring[start-1] in bodychars) or (loc<instrlen and instring[loc] in bodychars): + throwException = True + + if throwException: + raise ParseException(instring, loc, self.errmsg, self) + + return loc, instring[start:loc] + + def __str__( self ): + try: + return super(Word,self).__str__() + except Exception: + pass + + + if self.strRepr is None: + + def charsAsStr(s): + if len(s)>4: + return s[:4]+"..." + else: + return s + + if ( self.initCharsOrig != self.bodyCharsOrig ): + self.strRepr = "W:(%s,%s)" % ( charsAsStr(self.initCharsOrig), charsAsStr(self.bodyCharsOrig) ) + else: + self.strRepr = "W:(%s)" % charsAsStr(self.initCharsOrig) + + return self.strRepr + + +class Char(Word): + """A short-cut class for defining ``Word(characters, exact=1)``, + when defining a match of any single character in a string of + characters. + """ + def __init__(self, charset, asKeyword=False, excludeChars=None): + super(Char, self).__init__(charset, exact=1, asKeyword=asKeyword, excludeChars=excludeChars) + self.reString = "[%s]" % _escapeRegexRangeChars(self.initCharsOrig) + self.re = re.compile( self.reString ) + + +class Regex(Token): + r"""Token for matching strings that match a given regular + expression. Defined with string specifying the regular expression in + a form recognized by the stdlib Python `re module <https://docs.python.org/3/library/re.html>`_. + If the given regex contains named groups (defined using ``(?P<name>...)``), + these will be preserved as named parse results. + + Example:: + + realnum = Regex(r"[+-]?\d+\.\d*") + date = Regex(r'(?P<year>\d{4})-(?P<month>\d\d?)-(?P<day>\d\d?)') + # ref: https://stackoverflow.com/questions/267399/how-do-you-match-only-valid-roman-numerals-with-a-regular-expression + roman = Regex(r"M{0,4}(CM|CD|D?{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})") + """ + compiledREtype = type(re.compile("[A-Z]")) + def __init__( self, pattern, flags=0, asGroupList=False, asMatch=False): + """The parameters ``pattern`` and ``flags`` are passed + to the ``re.compile()`` function as-is. See the Python + `re module <https://docs.python.org/3/library/re.html>`_ module for an + explanation of the acceptable patterns and flags. + """ + super(Regex,self).__init__() + + if isinstance(pattern, basestring): + if not pattern: + warnings.warn("null string passed to Regex; use Empty() instead", + SyntaxWarning, stacklevel=2) + + self.pattern = pattern + self.flags = flags + + try: + self.re = re.compile(self.pattern, self.flags) + self.reString = self.pattern + except sre_constants.error: + warnings.warn("invalid pattern (%s) passed to Regex" % pattern, + SyntaxWarning, stacklevel=2) + raise + + elif isinstance(pattern, Regex.compiledREtype): + self.re = pattern + self.pattern = \ + self.reString = str(pattern) + self.flags = flags + + else: + raise ValueError("Regex may only be constructed with a string or a compiled RE object") + + self.name = _ustr(self) + self.errmsg = "Expected " + self.name + self.mayIndexError = False + self.mayReturnEmpty = True + self.asGroupList = asGroupList + self.asMatch = asMatch + if self.asGroupList: + self.parseImpl = self.parseImplAsGroupList + if self.asMatch: + self.parseImpl = self.parseImplAsMatch + + def parseImpl(self, instring, loc, doActions=True): + result = self.re.match(instring,loc) + if not result: + raise ParseException(instring, loc, self.errmsg, self) + + loc = result.end() + ret = ParseResults(result.group()) + d = result.groupdict() + if d: + for k, v in d.items(): + ret[k] = v + return loc, ret + + def parseImplAsGroupList(self, instring, loc, doActions=True): + result = self.re.match(instring,loc) + if not result: + raise ParseException(instring, loc, self.errmsg, self) + + loc = result.end() + ret = result.groups() + return loc, ret + + def parseImplAsMatch(self, instring, loc, doActions=True): + result = self.re.match(instring,loc) + if not result: + raise ParseException(instring, loc, self.errmsg, self) + + loc = result.end() + ret = result + return loc, ret + + def __str__( self ): + try: + return super(Regex,self).__str__() + except Exception: + pass + + if self.strRepr is None: + self.strRepr = "Re:(%s)" % repr(self.pattern) + + return self.strRepr + + def sub(self, repl): + r""" + Return Regex with an attached parse action to transform the parsed + result as if called using `re.sub(expr, repl, string) <https://docs.python.org/3/library/re.html#re.sub>`_. + + Example:: + + make_html = Regex(r"(\w+):(.*?):").sub(r"<\1>\2</\1>") + print(make_html.transformString("h1:main title:")) + # prints "<h1>main title</h1>" + """ + if self.asGroupList: + warnings.warn("cannot use sub() with Regex(asGroupList=True)", + SyntaxWarning, stacklevel=2) + raise SyntaxError() + + if self.asMatch and callable(repl): + warnings.warn("cannot use sub() with a callable with Regex(asMatch=True)", + SyntaxWarning, stacklevel=2) + raise SyntaxError() + + if self.asMatch: + def pa(tokens): + return tokens[0].expand(repl) + else: + def pa(tokens): + return self.re.sub(repl, tokens[0]) + return self.addParseAction(pa) + +class QuotedString(Token): + r""" + Token for matching strings that are delimited by quoting characters. + + Defined with the following parameters: + + - quoteChar - string of one or more characters defining the + quote delimiting string + - escChar - character to escape quotes, typically backslash + (default= ``None`` ) + - escQuote - special quote sequence to escape an embedded quote + string (such as SQL's ``""`` to escape an embedded ``"``) + (default= ``None`` ) + - multiline - boolean indicating whether quotes can span + multiple lines (default= ``False`` ) + - unquoteResults - boolean indicating whether the matched text + should be unquoted (default= ``True`` ) + - endQuoteChar - string of one or more characters defining the + end of the quote delimited string (default= ``None`` => same as + quoteChar) + - convertWhitespaceEscapes - convert escaped whitespace + (``'\t'``, ``'\n'``, etc.) to actual whitespace + (default= ``True`` ) + + Example:: + + qs = QuotedString('"') + print(qs.searchString('lsjdf "This is the quote" sldjf')) + complex_qs = QuotedString('{{', endQuoteChar='}}') + print(complex_qs.searchString('lsjdf {{This is the "quote"}} sldjf')) + sql_qs = QuotedString('"', escQuote='""') + print(sql_qs.searchString('lsjdf "This is the quote with ""embedded"" quotes" sldjf')) + + prints:: + + [['This is the quote']] + [['This is the "quote"']] + [['This is the quote with "embedded" quotes']] + """ + def __init__( self, quoteChar, escChar=None, escQuote=None, multiline=False, unquoteResults=True, endQuoteChar=None, convertWhitespaceEscapes=True): + super(QuotedString,self).__init__() + + # remove white space from quote chars - wont work anyway + quoteChar = quoteChar.strip() + if not quoteChar: + warnings.warn("quoteChar cannot be the empty string",SyntaxWarning,stacklevel=2) + raise SyntaxError() + + if endQuoteChar is None: + endQuoteChar = quoteChar + else: + endQuoteChar = endQuoteChar.strip() + if not endQuoteChar: + warnings.warn("endQuoteChar cannot be the empty string",SyntaxWarning,stacklevel=2) + raise SyntaxError() + + self.quoteChar = quoteChar + self.quoteCharLen = len(quoteChar) + self.firstQuoteChar = quoteChar[0] + self.endQuoteChar = endQuoteChar + self.endQuoteCharLen = len(endQuoteChar) + self.escChar = escChar + self.escQuote = escQuote + self.unquoteResults = unquoteResults + self.convertWhitespaceEscapes = convertWhitespaceEscapes + + if multiline: + self.flags = re.MULTILINE | re.DOTALL + self.pattern = r'%s(?:[^%s%s]' % \ + ( re.escape(self.quoteChar), + _escapeRegexRangeChars(self.endQuoteChar[0]), + (escChar is not None and _escapeRegexRangeChars(escChar) or '') ) + else: + self.flags = 0 + self.pattern = r'%s(?:[^%s\n\r%s]' % \ + ( re.escape(self.quoteChar), + _escapeRegexRangeChars(self.endQuoteChar[0]), + (escChar is not None and _escapeRegexRangeChars(escChar) or '') ) + if len(self.endQuoteChar) > 1: + self.pattern += ( + '|(?:' + ')|(?:'.join("%s[^%s]" % (re.escape(self.endQuoteChar[:i]), + _escapeRegexRangeChars(self.endQuoteChar[i])) + for i in range(len(self.endQuoteChar)-1,0,-1)) + ')' + ) + if escQuote: + self.pattern += (r'|(?:%s)' % re.escape(escQuote)) + if escChar: + self.pattern += (r'|(?:%s.)' % re.escape(escChar)) + self.escCharReplacePattern = re.escape(self.escChar)+"(.)" + self.pattern += (r')*%s' % re.escape(self.endQuoteChar)) + + try: + self.re = re.compile(self.pattern, self.flags) + self.reString = self.pattern + except sre_constants.error: + warnings.warn("invalid pattern (%s) passed to Regex" % self.pattern, + SyntaxWarning, stacklevel=2) + raise + + self.name = _ustr(self) + self.errmsg = "Expected " + self.name + self.mayIndexError = False + self.mayReturnEmpty = True + + def parseImpl( self, instring, loc, doActions=True ): + result = instring[loc] == self.firstQuoteChar and self.re.match(instring,loc) or None + if not result: + raise ParseException(instring, loc, self.errmsg, self) + + loc = result.end() + ret = result.group() + + if self.unquoteResults: + + # strip off quotes + ret = ret[self.quoteCharLen:-self.endQuoteCharLen] + + if isinstance(ret,basestring): + # replace escaped whitespace + if '\\' in ret and self.convertWhitespaceEscapes: + ws_map = { + r'\t' : '\t', + r'\n' : '\n', + r'\f' : '\f', + r'\r' : '\r', + } + for wslit,wschar in ws_map.items(): + ret = ret.replace(wslit, wschar) + + # replace escaped characters + if self.escChar: + ret = re.sub(self.escCharReplacePattern, r"\g<1>", ret) + + # replace escaped quotes + if self.escQuote: + ret = ret.replace(self.escQuote, self.endQuoteChar) + + return loc, ret + + def __str__( self ): + try: + return super(QuotedString,self).__str__() + except Exception: + pass + + if self.strRepr is None: + self.strRepr = "quoted string, starting with %s ending with %s" % (self.quoteChar, self.endQuoteChar) + + return self.strRepr + + +class CharsNotIn(Token): + """Token for matching words composed of characters *not* in a given + set (will include whitespace in matched characters if not listed in + the provided exclusion set - see example). Defined with string + containing all disallowed characters, and an optional minimum, + maximum, and/or exact length. The default value for ``min`` is + 1 (a minimum value < 1 is not valid); the default values for + ``max`` and ``exact`` are 0, meaning no maximum or exact + length restriction. + + Example:: + + # define a comma-separated-value as anything that is not a ',' + csv_value = CharsNotIn(',') + print(delimitedList(csv_value).parseString("dkls,lsdkjf,s12 34,@!#,213")) + + prints:: + + ['dkls', 'lsdkjf', 's12 34', '@!#', '213'] + """ + def __init__( self, notChars, min=1, max=0, exact=0 ): + super(CharsNotIn,self).__init__() + self.skipWhitespace = False + self.notChars = notChars + + if min < 1: + raise ValueError( + "cannot specify a minimum length < 1; use " + + "Optional(CharsNotIn()) if zero-length char group is permitted") + + self.minLen = min + + if max > 0: + self.maxLen = max + else: + self.maxLen = _MAX_INT + + if exact > 0: + self.maxLen = exact + self.minLen = exact + + self.name = _ustr(self) + self.errmsg = "Expected " + self.name + self.mayReturnEmpty = ( self.minLen == 0 ) + self.mayIndexError = False + + def parseImpl( self, instring, loc, doActions=True ): + if instring[loc] in self.notChars: + raise ParseException(instring, loc, self.errmsg, self) + + start = loc + loc += 1 + notchars = self.notChars + maxlen = min( start+self.maxLen, len(instring) ) + while loc < maxlen and \ + (instring[loc] not in notchars): + loc += 1 + + if loc - start < self.minLen: + raise ParseException(instring, loc, self.errmsg, self) + + return loc, instring[start:loc] + + def __str__( self ): + try: + return super(CharsNotIn, self).__str__() + except Exception: + pass + + if self.strRepr is None: + if len(self.notChars) > 4: + self.strRepr = "!W:(%s...)" % self.notChars[:4] + else: + self.strRepr = "!W:(%s)" % self.notChars + + return self.strRepr + +class White(Token): + """Special matching class for matching whitespace. Normally, + whitespace is ignored by pyparsing grammars. This class is included + when some whitespace structures are significant. Define with + a string containing the whitespace characters to be matched; default + is ``" \\t\\r\\n"``. Also takes optional ``min``, + ``max``, and ``exact`` arguments, as defined for the + :class:`Word` class. + """ + whiteStrs = { + ' ' : '<SP>', + '\t': '<TAB>', + '\n': '<LF>', + '\r': '<CR>', + '\f': '<FF>', + 'u\00A0': '<NBSP>', + 'u\1680': '<OGHAM_SPACE_MARK>', + 'u\180E': '<MONGOLIAN_VOWEL_SEPARATOR>', + 'u\2000': '<EN_QUAD>', + 'u\2001': '<EM_QUAD>', + 'u\2002': '<EN_SPACE>', + 'u\2003': '<EM_SPACE>', + 'u\2004': '<THREE-PER-EM_SPACE>', + 'u\2005': '<FOUR-PER-EM_SPACE>', + 'u\2006': '<SIX-PER-EM_SPACE>', + 'u\2007': '<FIGURE_SPACE>', + 'u\2008': '<PUNCTUATION_SPACE>', + 'u\2009': '<THIN_SPACE>', + 'u\200A': '<HAIR_SPACE>', + 'u\200B': '<ZERO_WIDTH_SPACE>', + 'u\202F': '<NNBSP>', + 'u\205F': '<MMSP>', + 'u\3000': '<IDEOGRAPHIC_SPACE>', + } + def __init__(self, ws=" \t\r\n", min=1, max=0, exact=0): + super(White,self).__init__() + self.matchWhite = ws + self.setWhitespaceChars( "".join(c for c in self.whiteChars if c not in self.matchWhite) ) + #~ self.leaveWhitespace() + self.name = ("".join(White.whiteStrs[c] for c in self.matchWhite)) + self.mayReturnEmpty = True + self.errmsg = "Expected " + self.name + + self.minLen = min + + if max > 0: + self.maxLen = max + else: + self.maxLen = _MAX_INT + + if exact > 0: + self.maxLen = exact + self.minLen = exact + + def parseImpl( self, instring, loc, doActions=True ): + if instring[loc] not in self.matchWhite: + raise ParseException(instring, loc, self.errmsg, self) + start = loc + loc += 1 + maxloc = start + self.maxLen + maxloc = min( maxloc, len(instring) ) + while loc < maxloc and instring[loc] in self.matchWhite: + loc += 1 + + if loc - start < self.minLen: + raise ParseException(instring, loc, self.errmsg, self) + + return loc, instring[start:loc] + + +class _PositionToken(Token): + def __init__( self ): + super(_PositionToken,self).__init__() + self.name=self.__class__.__name__ + self.mayReturnEmpty = True + self.mayIndexError = False + +class GoToColumn(_PositionToken): + """Token to advance to a specific column of input text; useful for + tabular report scraping. + """ + def __init__( self, colno ): + super(GoToColumn,self).__init__() + self.col = colno + + def preParse( self, instring, loc ): + if col(loc,instring) != self.col: + instrlen = len(instring) + if self.ignoreExprs: + loc = self._skipIgnorables( instring, loc ) + while loc < instrlen and instring[loc].isspace() and col( loc, instring ) != self.col : + loc += 1 + return loc + + def parseImpl( self, instring, loc, doActions=True ): + thiscol = col( loc, instring ) + if thiscol > self.col: + raise ParseException( instring, loc, "Text not in expected column", self ) + newloc = loc + self.col - thiscol + ret = instring[ loc: newloc ] + return newloc, ret + + +class LineStart(_PositionToken): + r"""Matches if current position is at the beginning of a line within + the parse string + + Example:: + + test = '''\ + AAA this line + AAA and this line + AAA but not this one + B AAA and definitely not this one + ''' + + for t in (LineStart() + 'AAA' + restOfLine).searchString(test): + print(t) + + prints:: + + ['AAA', ' this line'] + ['AAA', ' and this line'] + + """ + def __init__( self ): + super(LineStart,self).__init__() + self.errmsg = "Expected start of line" + + def parseImpl( self, instring, loc, doActions=True ): + if col(loc, instring) == 1: + return loc, [] + raise ParseException(instring, loc, self.errmsg, self) + +class LineEnd(_PositionToken): + """Matches if current position is at the end of a line within the + parse string + """ + def __init__( self ): + super(LineEnd,self).__init__() + self.setWhitespaceChars( ParserElement.DEFAULT_WHITE_CHARS.replace("\n","") ) + self.errmsg = "Expected end of line" + + def parseImpl( self, instring, loc, doActions=True ): + if loc<len(instring): + if instring[loc] == "\n": + return loc+1, "\n" + else: + raise ParseException(instring, loc, self.errmsg, self) + elif loc == len(instring): + return loc+1, [] + else: + raise ParseException(instring, loc, self.errmsg, self) + +class StringStart(_PositionToken): + """Matches if current position is at the beginning of the parse + string + """ + def __init__( self ): + super(StringStart,self).__init__() + self.errmsg = "Expected start of text" + + def parseImpl( self, instring, loc, doActions=True ): + if loc != 0: + # see if entire string up to here is just whitespace and ignoreables + if loc != self.preParse( instring, 0 ): + raise ParseException(instring, loc, self.errmsg, self) + return loc, [] + +class StringEnd(_PositionToken): + """Matches if current position is at the end of the parse string + """ + def __init__( self ): + super(StringEnd,self).__init__() + self.errmsg = "Expected end of text" + + def parseImpl( self, instring, loc, doActions=True ): + if loc < len(instring): + raise ParseException(instring, loc, self.errmsg, self) + elif loc == len(instring): + return loc+1, [] + elif loc > len(instring): + return loc, [] + else: + raise ParseException(instring, loc, self.errmsg, self) + +class WordStart(_PositionToken): + """Matches if the current position is at the beginning of a Word, + and is not preceded by any character in a given set of + ``wordChars`` (default= ``printables``). To emulate the + ``\b`` behavior of regular expressions, use + ``WordStart(alphanums)``. ``WordStart`` will also match at + the beginning of the string being parsed, or at the beginning of + a line. + """ + def __init__(self, wordChars = printables): + super(WordStart,self).__init__() + self.wordChars = set(wordChars) + self.errmsg = "Not at the start of a word" + + def parseImpl(self, instring, loc, doActions=True ): + if loc != 0: + if (instring[loc-1] in self.wordChars or + instring[loc] not in self.wordChars): + raise ParseException(instring, loc, self.errmsg, self) + return loc, [] + +class WordEnd(_PositionToken): + """Matches if the current position is at the end of a Word, and is + not followed by any character in a given set of ``wordChars`` + (default= ``printables``). To emulate the ``\b`` behavior of + regular expressions, use ``WordEnd(alphanums)``. ``WordEnd`` + will also match at the end of the string being parsed, or at the end + of a line. + """ + def __init__(self, wordChars = printables): + super(WordEnd,self).__init__() + self.wordChars = set(wordChars) + self.skipWhitespace = False + self.errmsg = "Not at the end of a word" + + def parseImpl(self, instring, loc, doActions=True ): + instrlen = len(instring) + if instrlen>0 and loc<instrlen: + if (instring[loc] in self.wordChars or + instring[loc-1] not in self.wordChars): + raise ParseException(instring, loc, self.errmsg, self) + return loc, [] + + +class ParseExpression(ParserElement): + """Abstract subclass of ParserElement, for combining and + post-processing parsed tokens. + """ + def __init__( self, exprs, savelist = False ): + super(ParseExpression,self).__init__(savelist) + if isinstance( exprs, _generatorType ): + exprs = list(exprs) + + if isinstance( exprs, basestring ): + self.exprs = [ ParserElement._literalStringClass( exprs ) ] + elif isinstance( exprs, Iterable ): + exprs = list(exprs) + # if sequence of strings provided, wrap with Literal + if all(isinstance(expr, basestring) for expr in exprs): + exprs = map(ParserElement._literalStringClass, exprs) + self.exprs = list(exprs) + else: + try: + self.exprs = list( exprs ) + except TypeError: + self.exprs = [ exprs ] + self.callPreparse = False + + def __getitem__( self, i ): + return self.exprs[i] + + def append( self, other ): + self.exprs.append( other ) + self.strRepr = None + return self + + def leaveWhitespace( self ): + """Extends ``leaveWhitespace`` defined in base class, and also invokes ``leaveWhitespace`` on + all contained expressions.""" + self.skipWhitespace = False + self.exprs = [ e.copy() for e in self.exprs ] + for e in self.exprs: + e.leaveWhitespace() + return self + + def ignore( self, other ): + if isinstance( other, Suppress ): + if other not in self.ignoreExprs: + super( ParseExpression, self).ignore( other ) + for e in self.exprs: + e.ignore( self.ignoreExprs[-1] ) + else: + super( ParseExpression, self).ignore( other ) + for e in self.exprs: + e.ignore( self.ignoreExprs[-1] ) + return self + + def __str__( self ): + try: + return super(ParseExpression,self).__str__() + except Exception: + pass + + if self.strRepr is None: + self.strRepr = "%s:(%s)" % ( self.__class__.__name__, _ustr(self.exprs) ) + return self.strRepr + + def streamline( self ): + super(ParseExpression,self).streamline() + + for e in self.exprs: + e.streamline() + + # collapse nested And's of the form And( And( And( a,b), c), d) to And( a,b,c,d ) + # but only if there are no parse actions or resultsNames on the nested And's + # (likewise for Or's and MatchFirst's) + if ( len(self.exprs) == 2 ): + other = self.exprs[0] + if ( isinstance( other, self.__class__ ) and + not(other.parseAction) and + other.resultsName is None and + not other.debug ): + self.exprs = other.exprs[:] + [ self.exprs[1] ] + self.strRepr = None + self.mayReturnEmpty |= other.mayReturnEmpty + self.mayIndexError |= other.mayIndexError + + other = self.exprs[-1] + if ( isinstance( other, self.__class__ ) and + not(other.parseAction) and + other.resultsName is None and + not other.debug ): + self.exprs = self.exprs[:-1] + other.exprs[:] + self.strRepr = None + self.mayReturnEmpty |= other.mayReturnEmpty + self.mayIndexError |= other.mayIndexError + + self.errmsg = "Expected " + _ustr(self) + + return self + + def validate( self, validateTrace=[] ): + tmp = validateTrace[:]+[self] + for e in self.exprs: + e.validate(tmp) + self.checkRecursion( [] ) + + def copy(self): + ret = super(ParseExpression,self).copy() + ret.exprs = [e.copy() for e in self.exprs] + return ret + +class And(ParseExpression): + """ + Requires all given :class:`ParseExpression` s to be found in the given order. + Expressions may be separated by whitespace. + May be constructed using the ``'+'`` operator. + May also be constructed using the ``'-'`` operator, which will + suppress backtracking. + + Example:: + + integer = Word(nums) + name_expr = OneOrMore(Word(alphas)) + + expr = And([integer("id"),name_expr("name"),integer("age")]) + # more easily written as: + expr = integer("id") + name_expr("name") + integer("age") + """ + + class _ErrorStop(Empty): + def __init__(self, *args, **kwargs): + super(And._ErrorStop,self).__init__(*args, **kwargs) + self.name = '-' + self.leaveWhitespace() + + def __init__( self, exprs, savelist = True ): + super(And,self).__init__(exprs, savelist) + self.mayReturnEmpty = all(e.mayReturnEmpty for e in self.exprs) + self.setWhitespaceChars( self.exprs[0].whiteChars ) + self.skipWhitespace = self.exprs[0].skipWhitespace + self.callPreparse = True + + def streamline(self): + super(And, self).streamline() + self.mayReturnEmpty = all(e.mayReturnEmpty for e in self.exprs) + return self + + def parseImpl( self, instring, loc, doActions=True ): + # pass False as last arg to _parse for first element, since we already + # pre-parsed the string as part of our And pre-parsing + loc, resultlist = self.exprs[0]._parse( instring, loc, doActions, callPreParse=False ) + errorStop = False + for e in self.exprs[1:]: + if isinstance(e, And._ErrorStop): + errorStop = True + continue + if errorStop: + try: + loc, exprtokens = e._parse( instring, loc, doActions ) + except ParseSyntaxException: + raise + except ParseBaseException as pe: + pe.__traceback__ = None + raise ParseSyntaxException._from_exception(pe) + except IndexError: + raise ParseSyntaxException(instring, len(instring), self.errmsg, self) + else: + loc, exprtokens = e._parse( instring, loc, doActions ) + if exprtokens or exprtokens.haskeys(): + resultlist += exprtokens + return loc, resultlist + + def __iadd__(self, other ): + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + return self.append( other ) #And( [ self, other ] ) + + def checkRecursion( self, parseElementList ): + subRecCheckList = parseElementList[:] + [ self ] + for e in self.exprs: + e.checkRecursion( subRecCheckList ) + if not e.mayReturnEmpty: + break + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "{" + " ".join(_ustr(e) for e in self.exprs) + "}" + + return self.strRepr + + +class Or(ParseExpression): + """Requires that at least one :class:`ParseExpression` is found. If + two expressions match, the expression that matches the longest + string will be used. May be constructed using the ``'^'`` + operator. + + Example:: + + # construct Or using '^' operator + + number = Word(nums) ^ Combine(Word(nums) + '.' + Word(nums)) + print(number.searchString("123 3.1416 789")) + + prints:: + + [['123'], ['3.1416'], ['789']] + """ + def __init__( self, exprs, savelist = False ): + super(Or,self).__init__(exprs, savelist) + if self.exprs: + self.mayReturnEmpty = any(e.mayReturnEmpty for e in self.exprs) + else: + self.mayReturnEmpty = True + + def streamline(self): + super(Or, self).streamline() + if __compat__.collect_all_And_tokens: + self.saveAsList = any(e.saveAsList for e in self.exprs) + return self + + def parseImpl( self, instring, loc, doActions=True ): + maxExcLoc = -1 + maxException = None + matches = [] + for e in self.exprs: + try: + loc2 = e.tryParse( instring, loc ) + except ParseException as err: + err.__traceback__ = None + if err.loc > maxExcLoc: + maxException = err + maxExcLoc = err.loc + except IndexError: + if len(instring) > maxExcLoc: + maxException = ParseException(instring,len(instring),e.errmsg,self) + maxExcLoc = len(instring) + else: + # save match among all matches, to retry longest to shortest + matches.append((loc2, e)) + + if matches: + matches.sort(key=lambda x: -x[0]) + for _,e in matches: + try: + return e._parse( instring, loc, doActions ) + except ParseException as err: + err.__traceback__ = None + if err.loc > maxExcLoc: + maxException = err + maxExcLoc = err.loc + + if maxException is not None: + maxException.msg = self.errmsg + raise maxException + else: + raise ParseException(instring, loc, "no defined alternatives to match", self) + + + def __ixor__(self, other ): + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + return self.append( other ) #Or( [ self, other ] ) + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "{" + " ^ ".join(_ustr(e) for e in self.exprs) + "}" + + return self.strRepr + + def checkRecursion( self, parseElementList ): + subRecCheckList = parseElementList[:] + [ self ] + for e in self.exprs: + e.checkRecursion( subRecCheckList ) + + +class MatchFirst(ParseExpression): + """Requires that at least one :class:`ParseExpression` is found. If + two expressions match, the first one listed is the one that will + match. May be constructed using the ``'|'`` operator. + + Example:: + + # construct MatchFirst using '|' operator + + # watch the order of expressions to match + number = Word(nums) | Combine(Word(nums) + '.' + Word(nums)) + print(number.searchString("123 3.1416 789")) # Fail! -> [['123'], ['3'], ['1416'], ['789']] + + # put more selective expression first + number = Combine(Word(nums) + '.' + Word(nums)) | Word(nums) + print(number.searchString("123 3.1416 789")) # Better -> [['123'], ['3.1416'], ['789']] + """ + def __init__( self, exprs, savelist = False ): + super(MatchFirst,self).__init__(exprs, savelist) + if self.exprs: + self.mayReturnEmpty = any(e.mayReturnEmpty for e in self.exprs) + else: + self.mayReturnEmpty = True + + def streamline(self): + super(MatchFirst, self).streamline() + if __compat__.collect_all_And_tokens: + self.saveAsList = any(e.saveAsList for e in self.exprs) + return self + + def parseImpl( self, instring, loc, doActions=True ): + maxExcLoc = -1 + maxException = None + for e in self.exprs: + try: + ret = e._parse( instring, loc, doActions ) + return ret + except ParseException as err: + if err.loc > maxExcLoc: + maxException = err + maxExcLoc = err.loc + except IndexError: + if len(instring) > maxExcLoc: + maxException = ParseException(instring,len(instring),e.errmsg,self) + maxExcLoc = len(instring) + + # only got here if no expression matched, raise exception for match that made it the furthest + else: + if maxException is not None: + maxException.msg = self.errmsg + raise maxException + else: + raise ParseException(instring, loc, "no defined alternatives to match", self) + + def __ior__(self, other ): + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + return self.append( other ) #MatchFirst( [ self, other ] ) + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "{" + " | ".join(_ustr(e) for e in self.exprs) + "}" + + return self.strRepr + + def checkRecursion( self, parseElementList ): + subRecCheckList = parseElementList[:] + [ self ] + for e in self.exprs: + e.checkRecursion( subRecCheckList ) + + +class Each(ParseExpression): + """Requires all given :class:`ParseExpression` s to be found, but in + any order. Expressions may be separated by whitespace. + + May be constructed using the ``'&'`` operator. + + Example:: + + color = oneOf("RED ORANGE YELLOW GREEN BLUE PURPLE BLACK WHITE BROWN") + shape_type = oneOf("SQUARE CIRCLE TRIANGLE STAR HEXAGON OCTAGON") + integer = Word(nums) + shape_attr = "shape:" + shape_type("shape") + posn_attr = "posn:" + Group(integer("x") + ',' + integer("y"))("posn") + color_attr = "color:" + color("color") + size_attr = "size:" + integer("size") + + # use Each (using operator '&') to accept attributes in any order + # (shape and posn are required, color and size are optional) + shape_spec = shape_attr & posn_attr & Optional(color_attr) & Optional(size_attr) + + shape_spec.runTests(''' + shape: SQUARE color: BLACK posn: 100, 120 + shape: CIRCLE size: 50 color: BLUE posn: 50,80 + color:GREEN size:20 shape:TRIANGLE posn:20,40 + ''' + ) + + prints:: + + shape: SQUARE color: BLACK posn: 100, 120 + ['shape:', 'SQUARE', 'color:', 'BLACK', 'posn:', ['100', ',', '120']] + - color: BLACK + - posn: ['100', ',', '120'] + - x: 100 + - y: 120 + - shape: SQUARE + + + shape: CIRCLE size: 50 color: BLUE posn: 50,80 + ['shape:', 'CIRCLE', 'size:', '50', 'color:', 'BLUE', 'posn:', ['50', ',', '80']] + - color: BLUE + - posn: ['50', ',', '80'] + - x: 50 + - y: 80 + - shape: CIRCLE + - size: 50 + + + color: GREEN size: 20 shape: TRIANGLE posn: 20,40 + ['color:', 'GREEN', 'size:', '20', 'shape:', 'TRIANGLE', 'posn:', ['20', ',', '40']] + - color: GREEN + - posn: ['20', ',', '40'] + - x: 20 + - y: 40 + - shape: TRIANGLE + - size: 20 + """ + def __init__( self, exprs, savelist = True ): + super(Each,self).__init__(exprs, savelist) + self.mayReturnEmpty = all(e.mayReturnEmpty for e in self.exprs) + self.skipWhitespace = True + self.initExprGroups = True + self.saveAsList = True + + def streamline(self): + super(Each, self).streamline() + self.mayReturnEmpty = all(e.mayReturnEmpty for e in self.exprs) + return self + + def parseImpl( self, instring, loc, doActions=True ): + if self.initExprGroups: + self.opt1map = dict((id(e.expr),e) for e in self.exprs if isinstance(e,Optional)) + opt1 = [ e.expr for e in self.exprs if isinstance(e,Optional) ] + opt2 = [ e for e in self.exprs if e.mayReturnEmpty and not isinstance(e,Optional)] + self.optionals = opt1 + opt2 + self.multioptionals = [ e.expr for e in self.exprs if isinstance(e,ZeroOrMore) ] + self.multirequired = [ e.expr for e in self.exprs if isinstance(e,OneOrMore) ] + self.required = [ e for e in self.exprs if not isinstance(e,(Optional,ZeroOrMore,OneOrMore)) ] + self.required += self.multirequired + self.initExprGroups = False + tmpLoc = loc + tmpReqd = self.required[:] + tmpOpt = self.optionals[:] + matchOrder = [] + + keepMatching = True + while keepMatching: + tmpExprs = tmpReqd + tmpOpt + self.multioptionals + self.multirequired + failed = [] + for e in tmpExprs: + try: + tmpLoc = e.tryParse( instring, tmpLoc ) + except ParseException: + failed.append(e) + else: + matchOrder.append(self.opt1map.get(id(e),e)) + if e in tmpReqd: + tmpReqd.remove(e) + elif e in tmpOpt: + tmpOpt.remove(e) + if len(failed) == len(tmpExprs): + keepMatching = False + + if tmpReqd: + missing = ", ".join(_ustr(e) for e in tmpReqd) + raise ParseException(instring,loc,"Missing one or more required elements (%s)" % missing ) + + # add any unmatched Optionals, in case they have default values defined + matchOrder += [e for e in self.exprs if isinstance(e,Optional) and e.expr in tmpOpt] + + resultlist = [] + for e in matchOrder: + loc,results = e._parse(instring,loc,doActions) + resultlist.append(results) + + finalResults = sum(resultlist, ParseResults([])) + return loc, finalResults + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "{" + " & ".join(_ustr(e) for e in self.exprs) + "}" + + return self.strRepr + + def checkRecursion( self, parseElementList ): + subRecCheckList = parseElementList[:] + [ self ] + for e in self.exprs: + e.checkRecursion( subRecCheckList ) + + +class ParseElementEnhance(ParserElement): + """Abstract subclass of :class:`ParserElement`, for combining and + post-processing parsed tokens. + """ + def __init__( self, expr, savelist=False ): + super(ParseElementEnhance,self).__init__(savelist) + if isinstance( expr, basestring ): + if issubclass(ParserElement._literalStringClass, Token): + expr = ParserElement._literalStringClass(expr) + else: + expr = ParserElement._literalStringClass(Literal(expr)) + self.expr = expr + self.strRepr = None + if expr is not None: + self.mayIndexError = expr.mayIndexError + self.mayReturnEmpty = expr.mayReturnEmpty + self.setWhitespaceChars( expr.whiteChars ) + self.skipWhitespace = expr.skipWhitespace + self.saveAsList = expr.saveAsList + self.callPreparse = expr.callPreparse + self.ignoreExprs.extend(expr.ignoreExprs) + + def parseImpl( self, instring, loc, doActions=True ): + if self.expr is not None: + return self.expr._parse( instring, loc, doActions, callPreParse=False ) + else: + raise ParseException("",loc,self.errmsg,self) + + def leaveWhitespace( self ): + self.skipWhitespace = False + self.expr = self.expr.copy() + if self.expr is not None: + self.expr.leaveWhitespace() + return self + + def ignore( self, other ): + if isinstance( other, Suppress ): + if other not in self.ignoreExprs: + super( ParseElementEnhance, self).ignore( other ) + if self.expr is not None: + self.expr.ignore( self.ignoreExprs[-1] ) + else: + super( ParseElementEnhance, self).ignore( other ) + if self.expr is not None: + self.expr.ignore( self.ignoreExprs[-1] ) + return self + + def streamline( self ): + super(ParseElementEnhance,self).streamline() + if self.expr is not None: + self.expr.streamline() + return self + + def checkRecursion( self, parseElementList ): + if self in parseElementList: + raise RecursiveGrammarException( parseElementList+[self] ) + subRecCheckList = parseElementList[:] + [ self ] + if self.expr is not None: + self.expr.checkRecursion( subRecCheckList ) + + def validate( self, validateTrace=[] ): + tmp = validateTrace[:]+[self] + if self.expr is not None: + self.expr.validate(tmp) + self.checkRecursion( [] ) + + def __str__( self ): + try: + return super(ParseElementEnhance,self).__str__() + except Exception: + pass + + if self.strRepr is None and self.expr is not None: + self.strRepr = "%s:(%s)" % ( self.__class__.__name__, _ustr(self.expr) ) + return self.strRepr + + +class FollowedBy(ParseElementEnhance): + """Lookahead matching of the given parse expression. + ``FollowedBy`` does *not* advance the parsing position within + the input string, it only verifies that the specified parse + expression matches at the current position. ``FollowedBy`` + always returns a null token list. If any results names are defined + in the lookahead expression, those *will* be returned for access by + name. + + Example:: + + # use FollowedBy to match a label only if it is followed by a ':' + data_word = Word(alphas) + label = data_word + FollowedBy(':') + attr_expr = Group(label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join)) + + OneOrMore(attr_expr).parseString("shape: SQUARE color: BLACK posn: upper left").pprint() + + prints:: + + [['shape', 'SQUARE'], ['color', 'BLACK'], ['posn', 'upper left']] + """ + def __init__( self, expr ): + super(FollowedBy,self).__init__(expr) + self.mayReturnEmpty = True + + def parseImpl( self, instring, loc, doActions=True ): + _, ret = self.expr._parse(instring, loc, doActions=doActions) + del ret[:] + return loc, ret + + +class PrecededBy(ParseElementEnhance): + """Lookbehind matching of the given parse expression. + ``PrecededBy`` does not advance the parsing position within the + input string, it only verifies that the specified parse expression + matches prior to the current position. ``PrecededBy`` always + returns a null token list, but if a results name is defined on the + given expression, it is returned. + + Parameters: + + - expr - expression that must match prior to the current parse + location + - retreat - (default= ``None``) - (int) maximum number of characters + to lookbehind prior to the current parse location + + If the lookbehind expression is a string, Literal, Keyword, or + a Word or CharsNotIn with a specified exact or maximum length, then + the retreat parameter is not required. Otherwise, retreat must be + specified to give a maximum number of characters to look back from + the current parse position for a lookbehind match. + + Example:: + + # VB-style variable names with type prefixes + int_var = PrecededBy("#") + pyparsing_common.identifier + str_var = PrecededBy("$") + pyparsing_common.identifier + + """ + def __init__(self, expr, retreat=None): + super(PrecededBy, self).__init__(expr) + self.expr = self.expr().leaveWhitespace() + self.mayReturnEmpty = True + self.mayIndexError = False + self.exact = False + if isinstance(expr, str): + retreat = len(expr) + self.exact = True + elif isinstance(expr, (Literal, Keyword)): + retreat = expr.matchLen + self.exact = True + elif isinstance(expr, (Word, CharsNotIn)) and expr.maxLen != _MAX_INT: + retreat = expr.maxLen + self.exact = True + elif isinstance(expr, _PositionToken): + retreat = 0 + self.exact = True + self.retreat = retreat + self.errmsg = "not preceded by " + str(expr) + self.skipWhitespace = False + + def parseImpl(self, instring, loc=0, doActions=True): + if self.exact: + if loc < self.retreat: + raise ParseException(instring, loc, self.errmsg) + start = loc - self.retreat + _, ret = self.expr._parse(instring, start) + else: + # retreat specified a maximum lookbehind window, iterate + test_expr = self.expr + StringEnd() + instring_slice = instring[:loc] + last_expr = ParseException(instring, loc, self.errmsg) + for offset in range(1, min(loc, self.retreat+1)): + try: + _, ret = test_expr._parse(instring_slice, loc-offset) + except ParseBaseException as pbe: + last_expr = pbe + else: + break + else: + raise last_expr + # return empty list of tokens, but preserve any defined results names + del ret[:] + return loc, ret + + +class NotAny(ParseElementEnhance): + """Lookahead to disallow matching with the given parse expression. + ``NotAny`` does *not* advance the parsing position within the + input string, it only verifies that the specified parse expression + does *not* match at the current position. Also, ``NotAny`` does + *not* skip over leading whitespace. ``NotAny`` always returns + a null token list. May be constructed using the '~' operator. + + Example:: + + AND, OR, NOT = map(CaselessKeyword, "AND OR NOT".split()) + + # take care not to mistake keywords for identifiers + ident = ~(AND | OR | NOT) + Word(alphas) + boolean_term = Optional(NOT) + ident + + # very crude boolean expression - to support parenthesis groups and + # operation hierarchy, use infixNotation + boolean_expr = boolean_term + ZeroOrMore((AND | OR) + boolean_term) + + # integers that are followed by "." are actually floats + integer = Word(nums) + ~Char(".") + """ + def __init__( self, expr ): + super(NotAny,self).__init__(expr) + #~ self.leaveWhitespace() + self.skipWhitespace = False # do NOT use self.leaveWhitespace(), don't want to propagate to exprs + self.mayReturnEmpty = True + self.errmsg = "Found unwanted token, "+_ustr(self.expr) + + def parseImpl( self, instring, loc, doActions=True ): + if self.expr.canParseNext(instring, loc): + raise ParseException(instring, loc, self.errmsg, self) + return loc, [] + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "~{" + _ustr(self.expr) + "}" + + return self.strRepr + +class _MultipleMatch(ParseElementEnhance): + def __init__( self, expr, stopOn=None): + super(_MultipleMatch, self).__init__(expr) + self.saveAsList = True + ender = stopOn + if isinstance(ender, basestring): + ender = ParserElement._literalStringClass(ender) + self.not_ender = ~ender if ender is not None else None + + def parseImpl( self, instring, loc, doActions=True ): + self_expr_parse = self.expr._parse + self_skip_ignorables = self._skipIgnorables + check_ender = self.not_ender is not None + if check_ender: + try_not_ender = self.not_ender.tryParse + + # must be at least one (but first see if we are the stopOn sentinel; + # if so, fail) + if check_ender: + try_not_ender(instring, loc) + loc, tokens = self_expr_parse( instring, loc, doActions, callPreParse=False ) + try: + hasIgnoreExprs = (not not self.ignoreExprs) + while 1: + if check_ender: + try_not_ender(instring, loc) + if hasIgnoreExprs: + preloc = self_skip_ignorables( instring, loc ) + else: + preloc = loc + loc, tmptokens = self_expr_parse( instring, preloc, doActions ) + if tmptokens or tmptokens.haskeys(): + tokens += tmptokens + except (ParseException,IndexError): + pass + + return loc, tokens + +class OneOrMore(_MultipleMatch): + """Repetition of one or more of the given expression. + + Parameters: + - expr - expression that must match one or more times + - stopOn - (default= ``None``) - expression for a terminating sentinel + (only required if the sentinel would ordinarily match the repetition + expression) + + Example:: + + data_word = Word(alphas) + label = data_word + FollowedBy(':') + attr_expr = Group(label + Suppress(':') + OneOrMore(data_word).setParseAction(' '.join)) + + text = "shape: SQUARE posn: upper left color: BLACK" + OneOrMore(attr_expr).parseString(text).pprint() # Fail! read 'color' as data instead of next label -> [['shape', 'SQUARE color']] + + # use stopOn attribute for OneOrMore to avoid reading label string as part of the data + attr_expr = Group(label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join)) + OneOrMore(attr_expr).parseString(text).pprint() # Better -> [['shape', 'SQUARE'], ['posn', 'upper left'], ['color', 'BLACK']] + + # could also be written as + (attr_expr * (1,)).parseString(text).pprint() + """ + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "{" + _ustr(self.expr) + "}..." + + return self.strRepr + +class ZeroOrMore(_MultipleMatch): + """Optional repetition of zero or more of the given expression. + + Parameters: + - expr - expression that must match zero or more times + - stopOn - (default= ``None``) - expression for a terminating sentinel + (only required if the sentinel would ordinarily match the repetition + expression) + + Example: similar to :class:`OneOrMore` + """ + def __init__( self, expr, stopOn=None): + super(ZeroOrMore,self).__init__(expr, stopOn=stopOn) + self.mayReturnEmpty = True + + def parseImpl( self, instring, loc, doActions=True ): + try: + return super(ZeroOrMore, self).parseImpl(instring, loc, doActions) + except (ParseException,IndexError): + return loc, [] + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "[" + _ustr(self.expr) + "]..." + + return self.strRepr + +class _NullToken(object): + def __bool__(self): + return False + __nonzero__ = __bool__ + def __str__(self): + return "" + +_optionalNotMatched = _NullToken() +class Optional(ParseElementEnhance): + """Optional matching of the given expression. + + Parameters: + - expr - expression that must match zero or more times + - default (optional) - value to be returned if the optional expression is not found. + + Example:: + + # US postal code can be a 5-digit zip, plus optional 4-digit qualifier + zip = Combine(Word(nums, exact=5) + Optional('-' + Word(nums, exact=4))) + zip.runTests(''' + # traditional ZIP code + 12345 + + # ZIP+4 form + 12101-0001 + + # invalid ZIP + 98765- + ''') + + prints:: + + # traditional ZIP code + 12345 + ['12345'] + + # ZIP+4 form + 12101-0001 + ['12101-0001'] + + # invalid ZIP + 98765- + ^ + FAIL: Expected end of text (at char 5), (line:1, col:6) + """ + def __init__( self, expr, default=_optionalNotMatched ): + super(Optional,self).__init__( expr, savelist=False ) + self.saveAsList = self.expr.saveAsList + self.defaultValue = default + self.mayReturnEmpty = True + + def parseImpl( self, instring, loc, doActions=True ): + try: + loc, tokens = self.expr._parse( instring, loc, doActions, callPreParse=False ) + except (ParseException,IndexError): + if self.defaultValue is not _optionalNotMatched: + if self.expr.resultsName: + tokens = ParseResults([ self.defaultValue ]) + tokens[self.expr.resultsName] = self.defaultValue + else: + tokens = [ self.defaultValue ] + else: + tokens = [] + return loc, tokens + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "[" + _ustr(self.expr) + "]" + + return self.strRepr + +class SkipTo(ParseElementEnhance): + """Token for skipping over all undefined text until the matched + expression is found. + + Parameters: + - expr - target expression marking the end of the data to be skipped + - include - (default= ``False``) if True, the target expression is also parsed + (the skipped text and target expression are returned as a 2-element list). + - ignore - (default= ``None``) used to define grammars (typically quoted strings and + comments) that might contain false matches to the target expression + - failOn - (default= ``None``) define expressions that are not allowed to be + included in the skipped test; if found before the target expression is found, + the SkipTo is not a match + + Example:: + + report = ''' + Outstanding Issues Report - 1 Jan 2000 + + # | Severity | Description | Days Open + -----+----------+-------------------------------------------+----------- + 101 | Critical | Intermittent system crash | 6 + 94 | Cosmetic | Spelling error on Login ('log|n') | 14 + 79 | Minor | System slow when running too many reports | 47 + ''' + integer = Word(nums) + SEP = Suppress('|') + # use SkipTo to simply match everything up until the next SEP + # - ignore quoted strings, so that a '|' character inside a quoted string does not match + # - parse action will call token.strip() for each matched token, i.e., the description body + string_data = SkipTo(SEP, ignore=quotedString) + string_data.setParseAction(tokenMap(str.strip)) + ticket_expr = (integer("issue_num") + SEP + + string_data("sev") + SEP + + string_data("desc") + SEP + + integer("days_open")) + + for tkt in ticket_expr.searchString(report): + print tkt.dump() + + prints:: + + ['101', 'Critical', 'Intermittent system crash', '6'] + - days_open: 6 + - desc: Intermittent system crash + - issue_num: 101 + - sev: Critical + ['94', 'Cosmetic', "Spelling error on Login ('log|n')", '14'] + - days_open: 14 + - desc: Spelling error on Login ('log|n') + - issue_num: 94 + - sev: Cosmetic + ['79', 'Minor', 'System slow when running too many reports', '47'] + - days_open: 47 + - desc: System slow when running too many reports + - issue_num: 79 + - sev: Minor + """ + def __init__( self, other, include=False, ignore=None, failOn=None ): + super( SkipTo, self ).__init__( other ) + self.ignoreExpr = ignore + self.mayReturnEmpty = True + self.mayIndexError = False + self.includeMatch = include + self.saveAsList = False + if isinstance(failOn, basestring): + self.failOn = ParserElement._literalStringClass(failOn) + else: + self.failOn = failOn + self.errmsg = "No match found for "+_ustr(self.expr) + + def parseImpl( self, instring, loc, doActions=True ): + startloc = loc + instrlen = len(instring) + expr = self.expr + expr_parse = self.expr._parse + self_failOn_canParseNext = self.failOn.canParseNext if self.failOn is not None else None + self_ignoreExpr_tryParse = self.ignoreExpr.tryParse if self.ignoreExpr is not None else None + + tmploc = loc + while tmploc <= instrlen: + if self_failOn_canParseNext is not None: + # break if failOn expression matches + if self_failOn_canParseNext(instring, tmploc): + break + + if self_ignoreExpr_tryParse is not None: + # advance past ignore expressions + while 1: + try: + tmploc = self_ignoreExpr_tryParse(instring, tmploc) + except ParseBaseException: + break + + try: + expr_parse(instring, tmploc, doActions=False, callPreParse=False) + except (ParseException, IndexError): + # no match, advance loc in string + tmploc += 1 + else: + # matched skipto expr, done + break + + else: + # ran off the end of the input string without matching skipto expr, fail + raise ParseException(instring, loc, self.errmsg, self) + + # build up return values + loc = tmploc + skiptext = instring[startloc:loc] + skipresult = ParseResults(skiptext) + + if self.includeMatch: + loc, mat = expr_parse(instring,loc,doActions,callPreParse=False) + skipresult += mat + + return loc, skipresult + +class Forward(ParseElementEnhance): + """Forward declaration of an expression to be defined later - + used for recursive grammars, such as algebraic infix notation. + When the expression is known, it is assigned to the ``Forward`` + variable using the '<<' operator. + + Note: take care when assigning to ``Forward`` not to overlook + precedence of operators. + + Specifically, '|' has a lower precedence than '<<', so that:: + + fwdExpr << a | b | c + + will actually be evaluated as:: + + (fwdExpr << a) | b | c + + thereby leaving b and c out as parseable alternatives. It is recommended that you + explicitly group the values inserted into the ``Forward``:: + + fwdExpr << (a | b | c) + + Converting to use the '<<=' operator instead will avoid this problem. + + See :class:`ParseResults.pprint` for an example of a recursive + parser created using ``Forward``. + """ + def __init__( self, other=None ): + super(Forward,self).__init__( other, savelist=False ) + + def __lshift__( self, other ): + if isinstance( other, basestring ): + other = ParserElement._literalStringClass(other) + self.expr = other + self.strRepr = None + self.mayIndexError = self.expr.mayIndexError + self.mayReturnEmpty = self.expr.mayReturnEmpty + self.setWhitespaceChars( self.expr.whiteChars ) + self.skipWhitespace = self.expr.skipWhitespace + self.saveAsList = self.expr.saveAsList + self.ignoreExprs.extend(self.expr.ignoreExprs) + return self + + def __ilshift__(self, other): + return self << other + + def leaveWhitespace( self ): + self.skipWhitespace = False + return self + + def streamline( self ): + if not self.streamlined: + self.streamlined = True + if self.expr is not None: + self.expr.streamline() + return self + + def validate( self, validateTrace=[] ): + if self not in validateTrace: + tmp = validateTrace[:]+[self] + if self.expr is not None: + self.expr.validate(tmp) + self.checkRecursion([]) + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + # Avoid infinite recursion by setting a temporary name + self.name = self.__class__.__name__ + ": ..." + + # Use the string representation of main expression. + try: + if self.expr is not None: + retString = _ustr(self.expr) + else: + retString = "None" + finally: + del self.name + return self.__class__.__name__ + ": " + retString + + def copy(self): + if self.expr is not None: + return super(Forward,self).copy() + else: + ret = Forward() + ret <<= self + return ret + +class TokenConverter(ParseElementEnhance): + """ + Abstract subclass of :class:`ParseExpression`, for converting parsed results. + """ + def __init__( self, expr, savelist=False ): + super(TokenConverter,self).__init__( expr )#, savelist ) + self.saveAsList = False + +class Combine(TokenConverter): + """Converter to concatenate all matching tokens to a single string. + By default, the matching patterns must also be contiguous in the + input string; this can be disabled by specifying + ``'adjacent=False'`` in the constructor. + + Example:: + + real = Word(nums) + '.' + Word(nums) + print(real.parseString('3.1416')) # -> ['3', '.', '1416'] + # will also erroneously match the following + print(real.parseString('3. 1416')) # -> ['3', '.', '1416'] + + real = Combine(Word(nums) + '.' + Word(nums)) + print(real.parseString('3.1416')) # -> ['3.1416'] + # no match when there are internal spaces + print(real.parseString('3. 1416')) # -> Exception: Expected W:(0123...) + """ + def __init__( self, expr, joinString="", adjacent=True ): + super(Combine,self).__init__( expr ) + # suppress whitespace-stripping in contained parse expressions, but re-enable it on the Combine itself + if adjacent: + self.leaveWhitespace() + self.adjacent = adjacent + self.skipWhitespace = True + self.joinString = joinString + self.callPreparse = True + + def ignore( self, other ): + if self.adjacent: + ParserElement.ignore(self, other) + else: + super( Combine, self).ignore( other ) + return self + + def postParse( self, instring, loc, tokenlist ): + retToks = tokenlist.copy() + del retToks[:] + retToks += ParseResults([ "".join(tokenlist._asStringList(self.joinString)) ], modal=self.modalResults) + + if self.resultsName and retToks.haskeys(): + return [ retToks ] + else: + return retToks + +class Group(TokenConverter): + """Converter to return the matched tokens as a list - useful for + returning tokens of :class:`ZeroOrMore` and :class:`OneOrMore` expressions. + + Example:: + + ident = Word(alphas) + num = Word(nums) + term = ident | num + func = ident + Optional(delimitedList(term)) + print(func.parseString("fn a,b,100")) # -> ['fn', 'a', 'b', '100'] + + func = ident + Group(Optional(delimitedList(term))) + print(func.parseString("fn a,b,100")) # -> ['fn', ['a', 'b', '100']] + """ + def __init__( self, expr ): + super(Group,self).__init__( expr ) + self.saveAsList = True + + def postParse( self, instring, loc, tokenlist ): + return [ tokenlist ] + +class Dict(TokenConverter): + """Converter to return a repetitive expression as a list, but also + as a dictionary. Each element can also be referenced using the first + token in the expression as its key. Useful for tabular report + scraping when the first column can be used as a item key. + + Example:: + + data_word = Word(alphas) + label = data_word + FollowedBy(':') + attr_expr = Group(label + Suppress(':') + OneOrMore(data_word).setParseAction(' '.join)) + + text = "shape: SQUARE posn: upper left color: light blue texture: burlap" + attr_expr = (label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join)) + + # print attributes as plain groups + print(OneOrMore(attr_expr).parseString(text).dump()) + + # instead of OneOrMore(expr), parse using Dict(OneOrMore(Group(expr))) - Dict will auto-assign names + result = Dict(OneOrMore(Group(attr_expr))).parseString(text) + print(result.dump()) + + # access named fields as dict entries, or output as dict + print(result['shape']) + print(result.asDict()) + + prints:: + + ['shape', 'SQUARE', 'posn', 'upper left', 'color', 'light blue', 'texture', 'burlap'] + [['shape', 'SQUARE'], ['posn', 'upper left'], ['color', 'light blue'], ['texture', 'burlap']] + - color: light blue + - posn: upper left + - shape: SQUARE + - texture: burlap + SQUARE + {'color': 'light blue', 'posn': 'upper left', 'texture': 'burlap', 'shape': 'SQUARE'} + + See more examples at :class:`ParseResults` of accessing fields by results name. + """ + def __init__( self, expr ): + super(Dict,self).__init__( expr ) + self.saveAsList = True + + def postParse( self, instring, loc, tokenlist ): + for i,tok in enumerate(tokenlist): + if len(tok) == 0: + continue + ikey = tok[0] + if isinstance(ikey,int): + ikey = _ustr(tok[0]).strip() + if len(tok)==1: + tokenlist[ikey] = _ParseResultsWithOffset("",i) + elif len(tok)==2 and not isinstance(tok[1],ParseResults): + tokenlist[ikey] = _ParseResultsWithOffset(tok[1],i) + else: + dictvalue = tok.copy() #ParseResults(i) + del dictvalue[0] + if len(dictvalue)!= 1 or (isinstance(dictvalue,ParseResults) and dictvalue.haskeys()): + tokenlist[ikey] = _ParseResultsWithOffset(dictvalue,i) + else: + tokenlist[ikey] = _ParseResultsWithOffset(dictvalue[0],i) + + if self.resultsName: + return [ tokenlist ] + else: + return tokenlist + + +class Suppress(TokenConverter): + """Converter for ignoring the results of a parsed expression. + + Example:: + + source = "a, b, c,d" + wd = Word(alphas) + wd_list1 = wd + ZeroOrMore(',' + wd) + print(wd_list1.parseString(source)) + + # often, delimiters that are useful during parsing are just in the + # way afterward - use Suppress to keep them out of the parsed output + wd_list2 = wd + ZeroOrMore(Suppress(',') + wd) + print(wd_list2.parseString(source)) + + prints:: + + ['a', ',', 'b', ',', 'c', ',', 'd'] + ['a', 'b', 'c', 'd'] + + (See also :class:`delimitedList`.) + """ + def postParse( self, instring, loc, tokenlist ): + return [] + + def suppress( self ): + return self + + +class OnlyOnce(object): + """Wrapper for parse actions, to ensure they are only called once. + """ + def __init__(self, methodCall): + self.callable = _trim_arity(methodCall) + self.called = False + def __call__(self,s,l,t): + if not self.called: + results = self.callable(s,l,t) + self.called = True + return results + raise ParseException(s,l,"") + def reset(self): + self.called = False + +def traceParseAction(f): + """Decorator for debugging parse actions. + + When the parse action is called, this decorator will print + ``">> entering method-name(line:<current_source_line>, <parse_location>, <matched_tokens>)"``. + When the parse action completes, the decorator will print + ``"<<"`` followed by the returned value, or any exception that the parse action raised. + + Example:: + + wd = Word(alphas) + + @traceParseAction + def remove_duplicate_chars(tokens): + return ''.join(sorted(set(''.join(tokens)))) + + wds = OneOrMore(wd).setParseAction(remove_duplicate_chars) + print(wds.parseString("slkdjs sld sldd sdlf sdljf")) + + prints:: + + >>entering remove_duplicate_chars(line: 'slkdjs sld sldd sdlf sdljf', 0, (['slkdjs', 'sld', 'sldd', 'sdlf', 'sdljf'], {})) + <<leaving remove_duplicate_chars (ret: 'dfjkls') + ['dfjkls'] + """ + f = _trim_arity(f) + def z(*paArgs): + thisFunc = f.__name__ + s,l,t = paArgs[-3:] + if len(paArgs)>3: + thisFunc = paArgs[0].__class__.__name__ + '.' + thisFunc + sys.stderr.write( ">>entering %s(line: '%s', %d, %r)\n" % (thisFunc,line(l,s),l,t) ) + try: + ret = f(*paArgs) + except Exception as exc: + sys.stderr.write( "<<leaving %s (exception: %s)\n" % (thisFunc,exc) ) + raise + sys.stderr.write( "<<leaving %s (ret: %r)\n" % (thisFunc,ret) ) + return ret + try: + z.__name__ = f.__name__ + except AttributeError: + pass + return z + +# +# global helpers +# +def delimitedList( expr, delim=",", combine=False ): + """Helper to define a delimited list of expressions - the delimiter + defaults to ','. By default, the list elements and delimiters can + have intervening whitespace, and comments, but this can be + overridden by passing ``combine=True`` in the constructor. If + ``combine`` is set to ``True``, the matching tokens are + returned as a single token string, with the delimiters included; + otherwise, the matching tokens are returned as a list of tokens, + with the delimiters suppressed. + + Example:: + + delimitedList(Word(alphas)).parseString("aa,bb,cc") # -> ['aa', 'bb', 'cc'] + delimitedList(Word(hexnums), delim=':', combine=True).parseString("AA:BB:CC:DD:EE") # -> ['AA:BB:CC:DD:EE'] + """ + dlName = _ustr(expr)+" ["+_ustr(delim)+" "+_ustr(expr)+"]..." + if combine: + return Combine( expr + ZeroOrMore( delim + expr ) ).setName(dlName) + else: + return ( expr + ZeroOrMore( Suppress( delim ) + expr ) ).setName(dlName) + +def countedArray( expr, intExpr=None ): + """Helper to define a counted list of expressions. + + This helper defines a pattern of the form:: + + integer expr expr expr... + + where the leading integer tells how many expr expressions follow. + The matched tokens returns the array of expr tokens as a list - the + leading count token is suppressed. + + If ``intExpr`` is specified, it should be a pyparsing expression + that produces an integer value. + + Example:: + + countedArray(Word(alphas)).parseString('2 ab cd ef') # -> ['ab', 'cd'] + + # in this parser, the leading integer value is given in binary, + # '10' indicating that 2 values are in the array + binaryConstant = Word('01').setParseAction(lambda t: int(t[0], 2)) + countedArray(Word(alphas), intExpr=binaryConstant).parseString('10 ab cd ef') # -> ['ab', 'cd'] + """ + arrayExpr = Forward() + def countFieldParseAction(s,l,t): + n = t[0] + arrayExpr << (n and Group(And([expr]*n)) or Group(empty)) + return [] + if intExpr is None: + intExpr = Word(nums).setParseAction(lambda t:int(t[0])) + else: + intExpr = intExpr.copy() + intExpr.setName("arrayLen") + intExpr.addParseAction(countFieldParseAction, callDuringTry=True) + return ( intExpr + arrayExpr ).setName('(len) ' + _ustr(expr) + '...') + +def _flatten(L): + ret = [] + for i in L: + if isinstance(i,list): + ret.extend(_flatten(i)) + else: + ret.append(i) + return ret + +def matchPreviousLiteral(expr): + """Helper to define an expression that is indirectly defined from + the tokens matched in a previous expression, that is, it looks for + a 'repeat' of a previous expression. For example:: + + first = Word(nums) + second = matchPreviousLiteral(first) + matchExpr = first + ":" + second + + will match ``"1:1"``, but not ``"1:2"``. Because this + matches a previous literal, will also match the leading + ``"1:1"`` in ``"1:10"``. If this is not desired, use + :class:`matchPreviousExpr`. Do *not* use with packrat parsing + enabled. + """ + rep = Forward() + def copyTokenToRepeater(s,l,t): + if t: + if len(t) == 1: + rep << t[0] + else: + # flatten t tokens + tflat = _flatten(t.asList()) + rep << And(Literal(tt) for tt in tflat) + else: + rep << Empty() + expr.addParseAction(copyTokenToRepeater, callDuringTry=True) + rep.setName('(prev) ' + _ustr(expr)) + return rep + +def matchPreviousExpr(expr): + """Helper to define an expression that is indirectly defined from + the tokens matched in a previous expression, that is, it looks for + a 'repeat' of a previous expression. For example:: + + first = Word(nums) + second = matchPreviousExpr(first) + matchExpr = first + ":" + second + + will match ``"1:1"``, but not ``"1:2"``. Because this + matches by expressions, will *not* match the leading ``"1:1"`` + in ``"1:10"``; the expressions are evaluated first, and then + compared, so ``"1"`` is compared with ``"10"``. Do *not* use + with packrat parsing enabled. + """ + rep = Forward() + e2 = expr.copy() + rep <<= e2 + def copyTokenToRepeater(s,l,t): + matchTokens = _flatten(t.asList()) + def mustMatchTheseTokens(s,l,t): + theseTokens = _flatten(t.asList()) + if theseTokens != matchTokens: + raise ParseException("",0,"") + rep.setParseAction( mustMatchTheseTokens, callDuringTry=True ) + expr.addParseAction(copyTokenToRepeater, callDuringTry=True) + rep.setName('(prev) ' + _ustr(expr)) + return rep + +def _escapeRegexRangeChars(s): + #~ escape these chars: ^-] + for c in r"\^-]": + s = s.replace(c,_bslash+c) + s = s.replace("\n",r"\n") + s = s.replace("\t",r"\t") + return _ustr(s) + +def oneOf( strs, caseless=False, useRegex=True ): + """Helper to quickly define a set of alternative Literals, and makes + sure to do longest-first testing when there is a conflict, + regardless of the input order, but returns + a :class:`MatchFirst` for best performance. + + Parameters: + + - strs - a string of space-delimited literals, or a collection of + string literals + - caseless - (default= ``False``) - treat all literals as + caseless + - useRegex - (default= ``True``) - as an optimization, will + generate a Regex object; otherwise, will generate + a :class:`MatchFirst` object (if ``caseless=True``, or if + creating a :class:`Regex` raises an exception) + + Example:: + + comp_oper = oneOf("< = > <= >= !=") + var = Word(alphas) + number = Word(nums) + term = var | number + comparison_expr = term + comp_oper + term + print(comparison_expr.searchString("B = 12 AA=23 B<=AA AA>12")) + + prints:: + + [['B', '=', '12'], ['AA', '=', '23'], ['B', '<=', 'AA'], ['AA', '>', '12']] + """ + if caseless: + isequal = ( lambda a,b: a.upper() == b.upper() ) + masks = ( lambda a,b: b.upper().startswith(a.upper()) ) + parseElementClass = CaselessLiteral + else: + isequal = ( lambda a,b: a == b ) + masks = ( lambda a,b: b.startswith(a) ) + parseElementClass = Literal + + symbols = [] + if isinstance(strs,basestring): + symbols = strs.split() + elif isinstance(strs, Iterable): + symbols = list(strs) + else: + warnings.warn("Invalid argument to oneOf, expected string or iterable", + SyntaxWarning, stacklevel=2) + if not symbols: + return NoMatch() + + i = 0 + while i < len(symbols)-1: + cur = symbols[i] + for j,other in enumerate(symbols[i+1:]): + if ( isequal(other, cur) ): + del symbols[i+j+1] + break + elif ( masks(cur, other) ): + del symbols[i+j+1] + symbols.insert(i,other) + cur = other + break + else: + i += 1 + + if not caseless and useRegex: + #~ print (strs,"->", "|".join( [ _escapeRegexChars(sym) for sym in symbols] )) + try: + if len(symbols)==len("".join(symbols)): + return Regex( "[%s]" % "".join(_escapeRegexRangeChars(sym) for sym in symbols) ).setName(' | '.join(symbols)) + else: + return Regex( "|".join(re.escape(sym) for sym in symbols) ).setName(' | '.join(symbols)) + except Exception: + warnings.warn("Exception creating Regex for oneOf, building MatchFirst", + SyntaxWarning, stacklevel=2) + + + # last resort, just use MatchFirst + return MatchFirst(parseElementClass(sym) for sym in symbols).setName(' | '.join(symbols)) + +def dictOf( key, value ): + """Helper to easily and clearly define a dictionary by specifying + the respective patterns for the key and value. Takes care of + defining the :class:`Dict`, :class:`ZeroOrMore`, and + :class:`Group` tokens in the proper order. The key pattern + can include delimiting markers or punctuation, as long as they are + suppressed, thereby leaving the significant key text. The value + pattern can include named results, so that the :class:`Dict` results + can include named token fields. + + Example:: + + text = "shape: SQUARE posn: upper left color: light blue texture: burlap" + attr_expr = (label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join)) + print(OneOrMore(attr_expr).parseString(text).dump()) + + attr_label = label + attr_value = Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join) + + # similar to Dict, but simpler call format + result = dictOf(attr_label, attr_value).parseString(text) + print(result.dump()) + print(result['shape']) + print(result.shape) # object attribute access works too + print(result.asDict()) + + prints:: + + [['shape', 'SQUARE'], ['posn', 'upper left'], ['color', 'light blue'], ['texture', 'burlap']] + - color: light blue + - posn: upper left + - shape: SQUARE + - texture: burlap + SQUARE + SQUARE + {'color': 'light blue', 'shape': 'SQUARE', 'posn': 'upper left', 'texture': 'burlap'} + """ + return Dict(OneOrMore(Group(key + value))) + +def originalTextFor(expr, asString=True): + """Helper to return the original, untokenized text for a given + expression. Useful to restore the parsed fields of an HTML start + tag into the raw tag text itself, or to revert separate tokens with + intervening whitespace back to the original matching input text. By + default, returns astring containing the original parsed text. + + If the optional ``asString`` argument is passed as + ``False``, then the return value is + a :class:`ParseResults` containing any results names that + were originally matched, and a single token containing the original + matched text from the input string. So if the expression passed to + :class:`originalTextFor` contains expressions with defined + results names, you must set ``asString`` to ``False`` if you + want to preserve those results name values. + + Example:: + + src = "this is test <b> bold <i>text</i> </b> normal text " + for tag in ("b","i"): + opener,closer = makeHTMLTags(tag) + patt = originalTextFor(opener + SkipTo(closer) + closer) + print(patt.searchString(src)[0]) + + prints:: + + ['<b> bold <i>text</i> </b>'] + ['<i>text</i>'] + """ + locMarker = Empty().setParseAction(lambda s,loc,t: loc) + endlocMarker = locMarker.copy() + endlocMarker.callPreparse = False + matchExpr = locMarker("_original_start") + expr + endlocMarker("_original_end") + if asString: + extractText = lambda s,l,t: s[t._original_start:t._original_end] + else: + def extractText(s,l,t): + t[:] = [s[t.pop('_original_start'):t.pop('_original_end')]] + matchExpr.setParseAction(extractText) + matchExpr.ignoreExprs = expr.ignoreExprs + return matchExpr + +def ungroup(expr): + """Helper to undo pyparsing's default grouping of And expressions, + even if all but one are non-empty. + """ + return TokenConverter(expr).addParseAction(lambda t:t[0]) + +def locatedExpr(expr): + """Helper to decorate a returned token with its starting and ending + locations in the input string. + + This helper adds the following results names: + + - locn_start = location where matched expression begins + - locn_end = location where matched expression ends + - value = the actual parsed results + + Be careful if the input text contains ``<TAB>`` characters, you + may want to call :class:`ParserElement.parseWithTabs` + + Example:: + + wd = Word(alphas) + for match in locatedExpr(wd).searchString("ljsdf123lksdjjf123lkkjj1222"): + print(match) + + prints:: + + [[0, 'ljsdf', 5]] + [[8, 'lksdjjf', 15]] + [[18, 'lkkjj', 23]] + """ + locator = Empty().setParseAction(lambda s,l,t: l) + return Group(locator("locn_start") + expr("value") + locator.copy().leaveWhitespace()("locn_end")) + + +# convenience constants for positional expressions +empty = Empty().setName("empty") +lineStart = LineStart().setName("lineStart") +lineEnd = LineEnd().setName("lineEnd") +stringStart = StringStart().setName("stringStart") +stringEnd = StringEnd().setName("stringEnd") + +_escapedPunc = Word( _bslash, r"\[]-*.$+^?()~ ", exact=2 ).setParseAction(lambda s,l,t:t[0][1]) +_escapedHexChar = Regex(r"\\0?[xX][0-9a-fA-F]+").setParseAction(lambda s,l,t:unichr(int(t[0].lstrip(r'\0x'),16))) +_escapedOctChar = Regex(r"\\0[0-7]+").setParseAction(lambda s,l,t:unichr(int(t[0][1:],8))) +_singleChar = _escapedPunc | _escapedHexChar | _escapedOctChar | CharsNotIn(r'\]', exact=1) +_charRange = Group(_singleChar + Suppress("-") + _singleChar) +_reBracketExpr = Literal("[") + Optional("^").setResultsName("negate") + Group( OneOrMore( _charRange | _singleChar ) ).setResultsName("body") + "]" + +def srange(s): + r"""Helper to easily define string ranges for use in Word + construction. Borrows syntax from regexp '[]' string range + definitions:: + + srange("[0-9]") -> "0123456789" + srange("[a-z]") -> "abcdefghijklmnopqrstuvwxyz" + srange("[a-z$_]") -> "abcdefghijklmnopqrstuvwxyz$_" + + The input string must be enclosed in []'s, and the returned string + is the expanded character set joined into a single string. The + values enclosed in the []'s may be: + + - a single character + - an escaped character with a leading backslash (such as ``\-`` + or ``\]``) + - an escaped hex character with a leading ``'\x'`` + (``\x21``, which is a ``'!'`` character) (``\0x##`` + is also supported for backwards compatibility) + - an escaped octal character with a leading ``'\0'`` + (``\041``, which is a ``'!'`` character) + - a range of any of the above, separated by a dash (``'a-z'``, + etc.) + - any combination of the above (``'aeiouy'``, + ``'a-zA-Z0-9_$'``, etc.) + """ + _expanded = lambda p: p if not isinstance(p,ParseResults) else ''.join(unichr(c) for c in range(ord(p[0]),ord(p[1])+1)) + try: + return "".join(_expanded(part) for part in _reBracketExpr.parseString(s).body) + except Exception: + return "" + +def matchOnlyAtCol(n): + """Helper method for defining parse actions that require matching at + a specific column in the input text. + """ + def verifyCol(strg,locn,toks): + if col(locn,strg) != n: + raise ParseException(strg,locn,"matched token not at column %d" % n) + return verifyCol + +def replaceWith(replStr): + """Helper method for common parse actions that simply return + a literal value. Especially useful when used with + :class:`transformString<ParserElement.transformString>` (). + + Example:: + + num = Word(nums).setParseAction(lambda toks: int(toks[0])) + na = oneOf("N/A NA").setParseAction(replaceWith(math.nan)) + term = na | num + + OneOrMore(term).parseString("324 234 N/A 234") # -> [324, 234, nan, 234] + """ + return lambda s,l,t: [replStr] + +def removeQuotes(s,l,t): + """Helper parse action for removing quotation marks from parsed + quoted strings. + + Example:: + + # by default, quotation marks are included in parsed results + quotedString.parseString("'Now is the Winter of our Discontent'") # -> ["'Now is the Winter of our Discontent'"] + + # use removeQuotes to strip quotation marks from parsed results + quotedString.setParseAction(removeQuotes) + quotedString.parseString("'Now is the Winter of our Discontent'") # -> ["Now is the Winter of our Discontent"] + """ + return t[0][1:-1] + +def tokenMap(func, *args): + """Helper to define a parse action by mapping a function to all + elements of a ParseResults list. If any additional args are passed, + they are forwarded to the given function as additional arguments + after the token, as in + ``hex_integer = Word(hexnums).setParseAction(tokenMap(int, 16))``, + which will convert the parsed data to an integer using base 16. + + Example (compare the last to example in :class:`ParserElement.transformString`:: + + hex_ints = OneOrMore(Word(hexnums)).setParseAction(tokenMap(int, 16)) + hex_ints.runTests(''' + 00 11 22 aa FF 0a 0d 1a + ''') + + upperword = Word(alphas).setParseAction(tokenMap(str.upper)) + OneOrMore(upperword).runTests(''' + my kingdom for a horse + ''') + + wd = Word(alphas).setParseAction(tokenMap(str.title)) + OneOrMore(wd).setParseAction(' '.join).runTests(''' + now is the winter of our discontent made glorious summer by this sun of york + ''') + + prints:: + + 00 11 22 aa FF 0a 0d 1a + [0, 17, 34, 170, 255, 10, 13, 26] + + my kingdom for a horse + ['MY', 'KINGDOM', 'FOR', 'A', 'HORSE'] + + now is the winter of our discontent made glorious summer by this sun of york + ['Now Is The Winter Of Our Discontent Made Glorious Summer By This Sun Of York'] + """ + def pa(s,l,t): + return [func(tokn, *args) for tokn in t] + + try: + func_name = getattr(func, '__name__', + getattr(func, '__class__').__name__) + except Exception: + func_name = str(func) + pa.__name__ = func_name + + return pa + +upcaseTokens = tokenMap(lambda t: _ustr(t).upper()) +"""(Deprecated) Helper parse action to convert tokens to upper case. +Deprecated in favor of :class:`pyparsing_common.upcaseTokens`""" + +downcaseTokens = tokenMap(lambda t: _ustr(t).lower()) +"""(Deprecated) Helper parse action to convert tokens to lower case. +Deprecated in favor of :class:`pyparsing_common.downcaseTokens`""" + +def _makeTags(tagStr, xml, + suppress_LT=Suppress("<"), + suppress_GT=Suppress(">")): + """Internal helper to construct opening and closing tag expressions, given a tag name""" + if isinstance(tagStr,basestring): + resname = tagStr + tagStr = Keyword(tagStr, caseless=not xml) + else: + resname = tagStr.name + + tagAttrName = Word(alphas,alphanums+"_-:") + if (xml): + tagAttrValue = dblQuotedString.copy().setParseAction( removeQuotes ) + openTag = (suppress_LT + + tagStr("tag") + + Dict(ZeroOrMore(Group(tagAttrName + Suppress("=") + tagAttrValue ))) + + Optional("/", default=[False])("empty").setParseAction(lambda s,l,t:t[0]=='/') + + suppress_GT) + else: + tagAttrValue = quotedString.copy().setParseAction( removeQuotes ) | Word(printables, excludeChars=">") + openTag = (suppress_LT + + tagStr("tag") + + Dict(ZeroOrMore(Group(tagAttrName.setParseAction(downcaseTokens) + + Optional(Suppress("=") + tagAttrValue)))) + + Optional("/",default=[False])("empty").setParseAction(lambda s,l,t:t[0]=='/') + + suppress_GT) + closeTag = Combine(_L("</") + tagStr + ">", adjacent=False) + + openTag.setName("<%s>" % resname) + # add start<tagname> results name in parse action now that ungrouped names are not reported at two levels + openTag.addParseAction(lambda t: t.__setitem__("start"+"".join(resname.replace(":"," ").title().split()), t.copy())) + closeTag = closeTag("end"+"".join(resname.replace(":"," ").title().split())).setName("</%s>" % resname) + openTag.tag = resname + closeTag.tag = resname + openTag.tag_body = SkipTo(closeTag()) + return openTag, closeTag + +def makeHTMLTags(tagStr): + """Helper to construct opening and closing tag expressions for HTML, + given a tag name. Matches tags in either upper or lower case, + attributes with namespaces and with quoted or unquoted values. + + Example:: + + text = '<td>More info at the <a href="https://github.com/pyparsing/pyparsing/wiki">pyparsing</a> wiki page</td>' + # makeHTMLTags returns pyparsing expressions for the opening and + # closing tags as a 2-tuple + a,a_end = makeHTMLTags("A") + link_expr = a + SkipTo(a_end)("link_text") + a_end + + for link in link_expr.searchString(text): + # attributes in the <A> tag (like "href" shown here) are + # also accessible as named results + print(link.link_text, '->', link.href) + + prints:: + + pyparsing -> https://github.com/pyparsing/pyparsing/wiki + """ + return _makeTags( tagStr, False ) + +def makeXMLTags(tagStr): + """Helper to construct opening and closing tag expressions for XML, + given a tag name. Matches tags only in the given upper/lower case. + + Example: similar to :class:`makeHTMLTags` + """ + return _makeTags( tagStr, True ) + +def withAttribute(*args,**attrDict): + """Helper to create a validating parse action to be used with start + tags created with :class:`makeXMLTags` or + :class:`makeHTMLTags`. Use ``withAttribute`` to qualify + a starting tag with a required attribute value, to avoid false + matches on common tags such as ``<TD>`` or ``<DIV>``. + + Call ``withAttribute`` with a series of attribute names and + values. Specify the list of filter attributes names and values as: + + - keyword arguments, as in ``(align="right")``, or + - as an explicit dict with ``**`` operator, when an attribute + name is also a Python reserved word, as in ``**{"class":"Customer", "align":"right"}`` + - a list of name-value tuples, as in ``(("ns1:class", "Customer"), ("ns2:align","right"))`` + + For attribute names with a namespace prefix, you must use the second + form. Attribute names are matched insensitive to upper/lower case. + + If just testing for ``class`` (with or without a namespace), use + :class:`withClass`. + + To verify that the attribute exists, but without specifying a value, + pass ``withAttribute.ANY_VALUE`` as the value. + + Example:: + + html = ''' + <div> + Some text + <div type="grid">1 4 0 1 0</div> + <div type="graph">1,3 2,3 1,1</div> + <div>this has no type</div> + </div> + + ''' + div,div_end = makeHTMLTags("div") + + # only match div tag having a type attribute with value "grid" + div_grid = div().setParseAction(withAttribute(type="grid")) + grid_expr = div_grid + SkipTo(div | div_end)("body") + for grid_header in grid_expr.searchString(html): + print(grid_header.body) + + # construct a match with any div tag having a type attribute, regardless of the value + div_any_type = div().setParseAction(withAttribute(type=withAttribute.ANY_VALUE)) + div_expr = div_any_type + SkipTo(div | div_end)("body") + for div_header in div_expr.searchString(html): + print(div_header.body) + + prints:: + + 1 4 0 1 0 + + 1 4 0 1 0 + 1,3 2,3 1,1 + """ + if args: + attrs = args[:] + else: + attrs = attrDict.items() + attrs = [(k,v) for k,v in attrs] + def pa(s,l,tokens): + for attrName,attrValue in attrs: + if attrName not in tokens: + raise ParseException(s,l,"no matching attribute " + attrName) + if attrValue != withAttribute.ANY_VALUE and tokens[attrName] != attrValue: + raise ParseException(s,l,"attribute '%s' has value '%s', must be '%s'" % + (attrName, tokens[attrName], attrValue)) + return pa +withAttribute.ANY_VALUE = object() + +def withClass(classname, namespace=''): + """Simplified version of :class:`withAttribute` when + matching on a div class - made difficult because ``class`` is + a reserved word in Python. + + Example:: + + html = ''' + <div> + Some text + <div class="grid">1 4 0 1 0</div> + <div class="graph">1,3 2,3 1,1</div> + <div>this <div> has no class</div> + </div> + + ''' + div,div_end = makeHTMLTags("div") + div_grid = div().setParseAction(withClass("grid")) + + grid_expr = div_grid + SkipTo(div | div_end)("body") + for grid_header in grid_expr.searchString(html): + print(grid_header.body) + + div_any_type = div().setParseAction(withClass(withAttribute.ANY_VALUE)) + div_expr = div_any_type + SkipTo(div | div_end)("body") + for div_header in div_expr.searchString(html): + print(div_header.body) + + prints:: + + 1 4 0 1 0 + + 1 4 0 1 0 + 1,3 2,3 1,1 + """ + classattr = "%s:class" % namespace if namespace else "class" + return withAttribute(**{classattr : classname}) + +opAssoc = SimpleNamespace() +opAssoc.LEFT = object() +opAssoc.RIGHT = object() + +def infixNotation( baseExpr, opList, lpar=Suppress('('), rpar=Suppress(')') ): + """Helper method for constructing grammars of expressions made up of + operators working in a precedence hierarchy. Operators may be unary + or binary, left- or right-associative. Parse actions can also be + attached to operator expressions. The generated parser will also + recognize the use of parentheses to override operator precedences + (see example below). + + Note: if you define a deep operator list, you may see performance + issues when using infixNotation. See + :class:`ParserElement.enablePackrat` for a mechanism to potentially + improve your parser performance. + + Parameters: + - baseExpr - expression representing the most basic element for the + nested + - opList - list of tuples, one for each operator precedence level + in the expression grammar; each tuple is of the form ``(opExpr, + numTerms, rightLeftAssoc, parseAction)``, where: + + - opExpr is the pyparsing expression for the operator; may also + be a string, which will be converted to a Literal; if numTerms + is 3, opExpr is a tuple of two expressions, for the two + operators separating the 3 terms + - numTerms is the number of terms for this operator (must be 1, + 2, or 3) + - rightLeftAssoc is the indicator whether the operator is right + or left associative, using the pyparsing-defined constants + ``opAssoc.RIGHT`` and ``opAssoc.LEFT``. + - parseAction is the parse action to be associated with + expressions matching this operator expression (the parse action + tuple member may be omitted); if the parse action is passed + a tuple or list of functions, this is equivalent to calling + ``setParseAction(*fn)`` + (:class:`ParserElement.setParseAction`) + - lpar - expression for matching left-parentheses + (default= ``Suppress('(')``) + - rpar - expression for matching right-parentheses + (default= ``Suppress(')')``) + + Example:: + + # simple example of four-function arithmetic with ints and + # variable names + integer = pyparsing_common.signed_integer + varname = pyparsing_common.identifier + + arith_expr = infixNotation(integer | varname, + [ + ('-', 1, opAssoc.RIGHT), + (oneOf('* /'), 2, opAssoc.LEFT), + (oneOf('+ -'), 2, opAssoc.LEFT), + ]) + + arith_expr.runTests(''' + 5+3*6 + (5+3)*6 + -2--11 + ''', fullDump=False) + + prints:: + + 5+3*6 + [[5, '+', [3, '*', 6]]] + + (5+3)*6 + [[[5, '+', 3], '*', 6]] + + -2--11 + [[['-', 2], '-', ['-', 11]]] + """ + # captive version of FollowedBy that does not do parse actions or capture results names + class _FB(FollowedBy): + def parseImpl(self, instring, loc, doActions=True): + self.expr.tryParse(instring, loc) + return loc, [] + + ret = Forward() + lastExpr = baseExpr | ( lpar + ret + rpar ) + for i,operDef in enumerate(opList): + opExpr,arity,rightLeftAssoc,pa = (operDef + (None,))[:4] + termName = "%s term" % opExpr if arity < 3 else "%s%s term" % opExpr + if arity == 3: + if opExpr is None or len(opExpr) != 2: + raise ValueError( + "if numterms=3, opExpr must be a tuple or list of two expressions") + opExpr1, opExpr2 = opExpr + thisExpr = Forward().setName(termName) + if rightLeftAssoc == opAssoc.LEFT: + if arity == 1: + matchExpr = _FB(lastExpr + opExpr) + Group( lastExpr + OneOrMore( opExpr ) ) + elif arity == 2: + if opExpr is not None: + matchExpr = _FB(lastExpr + opExpr + lastExpr) + Group( lastExpr + OneOrMore( opExpr + lastExpr ) ) + else: + matchExpr = _FB(lastExpr+lastExpr) + Group( lastExpr + OneOrMore(lastExpr) ) + elif arity == 3: + matchExpr = _FB(lastExpr + opExpr1 + lastExpr + opExpr2 + lastExpr) + \ + Group( lastExpr + opExpr1 + lastExpr + opExpr2 + lastExpr ) + else: + raise ValueError("operator must be unary (1), binary (2), or ternary (3)") + elif rightLeftAssoc == opAssoc.RIGHT: + if arity == 1: + # try to avoid LR with this extra test + if not isinstance(opExpr, Optional): + opExpr = Optional(opExpr) + matchExpr = _FB(opExpr.expr + thisExpr) + Group( opExpr + thisExpr ) + elif arity == 2: + if opExpr is not None: + matchExpr = _FB(lastExpr + opExpr + thisExpr) + Group( lastExpr + OneOrMore( opExpr + thisExpr ) ) + else: + matchExpr = _FB(lastExpr + thisExpr) + Group( lastExpr + OneOrMore( thisExpr ) ) + elif arity == 3: + matchExpr = _FB(lastExpr + opExpr1 + thisExpr + opExpr2 + thisExpr) + \ + Group( lastExpr + opExpr1 + thisExpr + opExpr2 + thisExpr ) + else: + raise ValueError("operator must be unary (1), binary (2), or ternary (3)") + else: + raise ValueError("operator must indicate right or left associativity") + if pa: + if isinstance(pa, (tuple, list)): + matchExpr.setParseAction(*pa) + else: + matchExpr.setParseAction(pa) + thisExpr <<= ( matchExpr.setName(termName) | lastExpr ) + lastExpr = thisExpr + ret <<= lastExpr + return ret + +operatorPrecedence = infixNotation +"""(Deprecated) Former name of :class:`infixNotation`, will be +dropped in a future release.""" + +dblQuotedString = Combine(Regex(r'"(?:[^"\n\r\\]|(?:"")|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*')+'"').setName("string enclosed in double quotes") +sglQuotedString = Combine(Regex(r"'(?:[^'\n\r\\]|(?:'')|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*")+"'").setName("string enclosed in single quotes") +quotedString = Combine(Regex(r'"(?:[^"\n\r\\]|(?:"")|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*')+'"'| + Regex(r"'(?:[^'\n\r\\]|(?:'')|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*")+"'").setName("quotedString using single or double quotes") +unicodeString = Combine(_L('u') + quotedString.copy()).setName("unicode string literal") + +def nestedExpr(opener="(", closer=")", content=None, ignoreExpr=quotedString.copy()): + """Helper method for defining nested lists enclosed in opening and + closing delimiters ("(" and ")" are the default). + + Parameters: + - opener - opening character for a nested list + (default= ``"("``); can also be a pyparsing expression + - closer - closing character for a nested list + (default= ``")"``); can also be a pyparsing expression + - content - expression for items within the nested lists + (default= ``None``) + - ignoreExpr - expression for ignoring opening and closing + delimiters (default= :class:`quotedString`) + + If an expression is not provided for the content argument, the + nested expression will capture all whitespace-delimited content + between delimiters as a list of separate values. + + Use the ``ignoreExpr`` argument to define expressions that may + contain opening or closing characters that should not be treated as + opening or closing characters for nesting, such as quotedString or + a comment expression. Specify multiple expressions using an + :class:`Or` or :class:`MatchFirst`. The default is + :class:`quotedString`, but if no expressions are to be ignored, then + pass ``None`` for this argument. + + Example:: + + data_type = oneOf("void int short long char float double") + decl_data_type = Combine(data_type + Optional(Word('*'))) + ident = Word(alphas+'_', alphanums+'_') + number = pyparsing_common.number + arg = Group(decl_data_type + ident) + LPAR,RPAR = map(Suppress, "()") + + code_body = nestedExpr('{', '}', ignoreExpr=(quotedString | cStyleComment)) + + c_function = (decl_data_type("type") + + ident("name") + + LPAR + Optional(delimitedList(arg), [])("args") + RPAR + + code_body("body")) + c_function.ignore(cStyleComment) + + source_code = ''' + int is_odd(int x) { + return (x%2); + } + + int dec_to_hex(char hchar) { + if (hchar >= '0' && hchar <= '9') { + return (ord(hchar)-ord('0')); + } else { + return (10+ord(hchar)-ord('A')); + } + } + ''' + for func in c_function.searchString(source_code): + print("%(name)s (%(type)s) args: %(args)s" % func) + + + prints:: + + is_odd (int) args: [['int', 'x']] + dec_to_hex (int) args: [['char', 'hchar']] + """ + if opener == closer: + raise ValueError("opening and closing strings cannot be the same") + if content is None: + if isinstance(opener,basestring) and isinstance(closer,basestring): + if len(opener) == 1 and len(closer)==1: + if ignoreExpr is not None: + content = (Combine(OneOrMore(~ignoreExpr + + CharsNotIn(opener+closer+ParserElement.DEFAULT_WHITE_CHARS,exact=1)) + ).setParseAction(lambda t:t[0].strip())) + else: + content = (empty.copy()+CharsNotIn(opener+closer+ParserElement.DEFAULT_WHITE_CHARS + ).setParseAction(lambda t:t[0].strip())) + else: + if ignoreExpr is not None: + content = (Combine(OneOrMore(~ignoreExpr + + ~Literal(opener) + ~Literal(closer) + + CharsNotIn(ParserElement.DEFAULT_WHITE_CHARS,exact=1)) + ).setParseAction(lambda t:t[0].strip())) + else: + content = (Combine(OneOrMore(~Literal(opener) + ~Literal(closer) + + CharsNotIn(ParserElement.DEFAULT_WHITE_CHARS,exact=1)) + ).setParseAction(lambda t:t[0].strip())) + else: + raise ValueError("opening and closing arguments must be strings if no content expression is given") + ret = Forward() + if ignoreExpr is not None: + ret <<= Group( Suppress(opener) + ZeroOrMore( ignoreExpr | ret | content ) + Suppress(closer) ) + else: + ret <<= Group( Suppress(opener) + ZeroOrMore( ret | content ) + Suppress(closer) ) + ret.setName('nested %s%s expression' % (opener,closer)) + return ret + +def indentedBlock(blockStatementExpr, indentStack, indent=True): + """Helper method for defining space-delimited indentation blocks, + such as those used to define block statements in Python source code. + + Parameters: + + - blockStatementExpr - expression defining syntax of statement that + is repeated within the indented block + - indentStack - list created by caller to manage indentation stack + (multiple statementWithIndentedBlock expressions within a single + grammar should share a common indentStack) + - indent - boolean indicating whether block must be indented beyond + the the current level; set to False for block of left-most + statements (default= ``True``) + + A valid block must contain at least one ``blockStatement``. + + Example:: + + data = ''' + def A(z): + A1 + B = 100 + G = A2 + A2 + A3 + B + def BB(a,b,c): + BB1 + def BBA(): + bba1 + bba2 + bba3 + C + D + def spam(x,y): + def eggs(z): + pass + ''' + + + indentStack = [1] + stmt = Forward() + + identifier = Word(alphas, alphanums) + funcDecl = ("def" + identifier + Group( "(" + Optional( delimitedList(identifier) ) + ")" ) + ":") + func_body = indentedBlock(stmt, indentStack) + funcDef = Group( funcDecl + func_body ) + + rvalue = Forward() + funcCall = Group(identifier + "(" + Optional(delimitedList(rvalue)) + ")") + rvalue << (funcCall | identifier | Word(nums)) + assignment = Group(identifier + "=" + rvalue) + stmt << ( funcDef | assignment | identifier ) + + module_body = OneOrMore(stmt) + + parseTree = module_body.parseString(data) + parseTree.pprint() + + prints:: + + [['def', + 'A', + ['(', 'z', ')'], + ':', + [['A1'], [['B', '=', '100']], [['G', '=', 'A2']], ['A2'], ['A3']]], + 'B', + ['def', + 'BB', + ['(', 'a', 'b', 'c', ')'], + ':', + [['BB1'], [['def', 'BBA', ['(', ')'], ':', [['bba1'], ['bba2'], ['bba3']]]]]], + 'C', + 'D', + ['def', + 'spam', + ['(', 'x', 'y', ')'], + ':', + [[['def', 'eggs', ['(', 'z', ')'], ':', [['pass']]]]]]] + """ + backup_stack = indentStack[:] + + def reset_stack(): + indentStack[:] = backup_stack + + def checkPeerIndent(s,l,t): + if l >= len(s): return + curCol = col(l,s) + if curCol != indentStack[-1]: + if curCol > indentStack[-1]: + raise ParseException(s,l,"illegal nesting") + raise ParseException(s,l,"not a peer entry") + + def checkSubIndent(s,l,t): + curCol = col(l,s) + if curCol > indentStack[-1]: + indentStack.append( curCol ) + else: + raise ParseException(s,l,"not a subentry") + + def checkUnindent(s,l,t): + if l >= len(s): return + curCol = col(l,s) + if not(indentStack and curCol < indentStack[-1] and curCol <= indentStack[-2]): + raise ParseException(s,l,"not an unindent") + indentStack.pop() + + NL = OneOrMore(LineEnd().setWhitespaceChars("\t ").suppress()) + INDENT = (Empty() + Empty().setParseAction(checkSubIndent)).setName('INDENT') + PEER = Empty().setParseAction(checkPeerIndent).setName('') + UNDENT = Empty().setParseAction(checkUnindent).setName('UNINDENT') + if indent: + smExpr = Group( Optional(NL) + + #~ FollowedBy(blockStatementExpr) + + INDENT + (OneOrMore( PEER + Group(blockStatementExpr) + Optional(NL) )) + UNDENT) + else: + smExpr = Group( Optional(NL) + + (OneOrMore( PEER + Group(blockStatementExpr) + Optional(NL) )) ) + smExpr.setFailAction(lambda a, b, c, d: reset_stack()) + blockStatementExpr.ignore(_bslash + LineEnd()) + return smExpr.setName('indented block') + +alphas8bit = srange(r"[\0xc0-\0xd6\0xd8-\0xf6\0xf8-\0xff]") +punc8bit = srange(r"[\0xa1-\0xbf\0xd7\0xf7]") + +anyOpenTag,anyCloseTag = makeHTMLTags(Word(alphas,alphanums+"_:").setName('any tag')) +_htmlEntityMap = dict(zip("gt lt amp nbsp quot apos".split(),'><& "\'')) +commonHTMLEntity = Regex('&(?P<entity>' + '|'.join(_htmlEntityMap.keys()) +");").setName("common HTML entity") +def replaceHTMLEntity(t): + """Helper parser action to replace common HTML entities with their special characters""" + return _htmlEntityMap.get(t.entity) + +# it's easy to get these comment structures wrong - they're very common, so may as well make them available +cStyleComment = Combine(Regex(r"/\*(?:[^*]|\*(?!/))*") + '*/').setName("C style comment") +"Comment of the form ``/* ... */``" + +htmlComment = Regex(r"<!--[\s\S]*?-->").setName("HTML comment") +"Comment of the form ``<!-- ... -->``" + +restOfLine = Regex(r".*").leaveWhitespace().setName("rest of line") +dblSlashComment = Regex(r"//(?:\\\n|[^\n])*").setName("// comment") +"Comment of the form ``// ... (to end of line)``" + +cppStyleComment = Combine(Regex(r"/\*(?:[^*]|\*(?!/))*") + '*/'| dblSlashComment).setName("C++ style comment") +"Comment of either form :class:`cStyleComment` or :class:`dblSlashComment`" + +javaStyleComment = cppStyleComment +"Same as :class:`cppStyleComment`" + +pythonStyleComment = Regex(r"#.*").setName("Python style comment") +"Comment of the form ``# ... (to end of line)``" + +_commasepitem = Combine(OneOrMore(Word(printables, excludeChars=',') + + Optional( Word(" \t") + + ~Literal(",") + ~LineEnd() ) ) ).streamline().setName("commaItem") +commaSeparatedList = delimitedList( Optional( quotedString.copy() | _commasepitem, default="") ).setName("commaSeparatedList") +"""(Deprecated) Predefined expression of 1 or more printable words or +quoted strings, separated by commas. + +This expression is deprecated in favor of :class:`pyparsing_common.comma_separated_list`. +""" + +# some other useful expressions - using lower-case class name since we are really using this as a namespace +class pyparsing_common: + """Here are some common low-level expressions that may be useful in + jump-starting parser development: + + - numeric forms (:class:`integers<integer>`, :class:`reals<real>`, + :class:`scientific notation<sci_real>`) + - common :class:`programming identifiers<identifier>` + - network addresses (:class:`MAC<mac_address>`, + :class:`IPv4<ipv4_address>`, :class:`IPv6<ipv6_address>`) + - ISO8601 :class:`dates<iso8601_date>` and + :class:`datetime<iso8601_datetime>` + - :class:`UUID<uuid>` + - :class:`comma-separated list<comma_separated_list>` + + Parse actions: + + - :class:`convertToInteger` + - :class:`convertToFloat` + - :class:`convertToDate` + - :class:`convertToDatetime` + - :class:`stripHTMLTags` + - :class:`upcaseTokens` + - :class:`downcaseTokens` + + Example:: + + pyparsing_common.number.runTests(''' + # any int or real number, returned as the appropriate type + 100 + -100 + +100 + 3.14159 + 6.02e23 + 1e-12 + ''') + + pyparsing_common.fnumber.runTests(''' + # any int or real number, returned as float + 100 + -100 + +100 + 3.14159 + 6.02e23 + 1e-12 + ''') + + pyparsing_common.hex_integer.runTests(''' + # hex numbers + 100 + FF + ''') + + pyparsing_common.fraction.runTests(''' + # fractions + 1/2 + -3/4 + ''') + + pyparsing_common.mixed_integer.runTests(''' + # mixed fractions + 1 + 1/2 + -3/4 + 1-3/4 + ''') + + import uuid + pyparsing_common.uuid.setParseAction(tokenMap(uuid.UUID)) + pyparsing_common.uuid.runTests(''' + # uuid + 12345678-1234-5678-1234-567812345678 + ''') + + prints:: + + # any int or real number, returned as the appropriate type + 100 + [100] + + -100 + [-100] + + +100 + [100] + + 3.14159 + [3.14159] + + 6.02e23 + [6.02e+23] + + 1e-12 + [1e-12] + + # any int or real number, returned as float + 100 + [100.0] + + -100 + [-100.0] + + +100 + [100.0] + + 3.14159 + [3.14159] + + 6.02e23 + [6.02e+23] + + 1e-12 + [1e-12] + + # hex numbers + 100 + [256] + + FF + [255] + + # fractions + 1/2 + [0.5] + + -3/4 + [-0.75] + + # mixed fractions + 1 + [1] + + 1/2 + [0.5] + + -3/4 + [-0.75] + + 1-3/4 + [1.75] + + # uuid + 12345678-1234-5678-1234-567812345678 + [UUID('12345678-1234-5678-1234-567812345678')] + """ + + convertToInteger = tokenMap(int) + """ + Parse action for converting parsed integers to Python int + """ + + convertToFloat = tokenMap(float) + """ + Parse action for converting parsed numbers to Python float + """ + + integer = Word(nums).setName("integer").setParseAction(convertToInteger) + """expression that parses an unsigned integer, returns an int""" + + hex_integer = Word(hexnums).setName("hex integer").setParseAction(tokenMap(int,16)) + """expression that parses a hexadecimal integer, returns an int""" + + signed_integer = Regex(r'[+-]?\d+').setName("signed integer").setParseAction(convertToInteger) + """expression that parses an integer with optional leading sign, returns an int""" + + fraction = (signed_integer().setParseAction(convertToFloat) + '/' + signed_integer().setParseAction(convertToFloat)).setName("fraction") + """fractional expression of an integer divided by an integer, returns a float""" + fraction.addParseAction(lambda t: t[0]/t[-1]) + + mixed_integer = (fraction | signed_integer + Optional(Optional('-').suppress() + fraction)).setName("fraction or mixed integer-fraction") + """mixed integer of the form 'integer - fraction', with optional leading integer, returns float""" + mixed_integer.addParseAction(sum) + + real = Regex(r'[+-]?\d+\.\d*').setName("real number").setParseAction(convertToFloat) + """expression that parses a floating point number and returns a float""" + + sci_real = Regex(r'[+-]?\d+([eE][+-]?\d+|\.\d*([eE][+-]?\d+)?)').setName("real number with scientific notation").setParseAction(convertToFloat) + """expression that parses a floating point number with optional + scientific notation and returns a float""" + + # streamlining this expression makes the docs nicer-looking + number = (sci_real | real | signed_integer).streamline() + """any numeric expression, returns the corresponding Python type""" + + fnumber = Regex(r'[+-]?\d+\.?\d*([eE][+-]?\d+)?').setName("fnumber").setParseAction(convertToFloat) + """any int or real number, returned as float""" + + identifier = Word(alphas+'_', alphanums+'_').setName("identifier") + """typical code identifier (leading alpha or '_', followed by 0 or more alphas, nums, or '_')""" + + ipv4_address = Regex(r'(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})(\.(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})){3}').setName("IPv4 address") + "IPv4 address (``0.0.0.0 - 255.255.255.255``)" + + _ipv6_part = Regex(r'[0-9a-fA-F]{1,4}').setName("hex_integer") + _full_ipv6_address = (_ipv6_part + (':' + _ipv6_part)*7).setName("full IPv6 address") + _short_ipv6_address = (Optional(_ipv6_part + (':' + _ipv6_part)*(0,6)) + "::" + Optional(_ipv6_part + (':' + _ipv6_part)*(0,6))).setName("short IPv6 address") + _short_ipv6_address.addCondition(lambda t: sum(1 for tt in t if pyparsing_common._ipv6_part.matches(tt)) < 8) + _mixed_ipv6_address = ("::ffff:" + ipv4_address).setName("mixed IPv6 address") + ipv6_address = Combine((_full_ipv6_address | _mixed_ipv6_address | _short_ipv6_address).setName("IPv6 address")).setName("IPv6 address") + "IPv6 address (long, short, or mixed form)" + + mac_address = Regex(r'[0-9a-fA-F]{2}([:.-])[0-9a-fA-F]{2}(?:\1[0-9a-fA-F]{2}){4}').setName("MAC address") + "MAC address xx:xx:xx:xx:xx (may also have '-' or '.' delimiters)" + + @staticmethod + def convertToDate(fmt="%Y-%m-%d"): + """ + Helper to create a parse action for converting parsed date string to Python datetime.date + + Params - + - fmt - format to be passed to datetime.strptime (default= ``"%Y-%m-%d"``) + + Example:: + + date_expr = pyparsing_common.iso8601_date.copy() + date_expr.setParseAction(pyparsing_common.convertToDate()) + print(date_expr.parseString("1999-12-31")) + + prints:: + + [datetime.date(1999, 12, 31)] + """ + def cvt_fn(s,l,t): + try: + return datetime.strptime(t[0], fmt).date() + except ValueError as ve: + raise ParseException(s, l, str(ve)) + return cvt_fn + + @staticmethod + def convertToDatetime(fmt="%Y-%m-%dT%H:%M:%S.%f"): + """Helper to create a parse action for converting parsed + datetime string to Python datetime.datetime + + Params - + - fmt - format to be passed to datetime.strptime (default= ``"%Y-%m-%dT%H:%M:%S.%f"``) + + Example:: + + dt_expr = pyparsing_common.iso8601_datetime.copy() + dt_expr.setParseAction(pyparsing_common.convertToDatetime()) + print(dt_expr.parseString("1999-12-31T23:59:59.999")) + + prints:: + + [datetime.datetime(1999, 12, 31, 23, 59, 59, 999000)] + """ + def cvt_fn(s,l,t): + try: + return datetime.strptime(t[0], fmt) + except ValueError as ve: + raise ParseException(s, l, str(ve)) + return cvt_fn + + iso8601_date = Regex(r'(?P<year>\d{4})(?:-(?P<month>\d\d)(?:-(?P<day>\d\d))?)?').setName("ISO8601 date") + "ISO8601 date (``yyyy-mm-dd``)" + + iso8601_datetime = Regex(r'(?P<year>\d{4})-(?P<month>\d\d)-(?P<day>\d\d)[T ](?P<hour>\d\d):(?P<minute>\d\d)(:(?P<second>\d\d(\.\d*)?)?)?(?P<tz>Z|[+-]\d\d:?\d\d)?').setName("ISO8601 datetime") + "ISO8601 datetime (``yyyy-mm-ddThh:mm:ss.s(Z|+-00:00)``) - trailing seconds, milliseconds, and timezone optional; accepts separating ``'T'`` or ``' '``" + + uuid = Regex(r'[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}').setName("UUID") + "UUID (``xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx``)" + + _html_stripper = anyOpenTag.suppress() | anyCloseTag.suppress() + @staticmethod + def stripHTMLTags(s, l, tokens): + """Parse action to remove HTML tags from web page HTML source + + Example:: + + # strip HTML links from normal text + text = '<td>More info at the <a href="https://github.com/pyparsing/pyparsing/wiki">pyparsing</a> wiki page</td>' + td,td_end = makeHTMLTags("TD") + table_text = td + SkipTo(td_end).setParseAction(pyparsing_common.stripHTMLTags)("body") + td_end + print(table_text.parseString(text).body) + + Prints:: + + More info at the pyparsing wiki page + """ + return pyparsing_common._html_stripper.transformString(tokens[0]) + + _commasepitem = Combine(OneOrMore(~Literal(",") + ~LineEnd() + Word(printables, excludeChars=',') + + Optional( White(" \t") ) ) ).streamline().setName("commaItem") + comma_separated_list = delimitedList( Optional( quotedString.copy() | _commasepitem, default="") ).setName("comma separated list") + """Predefined expression of 1 or more printable words or quoted strings, separated by commas.""" + + upcaseTokens = staticmethod(tokenMap(lambda t: _ustr(t).upper())) + """Parse action to convert tokens to upper case.""" + + downcaseTokens = staticmethod(tokenMap(lambda t: _ustr(t).lower())) + """Parse action to convert tokens to lower case.""" + + +class _lazyclassproperty(object): + def __init__(self, fn): + self.fn = fn + self.__doc__ = fn.__doc__ + self.__name__ = fn.__name__ + + def __get__(self, obj, cls): + if cls is None: + cls = type(obj) + if not hasattr(cls, '_intern') or any(cls._intern is getattr(superclass, '_intern', []) for superclass in cls.__mro__[1:]): + cls._intern = {} + attrname = self.fn.__name__ + if attrname not in cls._intern: + cls._intern[attrname] = self.fn(cls) + return cls._intern[attrname] + + +class unicode_set(object): + """ + A set of Unicode characters, for language-specific strings for + ``alphas``, ``nums``, ``alphanums``, and ``printables``. + A unicode_set is defined by a list of ranges in the Unicode character + set, in a class attribute ``_ranges``, such as:: + + _ranges = [(0x0020, 0x007e), (0x00a0, 0x00ff),] + + A unicode set can also be defined using multiple inheritance of other unicode sets:: + + class CJK(Chinese, Japanese, Korean): + pass + """ + _ranges = [] + + @classmethod + def _get_chars_for_ranges(cls): + ret = [] + for cc in cls.__mro__: + if cc is unicode_set: + break + for rr in cc._ranges: + ret.extend(range(rr[0], rr[-1]+1)) + return [unichr(c) for c in sorted(set(ret))] + + @_lazyclassproperty + def printables(cls): + "all non-whitespace characters in this range" + return u''.join(filterfalse(unicode.isspace, cls._get_chars_for_ranges())) + + @_lazyclassproperty + def alphas(cls): + "all alphabetic characters in this range" + return u''.join(filter(unicode.isalpha, cls._get_chars_for_ranges())) + + @_lazyclassproperty + def nums(cls): + "all numeric digit characters in this range" + return u''.join(filter(unicode.isdigit, cls._get_chars_for_ranges())) + + @_lazyclassproperty + def alphanums(cls): + "all alphanumeric characters in this range" + return cls.alphas + cls.nums + + +class pyparsing_unicode(unicode_set): + """ + A namespace class for defining common language unicode_sets. + """ + _ranges = [(32, sys.maxunicode)] + + class Latin1(unicode_set): + "Unicode set for Latin-1 Unicode Character Range" + _ranges = [(0x0020, 0x007e), (0x00a0, 0x00ff),] + + class LatinA(unicode_set): + "Unicode set for Latin-A Unicode Character Range" + _ranges = [(0x0100, 0x017f),] + + class LatinB(unicode_set): + "Unicode set for Latin-B Unicode Character Range" + _ranges = [(0x0180, 0x024f),] + + class Greek(unicode_set): + "Unicode set for Greek Unicode Character Ranges" + _ranges = [ + (0x0370, 0x03ff), (0x1f00, 0x1f15), (0x1f18, 0x1f1d), (0x1f20, 0x1f45), (0x1f48, 0x1f4d), + (0x1f50, 0x1f57), (0x1f59,), (0x1f5b,), (0x1f5d,), (0x1f5f, 0x1f7d), (0x1f80, 0x1fb4), (0x1fb6, 0x1fc4), + (0x1fc6, 0x1fd3), (0x1fd6, 0x1fdb), (0x1fdd, 0x1fef), (0x1ff2, 0x1ff4), (0x1ff6, 0x1ffe), + ] + + class Cyrillic(unicode_set): + "Unicode set for Cyrillic Unicode Character Range" + _ranges = [(0x0400, 0x04ff)] + + class Chinese(unicode_set): + "Unicode set for Chinese Unicode Character Range" + _ranges = [(0x4e00, 0x9fff), (0x3000, 0x303f), ] + + class Japanese(unicode_set): + "Unicode set for Japanese Unicode Character Range, combining Kanji, Hiragana, and Katakana ranges" + _ranges = [ ] + + class Kanji(unicode_set): + "Unicode set for Kanji Unicode Character Range" + _ranges = [(0x4E00, 0x9Fbf), (0x3000, 0x303f), ] + + class Hiragana(unicode_set): + "Unicode set for Hiragana Unicode Character Range" + _ranges = [(0x3040, 0x309f), ] + + class Katakana(unicode_set): + "Unicode set for Katakana Unicode Character Range" + _ranges = [(0x30a0, 0x30ff), ] + + class Korean(unicode_set): + "Unicode set for Korean Unicode Character Range" + _ranges = [(0xac00, 0xd7af), (0x1100, 0x11ff), (0x3130, 0x318f), (0xa960, 0xa97f), (0xd7b0, 0xd7ff), (0x3000, 0x303f), ] + + class CJK(Chinese, Japanese, Korean): + "Unicode set for combined Chinese, Japanese, and Korean (CJK) Unicode Character Range" + pass + + class Thai(unicode_set): + "Unicode set for Thai Unicode Character Range" + _ranges = [(0x0e01, 0x0e3a), (0x0e3f, 0x0e5b), ] + + class Arabic(unicode_set): + "Unicode set for Arabic Unicode Character Range" + _ranges = [(0x0600, 0x061b), (0x061e, 0x06ff), (0x0700, 0x077f), ] + + class Hebrew(unicode_set): + "Unicode set for Hebrew Unicode Character Range" + _ranges = [(0x0590, 0x05ff), ] + + class Devanagari(unicode_set): + "Unicode set for Devanagari Unicode Character Range" + _ranges = [(0x0900, 0x097f), (0xa8e0, 0xa8ff)] + +pyparsing_unicode.Japanese._ranges = (pyparsing_unicode.Japanese.Kanji._ranges + + pyparsing_unicode.Japanese.Hiragana._ranges + + pyparsing_unicode.Japanese.Katakana._ranges) + +# define ranges in language character sets +if PY_3: + setattr(pyparsing_unicode, "العربية", pyparsing_unicode.Arabic) + setattr(pyparsing_unicode, "中文", pyparsing_unicode.Chinese) + setattr(pyparsing_unicode, "кириллица", pyparsing_unicode.Cyrillic) + setattr(pyparsing_unicode, "Ελληνικά", pyparsing_unicode.Greek) + setattr(pyparsing_unicode, "עִברִית", pyparsing_unicode.Hebrew) + setattr(pyparsing_unicode, "日本語", pyparsing_unicode.Japanese) + setattr(pyparsing_unicode.Japanese, "漢字", pyparsing_unicode.Japanese.Kanji) + setattr(pyparsing_unicode.Japanese, "カタカナ", pyparsing_unicode.Japanese.Katakana) + setattr(pyparsing_unicode.Japanese, "ひらがな", pyparsing_unicode.Japanese.Hiragana) + setattr(pyparsing_unicode, "한국어", pyparsing_unicode.Korean) + setattr(pyparsing_unicode, "ไทย", pyparsing_unicode.Thai) + setattr(pyparsing_unicode, "देवनागरी", pyparsing_unicode.Devanagari) + + +if __name__ == "__main__": + + selectToken = CaselessLiteral("select") + fromToken = CaselessLiteral("from") + + ident = Word(alphas, alphanums + "_$") + + columnName = delimitedList(ident, ".", combine=True).setParseAction(upcaseTokens) + columnNameList = Group(delimitedList(columnName)).setName("columns") + columnSpec = ('*' | columnNameList) + + tableName = delimitedList(ident, ".", combine=True).setParseAction(upcaseTokens) + tableNameList = Group(delimitedList(tableName)).setName("tables") + + simpleSQL = selectToken("command") + columnSpec("columns") + fromToken + tableNameList("tables") + + # demo runTests method, including embedded comments in test string + simpleSQL.runTests(""" + # '*' as column list and dotted table name + select * from SYS.XYZZY + + # caseless match on "SELECT", and casts back to "select" + SELECT * from XYZZY, ABC + + # list of column names, and mixed case SELECT keyword + Select AA,BB,CC from Sys.dual + + # multiple tables + Select A, B, C from Sys.dual, Table2 + + # invalid SELECT keyword - should fail + Xelect A, B, C from Sys.dual + + # incomplete command - should fail + Select + + # invalid column name - should fail + Select ^^^ frox Sys.dual + + """) + + pyparsing_common.number.runTests(""" + 100 + -100 + +100 + 3.14159 + 6.02e23 + 1e-12 + """) + + # any int or real number, returned as float + pyparsing_common.fnumber.runTests(""" + 100 + -100 + +100 + 3.14159 + 6.02e23 + 1e-12 + """) + + pyparsing_common.hex_integer.runTests(""" + 100 + FF + """) + + import uuid + pyparsing_common.uuid.setParseAction(tokenMap(uuid.UUID)) + pyparsing_common.uuid.runTests(""" + 12345678-1234-5678-1234-567812345678 + """) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pytoml/__init__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pytoml/__init__.py new file mode 100644 index 00000000..8ed060ff --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pytoml/__init__.py @@ -0,0 +1,4 @@ +from .core import TomlError +from .parser import load, loads +from .test import translate_to_test +from .writer import dump, dumps \ No newline at end of file diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pytoml/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pytoml/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0babcbdd76939120e48f084e8e7a6f9ed935f967 GIT binary patch literal 327 zcmX|6F;2uV5VR9Jmz;7EJR`+jPSBwfqM@aM$^uzAY>7yAY}O9wD&9lGgWOW_1uDEL zSZPKxJN9b#a<f@Ke(jz<2qE7Y|5apllMxP?6j9U=O9iE<3scxql$Hs$_|kA&iE7cz ztZXf6+lVH6eowmUhvpF-P0fR|<`%#~S0rZKpb|$8IXjOqOu-CM%jjg(A>tb~Tc0>` zxa-!5Jv-2Vo2AMR5HvuU4KVC5`~-Xn-(ie7tT0?<`XtbzM*6+#qxHQX{q{JIMs4@6 tFGsh(P}o`^-}Iy$^!^m{!o8H^G)5_R{*>y2b!s;H8czy1zoloirGK7jR8ar` literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pytoml/__pycache__/core.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pytoml/__pycache__/core.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..915473f293bf45e92baed59a95f2b45b8fb70072 GIT binary patch literal 890 zcmbVKO^Xvj5Url+$;`$?aPi>L1rIymCX2!zL}Wq4TMp_eC{1>{qchCc)=Y#=Ca3J5 z@!}8atN%g}tm<GGMKAVHuX?(>s$ae8r{nSP{nyEd9|GVT^oFGQC0TQy;5BH_;+D+7 z&YuhIy@l9MXy-6Inq87Lj|dFV8JK&TPTs=Y*S?nIr4ICfe4s;$kL=OAs>oj<R+t17 z#e@BT>?K(<A!s2J9dx4eI=_><K=2%tNB^LFS_36JNf>CLq+%8i?C8y^Y}3NH)HYHo zEz?#h8y2Q%79Wk3d0HClCsl5vWty9EQJ6TevN8D*xpHJ4$V4zC_yTxD?)$~GE$V5V z)@N6%G}mY6*PpJc^Cy~@oT<;I)D=$ao0dwOCKZ}VeS<y)vp~&|0K~BvxNm)Y5Mc6) zWI~N_gFUlwN<5&678!I-jf`r~sPatiB-QNA)^|7C)6Mqr!_78+#t_)Svch7~I{Lk8 zxVTtgM9!782c~61rJ5F%;z}E43u1k*PtfiDAHS1Bp3}_<GSNRUjsv_ySN=`?fAFQg zqN$1Ss7LrWMfcnMBIqplnBKrpsiM-WoaZB@u2+kEzvG&OoD0VcEJF`iBIKU1HT*In e5rvWO)@HGXteE@h1-Tqf-01oK))y|Ej>1m@-nuvd literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pytoml/__pycache__/parser.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pytoml/__pycache__/parser.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6f38105f96773c2f8df294e58ec433c974ddb628 GIT binary patch literal 10032 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 D((W6l literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pytoml/__pycache__/test.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pytoml/__pycache__/test.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4aef964c47f51db47ab4da848ea9069755722162 GIT binary patch literal 1190 zcma)5J8u&~5Z>K;_<XkWQa}PC6eK8I#12>j5k(Oap-GV<K?1Bq*5!6>F1c6s)=`|; zO`M7j(NfXT@C*16)LTN8zYqzDnX_@C&~T@jyPa=m=KE&v8kLH>^R2e~+aTl@xptM{ z{RLRI1&$L=L((LiaU-M=YcfiD^TH5jn>8(Aivm2IHzZy#i6|bpa-9;qg@I_(c}HUQ zmT;3>=cMU!x=pI~1=J;*7ZiMz>Zx`jBTuzt+ix@)&wUKz#lV0Xc?p*N1gA)!C^}?v zfm6=TVYSbOWStD5XpR|xz2*it5ySX^_KDm;j9Yg`xf^}h&Fwzrh0ko9XYQMj8FNQj zeaO0o*bx7~i%{i^yD{UXYghrWFTAXr8#zUYf9DlGweQ|QN`U;})4*obyUb@sdxrFk zass27-JHlr=_c4V%D)RP02#Y;J8VD)3?#83?bA=}(A*|pag4J{dT|zdO0-ncQX*4T zL$lhlrU#lHNi3DS%cpe}rS&vOm-f0r$d{H6-|r>MPdJ8hYaNN0C$gUQR1$@CELBT; zm+mSLeB~!mx>i9>cs@2cdGt@;+G?2iUYM=bt}-UFFl!=f9u^&xRUS}~M2GZaE+{8j zrP2bt%A^esO^>fM$Rb35P#9z*LesGRFG7<HiJzIaJSn|im1$G;QlYIQFYF5KaG0VB zBB9N_BnbhO5VhK%N$5flE71`W)?wnQ6Z>?f_W0RA+nJI<+&Q`3jm2>)d?ol|UT$Ua z^nn~yE7}dRAkLH*`%oBXsjWbXDAOjgk~2U^;;GA7q~^AuQ448h+5lMI!l*s^S#+f} zYB%0c-s;9k_?482go!!0mwGoQmd_La?(88rLR~rsHU-{fE-k~`--t_R;N2acKq=>@ zt*#2fY(#MZ8x*>6;3r(j`?xZIFGxw^j=YEK;-)tyl=r>HCI1%j2(_~sCA=GoH9U<B QC*aUBV-!5FF{#V`01A*LKmY&$ literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pytoml/__pycache__/utils.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pytoml/__pycache__/utils.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6139e127ec43c71a0a257b53838861a6b7e5d2d2 GIT binary patch literal 2091 zcmZ`)&2HO95Z+z>h*E4vNn9r_+M-CK!i+1~u>%AZg2reM^(96D=Tg-Hp=hZ@vLq_Y zRglQ!p<vo~>80mB%U*l(E9BH~mX?*cDT$rko!On?%zQK4TV1Uk|J8c>o6p!k?7hdu zdLJV_0Fg}c5$lvQ@9>xpg%kzvIMR{sTh?)<Cw<JGtjGYf{}Yo{S$oT5EoQ??;dBDY zk63u+4BFV?{O8SMd3rw&n>6n(=O^d;_N96AxOFVI!bh8r+MR6k*RAH$^4{WH*yE%a zk2oJcVovXZXg1^-D|pT`zQWQkGx~O3fOq1k+manI?PS>F>%^fVHKA*2s^8n&+xsq3 zvGK-T-FsoY=PH>^O?}!`X&f!(p)mZF;p0D<3UK+|gKa&YZchi(=Cj#gB%3=gUpz~8 zb|tawh+f4LnW*jQ8=Z_t+cP~FrLE~3v-*K%<b$Q8kntK{=Pp+@tS{W84Grt&-&km- z;nGkPHc7vWPgx=0G8;OSD7B;A#Tuay6IVL9upAfC*Y++_S#aqULi+2aHb+)U&P|p( z+SC59BAv`3c>%4tJE<?Y(kVF^KlXDkXSttO@*uC`j-PoM%lxd81z8oAgbZ+>XKoQ7 z=+(nB^7X6&V#9w%UZ0V3XAg-~K?eIjTxDTkoN;$*oWVpJ-=-r~gj3`7M@d(kYV>3< zjyuUDHi7KwSYv0ZL}fhE-LR&}h~Wx39rRRU_;Vxl-0(MsOT!Nge{A@XO=C&OwDLe! zFw%7p#y60Ux^P8}-{BjgF6!K#xX6ryLv+Pv<_|0oWmYhPpJXRh^%Wuj2o{Kd<e#w# z3dzdEiBP+gl}QUH#fhu-rHfrnddL*N0u9n1IvLh<kLU&~$}GA{!wQNIQ581<X}b#+ zI|4c4tghl~Y={l-yyIK%cynGq-N{eywRd*&_USH7^Yz9r&BnOdkWU&1?Z)GF<EYi> z&#(Q58~Ua?)4inMPh+jFL$z7eiSCY~H0~u6nHs;JDAbO*VuM|BO^|BUr<8<_qP%xp z(qQ~_*6$BqUy8k1D^)DY?F(E;Z-Fo#@XtlSeLGz4BNaYh6Y4HxJvy*>s2}WOq~C(X ztb-(UQ2$b(OZ{*6l2rt(rar-y9x0&bgT_MW%urnsstrf^VaQD-Dr13$;HL4YZ~XJv z5T2KKGC>p#CIcNs_rOoBdOp8?0o~R@{DEcaOBPWSGeXq4RkekEC=_{Tgw&S;sP2G& zA7f$X#?sD3@;+{e3hUfCtMuH6+6MoU730WMKX}i|>e31%7y79zNUe3`01I+t$kDO@ zXn-80aKg}&og6R+;Hgcyw6<~=(03(YXSX1c-cV#t243MH6#jeQR$oK2x(za4JIznq zEugxjfE<NOHHdrz5_&dprBAjuI4VvJe{tDCU(YAqaoon8v<|}f8W8C6Kw$6{KCdr5 zE{`6D70NW-iXu~sqH!W;BU-OS(aTwPR7z9}%50X@4z2cxECFLzwhIv!>4g0!1Uzu) zwFnKXY6Aiz@UN=$lJRsfiWR}i{xNKGvSnf5#9)GgB2^!=VS<O{M}ALeOR49<kf@2k J53U6_{sn@ZyifoD literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pytoml/__pycache__/writer.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pytoml/__pycache__/writer.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..67ddc106f4c7d66142ed452e4dcc2de67969c8d4 GIT binary patch literal 3519 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pytoml/core.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pytoml/core.py new file mode 100644 index 00000000..c182734e --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pytoml/core.py @@ -0,0 +1,13 @@ +class TomlError(RuntimeError): + def __init__(self, message, line, col, filename): + RuntimeError.__init__(self, message, line, col, filename) + self.message = message + self.line = line + self.col = col + self.filename = filename + + def __str__(self): + return '{}({}, {}): {}'.format(self.filename, self.line, self.col, self.message) + + def __repr__(self): + return 'TomlError({!r}, {!r}, {!r}, {!r})'.format(self.message, self.line, self.col, self.filename) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pytoml/parser.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pytoml/parser.py new file mode 100644 index 00000000..3493aa64 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pytoml/parser.py @@ -0,0 +1,341 @@ +import string, re, sys, datetime +from .core import TomlError +from .utils import rfc3339_re, parse_rfc3339_re + +if sys.version_info[0] == 2: + _chr = unichr +else: + _chr = chr + +def load(fin, translate=lambda t, x, v: v, object_pairs_hook=dict): + return loads(fin.read(), translate=translate, object_pairs_hook=object_pairs_hook, filename=getattr(fin, 'name', repr(fin))) + +def loads(s, filename='<string>', translate=lambda t, x, v: v, object_pairs_hook=dict): + if isinstance(s, bytes): + s = s.decode('utf-8') + + s = s.replace('\r\n', '\n') + + root = object_pairs_hook() + tables = object_pairs_hook() + scope = root + + src = _Source(s, filename=filename) + ast = _p_toml(src, object_pairs_hook=object_pairs_hook) + + def error(msg): + raise TomlError(msg, pos[0], pos[1], filename) + + def process_value(v, object_pairs_hook): + kind, text, value, pos = v + if kind == 'str' and value.startswith('\n'): + value = value[1:] + if kind == 'array': + if value and any(k != value[0][0] for k, t, v, p in value[1:]): + error('array-type-mismatch') + value = [process_value(item, object_pairs_hook=object_pairs_hook) for item in value] + elif kind == 'table': + value = object_pairs_hook([(k, process_value(value[k], object_pairs_hook=object_pairs_hook)) for k in value]) + return translate(kind, text, value) + + for kind, value, pos in ast: + if kind == 'kv': + k, v = value + if k in scope: + error('duplicate_keys. Key "{0}" was used more than once.'.format(k)) + scope[k] = process_value(v, object_pairs_hook=object_pairs_hook) + else: + is_table_array = (kind == 'table_array') + cur = tables + for name in value[:-1]: + if isinstance(cur.get(name), list): + d, cur = cur[name][-1] + else: + d, cur = cur.setdefault(name, (None, object_pairs_hook())) + + scope = object_pairs_hook() + name = value[-1] + if name not in cur: + if is_table_array: + cur[name] = [(scope, object_pairs_hook())] + else: + cur[name] = (scope, object_pairs_hook()) + elif isinstance(cur[name], list): + if not is_table_array: + error('table_type_mismatch') + cur[name].append((scope, object_pairs_hook())) + else: + if is_table_array: + error('table_type_mismatch') + old_scope, next_table = cur[name] + if old_scope is not None: + error('duplicate_tables') + cur[name] = (scope, next_table) + + def merge_tables(scope, tables): + if scope is None: + scope = object_pairs_hook() + for k in tables: + if k in scope: + error('key_table_conflict') + v = tables[k] + if isinstance(v, list): + scope[k] = [merge_tables(sc, tbl) for sc, tbl in v] + else: + scope[k] = merge_tables(v[0], v[1]) + return scope + + return merge_tables(root, tables) + +class _Source: + def __init__(self, s, filename=None): + self.s = s + self._pos = (1, 1) + self._last = None + self._filename = filename + self.backtrack_stack = [] + + def last(self): + return self._last + + def pos(self): + return self._pos + + def fail(self): + return self._expect(None) + + def consume_dot(self): + if self.s: + self._last = self.s[0] + self.s = self[1:] + self._advance(self._last) + return self._last + return None + + def expect_dot(self): + return self._expect(self.consume_dot()) + + def consume_eof(self): + if not self.s: + self._last = '' + return True + return False + + def expect_eof(self): + return self._expect(self.consume_eof()) + + def consume(self, s): + if self.s.startswith(s): + self.s = self.s[len(s):] + self._last = s + self._advance(s) + return True + return False + + def expect(self, s): + return self._expect(self.consume(s)) + + def consume_re(self, re): + m = re.match(self.s) + if m: + self.s = self.s[len(m.group(0)):] + self._last = m + self._advance(m.group(0)) + return m + return None + + def expect_re(self, re): + return self._expect(self.consume_re(re)) + + def __enter__(self): + self.backtrack_stack.append((self.s, self._pos)) + + def __exit__(self, type, value, traceback): + if type is None: + self.backtrack_stack.pop() + else: + self.s, self._pos = self.backtrack_stack.pop() + return type == TomlError + + def commit(self): + self.backtrack_stack[-1] = (self.s, self._pos) + + def _expect(self, r): + if not r: + raise TomlError('msg', self._pos[0], self._pos[1], self._filename) + return r + + def _advance(self, s): + suffix_pos = s.rfind('\n') + if suffix_pos == -1: + self._pos = (self._pos[0], self._pos[1] + len(s)) + else: + self._pos = (self._pos[0] + s.count('\n'), len(s) - suffix_pos) + +_ews_re = re.compile(r'(?:[ \t]|#[^\n]*\n|#[^\n]*\Z|\n)*') +def _p_ews(s): + s.expect_re(_ews_re) + +_ws_re = re.compile(r'[ \t]*') +def _p_ws(s): + s.expect_re(_ws_re) + +_escapes = { 'b': '\b', 'n': '\n', 'r': '\r', 't': '\t', '"': '"', + '\\': '\\', 'f': '\f' } + +_basicstr_re = re.compile(r'[^"\\\000-\037]*') +_short_uni_re = re.compile(r'u([0-9a-fA-F]{4})') +_long_uni_re = re.compile(r'U([0-9a-fA-F]{8})') +_escapes_re = re.compile(r'[btnfr\"\\]') +_newline_esc_re = re.compile('\n[ \t\n]*') +def _p_basicstr_content(s, content=_basicstr_re): + res = [] + while True: + res.append(s.expect_re(content).group(0)) + if not s.consume('\\'): + break + if s.consume_re(_newline_esc_re): + pass + elif s.consume_re(_short_uni_re) or s.consume_re(_long_uni_re): + v = int(s.last().group(1), 16) + if 0xd800 <= v < 0xe000: + s.fail() + res.append(_chr(v)) + else: + s.expect_re(_escapes_re) + res.append(_escapes[s.last().group(0)]) + return ''.join(res) + +_key_re = re.compile(r'[0-9a-zA-Z-_]+') +def _p_key(s): + with s: + s.expect('"') + r = _p_basicstr_content(s, _basicstr_re) + s.expect('"') + return r + if s.consume('\''): + if s.consume('\'\''): + r = s.expect_re(_litstr_ml_re).group(0) + s.expect('\'\'\'') + else: + r = s.expect_re(_litstr_re).group(0) + s.expect('\'') + return r + return s.expect_re(_key_re).group(0) + +_float_re = re.compile(r'[+-]?(?:0|[1-9](?:_?\d)*)(?:\.\d(?:_?\d)*)?(?:[eE][+-]?(?:\d(?:_?\d)*))?') + +_basicstr_ml_re = re.compile(r'(?:""?(?!")|[^"\\\000-\011\013-\037])*') +_litstr_re = re.compile(r"[^'\000\010\012-\037]*") +_litstr_ml_re = re.compile(r"(?:(?:|'|'')(?:[^'\000-\010\013-\037]))*") +def _p_value(s, object_pairs_hook): + pos = s.pos() + + if s.consume('true'): + return 'bool', s.last(), True, pos + if s.consume('false'): + return 'bool', s.last(), False, pos + + if s.consume('"'): + if s.consume('""'): + r = _p_basicstr_content(s, _basicstr_ml_re) + s.expect('"""') + else: + r = _p_basicstr_content(s, _basicstr_re) + s.expect('"') + return 'str', r, r, pos + + if s.consume('\''): + if s.consume('\'\''): + r = s.expect_re(_litstr_ml_re).group(0) + s.expect('\'\'\'') + else: + r = s.expect_re(_litstr_re).group(0) + s.expect('\'') + return 'str', r, r, pos + + if s.consume_re(rfc3339_re): + m = s.last() + return 'datetime', m.group(0), parse_rfc3339_re(m), pos + + if s.consume_re(_float_re): + m = s.last().group(0) + r = m.replace('_','') + if '.' in m or 'e' in m or 'E' in m: + return 'float', m, float(r), pos + else: + return 'int', m, int(r, 10), pos + + if s.consume('['): + items = [] + with s: + while True: + _p_ews(s) + items.append(_p_value(s, object_pairs_hook=object_pairs_hook)) + s.commit() + _p_ews(s) + s.expect(',') + s.commit() + _p_ews(s) + s.expect(']') + return 'array', None, items, pos + + if s.consume('{'): + _p_ws(s) + items = object_pairs_hook() + if not s.consume('}'): + k = _p_key(s) + _p_ws(s) + s.expect('=') + _p_ws(s) + items[k] = _p_value(s, object_pairs_hook=object_pairs_hook) + _p_ws(s) + while s.consume(','): + _p_ws(s) + k = _p_key(s) + _p_ws(s) + s.expect('=') + _p_ws(s) + items[k] = _p_value(s, object_pairs_hook=object_pairs_hook) + _p_ws(s) + s.expect('}') + return 'table', None, items, pos + + s.fail() + +def _p_stmt(s, object_pairs_hook): + pos = s.pos() + if s.consume( '['): + is_array = s.consume('[') + _p_ws(s) + keys = [_p_key(s)] + _p_ws(s) + while s.consume('.'): + _p_ws(s) + keys.append(_p_key(s)) + _p_ws(s) + s.expect(']') + if is_array: + s.expect(']') + return 'table_array' if is_array else 'table', keys, pos + + key = _p_key(s) + _p_ws(s) + s.expect('=') + _p_ws(s) + value = _p_value(s, object_pairs_hook=object_pairs_hook) + return 'kv', (key, value), pos + +_stmtsep_re = re.compile(r'(?:[ \t]*(?:#[^\n]*)?\n)+[ \t]*') +def _p_toml(s, object_pairs_hook): + stmts = [] + _p_ews(s) + with s: + stmts.append(_p_stmt(s, object_pairs_hook=object_pairs_hook)) + while True: + s.commit() + s.expect_re(_stmtsep_re) + stmts.append(_p_stmt(s, object_pairs_hook=object_pairs_hook)) + _p_ews(s) + s.expect_eof() + return stmts diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pytoml/test.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pytoml/test.py new file mode 100644 index 00000000..ec8abfc6 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pytoml/test.py @@ -0,0 +1,30 @@ +import datetime +from .utils import format_rfc3339 + +try: + _string_types = (str, unicode) + _int_types = (int, long) +except NameError: + _string_types = str + _int_types = int + +def translate_to_test(v): + if isinstance(v, dict): + return { k: translate_to_test(v) for k, v in v.items() } + if isinstance(v, list): + a = [translate_to_test(x) for x in v] + if v and isinstance(v[0], dict): + return a + else: + return {'type': 'array', 'value': a} + if isinstance(v, datetime.datetime): + return {'type': 'datetime', 'value': format_rfc3339(v)} + if isinstance(v, bool): + return {'type': 'bool', 'value': 'true' if v else 'false'} + if isinstance(v, _int_types): + return {'type': 'integer', 'value': str(v)} + if isinstance(v, float): + return {'type': 'float', 'value': '{:.17}'.format(v)} + if isinstance(v, _string_types): + return {'type': 'string', 'value': v} + raise RuntimeError('unexpected value: {!r}'.format(v)) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pytoml/utils.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pytoml/utils.py new file mode 100644 index 00000000..636a680b --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pytoml/utils.py @@ -0,0 +1,67 @@ +import datetime +import re + +rfc3339_re = re.compile(r'(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(\.\d+)?(?:Z|([+-]\d{2}):(\d{2}))') + +def parse_rfc3339(v): + m = rfc3339_re.match(v) + if not m or m.group(0) != v: + return None + return parse_rfc3339_re(m) + +def parse_rfc3339_re(m): + r = map(int, m.groups()[:6]) + if m.group(7): + micro = float(m.group(7)) + else: + micro = 0 + + if m.group(8): + g = int(m.group(8), 10) * 60 + int(m.group(9), 10) + tz = _TimeZone(datetime.timedelta(0, g * 60)) + else: + tz = _TimeZone(datetime.timedelta(0, 0)) + + y, m, d, H, M, S = r + return datetime.datetime(y, m, d, H, M, S, int(micro * 1000000), tz) + + +def format_rfc3339(v): + offs = v.utcoffset() + offs = int(offs.total_seconds()) // 60 if offs is not None else 0 + + if offs == 0: + suffix = 'Z' + else: + if offs > 0: + suffix = '+' + else: + suffix = '-' + offs = -offs + suffix = '{0}{1:02}:{2:02}'.format(suffix, offs // 60, offs % 60) + + if v.microsecond: + return v.strftime('%Y-%m-%dT%H:%M:%S.%f') + suffix + else: + return v.strftime('%Y-%m-%dT%H:%M:%S') + suffix + +class _TimeZone(datetime.tzinfo): + def __init__(self, offset): + self._offset = offset + + def utcoffset(self, dt): + return self._offset + + def dst(self, dt): + return None + + def tzname(self, dt): + m = self._offset.total_seconds() // 60 + if m < 0: + res = '-' + m = -m + else: + res = '+' + h = m // 60 + m = m - h * 60 + return '{}{:.02}{:.02}'.format(res, h, m) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pytoml/writer.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pytoml/writer.py new file mode 100644 index 00000000..73b5089c --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/pytoml/writer.py @@ -0,0 +1,106 @@ +from __future__ import unicode_literals +import io, datetime, math, string, sys + +from .utils import format_rfc3339 + +if sys.version_info[0] == 3: + long = int + unicode = str + + +def dumps(obj, sort_keys=False): + fout = io.StringIO() + dump(obj, fout, sort_keys=sort_keys) + return fout.getvalue() + + +_escapes = {'\n': 'n', '\r': 'r', '\\': '\\', '\t': 't', '\b': 'b', '\f': 'f', '"': '"'} + + +def _escape_string(s): + res = [] + start = 0 + + def flush(): + if start != i: + res.append(s[start:i]) + return i + 1 + + i = 0 + while i < len(s): + c = s[i] + if c in '"\\\n\r\t\b\f': + start = flush() + res.append('\\' + _escapes[c]) + elif ord(c) < 0x20: + start = flush() + res.append('\\u%04x' % ord(c)) + i += 1 + + flush() + return '"' + ''.join(res) + '"' + + +_key_chars = string.digits + string.ascii_letters + '-_' +def _escape_id(s): + if any(c not in _key_chars for c in s): + return _escape_string(s) + return s + + +def _format_value(v): + if isinstance(v, bool): + return 'true' if v else 'false' + if isinstance(v, int) or isinstance(v, long): + return unicode(v) + if isinstance(v, float): + if math.isnan(v) or math.isinf(v): + raise ValueError("{0} is not a valid TOML value".format(v)) + else: + return repr(v) + elif isinstance(v, unicode) or isinstance(v, bytes): + return _escape_string(v) + elif isinstance(v, datetime.datetime): + return format_rfc3339(v) + elif isinstance(v, list): + return '[{0}]'.format(', '.join(_format_value(obj) for obj in v)) + elif isinstance(v, dict): + return '{{{0}}}'.format(', '.join('{} = {}'.format(_escape_id(k), _format_value(obj)) for k, obj in v.items())) + else: + raise RuntimeError(v) + + +def dump(obj, fout, sort_keys=False): + tables = [((), obj, False)] + + while tables: + name, table, is_array = tables.pop() + if name: + section_name = '.'.join(_escape_id(c) for c in name) + if is_array: + fout.write('[[{0}]]\n'.format(section_name)) + else: + fout.write('[{0}]\n'.format(section_name)) + + table_keys = sorted(table.keys()) if sort_keys else table.keys() + new_tables = [] + has_kv = False + for k in table_keys: + v = table[k] + if isinstance(v, dict): + new_tables.append((name + (k,), v, False)) + elif isinstance(v, list) and v and all(isinstance(o, dict) for o in v): + new_tables.extend((name + (k,), d, True) for d in v) + elif v is None: + # based on mojombo's comment: https://github.com/toml-lang/toml/issues/146#issuecomment-25019344 + fout.write( + '#{} = null # To use: uncomment and replace null with value\n'.format(_escape_id(k))) + has_kv = True + else: + fout.write('{0} = {1}\n'.format(_escape_id(k), _format_value(v))) + has_kv = True + + tables.extend(reversed(new_tables)) + + if (name or has_kv) and tables: + fout.write('\n') diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__init__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__init__.py new file mode 100644 index 00000000..80c4ce1d --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__init__.py @@ -0,0 +1,133 @@ +# -*- coding: utf-8 -*- + +# __ +# /__) _ _ _ _ _/ _ +# / ( (- (/ (/ (- _) / _) +# / + +""" +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 + >>> '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": { + "key2": "value2", + "key1": "value1" + }, + ... + } + +The other HTTP methods are supported - see `requests.api`. Full documentation +is at <http://python-requests.org>. + +:copyright: (c) 2017 by Kenneth Reitz. +:license: Apache 2.0, see LICENSE for more details. +""" + +from pip._vendor import urllib3 +from pip._vendor import chardet +import warnings +from .exceptions import RequestsDependencyWarning + + +def check_compatibility(urllib3_version, chardet_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, <= 1.24 + assert major == 1 + assert minor >= 21 + assert minor <= 24 + + # Check chardet for compatibility. + major, minor, patch = chardet_version.split('.')[:3] + major, minor, patch = int(major), int(minor), int(patch) + # chardet >= 3.0.2, < 3.1.0 + assert major == 3 + assert minor < 1 + assert patch >= 2 + + +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__) +except (AssertionError, ValueError): + warnings.warn("urllib3 ({}) or chardet ({}) doesn't match a supported " + "version!".format(urllib3.__version__, chardet.__version__), + RequestsDependencyWarning) + +# Attempt to enable urllib3's SNI support, if possible +from pip._internal.utils.compat import WINDOWS +if not WINDOWS: + try: + 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) + +from .__version__ import __title__, __description__, __url__, __version__ +from .__version__ import __build__, __author__, __author_email__, __license__ +from .__version__ import __copyright__, __cake__ + +from . import utils +from . import packages +from .models import Request, Response, PreparedRequest +from .api import request, get, head, post, patch, put, delete, options +from .sessions import session, Session +from .status_codes import codes +from .exceptions import ( + RequestException, Timeout, URLRequired, + TooManyRedirects, HTTPError, ConnectionError, + FileModeWarning, ConnectTimeout, ReadTimeout +) + +# Set default logging handler to avoid "No handler found" warnings. +import logging +from logging import NullHandler + +logging.getLogger(__name__).addHandler(NullHandler()) + +# FileModeWarnings go off per the default. +warnings.simplefilter('default', FileModeWarning, append=True) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..aded27928a918ad9a86f55c6741e5f1b2e686b18 GIT binary patch literal 3438 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 VOpRu1#?2XX6lP}2u-ZCh{})Kc#@7G< literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__pycache__/__version__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__pycache__/__version__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0df151f7545799f143f0b30196c5c43b592c08bf GIT binary patch literal 501 zcmZ8eO-sWt7|y=C&Z6i+5D)P<aBZy@5z&d4fgnS73QFjjxQ6v3OH*O}5B>wet6s!| zzh+1M1D-vZc21@V@5}Q(FHiEk$-ZIe*DvPHTM2*<u(VVSx+;=gl?Xt9lu(J3QJGXw zg;Y_M)KHDoQJpkUgJ?)2P1Gd%6==6+nxK=ECNjx3`%~%15$p{HeRvxS*h@n<O3ZA_ zmy#b^7BBjpg}{u(D62cBvuD~2?36)foYN?x(ubFn$t>FlX?HwlL{1a}{gk_&PoZPl z+4fn?r-F@q2_1Xy0REAuD{7echbQ>?c>f9&xM=IMCdQJ<fMPsb#hB2<6O2n1M~Y}* zoQgn!7RGl}By(0NhA9h(;&qJORE;PUUi-x~blHz8U>=Q<{BQ$fZ{baqnkwC~YCHpx z+bYu6i6ujBamG8v4IO*p4`bUQIaP$R5s_F}ix;z&jG25o(~iQJqyasy<)62%QnmDd Fe*@(Xo{#_l literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__pycache__/_internal_utils.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__pycache__/_internal_utils.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..287965f5494ec20bf61fd9b4f7f4330ca738e89d GIT binary patch literal 1259 zcmZ8hPmk0#6t|Pi%wpKl3iZ?j@{y6s>}o6ZutEs5r7edd#8RmmwF;T|Eioi^u$|pz zHS|#UGQDu>x8NJ(+Ec#*r@rURR1{10*e}oT&+qs1e7(OfetEzA^@ohHzu6}v#r=Jp zeu;}>E2g+gYThKPq)At4ldUq&)HRi<$veK9sHvL0W2>p!J7WuR^<Fr5-GL8&nQIfk znWE0SpldIF|KAYeiL)14ftU1IhhCm{rVQE|FGE!XSvZg-p1KB<+{LPUx$foDZ4Pl+ z>9UdvS};mlBjLB;paJwchf6xe0%Qes3(m{izC-uIW89`K!b1GRvB^a`OtsJ3{&={) z?sOfr$$fA`O3S41rPgJFel!Rjnx{A;LV;~q;BOOmuwic!^JPe!+_0DFhQH-_7P!yG z{U$+#_|=E+^#vGNNQ|z{3u)Icp$uP12QLbzYVcm#a~b*;$QC+>coev69e6OIAcW9E zNE{KTZ5(az2-2X#1?+;4VZfADQLX|}Qm{Q-R^T9pF;HUK!u3n}tkRgy6X;$(I6Hmx zNOmR`6>N<VV+wbvJuKtJ#bglLYvV&<N^k^>Bcz6DObNp@W&=WaEOXe~6*Hu^3x6_q z1N}dq9)_kpY;}8w2vB#9URP^-bgak}XO5UD>kfD7I{Zvs%eEg5g3ZVFi9YOiP9#x$ zHW7T9Wc)@V5=YjOc&9<X*KtNZzroFpPd^XIAH1IvmkPN=%_Dyq3)w5-jyPUKOM1qB zW-3EoCs%)c3#hh68<6@OLDLBHe>_-&l0-3w0>RqiT2_TCO1$HjBBFWHqM;$`WVh|$ z<nutm%Cds;)l&Z0`5@P@bBGa06U4ExK|bk2g-SV=&oSWhk*^a+f;f?DYwLKyO|a!> z-#uPT+!S{X{|wkLf8aeh(%D1jtaCFm-u!9o=pktd;)ewv_I8Cv8pmay+z++@<oK}S z3%Z5Yk&D@!CtUE1&$+va*2fDT%UH~YS)MCf=J_xkA7~WQC@ZQgQWx)hl8*RwG3Vah T#;UG{d)Fuz^^+xEq~hRT&edr) literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__pycache__/adapters.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__pycache__/adapters.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d6807cbcd74565d1a5bc26e91a8c5cbb66b6c15f GIT binary patch literal 16850 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__pycache__/api.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__pycache__/api.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ba36aee7fe5397ac9682d4db8a0c391f5964e2f6 GIT binary patch literal 6442 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 HRr>ocG=O=z literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__pycache__/auth.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__pycache__/auth.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..44de2f05f73bb80ff903569ca405fded027e15c6 GIT binary patch literal 8293 zcmdT}&2Jn>cJJ@$>G|OBTcTyVO<S_ZA*l~bwxUR~7>TjHYg2;6jbmnw-sV)3?BPuJ zsJcfIC(R9zagg=FhH}}QataV&FS!QD-;hI)V;yn{5<q)RPDT#-z3Q1EhoV;z3?DLs zuCDK@_v*c0z4!XPO2zs4KdgNDZ*MEgzbi+62J*M?B>#+rDVqvYnbuM_Rr%I7HTl*z zb@?_n4f!@VP5HJqExh$sp>1#4s=^Frwu)_M(`lDBOYQPzS=L#tO1rvQmH9$zqFvjp z$-Lc~Y)@@YAz$2_X3pjeE3xud%I54x3ahZ{R|=~JbA5et9_0yEL%9~rqkIbGNj8P@ zRB#IA(<o1~8I)&a`vTJ*DD~Oimktjec7r5MR{U<d>-_TQ&v7<(!^CaJtlJ9QMjWMn z7$t7H8@SXth|;j(r(qnqyMDx40Z-iRn7j9fGdj<}FlD{2isIJ$mxHJgv*4MEs=6-h zE^l>wo&-WqQZAe=Kfx||8110@T<|32ek1i7al97>iI>J+)8}ZZAs1oIM}ar$Jt^n$ zScn0;fzJZod&BQ^T7%7<f3p1e@#AIeti6my^KG!+bi3P1LkvyN%O>WhenX=T<EP`X z@Z83e{2EEBWJ;>`wd7o?HF3~QBUAcnYBKE`O;u8hN(a<SmAyWdy>#?a$9kc3pvt+d zzQ%u%Da`^iMkA>%&D24i%FNVGi_B^|8Rp&A`WW3T^|8{ta-d~&fQ8<f`$5{}I2GUh zLq7={?kY~k&3UuZ`^WV-TFwh@Hwk#;w}Zre9JX3+6uYfB+6lP36}U;a(}{T+FgJ`w z=jXn+ashw$UMs-i(D^?Kcq)%S-f9Mo)ZLG}Z$Ap$j-Mp?(0Bgq4SrB}(-_+sEDM3y z+E20SU<?)@0g3{jyW3stJ&@fW#UXP$Jl<*r?PLWfZ9}wzotW>B5kX5mjye1PK!mVb zkksg6&&p5czex12)yu*O6X;RuM~#4!lnMK>&m)L_A`Hq2izL!d#nhdk!-HJMKF_;w zlLlD16muH|PC_e;W*kPsB&K(ydJRrn*h7|y0x2yz{6^uYFyy<d=hJrQd?)NIZ*{{K zTfXpccPqYdiBXk&yhlOAVt#%I5$9=wmCnAH@Sv_?!=p0k;TcSqoI|2Gj%uieZm70q zYe(|BqdF)%nxQV}d;vWh)P49P5^mv1Xk&o_XjKSS0jV0(0e1#7Anm5GNxH$!pm&*4 zx6y(;K%V^6^&!)=A2)1wAVUBr2~CL$JOEs{+dOWM^qbbBN9uPOnG~SjSN{U*VjXS0 zcZL>ncL6`ZziyI}k~FY{5BVhNoL-O9PlgKxY>o4n*EL}zL2Fy6TrxOMPGfdqdmfGU zyq}_!(8`M1n;a6eGHhKZ5<LK1JMcW=cwP>@$d^6uVb^aBS_+=W;)dt(*D=wNwTOG1 z7UZuW`4~?^mzS*?nyfjQ=NHiBWS%n<yf>M}3V2)0W<|UU%mI%|qVn;^#yu(7L`Uz# z)f51_3q_~;BVcsongA}4?(g6{MldtLg_VYmZP1V2qqC`@kg1vCDVc^eKOc3yuJKv4 z@Hr%Poxe)?QN<C444EHBVd{DJ(M>W$Q7yGMH@1JALEdRhMhX}qW#k=X2)CPRs%3QX zD}8+rJ8J5(tmWk$U^IB6uODuvZU`MGFDpc0CxBF@Jm0q__btpAJb6xHEYAxbdfp$? zmI)&iRa0wfZ|3->sngh&N33%&h%SyjtxQ6#u1mgvbCO#`&~Zj#%?N_`b2JTQ^ttt@ z!`OOsT#`j3d^wB27Of99(M5S3JCG_RDkLT`4|`HC>xM*uLq>^0es?Fs9lrMb4yC+% zv^^4QMV&d}6mvaWuiM;37ybq%i<G=c$yrM3l)OvH_v+7EXuXRkAuf{s*oJM{I;Z*u zp3#rkeGAWvkV|UIJsv;Vm)de;Tw7#=yt>D=#s3~%p;hTe@Bixo^rq!1%fI^=_!6dk z(Gl#R&#@yIk#-c!PCSC|<@qvZWy6^zW>L+_+`fmFm%}Vp0(RM~%qn;nS(Q!T?XVh~ z#Jj|%Af(fxO6qkd+<_@7kLlL<G36~MoYPC98r^?KQH`v{K9ton<oyGDGmj`nG2P`b zYhfP<vlT<WMa9djJXw4Z07{{ciLp75SgNJ<=Eo^Lgg-J;=tu97Xx%~~*KJ&rT5_Ec z^r;>$XZh9{%wd#`P(q|<vixlg-UUgPxh@RC*bSj@n!RpA=lw(i;zgACB_zVZm7aQ0 z4C6?Y<O^OvH%f)k*ahi&Cr(5q>bAYh7cR<6HL0sPq{-WFbOnl8iRYbw519pvD-F6> zBdH=$w6bcC{=K)3@#Dn7qdSVOS7IhHDET$C5afdaOg*g}5KAbpAx~^Uz6nOb$~Q+P zviadN4BAYT3e5Ui$t-5=*?fZ)4(!OzERu=?JF{6~PfJ>O+j|=Cu_AN6QVxn)@oOcz zh1wEopXQQ%;A9SJ-$iW|wSS*Gg$JdqgxVR@PNMdo*c6+_4CSo+wenZWw#sJM>{s?d z<yVSa|6iH)0J(!|YGk<44kogRrrG&VHg`}%&f@=*)!01c=9LeWgBm*pN(vd#ZEx#y z%E2T%4e73JYsgRiO35ZM$28tkc+X@xPl|imQ<eXOcwi_^hb?>nF!P+qW(!p3IqVgB zHyz9|o0jrC{GT#AgIVUXxy;D(*a1purCIGOV>J`a8hf>`QhPetoXX}fdb$s~*lT}D zXEUGk6TA2q(0wYK#?Izx|Fql8e5xkD%_`Y6Xfd)GqNT4LoQkezCVL%w*Aj!ho|(-V z=JwS+>#4>U*&FCNo6VzsX4}NRPt*A9v>ay;PjlM6B3lGK#4#hQWv67{g{*)%HnIiw zW>%OZzAj`m>o#iM%B(?66*W&#b2h6EYE0C8i<)z^GVPK^vbVE^IlA=U>AmW>gWolt z?stM~<d===gb8G6wS}4MoBlBFh@#(u+ZCp}ZDGY7AJKtzp?`MgO3y~J{9x_DgT`@; zctC2fh(x-!KnOkq0%5>|l}bu(Fqqmj`vc?J?55kxSL+t9V2E^R_!M#y4R%}MmeAYm ziYV>|Pnd*a*xTxp<Hm}OJ{~5z`q#90j%;u+)ZXP|nk=0gL<b1e2l0WG>k>GVn=8Xf zg#O^;)gOs2zDmRy$*zBq-$oXAbqBBK2to%*(BJ$Jf`*gy3Lt3t(v|mrRH7^_hc$i| zS*5&-r0j2xQTD;h9MzF|a^kLBy!4|Jhc#YA9J)y2{_Y17H=Jk8x;8NBG)+v75MT<f z5QTyWq@-2dGtVa1&L#uXUZ{ys8PuhSdv#atDwnd{54zs++gr@P`5T%LkMeT5G93P$ zdj320!=5cy#^S?0&}G;&&R)3sq?c>>GYU^Uqn!)Ghw=ZNy40%<M`0k1y*Ug^-B>)E zEH1ecj|O=ON`rithoc@zCytUp7JHQ?HwUS_SX)9MU;tmE4!Q2<MR&;s$lX|^{b0GM zapP>V<TehM>J<l8-r1x+%cWiN0a2jCcM~S!WboDKRD{v-(_LW#ANl^FwZ^ZYjlWL` zMQU<jGt#gf2(uwy8Vs01mm^{tw<R?2kEkOd1L8LbTc-6_a?j9e2k@Af&=I!ee?XnC zQ*wino0NQr1Yv>^#e9uw$?xYsq2yC)*M543;zcRAfMAd(gQbjrA)8h&3T^e0&_6~7 z$t6*U8jt)INcxQ0t(-5Sz=NbC$4fqKg|NmD0Sa=lQ#pA`GVUOzPe9v0M{Dv+B#K#9 z%W75r;Zea1wY8dR8y1;iW2vE)(VoYV960M$ZAzsYTdS&5c$d{F%z{Uo1LRL>7F@vv z@{qN%j+u20Z5DbRJ~gek_+qpf=^n{4Iae}XLzff0S%p_g|D@eZ!B@RkzaJz)>W*2X zh?BxvMOYPKaUQS`@jC?9IZe2Zz+5RzykT`NUB8c(p$ShuudwzI1l-AW`iS~Y<U#h) z=>I_9+zA8uz1NNrcdYY>Fp6l<Whn_;#6=F0K$-zlc2A9Gn6{@xh6d|DIX5uw;mE^s zAuASU{$7#aL4TuZHpzZPU0+p+IfbUp5GjJKqcd1G&0=5Kv*KOZM}ys}z|NYZ60AK~ z!_wN*Qm0vBMWkise4`y0X$4kYm06k2bXNKXbJGZK0`uc@2-3+ub|%-Kf@N%`u+y3| zRK_#g*U@G+=crEZN@>m`e+mz5Fr)=mrf@`aq4`Q?ZmXI0Em`4K^Gx$qiqq5R%<_zk ztl!+Rk+jz<y?A6XZTNc#aUJ@5q#1-pF7(+&@D+_Y+$<BqEV<z}Lfrui*orfnV`zyD z<EkqVBRR>aNB9&c6aF`nTyT0d`h-C<4&nm=e@}`^zSc7m)m|YlxWIpNyXEh|F#_h0 zH1gj=d;K+0A{VHez@b7=R6-jGAHPadLC58XAZT{X_9>DX?8#sN|D2lPc|H!f(0CvU zjkw(jTY+#s`Dp#_{k7Yx57u~*I_XJwi%YabA1DF5HnY)+@sY=9#GQRk!iNCo;H!?% zx&K&9Ai@ny3Wl|uJXQV+N_^_>V5SH<gwIU0sffW$43iWe284yLJgBG_a{o^Tj2_Y$ zE0LjTIEx6P8?=DXyyrq}&Ok@tNd6Y1k`*LMaRFci_|XYm764B*^^}ArzziVBKw2YU z(FnkLr%%>8%s5gwI+_w5!gq;+5NSn<F{zKn&!MajMA(#3Gkh<+uIx{t4oXE~0jNOn zb0s=sD5<mO@C_A8fG>iBmM@e@`x6rDlJv^UeSDA_l`2#k2y<0N;*51E4Z<Euu9UF) z1iyw2=0YK_u<>KaC1D?3gpme_XG)o=B0R#wt!^5~0Jx~|U<YRdmzyHz{9BrlQz9{L z5P6ixH14a*INThhJ)wZEf@{H6=K$w812exa?2{rEd8luU(<EV%(?1|!%g@o4WjOh5 z%E=(}_lHeoIPqQDeC~wEIPL5)!N{YzV_PM`kXxk?<4Xl<W$f|-tw?j=OTzQ3QJ8kU zUgj>^PmF=e)0Sr}4@e%BjLaPdM-R_P=1$X8q$4dn3Ehb@E^671y=|NJl09QvvK{8j zo7DG9N-|3Rl#*3S&QnrFA}lf>-oKoGy|M^W{8SoNx!pv(B&3nwe{<lNK!hH$75Ob# zwqYxgU%z0I$-Km$Gq>-qZ>+6vcpG2bTl4<t?)}fapWXj-ZT<G$J8O5u{8;N}Kl^m! z6Yt*Y{S6t2hOaBXY0B>;GR(^<`X~v?FX2OW5GRCvJ^wg!lZ@QtEhK~pqdyFo8Q=u| PzzjpTmuiLDY|Z{(P4dZC literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__pycache__/certs.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__pycache__/certs.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..87d2cdfdc306cd993874c1d578e9a38e5614c4ef GIT binary patch literal 584 zcmY*W!HN_y5KVe#+#$GL{DH!QI569@=t&S!1VIoFx~D-2nNIa|*zTmalI%Jc5%w4S z2`~PO*FNgWU+`o)(}EUMQ7Q6X)vJ1Raw6V;D?fbajQwQ)SdsE)$^HElG}|!Eb<y&! z*c6=Mkv_U8=pN3nxM4S(Gd+99mh<>B(FnrJh(7qTLJD4d`p<+oZ;Xe|>DVF=hDg>! zXb^hB8i`PY##+TTz>DWFQkdFQDj;m5)h(8A-XI|uFPv@n;4H$A&tEddnAhaG{FtE7 ztLj4SuoU7|4SN?sCG??a><->e)2;x^UAcnV5h!?VZ2Sn?_&{bGgK-vey;C-EX@U02 zkh2}yu*#&BvQRb3?l3n`5{xwmTn*Rb#1EDb+@v^l@YpL#vf90vCe)+gNu>Cd*3OoE zm}l&;kg`+8O8I6vAC9Heu99+dw>Nz$uh42odE04KG+u7}Z&im<4)dOj4PO}@r+N;* zAFo5#uM_rk8%?WE&n}y-JA0_dQuc{*{r8gVe95xk4~r*<%RRl5*!-;&X8d-s;C}!~ C5W0r| literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__pycache__/compat.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__pycache__/compat.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9378765b6a93a924266411b6ea9eb43d34951e56 GIT binary patch literal 1563 zcmZuwO>^Tk81_fvIF6I_`-_(KZdsNrZCY9m48t(Y>|QvO-I?X2f$=!8(x@w0uA~&g zf#1M|9|4Cw^ILS~)GJ3$ysw=uVW~ZO{OFbR`gx>R=iP4f-J9X}zqTCbPiN`zfqw-} zzi}NWcZid_xyN1M5zj^LbD#LsziN;sZRYN-lQ&*_Bv|k!@K!Y|Bq0sdU%&(277>X= zhjc_tV$mgC(IY+4Cw;L(R>Ue<6>DUz%HHDZVx6pu4YDCN$)?yMTVk7RS7RaH5xZn} zp<<8hLGCtxPwbQZDi-kraX=0#-r?_y2jqcBNFpARhvE@=<T~__d;sk+{g52eC*%qJ zhz{t}iBCR8Hu1<&@ds`F;;P>vbIgzbrvz2M>*P*dmk&|hy{>xvM4XbnN?DtKvZVOz zt>Qi?u2jOmSNQp|`nSpt>0?k22wGA7Q}}}RiA#=h|CKXX{pmVV^m<0M(ZjJ6WoDwE z|NBJIw^ODQA@doh$uui+PIbaWDV0g;C2YhvGxLOL4VjV=H9t^VBroS?DvRVSfi=;h zb3Tl2v33ToZH=dy%BlJ0)`P$;meHVXo7XdGsBO)PnncwnE%{8_coD37?U~}V7|Wd6 z=#rXJ$sZYoNl51DXkKPo+nwcJN{bt&WFcr_?AE_)mg9q_4Iy!vDGhmn&5D}0fL}>g zRKvOi!xk0fbfU6Lu+y)mrBh?dlrwE06kJHi!hwaajAF&**DnSQ8$Qc8&qf?fUSwqn zVcWZy8I0WZJ1<~k6wRNru^B|F2V0~12rCGy2yKKWLVy65(orG88o;2b){#dD9fTO6 z3jku;V<}%VdX=ext9CKwt1TSgM%cl?r?!=*xg4jd?Ubw>rZ=?6rBZlO*4J~`<{PRs zlSRskiL?!vplrZ&TF%cF-*elz(z37t>=I|Ad&O2R?ooNKWpoCGQDr-;4BlCR^fq`_ zxl$WwViTu!#*%Y7HlR|!W3aLfMvStZ(Ts7!iWED|(cC}{LG`h^utu4NyMbqCeFjz2 z;1Xza!ewS`x0ng4*f=%w5>|C#0==Ya(T!`R!@7KWi{9e4*#;Jh+C!Z&Qn-D1DB5~V z+WwOAVKy57=BUrm7Q)}3pBPb|z^NRg^8EPpdODJ)XE}zdwm7VlyNi8N-_l_@x8WD{ zJ^m6mUOxwDc(E6@0zdZSb{I6=BY)qG-4I&r?)VM2ej_*X0{7I#vHIQc>X8uU{sW3_ BxD)^Y literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__pycache__/cookies.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__pycache__/cookies.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..69077a637f6f4c49429fc85b87ff797b668913f4 GIT binary patch literal 18738 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 F{{jWM<Wv9v literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__pycache__/exceptions.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__pycache__/exceptions.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2c513370f52cfef1bab9d905d7412882377dd584 GIT binary patch literal 5458 zcmb`LU2ogS6^2QP`mo{;#ZK(RcASaxWv7Yk&0=qY#nw)oZBis@V0*g@VGEkpj4e78 zsmzdZBzX6tUSRKf)jv@b=nvv;ulg5yweJ~H3WF|COj8M>_#O_)=Nz7yGsDlPrW)V> zqxGjBCN1lqR^d~@{uX}fueN1zt8H<cmjb(2YL{*6cNQ;m=O>Fh!Z|OuE6^2Qg|3PU zbP2k~>(F(rtI!j?0o@Q)9IruN;FHjkTGyec_%!siZa)D%!<*1eQ56&CPP+liMLrA5 zEOfbj0eX&Kg1)5Bn1sH}=b`7do`PQBSD>$mikQX~W?;F>7hze<ElpUK_%bZZx#c1( z*Z2x7E4gJBmg}6s!o)?~cMkdnUxi-P_qhapliz~Ag)_>y&t+I{^E<HIfn^?+1z7I# zHCWd4Iai?9`90`+T3?0!4Zjb4Uo7GtOVAH^3%Vti#4@gM4VDeQ3CpHfLW>pt*`Brj zaCp#=;%y>StXkrINAzPq3RUCB|NJx>`(0nLUc{3?uuc@lo*ya}cLh@-X3-Jb%`bG9 zeYjGq@h?h<bvvDSw!i=Ssg#lIkY)5K=R1mFM_6qec~atbyZp0tglysEpXzPrXUnnL z74SM~Gr!Bz5$te(zbm9*r=DV7$h_X6f1E^#`Tzk&4}hIcBBkK$wClrxt{3va50BX( zN@RoKlgFW@MF$zHKMuCUID?;RV{=wI(RqAc`k{PQKC@g~Tgtq2UV<u}Veid^+&QyO zN|Tn{iP4Ie&r8~3pXfHR6Iafx^U_K63}^qvwk=*F?}m?`hkopPfj<<ZaE={ir+(aJ z2RY^eoaLlc9}i3%u;}nabnq0@`pEVwt>ul^YiYS3^(8qYsaK}8uBW^>mT5&LeIX^e znATm_$NgOwadwmlj#9^y$11J9Ii-JnIz36(?F61uuKPFZ-(PLSz5Yhu?>{(9{D42$ zeA_*YHXm{_>7V;fgglZPIf~jSBu9TBCvfA7_^D}ZtkR@iwWsZ--N1KvbvMhXaR^#t zz$(FpUQf7g+Hl=0E3rT6x^ELN$dA-qmq#7f)ptp!a_)`@0@&z=db4iJDcYw;tOJ2@ z%u*Dqdf6#y%SS0osj)>(n%ERmRzJkDEWtcn*bW(GJVS6JInKV;t93`xd6Jx#v$UC` z&6p<J(=2qMW&9NF)NOrX6Owf1Nfd_23iN5+^M=dY?1Sl3&@O|B70^f<p*3F1==~t0 zTG(cNQlA1e4}e<*Aks!a^}W3p8O}T&9mJ>5Ea2{I1sc*uG_`%dC!!=C{vD&+XlP<F zjGV#TYUokwi5GXeG>FACG-sK1>IVVq&;fQB#a-R*5&GPtgC9p-urSiM@^r{=r$?3l zcFL~s__)2ksmcaTlia?7h}<7Xs47VtMQHkC^5LI<HBk9zAIpIbQ$&S}dIXCjUAm;` zMKM({`A*0@s`;oxwGDLxnaPt5!d{56hkB#DBSBY@0v9*;|0?|bV(h;oNgMfpq3{@n zTjYG^1miwuVH886KzQMRaWD3mA8LQSAc*1^-gvzz33b_~q%s<o7J>TZ7~Phn&CtKu zeL+F?QI3cAw%I!rJkDTb$YM%TIzX}Qd2a;sM(J+^xdf=K0wif8$mV_&y+rtS1qTi) z>u?ShAR(f_%WOtSG?ecYkVqRLO}+G$LLTpRx}xU|H|U{L)Rfk2O|*_%tQ*IDhKfV~ zYMmn5%g!=ly#}^t1y<5#tj|OJSaa6ZJs}tuM_v+Oj?y2nBOqqaJ)>7fcq_npQNSZ@ zgxARN5WeB<Q5@0L-}xM=M{`LP^+Y#1MaR*YMtIkO^SXdX+6Zqd$9smMR>)zC2)lZp zf|dvxmHt1d3~2iWRMJMMGdb#Os^ApPRe}W{>NzFnm=u}#zr^wefW9jLk~RXo^rV}F zZv=lDb|Q}6lNI^j66I*b6qwJ_kkiRpGLbiBhlw6XV_I3{@L40HbXW!Q_XQV78@hny zmI&h=QFP(P*B(|fdZ6TVfaVF=YCtc~(B7mV-vrb_0g|*4<lJ5?h1Ww_RtcslS(qPE zm{D_yUiW!jMaP_a(H7t|KA=|mL=$M5@$mvQX(Q;yE|u?$b?Hf>;;4rx#?lvx1<|qJ zVMjX1CQ!El(JercHiEkRO(?~wA9C+75RW6C^F10*OejB5y|L`23O}0obp>ktc%qYC zfq9q(@_`Bd9pDB9e9}hvGb7G#JsG0I4HqAKiWcZv=`0wvFzQBk0U`;^!KQ9Iwj_%g z+SlkYFVR&-XuscPNAx;?5;5wF5CNr`l6W7}n+|bbj{qZD6fnfR=j&FnVuya{$pH&Q zcpP_)Tv-G7=|`@R#mJS>;#lnnaC4-@VC2*m7BGIVA4!_%@$q5CBcZ~(@Jz1`V)RV$ zzK^L5T4DC9uu5do3y;lagX;i4`^Xityjs7m*R|~xya#CI?*Lkf3<Ce~^TPT=uW8dM zN|5pUp|tk=54uO{rMIM|rKIJYq*at&DCpU;o_9)`*GZa5rHwyQWz0^b>58ODfuzza z8EvR=NE&+OO>EMM{Xsu(O{0dSUMeZq(^?)!onGlI;*0s8M~mpu0eV=H-2Am=ds_c8 ndmZsr9WB%*HjX`6ZZ?}v{+*buWqY$u_9aDo_^&oAvz1=}>7uG3 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__pycache__/help.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__pycache__/help.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8bacbe9867d183df88a157cfb67e21700761a214 GIT binary patch literal 2637 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 B)*}D_ literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__pycache__/hooks.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__pycache__/hooks.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f5171f06e0a44c2610f34f2d8dba2176b0b9f79b GIT binary patch literal 931 zcmY*Y&ubGw6rR~%Ne3e+f)|kyL<rPvQ4lPpDE1&!S}_HoST>WLNit@W+00C;DH|{C z*^7UL7r}pLul@~Qdh*RQvF%&Fx3k~8dAr{?v(H;C^66K4{5L@854slcj9vlELr5GQ zA&v+52=jo4=jbTl5s%>>@}z^>jnm&mi|I@lYto@oBSXI32tp2r($KNuvqI2Ps}sqE zp>`-}&Pvvkg|rfgzS5rjuxv(sGiv6>ig8NF>k}pm)`K2?VvCS&R|`|Bi4ooI7NHP_ z&~(MoftU!*tl+e-)tEB6?3|Lixhl#*;Qw&4-vG>QNF3yzBa3#?83vi*evX%gt}Fs{ z0Ol?vi7IqV7I=Uv{3Dn~9rP1vSJe*cAl<BEaUv$xGd^9s+_2+vqm<>--b@z!>E?9U zQ=8AYqdYQLz?I%u8N1;nr{(;DY;&30T#d^e_iE!_lc3W_T=dzju-RqdcA;`sn4R>h zx{d4j?ZLrb=juByM=^A$TQ}C<S#?HOH({KIkX$4HCw&iK-b1QznMkz275)q+oMAW8 z?<{1F&jS6Vf`hZbUmsU^7ac!XL{(G;eO!g#@glBb9*oxXdKE8%>H0@h1<vQw7rWAw z%;rNl6U^^5b&{o;Fg>Sg0^~q~KeUu07gY5rXO^XPGs{48k!AZ}dpHobZVZ`W*6Mar zha)ksV{cBq=5Co=R41b^Ob<*QIjSb!JwJ2Jq@_R0kMbq=o&0-{P|(B#M}P!y3pe4? rZeRA>QQgQguJSC?4IsRae(G9lw|Uz4Z*E`yA3H6ejJFvlVKey$=j`&- literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__pycache__/models.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__pycache__/models.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f8445272b4c588830afcc2bdd5d6a4d11331eeb1 GIT binary patch literal 24113 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__pycache__/packages.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__pycache__/packages.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..79c17cc20110601f8bd30f85166d0a3806915d71 GIT binary patch literal 476 zcmYjMF;Buk6n@thu2exL35z=eEfGdy92^ac14$!k3iq^ygO<Bifx)Hm$GEuqUv72s zFF1J>G+gq&d-?L-_r0%QuRHhe?&QM&_=KZZ)%~?D`J#aVBOH9#q|Cm7N#qk&LDB-> zKogCEpj7~pA#853f-tWZL{DA$6e$`DLynNnZ8TW51qBfU&DL0@AdI{kZSb9P18Ez| zpHXyLFogAB4C}^N``$sP_N8xtk)pZaJf8NI6|+^S=qw5a!)$k&#;F@T;ff`~Rm9z0 z91{Z9Im%4BX*gSik0{-aDRf*AW(k&t&WSSRRw{ZJ@tb=wWWj+^P7uV)G!a=4s47op zA(zVHvCI@*CM@SDm8l!$$Sf3@e2%k7nH*PsBVVNgAL5M`(*tiH&Pv-7zK346Og(*U xcbdnXb$jb*n)EJNN&VI#l=qjx`_GVWl|9@$UlFY(8yf72Lu}G8o8+7{$q!9nhoJxf literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__pycache__/sessions.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__pycache__/sessions.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..02eff196a78321a74ee7be56136da52b3b350805 GIT binary patch literal 19377 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__pycache__/status_codes.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__pycache__/status_codes.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4b5d6b01b6c01fb497a581355728d1eff5c9463a GIT binary patch literal 4729 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__pycache__/structures.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__pycache__/structures.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5c6eb8be469d7ea44310920cda1d9bb141e3ed90 GIT binary patch literal 4330 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 F;RhZO6&U~k literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__pycache__/utils.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__pycache__/utils.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..51daff79b1df0df9be626eced5f269e33de7f28a GIT binary patch literal 22111 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__version__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__version__.py new file mode 100644 index 00000000..f5b5d036 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/__version__.py @@ -0,0 +1,14 @@ +# .-. .-. .-. . . .-. .-. .-. .-. +# |( |- |.| | | |- `-. | `-. +# ' ' `-' `-`.`-' `-' `-' ' `-' + +__title__ = 'requests' +__description__ = 'Python HTTP for Humans.' +__url__ = 'http://python-requests.org' +__version__ = '2.21.0' +__build__ = 0x022100 +__author__ = 'Kenneth Reitz' +__author_email__ = 'me@kennethreitz.org' +__license__ = 'Apache 2.0' +__copyright__ = 'Copyright 2018 Kenneth Reitz' +__cake__ = u'\u2728 \U0001f370 \u2728' diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/_internal_utils.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/_internal_utils.py new file mode 100644 index 00000000..759d9a56 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/_internal_utils.py @@ -0,0 +1,42 @@ +# -*- coding: utf-8 -*- + +""" +requests._internal_utils +~~~~~~~~~~~~~~ + +Provides utility functions that are consumed internally by Requests +which depend on extremely few external helpers (such as compat) +""" + +from .compat import is_py2, builtin_str, 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: + if is_py2: + out = string.encode(encoding) + 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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/adapters.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/adapters.py new file mode 100644 index 00000000..c30e7c92 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/adapters.py @@ -0,0 +1,533 @@ +# -*- coding: utf-8 -*- + +""" +requests.adapters +~~~~~~~~~~~~~~~~~ + +This module contains the transport adapters that Requests uses to define +and maintain connections. +""" + +import os.path +import socket + +from pip._vendor.urllib3.poolmanager import PoolManager, proxy_from_url +from pip._vendor.urllib3.response import HTTPResponse +from pip._vendor.urllib3.util import parse_url +from pip._vendor.urllib3.util import Timeout as TimeoutSauce +from pip._vendor.urllib3.util.retry import Retry +from pip._vendor.urllib3.exceptions import ClosedPoolError +from pip._vendor.urllib3.exceptions import ConnectTimeoutError +from pip._vendor.urllib3.exceptions import HTTPError as _HTTPError +from pip._vendor.urllib3.exceptions import MaxRetryError +from pip._vendor.urllib3.exceptions import NewConnectionError +from pip._vendor.urllib3.exceptions import ProxyError as _ProxyError +from pip._vendor.urllib3.exceptions import ProtocolError +from pip._vendor.urllib3.exceptions import ReadTimeoutError +from pip._vendor.urllib3.exceptions import SSLError as _SSLError +from pip._vendor.urllib3.exceptions import ResponseError +from pip._vendor.urllib3.exceptions import LocationValueError + +from .models import Response +from .compat import urlparse, basestring +from .utils import (DEFAULT_CA_BUNDLE_PATH, extract_zipped_paths, + get_encoding_from_headers, prepend_scheme_if_needed, + get_auth_from_url, urldefragauth, select_proxy) +from .structures import CaseInsensitiveDict +from .cookies import extract_cookies_to_jar +from .exceptions import (ConnectionError, ConnectTimeout, ReadTimeout, SSLError, + ProxyError, RetryError, InvalidSchema, InvalidProxyURL, + InvalidURL) +from .auth import _basic_auth_str + +try: + from pip._vendor.urllib3.contrib.socks import SOCKSProxyManager +except ImportError: + def SOCKSProxyManager(*args, **kwargs): + raise InvalidSchema("Missing dependencies for SOCKS support.") + +DEFAULT_POOLBLOCK = False +DEFAULT_POOLSIZE = 10 +DEFAULT_RETRIES = 0 +DEFAULT_POOL_TIMEOUT = None + + +class BaseAdapter(object): + """The Base Transport Adapter""" + + def __init__(self): + super(BaseAdapter, self).__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(HTTPAdapter, self).__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, strict=True, **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 IOError("Could not find a suitable TLS CA certificate bundle, " + "invalid path: {}".format(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 IOError("Could not find the TLS certificate file, " + "invalid path: {}".format(conn.cert_file)) + if conn.key_file and not os.path.exists(conn.key_file): + raise IOError("Could not find the TLS key file, " + "invalid path: {}".format(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 get_connection(self, url, proxies=None): + """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 + """ + 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 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(request.url, proxies) + 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 as e: + # this may raise a string formatting error. + err = ("Invalid timeout {}. Pass a (connect, read) " + "timeout tuple, or a single float to set " + "both timeouts to the same value".format(timeout)) + raise ValueError(err) + elif isinstance(timeout, TimeoutSauce): + pass + else: + timeout = TimeoutSauce(connect=timeout, read=timeout) + + try: + if not chunked: + 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 + ) + + # Send the request. + else: + if hasattr(conn, 'proxy_pool'): + conn = conn.proxy_pool + + low_conn = conn._get_conn(timeout=DEFAULT_POOL_TIMEOUT) + + try: + low_conn.putrequest(request.method, + url, + skip_accept_encoding=True) + + for header, value in request.headers.items(): + low_conn.putheader(header, value) + + low_conn.endheaders() + + for i in request.body: + low_conn.send(hex(len(i))[2:].encode('utf-8')) + low_conn.send(b'\r\n') + low_conn.send(i) + low_conn.send(b'\r\n') + low_conn.send(b'0\r\n\r\n') + + # Receive the response from the server + try: + # For Python 2.7, use buffering of HTTP responses + r = low_conn.getresponse(buffering=True) + except TypeError: + # For compatibility with Python 3.3+ + r = low_conn.getresponse() + + resp = HTTPResponse.from_httplib( + r, + pool=conn, + connection=low_conn, + preload_content=False, + decode_content=False + ) + except: + # If we hit any problems here, clean up the connection. + # Then, reraise so that we can handle the actual exception. + low_conn.close() + raise + + except (ProtocolError, socket.error) 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) + else: + raise + + return self.build_response(request, resp) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/api.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/api.py new file mode 100644 index 00000000..abada96d --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/api.py @@ -0,0 +1,158 @@ +# -*- coding: utf-8 -*- + +""" +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. + :param url: URL for the new :class:`Request` object. + :param params: (optional) Dictionary, list of tuples or bytes to send + in the body of 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') + <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 body of the :class:`Request`. + :param \*\*kwargs: Optional arguments that ``request`` takes. + :return: :class:`Response <Response>` object + :rtype: requests.Response + """ + + kwargs.setdefault('allow_redirects', True) + 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 + """ + + kwargs.setdefault('allow_redirects', True) + 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. + :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) json data 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) json data 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) json data 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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/auth.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/auth.py new file mode 100644 index 00000000..bdde51c7 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/auth.py @@ -0,0 +1,305 @@ +# -*- coding: utf-8 -*- + +""" +requests.auth +~~~~~~~~~~~~~ + +This module contains the authentication handlers for Requests. +""" + +import os +import re +import time +import hashlib +import threading +import warnings + +from base64 import b64encode + +from .compat import urlparse, str, basestring +from .cookies import extract_cookies_to_jar +from ._internal_utils import to_native_string +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(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(object): + """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("%s:%s" % (s, d)) + + 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 += '?' + p_parsed.query + + A1 = '%s:%s:%s' % (self.username, realm, self.password) + A2 = '%s:%s' % (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 = '%08x' % self._thread_local.nonce_count + 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('%s:%s:%s' % (HA1, nonce, cnonce)) + + if not qop: + respdig = KD(HA1, "%s:%s" % (nonce, HA2)) + elif qop == 'auth' or 'auth' in qop.split(','): + noncebit = "%s:%s:%s:%s:%s" % ( + 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 = 'username="%s", realm="%s", nonce="%s", uri="%s", ' \ + 'response="%s"' % (self.username, realm, nonce, path, respdig) + if opaque: + base += ', opaque="%s"' % opaque + if algorithm: + base += ', algorithm="%s"' % algorithm + if entdig: + base += ', digest="%s"' % entdig + if qop: + base += ', qop="auth", nc=%s, cnonce="%s"' % (ncvalue, cnonce) + + return 'Digest %s' % (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/requests/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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/certs.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/certs.py new file mode 100644 index 00000000..06a594e5 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/certs.py @@ -0,0 +1,18 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +""" +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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/compat.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/compat.py new file mode 100644 index 00000000..6a86893d --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/compat.py @@ -0,0 +1,74 @@ +# -*- coding: utf-8 -*- + +""" +requests.compat +~~~~~~~~~~~~~~~ + +This module handles import compatibility issues between Python 2 and +Python 3. +""" + +from pip._vendor import chardet + +import sys + +# ------- +# 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. +# try: +# import simplejson as json +# except (ImportError, SyntaxError): +# # simplejson does not support Python 3.2, it throws a SyntaxError +# # because of u'...' Unicode literals. +import json + +# --------- +# Specifics +# --------- + +if is_py2: + from urllib import ( + quote, unquote, quote_plus, unquote_plus, urlencode, getproxies, + proxy_bypass, proxy_bypass_environment, getproxies_environment) + from urlparse import urlparse, urlunparse, urljoin, urlsplit, urldefrag + from urllib2 import parse_http_list + import cookielib + from Cookie import Morsel + from StringIO import StringIO + from collections import Callable, Mapping, MutableMapping, OrderedDict + + + builtin_str = str + bytes = str + str = unicode + basestring = basestring + numeric_types = (int, long, float) + integer_types = (int, long) + +elif is_py3: + from urllib.parse import urlparse, urlunparse, urljoin, urlsplit, urlencode, quote, unquote, quote_plus, unquote_plus, urldefrag + from urllib.request import parse_http_list, getproxies, proxy_bypass, proxy_bypass_environment, getproxies_environment + from http import cookiejar as cookielib + from http.cookies import Morsel + from io import StringIO + from collections import OrderedDict + from collections.abc import Callable, Mapping, MutableMapping + + builtin_str = str + str = str + bytes = bytes + basestring = (str, bytes) + numeric_types = (int, float) + integer_types = (int,) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/cookies.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/cookies.py new file mode 100644 index 00000000..56fccd9c --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/cookies.py @@ -0,0 +1,549 @@ +# -*- coding: utf-8 -*- + +""" +requests.cookies +~~~~~~~~~~~~~~~~ + +Compatibility code to be able to use `cookielib.CookieJar` with requests. + +requests.utils imports from here, so be careful with imports. +""" + +import copy +import time +import calendar + +from ._internal_utils import to_native_string +from .compat import cookielib, urlparse, urlunparse, Morsel, MutableMapping + +try: + import threading +except ImportError: + import dummy_threading as threading + + +class MockRequest(object): + """Wraps a `requests.Request` to mimic a `urllib2.Request`. + + The code in `cookielib.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): + """cookielib 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(object): + """Wraps a `httplib.HTTPMessage` to mimic a `urllib.addinfourl`. + + ...what? Basically, expose the parsed HTTP headers from the server response + the way `cookielib` expects to see them. + """ + + def __init__(self, headers): + """Make a MockResponse for `cookielib` 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: cookielib.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 cookielib.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(RequestsCookieJar, self).__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 ``cookielib.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(RequestsCookieJar, self).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(RequestsCookieJar, self).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('name=%r, domain=%r, path=%r' % (name, domain, path)) + + 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('There are multiple cookies with name, %r' % (name)) + toReturn = cookie.value # we will eventually return this as long as no cookie conflict + + if toReturn: + return toReturn + raise KeyError('name=%r, domain=%r, path=%r' % (name, domain, path)) + + 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: + err = 'create_cookie() got unexpected keyword arguments: %s' + raise TypeError(err % 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('max-age: %s must be integer' % morsel['max-age']) + 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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/exceptions.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/exceptions.py new file mode 100644 index 00000000..a91e1fd1 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/exceptions.py @@ -0,0 +1,126 @@ +# -*- coding: utf-8 -*- + +""" +requests.exceptions +~~~~~~~~~~~~~~~~~~~ + +This module contains the set of Requests' exceptions. +""" +from pip._vendor.urllib3.exceptions import HTTPError as BaseHTTPError + + +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(RequestException, self).__init__(*args, **kwargs) + + +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 schema (e.g. http or https) is missing.""" + + +class InvalidSchema(RequestException, ValueError): + """See defaults.py for valid schemas.""" + + +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.""" + pass + + +class FileModeWarning(RequestsWarning, DeprecationWarning): + """A file was opened in text mode, but Requests determined its binary length.""" + pass + + +class RequestsDependencyWarning(RequestsWarning): + """An imported dependency doesn't match the expected version range.""" + pass diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/help.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/help.py new file mode 100644 index 00000000..3c3072ba --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/help.py @@ -0,0 +1,119 @@ +"""Module containing bug report helper(s).""" +from __future__ import print_function + +import json +import platform +import sys +import ssl + +from pip._vendor import idna +from pip._vendor import urllib3 +from pip._vendor import chardet + +from . import __version__ as requests_version + +try: + from pip._vendor.urllib3.contrib import pyopenssl +except ImportError: + pyopenssl = None + OpenSSL = None + cryptography = None +else: + import OpenSSL + import cryptography + + +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 2.7.5 it will return + {'name': 'CPython', 'version': '2.7.5'}. + + 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 = '%s.%s.%s' % (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 IOError: + platform_info = { + 'system': 'Unknown', + 'release': 'Unknown', + } + + implementation_info = _implementation() + urllib3_info = {'version': urllib3.__version__} + chardet_info = {'version': chardet.__version__} + + pyopenssl_info = { + 'version': None, + 'openssl_version': '', + } + if OpenSSL: + pyopenssl_info = { + 'version': OpenSSL.__version__, + 'openssl_version': '%x' % OpenSSL.SSL.OPENSSL_VERSION_NUMBER, + } + cryptography_info = { + 'version': getattr(cryptography, '__version__', ''), + } + idna_info = { + 'version': getattr(idna, '__version__', ''), + } + + system_ssl = ssl.OPENSSL_VERSION_NUMBER + system_ssl_info = { + 'version': '%x' % system_ssl 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, + 'pyOpenSSL': pyopenssl_info, + 'urllib3': urllib3_info, + 'chardet': chardet_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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/hooks.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/hooks.py new file mode 100644 index 00000000..7a51f212 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/hooks.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- + +""" +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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/models.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/models.py new file mode 100644 index 00000000..08399574 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/models.py @@ -0,0 +1,953 @@ +# -*- coding: utf-8 -*- + +""" +requests.models +~~~~~~~~~~~~~~~ + +This module contains the primary objects that power Requests. +""" + +import datetime +import sys + +# 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/requests/requests/issues/3578. +import encodings.idna + +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 pip._vendor.urllib3.exceptions import ( + DecodeError, ReadTimeoutError, ProtocolError, LocationParseError) + +from io import UnsupportedOperation +from .hooks import default_hooks +from .structures import CaseInsensitiveDict + +from .auth import HTTPBasicAuth +from .cookies import cookiejar_from_dict, get_cookie_header, _copy_cookie_jar +from .exceptions import ( + HTTPError, MissingSchema, InvalidURL, ChunkedEncodingError, + ContentDecodingError, ConnectionError, StreamConsumedError) +from ._internal_utils import to_native_string, unicode_is_ascii +from .utils import ( + guess_filename, get_auth_from_url, requote_uri, + stream_decode_response_unicode, to_key_val_list, parse_header_links, + iter_slices, guess_json_utf, super_len, check_header_validity) +from .compat import ( + Callable, Mapping, + cookielib, urlunparse, urlsplit, urlencode, str, bytes, + is_py2, chardet, builtin_str, basestring) +from .compat import json as complexjson +from .status_codes import codes + +#: 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(object): + @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(object): + def register_hook(self, event, hook): + """Properly register a hook.""" + + if event not in self.hooks: + raise ValueError('Unsupported event specified, with event name "%s"' % (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 '<Request [%s]>' % (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. + + Generated from either a :class:`Request <Request>` object or manually. + + Usage:: + + >>> import requests + >>> req = requests.Request('GET', 'https://httpbin.org/get') + >>> r = req.prepare() + <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 '<PreparedRequest [%s]>' % (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/requests/requests/pull/2238 + if isinstance(url, bytes): + url = url.decode('utf8') + else: + url = unicode(url) if is_py2 else 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: + error = ("Invalid URL {0!r}: No schema supplied. Perhaps you meant http://{0}?") + error = error.format(to_native_string(url, 'utf8')) + + raise MissingSchema(error) + + if not host: + raise InvalidURL("Invalid URL %r: No host supplied" % url) + + # 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(u'*'): + raise InvalidURL('URL has an invalid label.') + + # Carefully reconstruct the network location + netloc = auth or '' + if netloc: + netloc += '@' + netloc += host + if port: + netloc += ':' + str(port) + + # Bare domains aren't valid URLs. + if not path: + path = '/' + + if is_py2: + if isinstance(scheme, str): + scheme = scheme.encode('utf-8') + if isinstance(netloc, str): + netloc = netloc.encode('utf-8') + if isinstance(path, str): + path = path.encode('utf-8') + if isinstance(query, str): + query = query.encode('utf-8') + if isinstance(fragment, str): + fragment = fragment.encode('utf-8') + + if isinstance(params, (str, bytes)): + params = to_native_string(params) + + enc_params = self._encode_params(params) + if enc_params: + if query: + query = '%s&%s' % (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' + body = complexjson.dumps(json) + if not isinstance(body, bytes): + body = body.encode('utf-8') + + is_stream = all([ + hasattr(data, '__iter__'), + not isinstance(data, (basestring, list, tuple, Mapping)) + ]) + + try: + length = super_len(data) + except (TypeError, AttributeError, UnsupportedOperation): + length = None + + if is_stream: + 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 (IOError, 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(object): + """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 '<Response [%s]>' % (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 chardet library.""" + return chardet.detect(self.content)['encoding'] + + 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: + for chunk in self.raw.stream(chunk_size, decode_content=True): + yield chunk + except ProtocolError as e: + raise ChunkedEncodingError(e) + except DecodeError as e: + raise ContentDecodingError(e) + except ReadTimeoutError as e: + raise ConnectionError(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("chunk_size must be an int, it is instead a %s." % 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 + + for line in lines: + yield line + + 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 + ``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 str('') + + # 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"""Returns the json-encoded content of a response, if any. + + :param \*\*kwargs: Optional arguments that ``json.loads`` takes. + :raises ValueError: 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 chardet 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 + return complexjson.loads(self.text, **kwargs) + + @property + def links(self): + """Returns the parsed header links of the response, if any.""" + + header = self.headers.get('link') + + # l = MultiDict() + l = {} + + if header: + links = parse_header_links(header) + + for link in links: + key = link.get('rel') or link.get('url') + l[key] = link + + return l + + def raise_for_status(self): + """Raises stored :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 = u'%s Client Error: %s for url: %s' % (self.status_code, reason, self.url) + + elif 500 <= self.status_code < 600: + http_error_msg = u'%s Server Error: %s for url: %s' % (self.status_code, reason, 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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/packages.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/packages.py new file mode 100644 index 00000000..9582fa73 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/packages.py @@ -0,0 +1,16 @@ +import sys + +# This code exists for backwards compatibility reasons. +# I don't like it either. Just look the other way. :) + +for package in ('urllib3', 'idna', 'chardet'): + 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] + +# Kinda cool, though, right? diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/sessions.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/sessions.py new file mode 100644 index 00000000..d73d700f --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/sessions.py @@ -0,0 +1,770 @@ +# -*- coding: utf-8 -*- + +""" +requests.session +~~~~~~~~~~~~~~~~ + +This module provides a Session object to manage and persist settings across +requests (cookies, auth, proxies). +""" +import os +import sys +import time +from datetime import timedelta + +from .auth import _basic_auth_str +from .compat import cookielib, is_py3, OrderedDict, urljoin, urlparse, Mapping +from .cookies import ( + cookiejar_from_dict, extract_cookies_to_jar, RequestsCookieJar, merge_cookies) +from .models import Request, PreparedRequest, DEFAULT_REDIRECT_LIMIT +from .hooks import default_hooks, dispatch_hook +from ._internal_utils import to_native_string +from .utils import to_key_val_list, default_headers, DEFAULT_PORTS +from .exceptions import ( + TooManyRedirects, InvalidSchema, ChunkedEncodingError, ContentDecodingError) + +from .structures import CaseInsensitiveDict +from .adapters import HTTPAdapter + +from .utils import ( + requote_uri, get_environ_proxies, get_netrc_auth, should_bypass_proxies, + get_auth_from_url, rewind_body +) + +from .status_codes import codes + +# formerly defined here, reexposed here for backward compatibility +from .models import REDIRECT_STATI + +# Preferred clock, based on which one is more accurate on a given system. +if sys.platform == 'win32': + try: # Python 3.4+ + preferred_clock = time.perf_counter + except AttributeError: # Earlier than Python 3. + preferred_clock = time.clock +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(object): + + 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. + if is_py3: + 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('Exceeded %s redirects.' % self.max_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 = '%s:%s' % (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/requests/requests/issues/1084 + if resp.status_code not in (codes.temporary_redirect, codes.permanent_redirect): + # https://github.com/requests/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 + try: + del headers['Cookie'] + except KeyError: + pass + + # 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) + + return + + 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 + """ + proxies = proxies if proxies is not None else {} + headers = prepared_request.headers + url = prepared_request.url + scheme = urlparse(url).scheme + new_proxies = proxies.copy() + no_proxy = proxies.get('no_proxy') + + bypass_proxy = should_bypass_proxies(url, no_proxy=no_proxy) + if self.trust_env and not bypass_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) + + 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 + + if 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', 'prefetch', '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. + 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 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 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 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``. + :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) + kwargs.setdefault('proxies', self.proxies) + + # 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) + + # Redirect resolving generator. + gen = self.resolve_redirects(r, request, **kwargs) + + # Resolve redirects if allowed. + history = [resp for resp in gen] if allow_redirects else [] + + # 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')) + + # 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 {'verify': verify, 'proxies': proxies, 'stream': stream, + '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("No connection adapters were found for '%s'" % url) + + 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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/status_codes.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/status_codes.py new file mode 100644 index 00000000..813e8c4e --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/status_codes.py @@ -0,0 +1,120 @@ +# -*- coding: utf-8 -*- + +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. + +>>> 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',), + 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',), # These 2 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',), + 414: ('request_uri_too_large',), + 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'), + 423: ('locked',), + 424: ('failed_dependency', 'dependency'), + 425: ('unordered_collection', 'unordered'), + 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('``%s``' % 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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/structures.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/structures.py new file mode 100644 index 00000000..da930e28 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/structures.py @@ -0,0 +1,103 @@ +# -*- coding: utf-8 -*- + +""" +requests.structures +~~~~~~~~~~~~~~~~~~~ + +Data structures that power Requests. +""" + +from .compat import OrderedDict, 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(LookupDict, self).__init__() + + def __repr__(self): + return '<lookup \'%s\'>' % (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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/utils.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/utils.py new file mode 100644 index 00000000..8170a8d2 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/requests/utils.py @@ -0,0 +1,977 @@ +# -*- coding: utf-8 -*- + +""" +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 .__version__ import __version__ +from . import certs +# to_native_string is unused here, but imported here for backwards compatibility +from ._internal_utils import to_native_string +from .compat import parse_http_list as _parse_list_header +from .compat import ( + quote, urlparse, bytes, str, OrderedDict, unquote, getproxies, + proxy_bypass, urlunparse, basestring, integer_types, is_py3, + proxy_bypass_environment, getproxies_environment, Mapping) +from .cookies import cookiejar_from_dict +from .structures import CaseInsensitiveDict +from .exceptions import ( + InvalidURL, InvalidHeader, FileModeWarning, UnrewindableBodyError) + +NETRC_FILES = ('.netrc', '_netrc') + +DEFAULT_CA_BUNDLE_PATH = certs.where() + +DEFAULT_PORTS = {'http': 80, 'https': 443} + + +if sys.platform == 'win32': + # provide a proxy_bypass version on Windows without DNS lookups + + def proxy_bypass_registry(host): + try: + if is_py3: + import winreg + else: + import _winreg as 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: + 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(';') + # 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 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: + 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, IOError): + # 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 useable 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, IOError): + 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.""" + + try: + from netrc import netrc, NetrcParseError + + netrc_path = None + + for f in NETRC_FILES: + try: + loc = os.path.expanduser('~/{}'.format(f)) + except KeyError: + # os.path.expanduser can fail when $HOME is undefined and + # getpwuid fails. See https://bugs.python.org/issue20164 & + # https://github.com/requests/requests/issues/1846 + return + + 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) + + # Strip port numbers from netloc. This weird `if...encode`` dance is + # used for Python 3.2, which doesn't support unicode literals. + splitstr = b':' + if isinstance(url, str): + splitstr = splitstr.decode('ascii') + host = ri.netloc.split(splitstr)[0] + + 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, IOError): + # 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 + + # AppEngine 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) + 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('/')) + if not os.path.exists(extracted_path): + extracted_path = zip_file.extract(member, path=tmp) + + return extracted_path + + +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') + 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') + 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 = {} + + for cookie in cj: + cookie_dict[cookie.name] = cookie.value + + 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' + + +def stream_decode_response_unicode(iterator, r): + """Stream decodes a iterator.""" + + if r.encoding is None: + for item in iterator: + yield item + 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("Invalid percent-escape sequence: '%s'" % h) + + if c in UNRESERVED_SET: + parts[i] = c + parts[i][2:] + else: + parts[i] = '%' + parts[i] + else: + parts[i] = '%' + 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 socket.error: + 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 socket.error: + 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). + get_proxy = lambda k: os.environ.get(k) or os.environ.get(k.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 += ':{}'.format(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 default_user_agent(name="python-requests"): + """ + Return a string representing the default user agent. + + :rtype: str + """ + return '%s/%s' % (name, __version__) + + +def default_headers(): + """ + :rtype: requests.structures.CaseInsensitiveDict + """ + return CaseInsensitiveDict({ + 'User-Agent': default_user_agent(), + 'Accept-Encoding': ', '.join(('gzip', 'deflate')), + '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 + """ + scheme, netloc, path, params, query, fragment = urlparse(url, new_scheme) + + # urlparse is a finicky beast, and sometimes decides that there isn't a + # netloc present. Assume that it's being over-cautious, and switch netloc + # and path if urlparse decided there was no netloc. + if not netloc: + netloc, path = path, netloc + + return urlunparse((scheme, netloc, path, params, 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 + + +# Moved outside of function to avoid recompile every call +_CLEAN_HEADER_REGEX_BYTE = re.compile(b'^\\S[^\\r\\n]*$|^$') +_CLEAN_HEADER_REGEX_STR = re.compile(r'^\S[^\r\n]*$|^$') + + +def check_header_validity(header): + """Verifies that header value is a string which doesn't contain + leading whitespace or return characters. This prevents unintended + header injection. + + :param header: tuple, in the format (name, value). + """ + name, value = header + + if isinstance(value, bytes): + pat = _CLEAN_HEADER_REGEX_BYTE + else: + pat = _CLEAN_HEADER_REGEX_STR + try: + if not pat.match(value): + raise InvalidHeader("Invalid return character or leading space in header: %s" % name) + except TypeError: + raise InvalidHeader("Value for header {%s: %s} must be of type str or " + "bytes, not %s" % (name, value, type(value))) + + +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 (IOError, 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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/retrying.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/retrying.py new file mode 100644 index 00000000..6d1e627a --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/retrying.py @@ -0,0 +1,267 @@ +## Copyright 2013-2014 Ray Holder +## +## 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 random +from pip._vendor import six +import sys +import time +import traceback + + +# sys.maxint / 2, since Python 3.2 doesn't have a sys.maxint... +MAX_WAIT = 1073741823 + + +def retry(*dargs, **dkw): + """ + Decorator function that instantiates the Retrying object + @param *dargs: positional arguments passed to Retrying object + @param **dkw: keyword arguments passed to the Retrying object + """ + # support both @retry and @retry() as valid syntax + if len(dargs) == 1 and callable(dargs[0]): + def wrap_simple(f): + + @six.wraps(f) + def wrapped_f(*args, **kw): + return Retrying().call(f, *args, **kw) + + return wrapped_f + + return wrap_simple(dargs[0]) + + else: + def wrap(f): + + @six.wraps(f) + def wrapped_f(*args, **kw): + return Retrying(*dargs, **dkw).call(f, *args, **kw) + + return wrapped_f + + return wrap + + +class Retrying(object): + + def __init__(self, + stop=None, wait=None, + stop_max_attempt_number=None, + stop_max_delay=None, + wait_fixed=None, + wait_random_min=None, wait_random_max=None, + wait_incrementing_start=None, wait_incrementing_increment=None, + wait_exponential_multiplier=None, wait_exponential_max=None, + retry_on_exception=None, + retry_on_result=None, + wrap_exception=False, + stop_func=None, + wait_func=None, + wait_jitter_max=None): + + self._stop_max_attempt_number = 5 if stop_max_attempt_number is None else stop_max_attempt_number + self._stop_max_delay = 100 if stop_max_delay is None else stop_max_delay + self._wait_fixed = 1000 if wait_fixed is None else wait_fixed + self._wait_random_min = 0 if wait_random_min is None else wait_random_min + self._wait_random_max = 1000 if wait_random_max is None else wait_random_max + self._wait_incrementing_start = 0 if wait_incrementing_start is None else wait_incrementing_start + self._wait_incrementing_increment = 100 if wait_incrementing_increment is None else wait_incrementing_increment + self._wait_exponential_multiplier = 1 if wait_exponential_multiplier is None else wait_exponential_multiplier + self._wait_exponential_max = MAX_WAIT if wait_exponential_max is None else wait_exponential_max + self._wait_jitter_max = 0 if wait_jitter_max is None else wait_jitter_max + + # TODO add chaining of stop behaviors + # stop behavior + stop_funcs = [] + if stop_max_attempt_number is not None: + stop_funcs.append(self.stop_after_attempt) + + if stop_max_delay is not None: + stop_funcs.append(self.stop_after_delay) + + if stop_func is not None: + self.stop = stop_func + + elif stop is None: + self.stop = lambda attempts, delay: any(f(attempts, delay) for f in stop_funcs) + + else: + self.stop = getattr(self, stop) + + # TODO add chaining of wait behaviors + # wait behavior + wait_funcs = [lambda *args, **kwargs: 0] + if wait_fixed is not None: + wait_funcs.append(self.fixed_sleep) + + if wait_random_min is not None or wait_random_max is not None: + wait_funcs.append(self.random_sleep) + + if wait_incrementing_start is not None or wait_incrementing_increment is not None: + wait_funcs.append(self.incrementing_sleep) + + if wait_exponential_multiplier is not None or wait_exponential_max is not None: + wait_funcs.append(self.exponential_sleep) + + if wait_func is not None: + self.wait = wait_func + + elif wait is None: + self.wait = lambda attempts, delay: max(f(attempts, delay) for f in wait_funcs) + + else: + self.wait = getattr(self, wait) + + # retry on exception filter + if retry_on_exception is None: + self._retry_on_exception = self.always_reject + else: + self._retry_on_exception = retry_on_exception + + # TODO simplify retrying by Exception types + # retry on result filter + if retry_on_result is None: + self._retry_on_result = self.never_reject + else: + self._retry_on_result = retry_on_result + + self._wrap_exception = wrap_exception + + def stop_after_attempt(self, previous_attempt_number, delay_since_first_attempt_ms): + """Stop after the previous attempt >= stop_max_attempt_number.""" + return previous_attempt_number >= self._stop_max_attempt_number + + def stop_after_delay(self, previous_attempt_number, delay_since_first_attempt_ms): + """Stop after the time from the first attempt >= stop_max_delay.""" + return delay_since_first_attempt_ms >= self._stop_max_delay + + def no_sleep(self, previous_attempt_number, delay_since_first_attempt_ms): + """Don't sleep at all before retrying.""" + return 0 + + def fixed_sleep(self, previous_attempt_number, delay_since_first_attempt_ms): + """Sleep a fixed amount of time between each retry.""" + return self._wait_fixed + + def random_sleep(self, previous_attempt_number, delay_since_first_attempt_ms): + """Sleep a random amount of time between wait_random_min and wait_random_max""" + return random.randint(self._wait_random_min, self._wait_random_max) + + def incrementing_sleep(self, previous_attempt_number, delay_since_first_attempt_ms): + """ + Sleep an incremental amount of time after each attempt, starting at + wait_incrementing_start and incrementing by wait_incrementing_increment + """ + result = self._wait_incrementing_start + (self._wait_incrementing_increment * (previous_attempt_number - 1)) + if result < 0: + result = 0 + return result + + def exponential_sleep(self, previous_attempt_number, delay_since_first_attempt_ms): + exp = 2 ** previous_attempt_number + result = self._wait_exponential_multiplier * exp + if result > self._wait_exponential_max: + result = self._wait_exponential_max + if result < 0: + result = 0 + return result + + def never_reject(self, result): + return False + + def always_reject(self, result): + return True + + def should_reject(self, attempt): + reject = False + if attempt.has_exception: + reject |= self._retry_on_exception(attempt.value[1]) + else: + reject |= self._retry_on_result(attempt.value) + + return reject + + def call(self, fn, *args, **kwargs): + start_time = int(round(time.time() * 1000)) + attempt_number = 1 + while True: + try: + attempt = Attempt(fn(*args, **kwargs), attempt_number, False) + except: + tb = sys.exc_info() + attempt = Attempt(tb, attempt_number, True) + + if not self.should_reject(attempt): + return attempt.get(self._wrap_exception) + + delay_since_first_attempt_ms = int(round(time.time() * 1000)) - start_time + if self.stop(attempt_number, delay_since_first_attempt_ms): + if not self._wrap_exception and attempt.has_exception: + # get() on an attempt with an exception should cause it to be raised, but raise just in case + raise attempt.get() + else: + raise RetryError(attempt) + else: + sleep = self.wait(attempt_number, delay_since_first_attempt_ms) + if self._wait_jitter_max: + jitter = random.random() * self._wait_jitter_max + sleep = sleep + max(0, jitter) + time.sleep(sleep / 1000.0) + + attempt_number += 1 + + +class Attempt(object): + """ + An Attempt encapsulates a call to a target function that may end as a + normal return value from the function or an Exception depending on what + occurred during the execution. + """ + + def __init__(self, value, attempt_number, has_exception): + self.value = value + self.attempt_number = attempt_number + self.has_exception = has_exception + + def get(self, wrap_exception=False): + """ + Return the return value of this Attempt instance or raise an Exception. + If wrap_exception is true, this Attempt is wrapped inside of a + RetryError before being raised. + """ + if self.has_exception: + if wrap_exception: + raise RetryError(self) + else: + six.reraise(self.value[0], self.value[1], self.value[2]) + else: + return self.value + + def __repr__(self): + if self.has_exception: + return "Attempts: {0}, Error:\n{1}".format(self.attempt_number, "".join(traceback.format_tb(self.value[2]))) + else: + return "Attempts: {0}, Value: {1}".format(self.attempt_number, self.value) + + +class RetryError(Exception): + """ + A RetryError encapsulates the last Attempt instance right before giving up. + """ + + def __init__(self, last_attempt): + self.last_attempt = last_attempt + + def __str__(self): + return "RetryError[{0}]".format(self.last_attempt) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/six.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/six.py new file mode 100644 index 00000000..89b2188f --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/six.py @@ -0,0 +1,952 @@ +# Copyright (c) 2010-2018 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.12.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 + + +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 __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 + +_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("copyreg", "copy_reg"), + MovedModule("dbm_gnu", "gdbm", "dbm.gnu"), + MovedModule("_dummy_thread", "dummy_thread", "_dummy_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 + _assertCountEqual = "assertCountEqual" + if sys.version_info[1] <= 1: + _assertRaisesRegex = "assertRaisesRegexp" + _assertRegex = "assertRegexpMatches" + else: + _assertRaisesRegex = "assertRaisesRegex" + _assertRegex = "assertRegex" +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" +_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) + + +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, 2): + exec_("""def raise_from(value, from_value): + try: + if from_value is None: + raise value + raise value from from_value + finally: + value = None +""") +elif sys.version_info[:2] > (3, 2): + 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): + def wraps(wrapped, assigned=functools.WRAPPER_ASSIGNMENTS, + updated=functools.WRAPPER_UPDATES): + def wrapper(f): + f = functools.wraps(wrapped, assigned, updated)(f) + f.__wrapped__ = wrapped + return f + return wrapper +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): + return meta(name, 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, text_type): + return s.encode(encoding, errors) + elif isinstance(s, binary_type): + return s + else: + 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` + """ + if not isinstance(s, (text_type, binary_type)): + raise TypeError("not expecting type '%s'" % type(s)) + if PY2 and isinstance(s, text_type): + s = s.encode(encoding, errors) + elif PY3 and isinstance(s, binary_type): + s = s.decode(encoding, errors) + 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 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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/__init__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/__init__.py new file mode 100644 index 00000000..148a9c31 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/__init__.py @@ -0,0 +1,92 @@ +""" +urllib3 - Thread-safe connection pooling and re-using. +""" + +from __future__ import absolute_import +import warnings + +from .connectionpool import ( + HTTPConnectionPool, + HTTPSConnectionPool, + connection_from_url +) + +from . import exceptions +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.url import get_host +from .util.timeout import Timeout +from .util.retry import Retry + + +# Set default logging handler to avoid "No handler found" warnings. +import logging +from logging import NullHandler + +__author__ = 'Andrey Petrov (andrey.petrov@shazow.net)' +__license__ = 'MIT' +__version__ = '1.24.1' + +__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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..672d4cd13823b39e7ca3ff341c102ae75ff73860 GIT binary patch literal 2152 zcma)7OK%%D5Z;F#tJTBrxVHOPCvj}Gv7FbTXoDhY+SCCO!-yTUU|TFGk&;#+cQ;(F z6A8}AMQ{BRz4g)`#A{Fa3q5tnl@d2;fG)A4nOV+oIP=ZuX0z%4^k?Vi-+jya%R2Y8 zfWHH8cFVRbVj+vz#9=mfkYj7!WiE0_iIiE1mr<ElP=!}f6~2{7g?YS&YKE^epVv{{ z@E&XMCTj8)YVkQVXLL0-&lk{w;eEEqm(Y^o>ui~?pcTV6*ag0dRt?`|AMiD_2E2}8 z9j(J}i>>nwv;n#~^dXr?ACU$0F}Z?1q3ff7Zl2kri*)16I<svHG?)4|3CP+nHoE-d z26abUWRuoLSI9+j={Fa4Xw7BNY`>$~c}LTJt*MPZ1;1Nl1N?qQ+#{>KJ^9?v1!Gb7 zX0RI^4+X_!H^Y4z^pZHHJsBl&kR}O>;z5985(v7RXCQR^SGo{wTg~BamatsXFyd(< z<iRT_hShe};{NgR;l0;x4#A6B(z>I!m2b`p`y$~XL<Ej~`l3fu9YF@t8jX7ip&`$i zj8ZIQ*iQr}SYkM;uAM)^F&<E%8iyizF`h}SR7>amHgpV+X_kUx3Z5GrKc(RiZcc?h z$s14^4wFm*Up<aEO>)haA5$sDz|;?N#`Yl@jEc$5-IxeE4i4dCauV!-8pKX>s# zPm<@In98<tA3ZppRIYb!-0EBxB}kDdYf{q$fNhC}Ci9xi0Z|K>kT8=Fln7ZefSZYm z*3XkD!(B$h=UBv0iA;FfM)!hfYElQ%(>2hKJALoLZ+0Juv_`gc&g_>qaPFD)(m8cT zCE&}%K7(ajr}n6F3Ofu}JvER7oktw7gT^{_066aCS3iJfpR$yS0BR9D%cI^?HVz<e zgO=b(0-X3XQ-MqZIix{xl}_*^qy3y|L*s|gZax?oU>O;bor^d#Cc`4v0q#pUYU)0c z9kX$=wY7sY04k^LEZEv%^n|h)PbE&X3_#J&CRgtgLP>ywBBdq{9p=nAgja<2MX;5% zYpSXx*q~|vhleKr$_qp7ISf_vUw2cDjLQ1}M=T*iReQtw5bZPp%7aZ0b#$t1ZVR|A zn`l*~I9XMv!Te!~O(@mhU+zhs?xj(>+sz|JcCS4fc9Uy2h*p_5JfSg3#NM=p_rfrW zBN>LBbS##@!!2EPjSQ>i+nzmd`>-0es$ljUkF#Sya|Nd<I8jwX`xtubHF7k9G<pnj zG%Pi8hz)qq!?nP`?e}4zz^H)%W5H~~%n(~tPF12ooCtc*c9b{!1gV5E!e~EYkV=Tp z>tRU;i5Q!d6yzdABbI^u0B`01u}baM|7a?c6w^k={J%P<eN|P%kR&~*vLA;19B>E~ z7y1;j4Merxj4M4E&mC*}(-Kv^%Yz%x6sCwdMAh|HUQDQSJ+FIJd15+@%m_e@Tt=)T z=(C)HwQgzT85N|_wE1+0hCGZWGcAxmHG&aU%#anZ6ARis+yduvm<YI0Jq%gYqcHdi z;RHq=3|J80(wH&0=ml-Ks>z17E`Rgw*H6AH61Srjb4Rq7i%5>YFXoS0Im){u_^Y_f z<N<WYOuhO5PJx~DkYNdJ&SxJMjt(9?iZcB#GE>#{NS+EsWi<ZZs<`rQ^MvG#ex+fV u9RMjg4cl{;D-8hkGQ87O^6Z9FvSGQF{k~Ol7v0v9Q(bfx9cT_`(ftPvuT2vG literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/__pycache__/_collections.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/__pycache__/_collections.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..58328fb5b32c2f6c7065f05f3d7dd5e82f10dfdb GIT binary patch literal 10639 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/__pycache__/connection.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/__pycache__/connection.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..965b6f5b3f2081874e28500c57f43736253cd056 GIT binary patch literal 10092 zcma)C+mG8;dgo2o(P%EdUt%+fomk0Oc4F_wb&{=}@i;N!j=i4AI$@G>DDh}S4Moa_ zl*dvvyNjI^3$)E5eJW5a+I=e8qR3NG6e!TYqCf$@6h-^uKKH5EhyK2g)MX~##g5IR z!*f61`M%$GIlMMMU;g6T`j-peSCs!!X8w*Le+y6aPpYE0imUocSG81?@|v$%8vp8+ z&cB9b@Ndq_;aB%_-Mm%k7Ohg&zHF6U!_E0~-HKH~nc?RB`EJ!(;Cuo3MQc%22FpCk zlC>n3I?L9P$4anbDB`F%*3x#$@^4gy{<)g9^r7Mw-O^WzTN20jb?eAyN}zqJ42t4} zbppLEpw~(C__wqNT9@59w4M{E(E3E$8mp-Ir@LpYGu^Y++3ri$OWkwUIbPAcf4*y4 zX7^?5Wqz;vuXJCvUhQ76E_5$i7rU=nuXSIyUgx?6|5CSR)i}TCztMfudQ(+|-dPcs z_f@OzF1gF@kzZ=o6`^&mx<}n(F0J@2tm%Y%5^Fjs-p2biyq|JU<NdT)K#5^hQF6vT zi;}aViWb-L{*rqR@8`sIynoL<@0wpJ*7wEIH>&(rT({m4-?Od<hPY;3ceM?r_VRN& z(3+YoIE^Uu`?0XSZZDMadQD4mLdsAkh1lzgupd9iF;i1L@}A+R`qAd*!__bdL^Jln z044KOvi7VgdQ{M)k;i}3^%kC}f<!2m>MGz56)Vt^$_Gv)Ha70B(QNBAJt^9D;B<v; zCuQ62hHl@de8sk(^c_E~`8!3<V<b-g@BJ%rw|AxI^)5I1p6_11`lQ_mufFY45kK}* z5xAke(wDyPHLhK0PF7v-4P*%eEz{aGBt@0qf9J(7Oerv4zbw<r<|v`vP8XWys#Las z<TRe~ob+BZlI3-=duYJqNLH|!o&wL39NXwOIw1UQKVAo^9y>Ddg6(8!V-UrnOHH#P z(6`!k;%3`!hfz$#OBPp!jJ=lEbYj7y)pE&_6gd8;!fv9@mf}g292plykq-jO2xpos zJ5fX}T9{49p7eq^Io^~4L)jU1ZBREB&*Ef(I_^rRXGdXkN5tTeGU}%M!W{IGa9knp zc+L3vLlD9H7qAKzZM5UKm*gmoy#FjH%JV#GpPxhW;<H&q&6KeKI>g?3vT�?GC0i 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 S|3o>xcxka)tP*bIwf_gj8gLW< literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/__pycache__/connectionpool.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/__pycache__/connectionpool.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0f946eadab7e0dc60bdb8313200d79e2e9c958f1 GIT binary patch literal 23614 zcmcJ1TW}j!njRWA0w4%d6h&Qaw`Iv9JQ5_!9?vY-mL*fNtr>~d>N1|e*a1Owg9HSi z>C+8KL_qJ>a5j6%dg9tl?d(=&bFFM;E2(5tl}hC)HMwpwwb_SUwklnzR8q;y<UKEb zNag$fbGiYLl-5<7P{Ki@`}FB^{`>9pYcn&2kN$q;<Kw@UNc@k)*k1<6SMl+G&q^em zgkyCQU8`zYJWh6!)ueo<sww$SSJU#Hsb=t<>SVi9)m%4UEtvk<YSu|Rna*^#SS@yE zsx#eEwbY%h&UWXjbKOJLL*4o6eD`qmaCf1)&^=N;(p{`Bc8^w%c8^t$VT`ns?Huo( zsGgAHsm{snsp=^?&UK#aK3{!aj`N)tx^~s>zF2*+d%AkM`%?9#?wRVD?%C?u?#tDe zrB9)AuDeuSlH=)4x%*1>6*(?;zS2EkJuk;IoeSMcwIau*&c*Jf>Lodz?Y!E(T)iyE zbDh_^uUB7}<3pXVcHgMJ(fwNWYu&F`zb@zIJ3rT5t}a^%_f-4m+izCibW`oO+$+0Q z^=<d+ZlZeay@YevS@?d!S-|g9^&L0aUcu-3X0mz%*N!-gxVGrN<1X!{tMB5>QRf)W z9CP1A@AsVJ&WZ0Qs_#1|om2R}=_KzZ%Fq3b2rOISY<=DLI{m<{wYpoL3RcU>Fykua zsc<T2bzQF?{0wMKlxM=(m5%4T&K=L|+>j14ca#@+jp%3TMt3XN9$lV)->o~Yx>Hwv ztGA(VnS0;!gO$yCZ^L!;nfY5@qaL)p-nZ(VzH0`)U4L@d4b-;&S-^9inB%#-81%lL zn7*33ckh-yDo&hVyxH^JMqjyi-B0?iAADF>J<KDVUv(d^c)gz6;8W#Jz+rC1RY9xS z!d&zua4zMyp5QBk+xu>LDl8E|we{_q-`I4!Za90r-|cRX#tKXC-@kun?Ds5x-y1t| z^jogNLtJO?g&Cf>@ucByaZ+LNox1Nv>%tUDW(~L9VAFGaoGJ2#yRN_GVU_rOq~+Hd z@v3T$^0u~I2Nw?cZcuBsI&N*t^III9z3aY@_0~28L$xi9B3#G_*l{prU|CLuxebi4 z3A}}=2dWb;tbTC!_O)9#tJmJSb)$A~<^3DCZ`{Kj`CF}~_X`A7gR~X>rEqW+AO9UR zZlY>A2}lGB(jZw)yBTo%jFWQG-?yq$PR7ZCLUYcPlf!r3$vXvn7o2IQi0^5k+)`K? z0hGix7!+*$5n^_ugN4~mPucZO#~#7M-a<$JyzTcJn|9ro8<wT>@>+$EoE&n^uJ;^! zqQe*#`OvkBjIr9_^7zMZepc}DD`<w6Uko4&cdhSPfi<*-iFR@~IZV`2L#v(MP2eaq z<nOGL07E8M2lK0*O)%U3mfH|2sg$SGG{y=Gwbs_7H#8EmhWgTil1#^Y?5c3OwnZM% zJ<_C8ATI5@ou>K<22h;Q?<dqHe0_24V$j{XxYgRau-<QVoC}ve*<AN7U3Pd%KD9?~ z&+*j7zUp*Z>#toL!I5CBY;A|RTCLS<1-05$4CoioB&@WROO~vHH8?s6%u3X^K{>)d zey8yfSRKQGV+DZ6uGJPO0aB@EYSBPt;jF*JmA-XWod+5f56b0qm=3nLTu!7{@4B_x zXqjb8UBsBOR^7acpW#%k<_D@)dmlf1K0U#?F7BJFbefndrz=zCT|-XGT9tvH@}zvN z=Jo;?&$@*h{3M!$H8{5KNv2anCWAiwj-OS;4*(*ui&Ksz1oAHVvq2eLPRkO*ocp9v z6F5xq=uy2BX64lS-qiz6?h_*H1B`2ypGzKqD&6bp>(_G`To>{u--%KXb|Z1P&KTGE z!bVQZudjDpJJ@uE4K?TR)@MOceGL=6&&dk>(u0LP@Y8^>R?9{8I=X>HYF*FiL(bL0 zVy*T`zuwW5LCiZ|10?ba`l)m5oD(^<((%=0p8G1BH`x3<8$NmrfMgm)8d6JWc+sCj zlS`+QX)B#9<Z|g;DwmO~4P1!-$QM`f@&5^$gG8ST(}%*(&9@5>erX)bzh>UaI#Upd z(@xIGL-ZA$7afQ}oSAWo&J50!oRTw(?^$QgIfU;yXWluC??cXla|GY>?qMh0Ogf9s zQQWoQ9CME2>=EaLa}wW+&MD_Pd>=JWeBOB;{rPOnp;>TVaBSRl%t?XpPKWdRC1iay zpGXJ|+}~7CA{YF66XG{kK!Rxz#9q%8sa7dysS90G@5-6wn1<e`)a%2xkUN6SmT&Ws z_6X(nl3UrR*rz)%7CICMr^}EA)MAd^>IGgrR3x-FgJ287Ymab;*dCt+#mQ(Eckt^^ zo5d=ZgXzJfXo20p!gk=<U%wR3CY}gq6|0ahH5*8tR%2{FD|LXxhhlT?1@)ls-)iC6 z7<ApWRlOxEZwgoWa@p?idZXSu7qAO;y6eQ#se>79%(&$UXfM86xnx64zFK+J9=rX| z0#kByrDFHIz+D~z6(>LFb++xto_gp5RrZ~2m@qy2a>c$+JPSFvkd}mMYoq5W!D!U& zwMm2-i*z*nJ+JZ51rD@9$njzGc|AuP0d5`YzSVPDk6I4o!5Dp-rvq9sgaEU;-RyYv zfPew|+zl5h=kaC>gTRRL1=i7%Xk$>K37sl!VV;l2q5;yw7yxar;o4p^rUau?EB&C= zsTdn;%{*kI^$7Uh_WE`gV2B560<RY~fbyP}u7UD8w)Y4iGtZ5d?^o<=O@fjW0~A0| z{YHSfY#Nh?C|Y;jo*|C&=t!u8G&+y#+oX`SgXib1w_z?%;-XuB;<pCw2p6mU?m8Zh z#g60vfackL{Sn1K01J2v`MPBGihUc)<b|I7DrbR{&3-3dH;~!wcY;<R5(aCB`Pvs( z0Smp^wAa?wAr2m{t?^zUh>v==-tpb@lkgj#&EppALSVW9p%q}r^*(OfbU~lI0NUk6 z&eyR$Vvg6&JsROcpeK``5F|2@5hO4<GoSmakLmP0nUP-V+M0nJCVtS=IJ#XAVldPN zy%qbzO&|^<HI+LqX@NBWvHqyu>QK!Rr<4L%jb1B36pz*Kf$V_h(Q`=~nkJOnabZIP zEy9?j3WE^<-f?ZW*#r$xLdU~_d4pD?->IvoVhW_~Vty2xjtA-{h#%Lr*u+XFF(ss6 zpfff{ND0str9M%-rCivjm`KO-95{57RH;20e}oI|gbE$DdW}vWD|rl(5{t#~4;+Jj zuj9gV@BlnKNxUKrSn}jZMz~L)R2r?IvpxA#1!uM8jy+Y}C@!Jd+UP4GTF#v-Uf;GI zw^;{e>xo2@pzsoY6eD|rytHvYTGJho?SKSKe*3}QTX1YPy?)1u2v|tSX(`~VvwdFV z5SD~q?ue2jMHw;th$Q6s;&R`v_v#RWYo`yGjqx4F)_l!&pugZ?))n~)FxC?^;C%KZ zW16DSj3&EJYJT}ie)P&K>|A^Jcm%d<jw22*G(oI(G?oQmz>gLSWHEp984urURg47x z)1fN&jCqleT1Gwi+9D3qv=Ua|Rg9-K==Sk%1|K>G-^54k$RI&43I1eqH)SP)r2LxN zO<IXzir!_A9;SoLZqk1}$h5P=^scp&9_F0H!<>32m}=*Ca>F$G<%c=61-KZ~!^|#5 ztQCh@v@^pz+S0H9LZ^>9`{YzG#~#-cAJ6R+(ZAR}<iJ<65}yn{glmF6^U@w3PUCn1 zJxb~yp<QSnagrMe&P+Vq)T*L)6PA3@*)>l>9e#OH3}<bKKgSMPZ3u;h7UD))gQ}N! zq0m%bw<aoDo#u(D>o?xL_TbiiMF@pch6~l(`~@f2>x3DR%wa|-F`SXFh;qa16U9JO znA++G;cTzp9gCp&VUZ^y<_xC{HH8I8cEi8r8SQDt9=2M+lg(s|7*jW8YK8~Yd;FEv z{2Z1dr(Me%b%z(N+L-GhUI$&2zlM)b_al)hS;b^FS+EMpoRv*x@hQr8Ayu;GQuxhZ z>A}hUM*DtGoW9i*KAg9I7tIjF)&^F;mPjUQiNI<n9mFWwbVWg3?ex|eC$*afttHx- zW_%XEvh69fIVb&NP**$uqvQ{)9Yj6gKV$|!7c)1+Vqf*3SSC4aa;he_LSsdEVX$;B zprYw**gf~Lwzx)uz+O7*l$Y(Z{_<HrOu`aRk3s>03PDP_pjNTGFxBxk!i?jt_cun} z!kLxWaiLEr)HG`zQ8N~w#w}4)PHOKv%^rJ@73OQ0qtMYG5~d|IiF64_SwL_kYt37O zQ<JN`!;ngRQ$xI6+>^qGF#y5LU&n!C?IgDs0bAk!c5-Mr$<LBI$qy5~chZR<^{}82 zPUb&I00h=|li#zxljyySYmfuD`jNhh5t8cL0kGwyO`qhq6T_tXVUUANvG6V4DEdu{ zR7tjr3_=7m!z8`Z-ISAih~AvfFuC<t(XX`2ph&*{JK*ma)$hR|8#gpyz|h13k7^1a zd&1BeLu9KdW&#b5$eJ-)mZSii3dYZ<yB6GWPaUxXe{Uh8r|m+Tg==eK5w5L?T?ERD z=cg%fG#-2F$-xBD`i_rX7EKXZ*dtxSYxj(+0mbpS-lFLU<H)sPGLTmLTQVoQYWNvH zR|Ykq$4K`gW}^eYeq}O-4ke*oJVJ{zbQxmjxRc`@ux?tOYh$d0z`n>Lq3*#f$&Ld` z7{#d!uE+^k#RzRXHiTEJ+wa2g8^E?iEHtuUNANQ6?=b#|`)$Oc-9VVs#Gc1+MfMEy z^?u+%>bpJRYEcH|S;cr<m_mqIOUlx<0Hzeoavg<NSzJ~}*e4^PQ8}J?fz7wse20w) zU<PKwDGXG{2<l_}DyOu3CO@l>*hnZx8i@(!YYc63P5%*BeH%@pn6{GEBAB(5oCCwA zDNR#Ft7PS@IYfL8X5VO-n0?8{RN=zDeDpRIBU#sSgmIx15nKUtCc&D>G4UVR^$c0L zoyNIu=yPOVhay!}JbI8>E%j{#k#l5A3DIQg|8t!6?!c)TXFYqp-gpRe19VE~fV8xq z!U=^*@?OCiog}ff|7W5za4-5w(F7NhoaDhk3gYT91Hs6hB+xDr7hud-&aKhMUXIR2 z;ETdD<Pq?DG+EMVy~8lmwhafdV|<*^^kO;|T1CLIQCH4b@MGO=FqUFJh8F`?b8(F% zPU;p<axYcKBT!Ev`_rQt9WMyef@i94j|^{kjqoloMLJL;>9J=Kn%Rsf;_5~ZHr^Ue zNs?`HA)}BfV!*;DtAop9=!v9*29B9MWzcARvS2wc+@@}W9@QEfVXXAKfT?g(IQ3X3 z$wnMyl-*O<2Zocd&lecXUqq8AC9OFyO$njVIed~<DV2VT&WmoIV464pPNp@%<_9t8 zSK!wIcdE6q8H?L`90maybdhm9Z`b1}h_*FF&}ol<1WFTq*2?_A^_3V=Z#f7Q$Rd$l zj-$~p9;C!4dOu@T<0*t^J|3<v)DJRubo7w8HjhsZ4t)GX?}^8!085cXG$n^fw!j&f zhfINaN7Wr5B^AIJP-h@j^qF)!Geqj@UW9@-?f2ady>JQRm~fF+m*CBPuF_<5Yqgw3 zqUO4GdbM@MJVwt|*D)Wl?bQt&MYJaJdXK0sil{cW*lB`7vQDsp3$TTA>A?#JVT6Lk z+%u78p^GH|Y2yI7CuHcb{1X9eU06BR5ZR~Q6!LZejDxJ5y26}Yka?I@SN8UCQbCrW zdYJXU<)ouy)!f%F0~;wjxOP*=5nX1`?Ro<dtq#JYI>>`$``gA$Vt^NC??ULAC?O># zBi@4-c~UGA1gZK##a;qw>l66-7WiB;_&sls=h~&y;HZPhFM}@)ue;Sjz*XN>UPX$L zSO{lyDAhbn(Qpl?5F8S1+TpLcn%Gs4D>cl%=lMvG2P(=%rEo4x!J-Lg48+MjeRr?U zE!8A=9iauK6A7P&ZX#8Hf?crYGRLfg>3ib71`PxL(Lr9uM;zou=-o*dhEy(2@YHaM zv<=r~3a*S*OK+EOO{m;Tz=&Rk=FJ9EP3q$<E3uQa5`z=yk%OZwDO;G^aJavRzTbh? zby7RIPjlba`Z%M06$Fw;Iyco!4zoY7tVC}PXA0wI@Z9O0d{6{QA<43vQvYk1cQP=g z|2a%+IPXq&nAc=C%m=0REO_+4VvM==p<up!cvoER9`5FuVV(~7c6*yoSzx~WGi#@S zRourajyx=UZmB!ke%R(63%d!qdI?t-<tnTTS>b$ew0#WW0k{i<!rql>djsRXsi6}b zZ^F^Q=%1VWkHrwmKOH`@X5{jBQ#;eaiS|hcfr9oae4fMSdBO;xgF^cSeC*vk)>R5# z#PMma5zoGgXTKC2A!a^LsyRHl2;4l6k<K^_NSqy}5Wpw`3NxR<HH}wM{IqEBQvmCg z>PJ8vu_n3WDj4fsu$Xc2;d|hRg!^o5myc=B$N&oJ525=Rh5+Y{#X-NMMKxiR=}{0D zMZg?`jX#b0+#gvH&-6i_nE;`UVb(Xwcre60@`GS%JvHkg5oC#EV;moO_Q(%nCaLdE z#DX~vA7?bKu{^|%89Pl$b)J%JGCdNbg`@0^p-m{0C?PYME3wCOBol*S9;18-QY+A4 zI#*<(ZhWBlBXAZzff!MWjgMv(^%DTD_$gmP=H6!s%z7U|as>$)&eRyqt3C32EISxv zshuvqJvfOt#l?#ftgug?^<k9Z|7ra-IP)%o_>kAI)1meu|D!<k5(tuVU5q$Or~O;K zrdNJhF`us<q6udZDnm(+0lfMyFNh}H;8B;&DK-I`aMn;ot+CnfJ#-xg&tT}H#-~UW zMbcTV^A73)9f6xQ0k_)yo40R#@Blt02V+RgKo!9|A;|C$RIdq>MVF>=3V~IrSPJv^ zQNAI?S7H7}<o>D!8BPm&@<%wWwUTrkbND2aFJ51TcOYWO1ZkK>LUse`q8E8G)%7<N zveXIX^5;w~u5<%5qtG2)voK3P#B((22{J_c3|Qt(<~9lhBAy&hNBRw3QE0hp$UEjn z9nA`hngCo>zoDWlwF&EKk4-aE>q4GHL%&T;cpqaW=1MeatXvA#GvY?`)<QaM%_kAu zOBJ&@+SDjrnNJpRo!0go+M+d|TC$GecmdApJg(=G?6(M8JZYUt4kT>061z<F_A3*Q zpD-AyTvzb%S)Ie$97dTDb7B+_4(w;?b{ZlzxeDdK2Nmh9dazl}sI$0n&ozN>WaIs1 zUY~@A`Zb*UA)!F;86`6Z&UqY*4Rn^j6x!I`uHpw~3ey!Tv_v05|4JqhkwjE;`}C7j zP>QhZoD|e1qFBlvCbe<!iTxo}&LUKfcEj(-t~nfU@ki4CkBVO+R}R2p3`Et~Na+c^ zGF3-o0vKV=>o_Ri^EwB)DRR$`2sUz0B3(dDN(sm(QP2sSL+#N4wz2q`G16%elkx@W zln?+AmWyy;iB)$jVB57mO6??fQafpwwhRWtX4sLSu(~=-7Zd8LBpeVz+)4LnIq_VT z$q1w&a2A$M6;@MP^nJQ1BcK<<#`yJ+RjKJgI~Lw6n=XSEItrlG@*1<#$eJ=7V0Yap z+brsZ%1MVKXkWMdcpM`S!Gn9MkG`-j-d`=}AiXFzeI~5b8LV8D*$7!vxG1`{8aWg= zz?M{(iJF+C{XOIy7EzK(r71;uzfT0sV}L{k2uhW}y+t4h{Fyw^bs4|+euG9X|4!n= zNqrL^|BpfS!?dPy05Ji?Si?*Jf5m?Vd7;!W!;DTlO~Y&_Gb~8YE5n&~hIKwbUST)| z1R-`$^blE$3IjbE`aX#7A`7%Li|aWtQ-5igZs%c0BEJN~meFC0rD;2JPIl)IOuW>v zh%t+wTLZQITev<m%z+f>W|m;+PJz=(!}<2?uvDAFxkH#u-ut6qepo_{leL>FCUy=F z53B!zYlnv=j*X**VTqZp;XFo952u~{XHz>1!@}nY|Njh2J$Pz6M{s?{DZI(vN7{?S zg(i4>cx0Gyrhl9o&PX0&(Mj(d0$2YDxEkiJ7_h4*ymlOMaLij`<^LGhPXs4}Q^9k= z^T7*9F;9uf3DbDzC``^@mz7$>qqu4}0cRM(zY)AJJc@N5?Og%%kK*1J&6PjkD$(N) zg450n`Xtfkgz0nA^!aJ<oKw=*hMD$Dveu)+L~y2kb~oY79#1%PpJjl%O#5YVU5@U| ziFr%x9R2jDHg6>hcj)t^Zx2hKC%qHHQu`e6RKlufhqEx5FJUH28m0&yqL057l-sX3 zhd?27z`f4rd_|s4IFoLsnp1Fm^1}iQ>v`mK1d<2`NFn;pv0)ZZ`u=dSeI8FbK0N+; z3c-WL_66t2!z7;gV`p*4Lbf7W6Y>_$(a+L58DL=vP_77ELyZIUx`=!JWO!`2NW6b9 zF<iWtz)a0=T)(8RVAiiX$3PFqnft`5IOpS}ji#A(Jm=#-o{HuiT*k~^b586+gzcQb zXs_cg%yoETH-&ls^iP>*N_{V$=U37H(`a4?%=6{3d7cDhK{;lY6q(PQCD&X&RsZj^ zV@}F@dvYk+^Ps$wh@V7WBR{4m+H#Mz4@rsMu`Fb)9z_%#6i}cTiZvoEV}cRFSYbW7 z7m0e0RY>Pp5rbeU?NMElj5tMSRG-6nsQP16GX$_(VNb`;8I^&>r(kAFwGYA%T@M9e zs7eUVL5^=Rb)i~_u|@R};v}KyqUEvxN1JA>BtQ+<SV$M+p^zeS6)JbN^?F;^$0OTg zD!ro^v$1Z+1I!0ca?O;%h#if>Eat2@UpP&hEMr2D8$}=pivupL=J@i~5Pw7Un8P~* zgpA+PnJ3&B2cM(D7n*%v=2k*Dsuhvvx9Gt59)ddcZG1zgQEegWGd|inEO@~v!~O{9 zq8N@r9~7aiw>qsLDqR5tqwJOj@?`X%CPPFK5f+vrsJ?gO{(1Y(2lv=MK;s6DN_m8T z<FKxK&i3S>*XscyT_7hEm?K~=4x>Sh&EEDB!t{t@3tdVv1}JlUZSv4)S}f>CEz|+V z4YoQ2H5d!~JX99e(bJCTt2{=vX4b~(+B5M{Wee-u`hI{AK;)j81&xUA0XA1$xV8Zz z7-bCz?widEEFisbyB;()HPo2r;5pW|BO@0L$(k+}rAT@rBL2z2KpbN(VieW`r6OqD zse^Uuy=@uvg4s{dh(_PPW<+u)>z6oNcnea!1kMB<q8h?f_nFSbBgBFC7!)pfPm}4~ z6I+N_^i!aNy9p{|$<Ev3+kDm}HzP$MV-w^=?r>Ab+8V(G>kp6R47O3T#bP#=OQO)p zMV*$2FztO+^i7jtj(t;+$bt+80fHfsm6Ae7A;0mE0!fBpgb7lV5=^H>kDtjf*5RXq ztSPfYG1w^65U)Xk9#U5tfiqqV9uOtl5J>eD1vd&NyF?=WO@9*ktXo7*R@bY=Pu6#u zwGUi{e4hsqu1iI+zCCaS>Fv#rN4O>ZnZkWXVmO>fj5%81;-pWep<7)DCW>;D$Jy69 zz89CC30QO@97vi#JL7Js`ITa|J&P0tV=keO#%!D@!&Fg8Fp+LsCL|*GFUQ&;CcS<5 zJ|7i~MiHr~#+4{D@*tYrq(A`dbZsZI+Fi(2s?%*$Q}!I}b%^fq?Ij(W00B9mj@K@| zdLGT?No2lu={27H8k?_|EA|bREk{G(P7pdYC7m8ktM+x-QbDC{@HIh~qO%P0;$e_< z^t>_ro5it$9zmnnP1(1|wKZKxfVdk~AvG6tE2u-rlNb`O3uMn@kzq!lv#@w#ULbM5 zh2lQⅈ{;J)n@0{XXRN_^v=x?P{ud$>QUc+C&c1x$zSjx;6HXq{@V1BfUb|gu-%} z=eUt#AYg(y`xYK=!a}$b45VOv=*&%|kj;%EE2M4{;%Q>NW&#l5<YQV8z@RQLUm6vv zm;Wr$(ESJ{2BPTQ{x#8_gyxL_2R@eYE;bdgPWUZN(zt9&QH}LQ)K4r;ddte!*2bR* z@f_9P^En#1lO-*5>3gI78pP$8?4xTR75|8BV~hj>n^nLqZ#=yobEs4<i^;Zc&4z}| znxIuxhczhL{1uvJR?Jv^0-4ctCfB^LhytREY8E#e(L}MRRgq&aQAEr5(b$vbqETE- z+<|ex6p(<TW^gEKgs0<?Bf|^T)V+yW?Xx<CT_HrGB5q?)0qQjA@eD54n5uh?tMNy| zI0qnvTPNiDcfgDqY{oU9;G3M%nyQRj(Mx5J1z2=^bSNGb>v9%^@#2>TyjVrrYC_o+ zlQNn$bymWgFw6NQgC7KMD~Lfao!eunpF1zI9Mjy-PbLt&kE}GO7@I}|M2uRlLoC@o ztG;Y=yB(m?)Q6!k0Vp^)x`N&Q0Jo{fNco}?U7JZyACgaiQt3Ic>?ejZ=(?bT;N;G3 z#Wq=Yz{hNk*uO*+2FaAUL3nbVcg&7q-V96oA-}<p+)aF;(}E_Dl^Pb+Rryc^MomGk zO-wIRXdun)Eu$_)Za((7WhwGBx&H!UD)O4f!7(u$_3ni&ZwtE*=sN-^8vEoB8En!r z&}Dq63Lhhe$;CdsI^66t8{1_@sb#8{%mhL4#`2^)ayR-R70V_yuolmso9uHDJi;lX zQNr0hba`K0L!6IsV#(t$*Mfk%Bq-8^yt;=o>Mx=ROGeq$w8Tc>SnBEuBbJiV<H6}w z<d*1Yj4nXpLMp^kw}PFj^`5R25R;Th7p+<u99|h&sr7Z#d;!KkW3V32OK}<*iBe-X zG6=Ns5JcZ_2e00xX-#HW!p>b&n=^X6y{<eaRpHH_JFCt~ipwmrIIdclm>P-sFh>B8 zVjBpo${*)3hYx|`Uqyq|H=?49n<45{Nh63IBm>mP2bmz-WJN4qxv*m)u9uaV8miQH ztWPZ+Q<I8yY%ZM&)69n{4y+h`Rlm%JHPbqqhHwoMA;hLezxn|$O(r(NMF*O&R|C%? z*)v+i?_$cjjKxYK8jPHdHCR5tn+1tcWmVpk-H-m2%E806E&>!`3cfj#EPtERVAc3w z;jS^EiGs7fec=jPRDHb19>0wyoZD*!YI^${?C>|){4F$tX~E+K*<m)w%MU@;8=4HS zv*T$rVNQr1Qbj*P@)|$l)dCyF%tMq;V;6b0zs2Gz#b~y&**s*^U^7ZzeuF>P*=(}; zO*A3qqQQ-F?XWn`WKz;5$rD{E`b@;B!yJ)OdBq5On3o#9E;KMoTef}mgeNn8$91=K zW~RxmQg`a|(v-nWcm!$%sMTIfjcDRN81)y}oy9HTAu)w&UN7zy&dRtoh-sVyhe#=F z2*$>?g*?X7p@1-lOn_WR&Xz?%97FpQ<&!!U@#}nw<RktHk3=ZM$W?!b=R|&t@JW#& zNDZeWx`l3(<Pv6TD3r2UOe)EXhlK_Rw<o*E)n~XrJcP@vbr;#7JN_k}pNWSglWRg0 zruaR%Yaf)tSyUP6CDx>HZx8pVe~A13DM;J@_c%!WIqrI3`ZH%0Q*+o0k)BQ?rGj5+ z{uN|zL@}959z*u4fTE%#zH`}9DksND)bwJvc5)s$vVygkLWT^CcMPc*d}AlY9Il>7 zWwFa5ja?MnX_3WsmhNK|Bvo?-9wW1c4BMjgW<oZL5!nk*#7CZpaY|t5{k@o#i+UkN zn;e{YI?Llt1Lfngzg@kFwX3(-Twy~tQq0aOraRU1Z2lgbm)PvExy*)j(3+!!cBK|T z_()idnLgEG^P6m#fYpR9{7S%&Awz`Pt2}oV4cS^=bdg(@eei$?A%xP;v$>hV%em)s zS?r51<_?t}0N(StBeFBal6%SF@!uhH<o9rJ&@Opqt6c0{8s8z$0<7_W%|m9#eBSJs zFUWp*zBEMdmoNTGqG`#V`CN78SCH$hmJn~B3l9_cW81Rsfc@(K4uV;f^*yE);dw`q zqdgnH*cq{ATKY1Kv8`mMrrGBVmw=%;sq2tEakNyH@uq_1HQ(>7VgDoFS)faT<&p8D zp7N>~Nq;gl7*)c&0@wHz8!l?AxotN_Z?Q4K6tka>5tw-BJ!_84-uU`cAC2e2H_<gq zYimYrAW())f(YXG0_?MpMa0(_9N=phVC&N%TwCJ_{1BTFu<=l*jglNMo_}m$nE08* zsLX@L2E(n!u|pJ0*3LKgFv*K64rXXjaUalLTYKnk%PVlW4P<SNFxvYQ=96!()@$s* zUuG!{eWnKK&MtZ#KptL`BDEb{8!RZv5)d);aK|ugq9Cz>B?It=CcDa80%)`?uSJ%m zM5#FbV^!a(>3SLod-k`m3*6B`29nX35v6<S;SdVJtAk7-mX1P(8QP$Jw7HOKkAEx} zpn9SL_9-7mn+ql3Dv3ayQfp2R53{auSW=gfaAgJYWh5bIWYb@A2vZ9$wm}_ZEsc~d zUu}cLZ!J4S`nWcQBx9nM8y-TNH!r)vma7|g@7M0$_=N{I@7}nM?O9jxcoA7)E<#tB zk5Od~iKZ}T5aNf^W2gzI$54XTTA3Fd8Tt$7_Y-S*LF>=2@X5@o>n&cQEAR5>O*SKS zdY?ZZu=y8k{w14##pYkL`8RC-Et{XR`9n5$*j$Pmk)4#v{~PkfKY@cp9vTe#jQT{& z$Eel&O!f$-(FQ&YAb<SM<FkT~PZbdtGk+Zw9J*i!B>*slGx)F^K(^`OJC8D+DM?Qj zPz{R@3wj2>Dl|{`=8mpC7tabj6Z0jg9VW|O@8>|8jmIL(An}O(=`DX#MhyD!EwBNp zsa*?lEm>z2GlzkC5R?V1F_g>GO3Y4zGR(nk6xRI`Hww0*QY6-Z?ZFbN#o&uc?LAjs zN&&iLmPD482HyH&{_&SCR^ErH@%!U48={N!CFrtoz%m;kBd)HJytcd_inSGjlHZ8I zcw+=Y4ZaapY`3nMRE^wbNenQcU>oN%9^|oX6vxZnkau-)k9gaRzb>2fQ0(s^0(A4v zGPm}O(6U<2NV#84BT!wy8Z_@vhUi_gNRB=Ov|`1-K!6euiOhmEIK4+7QLR>D1c-gv zfc+<bylDy_f#45uFj?;X>>aDcgue`E!~cW$!ft3(!Qky&IFn*!SUZhcFkS7ESDQRC z=X2%?cf7J11<a!>V4SS%b}dSk2@9HLSc(j+O%2|O0S-^;pgpe!FZ;HIk6^7gzn1Uq z-TZoQT=0+WeyyfnfBm(=3cPoOQw(VknF3wDCLpE`Di5j%ZG4dV=<mlGs=~UykyIqe zMKqR6vWa%A4s+B=tk9$ENsm~G(<V2HBS&m$Y4}Gtina_)>+KKvrDf3%(%XS$ZnR|2 zk#0`mAlg$q4>Ox0lZ;3c96M~2gXa#Ur)Xd9K4!$2pbIns>)fzmottY}h$7oRxB(>P zb7u@*+6H-PwKM)30k%71<42AK9`aVY^x*%`CM7AbT^;=02gq3KHwPMYns^U!x9-xj z=guc&-SCP7h8;&{;6CdJ<;Y%d1B_pH9zj4L#eC0o!TdB3P@5cCAq;zfPVnX|ztZw9 zy1k1GwE4kB+{TyMI2ZapUJg;&47#0{pn5Nutz+0_2A8=H*`j^|m@4r&)_L^DXu@fD zjnPuVTy#&E=8>W+FfKY+QeCUbW?8(xOBAW-P>%UFNuh*;M0yUvlN|IXJg@Xqgb8AU zqm5kHb^1E)JJ6*%&I>}!FY##PNRe=L1VUUYP61j%Pp;v1I?)6<OGNDc6T8b~e}bd` z2Ep&sN6XFWmxd)lud=yR6iIPDcPN+39TSMfqAr8}WFbmcp9YD3NnTWiIZSVzqPXLR zB@~yTuF^@O#&Q`{n}Vx@a-$ZiHYu7=znR{D&S42}rv6Kqn#ij6_@)yZ?|f0%V2Ox> z2(8}8X;_I(0C9U@YeF3{0RqpWg_H%Y^VsSJS>k`4+ap!bfPX}rfkFmFG$c^Q6s5!+ zwJTx}=$9Ivmr=BhO+g?NGr2{~3#5*5VEBSKWvekv-Pmb)+WgF%Os)u{jKaRx%)3uT zIP$F%oSCHEQQ(0E>et0kTI%T`vyMq|W%}h6^=Kch864r|@%N3eZUO#M{lM3b00PE_ z$Ak52n#@ASYNBE#^0ZY}><6QQ8B?UCSAo{YE5XJJjZDH4Z%5L5R{?DBID8mgiK5GQ zZak@Te;D526+ipRl`Eo7?6)GV0za!JK{r5i=^P~o1jmNwZFJlUyxoiE$`dy$b0=ct zvd3WQ9AcD6x}1wT{!9$ze+Cj4TLMOguEZUc-u{HwuA;#ug|9G)c$LIJMk+|;gEZv3 z@bJhwiYI%QLZg7Ii3PkY13b8pRR0;jCUgS&X!C+P0ZJW)80w&3#u0UaK0@g@OK96E z2d_rifmR68*c|u<`eaZLiMzmC*}*vh!yV-{_;R6}cOJb#VnBS1m_gtZFRPLsUs&J$ z!uoiSI(zx6Usz`c$?tw#&Z^(S)3Mb9?=oZDfEzTVtOvpsgu10(#$|OL4FsmZK%g-R z11V+h#cM7tARq-jY03HWH~7xPW*>~s_h-^HRUJNa3h&6+0QsnYz*GN$%`dVcTy*$b z6nhsx!$MpW;_I#Yw9Rznm2Qa+`A+kw$c9l?y`4m?ggO4C(3co&_2d?k2GA*fg{~Zm zDjJ(&8!&(%q1rGP^^lz+)%oaW1#jxDbdjg`b^P~tIi^sLm?RP>6Ulyp7bK2PD?<Hw zHqWt<csV6>byj?t5%I{&2C79<J0b+EY<8S6r%d4gMV>2|bByPn<_UeDVLb`XRddn@ ztfPtiEV>Cc&CPfMc1@nc*)XG*bc@Ff3Eu)@pjSnCF$x`Kb-j`f;VsFT8`s{uc5^kH zzVYD)4{lw5=hg=+-&7v1sH<##!iE&DtK3KAB1ghExi__0c!egne;p09tNw?*1i93k mvn*UMT4%Co;kict77&kx35KZY+}UDk{udL`zwDgKo%+9SS9IS1 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/__pycache__/exceptions.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/__pycache__/exceptions.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1ffaa18f8193ef53688468ac659165517ce95bd2 GIT binary patch literal 10351 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/__pycache__/fields.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/__pycache__/fields.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b435a8ccd6bf4b2e638a6d4b35c10927c950c40f GIT binary patch literal 5821 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 Ak^lez literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/__pycache__/filepost.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/__pycache__/filepost.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e1ceec39e46ba7d6686a7b7ffca97feefb94dcfb GIT binary patch literal 2711 zcmbtWUvC>l5WiiY&zFnsq;4n_L0GC5VH7)sN(i~3Alf43p(#*Ah1KGmZ`biT_s7}Y zOOwdvB@yC@@4*Y7fKPI-Jmo9&iJ3je2?3-c&f2-zz1i8>`STm!snxt^zqOyAELheb z)`h18{O2&#&p^1vNo2*OO9=8bqFrj<rEbZ*?XC^)QdEwet^+bQFGrQw?Yf3{qJ`M& zdWNq=i*dDEC6*|SYTP|0eBrv)t#gkro><)_Ugb4-FY`KIg7+2P;LH5V3F$UCePT7Q zo`N-2ljKW&U!_r|MK6rUsnlDrR{7#k3$^+9loT>06&}Dc=>w^LBla?(^p~NC_)$62 zgVrafc*g)0;)9!T;XVv?6Nt7(MAK1;lVkWzEp3m=l1;3U!zs=u78q1I+VU7Yk2A?c z-1nvQl?s!c=&+^0vPdu~#*rV0SR|SaQpw^l7CKEM)eeSfszk4!W(oJ@VcRG=U52Cc zvaf<LY*uo&A0~#+D?@P*g@ePKrYf&w(oc9A%Q8xrzWV-7?r;<)<u3GmXDmvH{;; z-d)%6czqm>Tm3AIc<c7wu%F)kh~ttOy?p`N<a#EfDD2-^AB2$@r%JcShxyVaGnYW4 za)DU(GI5AU<O=Wsx(^?8p$!B5s<wb=aFiy;R9-`8PAqU8NnC9g+`$JE^1yn2V@g4e z>N3c6CiFXq#@<a`9yt^Gi&e~?LJoq%>CsQdPn%juUkjG*3&{o;Rn_*)mnYd6GeWT_ zRGOs&_Wte~+ix<RK{ylxzcC<CEutg%n7ct(_o(@O8F-oH?RBQ+zRbwr9s|L3F$j zVy(2F1R}RlX%UZw5R8KntK3FbR=^MW;y|Wxudt$7%AG=YPQtuwSQD#)Tt)c?Zta;* zy|h0PVDfczY8{B>dZbES>Vf}VD&K~cc?ABF$ZPOr9)VR(I6bk>;_v`s@dT<C*Ctjm zYubJb6c}%`+l-5`6an~|cRK9D_Q!>XH~-c5-wp-yIS+N1Cg}QCawv=aT?mXGhKdcc zB*4wafD~(7Xwhby;AP?SHI^yCIw;iH{=0j&*Vv0;7!0B2bS4w^>M><A2mi+uDoS?l zdCYwr3dfs3Cf4)DGdd+xIw2D}DDoPR6Y`jBnNUL_(Dv<|?B-<uQUbhO*w_(?I2g-& z9aKnx*w)eN`Mp(pBT555Quo?((f?<RT!lmAJ4hH3gpc!-l<&fH1IEmjrY&DXfon(* ziR9}*nndE=FYV12FWB9J@5%vURXwso<qhBhydOTej>_)CP`?Aw*0F^i<Yd>CD}W`| zlpIVnMFaut7*9(RKo)ItkhunH$Izv8c>*8}cvBiV$FN2$;3`vFyAxY40LuKJy@?H2 zRIDtHs<3u6-vwWYm3XKZrC>KUf)a9jt53}g&a*F^=kaneo5IPX+Oah$53pl7{?}*q z^e{nyX1;+R$Z^1YtdZ^Q0tvRaA-kb<Kp_YgXORxazSQf`GvXHawa*@HK6;2PB=+?z zPdgyt$20irm~?0GJOCs**I#I7(0a}RQ5>$lT5UG}deT{EIX`Q2z>-umH5Ne#CqapV z`3YRIXi)5I2YV4l5$g+vIgQB8i`&kPo>lcZ^3Gb&rS=2xi&xw_a$2ohs^*zgta(Q+ zPFpSD{>gWD=XQL0OEv2ftJL%@1D$#K1;Vw&%*&mE&+8I;A^`9Za7Rc$a*Tn=_q-G) zIxi_LXK=5@f$r(UvB=#Wq4)hL6HTWmf-9)f?x*}vzJ+JLhx2NXCK~<^m_3*4<hn3v z(wk>M4?~WJe+GLM17a;Y#3c@`lLl?T8+$;NEK`rxX@gd&#QFk+X<p5}UT=^A7>Zs` zVu8s;Ai0By7${l82@O-@kK7&m!LGj}l(|;7dNyst|0v^|;!38OIZ>MKW@Cwel+GP# r3fY`~;Z_DiOh<D!;*@8RxQ8uDy#b^O_kbVRTqW?M^^)tkD{kXY{Pwm9 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/__pycache__/poolmanager.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/__pycache__/poolmanager.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bfd2bffb3c715d4e505f6846e0b03d50e4b62553 GIT binary patch literal 12918 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/__pycache__/request.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/__pycache__/request.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c8eae2c0b60ad7cca1398d637797a46b2485c1f4 GIT binary patch literal 5533 zcmb_gO>Y~=8QxufnwI6*PU0GAn{f`M7|>LZ6eu7hX$)J5-A1xuD=46*AcvfxIMVJ8 zGrKE_D%C@sQ-Su{OV0&*>0jud=xJ|7Px%Wu<#}g6NXc?P&=T6!aChdNcixZZeO`WW z?ON;0zxIB0aNBYI>8yOJ7=MB*`WQFi2-kN4ci(j#;fadx1(p4Z9asHoP}{FzTsv_0 z>z_HIE^1%nn{2$O>^DW@xzlNW0~t=oO|SD|r2Qn8eHBc#iNA5P=XYc{(n9uw#E;dK zo47yLCJ;R4Sac;Ze)c|He<r_5WEAhnc%nr#BC*A%RCpIpq_gh|XWtX<euWekRZ*K% z_p9QjXo%+5?tV?&5-o8Rqq=xqtchzFHN+cYU0lbgDc%&Xi5nPQ5p^8kwy8rX|9i!8 zS`42DIy{!4f>x3R>O_SM`m&MFqew<<Hqi{{^JO5zm~plhK;5kYj-jVA95DK-MVCd% zXkx|jh;7-$TZ7+Vmam2%^hP=i<tSD<oNDd&9_{Tt#jg3Ir+74AJQQ~MOKWLGz(al@ zO^>GTWaB}vW#>ON`dA4lI+PQBte`n*AMhg;9<Y%P0v)n=KE(t*X0$Ognb~vAqjF~< zM^?~mqDB+DhL#kw$4dHwS=W)|ShFOOxem{#SUOfC?)&p@rdDpIUcS7a#{>*AU@EdY zMluv6DxYFa9Z6<4f>uV_^JNPKgInT>WM4e{oNbV;8SMPo_Fk7g+P?p=%N}ljzP-2I z$rXCV?n5o+|J(NOl8AT7E~HFhn<S!hl=05sfZ1$zkHY?58Sj~UOWny!PoF%;0iJ$A zxBGh!9=$^SQsvyMJe)JQSFE_F%T&x}%J-SC^$|;^q+b?})2Y!@qj)Tr-XqO8q8T#a zMW#bs*^&5AA4?X`bQvD-H1^GetsFYH^y5&)iu>wR8iriwNC#=6tvm?q6E=}t*oTyD z^m&v$pdeD=$WMfX?lD{n{flVmvLy6ngs{b?rjS8l!44Gi)gF$7$&;zCMk@B_J^L)J zXR(l05FTlj!Xs@wdAj%b$?o&rk(VP3{io{zu4o;%g*&Y)XW{gLj{pgG7hu)MHSc(7 zHIn|=T*bt{IOZDueY>?82h+`|n%)~G$`|+E`)V@O@4YYRk-hrRQfRZ8gTQ8fvfgx_ zHv4@A!}a?e+TQBqp5A_T4i9_9oV`&4v*^>rMU#JyD_X-X29&>We+zVk%HHnj&VwAa z<Vl=o*Lk4`(kNcRGuT!cre`4=l#o_nS`QYuwX5UD1^P*`ZHzXZrlGyldIo)I1qV#4 zlo-}N>1%nem-&$1EQkG}PC~)WJoS!d){fbYJdidZh(NVV$FoMMoW6Np|6V?2RKpzl z5R}u{n&cS<3-{1@;heb(Z&4HOhxop54&9@=`7!=`_~wnhMP*SH-k&hzkKP~L=kWSr z<?=V80>f7MKTz7rfZIVfpb+HlL;_LrUn~nYo+(}UW%;MarL@5y1H8e24S6Jy)EUqX z2AO&B94RXDbfbXZn*c!Z#{usvmCM#4q&@PQR8t0!PYU>w!{t1H;bY2j)RKhz<^FOE zFo=8Xam+?ML=~~y5!?nE>mn5=oC;UeMJZIiWKm2oL$!v=K#nq`m!8r*N@@YbVS=KH zz(XTtqr5_ts4|<#kf8t~!x0Tx`2?hwYUTFKjl5bux`nMTytClmEd>BxB@!?*fu4b9 zz!JyOFIMM)gfdFH(<i-JNW?p&d_8lF4eH%aHLWGnsWj=W6=nLFkD~Nuv2<DI(pwjv zk%FDN%^h<Ck!o(z?GD`tSJGClQvZ_7$VI)6c@Zsht~R}<*K*g~y4&>V{!*soOUg_k z5FuJ+Gvy%$$N~4LY1R?_&KdGyQC03)eNjJj7qu6z>ntkB8PKg5`SQZO?fk?!^HwsY zPMOoGp8mNs;D47GD}leP@ue(^T-c*mMmv&VocNYF<R>d*$yZ3om$*Qe$#}H%?yfcR zx9(3n)y&-WWC~6y4WWktVRkx=SNg{M5bx6_P}T64-DAFww?D&W3yD*2x^=JVw!EtQ zns<8l*?CmYm0t;>65c5aN)P=GUoLt`Iq*;uei@3&q5({MH+Dsp3c#XfJ|RCXz}J88 zed(QDIctUMafLi5>YhX27grWdQTfmjjYUhj7<)iR-0wJt)di%$<4uejcH|t^azt!e zKR5Z`0JWui{@<>q-1yIZeUUfit}eCv1%b<8aIp@3v}Y0tJlzm-%+Z{5x`Yl(Cb7hD zOWMakyD2cRcTrB+&sbtc=u9}5%_?=E0G{%>uer#`4Lw*b1^{o==-3kN9(#h<W~QQy zXAvBo(}wC^w!w1GqQsP2wjmx=$insJ$-PS`Xq!sLa@UNd(PleEueRifmMIkFz``{d zgFv4QgK|LZQN`^D<%UN(<U@a6suJ-rSfuR{h?%0AWHc^T0hJ}Kd+ZTF`B)muTmwF5 zLx?#ls_IgZIta06Ss*f7KDnR7la-SA9MFs^M!ig4hPaOaC@X8pOsN1K$@%6n_Y*2* z2C^e|fA?XzA-$yo#tC}99=mT(YrkYQcY|Jr;JIB!Ep3<WJl@&1PVBI38f=yKE@WA9 zdpU(fWMz^A+CHTkb;5~WZRL!aR?sJJf<9uuE)~mOFxDPx-QHsDAvf)1xm&&kJ0TS@ zWrL>DxEG(q?JjHQ&bO^#{;J)%L<T(Jmol)=iVWgs8|`vJ2Mrz<8=cFfP}eC|#GG0& zLlr`mOw5qmXYE4D%c>N|%Ko=ifHrvZa4HWj)jLEK2F2;mop$*qGwlV-oh>uLVh4PW zyro#@*8g3GCJJr#@(FFkHpsbSWxy@YMHn8JZnH7bS#>-cCPdMwHwQ=0z+*`KBv64G zE&F(c>d@#}gw|;#)IrFRS;X?x7$Kf_C_pvpj3VTLuOxnsAkEqjvSh!v2T!!~7Rq*s zrFO_~^m}GzR18?a-Xl&8AyQUIcv>J-G72T;I5D&{$a)>Hg2v}5RLaYKJ3y2dsEAVn zHb`TMMPgp`nRyu`%ts%6UT7&T%g=(BE*m`-N$PgdF_Ks?<pRCR_5$`OJ#vu)m|G~V zr=J!q;y}mD!a??{#1KG*9HU=5qPE4jHtCI+C3>twf1Z<B93_<0BQ*<SoZkJn0DQW( z>JzX*%lxj8gKTeQsQzb^<SvaYFS+_^Uh+CkdV_AnP|Q1YqvNG(d9L><3okTU<_DPZ zOI#5xa(-m_3fM~1^}t-J?oDqU{AJBs2ZuR*=U?*|OKQ<9S9f>!cF}@nSN5$%eJ&+R zzn`}H{XmPvr}0|9{}o!0{7s|Z7kbq1o425gxlT7awRxLv#H_5kD@UO2+fc)3f5&TK zU@39)t*W=?wJMI=s<pn?y5T^pE41%8i4%i;4YibMlTe5%nKkwP+fzO|0;oj2NS*Wo zBtt~C76hP&07C8&Jxrk^ew%>mbv-=94|#Uy%T!96A7;n=n0^e6s9|3NJzuNTE8hV= Cs8-Yf literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/__pycache__/response.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/__pycache__/response.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..846c2b19eb85bf3cc07098470734ee79672ec172 GIT binary patch literal 18733 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/_collections.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/_collections.py new file mode 100644 index 00000000..34f23811 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/_collections.py @@ -0,0 +1,329 @@ +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.six import iterkeys, itervalues, PY3 + + +__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 not PY3: # 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:] + + # 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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/connection.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/connection.py new file mode 100644 index 00000000..02b36654 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/connection.py @@ -0,0 +1,391 @@ +from __future__ import absolute_import +import datetime +import logging +import os +import socket +from socket import error as SocketError, timeout as SocketTimeout +import warnings +from .packages import six +from .packages.six.moves.http_client import HTTPConnection as _HTTPConnection +from .packages.six.moves.http_client import HTTPException # noqa: F401 + +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 + + +from .exceptions import ( + NewConnectionError, + ConnectTimeoutError, + SubjectAltNameWarning, + SystemTimeWarning, +) +from .packages.ssl_match_hostname import match_hostname, CertificateError + +from .util.ssl_ import ( + resolve_cert_reqs, + resolve_ssl_version, + assert_fingerprint, + create_urllib3_context, + ssl_wrap_socket +) + + +from .util import connection + +from ._collections import HTTPHeaderDict + +log = logging.getLogger(__name__) + +port_by_scheme = { + 'http': 80, + 'https': 443, +} + +# When updating RECENT_DATE, move it to within two years of the current date, +# and not less than 6 months ago. +# Example: if Today is 2018-01-01, then RECENT_DATE should be any date on or +# after 2016-01-01 (today - 2 years) AND before 2017-07-01 (today - 6 months) +RECENT_DATE = datetime.date(2017, 6, 30) + + +class DummyConnection(object): + """Used to detect a failed ConnectionCls import.""" + pass + + +class HTTPConnection(_HTTPConnection, object): + """ + Based on httplib.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:: + + 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 + + def __init__(self, *args, **kw): + if six.PY3: # Python 3 + 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) + + _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 as e: + 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 _prepare_conn(self, conn): + self.sock = conn + if self._tunnel_host: + # 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 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 = HTTPHeaderDict(headers if headers is not None else {}) + skip_accept_encoding = 'accept-encoding' in headers + skip_host = 'host' in headers + self.putrequest( + method, + url, + skip_accept_encoding=skip_accept_encoding, + skip_host=skip_host + ) + for header, value in headers.items(): + self.putheader(header, value) + if 'transfer-encoding' not in headers: + 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:] + self.send(len_str.encode('utf-8')) + self.send(b'\r\n') + self.send(chunk) + self.send(b'\r\n') + + # After the if clause, to always have a closed body + self.send(b'0\r\n\r\n') + + +class HTTPSConnection(HTTPConnection): + default_port = port_by_scheme['https'] + + ssl_version = None + + def __init__(self, host, port=None, key_file=None, cert_file=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.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 connect(self): + conn = self._new_conn() + self._prepare_conn(conn) + + if self.ssl_context is None: + self.ssl_context = create_urllib3_context( + ssl_version=resolve_ssl_version(None), + cert_reqs=resolve_cert_reqs(None), + ) + + self.sock = ssl_wrap_socket( + sock=conn, + keyfile=self.key_file, + certfile=self.cert_file, + ssl_context=self.ssl_context, + server_hostname=self.server_hostname + ) + + +class VerifiedHTTPSConnection(HTTPSConnection): + """ + Based on httplib.HTTPSConnection but wraps the socket with + SSL certification. + """ + cert_reqs = None + ca_certs = None + ca_cert_dir = None + ssl_version = None + assert_fingerprint = None + + def set_cert(self, key_file=None, cert_file=None, + cert_reqs=None, ca_certs=None, + assert_hostname=None, assert_fingerprint=None, + ca_cert_dir=None): + """ + This method should only be called once, before the connection is used. + """ + # If cert_reqs is not provided, we can try to guess. If the user gave + # us a cert database, we assume they want to use it: otherwise, if + # they gave us an SSL Context object we should use whatever is set for + # it. + if cert_reqs is None: + if ca_certs or ca_cert_dir: + cert_reqs = 'CERT_REQUIRED' + elif self.ssl_context is not None: + cert_reqs = self.ssl_context.verify_mode + + self.key_file = key_file + self.cert_file = cert_file + self.cert_reqs = cert_reqs + 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) + + def connect(self): + # Add certificate verification + conn = self._new_conn() + hostname = self.host + + if self._tunnel_host: + self.sock = conn + # 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 + if self.ssl_context is None: + 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) + self.sock = ssl_wrap_socket( + sock=conn, + keyfile=self.key_file, + certfile=self.cert_file, + ca_certs=self.ca_certs, + ca_cert_dir=self.ca_cert_dir, + server_hostname=server_hostname, + ssl_context=context) + + 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/shazow/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 _match_hostname(cert, asserted_hostname): + try: + match_hostname(cert, asserted_hostname) + except CertificateError as e: + log.error( + '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 + + +if ssl: + # Make a copy for testing. + UnverifiedHTTPSConnection = HTTPSConnection + HTTPSConnection = VerifiedHTTPSConnection +else: + HTTPSConnection = DummyConnection diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/connectionpool.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/connectionpool.py new file mode 100644 index 00000000..f7a8f193 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/connectionpool.py @@ -0,0 +1,896 @@ +from __future__ import absolute_import +import errno +import logging +import sys +import warnings + +from socket import error as SocketError, timeout as SocketTimeout +import socket + + +from .exceptions import ( + ClosedPoolError, + ProtocolError, + EmptyPoolError, + HeaderParsingError, + HostChangedError, + LocationValueError, + MaxRetryError, + ProxyError, + ReadTimeoutError, + SSLError, + TimeoutError, + InsecureRequestWarning, + NewConnectionError, +) +from .packages.ssl_match_hostname import CertificateError +from .packages import six +from .packages.six.moves import queue +from .connection import ( + port_by_scheme, + DummyConnection, + HTTPConnection, HTTPSConnection, VerifiedHTTPSConnection, + HTTPException, BaseSSLError, +) +from .request import RequestMethods +from .response import HTTPResponse + +from .util.connection import is_connection_dropped +from .util.request import set_file_position +from .util.response import assert_header_parsing +from .util.retry import Retry +from .util.timeout import Timeout +from .util.url import get_host, Url, NORMALIZABLE_SCHEMES +from .util.queue import LifoQueue + + +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`. + """ + + scheme = None + QueueCls = LifoQueue + + def __init__(self, host, port=None): + if not host: + raise LocationValueError("No host specified.") + + self.host = _ipv6_host(host, 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:`httplib.HTTPConnection`. + + :param port: + Port used for this HTTP Connection (None is equivalent to 80), passed + into :class:`httplib.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:`httplib.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.connectionpool.ProxyManager`" + + :param _proxy_headers: + A dictionary with proxy headers, should not be used directly, + instead, see :class:`urllib3.connectionpool.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, + **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 {} + + # 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', []) + + 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 + # httplib._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", + self.host) + + # 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_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 httplib.*.request, not the method in + # urllib3.request. It also calls makefile (recv) on the socket. + if chunked: + conn.request_chunked(method, url, **httplib_request_kw) + else: + conn.request(method, url, **httplib_request_kw) + + # 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 Exception as e: + # Remove the TypeError from the exception chain in Python 3; + # otherwise it looks like a programming error was the cause. + 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 + + try: + while True: + conn = old_pool.get(block=False) + if conn: + conn.close() + + except queue.Empty: + pass # Done. + + 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) + + host = _ipv6_host(host, self.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 body: + Data to send in the request body (useful for creating + POST requests, see HTTPConnectionPool.post_url for + more convenience). + + :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` + """ + 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) + + 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/shazow/urllib3/issues/651> + release_this_conn = release_conn + + # Merge the proxy headers. Only do this in HTTP. We have to copy the + # headers dict so we can safely change it without those changes being + # reflected in anyone else's copy. + if self.scheme == 'http': + 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: + 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 queue.Empty: + # Timed out by queue. + raise EmptyPoolError(self, "No pool connections are available.") + + 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 + if 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, body_pos=body_pos, + **response_kw) + + def drain_and_release_conn(response): + try: + # discard any remaining response body, the connection will be + # released back to the pool once the entire response is read + response.read() + except (TimeoutError, HTTPException, SocketError, ProtocolError, + BaseSSLError, SSLError) as e: + pass + + # Handle redirect? + redirect_location = redirect and response.get_redirect_location() + if redirect_location: + if response.status == 303: + method = 'GET' + + try: + retries = retries.increment(method, url, response=response, _pool=self) + except MaxRetryError: + if retries.raise_on_redirect: + # Drain and release the connection for this response, since + # we're not returning it to be released manually. + drain_and_release_conn(response) + raise + return response + + # drain and return the connection to the pool before recursing + drain_and_release_conn(response) + + 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, body_pos=body_pos, + **response_kw) + + # Check if we should retry the HTTP response. + has_retry_after = bool(response.getheader('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: + # Drain and release the connection for this response, since + # we're not returning it to be released manually. + drain_and_release_conn(response) + raise + return response + + # drain and return the connection to the pool before recursing + drain_and_release_conn(response) + + 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, + body_pos=body_pos, **response_kw) + + return response + + +class HTTPSConnectionPool(HTTPConnectionPool): + """ + Same as :class:`.HTTPConnectionPool`, but HTTPS. + + When Python is compiled with the :mod:`ssl` module, then + :class:`.VerifiedHTTPSConnection` is used, which *can* verify certificates, + instead of :class:`.HTTPSConnection`. + + :class:`.VerifiedHTTPSConnection` 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``, and ``ssl_version`` 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, + 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) + + if ca_certs and cert_reqs is None: + cert_reqs = 'CERT_REQUIRED' + + self.key_file = key_file + self.cert_file = cert_file + self.cert_reqs = cert_reqs + 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, + 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): + """ + Establish tunnel connection 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) + conn.connect() + + def _new_conn(self): + """ + Return a fresh :class:`httplib.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, **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. ' + 'Adding certificate verification is strongly advised. See: ' + 'https://urllib3.readthedocs.io/en/latest/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 _ipv6_host(host, scheme): + """ + Process IPv6 address literals + """ + + # 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 + # + # Also if an IPv6 address literal has a zone identifier, the + # percent sign might be URIencoded, convert it back into ASCII + if host.startswith('[') and host.endswith(']'): + host = host.replace('%25', '%').strip('[]') + if scheme in NORMALIZABLE_SCHEMES: + host = host.lower() + return host diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/__init__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..31e0b4cd9c041cc658ecfe6f0cdf4068d6af180b GIT binary patch literal 150 zcmXr!<>iW5rx(ir1dl-k3@`#24nSPY0whuxf*CX!{Z=v*frJsnFK7Ld+yecA%mUq{ z(#)I`U4z1mq<jOT6p#=Y$Cst%rQ{dsmloyZWF{HwC+Fvt6lEsq$H!;pWtPOp>lIYq T;;_lhPbtkwwF4Pm48#lo;WQ-N literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/__pycache__/_appengine_environ.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/__pycache__/_appengine_environ.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d98248b3b504ccfecfbb917f93d4536b74d6eee7 GIT binary patch literal 1046 zcmZ`&!EVz)5Z$#M$90`TD^%b><!cU&D|+F85CPn%hnOk}MT$VHB(qA~I$pEhM9^#a z87}+@Kj14Tet{FSPH2Ki*V>uc+4atQGqb0)n)~5<<Kqv5ke_5@;F`R|nLk4Tq)&i? zk<dN`6RfYKZ$JfX)FxEHL2bbfxTq_z3m$44j4r9yZeF>)Nu2vr0keernH2LFIIj61 z&3z?&;EIowuO{4YW|<$R<2dC$Pv@}|>6E9c;r>DdBpPY?cThB5<IE3GD6$~geML)Y zEC|M>QQa&K;+!R7G)UMW%XoQlv5!6k0UNHv|6FW3pXT3)tl;IP_}vcFGz+pgJ08yB z1ddNWO@`v+DQH(Y*_@{!WH6IS5)V&<kw}${hrv1yTXAY+UkVRH-ePhz4;uxcHh!{- z)^@UcxTDDmPm}dlM2+$fY2oG?@zT<_77sRqv3!uiP<+-`<+{d%N)6zjfF?T1>^?#R zs3KSN+7^dkXba58<l4p@TT!v!ytoLX)_D}N&bz30-VSfPH+;?$k?GO}#l3FWxePn3 z`}VB&zS#-uMq!A&sIGFc4X@OwbXjxFh)|c7p6vjAJaG%~XcM3~QrHS*j;u)T;JKTF zmJnlX!gZeo(#4IsDR)sxPm8<KD0NaE;#`%=rF*pWZ3njO%PV?i=y$U)z`WM)!HW8J zs~NJ(_E}*mIpdqL3v<lX)|6;aPju{6#q_#fEvk%x7%{eluluH~Wtp!M+nsC*=lSwQ TzR<LC&D=5^)3F`PsW|o@r{~rn literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/__pycache__/appengine.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/__pycache__/appengine.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7cdefd23734b8f5c594254d3e5dfd8404d46dc1f GIT binary patch literal 8265 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/__pycache__/ntlmpool.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/__pycache__/ntlmpool.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..441c0be23865640a72b16ccf8600d0fe296630d2 GIT binary patch literal 3192 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/__pycache__/pyopenssl.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/__pycache__/pyopenssl.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7b3ea7af12d7ad2ff87c1703f61a011387ad0c57 GIT binary patch literal 14481 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 VAwQLWGk<mbSynGnzB&Hj{{g8-sOkU! literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/__pycache__/securetransport.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/__pycache__/securetransport.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5537f618caa0bd47bf375bc60cb31fdd8c1a34d2 GIT binary patch literal 17845 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/__pycache__/socks.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/__pycache__/socks.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6b99403b25c46ea865c9d59f09ae7c49d47d4260 GIT binary patch literal 4856 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py new file mode 100644 index 00000000..f3e00942 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py @@ -0,0 +1,30 @@ +""" +This module provides means to detect the App Engine environment. +""" + +import os + + +def is_appengine(): + return (is_local_appengine() or + is_prod_appengine() or + is_prod_appengine_mvms()) + + +def is_appengine_sandbox(): + return is_appengine() and not is_prod_appengine_mvms() + + +def is_local_appengine(): + return ('APPENGINE_RUNTIME' in os.environ and + 'Development/' in os.environ['SERVER_SOFTWARE']) + + +def is_prod_appengine(): + return ('APPENGINE_RUNTIME' in os.environ and + 'Google App Engine/' in os.environ['SERVER_SOFTWARE'] and + not is_prod_appengine_mvms()) + + +def is_prod_appengine_mvms(): + return os.environ.get('GAE_VM', False) == 'true' diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0361d441e681185876e7b84047b9716c44a06822 GIT binary patch literal 167 zcmXr!<>iW5rx(ir1dl-k3@`#24nSPY0whuxf*CX!{Z=v*frJsnuMqu`+yecA%mUq{ z(#)I`U4z1mq<jOT6p#=Y$Cst%rQ{dsmloyZWF{HwC+Fvt6lEsq#}}t2mlma#6eZ>r k7vvX}=*P!r=4F<|$LkeT-r}&y%}*)KNwovnRt&@p0NTeZ?*IS* literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/bindings.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/bindings.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fbb9a7a22e2c80699525563082e55b9db16ed5d8 GIT binary patch literal 10382 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ΜImA}GX6Q~MsUU)&zSedj=@2L<z%vbFn#TM)0ucl)I>z9K zSYV|LU-`L^gI(WcUhFokCXGm%706R~t+s6wU3<~MEx1tjye{f4X(A`AS_Zy38YW_g z>+(zXBcKYlR<mAGSOu|QS}x3%Qy^m$6Bo?3&vF|0ASo6-2cmD?l!g%;3=Jb~*W^Nh z&sU+PL9QUXhKx^<BC$H3Q!1r=btPTSDTRu%R4zR&WOG?%GF?G^GO4T-s`I7gssf2} zx>$X#l=4ct_*{8hC}xvN?%7f~SE(qavQ$@CTv{mPfES9Hh2?Ca_(+*U+hVDzEEE<C zRVc2OWT(EmLJn>7%3`jZnTPiDTw$S5eeTU$zECZa?tH1Nq?M&~xmw69FQm)L(sFsJ zRLQ}NEL0Z@#e5k(<rZ_rY6?9AQ*uvHQ7ZH4g$3$P8kb(iNXlfZk|`}cFBcxoSC#qF zLN*6*E(Z(Ka|=1II}9+hkS;7Hm27%3{fMkAD<x?1#z~@{rOL{Dj$rCHjsKZyp;V+H zWlF_r8Pz04T(0gkUnx{_NhMt_RA90+D_<_58*(vPp%*AZ+hWesMDFjMC5X_hEyDpl zHf3|^1?a@I6?+<_hThPTaVpw5pw%49z&E1mO^S;mu;EqgJgUEtP7QVvb@ipCbG6lp z*Hztgug?-hO9~*oIr?j%x}AZ#THA63A#G0z;%&n+*N7FAHOn%l`a1oY?7~7PzEmm{ ztGRM#Fq2;{W~$GZa-D?S#B_J-^(Fcud^3~)MNHG;i|D7ImwQ2HG-KH!PuqfAlwMyA zH|*uTt9dl_W(eMRlK^>rtz=?<D^-+d%C(u)ZTab$VpG_14|Lis@)9krWWfa|b-{TP zMY}5eHi$(@6}D|!os%1|w;(;5dqpjlu!6Q4w&sY=(Jrsxie`b+uIg@e4sT@gX{-)) z&9&^TSk>Bw+c^TTii{v_+uBwJ-}IbT-*7soeK_kapV;soix7L_E%sB*Xp5cpuTSJ` z8|xnyf7;M>xe0oiM;(LN`4_|6Lp;uL5D{TfTqwkNl=X>zPKWk=GL`A?#54H}Wg@Rt z@2gVk2F8p1#asGl8`bJaQZ%P0i_jEPYYL~OVTq&dxOb|gs+|NUC967;tweEZpp#Hl zYOAW9AyxJAC%g}<>Wj8!_?)<^VzUB#Fq5xfD=^n`CN^-CjNIA_Em!lme;u*UVW5)y zXLZ_bwx(Np>uRm78~p0bi$=|wndJn@M|~+wZrRiR9zP9JX}_6P9hrq8o$#`-X-eeK zsguI0ej57!9RcI?<0aAGAC*Xt(<z)D;&GCA3p<_1SU>NB)BD)~-^b#7fF*dG4FVei zZ$D44VU#1NkMcow05S*p5F6wB*&)at=2<q*bL<Guv!nbGJI3ePab932_{Z!df6U(F z3+xnMWT$zNo#7=m!IzlApRlvM%qDq-o#Rz@o-eZt{3*N0SJ)-~j9uo>*%Y5-@AGr) z3O~=1`~thmFR~QB#HRUWHp8dbHU2)E<yY8so@5{JtLz3(v73CF-QqLsHowO1@LBdD zzs^45AF#Xp2D`^^vitlNd%$nAhx`sp^AFh^|A=MyU6$qdSdQOkdH#Ss;t$z8PqPA_ zV;}Pja%$EY36=>j9GCxJ;TY(`n&D^JUJ%+eL-rAnH}rwLp{aa>+qQ^3PUJ9E`-to# zf-FCx&tC+2Ok|PBGa^MIB_dCVl!-hgvO=UvWSNLV<TD}`k=I0C5ZNU1uZd_x|4j{V z|4ig7BFV2oW{6xNG7a+PFC!p-M&vJu{3(cj{%erSM23irgS^>@fUFa_L*zDye(r0K zOGE~V90qx_76Exk<T{aABEKZ^Cq(WMxl7~*k!cV;3diU%B7Go5{U873n{V`gAoBM_ zensT(i2N;)-w^qV$X^lpHIcs|^4CPZAoAx#{*cJei2MPOpA%93<G;VrpZpSUNg`#C zsmJyi7-3HkQHY!cVUrt`%0dMv8{|W!7G*_q$oDr&W<}V@<kM}p!A3}C$+ldpZW*(^ z)$6EM7b*ew8XN7Y?yk>*4`mrc$C_Wk$-%2*B@$YbmU%2ph&r4-nwq<mTdar|ZDH00 zlY2(hZaZ#SIM^2o=1VNw{4E@Y)P>;eFsTX2XN9@N<faq?m$5#Hy1uHT!Npw-%A$@; z)YfVSj+5v%kFybumQ2|tm)Bg)=#e<FOQM9d*OuE28^z`r@+CXy)mLaopTowt!Nxr# zV^}!-J+iSethS9_v}hHP6t8Zvv9N5qhD{b1%d&%K8DYDb2F^BtpN4%|c}5KEDBz4_ zo0_qs39YbO>o~yS>RM_dMd<FiaIt~H-#)x-ZkX1lS+*>fB!YnytsUg3*M8n|+#>d= zMcu)S)*FF^OG4Q5ID{a3-w@>6Fk{&fc1FXr8wM;n<!M?$SW>H8t08dG(TwaowtRNN z<95R}V>MfbK!y@{jb_s3B~0cjP9E$KH4ycu!iEp2=U}j+UbN&yR&Y|M?J5wZBn3W@ z`4v0qHTV76D}M=Jf||=@=W|3WX_XRHHJz)dvo~(4k1~rYlJD!cKVTQSg5_@!+gsnY z+1r6WsNPfGF0pgeEm@bXRQ9xON9fxu+Y#!~v{!dMnsy28Jx20bW-jx;@mWaheAl(_ zm;+ysO?IVvj0^S2cE-4u1bKc(sK*f@H6)}2e&0(|S7I+UY;Ql2L;Z14XM4rgF0sA+ z6cXIiPhpuI7xauSB(b-jb_u=PPa&Z_{1ld$AYb=bLX#2t_TCnt=Dq-#`nCXR2zmHz zfsg^D;nX{A2x9MTZm2msN^NP$*k#oYzH2yA8}144e|AP)DlI&}c75gseKZj4X7k?L zdD{0cfczISIOj{eB>MWJ{V_b=kKSUkPIwpF{TA?oGSJX%6>$EKrL=A;CUZ!cO-}v3 zOjPKUv)XpC1FNbXgW;V-%g|gLnwp*c-oY)^c6Gz1yc5T5d5LUOVro+oY7Y>RDJmUu z?Li`R=C$_|874A9WRwW~37L&Jbc(^bRBdT)qqE;X%+j%ujbld<syutk1Ggs<Z)&(G z5OyaHLJ3u8pWDV>)ah$#txg}V1UmbimZ7_yVP62339D8oj(ZzYYagV}$3QyqIouKm z&15)O7ECT)*^^|`Kqj9>zQGc~;f?t6WXwi0`Ng(N>55k$hUm`On8aikq(P=x&_HD& z%W(5RZ)LGcI(E+AR8N#D6<k2J9TK9B3EUs_O_d?PdwL)1wSb@lVIv5@LA3WE&yI&h z!e@APGR)~czOymx;FNeEcf)OgG@hW`D=(q(@<(<!1kolgM?MNLxN;zqj#HhkAwriG zc|*hYPggFxIk0d^vysrCBZrYLAh-$AP13bLoZO94qN^iYu`6xe6>Nm+I3kNz$YDu# zCqac@Jf4Y*Qp63h4|Um;?@H5YJTl|(GIh_&1ED@;Mm^S}OEx6+JxM-{36HIl!0ot; zC~!J)x|GHnI|hl6iysMT0|I88n)-J(UGxA@xS|W3>TRDvhVP0MTy4t;KDvvG3tx$! zARHALt&2F9Xluf|r|_o3@3*ThWTK3UU^+aB9w;j)FJxrt(&J3!+N?L_a@NX1<9YmL zi4DV5EBNe%tkIky9W0cn=13;0l!n3)<Y?5w7Mywuq7#$_eYjzlvrG*v)1PSgQmP<@ zS*wXCqFh;avy&XNIAq8?mcWZNO}@z^0;3M$^J2SMqd4;~=e)3U*in!B7VdYOGiklx zf%M6+u3fyiA0X0VbhwM{cT^N>IGWI3Nj#lw!dJP22M0x@-?T#df#2F956IAFr!hT2 zTAjw<{46`<V27RkRyN&TvO(A?W0*YdE6d@y*oI;3y#T==LW(oEJaxN$_cGHsZek7g zjFoZhf5%v1<oxx1TgN?c*H9OA6Kjn(-TqnHcfz9fsxzRQDmM)K7;OP`*+^@AS<s)S zXz?v0ba8b`i!V&0ZyND;B3Ow-UxWXx90^!75D!~&ZFcBwn9)XorQQEtXvIbi%@%~Y zhQmKrY#*4z-L|i!yR-Ps#=~nh8q4LHjRdQ`^cjPYxA@Ddzgv+_5>2;SxK8vM!U~Cz z^>Sj4b^$5j&xn13+;x)3dqhrwbVk#z|7S0`h;#<LTUdF|DAS8~WksFDUGEb0K3$MF zNu(J4(cxGkIvh>*kM|{_{n3O^hoj@sL^Ouqc>geDb`mAX?EKJ@5~&0vy`SU|N}778 zSMyu;^~Xr_0DeSc(a~6fv;<FIEIJfR^wHzJku+pb3w~7d_+INn(W8<ZV7+bMt_5;o zy<MGNUju%h1Jas6GC)0<Fb((8)fM#ATZU!v9wT48^@G=k=-Efo!9yMhx9--vUi0{# ie|x3L+a5P4yL#~^dmP2g$$tAhi-uwcqoaKX6aNEy%q<oG literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/low_level.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/low_level.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2ab4a12b2194a770473fd7a76bd460cc40ab3014 GIT binary patch literal 7443 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py new file mode 100644 index 00000000..bcf41c02 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py @@ -0,0 +1,593 @@ +""" +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.util import find_library +from ctypes import ( + c_void_p, c_int32, c_char_p, c_size_t, c_byte, c_uint32, c_ulong, c_long, + c_bool +) +from ctypes import CDLL, POINTER, CFUNCTYPE + + +security_path = find_library('Security') +if not security_path: + raise ImportError('The library Security could not be found') + + +core_foundation_path = find_library('CoreFoundation') +if not core_foundation_path: + raise ImportError('The library CoreFoundation could not be found') + + +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] + ) + ) + +Security = CDLL(security_path, use_errno=True) +CoreFoundation = CDLL(core_foundation_path, use_errno=True) + +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 + + 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 + + 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. + 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_DHE_DSS_WITH_AES_256_GCM_SHA384 = 0x00A3 + TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 = 0x009F + TLS_DHE_DSS_WITH_AES_128_GCM_SHA256 = 0x00A2 + 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_DSS_WITH_AES_256_CBC_SHA256 = 0x006A + TLS_DHE_RSA_WITH_AES_256_CBC_SHA = 0x0039 + TLS_DHE_DSS_WITH_AES_256_CBC_SHA = 0x0038 + 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_DSS_WITH_AES_128_CBC_SHA256 = 0x0040 + TLS_DHE_RSA_WITH_AES_128_CBC_SHA = 0x0033 + TLS_DHE_DSS_WITH_AES_128_CBC_SHA = 0x0032 + 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_CHACHA20_POLY1305_SHA256 = 0x1303 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py new file mode 100644 index 00000000..b13cd9e7 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py @@ -0,0 +1,346 @@ +""" +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 re +import os +import ssl +import tempfile + +from .bindings import Security, CoreFoundation, CFConst + + +# 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 _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) + + 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) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/appengine.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/appengine.py new file mode 100644 index 00000000..9b42952d --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/appengine.py @@ -0,0 +1,289 @@ +""" +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 ..packages.six.moves.urllib.parse import urljoin + +from ..exceptions import ( + HTTPError, + HTTPWarning, + MaxRetryError, + ProtocolError, + TimeoutError, + SSLError +) + +from ..request import RequestMethods +from ..response import HTTPResponse +from ..util.timeout import Timeout +from ..util.retry import Retry +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 megabtyes. + * 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.") + + if is_prod_appengine_mvms(): + raise AppEnginePlatformError( + "Use normal urllib3.PoolManager instead of AppEngineManager" + "on Managed VMs, as using URLFetch is not necessary 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/latest/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.getheader('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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py new file mode 100644 index 00000000..8ea127c5 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py @@ -0,0 +1,111 @@ +""" +NTLM authenticating pool, contributed by erikcederstran + +Issue #10, see: http://code.google.com/p/urllib3/issues/detail?id=10 +""" +from __future__ import absolute_import + +from logging import getLogger +from ntlm import ntlm + +from .. import HTTPSConnectionPool +from ..packages.six.moves.http_client import HTTPSConnection + + +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.getheaders()) + 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.getheaders())) + 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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py new file mode 100644 index 00000000..363667cb --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py @@ -0,0 +1,466 @@ +""" +SSL with SNI_-support for Python 2. Follow these instructions if you would +like to verify SSL 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: + + 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:: + + try: + import urllib3.contrib.pyopenssl + urllib3.contrib.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`_). + +If you want to configure the default list of supported cipher suites, you can +set the ``urllib3.contrib.pyopenssl.DEFAULT_SSL_CIPHER_LIST`` variable. + +.. _sni: https://en.wikipedia.org/wiki/Server_Name_Indication +.. _crime attack: https://en.wikipedia.org/wiki/CRIME_(security_exploit) +""" +from __future__ import absolute_import + +import OpenSSL.SSL +from cryptography import x509 +from cryptography.hazmat.backends.openssl import backend as openssl_backend +from cryptography.hazmat.backends.openssl.x509 import _Certificate +try: + from cryptography.x509 import UnsupportedExtension +except ImportError: + # UnsupportedExtension is gone in cryptography >= 2.1.0 + class UnsupportedExtension(Exception): + pass + +from socket import timeout, error as SocketError +from io import BytesIO + +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 +from ..packages import six +import sys + +from .. import util + +__all__ = ['inject_into_urllib3', 'extract_from_urllib3'] + +# SNI always works. +HAS_SNI = True + +# Map from urllib3 to PyOpenSSL compatible parameter-values. +_openssl_versions = { + ssl.PROTOCOL_SSLv23: OpenSSL.SSL.SSLv23_METHOD, + ssl.PROTOCOL_TLSv1: OpenSSL.SSL.TLSv1_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 + +try: + _openssl_versions.update({ssl.PROTOCOL_SSLv3: OpenSSL.SSL.SSLv3_METHOD}) +except AttributeError: + pass + +_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.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.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 + + 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: + # This is technically using private APIs, but should work across all + # relevant versions before PyOpenSSL got a proper API for this. + cert = _Certificate(openssl_backend, peer_cert._x509) + + # 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 as e: + 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) + 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 as e: + 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) + + 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 _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') + self._ctx.load_verify_locations(cafile, capath) + if cadata is not None: + self._ctx.load_verify_locations(BytesIO(cadata)) + + def load_cert_chain(self, certfile, keyfile=None, password=None): + self._ctx.use_certificate_chain_file(certfile) + if password is not None: + self._ctx.set_passwd_cb(lambda max_length, prompt_twice, userdata: password) + self._ctx.use_privatekey_file(keyfile or certfile) + + 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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/securetransport.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/securetransport.py new file mode 100644 index 00000000..77cb59ed --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/securetransport.py @@ -0,0 +1,804 @@ +""" +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 urllib3.contrib.securetransport + urllib3.contrib.securetransport.inject_into_urllib3() + +Happy TLSing! +""" +from __future__ import absolute_import + +import contextlib +import ctypes +import errno +import os.path +import shutil +import socket +import ssl +import threading +import weakref + +from .. import util +from ._securetransport.bindings import ( + Security, SecurityConst, CoreFoundation +) +from ._securetransport.low_level import ( + _assert_no_error, _cert_array_from_pem, _temporary_keychain, + _load_client_cert_chain +) + +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_AES_256_GCM_SHA384, + SecurityConst.TLS_CHACHA20_POLY1305_SHA256, + SecurityConst.TLS_AES_128_GCM_SHA256, + SecurityConst.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, + SecurityConst.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, + SecurityConst.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, + SecurityConst.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, + SecurityConst.TLS_DHE_DSS_WITH_AES_256_GCM_SHA384, + SecurityConst.TLS_DHE_RSA_WITH_AES_256_GCM_SHA384, + SecurityConst.TLS_DHE_DSS_WITH_AES_128_GCM_SHA256, + SecurityConst.TLS_DHE_RSA_WITH_AES_128_GCM_SHA256, + SecurityConst.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384, + SecurityConst.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, + SecurityConst.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, + SecurityConst.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, + SecurityConst.TLS_DHE_RSA_WITH_AES_256_CBC_SHA256, + SecurityConst.TLS_DHE_DSS_WITH_AES_256_CBC_SHA256, + SecurityConst.TLS_DHE_RSA_WITH_AES_256_CBC_SHA, + SecurityConst.TLS_DHE_DSS_WITH_AES_256_CBC_SHA, + SecurityConst.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, + SecurityConst.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, + SecurityConst.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, + SecurityConst.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, + SecurityConst.TLS_DHE_RSA_WITH_AES_128_CBC_SHA256, + SecurityConst.TLS_DHE_DSS_WITH_AES_128_CBC_SHA256, + SecurityConst.TLS_DHE_RSA_WITH_AES_128_CBC_SHA, + SecurityConst.TLS_DHE_DSS_WITH_AES_128_CBC_SHA, + SecurityConst.TLS_RSA_WITH_AES_256_GCM_SHA384, + SecurityConst.TLS_RSA_WITH_AES_128_GCM_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. +_protocol_to_min_max = { + ssl.PROTOCOL_SSLv23: (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 + ) +if hasattr(ssl, "PROTOCOL_TLS"): + _protocol_to_min_max[ssl.PROTOCOL_TLS] = _protocol_to_min_max[ssl.PROTOCOL_SSLv23] + + +def inject_into_urllib3(): + """ + Monkey-patch urllib3 with SecureTransport-backed SSL-support. + """ + 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.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 _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. + """ + # If we disabled cert validation, just say: cool. + if not verify: + return + + # 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) + + # Ok, now we can look at what the result was. + successes = ( + SecurityConst.kSecTrustResultUnspecified, + SecurityConst.kSecTrustResultProceed + ) + if trust_result.value not in successes: + raise ssl.SSLError( + "certificate verify failed, error code: %d" % + trust_result.value + ) + + def handshake(self, + server_hostname, + verify, + trust_bundle, + min_version, + max_version, + client_cert, + client_key, + client_key_passphrase): + """ + 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() + + # 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 _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 + + @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" + ) + + 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 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 + ) + return wrapped_socket diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/socks.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/socks.py new file mode 100644 index 00000000..811e312e --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/socks.py @@ -0,0 +1,192 @@ +# -*- coding: utf-8 -*- +""" +This module contains provisional support for SOCKS proxies from within +urllib3. This module supports SOCKS4 (specifically the SOCKS4A variant) 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: + +- SOCKS4 +- SOCKS4a +- SOCKS5 +- Usernames and passwords for the SOCKS proxy + +Known Limitations: + +- Currently PySocks does not support contacting remote websites via literal + IPv6 addresses. Any such connection attempt will fail. You must use a domain + name. +- Currently PySocks does not support IPv6 connections to the SOCKS proxy. Any + such connection attempt will fail. +""" +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/latest/contrib.html#socks-proxies' + ), + DependencyWarning + ) + raise + +from socket import error as SocketError, 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 as e: + 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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/exceptions.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/exceptions.py new file mode 100644 index 00000000..7bbaa987 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/exceptions.py @@ -0,0 +1,246 @@ +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." + pass + + +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 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 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 httplib.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 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 InvalidHeader(HTTPError): + "The header provided was somehow invalid." + pass + + +class ProxySchemeUnknown(AssertionError, ValueError): + "ProxyManager does not support the supplied scheme" + # TODO(t-8ch): Stop inheriting from AssertionError in v2.0. + + def __init__(self, scheme): + message = "Not supported proxy scheme %s" % scheme + super(ProxySchemeUnknown, self).__init__(message) + + +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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/fields.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/fields.py new file mode 100644 index 00000000..37fe64a3 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/fields.py @@ -0,0 +1,178 @@ +from __future__ import absolute_import +import email.utils +import mimetypes + +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(name, value): + """ + Helper function to format and quote a single header parameter. + + Particularly useful for header parameters which might contain + non-ASCII values, like file names. This follows RFC 2231, as + suggested by RFC 2388 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 a unicode string. + """ + if not any(ch in value for ch in '"\\\r\n'): + result = '%s="%s"' % (name, value) + try: + result.encode('ascii') + except (UnicodeEncodeError, UnicodeDecodeError): + pass + else: + return result + if not six.PY3 and isinstance(value, six.text_type): # Python 2: + value = value.encode('utf-8') + value = email.utils.encode_rfc2231(value, 'utf-8') + value = '%s*=%s' % (name, value) + return value + + +class RequestField(object): + """ + A data container for request body parameters. + + :param name: + The name of this request field. + :param data: + The data/value body. + :param filename: + An optional filename of the request field. + :param headers: + An optional dict-like object of headers to initially use for the field. + """ + def __init__(self, name, data, filename=None, headers=None): + self._name = name + self._filename = filename + self.data = data + self.headers = {} + if headers: + self.headers = dict(headers) + + @classmethod + def from_tuples(cls, fieldname, value): + """ + 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) + 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. + + :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 format_header_param(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 '; '.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('%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('%s: %s' % (header_name, header_value)) + + lines.append('\r\n') + return '\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 'form-data' + self.headers['Content-Disposition'] += '; '.join([ + '', self._render_parts( + (('name', self._name), ('filename', self._filename)) + ) + ]) + self.headers['Content-Type'] = content_type + self.headers['Content-Location'] = content_location diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/filepost.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/filepost.py new file mode 100644 index 00000000..78f1e19b --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/filepost.py @@ -0,0 +1,98 @@ +from __future__ import absolute_import +import binascii +import codecs +import os + +from io import BytesIO + +from .packages import six +from .packages.six import b +from .fields import RequestField + +writer = codecs.lookup('utf-8')[3] + + +def choose_boundary(): + """ + Our embarrassingly-simple replacement for mimetools.choose_boundary. + """ + boundary = binascii.hexlify(os.urandom(16)) + if six.PY3: + 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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/packages/__init__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/packages/__init__.py new file mode 100644 index 00000000..170e974c --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/packages/__init__.py @@ -0,0 +1,5 @@ +from __future__ import absolute_import + +from . import ssl_match_hostname + +__all__ = ('ssl_match_hostname', ) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/packages/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/packages/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..46a6dd964663cd7d0558269b5ba0e0324286ec25 GIT binary patch literal 276 zcmX|5yG{c!5M28b5=DuS_yXE15=W#(h=Q7i?gU!-V#8Ui&&CfVK8c18x|S-xK!xv+ zSZQWQGb`;JHk;Ms*Y3#zz<0s_@S<)D;$<NPiV;}WFb0aNiny(ss_3(3rsfY&FHYqO zYBrq9Haf~lqp{wFbYg%0MT~@2relYli>a4Zhgpg4Yc}nAKCBR*bIL&@hVlCVQ!*?N zB@yB$gk`ZO`neOydf|=Vw%L%{?%%rB?XT2mO~7~ED;Go#M5a9mFORSCMMr^XdXo@$ V{$p5PTc<MVo3Uja`>gqz{{mC`N3{R| literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/packages/__pycache__/six.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/packages/__pycache__/six.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3b3cd33341fa7c4b4ad5de8a29e121450f358b3d GIT binary patch literal 24448 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fd1ecb7a61d4050609162056b52e07cd6dc69fca GIT binary patch literal 161 zcmXr!<>iW5rx(ir1dl-k3@`#24nSPY0whuxf*CX!{Z=v*frJsnFF*Z~+yecA%mUq{ z(#)I`U4z1mq<jOT6p#=Y$Cst%rQ{dsmloyZWF{Hw7bGTUC#I(s>n8yj1^GoK#rpB_ dnR%Hd@$q^EmA5!-a`RJ4b5iX<_7np#0|2$CDJ=j1 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/makefile.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/makefile.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..aedd8dd52cb24748ad392769048d0b437a64df66 GIT binary patch literal 1255 zcmZuwQI8un5VpOW-OXkb9WCM&w-P5JwMo^Zs)P`tfjj9Wbgi0}lOoXGZtQLLve^x` z({Lw;2f`D-fERuM5<>kM{SAJEr~3mu@B-t_B{~Vl@_6R+c*ZkhAGF)y*T46^dDB4X zPjrJoN1wrz`@k3)A%+<#@Cd`|6lCU%9E_OH8qE6<k6cEEs2g1V5~j&`I<JJ1y;(Bl zSzhq)`~OfF4z^}gO*nmap(a&H59ryMtj1HWc8AZ-=#0ZAqgf^BLUOvy)r2M`oXE>p za5_=pGAWg$s-k1T6UAvl?`9DEF5NhzReH|Hsux~CD(Iw(O)#vZ96vQ!j6I72wPD(< zKZhyzFhUAxyterg=1iO^h7g#!8fW-Dw8lRGuJP1cc?{ci{*m?~wDPqt2ilVZMZm(T zEdth9HMK8By2<ck1hOYGkcpL*qmgc|$tu*yMdvQ_9wUNcR}<z>1Mw3JR|Mo>ip0;V zaqeAfM7+^~{0(l@w0F_r5J7~u;Q1|B`8tF_*3PO`?gMTB3u=S_@-E!(4|_jAn_E-| z;xFAABEUl3(vEg@W9_aYjdc{abOilvU49%=pl$PLmHltWGEvQTJ?%Z})rW)wbv1Zt zaC*6)m#>o|XLMFEPCpRz!>TMUsJKU$_h?F!qNtXfbq%_LHlPz>`Q@EOnJ%)73(lxi z(CL|^vxQVN<uuL9L|k0`1JsR-Be^o+S4pwpheA}sbe>4bh03e4)&&87qfWeip|RkZ zG$gOg?Jo|Gp1l0>MLc+UbaePU9v+VlO=oZ&_W9|vBnNLhohOXn&`(9KKySa`->KuL zry`lpL3M4C-L`QhFEVk<R-w5`1Rk&ncsZ_^l{{|mDve+AWs#TM_)G9-cYH{8W3tH; zfMjXC8V3a9ZM+#*LEK-FcppOiebQI6d4HbI@288rVD}$<J4vet51EDP8NcQwt3-bx ziXu-B`g8b^$ty1VyC2-&)~7eWFz;;PUDY}eMh<|X#w|>6L;~Ew5e~2m!}0)!fNUi1 zdbQ{t>~+98sx9}hhs7Q6(rwgF<OHbOFn%1fY8=NRf-U21esbNo+PF^g2BX$0_ymfw RDEOxVXwotWM<NH|e*wt7YZU+h literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py new file mode 100644 index 00000000..740db377 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py @@ -0,0 +1,53 @@ +# -*- 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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/packages/six.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/packages/six.py new file mode 100644 index 00000000..190c0239 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/packages/six.py @@ -0,0 +1,868 @@ +"""Utilities for writing code that runs on Python 2 and 3""" + +# Copyright (c) 2010-2015 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. + +from __future__ import absolute_import + +import functools +import itertools +import operator +import sys +import types + +__author__ = "Benjamin Peterson <benjamin@python.org>" +__version__ = "1.10.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 + + +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 __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 + +_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("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("copyreg", "copy_reg"), + MovedModule("dbm_gnu", "gdbm", "dbm.gnu"), + MovedModule("_dummy_thread", "dummy_thread", "_dummy_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_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("email_mime_base", "email.MIMEBase", "email.mime.base"), + 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("urlencode", "urllib", "urllib.parse"), + MovedAttribute("splitquery", "urllib", "urllib.parse"), + MovedAttribute("splittag", "urllib", "urllib.parse"), + MovedAttribute("splituser", "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"), +] +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 + _assertCountEqual = "assertCountEqual" + if sys.version_info[1] <= 1: + _assertRaisesRegex = "assertRaisesRegexp" + _assertRegex = "assertRegexpMatches" + else: + _assertRaisesRegex = "assertRaisesRegex" + _assertRegex = "assertRegex" +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" +_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) + + +if PY3: + exec_ = getattr(moves.builtins, "exec") + + def reraise(tp, value, tb=None): + if value is None: + value = tp() + if value.__traceback__ is not tb: + raise value.with_traceback(tb) + raise value + +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): + raise tp, value, tb +""") + + +if sys.version_info[:2] == (3, 2): + exec_("""def raise_from(value, from_value): + if from_value is None: + raise value + raise value from from_value +""") +elif sys.version_info[:2] > (3, 2): + exec_("""def raise_from(value, from_value): + raise value from from_value +""") +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): + def wraps(wrapped, assigned=functools.WRAPPER_ASSIGNMENTS, + updated=functools.WRAPPER_UPDATES): + def wrapper(f): + f = functools.wraps(wrapped, assigned, updated)(f) + f.__wrapped__ = wrapped + return f + return wrapper +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(meta): + + def __new__(cls, name, this_bases, d): + return meta(name, bases, d) + 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) + return metaclass(cls.__name__, cls.__bases__, orig_vars) + return wrapper + + +def python_2_unicode_compatible(klass): + """ + A 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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/__init__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/__init__.py new file mode 100644 index 00000000..d6594eb2 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/__init__.py @@ -0,0 +1,19 @@ +import sys + +try: + # Our match_hostname function is the same as 3.5's, so we only want to + # import the match_hostname function if it's at least that good. + if sys.version_info < (3, 5): + raise ImportError("Fallback to vendored code") + + from ssl import CertificateError, match_hostname +except ImportError: + try: + # Backport of the function from a pypi module + from backports.ssl_match_hostname import CertificateError, match_hostname + except ImportError: + # Our vendored copy + from ._implementation import CertificateError, match_hostname + +# Not needed, but documenting what we provide. +__all__ = ('CertificateError', 'match_hostname') diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7a8a69d91e6fe105229749959bfda1fee1572320 GIT binary patch literal 537 zcmZWlO-lnY5S?VVTC4Q~dJ%f)L4+Rcie5zoQSjo$gSseT+e90iY}O<#R6Hs8U%ZIF zXRn_67d$z!LKPF{G0eQYd6V6Gy>|81xqhbrAMop}VSa$&UJy8Nq9BFwrhq%b7Y1OP zg7Wy8JQ3_wRHWlH)|IqE;2iSP7z7>E>?472$Bl2!+#k-y4`(#x@HteOpD`{Wrx!3q zUQ4T-oI!hWf?nWs5+P112oLMWnNr=XH)wg&8i|}6D|oACxM<UI^-x$ZZ)7j?;>cQK z%VnMUUZ3@i^LeJlgrJ6v0|d1;wfGBQgFNQ5`a&7Gu`8EG!a8YkCi5FpE}rPZSU(kx zoKv$0X){;~UDv?|`#ZH<VNw@LXp#HOqh2}B7_PzCE7*E45a9DX@w!L~S!{KOQt_?r z`+nDK@9<Fi4mRC48Cs=ecQ+|;W_BxF@_%H)(6jW6b&7FW-P48-mDms4y9Pp)(x^tN Mv_X~$4M>~O7qEMc0RR91 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/__pycache__/_implementation.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/__pycache__/_implementation.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..be65c4a7bcfa1d23412cd28812321d5278cffb1a GIT binary patch literal 3264 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 JzV3T|=YKrRYyAKK literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/_implementation.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/_implementation.py new file mode 100644 index 00000000..970cf653 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/_implementation.py @@ -0,0 +1,156 @@ +"""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 +# backports.ssl_match_hostname to continue to be used in Python 2.7. +try: + from pip._vendor 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,): + obj = unicode(obj, encoding='ascii', errors='strict') + 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 ValueError: + # Not an IP address (common case) + host_ip = None + except 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: + 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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/poolmanager.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/poolmanager.py new file mode 100644 index 00000000..fe5491cf --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/poolmanager.py @@ -0,0 +1,450 @@ +from __future__ import absolute_import +import collections +import functools +import logging + +from ._collections import RecentlyUsedContainer +from .connectionpool import HTTPConnectionPool, HTTPSConnectionPool +from .connectionpool import port_by_scheme +from .exceptions import LocationValueError, MaxRetryError, ProxySchemeUnknown +from .packages.six.moves.urllib.parse import urljoin +from .request import RequestMethods +from .util.url import parse_url +from .util.retry import Retry + + +__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') + +# 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_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_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) + + +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 + + 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, + dispose_func=lambda p: p.close()) + + # 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:`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:`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:`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[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:`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 urlopen(self, method, url, redirect=True, **kw): + """ + Same as :meth:`urllib3.connectionpool.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) + 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 is not None and u.scheme == "http": + 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) + + # RFC 7231, Section 6.4.4 + if response.status == 303: + method = 'GET' + + 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)): + for header 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: + raise + return response + + kw['retries'] = retries + kw['redirect'] = redirect + + log.info("Redirecting %s -> %s", url, redirect_location) + 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. + + 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, **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 not proxy.port: + port = port_by_scheme.get(proxy.scheme, 80) + proxy = proxy._replace(port=port) + + if proxy.scheme not in ("http", "https"): + raise ProxySchemeUnknown(proxy.scheme) + + self.proxy = proxy + self.proxy_headers = proxy_headers or {} + + connection_pool_kw['_proxy'] = self.proxy + connection_pool_kw['_proxy_headers'] = self.proxy_headers + + 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 u.scheme == "http": + # For proxied HTTPS requests, httplib sets the necessary headers + # on the CONNECT to the proxy. For HTTP, 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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/request.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/request.py new file mode 100644 index 00000000..8f2f44bb --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/request.py @@ -0,0 +1,150 @@ +from __future__ import absolute_import + +from .filepost import encode_multipart_formdata +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.connectionpool.HTTPConnectionPool` and + :class:`~urllib3.poolmanager.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 + :meth:`urllib3.filepost.encode_multipart_formdata` is used to encode + the payload with the appropriate content type. Otherwise + :meth:`urllib.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) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/response.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/response.py new file mode 100644 index 00000000..c112690b --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/response.py @@ -0,0 +1,705 @@ +from __future__ import absolute_import +from contextlib import contextmanager +import zlib +import io +import logging +from socket import timeout as SocketTimeout +from socket import error as SocketError + +from ._collections import HTTPHeaderDict +from .exceptions import ( + BodyNotHttplibCompatible, ProtocolError, DecodeError, ReadTimeoutError, + ResponseNotChunked, IncompleteRead, InvalidHeader +) +from .packages.six import string_types as basestring, PY3 +from .packages.six.moves import http_client as httplib +from .connection import HTTPException, BaseSSLError +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) + + +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() + + return DeflateDecoder() + + +class HTTPResponse(io.IOBase): + """ + HTTP Response container. + + Backwards-compatible to httplib's 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 httplib.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 httplib.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'] + 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): + + 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._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, (basestring, 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 + + @property + def data(self): + # For backwords-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:``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) + + def _decode(self, data, decode_content, flush_decoder): + """ + Decode the data passed in and potentially flush the decoder. + """ + try: + if decode_content and self._decoder: + data = self._decoder.decompress(data) + except (IOError, zlib.error) 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 and decode_content: + 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): # Defensive: + # This shouldn't happen but just in case we're missing an edge + # case, let's avoid swallowing SSL errors. + raise + + 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 read(self, amt=None, decode_content=None, cache_content=False): + """ + Similar to :meth:`httplib.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 + data = None + + with self._error_catcher(): + if amt is None: + # cStringIO doesn't like amt=None + data = self._fp.read() + flush_decoder = True + else: + cache_content = False + data = self._fp.read(amt) + 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:`httplib.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 PY3: # Python 3 + headers = HTTPHeaderDict(headers.items()) + else: # Python 2 + headers = HTTPHeaderDict.from_httplib(headers) + + # 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 httplib.HTTPResponse + def getheaders(self): + return self.headers + + def getheader(self, name, default=None): + 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() + + @property + def closed(self): + if 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'): + 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 + httplib.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 httplib.IncompleteRead(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 httplib.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 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/__init__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/__init__.py new file mode 100644 index 00000000..2f2770b6 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/__init__.py @@ -0,0 +1,54 @@ +from __future__ import absolute_import +# For backwards compatibility, provide imports that used to be here. +from .connection import is_connection_dropped +from .request import make_headers +from .response import is_fp_closed +from .ssl_ import ( + SSLContext, + HAS_SNI, + IS_PYOPENSSL, + IS_SECURETRANSPORT, + assert_fingerprint, + resolve_cert_reqs, + resolve_ssl_version, + ssl_wrap_socket, +) +from .timeout import ( + current_time, + Timeout, +) + +from .retry import Retry +from .url import ( + get_host, + parse_url, + split_first, + Url, +) +from .wait import ( + wait_for_read, + wait_for_write +) + +__all__ = ( + 'HAS_SNI', + 'IS_PYOPENSSL', + 'IS_SECURETRANSPORT', + 'SSLContext', + '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' +) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5476e96c42a0bf6bfb5250543fac3a552d14faf9 GIT binary patch literal 1080 zcmchW%TC-d6o!+zWhRrkFc)rx(stEZz@W0}qN+d$sYum;Ca|bgWMw7>BJ4QW4wU!l zrkg&Hw_WiHUG<!x7SvT&O_WdP96Ryx|2sRamjC(t*4d!qI6s^x*8t*Oc=T65?8Gj2 zgiBo4iA!;rmqeMAi@3roqDrboT;(<45wD1Aye=A~A$;PCCTWU*1foS+qD|VOLpq{M zy2U(?FNhxLi9YEUd7Tf$kPM5s!5766SrW@+S*(y1u}W5py3e19HL@nw$vWgO$n$t3 zbVe`lp;Kq%+D<gnlIMoeL}XH#d-tI}Of;R#G-Y#>$dtxPW*Lj&g+N4Cj9#)RW=dlY z6VEd`=TgIX-TGnpabKo}eKFSiuou#Ba%h9YkRE?JIzE`dsO>=(9_*h^4^F0glkoUx zdSZK#)=U|Co}?E{WhzOHT~G{qyJ2*WBZ^&X+y7nCn$sKT0GhKMOm0<_Q7z|J%#2Dl znCD8d)KHTMX1x=j%nh_#oid~DMipDXV1`~wZEPcplx8$n+%|Q_6Kq03y?m-Te5!RD zVM!|JAc}4KPkO5o!&DvgQVoQU@DK}#E@FsiB02~-IF70zdWb%viU<%b1fC_;Ml2$h z0F%++e=IZFus)^dxycoyRFz<5>pz}>qIv6q4LQ@MXxrAoj!dTD9B#^1(1-^K{*tAT z;Bk|<KkK14;L3wED3`4&bf?hImcfuGG8MX@oVJ1vJgQ?oN+ZrG{pP4wFkay2?%0TI zoF&=jEKhj6xqW>(liP1%EENx&o-~$f46E>DwlmI6!pD>*DVR;SvO8OUCuE#+_8$KT Y{T2|E0vGSsezzL9%e8LJasTE11w-Zq^8f$< literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/__pycache__/connection.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/__pycache__/connection.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8adcb2010fbddec39035878dd9a67a714a960809 GIT binary patch literal 3117 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/__pycache__/queue.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/__pycache__/queue.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6e433a0d044d6f9559ef52572d53ff9a447cf680 GIT binary patch literal 991 zcmZva&2AGh5Xb$oyK&N_6zEIrp_{0^0;*IbE+_(V!U9>z+9?~n+0A}bQ011q3>O~A zS57^0<;0BBpap7a#?H*fzyFNqVl*0j_?~?HNeTHuIxB$lC0P9uoF<xDB8g_2TbeV; zD4qk$^FRia7`6<n#D5jZ-YcR*9qovYOt6f$TnbI!k+^pUH<9Tb10Pez>+B0`;kq@g zNilU;91fRY^#q(Dl4>HErkd@D<R(~9&2_M>dWiq<dOGuBZEe8MyxIY*D=R*CGoS z?r2wF^)a}HEa{ePh+>++pXfB^?kFv+HEEL-tJ;OyfU*kP5HlCl#x5LH-$*rp$gk() zCNIZjR-Vn<%<8kr`qR9aoNEkuQ#WR%i)!3f)@JjIaoc2e>`P6`uP#*CDr=5Vj8{l+ zAN|ps_+0v+a%6AlhAhbzI|{1ly~0XB%5iH}Uf|v#z(s0ZXSW86KEO^oFrR#wc7ilu zE$N1CDZKc7r<iBDXjYa`WX$&LAZtwiFFa6X+dS@|k2`2cr7(7W;g04X$d~EC+rN># zEJ`RDYyF>eZJJX^9E$9cAT^DJ6H2XSxlzgul*$X;T09SxTDLR1&s0OadxQ=<R-yLl zDLNF@aoF1`1c&h&6$vW%kPGgkaleWn=0rJ5KhLgBUEx&ACx@R2On;IWH;}*)bNtQw qa~Jxdm8Ys*wYAX)i9YIY?eM)E|G?tezLXc(zZ&C$4(X6ZOz_`R$j{sW literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/__pycache__/request.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/__pycache__/request.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ed303f4c819465d1ff1e07a3f54d1324ea2afcaf GIT binary patch literal 3172 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/__pycache__/response.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/__pycache__/response.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..161f0a173e75af0ca37d17372b731cd07ed03c09 GIT binary patch literal 1920 zcmZWqUvDEd5Vv<Xo9#C39X%nT105Cuq)0Ta=nIMvy6UJ@geVnP&{4r{owYY{v;S&) zdre7SF1+$VctL!gedVcNfhWe^O`GF3^53y%#`F8lWN%|5{N=B~ua857{y{6B1M{cQ zl<62^I7Jyg#TYS%xv7)6r=FdAX(#hfeVBKc|2sPEvMvi?4A>eAVO(SD&r!d33tCVg z*AM7O6=|h;B(k!Q`qtQi{q>2~WfZ4^=Ngt<hnzAlkEv85A0J3r$QT<H@R{*_XwRUj z1iD!;N9SmPo+A%wJPqXs7!G0dGs>M8Xy${|xs!eIhAae`%kVU~lfPJ%YmYe#{2DV1 zZ*Z@5NZ@-m;qg?FR}-!$ToOvg;*#ei5h>qJ#gvm`bk1W<gd%ZTD9#3<y*DhWq?wTp z?b_%%neewS>Vm|^#=sssy6*p&(^1L^>@%*p%tX%b%qQiFp?;?hgleqToBLWzF@jjz z_|<;9?<8d%{zTKN*@tMm;M1Q-_8^x3KHbq-xl@XAdsK;(ZSP)8M#b*u%xu{f!DCq= zcPg2tVzjqYX_4+ouF4`;d{EBno={O@urzP)8jv1ChXTh9@Fw;h$MKud4ecm5L3)R7 z2NoVQi|!>%G@1jd=gz`WPc&e4?&;1PEwK5$#v0Hyj9j=k&D^td*tv1%j(iFDb{9y! zoI4A2<AE+u2YM|5Z6NdD3|7h9l~RXuJa<{=4+qe80d1ci1JNu3`$}=CR}fEAGO_$r zWI``F8F9d0RdLLfN~$!S5rEnPZ!kW%(vrq-pXYH=<p3aOgd0jLlE@+>KqCSHtWr&i z#9jr?FD<m>`924&uL=poD{^u?(-Ro>-egwm(~vaDqYPm#xfIE)VbV~~O1{)PBxfe& z0K&oH$;t6|;5r@iv!zB!h2n~|AP@Le%u6i*;=$XQc~9qW?%i)6NF@*)UJXfLVsZTu zzbYX)AOcJ4t>w?ixX|Rc-J3z(Wjuj1>Zo2Ha~+j*mKK!t9r*z0P;XRu6WxeWP5bM0 zD4<3tP4k%7-BxS8zVfJg?F1g)CP7ljjOyAmv8cPCpF);c&Sn6B0M)wgjAojv+ErRg z!$(M~ZW~<dgM0{^@*U$%xAo2@Pt$Ff{dcJ)P1Ib2H`qe<DTtbEc-X@}?m0bZ9`+zJ zd}kATPJrbTICGZ`raHRNY&Luh6I1Dc>3EK{;qZHNs7+I-ZgYI@E+7-k94gh{HroHI zR1MEADy}Tis3D!rT41qiNKDD$!T#6VlG{@aW`{IqDR9ADzo>+zU_$oG@*p2WC0a5D zo(R<~F7mwLL&G+^Cc`*|cnsfQ+z+ksGwbTDd1dVx>wT~8Mi~^>g2^qj>xvvOsmhYe zzEcNFuWP?OWa`#R=pRA-S)Pe>VIlYyj;H`SwC3XwLzoQ|NByu4qbR9#C3zG{6YbNj zlEza=1vOCOYLFF|TuD=q<Rj?n@IDhPHEi*+m|2Z0G_YP-E(Bj@1*=m2mHFpV@JEXb L>^(R5F!<y@F<KNB literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/__pycache__/retry.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/__pycache__/retry.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c19114066e22288370cd3e5d9f0e0f0e8beca5b7 GIT binary patch literal 12606 zcmb_i%X1q?dY>7*K@g-QilV(<?^w21ge*d|WNW>Qr8P}~7QHg1BH^r;wgU{&19Hg0 z4BRsiNf=DFmbxmnhpj!NDwWDHRht}B`yb?zYc7-2UiK2@nnS8mNmYJdchBG<+Eqym z5{;RjetiAw@7;5Idb;?<-&McV|47sRppATTxc&g&;I}B4#&lQf=sUVj*M@8C7~(gz zlfrMxO?NUo8SyObW;?l^oNAZf$%}S{odV0StXu3%?M!t_JEhL_&UB}|Q|`>{%yedV zX3;*wa_)uB#hr_~W~UA=*>h+5&Sg8p@~ps$Y>JiG^j_x7*qQ%GV`Vn;RAV#tm9x~& zg1x|I&vbjC@e(t(waSI(pjfNu(Tuel_--$>8&0R|^KcV&MbGNkEbMh%8+V1!I<$}W z9oK$tP@imcY0dXMyA{@*j_vot8s|Qbra!Tcx9pIgsN2Wf5B-+!%G=p3+hXJGx9p(n zdx5RmZ+K5E*I^IP&gPgl6*$LHdCUH)X9wW}CkTCh5@kDfxbL$l)#GlIvBkvMAhg0> z5MAIlb2!LqxPHqD9p7uw8spD2E<V6F_%{@`wxcr*`=jrq>@+i2ilqsAmfOn$(G2PY zqI)UaWpOvPr{gNeO4zGuAS?cWJ1}Om_$#wnJJ+6O7udz8I`;7rn|rG56zwT?i(O{( zPpNl_U11BTon|kwm+@O>-(#=fcZS_&-)FC)-z@t9Gf{Jay~AE(S5b43z0Tf1%_a6G z`yqbk*fq9@-^=V>cAdS27W3=|TSCnhc868jP1G!~W%f2|USehJ^pB#9*cR*dMNKos zrP=bmwzJpc0;OuPXyQ||TKgua4K%GVv^(9<JaSyuY;oHPZPPM6`$%>7cMkwF9*6s8 zugmb5nb<sR)D1K6#c1KaePXsO&)l`mz-rs>3C8XPHdC_^9gZEuO_<$wJd9!mm<Tsk z&kfDC&vDoFeRpL=(nxd?iPZD1BxVt7Azr-u?hQP$*xg(7D;eSLyA?qUb=wcaF8Vyi zXrEY~wP*81HPT)6J8a7pXQDlIt8&SNi`PD?)vw(!uTka7&71bI)q#jqTYl%}wTh(h z5jVRwUs65HMaT_c^`C%M9R{j_%h>wpo>o{HU!s(Z|IPfgY5~mME!xAyx0fr5B)T7k z+6k;(7g+C}m|ZIf9B<ETHrFjTu$#^AjtViLqCiM^AlV80aKx={7X&z-xzch$!b<Z` zA<wR}d%J2Mx9l#-ZcrW5Crz{GxpokU{ZuP8Ee<f%a&FLY677~1*aGO5)f3B022Dud zmNVqVm9E9D4*G{?=!cfOk}yr3ZcVS(*|oXpw_}LW%(PtBKdPE_=*Gb8Lhabh_FA^s zYSYKIa!6Uv3j@XQ#Dm*5%>cAFeGg#MHMcup4p8er7O?6Nlz|S*V`dvun7dZ%(DXey zVnUZ1+1v=Pk-+TvKG0;gMI#0@2@OZreh1=bdx5j-o-FM<d;3yO@hln3YKhT=wDmmu zxC>#z=Gbh{hI9s49T8(a@g3SRh^Yf@Ks#_^y1w5%cYVupac#?SiFji2w!?!^_B#&| z#eYP!+EFnrY!Wm_vnlqg;d_llv{eT+*2oqreK6d_2mX=Su{@|FsVTr*kWW`=Enz_f zRB}bWH$q%}-v%QQlc{EsYoOAgnIwnBat^owv)El)EbS^#3TzI+zmY&K+4Bfv20;%y zvk!IW`RK)+Jt!ogPMu{hLZZw47I<FNs+mT}OStLV(I&o?{BY8>UxbTv<~dk}FzsWw zU`-adf-LUnmP?EjJ_MD*$ZCg>0EvaL;N}q)JBpD42Rus65{zO*JJt#CfoKF^>?OP1 z23w9!{9UbHT8eWJh&fH50G*CK?^Ml)PRAL_*9%f1M@tqnDIlvrQ8qEbF_!tDUVn@# zrR{}1wM^;GfLobu-d=wD1`61;+sn79_>t-JWcb_5?|nD?Fs7WoJ5iJ?IS1Ppxoa29 zHL~#0ot7*ncuQHb4qQaiD=~6#JC2}m!7IWOl+bmoumu55z-l(-(*`!OWxH@Fo6YYA zy;%8x<H@p`(noDT+CwqV5CCFYh+_}tkCSd?k^^K16S`uTgx!K`g|+PaJ(ppPq-n?W z(uXIp3xRbL5W=~V&D7*Dw!-ls)X1zrhJ<?Yp}Z1APzjemB)zrRfy3p%nZbNQT*+F) zyCVS(5DdUmfQhuR!oaj)4&sN&SfUXDY*(tVbGEqxCz7u;w}|}e{o4BKrw{9mPiplC zkM1{q_F$u4d$_S(KW781p)-=$sssesgcAYNgdU5LpWNXg@~hB20()3j8@g5kKf*6B z058}CGCJG<k`nrm6cgGIVX}sfup|y?*#thd4YCPVG|3XpW`Z19SJ_jkff1sT{*wzE zW8G1H5Sku@#cq+@siyKc#$ju_K3I)B48PrOw5=9GtWm_&6F4IDgbWh=Ht^c69Uj@X z7l#Q@WQnp5Y;YUa!%vd+Ep~hu{!t5IBj9{O{$B@CCZR`TBI>{v#k~dD2rW%38Hd4S zpMbfPr-&ACj{?`WyX3lzI<B-wUyl=iYF;-NZ<*Ioem!*OgtsR)6aMk3xn#Z_`^+?i zq$a4E8**#MfugNhu0lIw@8HL_dtPg$Srzm&M`%mP2aV?E%hhG*s^#h}QNDw+TCIMW z07`5HN-(2}y*wK_0gvHnd0^UPFz5)(IVxcvuCD#`(fWGhlhw~gg=&;FVnjx{W09l+ z8@pT?XN_HiB+`_RI$bN~&-M|2!=*75yAQF94I5-)sB`V(eYoIoCjk?DU2?jy&0~)J z4Hz`>&<=YXJcaETGl$8VlX_to;p~&p+&(_Wu)yZq$d|&iVs68ByB3FRS{_9`An6>> z5<yThC#(uBcT^qAHF#zcQ-}p%=f<fYI(<M&Ni;e1q%tt;i}Ea&A)H>t2EzSGNZBQc zOYj_DuE^Aw@cAi6vSQW&jJlD|-%u?fM4_NW7z5VhKp~mHrue@_F$Zv2A%%soY)hzb z$3qgJ13S?~z=Ofbcq-LIo8WU;mt-8ONsNf!YV|l+qbk!2vLliU)EkCSM1M&TxHXpR ziP>0LSILp!4fuhG0-#|ULhUs6MZ##fXNpB7Pl@KHSjEz+&{DEFc@Jt=h@GG>lLSPv zkTLn%s@1oC-dJ6)*R~ql_0{^P+l{qH_iNitVqf_1;~N6QFI@o{-YFV`F<DCH*`{TS z(6Mbw>XhRxBEvTKJ7bmwJUJ>R$uN$`97=nEu}O%AZYID2Z$jUyxCN0IHG<Ap<I1Ks zONLV0R}~de`ax~=ew0G)BT7B~v>s*e*B;jDwJ7)Kaed>_=5~~+Z>_G?oWImH&G}m@ z{sTocz1l;njyrvkWO{y#tlRS<icOBETD?_9Ngw*9yy6<Z!4nh%eV{e8fq_yVq)-}z z49e6X&Gf^3usG1^moGEp6g8)XK^jlfgIxDsm^ssMogHLR<_39``9T3?VNgU_987h0 z!zt0GG$^5FdN7T$%rxZ5Qk(07vdT=95r!eksemy`Q|!YpfVL<fBa8f`9Y(X0f*j3G zn);|bZa9#qBpou!3(-tcCC38=lzfeHN{pkIN&B78`Sgr9<vb><l%sTDyKVk`(9U0_ z;s;ciRM2|(>r`B&;teX^q~eEEEK*US;yQ}I(fAGg{O8@9VW)eu>vWfPdydPNmcQEH z^_OoksuJJE6S#*yzp1SB&0grZH-)%XyC+e;(IAhh(fBJ27MLisY*rV4#;l&!(?(V= z$$OM^)kg-HJjl3Xi<pN#DSU}_eu{7K7)6M!KLG0-fN>7MHV0sf12E13nBgFYFWBJ# z%y0l!IGDn>#PnySQ)6HpOb?Kr)wQrZ(9ZNWSntnuFodyLDg9r8Bh0`^X^3R_{~067 z%KU1S4iUXqQv59p92tj4QC4{5f!G#VEYYJBvb4X$MX-QE(+z+sfF*FnU(qP){elD) zZChz-hffAyx)x%%g$pHSFAq`>w*sFVq&z}YJJmydpohkp!6Ay<T9_IbXS#n2q6p+6 zyaqF#K{UhkL58JppFT_J+8_-?)BShM58-YeS)2t+NSk({8+IMn2~R}&Nf;9q^H9bT zJ`<w2Dvl%s$M#=a^F263l%67%q9!8kykfq|&82%NaX67v!A4Ycko<!@LACNrSWuKE z8xo~le=o`~d$+e&$waA^8$>xZnwTZZsr+*^1$>05!9<fd=SeSvnZtj;$iXZMEtS_V z0^GDw0_T<!&W#(6ac&mv1=8!d2(=J+GMyPu2~BYBnSKUL&-7Cu%~FRtUu3`!Pcke+ zH4EA$ZB9EiLdo0M3!t0re{8M;v7T!QGznjbA2~WO$-)jJ(o@Q4m``8f#9Aw+hz1f9 zkWfqVM(TMR-+=Tt@c`2f^O#Ymox!OBog?YTFF^FZYjt*+b?=|4E52HPQS#lM9X4X6 zNU4D8`*dRC2KR6wyF909g*xWMn3X)X&Gw=+IS`!KloT;o0U@;1RHVJ4RLAk6sS#H= z7MOWxa=7zA1A0=1A`KdEI;KLf(c}VVC+YkrOcIn(XxS3PDv!OssQ2g3UsQ`wqYo{B zw3XQJFK`h;PciH)BxpV~NcWr?-kmUY0ErQIDaafU=6Av@!}ED)rC;h{4jK%{QK#ua z8rQiqZ2=qrX-gey{4<uKYm%|ee)&(n2(Ev=y!7KQ-@?Tk{a4k|+Btp@BqxwouMipB zjxr)^5~aY{I9}@@e;Z{;g$Gdq`UYqtTH{k#0~8WA4(D-)^jpbD#WY2Nq#Uy-rvj*G zR@PGAhO}$NVa+7y7sNcH9^M}?T`-42gJc!)%|pJ5ddVRC`&T6TFZ4>_C+HLZ!o<x$ z2LlVxNmT*nc{&jVTSIl7k>XGFubUr<EV`{y5O7t+G|GpB3!ems{i%^Bn-wD}fNP{1 z$Nw0!#ViPZm2nLx<vO|Q8DcdFituXx9c_X<3N2NX>%1)2InnN0RtYhctTizBE1?dv zh}Gc)87mYgz^TppI*9u@QA74K%81}q(aS%h`g2JY%_xf|3I1<16pBH^rljd>^cAra zEfbwW+mUR^RoswHIfG>pHb>`k<d6xHg<TfznIZi~khejU5ygB5Ma7V;ms6rViEOzc zsZft`{;q%p8-aoJ{+tAMyxIA<3Q~1GPvj=p&J&`<J!hIkw_;dpn8n-{xrsPgA~rWk znW%7q(hPO@cyYQ&<TRA4XIfw~IzPY>PgCa6B>Od+!x&jITB5Znmn4=eR6YVc;d{qH zAW3Q*no&q5@*2nhVSYM=z#$gp=Mme7$$)|&9NQu;MevE^dNgowB&N`;nxhE@GBfHy zoHN4E%M{Zl1B(2VbdhD21h`P-Jdz8NVFy72apIrTMt?~gEuA01n1WZk;ly4Gewd;S zCOf4S1TzvlN)eUGnPg{)0ZBKk;VU}8frM)#OsU@g+N_DA4oWQJT+zOUL@JK6I8s$X z57#0~OAA(~H4LX?1R@;-!pIQ*$(mI-MQ7u{HcsrSgK?GnfQy^7$ExpuC{9j7%-$(j zt%>DEa}6hGs2Bx@TGFt6kJe9X)6)Hy6>Fc<Yz&6P?<0p=!Vns5=~d|cU&K&|HH(OT zB;%(RC(g1&jshMRd1zv_Ng6v@n>zWLgm2g01Ba>eE^=8MMAXCr^uf*xJPM$WlTuWm z@CH>-Tp|nM0GA0Aiq|9@uZ_SFOZr%YF(3#x!4I$Cf~1@;z*<1E>H09o7lzuiKQPz! z?baa@I&FyR9yZ+@%jT>6J+_%d-+|BCgZ$h;rlE@vNvyG*ED>x0Q9+)??J=}eXQr{7 z#0LpONY?AX;B^oQ^Gt^cF(R~qlZXg5QBkSTLUc%Rjc_3b)6#P!A|tFa*>pXL5r|I` zh~CFdtO$d0tOWU03fvF$!z{n5%&Ot9peBWqzVtMGm?bl79fJsSgEH?}yqxx?41nbk zPD1TZ%*7AIaS4D)j#cErH26Q{zMCNV#NrMu5QmLDB(!koNK!h?Q;y|)N%+J;zBoWa zLrO&^L&b`i1`v`omO>ioLgcHw60Q<GI;!{LOd^eiWyyrh=vvWH?Yc;k!Q&WtN(rHa ztO<^ayUA(k4Fs9jv0$M^(hjNtEG6k1zT*N8%J3HUP)7eEK|tYtwD3)-u1Z>1T24F` zO-bsYewZE2;2?X{dzs|GypT9}hReit!hz0_pMb~|?pz$=$Bo9^1ah8*M6TdMup9Yl zBSC&UgMc&xM_D-3GGq#>#Cl<lY&5yY<QDfA%vI=ZIxoYq0x%-xLSXk3GtT?uzd2AR z3ZiV=apC>)8g62>ToNn_6zENl$z_+Yq9kMc0WDqFC1U~6A>}&y7X?>UN1L_il|uSZ zc7}AFSp09%nHDb+U*;eUHibinSP_vT(qGxL)GrAX?KC&Y!KE$mJNQk#NB5AnQ_6f~ zkSIeg<dm`>xzj0@J}n`EHjQr?<NXG;c^VB@c`?h=7iaKh@r*|QHGXOIy!ZF$`+M|7 z5)OTTKPXV&;CHAg68I&J|Kqvi6vR0Hg7!2{!SkRS{&kQ#KyvO^I-eaB#q<BdFFh}^ z%xOtJ1+^*AKkdCAmJX(=7VRHWo%o%iez>|bm=Zmw(5ieeL(f_EnJz{_Z_qazUZ7kB z(3>8V&oXWOigr4K`ilcf98$t?YB0lc&$6epgV}>ig08;^=a7m-pI_<S--JjZB1Q-D z;pKyQmPh@p$aKtt-3r!UlWxQQ%431^-<?bH>MEf@uc(OZ{OIww%74e<!-}~I)>TI& z@<lvx0zt17CC4)3PD!FU$e4m*B}wrhL!+`niGXDAl_W2pyquMEq4yTH6cNLdOhsue zeuYaO`hj5hj^s??<aqM*K`7_MKN@+pfk>q##RpCC)Z#S~<z&Iv?X~CynRd^0;Xfto zT#<_;s0euFJ;QI7cnw#)zR6c1V^OZ>9eVze*S{G0zI<6I&hrLHaoA{6$$qnXpj>JH zjg9z}1iL8&TV!DtkqNzf?akm?g|bwYD{>Ulfs}R<d0+lE?#|85HtB&y1!?N&vW)&@ zzCL-&m6KM9ra!7}*0wg*8nvyhM_W;O`*Ce;V?DXg%3PXEme8xP{2eL|s34WY-=pHk zC@L3*YM#$ftq27v#T8{5^sZtw)qwVI9pYUzq}I+!Ek~uqI)I&{484bE%X~9siv$r- zA<nLyOzO=-A{QGFqJXB?N@e3BlEaAEP|81%&os&ikLOTd#MNAKC1X33nJkoT5zn(I zv&MpvMoyGQDeCj+(Vr1JRZV70j1OiW=0k~UhO_}PpUA}w5I{epTuW-RKlmC6L}aJw zjp;_?bWyk$cfY2jdsSSY-k=vS#2c!zR^6eVyj0bcE=7&p+oV?B;)w)Q)ytdH3ak*B zMX_JF?$R~!5?Ge<#FMxp`_AnyZ!~^Qu#z*UkrhfZ?DAp7s3WZ>|JN(oP4TI`Ou2ix z$f($8bbQuxvEZoGXnfVPT=gW^XfVHp>H@N!eY|&wBa(%0dijGh5U_JKe!Nw?zp+(Y zt2gMlskXJ<`0ydlwCODoPDxT;rGl6?ni9u`(qH8Fs9K~1DBB{_8A;42B0}Dz2Z<E% zJ-QW)|AelNs2Bzj;))^(ku#<^ARy7mAEgZg`Q5TnOr<Hy3x-PTrOWvlLoZF|%lX-S zv6#<ii?jJG{tEalAR+Rx80C2iBLG4G*X}|60ys{7w9LEYkdWR(Jb-oiu8Tt+di#}A zm#9DoiBL&yAd;T^6YBIaJt-#V&w+>&r4W<Dz(truIzcAt@?D53-ggeTP&$;JdWZ?3 zk&mejEsm2yh_X^U3X1u=RDBLAQT~0o_xDIZ0uu!#<R~R4eho8UN)^*Zy_lN)GmZX? F{{a_G@eu$3 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ea7861ec19f612fa573a7010d3a90aae8e556235 GIT binary patch literal 9510 zcmd5?&2Jn>cJHtG9)3uoC0df@5+%zTnH)-_<kd2^VVWW>2J(>MP?0szX4sr+a+>Vv z9#!{{B6qlOmR=x0u!|sv<g&LMf*j&MVK4ayf*`r{DM1hfzU(!CPx-y7o)6MWZUHi6 zSJ%|%tE%_j@4Z(uKQfYk^<DXA(Y&VpyEgPGA^$m^uxMx+*SPL!Exo4els7!1X2`c$ zGv(W=S@NB#rSLYrbSqQKw6e9VY;SqFR=$>R6>5c6u~tM`il@Di)@W_CHC7vIjn~Fy zS;o82x>&o2yivQvv$Y94@8G%Y<eh?3<hkFPwJSW&3*TzBN#|Y1;zeij)T~`SnwGO) zt6jr;#JkqIUc26Uul8Q+M(u{AU=(E&wFzB&q4^V*=Dfe37yqhj^!HNpjjy$%N%R~; zD^_Ezo3)#*soIomJ*8Uzg)XkE_WUQWj2f%m<QHpGs;_g)N%2dk2HMOyslD5^+x}xY z-h}r->rU+sD0qio0?oHE`;Gp1&1AgGs!ol?uk3xuC;7YlD!<0B^Y{1-{yt~?CZFQB z_-+0Hzr#P=9Y57;caO$F@m)}Ssdh<HTJDehPszx1Ql(nyOO2QKy>B&s&$)-)x|GcH z5uXN4AMqJp#(SF2^80wt@W=cCpZiv?mHAKkJb#GXEPup5M%{gGRJGE=_rxY8Jsz{S z!@%oAPTg&_0})k9Mx1FnZ#;MBD9&~KBwI3Lv&A39R@k&3#A&2+k3Rk$T&1BVTdh7@ z79tSwl~q4<8Xe)Rdv>%Fh}H{R_^!VjU#M1AzjDJ6`J@PQo1yz=rDT53FwFONDft{p zgGQxK3Xg?n2~YSGNu))3S3A{_>Zkf7awo={dyx^Dvecx~Q{##Dvx!&6iFsmmjjq|X z7PU3)#CU!8h1NB=zE7(+j{i2#@L394ZCf}jIt&<hcbzZ_S+K*L*B#qqp5yOEP3HQn z5%^(b`w@%WmQ&8luA5D#-=)<FBev~O*XXG2urLy{+eeWTmSxioC+Y}4WSgSnFc)ox zyV_BsIn8XJvlZJ5F$QYIp&MczqEP5qcgc!P98+w9q}V)m+i{MDw}r5eN~u`4V|_bL z3n%P&QLKBhF8)pv@1o-mpUg(B_H5g2&un*GkI&qH-P{iD&v7b}PyN90c_3yx!t>ni z`Pok7db45Z)ywUp_(ol>9I4!<y4s@pw%yn#R=Gy!l0~9rCiLt2xGtz99zEL}{82a* zcDo)1jeRGIb4$w`oAt_CWjP*O-&osRTUvWo2Lm0<&4VQ}PZz6o@Cx->TSqfhHT-2h zzMyKB*1lTbSguxA*DA!#IwgjSM~ic=??m->6!;i3=eBLmu{~j*wTQ(`Jd(9;AQNd_ zu+^y{Cc63_*aWPlN9LYIEJX}ciBopia9wP7-USyEKQx>;C675ybEgq-M|_BpP~Wa6 z^FfyMdTccVa0H!)O0H7w4w5H$!ZZ?1&*Se5bwr`0E{{y4?MapgB{~Ucy0@2dnKmuc z5Hn~f%9Olisy{?|C<ROZL0>qY+<aDjFh8@nT%Ca&&wRP`)lBv2;{4->$2U~X($hu! z&)uI{UwiiQ!TkM4RF9^^Js-?H?)9Xa!t&CSrypTRjCMRCzw|~q&JAh`$o9+oeQ1EB z(V4L@$8lP9KF)7c7klGplKgS{rd@gd>>1vUd|Nladh!T|o(D@U1%Bkbi5ggY|3jz# zIiBz_5=X1)Tmua1+<<B{xydcOEk452JOibf;#r<UNt%!H0xzN@!&5kgF)@ekZ$Ge) zQPYK<ssnG4>XESr{Zt3GB294vX<FtpGR?{~$2AOVR#ue2=i_W!1X0ikJjheiY3$dD ziF~`|Kx>AcAfAm22abT6uD8H@akgRC8;*#=I1{uZ7b*)y_`c(MPMq0yj#Q@MwxM7` zFp(8H-cD`2HxD#{2+{2v_r%$H-Syq5UO&K;;W!daPaA1HtEZE{<4c3RF85kDXrt*v z?>;kAceOXr&Da~cYGP^eQ`CqBBqdXPLiv8dd4k5gz~*wP^+wZn{Xa$PkZ=NY>Bm=x zXgSxg@^+d?9D6izZ9gY2M>;8hUn=U1%JIz7B6PiQ8c`rzCuDvQv9Qx79q4cZh`@vJ zv-P8>iEYPXeu5!I4oR|@INh-2_T$~QqvrV~y(1}2PSXn-wmiRIVSq$Eq>Ze8%+4?E ze22I5BPo!CABo4X+q(DzqRo&ST`MY<sD~Xla?Vp$2%$$4p80d4N9mB`%R{sbHCbuM zgFr(9?+l(L>hu{B(qSCJaBAof1QH2oS8XqaCygi5HM#NI^obQ^yZVmKsXpiGUF)xn z-;f5jD)t<(aFIoXqJ!C4u)T+aVXitB`@nWRd)sr$Y_o~7ws3%Ofb|66*p3KV1n4{N zZb!fxp`n=Fh7`1gYe$ZEB*D04AF+nr0U(nMfy-n&^z$(p2^Wh3wu8CK>}AkFQ=fI( zyTax$CIV(N-#G+FBqBwIfnpA-gt>KqR-mrTRsz9V0W1*LCu>Qb`!ow3hc%<99WKoF zfVnIjo5M8VK_e`?!K~xY!oq^VGHde#f+9ZC3GH2{+>Bb@Eog|DLuGk|rL+_)B~Qed zagLT$7tZT2E)diwRN{*xkgta>xLI-t)KG7j*rJ>uW;!>XAcZI3dT8Q3N@UNJ65?4D z#AC_0Jq;$7sWiQh0e8c53@3;94eG-QB${sNMmlX;c&opxafbDV3=3d1^hjl;lqHo# znzCMx^L0{=9gp(GdY$Y#RU<yd=z{oCEK>3XC6fFBc*>jvYf|<dJRvPVt7i*YE1%Aq zXF-5~oVZ?cypIel2|xe`$M5N<8te&!tceqttKfVCIkRhq52F+}Apxi%l@n#qD|<?& ztp(#1@4X!QrlNc|)wNEIa1ZS*Y9AH4DKdAZq9RO6AOD*&Y6&hvGBkHx@IKoCmpcO7 z4FeV&1~dWl!UQD^=DAQ{#18I`3$4>LZWmw`+Yl2}EXXmXu{>zT?2t*zCy_p7t0ujM z<{NZg86pCmVGoh)K`!85z^rtma9RoxtZ2{)Bx>UUZQBsTz=OOc=I{gTYpfkl4UdOW zT>rrKT%OqM3+(6jPmVtxY7;_#bE&uG4wTvQn>GX)6HKA$)HK_LN}u}qgOjOprBsYF z!fAUp*>_$5ITjaa)*?*Prz_7ZOZBf7*JE?niKL2;(@Js$X}&n^_+$yfB9!h#{LWiV zXhEP@O2-!Ma9kMLv3MjgvX%D{XPb7|-0Ap@_`*=Dx-vTpQjk@Lb8-}4v_ptpR3GZ~ zH<&cMj6}<i1HSVlTzb(g8bu=y=oGI|(}0eZAJX%*BFW94Bhv*h?`K6Z0*H_sMw(oF z5}6USIN;JefrTntJf<=-bFOHo29;LPmy8?xKQVaX5lJPe_z+s4(}Ipp6ese+ZS;Mv zX?ECj8_gbbv}su!P31Vm#zQKA(MFMWo^3gRVy=|E<n_>lo+U+~_~?nVW5ZdJT6}@q zk-e}5O<3-`CR?i6YEOpj9>=;8X+Q+XBr?eDqX|f>NdFIcpoDT4ff}fjlrCU)ImcE) z2ZQDZ*E4&28xRHL0oiKOyVZalC71#+Xu!f_TN}%N^n7(=`N<YoJ%sDWX|gRzZ@;Qf zvm1Q~G;~}{F4$Hj@SQF2zF_@T96FF-S^`KQ<g`74mm{?jbpVp;{z?XCpzI)^Bo^L3 zjNwC2RKQ=7#FbLgR23y~5G>b7#2E;V9YsPsLJ`c+9Iz9@3FQ-;@X^lm@dcC-U@C); zK<jttr|i%|R=2>qMKJRya$*}b|CbDW%;c_k?!Lo*M3$_o#JRpti>1F0g5=W0pHQw& ziCVVUqP$JX0B{Iv;!C}ehoJdiP@$G=om(<T%^91kFSFmE241b!&PVWQC7xKYy3F=u zWS#1;!IZS#Lv6|jGC@)eDZd-sI5E0Ll%}u=-kIc`m2b;}UDh?$VAI!gFe|Nk9!O-t zbAk>)|D5P@3#G-b1({FT{{?~;J&*OIJY-E<nm+&_l9`rcQ-FvNWs796J|xdu5JS1G zUmP*6Bz77+3Wn_oI^zM*%w`_cHv~e8I*oc5h<$vsBiUUJTyB8J5#~w;BE3w`;ntQK zBk+4B+I;!pM`gAO<ddCe*b_G-i!vk=@L+CQzUEcThC&@UFY=p`##M)en%DynClLnb zG0~=sAePwDYHa8il5~W7nxsn{pXTX}-_rp+SV%}A6qfcYqBrFva#KzW+cHINn2O;s z+DAzb^+*=VK9$A2ZAiNHw&8B+eEV|ZMY21evR}}E<v~1VUXkCke0ea~`N1-V_J-XJ zJKJI8Mj#Sry|pzIy4l*2GXq3XPCGo0BT<@@c{T!T9)cWDlfi*gO4uPWG=>CZU}$VY z0dpsWx5i=oD;K(Nhl4nn^oeV5=z=X1Zs-9D?N?ub<#Ep^_#<2U4(tT-66AWD?k;Sp zXfO>i9NR_&ufLa)A*EF<y$T#Dv_7GO2kRY7LyWQ3c6@R|5|2{p&mjv;TIz!ZzGwp5 zpx3b$Xu}Q`Dv22~;%K?bo+C_Aeo(Sb0=zzPN-WM|NCJGx^a%?LCa+370zCJKPFm0` z4xFXIb}DHe;+eUvt?6@94>1%f&-6IMAZNEk1uzCQy-@anEXF3niIuR9Ee;M9U#bJZ zh9Tkst1lT&sIcr{pe4d>(UC%n1Ho5P5IqO;5OB&A9+T0WEL^T=K~UItfdn_{B#SFD zmLncQ5wDa+q_ZHkzk&twIO4G<%PWh|pKaEcR@a{{Z&c%vGshurqLG-Q<Q63qvr_Js zgc2GVDD#9$m-_YOf5n+Z>d&Lg<wOgf6aW7}pOD~3yESTznimmnu#BvcHM7PjVm;#~ z%)=&X8{`1dr-<hw9-20^VAplCC;4t(0?1XsP8!Zjh8w>&QEG)#-JJNVqw#JYVN9!= zqY%Ig?e%vSj7Z$!ywbIkg03BpB931mcjg7|bKp4XCxu@WzE<rlwEN4X-Suu^FBPTs z())(^rq}0}81ZbcuQh)X?o@sVn!W=CaIOG;hWH)w05UjU6p%<s==w);vrhG*7XEWo z5I;mk@%yCa_h>!RrFPb@af1+z?v3$OG%owf8W|=|+y4N&Sswmb%yZr}oOZ-W$(?hC z;q61WCa0BviVEZ*+%6<o%JHNoIR}_1126{AP;m1)bhpA52pN?zI}D`f6sPj@d;a)9 z0-#$E=%}ocP1p}`5#&0|={ZcjUOl`WQaqB-A?2K`YB2sH#bah#6eU?`K)Httr12A( z+3Goy46x|KXeBD3!VeIR;M0r>ND0eHNKeB6Rm{xKuKn#Cepaz1C_GHrz$Hy88LVW5 z%w*HUQ&uj@Th;X7#D<6L#SF=Z^(lx%C$zLU>~O<R_gM?Bh}#D8hYmU3fENlD!XviB z{%ZTjK`wEkePQJzG)VzPw&U4wr-2GYtBf)BEv{jeKiKW^TSJa_0kO2Vy%=G9Q8w$_ zOz<c}gb(R5&i)2czv#24o15!Z2}Oj3a943K;37KYX|~;gTL+Ser|wpj9<C4<ufpb6 zVa^g*D{_1?p$OA({qUn$9?l-45H|od$=gmqZ4jiRIT8a4V~|Nkr-h)L3wK;l<W>$m z#H+)8r3&=P2!cXo3hdz$69KxOiSz$8xOYLSWf{YYGplRz7FLBNGHX?JC!0b5!w=&0 za%F9~vZ<U9+>)v2S6p<%djEbbzPO6px8<eh8_Sy;i<Rp7+Qz0})K-SZRw(x+B?Tmi zlUQ^QH53k%AS8p|#32fpBpk^&W1<e?LUL0<3Qp{zVXXfs?mR|XaY%#R0<(n_hSMf2 zJ!|3m0T5;2&T(9yG{>b2cv&9@WLbJKeG!q3qCSeekx82(La)ACXyVH#9tm8>$WUBb zTt#e7i%di`t|IPi$@@QzAZC~D0W*lXQMBVR#pY0&Bme2mCtV#^%@0qEqfx*H`YTxT zuLIUndxfYNjqI3!El*wKztmoT_BDQ1QN{a(#-(?3{P$0s2+SFh3I`7>`R!|16~6=D zgOOL)S#qg(PM1djiR5Z%fjv!fBuUO2y9LwvjJ30H<`TNsPlf=7r<nd9E~D>azvArT zN`1Amy!r9wN@-M(ArPDEFXxq?dk<g5N0i9WZzgGrpA^_3dHr!3v36WJ3ks*oOVF73 z6F(iu|FP|L9L2!<sHEQ&^a!kFcd!<y;4n7qopUygpjaz@hoOa&$Y|+tBM;s{SOB2` z1A&3dxUS0TvK6j8Zlj6#010js@G0dem7mfB3K#Ema9NLVu>g>3!lQ)P9+$W+yP+19 z-FAI>87#wiD(*+?YvKl7Py|>|C|J<#N1Rv459Jn0u~Y$c5+B^~;T|0!`%vzoG7lM5 z6d{D`FW1(WD^S-WK#^Fd<QgT?@Ow@<3M44Gyg@mNHN=Hg`6CXsi#MrwU_8E|uXkjt zA^%a`SzCL7>kEe}&G0CU)9O}5h6H6;MR4j(CZH52xtl}h&<~Zz*-uoQ?K2#R7XBF$ z3eU(tV_cswCJ=E<g87z#^T}G-5nLpi$mtW1=24lSL=I<|LSNJ%LYYF%C5l)6Z-3O5 aG(y(6T+Uw0UdfK*V*OM310g;C#eV~%Y9l%T literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/__pycache__/timeout.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/__pycache__/timeout.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..01de46692ba57bf3136048d0411ae914b34d011f GIT binary patch literal 8721 zcmdT}-EJGl72YK&il!;aRvf1Rl49b-kq9W18plb?#%WU9aRWHA0V`=LG$5C|LvgL; zE;GB7OhV{|74)iogZ2T67QHBnzCil~1$x8VUgZ^vUi3R>W_Bq>c9J$XCBfx#XXebA z^Yfh_URzqK|NM`wPhWi1asKJdy(+kW7oT(om%s_!$Qio3u1oi&s5C6^mifLMRdy>u zC0K|ShSlAw>&V4pXSXKL$x2X_m4}t%@^1Z(6D$U`&z+!#(em#3p!~pTp8Eonou)fm z@p@?zjWgK^hoeMgc=TN7&fR-Ie(!GQ*6sJ-`{?dYXXk?tZ{Pc9XZwqiUUP9L9Li*z zJ;=OF-c~A6vvb2FPO>BpeV+*1R~a|&;*(~$NN3j#oZV93?v`a`cOfXrs;u_QK{=>= z?(QxI3qkdBW?wUW?C#d(x!_z-|J=d-`QUuez<48A3YPJ`6s!an@VzWof{Vc_&$)p6 zXM#(7e=#WGpwG@04Y%Ik&pVDVKZKve{cvxryev%OR=qCpGGnRmy;$_52xLEuWgxs% zc=W>?N15m+3cp5461CfU87<AUM8pkCWE~sC($8+Z-rCv_N_xSKw_00G-iH<pvTTIe z_d(}FFZTANS~oOqnD1h)lIbXkQ;GSstfk~<W0_{_Yj<w%tZj%jdf49Fl#jgOD3UEd z8E&pMHE;Kn7)kY-Ss~UB2cbU@$$?ZV3}h;@0Ut9z8U3cSHRlia-|W9(MRLPPb^Uu= zO~aIVQph<>y<P-C_a-8hSr*27!iyqiZsaL%C^M<RYa+Vc?If1n?mTyK(lHV{L;5t` zh@Wo%Cz%#UDz?OlSfy>|6D($4)XtT>GYE0WWY~ilX;~Yq5MCUxQCKOZB8+i9u=qnh zHW`c^%gG&v5DM%PG9qD+uIS_<lKqTSD*7rJ^5cA)ER(}g))F7Y^gO2|4`d7)11}T3 zBpbk>?FuVOV$jp)5uU=HBk70zPzD=<9e^0j$$gDQ#B4eMz<^CV-JZuAjUrGsUP#_? zOFJ9uob+af+Sz1;GqaFMU=nV#A^K6`Wy}^$J)sYCs(Fn_G4vjV!|_mf!(<F8Bz-MK zNc7MPt%IAD00-e|A(F^F$X-Fx#mN(qj(uN(dvR|VYTIQevUV%@lomZ`=(MP_q##F9 znxs&g#hVQ=Qb`Z)F%ex_ycgkDWJhyRhOtN!e_v*;(Ilt#wgHC09-d|c;9R2iHhq1+ z*$*SR`R3NO-W$R7A6$Fu`u8{QhP}<4%FEI9YuDfDc3L?(lCC}t86Y4s1cb(6rmYb1 zfU)t*f=f?m&#L5W>5r`J8!4|RvqLFkl5r~iaTXpFM$bN#01g@RQ-kC=xaH2HRb1#Z z7r<BOb>3&Ke`;ms6pR`CKPmNu@>m~F*IcV5kO|0nghqgyh`#4%2~eD3tJm)%G%`}L zGoN-vim_uAMPct62~x>ytm0gVAn=o&o%?vK!{QunypM$@3~q?~Z1ZcWxV8O&CMOYL zWRL)g!J$Zca-vx<u{(#jd?z?R>D>5)xQ8DAS#uCZ&-v33EMXsx%^Fg|*pJ3RVS$5i zZy;{o|40C_0HpjgJ@iJ1EZ7E)zK38Z)Hseg1j5NM^AH1JqQYzfpg)k&M!}vE0B^9= zlLPMnbF8NkgaYxsAP6bF(d5}Y3D&j94G5=*Ilz{o^wKe4p7@{<kYq>7_d4x7Cq!c* zjkqQXKHwb4%A1k=7&8mLN&37IOY9U3lkRCS7o^oc2PsN$vO=J_2?)~sFiA7JF4c#& zp$2hSd0|R9hV;ELaw*#56qpZ?=n-$J4vtdvLj{Vx2_Oyt%PVXcWGS@-M|cpYWnOgX zP10OqG~M@71oW_<2M&>DkmQi04jB_+s8qo_!hS}$1<*?30L&xyYO~DgAx^!%WhZDH zW<jcOkHa9vbnuvrVPo?G<oJ_$`-Rj}+7q@q3}Ynz9AuHCuw>_a>4UzQBx5D^5=_Mr z;fMfKgiD+T{%rN*fpN-+IVR*0^^o#6KSD^#`KR-2Ffb$YRDvv)@;q}Qaplm<d>Hc; zFwe#|zn@6q2RS9PwT?{NK2=NfqVF<3H}Of|z~#t!=p3QkI4&JI9hZNVgA)J36O6e* znSYf7%<WVH2L(fAd$wp|)T}~`%of;TnhUdwodYil0~9?r<DAtxcJ4xlCaXI3oh^6L z%u|^iYgT5JR7QOsR5i>{=WzL*qb}g<Uq9N+hNI0<IC`x&4x`|;t<MI%Wb5^S9`UCG z%?63uG?2K7uoi6^^FU+=6CH}fozABqmlA!)UFP@n!j870mYw3eG>jL0FW|${dI2|q zn?VZ4?n9Ck$)}7@rC+&BQYmduU%Hy+Ma@;DU3A<Vbi?AoT@xazP=-bf#mL$_9n}C~ zwL}*ZOw&~>bWg|Dmy5WYEp{L;)#>>7k+L@3k~>`~Sl6SZTYAy=Gx#v)f5OcXINz_S zW$^1hAg#LlwNxC@IdG?5Il|MdgjvwGdNZrQ2HeN)q>(KgxyP>S{M3opD^6C;D*e)a zT|IOm9M{3T@)1_`OP3*)$L`OZxb%rLc>(k*`>y&W#uw(tLFE;q0t$b48U^B}S@r%5 z1&Esi>F>kfk%#9FPx+<_d+<#1I<~kuuQY`Q9*<=k@T1|Hk}rNlUTTdr_ZPE<RHB#A z9p}As%Zpv-NaO&Q)1uG<_@pReYJv%2BkD;4V40>UWf6vG8ok;&cI#~|W2h_;hJcM3 z=m3gR%Cad92RnPn*kXN_c`Ah6srZ;q%?*dP06ZaChlD&4kB3r)zL7u#CP<_piDclj zG0<x+!zQMtQYBn3(1u)6SOlk>_ROlH;AMMy%NQo5GK9dW$UKx$NhGl+YXS9ECWd2* z9T;Pxrc5E8xS*N7W2x{8aWzHtk>YDZK=pLAr>|G!ztiA7U7HwvAT0--OuIa3$dcoO zn#Tp#rjGQUCOEOxYA(W|O+_|aIn@-J)x$K50e7)4XBCpdtX`;Tw!p>N?A#7uffd&* z&&qz3&KCICvkIBwDLhc<(>Qzhr09z|&iR^KEv>qhQr)eUN^Zl&y}OFL8lGJM%+asu z^Eq08@Cl6escS_q`X+Q?+#p~A-noPpzote}$@@2ZBw!7m2cwdQwwI&pYUE;a&-0Np z8bR_2=3Mj3&d82}rUunvNM?c66eh_!k$aF2T2eZj%Du+Kl=UX^0B#ic2kT9fhT6cJ z8sGGpVRD1EA9-oo?ixvSb8<=Vp-#5}Gx`2u9E1m9!0w?B#37zo>vj!a-L5u`oYDvz zXj{vuwb38P{#^fz9o{rTG)e9EXUmOd)5{d~cEM=}q+|^3lcMC+rzz@vO=TWxjDGaQ zocFdOS8qRAOwAI9We(7YREw|>JbDpdvqdA2Q<gfbQ_<LA8~+vNrEF@;(^aE_Rxx~b z+`Xi&5OE5zieoOUk@~YG@A(tf=qIop1CfRo6fmULq6cX<r8)vdZWaPCxpRZE3p%4V zAa(W_UZjUEpv~Z7bT7z$`pBjSxwtGfYdndNF_#FumeN;BmqS={a)`W@@}12zOGcF8 zacA{JLnn^|)M<L+Q3_Rlm8!}`8l^Lf3hV3Z<r@n~Ok?>QQW$3&jk-HsvMS@T6WSuB zGG++eKu^e&_Rp!+%++~BRywBakw>7p^7L;4jd5j49Ak@|3UBDh8H|<Ad~-LqEv7=3 zZLU^QTLrh|BVUfl)zX$>6nmKFdz%Ujr0O{pD@OXJFwNZP{DNvLpa7|^$Mpt{!8*K% z(z(fem|L?Jkl_rJufs<4tP@LH&9YjCU=$^jvxYxb3LeV|@)Od%C1%Jb$G^uiowHT} z@OV$3wW>HV?`)NPw@^v#v`QX2-=WmC>@AQh-Lb$+#}P8}MucRDT|QtKpyzYPIT3Ai zn+NUgiM_jXD4$#MZ9{_S6>_sE!<dje)3>S4Jw$n!5I3<*4@+yvYBpY@yn~8Kt=xjS z?P>d_N5e$JSl>xnCn@P_*if0*vw9hFe}Z~1fw)y}$1?gC(sC6Sr$%9X`ofNOjMiC` zPpG<#HSB$D+!*hxsSA|bBiF~3v;9};4xbY8{SACW@fp=G^vpTd@%@T116DT&Z}JZ6 z1so2z^fv!ISjkXUO7cK*J*R)J`18&+{wzt+V>v*tfV$9>-sJ&|tV(ageQE2J>oJwz zmNG&-*3eYjA~yZsFYlaN-c9}2k|j~-*BT#K$lKy=O6>Ebpmi#J>)M1gH`VQCMc1iZ zx;+P>&&p^NJVDtj#)@n~{8!9Rsnm1ob);>V@tHnnb$x2?2{q@XD8*4y8iVX7bVq6g z;L<&cd3!hav`i+T-llP=9pxPgJH4)Y3=E*>$9S{3Xu6NhI8l2{E9U2$nV26?saE!W ziwHpYF=seMm#X-m=CqL@S3+TuB5yO99%HCQ9@9`VGMTeAO8IhaP+vy(XkZ}((N^gK zf0`i9s}NBj0&eFkP#00Jp{2WgNYaq;%{2gxSyAB>$PxMq)ax?Myu1^a6QkLJdPn#_ zR5wcvzm^SDI=XH<bq+qNE{<fJlf$2u_$MPw2lO`*5>`aDcJ~*it?|?t*VPTLUeUzT z?Yy~z=kD<_Rf*QM&sLQ6#c#u5z8SVdTxUj@Tt>v2ZA4CBbByE^oDi*8Ptcss$qK*U z=4!CHs2!JlR`*;eF2j4hM~W&bbrqK<_;G`5%R2EtFfYA~i*vD#dJ7-aURBgxb@#G+ zsWiQ09eRFIb5&6`JF9m(!z36-=>E(aoetICx)(%ko*?nj6e37h%q4B2R_XFAtv$~b z3<cmM;3`nPL}ORz@(Nw(1hbk+a3^Ywo;B%Gbd>mx+De=d5^X+8?fps_<zlr~X<Thw zsIAn_*OnTqI>~Pk)BQ32WT2K6rF*lg?)fvTXllU?X7wTm)45Jnt3lBrW{U`9gtQzP gbuM}aPqW(FS~%|@7C9+FY@^&jKx|a1mF4n(0KW14+W-In literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/__pycache__/url.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/__pycache__/url.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b3e661cfa1cdda8c8cbc700bb8ee063802c10544 GIT binary patch literal 5140 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/__pycache__/wait.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/__pycache__/wait.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8c899c1f235382fb2ae77a0c33a695294fee85ae GIT binary patch literal 3101 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/connection.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/connection.py new file mode 100644 index 00000000..5ad70b2f --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/connection.py @@ -0,0 +1,134 @@ +from __future__ import absolute_import +import socket +from .wait import NoWayToWaitForSocketError, wait_for_read +from ..contrib import _appengine_environ + + +def is_connection_dropped(conn): # Platform-specific + """ + Returns True if the connection is dropped and should be closed. + + :param conn: + :class:`httplib.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:`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() + + 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/shazow/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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/queue.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/queue.py new file mode 100644 index 00000000..d3d379a1 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/queue.py @@ -0,0 +1,21 @@ +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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/request.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/request.py new file mode 100644 index 00000000..3ddfcd55 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/request.py @@ -0,0 +1,118 @@ +from __future__ import absolute_import +from base64 import b64encode + +from ..packages.six import b, integer_types +from ..exceptions import UnrewindableBodyError + +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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/response.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/response.py new file mode 100644 index 00000000..3d548648 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/response.py @@ -0,0 +1,87 @@ +from __future__ import absolute_import +from ..packages.six.moves import http_client as httplib + +from ..exceptions import HeaderParsingError + + +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 headers: Headers to verify. + :type headers: `httplib.HTTPMessage`. + + :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 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 conn: + :type conn: :class:`httplib.HTTPResponse` + """ + # 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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/retry.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/retry.py new file mode 100644 index 00000000..e7d0abd6 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/retry.py @@ -0,0 +1,411 @@ +from __future__ import absolute_import +import time +import logging +from collections import namedtuple +from itertools import takewhile +import email +import re + +from ..exceptions import ( + ConnectTimeoutError, + MaxRetryError, + ProtocolError, + ReadTimeoutError, + ResponseError, + InvalidHeader, +) +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"]) + + +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. It's a good idea to set this to some sensibly-high value to + account for unexpected edge cases and avoid infinite retry loops. + + 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 iterable method_whitelist: + 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_METHOD_WHITELIST`. + + Set to a ``False`` value to retry on any verb. + + :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 ``method_whitelist`` + 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.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_METHOD_WHITELIST = frozenset([ + 'HEAD', 'GET', 'PUT', 'DELETE', 'OPTIONS', 'TRACE']) + + RETRY_AFTER_STATUS_CODES = frozenset([413, 429, 503]) + + DEFAULT_REDIRECT_HEADERS_BLACKLIST = frozenset(['Authorization']) + + #: Maximum backoff time. + BACKOFF_MAX = 120 + + def __init__(self, total=10, connect=None, read=None, redirect=None, status=None, + method_whitelist=DEFAULT_METHOD_WHITELIST, 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_REDIRECT_HEADERS_BLACKLIST): + + self.total = total + self.connect = connect + self.read = read + self.status = status + + 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.method_whitelist = method_whitelist + 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 = 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, + method_whitelist=self.method_whitelist, + 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 + ) + 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.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(retry_after) + if retry_date_tuple is None: + raise InvalidHeader("Invalid Retry-After header: %s" % retry_after) + retry_date = time.mktime(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.getheader("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 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. + """ + 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 on the method whitelist. + """ + if self.method_whitelist and method.upper() not in self.method_whitelist: + return False + + return True + + def is_retry(self, method, status_code, has_retry_after=False): + """ Is this method/status code retryable? (Based on whitelists 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) + 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 + 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 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 a the given method is in the whitelist + 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, + 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) + + +# For backwards compatibility (equivalent to pre-v1.9): +Retry.DEFAULT = Retry(3) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/ssl_.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/ssl_.py new file mode 100644 index 00000000..dfc553ff --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/ssl_.py @@ -0,0 +1,381 @@ +from __future__ import absolute_import +import errno +import warnings +import hmac +import socket + +from binascii import hexlify, unhexlify +from hashlib import md5, sha1, sha256 + +from ..exceptions import SSLError, InsecurePlatformWarning, SNIMissingWarning +from ..packages import six + + +SSLContext = None +HAS_SNI = False +IS_PYOPENSSL = False +IS_SECURETRANSPORT = False + +# Maps the length of a digest to a possible hash function producing this digest +HASHFUNC_MAP = { + 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 l, r in zip(bytearray(a), bytearray(b)): + result |= l ^ r + return result == 0 + + +_const_compare_digest = getattr(hmac, 'compare_digest', + _const_compare_digest_backport) + + +try: # Test for SSL features + import ssl + from ssl import wrap_socket, CERT_NONE, PROTOCOL_SSLv23 + from ssl import HAS_SNI # Has SNI? +except ImportError: + pass + + +try: + from ssl import OP_NO_SSLv2, OP_NO_SSLv3, OP_NO_COMPRESSION +except ImportError: + OP_NO_SSLv2, OP_NO_SSLv3 = 0x1000000, 0x2000000 + OP_NO_COMPRESSION = 0x20000 + + +# Python 2.7 doesn't have inet_pton on non-Linux so we fallback on inet_aton in +# those cases. This means that we can only detect IPv4 addresses in this case. +if hasattr(socket, 'inet_pton'): + inet_pton = socket.inet_pton +else: + # Maybe we can use ipaddress if the user has urllib3[secure]? + try: + from pip._vendor import ipaddress + + def inet_pton(_, host): + if isinstance(host, bytes): + host = host.decode('ascii') + return ipaddress.ip_address(host) + + except ImportError: # Platform-specific: Non-Linux + def inet_pton(_, host): + return socket.inet_aton(host) + + +# 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 TLS 1.3 cipher suites +# - 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 and DSS for security reasons. +DEFAULT_CIPHERS = ':'.join([ + 'TLS13-AES-256-GCM-SHA384', + 'TLS13-CHACHA20-POLY1305-SHA256', + 'TLS13-AES-128-GCM-SHA256', + 'ECDH+AESGCM', + 'ECDH+CHACHA20', + 'DH+AESGCM', + 'DH+CHACHA20', + 'ECDH+AES256', + 'DH+AES256', + 'ECDH+AES128', + 'DH+AES', + 'RSA+AESGCM', + 'RSA+AES', + '!aNULL', + '!eNULL', + '!MD5', +]) + +try: + from ssl import SSLContext # Modern SSL? +except ImportError: + import sys + + 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): + self.ca_certs = cafile + + if capath is not None: + raise SSLError("CA directories 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/latest/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) + hashfunc = HASHFUNC_MAP.get(digest_length) + if not hashfunc: + raise SSLError( + 'Fingerprint of invalid length: {0}'.format(fingerprint)) + + # 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_NONE`. + 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_NONE + + 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_SSLv23 + + 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``. + :param ciphers: + Which cipher suites to allow the server to select. + :returns: + Constructed SSLContext object with specified options + :rtype: SSLContext + """ + context = SSLContext(ssl_version or ssl.PROTOCOL_SSLv23) + + 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 + + context.options |= options + + context.verify_mode = cert_reqs + 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 + 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): + """ + 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(). + """ + 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: + try: + context.load_verify_locations(ca_certs, ca_cert_dir) + except IOError as e: # Platform-specific: Python 2.7 + raise SSLError(e) + # Py33 raises FileNotFoundError which subclasses OSError + # These are not equivalent unless we check the errno attribute + except OSError as e: # Platform-specific: Python 3.3 and beyond + if e.errno == errno.ENOENT: + raise SSLError(e) + raise + elif getattr(context, 'load_default_certs', None) is not None: + # try to load OS default certs; works well on Windows (require Python3.4+) + context.load_default_certs() + + if certfile: + context.load_cert_chain(certfile, keyfile) + + # If we detect server_hostname is an IP address then the SNI + # extension should not be used according to RFC3546 Section 3.1 + # We shouldn't warn the user if SNI isn't available but we would + # not be using SNI anyways due to IP address for server_hostname. + if ((server_hostname is not None and not is_ipaddress(server_hostname)) + or IS_SECURETRANSPORT): + if HAS_SNI and server_hostname is not None: + return context.wrap_socket(sock, server_hostname=server_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/latest/advanced-usage.html' + '#ssl-warnings', + SNIMissingWarning + ) + + return context.wrap_socket(sock) + + +def is_ipaddress(hostname): + """Detects whether the hostname given is an IP address. + + :param str hostname: Hostname to examine. + :return: True if the hostname is an IP address, False otherwise. + """ + if six.PY3 and isinstance(hostname, bytes): + # IDN A-label bytes are ASCII compatible. + hostname = hostname.decode('ascii') + + families = [socket.AF_INET] + if hasattr(socket, 'AF_INET6'): + families.append(socket.AF_INET6) + + for af in families: + try: + inet_pton(af, hostname) + except (socket.error, ValueError, OSError): + pass + else: + return True + return False diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/timeout.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/timeout.py new file mode 100644 index 00000000..cec817e6 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/timeout.py @@ -0,0 +1,242 @@ +from __future__ import absolute_import +# The default socket timeout, used by httplib to indicate that no timeout was +# specified by the user +from socket import _GLOBAL_DEFAULT_TIMEOUT +import time + +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:: + + 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):: + + response = http.request('GET', 'http://example.com/', timeout=Timeout(10)) + + Timeouts can be disabled by setting all the parameters to ``None``:: + + 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: integer, float, or None + + :param connect: + The maximum amount of time 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: integer, float, or None + + :param read: + The maximum amount of time 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: integer, 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 __str__(self): + return '%s(connect=%r, read=%r, total=%r)' % ( + type(self).__name__, self._connect, self._read, self.total) + + @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. + :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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/url.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/url.py new file mode 100644 index 00000000..6b6f9968 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/url.py @@ -0,0 +1,230 @@ +from __future__ import absolute_import +from collections import namedtuple + +from ..exceptions import LocationParseError + + +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) + + +class Url(namedtuple('Url', url_attrs)): + """ + Datastructure 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: + scheme = scheme.lower() + if host and scheme in NORMALIZABLE_SCHEMES: + host = host.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 = '' + + # We use "is not None" we want things to happen with empty strings (or 0 port) + if scheme is not None: + url += scheme + '://' + if auth is not None: + url += auth + '@' + if host is not None: + url += host + if port is not None: + url += ':' + str(port) + if path is not None: + url += path + if query is not None: + url += '?' + query + if fragment is not None: + url += '#' + fragment + + return url + + def __str__(self): + return self.url + + +def split_first(s, delims): + """ + 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 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. + + 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', ...) + """ + + # While this code has overlap with stdlib's urlparse, it is much + # simplified for our needs and less annoying. + # Additionally, this implementations does silly things to be optimal + # on CPython. + + if not url: + # Empty + return Url() + + scheme = None + auth = None + host = None + port = None + path = None + fragment = None + query = None + + # Scheme + if '://' in url: + scheme, url = url.split('://', 1) + + # Find the earliest Authority Terminator + # (http://tools.ietf.org/html/rfc3986#section-3.2) + url, path_, delim = split_first(url, ['/', '?', '#']) + + if delim: + # Reassemble the path + path = delim + path_ + + # Auth + if '@' in url: + # Last '@' denotes end of auth part + auth, url = url.rsplit('@', 1) + + # IPv6 + if url and url[0] == '[': + host, url = url.split(']', 1) + host += ']' + + # Port + if ':' in url: + _host, port = url.split(':', 1) + + if not host: + host = _host + + if port: + # If given, ports must be integers. No whitespace, no plus or + # minus prefixes, no non-integer digits such as ^2 (superscript). + if not port.isdigit(): + raise LocationParseError(url) + try: + port = int(port) + except ValueError: + raise LocationParseError(url) + else: + # Blank ports are cool, too. (rfc3986#section-3.2.3) + port = None + + elif not host and url: + host = url + + if not path: + return Url(scheme, auth, host, port, path, query, fragment) + + # Fragment + if '#' in path: + path, fragment = path.split('#', 1) + + # Query + if '?' in path: + path, query = path.split('?', 1) + + return Url(scheme, auth, host, port, path, query, 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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/wait.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/wait.py new file mode 100644 index 00000000..4db71baf --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/urllib3/util/wait.py @@ -0,0 +1,150 @@ +import errno +from functools import partial +import select +import sys +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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/webencodings/__init__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/webencodings/__init__.py new file mode 100644 index 00000000..d21d697c --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/webencodings/__init__.py @@ -0,0 +1,342 @@ +# coding: utf-8 +""" + + webencodings + ~~~~~~~~~~~~ + + This is a Python implementation of the `WHATWG Encoding standard + <http://encoding.spec.whatwg.org/>`. See README for details. + + :copyright: Copyright 2012 by Simon Sapin + :license: BSD, see LICENSE for details. + +""" + +from __future__ import unicode_literals + +import codecs + +from .labels import LABELS + + +VERSION = '0.5.1' + + +# Some names in Encoding are not valid Python aliases. Remap these. +PYTHON_NAMES = { + 'iso-8859-8-i': 'iso-8859-8', + 'x-mac-cyrillic': 'mac-cyrillic', + 'macintosh': 'mac-roman', + 'windows-874': 'cp874'} + +CACHE = {} + + +def ascii_lower(string): + r"""Transform (only) ASCII letters to lower case: A-Z is mapped to a-z. + + :param string: An Unicode string. + :returns: A new Unicode string. + + This is used for `ASCII case-insensitive + <http://encoding.spec.whatwg.org/#ascii-case-insensitive>`_ + matching of encoding labels. + The same matching is also used, among other things, + for `CSS keywords <http://dev.w3.org/csswg/css-values/#keywords>`_. + + This is different from the :meth:`~py:str.lower` method of Unicode strings + which also affect non-ASCII characters, + sometimes mapping them into the ASCII range: + + >>> keyword = u'Bac\N{KELVIN SIGN}ground' + >>> assert keyword.lower() == u'background' + >>> assert ascii_lower(keyword) != keyword.lower() + >>> assert ascii_lower(keyword) == u'bac\N{KELVIN SIGN}ground' + + """ + # This turns out to be faster than unicode.translate() + return string.encode('utf8').lower().decode('utf8') + + +def lookup(label): + """ + Look for an encoding by its label. + This is the spec’s `get an encoding + <http://encoding.spec.whatwg.org/#concept-encoding-get>`_ algorithm. + Supported labels are listed there. + + :param label: A string. + :returns: + An :class:`Encoding` object, or :obj:`None` for an unknown label. + + """ + # Only strip ASCII whitespace: U+0009, U+000A, U+000C, U+000D, and U+0020. + label = ascii_lower(label.strip('\t\n\f\r ')) + name = LABELS.get(label) + if name is None: + return None + encoding = CACHE.get(name) + if encoding is None: + if name == 'x-user-defined': + from .x_user_defined import codec_info + else: + python_name = PYTHON_NAMES.get(name, name) + # Any python_name value that gets to here should be valid. + codec_info = codecs.lookup(python_name) + encoding = Encoding(name, codec_info) + CACHE[name] = encoding + return encoding + + +def _get_encoding(encoding_or_label): + """ + Accept either an encoding object or label. + + :param encoding: An :class:`Encoding` object or a label string. + :returns: An :class:`Encoding` object. + :raises: :exc:`~exceptions.LookupError` for an unknown label. + + """ + if hasattr(encoding_or_label, 'codec_info'): + return encoding_or_label + + encoding = lookup(encoding_or_label) + if encoding is None: + raise LookupError('Unknown encoding label: %r' % encoding_or_label) + return encoding + + +class Encoding(object): + """Reresents a character encoding such as UTF-8, + that can be used for decoding or encoding. + + .. attribute:: name + + Canonical name of the encoding + + .. attribute:: codec_info + + The actual implementation of the encoding, + a stdlib :class:`~codecs.CodecInfo` object. + See :func:`codecs.register`. + + """ + def __init__(self, name, codec_info): + self.name = name + self.codec_info = codec_info + + def __repr__(self): + return '<Encoding %s>' % self.name + + +#: The UTF-8 encoding. Should be used for new content and formats. +UTF8 = lookup('utf-8') + +_UTF16LE = lookup('utf-16le') +_UTF16BE = lookup('utf-16be') + + +def decode(input, fallback_encoding, errors='replace'): + """ + Decode a single string. + + :param input: A byte string + :param fallback_encoding: + An :class:`Encoding` object or a label string. + The encoding to use if :obj:`input` does note have a BOM. + :param errors: Type of error handling. See :func:`codecs.register`. + :raises: :exc:`~exceptions.LookupError` for an unknown encoding label. + :return: + A ``(output, encoding)`` tuple of an Unicode string + and an :obj:`Encoding`. + + """ + # Fail early if `encoding` is an invalid label. + fallback_encoding = _get_encoding(fallback_encoding) + bom_encoding, input = _detect_bom(input) + encoding = bom_encoding or fallback_encoding + return encoding.codec_info.decode(input, errors)[0], encoding + + +def _detect_bom(input): + """Return (bom_encoding, input), with any BOM removed from the input.""" + if input.startswith(b'\xFF\xFE'): + return _UTF16LE, input[2:] + if input.startswith(b'\xFE\xFF'): + return _UTF16BE, input[2:] + if input.startswith(b'\xEF\xBB\xBF'): + return UTF8, input[3:] + return None, input + + +def encode(input, encoding=UTF8, errors='strict'): + """ + Encode a single string. + + :param input: An Unicode string. + :param encoding: An :class:`Encoding` object or a label string. + :param errors: Type of error handling. See :func:`codecs.register`. + :raises: :exc:`~exceptions.LookupError` for an unknown encoding label. + :return: A byte string. + + """ + return _get_encoding(encoding).codec_info.encode(input, errors)[0] + + +def iter_decode(input, fallback_encoding, errors='replace'): + """ + "Pull"-based decoder. + + :param input: + An iterable of byte strings. + + The input is first consumed just enough to determine the encoding + based on the precense of a BOM, + then consumed on demand when the return value is. + :param fallback_encoding: + An :class:`Encoding` object or a label string. + The encoding to use if :obj:`input` does note have a BOM. + :param errors: Type of error handling. See :func:`codecs.register`. + :raises: :exc:`~exceptions.LookupError` for an unknown encoding label. + :returns: + An ``(output, encoding)`` tuple. + :obj:`output` is an iterable of Unicode strings, + :obj:`encoding` is the :obj:`Encoding` that is being used. + + """ + + decoder = IncrementalDecoder(fallback_encoding, errors) + generator = _iter_decode_generator(input, decoder) + encoding = next(generator) + return generator, encoding + + +def _iter_decode_generator(input, decoder): + """Return a generator that first yields the :obj:`Encoding`, + then yields output chukns as Unicode strings. + + """ + decode = decoder.decode + input = iter(input) + for chunck in input: + output = decode(chunck) + if output: + assert decoder.encoding is not None + yield decoder.encoding + yield output + break + else: + # Input exhausted without determining the encoding + output = decode(b'', final=True) + assert decoder.encoding is not None + yield decoder.encoding + if output: + yield output + return + + for chunck in input: + output = decode(chunck) + if output: + yield output + output = decode(b'', final=True) + if output: + yield output + + +def iter_encode(input, encoding=UTF8, errors='strict'): + """ + “Pull”-based encoder. + + :param input: An iterable of Unicode strings. + :param encoding: An :class:`Encoding` object or a label string. + :param errors: Type of error handling. See :func:`codecs.register`. + :raises: :exc:`~exceptions.LookupError` for an unknown encoding label. + :returns: An iterable of byte strings. + + """ + # Fail early if `encoding` is an invalid label. + encode = IncrementalEncoder(encoding, errors).encode + return _iter_encode_generator(input, encode) + + +def _iter_encode_generator(input, encode): + for chunck in input: + output = encode(chunck) + if output: + yield output + output = encode('', final=True) + if output: + yield output + + +class IncrementalDecoder(object): + """ + “Push”-based decoder. + + :param fallback_encoding: + An :class:`Encoding` object or a label string. + The encoding to use if :obj:`input` does note have a BOM. + :param errors: Type of error handling. See :func:`codecs.register`. + :raises: :exc:`~exceptions.LookupError` for an unknown encoding label. + + """ + def __init__(self, fallback_encoding, errors='replace'): + # Fail early if `encoding` is an invalid label. + self._fallback_encoding = _get_encoding(fallback_encoding) + self._errors = errors + self._buffer = b'' + self._decoder = None + #: The actual :class:`Encoding` that is being used, + #: or :obj:`None` if that is not determined yet. + #: (Ie. if there is not enough input yet to determine + #: if there is a BOM.) + self.encoding = None # Not known yet. + + def decode(self, input, final=False): + """Decode one chunk of the input. + + :param input: A byte string. + :param final: + Indicate that no more input is available. + Must be :obj:`True` if this is the last call. + :returns: An Unicode string. + + """ + decoder = self._decoder + if decoder is not None: + return decoder(input, final) + + input = self._buffer + input + encoding, input = _detect_bom(input) + if encoding is None: + if len(input) < 3 and not final: # Not enough data yet. + self._buffer = input + return '' + else: # No BOM + encoding = self._fallback_encoding + decoder = encoding.codec_info.incrementaldecoder(self._errors).decode + self._decoder = decoder + self.encoding = encoding + return decoder(input, final) + + +class IncrementalEncoder(object): + """ + “Push”-based encoder. + + :param encoding: An :class:`Encoding` object or a label string. + :param errors: Type of error handling. See :func:`codecs.register`. + :raises: :exc:`~exceptions.LookupError` for an unknown encoding label. + + .. method:: encode(input, final=False) + + :param input: An Unicode string. + :param final: + Indicate that no more input is available. + Must be :obj:`True` if this is the last call. + :returns: A byte string. + + """ + def __init__(self, encoding=UTF8, errors='strict'): + encoding = _get_encoding(encoding) + self.encode = encoding.codec_info.incrementalencoder(errors).encode diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/webencodings/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/webencodings/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2b708fde610ab75dfbc665e2a5ab3e02023586f4 GIT binary patch literal 9628 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 TT%KE8th`cYi%aFo(%b(FBa9YD literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/webencodings/__pycache__/labels.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/webencodings/__pycache__/labels.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ac21a511c6a1f95384b6bc1fa51407360efffd26 GIT binary patch literal 4040 zcmeHKOLN>r5MJBs-SzsF2X6=n0s%v0>%EeTN<l&nRE1o8OF^k5&3JdbT4~Yj#*PmB z68->H6h{vHkWe*O{skv`X0+1Cj*Bx@>{pJuXL_c4rhB?O_U`WR``-?KxP7<N`KzP+ z{sj6f_@jTUbvmf?tb^7B){(>px{NNmj7@YIJ=8`YU5^2JHMY>JFhm^NE$kqUU4cE+ zU?1J6aTDFDa2qvv4RO3K@CN!fyoos8x(06}j&}s!MI7%5+(CEH`&aM*($I%BK0+LK z0Ux*U3A&1V=pOnMeFiu{pa1;w*&6!dq;qh;{Czmo;CGH=oFzFT*_a-tQH)b6#(%o{ zlMB9!=Gtn7CKqUnTw6>qDYPt_;X^5RoaFNt1sP8k$J(P6sab|;Y4Ho~gv|0xJBj8b z6Y7prlHiQuW9{L|H}^G)vG(NKM~|PLJl0P0LPK~Fk(9#L<>qp6s{5=*;+gMx<&e-^ z_kB0eErqrf+EHj%q1Ck`W!x`!>OFm(l-o6D8Y*L}jH5EH%6MgOniF3ys_&9*&7y>4 zi=0l%?Q@c${G96k$SHSLjA^+>i!)oC)#B_H*WSf#&3P?u)Z+Yd??MN=^aOmCf-~60 zIG(cpI5vI5Hp=0o)W@-I*`~$1F&VpM4=)q_Y%YI}bM+oBV4x(Lq*mGjd=nFnUT zoo9M6UQsFLikB1@I>M(U!|32;d2^W&2uZA)0O9VH*So;^Yy%w6Hj_F33=%3Mp@4+c zVcWpcJdGA4Q{$ncNuisDS#E)d3>h}4NGT9jfwT{!6@6?5{)nxo7VF7fRTXNORkTnM zG%D;`g%pt6+GV4{<|=$pVOJ__RfQV870p#ZDAuQNY86sIs&Et)&Ps(-sc_h>=Avqs z4_1`&8mbq=bvjO?)2($%0jbkfbh=V!FDjy#B;_EYvs@n;esws0(;ikC!frG+tybY= z7Qt!NTYxYI_sBQz>A1xaX*svn8a38Jm{fk2k6v2qDb{+@&-;x9;{xMpIj9Wq*#M{c zA`C2_ZHg(@6CYo>t162K?OvmORBM+4Qu|2JK9bsZ=rRlOGL-wvQ0DjKWA$n#I4<xx z>&dU8zMZ&ma}~DV7y}2Xu0mQajqw#@{K|3930+31;vt_XcMX}5_0xPzl3GT*4^Pc~ zkT<xi_=ULg?Bao$23rL$kn5>eMP+NPd@fSnZsadzUB17RaT*y%eL#U~kPKG2z-<=D zge|Yabitz5B9HYG%5!+ZHsHg$oL*&hCbE0jWOr~|o!{98ki|MArgB@R*CL-qS=mRq zO!-P}F~wa;)6B*+v+OSj)jbPp&#FE^v0%Mqex*zp<={e><JEk-aG3SHS?)y{CE<mA z=;&tPK~P6DA*5PniR@|y>OGpW<eGsJanfetUqeYqW*uWvpt@Kk#!MOT>nZFi!UjxR zQeD{4s!LXFG9+Mew06C->v_nYV!q{kwcb~Ti%h0Gh@duB3P@uE#n^xw8$eXJm9g!z z>eMEzywaX`>v>o&Ol%ioubzi@Am-bpc~sAjs(E<mt5AR#@ay?2MZDaXQMa5H5y?oD zK_pM0$WqMf<~SDRT;@F2m#l9<Vv`e4{6j8L4l6?UjbeibGk?9@>!5q{0{Vh!(dENR zlTd7m0p2O-lPOJT*-tW^vv39~8VHEh3psK-q0mgsr|5LHIE&^HH?Zz6KumTTRWR~a z<8s?EOsHr)pzmOV84agVc1B9sjOZ{}^uQX{r9d{X$TrW)-i6Kw`2z<f(}L~7OQ(tJ z878m$brUmOr7<Vq55B<gi1(&6OhPUSF9>AYe8BqEMr;6tkZW`Yu#e2|{5aQlNj=#w zUEeJ|Jy>V`FhqG0hOGDG>xYk@ocz)$5;(8;=kEtci`o2WPUd>NBq`F3A185cScnga uzwkMR7PL50|08fD`})KA3pV(2mZN2gA8f;x^jB!Iy1n(a|MB0rfqwuwSysgW literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/webencodings/__pycache__/mklabels.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/webencodings/__pycache__/mklabels.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c701bc1deabbe8449f1cf42b2bfb41b6a31a54af GIT binary patch literal 1862 zcmcIlPfz1U6rUM8j`6Y-(d}yKa+qa{)JPC0TlEl8w7bAzCCZ_xT8b7~PG*ugIJTJ? z3ZY344N}`<KSnS85d9c)?WtdZQ{S@*WmVK$ZTZcgH}mHA-uun-i-!+`x4+kq7b}GP zN$xxkp#Ks+-2oxU5fN0dgdWl1JoKD|4V)u~l5a@LT_W9+Ky6WiZ=tP}+HXn94vBC@ z<%%46!V^_!tI`+#2~#aOBdcO&LMIe<u_mbnmwyBShv!_jWZKR|oOX46aFRqVndn0E z!+lS==}Xy_X`~_}x#`JwZIl-HAQNYate5K>?JOUvxZ5)gzBBFe&5chsd27g<@gPfi zGs@$%IJl9-ZJBD>;IEszt6WRT_uuU79W?iNCsSNV6UB)J(|<v{$U%+T>X}Ni9Q>d- z0}r+gz8(1VBM>8a`(#2+n4UNEM>--91bR?owvuG$QrWpzT1#c(EZtKoQ()B7MnP15 zBgz8<*Du%2AYaepe64jBCt_{mwAacuHU&-<U-+F&MW)v8Ms$4|(Rx0#vr%zGSR9C; zv<rgJd8&M9Z^1h-Kn=DfCuo<BffK^HB8K#-VIwl3eP=@Yu5dA{yD%OzQxO&6U6B#P z@r3?DMzrt!L^@PdVcwt4Q=G2~zhJ{m-ygwR<itVrJ_K%gdHEh{{5LVm4PQh#pOT5+ z@W5n9ky!CG8vM_6D1blbhlhuJH{)q$xD>H@7Ch%)^<vFCaUwai(V58xk%`+;k_<Tz zSt5}IGVxBff?)sE>%ILZ|D1mx+@=Q8g1Ks9YW6{Nfmg@7V>+UOERtPv{Mnd|n4m@f z<FR9ip(6*A(Px59sDb1NXA#p^j63XC_jKuW{?vs8xOQe5K5e}+fR>(F7h_j*tgB?M z3a)?_*_p!@R^PCG8$9S{YH0nb0pK-W<$}AVr~=&UU@M8WX=j6cdkuX+YI}^)S$erN z4Mlw`$sjm-8#>d)wi4-f9Nz{4xmoZNjeH0K!m#j`jgf`Gt_l4b?%*jCH`k0>Cy{B* zQSZT0wSZz41s;C~-OLtZxX9J^CMY!CV3%Azy$9HI-8+EL!xy-56$AkKs01Vckf1-q z)j?oS$Ro%>$9YU{AYwUmF6XcquIR>!2DutsQx1hieE^33g&GUaAi4;_qkpig$FTHM zJiI_nEgf4@o3U<RXDJq$NN9yB%wi<0CnQu|X&ta+J$YfEcvvsWp^6FEl*JG&>p)$z zl{`{Ls{r;E#{sM-*hg=zKaI^Ij5G$8EO^XgOU?pyX;8dsrC1q;gD6hJ@Uq@BCU2~- zPpMMZxop?ZdyzTs)-%<;Rp>f`uLZUmh9YZ+p?ZpzJV2Git<swZZw7g$Oi?uLT&bxm zd3q*+pm<eoPe&4mA-Dro)!fN^!GY45t@5w2jeo?#8JGE#L4lm33yxp$pZWA}lziQA literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/webencodings/__pycache__/tests.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/webencodings/__pycache__/tests.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a6661c810a0b31adb77fd973f3cc0f00636c60cb GIT binary patch literal 5018 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/webencodings/__pycache__/x_user_defined.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/webencodings/__pycache__/x_user_defined.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..835c08a070ad91fdd5c727a407483c0da19b7a1d GIT binary patch literal 2615 zcmbtW*?Sa45TDtdJ+m7^I26xO6p4}q@s5a*kRXatiHff1xY_BDiF?sA3nU_-LGeNb z1(l<U`xa5|L;NHBe3@6De5!Y!te$0)fbf0t+51&ZO?6LI_pgrLhtlcfl4C7z{obHy ze`;e!g5`E5_aHM{%V@T4hw^$MlnLod4(G#}@O;fS?8rLJj)?GpF&xeqtclt&*2Gv7 zVNHZJaXZ191Z$$KiLxeX*RiHf7_5s88<`mEQg)hk=|C4}U7Y6<cD*o$wSi>7>qJCE zMO?(}aT{Wpl--a?^O|~*9@aDC>~N3PG=AuhWYXlZLiCDau4FsKrEbegtKtf2*`m)W z3Okrzef?22@J!Kk3gx^gh@zMEoKn#&^_gD3FjqD!W6hV1nKdsh)z8{;rShP3miBvX zW=BmlXU%+Ymf1UK_BaJL)RQec#b6h0c_$}|u4pso_RO1Mx<Z%>7j$%X_jH<lC288i z%Q|_NP5;F~(3*6=p;C1CRKm(To{-tR+nrN0wGn2aoyj$s2`!^@;6irH4%y*#dM3<) zP~p-uh8<<F5`LtEZRPx^>q#f)<<#eDsHefy!Q|F6^RxkdmA)$Eg@zT%dUsRUkE(s- zT)#fopOuAd*$R*letiuQ%ggrW1+O$*k?->(PO)6^{HTz!B;7-rtYgD}ceQ$ja%<Ts zH}_VYyxlx=S$}V7<}6#O0<xBiqFs`$V*}cHWk6fXgKSnsTim2}9Ac*FL#g0!E!Bw| zI-88JfzgBUG1;_VA3QmsY6p{XUM5wc$fRQGKvkAv$&XgQyM^Vewp5+yZqlVfx%P<o zamy-Z3&OJeq-7OKb|tUmlw~ceWb@S-nO07?SjV~x94ntvMQ#$4s|?3O$#9^_@yp0i zOWK*-$;?J_Br=jC1_wCmH!djVWHtHoodLA6>)IGjWHXoZLmLQr;o-2YPtn*&s9Wkh z*JK26$|%cKoMK8F9!1ZOa9w8eSK$|&^iEz{18>T|w{$tUjAR$P8LvDvDmFo}0IAWK zjDn<gd<RotIIc_e{y!m_7o^Dlg-DfJ6{2x0jfF_6pk57-%7S~Ct_9HL4YiD<+BE>W zZWgJ`m|8Q;0IByY08(*nR|{0qjpUH7g6^k!JSnn;#Zq-BZWLFC<ysL@WjkHjQ>Due z)%%S)TqLsge|C5?JD4%Xp?V*xzp}MA#e72*-Dt`Ajm~IQRQrm&LRUpw`YCRxi~$pG zsrI%aK%}CnGwPwR5sAj)iDX?WT|cg2eB*?PlP2GE^ORd|z3uip?lkYZd+I&+PP=b< z)BO+3Xl`lc>*Jw^A9?h#$De3>a`sbmo^F3;ZpXaNuKCX{c<%XyFLb~7(#wl_UU~Jk z#jn4Sd2`8IZ(HwVdvkn2E$w#(-pv<^rSdZAdX?oXRt^rmx9a`XYY5g7d_eFa!7#x( zf{zG3CRk7K3BjiXpAmdc@CCsJf-ecaBKVqMBf%zuZwS66*i5j6;5&lv34S2hO0bP! zJHZYDAV7kh1iJ`!6YL?_OR$e%KfwWlg9L{N4ig+9I7;v%!7+lL2#yo{Oz;cA34)UZ zrwC3HoFO<%aE{<S!3Bbg1iunoBKVDPE#U`*9}*4|t|R=2@MFUDgr5+8O86P!=Y(Gn zZXo=U@GHWv2{#gMBK(H%Tf)tRTL`}+{GRX!!mWhc2)7gNAOu1r+)22La5v!|!o7t1 z2=@~nAUsHTi10As5yGQ{KN21z{E6^5;m?G>5S}1BNqCCzG~pS-vxMge&l6rCyh!*f z;U&V~ni~9=W!a@%wbl1kyo%&jFI8$(yJc8Osxbw{7Zik4N$MwpTWvv+{~wH81%6Up zP&vy{TGcxIbnQ|OZdIu|?wIZ|(hB|f?CLc$M-{R=jhPWjh2oLML}R2eGSQeAHS~}k Q<zFcH#S_LFZH*TB2Y2xL*8l(j literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/webencodings/labels.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/webencodings/labels.py new file mode 100644 index 00000000..29cbf91e --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/webencodings/labels.py @@ -0,0 +1,231 @@ +""" + + webencodings.labels + ~~~~~~~~~~~~~~~~~~~ + + Map encoding labels to their name. + + :copyright: Copyright 2012 by Simon Sapin + :license: BSD, see LICENSE for details. + +""" + +# XXX Do not edit! +# This file is automatically generated by mklabels.py + +LABELS = { + 'unicode-1-1-utf-8': 'utf-8', + 'utf-8': 'utf-8', + 'utf8': 'utf-8', + '866': 'ibm866', + 'cp866': 'ibm866', + 'csibm866': 'ibm866', + 'ibm866': 'ibm866', + 'csisolatin2': 'iso-8859-2', + 'iso-8859-2': 'iso-8859-2', + 'iso-ir-101': 'iso-8859-2', + 'iso8859-2': 'iso-8859-2', + 'iso88592': 'iso-8859-2', + 'iso_8859-2': 'iso-8859-2', + 'iso_8859-2:1987': 'iso-8859-2', + 'l2': 'iso-8859-2', + 'latin2': 'iso-8859-2', + 'csisolatin3': 'iso-8859-3', + 'iso-8859-3': 'iso-8859-3', + 'iso-ir-109': 'iso-8859-3', + 'iso8859-3': 'iso-8859-3', + 'iso88593': 'iso-8859-3', + 'iso_8859-3': 'iso-8859-3', + 'iso_8859-3:1988': 'iso-8859-3', + 'l3': 'iso-8859-3', + 'latin3': 'iso-8859-3', + 'csisolatin4': 'iso-8859-4', + 'iso-8859-4': 'iso-8859-4', + 'iso-ir-110': 'iso-8859-4', + 'iso8859-4': 'iso-8859-4', + 'iso88594': 'iso-8859-4', + 'iso_8859-4': 'iso-8859-4', + 'iso_8859-4:1988': 'iso-8859-4', + 'l4': 'iso-8859-4', + 'latin4': 'iso-8859-4', + 'csisolatincyrillic': 'iso-8859-5', + 'cyrillic': 'iso-8859-5', + 'iso-8859-5': 'iso-8859-5', + 'iso-ir-144': 'iso-8859-5', + 'iso8859-5': 'iso-8859-5', + 'iso88595': 'iso-8859-5', + 'iso_8859-5': 'iso-8859-5', + 'iso_8859-5:1988': 'iso-8859-5', + 'arabic': 'iso-8859-6', + 'asmo-708': 'iso-8859-6', + 'csiso88596e': 'iso-8859-6', + 'csiso88596i': 'iso-8859-6', + 'csisolatinarabic': 'iso-8859-6', + 'ecma-114': 'iso-8859-6', + 'iso-8859-6': 'iso-8859-6', + 'iso-8859-6-e': 'iso-8859-6', + 'iso-8859-6-i': 'iso-8859-6', + 'iso-ir-127': 'iso-8859-6', + 'iso8859-6': 'iso-8859-6', + 'iso88596': 'iso-8859-6', + 'iso_8859-6': 'iso-8859-6', + 'iso_8859-6:1987': 'iso-8859-6', + 'csisolatingreek': 'iso-8859-7', + 'ecma-118': 'iso-8859-7', + 'elot_928': 'iso-8859-7', + 'greek': 'iso-8859-7', + 'greek8': 'iso-8859-7', + 'iso-8859-7': 'iso-8859-7', + 'iso-ir-126': 'iso-8859-7', + 'iso8859-7': 'iso-8859-7', + 'iso88597': 'iso-8859-7', + 'iso_8859-7': 'iso-8859-7', + 'iso_8859-7:1987': 'iso-8859-7', + 'sun_eu_greek': 'iso-8859-7', + 'csiso88598e': 'iso-8859-8', + 'csisolatinhebrew': 'iso-8859-8', + 'hebrew': 'iso-8859-8', + 'iso-8859-8': 'iso-8859-8', + 'iso-8859-8-e': 'iso-8859-8', + 'iso-ir-138': 'iso-8859-8', + 'iso8859-8': 'iso-8859-8', + 'iso88598': 'iso-8859-8', + 'iso_8859-8': 'iso-8859-8', + 'iso_8859-8:1988': 'iso-8859-8', + 'visual': 'iso-8859-8', + 'csiso88598i': 'iso-8859-8-i', + 'iso-8859-8-i': 'iso-8859-8-i', + 'logical': 'iso-8859-8-i', + 'csisolatin6': 'iso-8859-10', + 'iso-8859-10': 'iso-8859-10', + 'iso-ir-157': 'iso-8859-10', + 'iso8859-10': 'iso-8859-10', + 'iso885910': 'iso-8859-10', + 'l6': 'iso-8859-10', + 'latin6': 'iso-8859-10', + 'iso-8859-13': 'iso-8859-13', + 'iso8859-13': 'iso-8859-13', + 'iso885913': 'iso-8859-13', + 'iso-8859-14': 'iso-8859-14', + 'iso8859-14': 'iso-8859-14', + 'iso885914': 'iso-8859-14', + 'csisolatin9': 'iso-8859-15', + 'iso-8859-15': 'iso-8859-15', + 'iso8859-15': 'iso-8859-15', + 'iso885915': 'iso-8859-15', + 'iso_8859-15': 'iso-8859-15', + 'l9': 'iso-8859-15', + 'iso-8859-16': 'iso-8859-16', + 'cskoi8r': 'koi8-r', + 'koi': 'koi8-r', + 'koi8': 'koi8-r', + 'koi8-r': 'koi8-r', + 'koi8_r': 'koi8-r', + 'koi8-u': 'koi8-u', + 'csmacintosh': 'macintosh', + 'mac': 'macintosh', + 'macintosh': 'macintosh', + 'x-mac-roman': 'macintosh', + 'dos-874': 'windows-874', + 'iso-8859-11': 'windows-874', + 'iso8859-11': 'windows-874', + 'iso885911': 'windows-874', + 'tis-620': 'windows-874', + 'windows-874': 'windows-874', + 'cp1250': 'windows-1250', + 'windows-1250': 'windows-1250', + 'x-cp1250': 'windows-1250', + 'cp1251': 'windows-1251', + 'windows-1251': 'windows-1251', + 'x-cp1251': 'windows-1251', + 'ansi_x3.4-1968': 'windows-1252', + 'ascii': 'windows-1252', + 'cp1252': 'windows-1252', + 'cp819': 'windows-1252', + 'csisolatin1': 'windows-1252', + 'ibm819': 'windows-1252', + 'iso-8859-1': 'windows-1252', + 'iso-ir-100': 'windows-1252', + 'iso8859-1': 'windows-1252', + 'iso88591': 'windows-1252', + 'iso_8859-1': 'windows-1252', + 'iso_8859-1:1987': 'windows-1252', + 'l1': 'windows-1252', + 'latin1': 'windows-1252', + 'us-ascii': 'windows-1252', + 'windows-1252': 'windows-1252', + 'x-cp1252': 'windows-1252', + 'cp1253': 'windows-1253', + 'windows-1253': 'windows-1253', + 'x-cp1253': 'windows-1253', + 'cp1254': 'windows-1254', + 'csisolatin5': 'windows-1254', + 'iso-8859-9': 'windows-1254', + 'iso-ir-148': 'windows-1254', + 'iso8859-9': 'windows-1254', + 'iso88599': 'windows-1254', + 'iso_8859-9': 'windows-1254', + 'iso_8859-9:1989': 'windows-1254', + 'l5': 'windows-1254', + 'latin5': 'windows-1254', + 'windows-1254': 'windows-1254', + 'x-cp1254': 'windows-1254', + 'cp1255': 'windows-1255', + 'windows-1255': 'windows-1255', + 'x-cp1255': 'windows-1255', + 'cp1256': 'windows-1256', + 'windows-1256': 'windows-1256', + 'x-cp1256': 'windows-1256', + 'cp1257': 'windows-1257', + 'windows-1257': 'windows-1257', + 'x-cp1257': 'windows-1257', + 'cp1258': 'windows-1258', + 'windows-1258': 'windows-1258', + 'x-cp1258': 'windows-1258', + 'x-mac-cyrillic': 'x-mac-cyrillic', + 'x-mac-ukrainian': 'x-mac-cyrillic', + 'chinese': 'gbk', + 'csgb2312': 'gbk', + 'csiso58gb231280': 'gbk', + 'gb2312': 'gbk', + 'gb_2312': 'gbk', + 'gb_2312-80': 'gbk', + 'gbk': 'gbk', + 'iso-ir-58': 'gbk', + 'x-gbk': 'gbk', + 'gb18030': 'gb18030', + 'hz-gb-2312': 'hz-gb-2312', + 'big5': 'big5', + 'big5-hkscs': 'big5', + 'cn-big5': 'big5', + 'csbig5': 'big5', + 'x-x-big5': 'big5', + 'cseucpkdfmtjapanese': 'euc-jp', + 'euc-jp': 'euc-jp', + 'x-euc-jp': 'euc-jp', + 'csiso2022jp': 'iso-2022-jp', + 'iso-2022-jp': 'iso-2022-jp', + 'csshiftjis': 'shift_jis', + 'ms_kanji': 'shift_jis', + 'shift-jis': 'shift_jis', + 'shift_jis': 'shift_jis', + 'sjis': 'shift_jis', + 'windows-31j': 'shift_jis', + 'x-sjis': 'shift_jis', + 'cseuckr': 'euc-kr', + 'csksc56011987': 'euc-kr', + 'euc-kr': 'euc-kr', + 'iso-ir-149': 'euc-kr', + 'korean': 'euc-kr', + 'ks_c_5601-1987': 'euc-kr', + 'ks_c_5601-1989': 'euc-kr', + 'ksc5601': 'euc-kr', + 'ksc_5601': 'euc-kr', + 'windows-949': 'euc-kr', + 'csiso2022kr': 'iso-2022-kr', + 'iso-2022-kr': 'iso-2022-kr', + 'utf-16be': 'utf-16be', + 'utf-16': 'utf-16le', + 'utf-16le': 'utf-16le', + 'x-user-defined': 'x-user-defined', +} diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/webencodings/mklabels.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/webencodings/mklabels.py new file mode 100644 index 00000000..295dc928 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/webencodings/mklabels.py @@ -0,0 +1,59 @@ +""" + + webencodings.mklabels + ~~~~~~~~~~~~~~~~~~~~~ + + Regenarate the webencodings.labels module. + + :copyright: Copyright 2012 by Simon Sapin + :license: BSD, see LICENSE for details. + +""" + +import json +try: + from urllib import urlopen +except ImportError: + from urllib.request import urlopen + + +def assert_lower(string): + assert string == string.lower() + return string + + +def generate(url): + parts = ['''\ +""" + + webencodings.labels + ~~~~~~~~~~~~~~~~~~~ + + Map encoding labels to their name. + + :copyright: Copyright 2012 by Simon Sapin + :license: BSD, see LICENSE for details. + +""" + +# XXX Do not edit! +# This file is automatically generated by mklabels.py + +LABELS = { +'''] + labels = [ + (repr(assert_lower(label)).lstrip('u'), + repr(encoding['name']).lstrip('u')) + for category in json.loads(urlopen(url).read().decode('ascii')) + for encoding in category['encodings'] + for label in encoding['labels']] + max_len = max(len(label) for label, name in labels) + parts.extend( + ' %s:%s %s,\n' % (label, ' ' * (max_len - len(label)), name) + for label, name in labels) + parts.append('}') + return ''.join(parts) + + +if __name__ == '__main__': + print(generate('http://encoding.spec.whatwg.org/encodings.json')) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/webencodings/tests.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/webencodings/tests.py new file mode 100644 index 00000000..e12c10d0 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/webencodings/tests.py @@ -0,0 +1,153 @@ +# coding: utf-8 +""" + + webencodings.tests + ~~~~~~~~~~~~~~~~~~ + + A basic test suite for Encoding. + + :copyright: Copyright 2012 by Simon Sapin + :license: BSD, see LICENSE for details. + +""" + +from __future__ import unicode_literals + +from . import (lookup, LABELS, decode, encode, iter_decode, iter_encode, + IncrementalDecoder, IncrementalEncoder, UTF8) + + +def assert_raises(exception, function, *args, **kwargs): + try: + function(*args, **kwargs) + except exception: + return + else: # pragma: no cover + raise AssertionError('Did not raise %s.' % exception) + + +def test_labels(): + assert lookup('utf-8').name == 'utf-8' + assert lookup('Utf-8').name == 'utf-8' + assert lookup('UTF-8').name == 'utf-8' + assert lookup('utf8').name == 'utf-8' + assert lookup('utf8').name == 'utf-8' + assert lookup('utf8 ').name == 'utf-8' + assert lookup(' \r\nutf8\t').name == 'utf-8' + assert lookup('u8') is None # Python label. + assert lookup('utf-8 ') is None # Non-ASCII white space. + + assert lookup('US-ASCII').name == 'windows-1252' + assert lookup('iso-8859-1').name == 'windows-1252' + assert lookup('latin1').name == 'windows-1252' + assert lookup('LATIN1').name == 'windows-1252' + assert lookup('latin-1') is None + assert lookup('LATİN1') is None # ASCII-only case insensitivity. + + +def test_all_labels(): + for label in LABELS: + assert decode(b'', label) == ('', lookup(label)) + assert encode('', label) == b'' + for repeat in [0, 1, 12]: + output, _ = iter_decode([b''] * repeat, label) + assert list(output) == [] + assert list(iter_encode([''] * repeat, label)) == [] + decoder = IncrementalDecoder(label) + assert decoder.decode(b'') == '' + assert decoder.decode(b'', final=True) == '' + encoder = IncrementalEncoder(label) + assert encoder.encode('') == b'' + assert encoder.encode('', final=True) == b'' + # All encoding names are valid labels too: + for name in set(LABELS.values()): + assert lookup(name).name == name + + +def test_invalid_label(): + assert_raises(LookupError, decode, b'\xEF\xBB\xBF\xc3\xa9', 'invalid') + assert_raises(LookupError, encode, 'é', 'invalid') + assert_raises(LookupError, iter_decode, [], 'invalid') + assert_raises(LookupError, iter_encode, [], 'invalid') + assert_raises(LookupError, IncrementalDecoder, 'invalid') + assert_raises(LookupError, IncrementalEncoder, 'invalid') + + +def test_decode(): + assert decode(b'\x80', 'latin1') == ('€', lookup('latin1')) + assert decode(b'\x80', lookup('latin1')) == ('€', lookup('latin1')) + assert decode(b'\xc3\xa9', 'utf8') == ('é', lookup('utf8')) + assert decode(b'\xc3\xa9', UTF8) == ('é', lookup('utf8')) + assert decode(b'\xc3\xa9', 'ascii') == ('é', lookup('ascii')) + assert decode(b'\xEF\xBB\xBF\xc3\xa9', 'ascii') == ('é', lookup('utf8')) # UTF-8 with BOM + + assert decode(b'\xFE\xFF\x00\xe9', 'ascii') == ('é', lookup('utf-16be')) # UTF-16-BE with BOM + assert decode(b'\xFF\xFE\xe9\x00', 'ascii') == ('é', lookup('utf-16le')) # UTF-16-LE with BOM + assert decode(b'\xFE\xFF\xe9\x00', 'ascii') == ('\ue900', lookup('utf-16be')) + assert decode(b'\xFF\xFE\x00\xe9', 'ascii') == ('\ue900', lookup('utf-16le')) + + assert decode(b'\x00\xe9', 'UTF-16BE') == ('é', lookup('utf-16be')) + assert decode(b'\xe9\x00', 'UTF-16LE') == ('é', lookup('utf-16le')) + assert decode(b'\xe9\x00', 'UTF-16') == ('é', lookup('utf-16le')) + + assert decode(b'\xe9\x00', 'UTF-16BE') == ('\ue900', lookup('utf-16be')) + assert decode(b'\x00\xe9', 'UTF-16LE') == ('\ue900', lookup('utf-16le')) + assert decode(b'\x00\xe9', 'UTF-16') == ('\ue900', lookup('utf-16le')) + + +def test_encode(): + assert encode('é', 'latin1') == b'\xe9' + assert encode('é', 'utf8') == b'\xc3\xa9' + assert encode('é', 'utf8') == b'\xc3\xa9' + assert encode('é', 'utf-16') == b'\xe9\x00' + assert encode('é', 'utf-16le') == b'\xe9\x00' + assert encode('é', 'utf-16be') == b'\x00\xe9' + + +def test_iter_decode(): + def iter_decode_to_string(input, fallback_encoding): + output, _encoding = iter_decode(input, fallback_encoding) + return ''.join(output) + assert iter_decode_to_string([], 'latin1') == '' + assert iter_decode_to_string([b''], 'latin1') == '' + assert iter_decode_to_string([b'\xe9'], 'latin1') == 'é' + assert iter_decode_to_string([b'hello'], 'latin1') == 'hello' + assert iter_decode_to_string([b'he', b'llo'], 'latin1') == 'hello' + assert iter_decode_to_string([b'hell', b'o'], 'latin1') == 'hello' + assert iter_decode_to_string([b'\xc3\xa9'], 'latin1') == 'é' + assert iter_decode_to_string([b'\xEF\xBB\xBF\xc3\xa9'], 'latin1') == 'é' + assert iter_decode_to_string([ + b'\xEF\xBB\xBF', b'\xc3', b'\xa9'], 'latin1') == 'é' + assert iter_decode_to_string([ + b'\xEF\xBB\xBF', b'a', b'\xc3'], 'latin1') == 'a\uFFFD' + assert iter_decode_to_string([ + b'', b'\xEF', b'', b'', b'\xBB\xBF\xc3', b'\xa9'], 'latin1') == 'é' + assert iter_decode_to_string([b'\xEF\xBB\xBF'], 'latin1') == '' + assert iter_decode_to_string([b'\xEF\xBB'], 'latin1') == 'ï»' + assert iter_decode_to_string([b'\xFE\xFF\x00\xe9'], 'latin1') == 'é' + assert iter_decode_to_string([b'\xFF\xFE\xe9\x00'], 'latin1') == 'é' + assert iter_decode_to_string([ + b'', b'\xFF', b'', b'', b'\xFE\xe9', b'\x00'], 'latin1') == 'é' + assert iter_decode_to_string([ + b'', b'h\xe9', b'llo'], 'x-user-defined') == 'h\uF7E9llo' + + +def test_iter_encode(): + assert b''.join(iter_encode([], 'latin1')) == b'' + assert b''.join(iter_encode([''], 'latin1')) == b'' + assert b''.join(iter_encode(['é'], 'latin1')) == b'\xe9' + assert b''.join(iter_encode(['', 'é', '', ''], 'latin1')) == b'\xe9' + assert b''.join(iter_encode(['', 'é', '', ''], 'utf-16')) == b'\xe9\x00' + assert b''.join(iter_encode(['', 'é', '', ''], 'utf-16le')) == b'\xe9\x00' + assert b''.join(iter_encode(['', 'é', '', ''], 'utf-16be')) == b'\x00\xe9' + assert b''.join(iter_encode([ + '', 'h\uF7E9', '', 'llo'], 'x-user-defined')) == b'h\xe9llo' + + +def test_x_user_defined(): + encoded = b'2,\x0c\x0b\x1aO\xd9#\xcb\x0f\xc9\xbbt\xcf\xa8\xca' + decoded = '2,\x0c\x0b\x1aO\uf7d9#\uf7cb\x0f\uf7c9\uf7bbt\uf7cf\uf7a8\uf7ca' + encoded = b'aa' + decoded = 'aa' + assert decode(encoded, 'x-user-defined') == (decoded, lookup('x-user-defined')) + assert encode(decoded, 'x-user-defined') == encoded diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/webencodings/x_user_defined.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/webencodings/x_user_defined.py new file mode 100644 index 00000000..d16e3260 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pip/_vendor/webencodings/x_user_defined.py @@ -0,0 +1,325 @@ +# coding: utf-8 +""" + + webencodings.x_user_defined + ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + An implementation of the x-user-defined encoding. + + :copyright: Copyright 2012 by Simon Sapin + :license: BSD, see LICENSE for details. + +""" + +from __future__ import unicode_literals + +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 + +codec_info = codecs.CodecInfo( + name='x-user-defined', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, +) + + +### Decoding Table + +# Python 3: +# for c in range(256): print(' %r' % chr(c if c < 128 else c + 0xF700)) +decoding_table = ( + '\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' + ' ' + '!' + '"' + '#' + '$' + '%' + '&' + "'" + '(' + ')' + '*' + '+' + ',' + '-' + '.' + '/' + '0' + '1' + '2' + '3' + '4' + '5' + '6' + '7' + '8' + '9' + ':' + ';' + '<' + '=' + '>' + '?' + '@' + 'A' + 'B' + 'C' + 'D' + 'E' + 'F' + 'G' + 'H' + 'I' + 'J' + 'K' + 'L' + 'M' + 'N' + 'O' + 'P' + 'Q' + 'R' + 'S' + 'T' + 'U' + 'V' + 'W' + 'X' + 'Y' + 'Z' + '[' + '\\' + ']' + '^' + '_' + '`' + 'a' + 'b' + 'c' + 'd' + 'e' + 'f' + 'g' + 'h' + 'i' + 'j' + 'k' + 'l' + 'm' + 'n' + 'o' + 'p' + 'q' + 'r' + 's' + 't' + 'u' + 'v' + 'w' + 'x' + 'y' + 'z' + '{' + '|' + '}' + '~' + '\x7f' + '\uf780' + '\uf781' + '\uf782' + '\uf783' + '\uf784' + '\uf785' + '\uf786' + '\uf787' + '\uf788' + '\uf789' + '\uf78a' + '\uf78b' + '\uf78c' + '\uf78d' + '\uf78e' + '\uf78f' + '\uf790' + '\uf791' + '\uf792' + '\uf793' + '\uf794' + '\uf795' + '\uf796' + '\uf797' + '\uf798' + '\uf799' + '\uf79a' + '\uf79b' + '\uf79c' + '\uf79d' + '\uf79e' + '\uf79f' + '\uf7a0' + '\uf7a1' + '\uf7a2' + '\uf7a3' + '\uf7a4' + '\uf7a5' + '\uf7a6' + '\uf7a7' + '\uf7a8' + '\uf7a9' + '\uf7aa' + '\uf7ab' + '\uf7ac' + '\uf7ad' + '\uf7ae' + '\uf7af' + '\uf7b0' + '\uf7b1' + '\uf7b2' + '\uf7b3' + '\uf7b4' + '\uf7b5' + '\uf7b6' + '\uf7b7' + '\uf7b8' + '\uf7b9' + '\uf7ba' + '\uf7bb' + '\uf7bc' + '\uf7bd' + '\uf7be' + '\uf7bf' + '\uf7c0' + '\uf7c1' + '\uf7c2' + '\uf7c3' + '\uf7c4' + '\uf7c5' + '\uf7c6' + '\uf7c7' + '\uf7c8' + '\uf7c9' + '\uf7ca' + '\uf7cb' + '\uf7cc' + '\uf7cd' + '\uf7ce' + '\uf7cf' + '\uf7d0' + '\uf7d1' + '\uf7d2' + '\uf7d3' + '\uf7d4' + '\uf7d5' + '\uf7d6' + '\uf7d7' + '\uf7d8' + '\uf7d9' + '\uf7da' + '\uf7db' + '\uf7dc' + '\uf7dd' + '\uf7de' + '\uf7df' + '\uf7e0' + '\uf7e1' + '\uf7e2' + '\uf7e3' + '\uf7e4' + '\uf7e5' + '\uf7e6' + '\uf7e7' + '\uf7e8' + '\uf7e9' + '\uf7ea' + '\uf7eb' + '\uf7ec' + '\uf7ed' + '\uf7ee' + '\uf7ef' + '\uf7f0' + '\uf7f1' + '\uf7f2' + '\uf7f3' + '\uf7f4' + '\uf7f5' + '\uf7f6' + '\uf7f7' + '\uf7f8' + '\uf7f9' + '\uf7fa' + '\uf7fb' + '\uf7fc' + '\uf7fd' + '\uf7fe' + '\uf7ff' +) + +### Encoding table +encoding_table = codecs.charmap_build(decoding_table) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/DESCRIPTION.rst b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/DESCRIPTION.rst new file mode 100644 index 00000000..e1187231 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/DESCRIPTION.rst @@ -0,0 +1,3 @@ +UNKNOWN + + diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/INSTALLER b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/INSTALLER new file mode 100644 index 00000000..a1b589e3 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/METADATA b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/METADATA new file mode 100644 index 00000000..7a504873 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/METADATA @@ -0,0 +1,13 @@ +Metadata-Version: 2.0 +Name: pkg_resources +Version: 0.0.0 +Summary: UNKNOWN +Home-page: UNKNOWN +Author: UNKNOWN +Author-email: UNKNOWN +License: UNKNOWN +Platform: UNKNOWN + +UNKNOWN + + diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/RECORD b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/RECORD new file mode 100644 index 00000000..d8691319 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/RECORD @@ -0,0 +1,38 @@ +pkg_resources/__init__.py,sha256=YQ4_WQnPztMsUy1yuvp7ZRBPK9IhOyhgosLpvkFso1I,103551 +pkg_resources/py31compat.py,sha256=-ysVqoxLetAnL94uM0kHkomKQTC1JZLN2ZUjqUhMeKE,600 +pkg_resources/_vendor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pkg_resources/_vendor/appdirs.py,sha256=mExjXejqnz0UifNzjccc-yJ8JS0TfAW0gXuikOdDQLU,22376 +pkg_resources/_vendor/pyparsing.py,sha256=LTlkTtpPBJ0ypOyi---Es1IvmxfI_vh28VJEh27qY8I,229871 +pkg_resources/_vendor/six.py,sha256=A6hdJZVjI3t_geebZ9BzUvwRrIXo0lfwzQlM2LcKyas,30098 +pkg_resources/_vendor/packaging/__about__.py,sha256=zkcCPTN_6TcLW0Nrlg0176-R1QQ_WVPTm8sz1R4-HjM,720 +pkg_resources/_vendor/packaging/__init__.py,sha256=_vNac5TrzwsrzbOFIbF-5cHqc_Y2aPT2D7zrIR06BOo,513 +pkg_resources/_vendor/packaging/_compat.py,sha256=Vi_A0rAQeHbU-a9X0tt1yQm9RqkgQbDSxzRw8WlU9kA,860 +pkg_resources/_vendor/packaging/_structures.py,sha256=RImECJ4c_wTlaTYYwZYLHEiebDMaAJmK1oPARhw1T5o,1416 +pkg_resources/_vendor/packaging/markers.py,sha256=uEcBBtGvzqltgnArqb9c4RrcInXezDLos14zbBHhWJo,8248 +pkg_resources/_vendor/packaging/requirements.py,sha256=SikL2UynbsT0qtY9ltqngndha_sfo0w6XGFhAhoSoaQ,4355 +pkg_resources/_vendor/packaging/specifiers.py,sha256=SAMRerzO3fK2IkFZCaZkuwZaL_EGqHNOz4pni4vhnN0,28025 +pkg_resources/_vendor/packaging/utils.py,sha256=3m6WvPm6NNxE8rkTGmn0r75B_GZSGg7ikafxHsBN1WA,421 +pkg_resources/_vendor/packaging/version.py,sha256=OwGnxYfr2ghNzYx59qWIBkrK3SnB6n-Zfd1XaLpnnM0,11556 +pkg_resources/extern/__init__.py,sha256=JUtlHHvlxHSNuB4pWqNjcx7n6kG-fwXg7qmJ2zNJlIY,2487 +pkg_resources-0.0.0.dist-info/DESCRIPTION.rst,sha256=OCTuuN6LcWulhHS3d5rfjdsQtW22n7HENFRh6jC6ego,10 +pkg_resources-0.0.0.dist-info/METADATA,sha256=FOYDX6cmnDUkWo-yhqWQYtjKIMZR2IW2G1GFZhA6gUQ,177 +pkg_resources-0.0.0.dist-info/RECORD,, +pkg_resources-0.0.0.dist-info/WHEEL,sha256=kdsN-5OJAZIiHN-iO4Rhl82KyS0bDWf4uBwMbkNafr8,110 +pkg_resources-0.0.0.dist-info/metadata.json,sha256=jbGQ09fxsrPQMhbeLboAEDZERlOExjHIGENdQdPS6RU,221 +pkg_resources-0.0.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +pkg_resources/extern/__pycache__/__init__.cpython-36.pyc,, +pkg_resources/__pycache__/py31compat.cpython-36.pyc,, +pkg_resources/__pycache__/__init__.cpython-36.pyc,, +pkg_resources/_vendor/__pycache__/pyparsing.cpython-36.pyc,, +pkg_resources/_vendor/__pycache__/six.cpython-36.pyc,, +pkg_resources/_vendor/__pycache__/appdirs.cpython-36.pyc,, +pkg_resources/_vendor/__pycache__/__init__.cpython-36.pyc,, +pkg_resources/_vendor/packaging/__pycache__/_structures.cpython-36.pyc,, +pkg_resources/_vendor/packaging/__pycache__/utils.cpython-36.pyc,, +pkg_resources/_vendor/packaging/__pycache__/specifiers.cpython-36.pyc,, +pkg_resources/_vendor/packaging/__pycache__/version.cpython-36.pyc,, +pkg_resources/_vendor/packaging/__pycache__/requirements.cpython-36.pyc,, +pkg_resources/_vendor/packaging/__pycache__/__about__.cpython-36.pyc,, +pkg_resources/_vendor/packaging/__pycache__/markers.cpython-36.pyc,, +pkg_resources/_vendor/packaging/__pycache__/_compat.cpython-36.pyc,, +pkg_resources/_vendor/packaging/__pycache__/__init__.cpython-36.pyc,, diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/WHEEL b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/WHEEL new file mode 100644 index 00000000..7332a419 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/WHEEL @@ -0,0 +1,6 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.30.0) +Root-Is-Purelib: true +Tag: py2-none-any +Tag: py3-none-any + diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/metadata.json b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/metadata.json new file mode 100644 index 00000000..1069edb5 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources-0.0.0.dist-info/metadata.json @@ -0,0 +1 @@ +{"extensions": {"python.details": {"document_names": {"description": "DESCRIPTION.rst"}}}, "generator": "bdist_wheel (0.30.0)", "metadata_version": "2.0", "name": "pkg_resources", "summary": "UNKNOWN", "version": "0.0.0"} \ No newline at end of file diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/__init__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/__init__.py new file mode 100644 index 00000000..8d95bd29 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/__init__.py @@ -0,0 +1,3125 @@ +# coding: utf-8 +""" +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. +""" + +from __future__ import absolute_import + +import sys +import os +import io +import time +import re +import types +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 itertools +import inspect +from pkgutil import get_importer + +try: + import _imp +except ImportError: + # Python 3.2 compatibility + import imp as _imp + +from pkg_resources.extern import six +from pkg_resources.extern.six.moves import urllib, map, filter + +# capture these to bypass sandboxing +from os import utime +try: + from os import mkdir, rename, unlink + WRITE_SUPPORT = True +except ImportError: + # no write support, probably under GAE + WRITE_SUPPORT = False + +from os import open as os_open +from os.path import isdir, split + +try: + import importlib.machinery as importlib_machinery + # access attribute to force import under delayed import mechanisms. + importlib_machinery.__name__ +except ImportError: + importlib_machinery = None + +from . import py31compat +from pkg_resources.extern import appdirs +from pkg_resources.extern import packaging +__import__('pkg_resources.extern.packaging.version') +__import__('pkg_resources.extern.packaging.specifiers') +__import__('pkg_resources.extern.packaging.requirements') +__import__('pkg_resources.extern.packaging.markers') + + +if (3, 0) < sys.version_info < (3, 3): + raise RuntimeError("Python 3.3 or later is required") + +if six.PY2: + # Those builtin exceptions are only defined in Python 3 + PermissionError = None + NotADirectoryError = None + +# declare some globals that will be defined later to +# satisfy the linters. +require = None +working_set = None +add_activation_listener = None +resources_stream = None +cleanup_resources = None +resource_dir = None +resource_stream = None +set_extraction_path = None +resource_isdir = None +resource_string = None +iter_entry_points = None +resource_listdir = None +resource_filename = None +resource_exists = None +_distribution_finders = None +_namespace_handlers = None +_namespace_packages = None + + +class PEP440Warning(RuntimeWarning): + """ + Used when there is an issue with a version or specifier not complying with + PEP 440. + """ + + +def parse_version(v): + try: + return packaging.version.Version(v) + except packaging.version.InvalidVersion: + return packaging.version.LegacyVersion(v) + + +_state_vars = {} + + +def _declare_state(vartype, **kw): + globals().update(kw) + _state_vars.update(dict.fromkeys(kw, vartype)) + + +def __getstate__(): + state = {} + g = globals() + for k, v in _state_vars.items(): + state[k] = g['_sget_' + v](g[k]) + return state + + +def __setstate__(state): + 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 Mac OS X that would be required to *use* extensions produced by + distutils. But what we want when checking compatibility is to know the + version of Mac OS X that we are *running*. To allow usage of packages that + explicitly require a newer version of Mac OS X, 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(_macosx_vers()[:2]), m.group(3)) + except ValueError: + # not Mac OS X + 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', + + # 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): + return self.args[0] + + @property + def req(self): + return self.args[1] + + def report(self): + return self._template.format(**locals()) + + def with_context(self, required_by): + """ + 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): + 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): + return self.args[0] + + @property + def requirers(self): + 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 = {} + +PY_MAJOR = sys.version[:3] +EGG_DIST = 3 +BINARY_DIST = 2 +SOURCE_DIST = 1 +CHECKOUT_DIST = 0 +DEVELOP_DIST = -1 + + +def register_loader_type(loader_type, provider_factory): + """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 + + +def get_provider(moduleOrReq): + """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) + + +def _macosx_vers(_cache=[]): + if not _cache: + version = platform.mac_ver()[0] + # fallback for MacPorts + if version == '': + plist = '/System/Library/CoreServices/SystemVersion.plist' + if os.path.exists(plist): + if hasattr(plistlib, 'readPlist'): + plist_content = plistlib.readPlist(plist) + if 'ProductVersion' in plist_content: + version = plist_content['ProductVersion'] + + _cache.append(version.split('.')) + return _cache[0] + + +def _macosx_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 Mac OS X. + """ + try: + # Python 2.7 or >=3.2 + from sysconfig import get_platform + except ImportError: + from distutils.util import get_platform + + plat = get_platform() + if sys.platform == "darwin" and not plat.startswith('macosx-'): + try: + version = _macosx_vers() + machine = os.uname()[4].replace(" ", "_") + return "macosx-%d.%d-%s" % ( + int(version[0]), int(version[1]), + _macosx_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, required): + """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 + + # Mac OS X 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 macosx 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 macosx 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 + + +def run_script(dist_spec, script_name): + """Locate distribution `dist_spec` and run its `script_name` script""" + ns = sys._getframe(1).f_globals + name = ns['__name__'] + ns.clear() + ns['__name__'] = name + require(dist_spec)[0].run_script(script_name, ns) + + +# backward compatibility +run_main = run_script + + +def get_distribution(dist): + """Return a current distribution object for a Requirement or string""" + if isinstance(dist, six.string_types): + dist = Requirement.parse(dist) + if isinstance(dist, Requirement): + dist = get_provider(dist) + if not isinstance(dist, Distribution): + raise TypeError("Expected string, Requirement, or Distribution", dist) + return dist + + +def load_entry_point(dist, group, name): + """Return `name` entry point of `group` for `dist` or raise ImportError""" + return get_distribution(dist).load_entry_point(group, name) + + +def get_entry_map(dist, group=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, group, name): + """Return the EntryPoint object for `group`+`name`, or ``None``""" + return get_distribution(dist).get_entry_info(group, name) + + +class IMetadataProvider: + def has_metadata(name): + """Does the package's distribution contain the named metadata?""" + + def get_metadata(name): + """The named metadata resource as a string""" + + def get_metadata_lines(name): + """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(name): + """Is the named metadata a directory? (like ``os.path.isdir()``)""" + + def metadata_listdir(name): + """List of metadata names in the directory (like ``os.listdir()``)""" + + def run_script(script_name, namespace): + """Execute the named script in the supplied namespace dictionary""" + + +class IResourceProvider(IMetadataProvider): + """An object that provides access to package resources""" + + def get_resource_filename(manager, resource_name): + """Return a true filesystem path for `resource_name` + + `manager` must be an ``IResourceManager``""" + + def get_resource_stream(manager, resource_name): + """Return a readable file-like object for `resource_name` + + `manager` must be an ``IResourceManager``""" + + def get_resource_string(manager, resource_name): + """Return a string containing the contents of `resource_name` + + `manager` must be an ``IResourceManager``""" + + def has_resource(resource_name): + """Does the package contain the named resource?""" + + def resource_isdir(resource_name): + """Is the named resource a directory? (like ``os.path.isdir()``)""" + + def resource_listdir(resource_name): + """List of resource names in the directory (like ``os.listdir()``)""" + + +class WorkingSet(object): + """A collection of active distributions on sys.path (or a similar list)""" + + def __init__(self, entries=None): + """Create working set from list of path entries (default=sys.path)""" + self.entries = [] + self.entry_keys = {} + self.by_key = {} + 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): + """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): + """True if `dist` is the active distribution for its project""" + return self.by_key.get(dist.key) == dist + + def find(self, req): + """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 not None and dist not in req: + # XXX add more info + raise VersionConflict(dist, req) + return dist + + def iter_entry_points(self, group, name=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). + """ + for dist in self: + entries = dist.get_entry_map(group) + if name is None: + for ep in entries.values(): + yield ep + elif name in entries: + yield entries[name] + + def run_script(self, requires, script_name): + """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): + """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 = {} + 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[key] = 1 + yield self.by_key[key] + + def add(self, dist, entry=None, insert=True, replace=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 + if dist.key not in keys: + keys.append(dist.key) + if dist.key not in keys2: + keys2.append(dist.key) + self._added_new(dist) + + def resolve(self, requirements, env=None, installer=None, + replace_conflicting=False, extras=None): + """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 = {} + # 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 = 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) + + # 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[req] = True + + # return list of distros to activate + return to_activate + + def find_plugins( + self, plugin_env, full_env=None, installer=None, fallback=True): + """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 = {} + distributions = {} + + 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 + + distributions = list(distributions) + distributions.sort() + + return distributions, error_info + + def require(self, *requirements): + """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, existing=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.callbacks[:] + ) + + def __setstate__(self, e_k_b_c): + entries, keys, by_key, callbacks = e_k_b_c + self.entries = entries[:] + self.entry_keys = keys.copy() + self.by_key = by_key.copy() + self.callbacks = callbacks[:] + + +class _ReqExtras(dict): + """ + Map each requirement to the extras that demanded it. + """ + + def markers_pass(self, req, extras=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(object): + """Searchable snapshot of distributions on a search path""" + + def __init__( + self, search_path=None, platform=get_supported_platform(), + python=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.3'``); + 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): + """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): + """Remove `dist` from the environment""" + self._distmap[dist.key].remove(dist) + + def scan(self, search_path=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): + """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): + """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) + + def best_match( + self, req, working_set, installer=None, replace_conflicting=False): + """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) + + def obtain(self, requirement, installer=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.""" + if installer is not None: + return installer(requirement) + + def __iter__(self): + """Yield the unique project names of the available distributions""" + for key in self._distmap.keys(): + if self[key]: + yield key + + def __iadd__(self, other): + """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): + """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 + """ + + +class ResourceManager: + """Manage resource extraction and packages""" + extraction_path = None + + def __init__(self): + self.cached_files = {} + + def resource_exists(self, package_or_requirement, resource_name): + """Does the named resource exist?""" + return get_provider(package_or_requirement).has_resource(resource_name) + + def resource_isdir(self, package_or_requirement, resource_name): + """Is the named resource an existing directory?""" + return get_provider(package_or_requirement).resource_isdir( + resource_name + ) + + def resource_filename(self, package_or_requirement, resource_name): + """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, resource_name): + """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, resource_name): + """Return specified resource as a string""" + return get_provider(package_or_requirement).get_resource_string( + self, resource_name + ) + + def resource_listdir(self, package_or_requirement, resource_name): + """List the contents of the named resource directory""" + return get_provider(package_or_requirement).resource_listdir( + resource_name + ) + + def extraction_error(self): + """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, names=()): + """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] = 1 + 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 = ( + "%s is writable by group/others and vulnerable to attack " + "when " + "used with get_resource_filename. Consider a more secure " + "location (set with .set_extraction_path or the " + "PYTHON_EGG_CACHE environment variable)." % path + ) + warnings.warn(msg, UserWarning) + + def postprocess(self, tempname, filename): + """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): + """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=False): + """ + 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 + + +def get_default_cache(): + """ + 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 appdirs.user_cache_dir(appname='Python-Eggs') + ) + + +def safe_name(name): + """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): + """ + 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 safe_extra(extra): + """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): + """Convert a project or version name to its filename-escaped form + + Any '-' characters are currently replaced with '_'. + """ + return name.replace('-', '_') + + +def invalid_marker(text): + """ + 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, extra=None): + """ + 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) + + +class NullProvider: + """Try to implement resources and metadata for arbitrary PEP 302 loaders""" + + egg_name = None + egg_info = None + loader = None + + def __init__(self, module): + self.loader = getattr(module, '__loader__', None) + self.module_path = os.path.dirname(getattr(module, '__file__', '')) + + def get_resource_filename(self, manager, resource_name): + return self._fn(self.module_path, resource_name) + + def get_resource_stream(self, manager, resource_name): + return io.BytesIO(self.get_resource_string(manager, resource_name)) + + def get_resource_string(self, manager, resource_name): + return self._get(self._fn(self.module_path, resource_name)) + + def has_resource(self, resource_name): + return self._has(self._fn(self.module_path, resource_name)) + + def has_metadata(self, name): + return self.egg_info and self._has(self._fn(self.egg_info, name)) + + def get_metadata(self, name): + if not self.egg_info: + return "" + value = self._get(self._fn(self.egg_info, name)) + return value.decode('utf-8') if six.PY3 else value + + def get_metadata_lines(self, name): + return yield_lines(self.get_metadata(name)) + + def resource_isdir(self, resource_name): + return self._isdir(self._fn(self.module_path, resource_name)) + + def metadata_isdir(self, name): + return self.egg_info and self._isdir(self._fn(self.egg_info, name)) + + def resource_listdir(self, resource_name): + return self._listdir(self._fn(self.module_path, resource_name)) + + def metadata_listdir(self, name): + if self.egg_info: + return self._listdir(self._fn(self.egg_info, name)) + return [] + + def run_script(self, script_name, namespace): + 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 = open(script_filename).read() + 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): + raise NotImplementedError( + "Can't perform this operation for unregistered loader type" + ) + + def _isdir(self, path): + raise NotImplementedError( + "Can't perform this operation for unregistered loader type" + ) + + def _listdir(self, path): + raise NotImplementedError( + "Can't perform this operation for unregistered loader type" + ) + + def _fn(self, base, resource_name): + if resource_name: + return os.path.join(base, *resource_name.split('/')) + return base + + def _get(self, path): + if hasattr(self.loader, 'get_data'): + return self.loader.get_data(path) + raise NotImplementedError( + "Can't perform this operation for loaders without 'get_data()'" + ) + + +register_loader_type(object, NullProvider) + + +class EggProvider(NullProvider): + """Provider based on a virtual filesystem""" + + def __init__(self, module): + NullProvider.__init__(self, module) + self._setup_prefix() + + def _setup_prefix(self): + # we assume here that our metadata may be nested inside a "basket" + # of multiple eggs; that's why we use module_path instead of .archive + path = self.module_path + old = None + while path != old: + if _is_egg_path(path): + self.egg_name = os.path.basename(path) + self.egg_info = os.path.join(path, 'EGG-INFO') + self.egg_root = path + break + old = path + path, base = os.path.split(path) + + +class DefaultProvider(EggProvider): + """Provides access to package resources in the filesystem""" + + def _has(self, path): + return os.path.exists(path) + + def _isdir(self, path): + return os.path.isdir(path) + + def _listdir(self, path): + return os.listdir(path) + + def get_resource_stream(self, manager, resource_name): + return open(self._fn(self.module_path, resource_name), 'rb') + + def _get(self, path): + with open(path, 'rb') as stream: + return stream.read() + + @classmethod + def _register(cls): + loader_cls = getattr( + importlib_machinery, + 'SourceFileLoader', + type(None), + ) + register_loader_type(loader_cls, cls) + + +DefaultProvider._register() + + +class EmptyProvider(NullProvider): + """Provider that returns nothing for all requests""" + + module_path = None + + _isdir = _has = lambda self, path: False + + def _get(self, path): + return '' + + def _listdir(self, path): + return [] + + def __init__(self): + pass + + +empty_provider = EmptyProvider() + + +class ZipManifests(dict): + """ + zip manifest builder + """ + + @classmethod + def build(cls, path): + """ + 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. + """ + manifest_mod = collections.namedtuple('manifest_mod', 'manifest mtime') + + def load(self, path): + """ + 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 = None + _zip_manifests = MemoizedZipManifests() + + def __init__(self, module): + EggProvider.__init__(self, 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, resource_name): + 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 + + def _extract_resource(self, manager, zip_path): + + 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 IOError('"os.rename" and "os.unlink" are not supported ' + 'on this platform') + try: + + 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 os.error: + 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 os.error: + # 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): + zip_path = self._zipinfo_name(fspath) + return zip_path in self.zipinfo or zip_path in self._index() + + def _isdir(self, fspath): + 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): + return self._zipinfo_name(self._fn(self.egg_root, resource_name)) + + def _resource_to_zip(self, resource_name): + 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): + self.path = path + + def has_metadata(self, name): + return name == 'PKG-INFO' and os.path.isfile(self.path) + + def get_metadata(self, name): + if name != 'PKG-INFO': + raise KeyError("No metadata except PKG-INFO is available") + + with io.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): + # Python 2.7 compat for: replacement_char = '�' + replacement_char = b'\xef\xbf\xbd'.decode('utf-8') + 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): + 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, egg_info): + self.module_path = path + self.egg_info = egg_info + + +class EggMetadata(ZipProvider): + """Metadata provider for .egg files""" + + def __init__(self, importer): + """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() + + +_declare_state('dict', _distribution_finders={}) + + +def register_finder(importer_type, distribution_finder): + """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, only=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, path_item, only=False): + """ + 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) + for dist in dists: + yield dist + elif subitem.lower().endswith('.dist-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, path_item, only=False): + return () + + +register_finder(object, find_nothing) + + +def _by_version_descending(names): + """ + Given a list of filenames, return them in descending order + by version number. + + >>> names = 'bar', 'foo', 'Python-2.7.10.egg', 'Python-2.7.2.egg' + >>> _by_version_descending(names) + ['Python-2.7.10.egg', 'Python-2.7.2.egg', 'foo', 'bar'] + >>> names = 'Setuptools-1.2.3b1.egg', 'Setuptools-1.2.3.egg' + >>> _by_version_descending(names) + ['Setuptools-1.2.3.egg', 'Setuptools-1.2.3b1.egg'] + >>> names = 'Setuptools-1.2.3b1.egg', 'Setuptools-1.2.3.post1.egg' + >>> _by_version_descending(names) + ['Setuptools-1.2.3.post1.egg', 'Setuptools-1.2.3b1.egg'] + """ + def _by_version(name): + """ + Parse each component of the filename + """ + name, ext = os.path.splitext(name) + parts = itertools.chain(name.split('-'), [ext]) + return [packaging.version.parse(part) for part in parts] + + return sorted(names, key=_by_version, reverse=True) + + +def find_on_path(importer, 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 = safe_listdir(path_item) + + # for performance, before sorting by version, + # screen entries for only those that will yield + # distributions + filtered = ( + entry + for entry in entries + if dist_factory(path_item, entry, only) + ) + + # scan for .egg and .egg-info in directory + path_item_entries = _by_version_descending(filtered) + for entry in path_item_entries: + fullpath = os.path.join(path_item, entry) + factory = dist_factory(path_item, entry, only) + for dist in factory(fullpath): + yield dist + + +def dist_factory(path_item, entry, only): + """ + Return a dist_factory for a path_item and entry + """ + lower = entry.lower() + is_meta = any(map(lower.endswith, ('.egg-info', '.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 + if six.PY2: + __nonzero__ = __bool__ + + def __call__(self, fullpath): + return iter(()) + + +def safe_listdir(path): + """ + 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 + ignorable = ( + e.errno in (errno.ENOTDIR, errno.EACCES, errno.ENOENT) + # Python 2 on Windows needs to be handled this way :( + or getattr(e, "winerror", None) == 267 + ) + if not ignorable: + raise + return () + + +def distributions_from_metadata(path): + root = os.path.dirname(path) + if os.path.isdir(path): + if len(os.listdir(path)) == 0: + # empty metadata dir; skip + return + metadata = 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 + """ + with open(path) as f: + for line in f: + 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, ()) + + +register_finder(pkgutil.ImpImporter, find_on_path) + +if hasattr(importlib_machinery, 'FileFinder'): + register_finder(importlib_machinery.FileFinder, find_on_path) + +_declare_state('dict', _namespace_handlers={}) +_declare_state('dict', _namespace_packages={}) + + +def register_namespace_handler(importer_type, namespace_handler): + """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 + loader = importer.find_module(packageName) + 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) + loader.load_module(packageName) + _rebuild_mod_path(path, packageName, module) + return subpath + + +def _rebuild_mod_path(orig_path, package_name, module): + """ + 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))) + + if not isinstance(orig_path, list): + # Is this behavior useful when module.__path__ is not a list? + return + + orig_path.sort(key=position_in_sys_path) + module.__path__[:] = [_normalize_cached(p) for p in orig_path] + + +def declare_namespace(packageName): + """Declare that package 'packageName' is a namespace package""" + + _imp.acquire_lock() + try: + if packageName in _namespace_packages: + return + + path, parent = sys.path, None + if '.' in packageName: + parent = '.'.join(packageName.split('.')[:-1]) + declare_namespace(parent) + if parent not in _namespace_packages: + __import__(parent) + try: + path = sys.modules[parent].__path__ + except AttributeError: + raise TypeError("Not a package:", parent) + + # Track what packages are namespaces, so when new path items are added, + # they can be updated + _namespace_packages.setdefault(parent, []).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, parent=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, path_item, packageName, module): + """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 + + +register_namespace_handler(pkgutil.ImpImporter, file_ns_handler) +register_namespace_handler(zipimport.zipimporter, file_ns_handler) + +if hasattr(importlib_machinery, 'FileFinder'): + register_namespace_handler(importlib_machinery.FileFinder, file_ns_handler) + + +def null_ns_handler(importer, path_item, packageName, module): + return None + + +register_namespace_handler(object, null_ns_handler) + + +def normalize_path(filename): + """Normalize a file/dir name for comparison purposes""" + return os.path.normcase(os.path.realpath(filename)) + + +def _normalize_cached(filename, _cache={}): + try: + return _cache[filename] + except KeyError: + _cache[filename] = result = normalize_path(filename) + return result + + +def _is_egg_path(path): + """ + Determine if given path appears to be an egg. + """ + return path.lower().endswith('.egg') + + +def _is_unpacked_egg(path): + """ + Determine if given path appears to be an unpacked egg. + """ + return ( + _is_egg_path(path) 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]) + + +def yield_lines(strs): + """Yield non-empty/non-comment lines of a string or sequence""" + if isinstance(strs, six.string_types): + for s in strs.splitlines(): + s = s.strip() + # skip blank lines/comments + if s and not s.startswith('#'): + yield s + else: + for ss in strs: + for s in yield_lines(ss): + yield s + + +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): + """Object representing an advertised importable object""" + + def __init__(self, name, module_name, attrs=(), extras=(), dist=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) + + def load(self, require=True, *args, **kwargs): + """ + 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.", + DeprecationWarning, + stacklevel=2, + ) + if require: + self.require(*args, **kwargs) + return self.resolve() + + def resolve(self): + """ + 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)) + + def require(self, env=None, installer=None): + if self.extras and not self.dist: + raise UnknownExtra("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, dist=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, lines, dist=None): + """Parse an entry point group""" + if not MODULE(group): + raise ValueError("Invalid group name", group) + this = {} + 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, dist=None): + """Parse a map of entry point groups""" + if isinstance(data, dict): + data = data.items() + else: + data = split_sections(data) + maps = {} + 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 _remove_md5_fragment(location): + if not location: + return '' + parsed = urllib.parse.urlparse(location) + if parsed[-1].startswith('md5='): + return urllib.parse.urlunparse(parsed[:-1] + ('',)) + return location + + +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(object): + """Wrap an actual or potential sys.path entry w/metadata""" + PKG_INFO = 'PKG-INFO' + + def __init__( + self, location=None, metadata=None, project_name=None, + version=None, py_version=PY_MAJOR, platform=None, + precedence=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, basename, metadata=None, **kw): + 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.parsed_version, + self.precedence, + self.key, + _remove_md5_fragment(self.location), + self.py_version or '', + self.platform or '', + ) + + def __hash__(self): + return hash(self.hashcmp) + + def __lt__(self, other): + return self.hashcmp < other.hashcmp + + def __le__(self, other): + return self.hashcmp <= other.hashcmp + + def __gt__(self, other): + return self.hashcmp > other.hashcmp + + def __ge__(self, other): + return self.hashcmp >= other.hashcmp + + def __eq__(self, other): + 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): + 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"): + self._parsed_version = parse_version(self.version) + + return self._parsed_version + + def _warn_legacy_version(self): + LV = packaging.version.LegacyVersion + is_legacy = isinstance(self._parsed_version, LV) + if not is_legacy: + return + + # While an empty version is technically a legacy version and + # is not a valid PEP 440 version, it's also unlikely to + # actually come from someone and instead it is more likely that + # it comes from setuptools attempting to parse a filename and + # including it in the list. So for that we'll gate this warning + # on if the version is anything at all or not. + if not self.version: + return + + tmpl = textwrap.dedent(""" + '{project_name} ({version})' is being parsed as a legacy, + non PEP 440, + version. You may find odd behavior and sort order. + In particular it will be sorted as less than 0.0. It + is recommended to migrate to PEP 440 compatible + versions. + """).strip().replace('\n', ' ') + + warnings.warn(tmpl.format(**vars(self)), PEP440Warning) + + @property + def version(self): + try: + return self._version + except AttributeError: + version = _version_from_file(self._get_metadata(self.PKG_INFO)) + if version is None: + tmpl = "Missing 'Version:' header and/or %s file" + raise ValueError(tmpl % self.PKG_INFO, self) + 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): + """ + 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 = 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=()): + """List of Requirements needed for this distro if `extras` are used""" + dm = self._dep_map + deps = [] + deps.extend(dm.get(None, ())) + for ext in extras: + try: + deps.extend(dm[safe_extra(ext)]) + except KeyError: + raise UnknownExtra( + "%s has no such extra feature %r" % (self, ext) + ) + return deps + + def _get_metadata(self, name): + if self.has_metadata(name): + for line in self.get_metadata_lines(name): + yield line + + def activate(self, path=None, replace=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: + 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) + + @classmethod + def from_filename(cls, filename, metadata=None, **kw): + 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, name): + """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() + + def get_entry_map(self, group=None): + """Return the entry point map for `group`, or the full entry map""" + try: + ep_map = self._ep_map + except AttributeError: + ep_map = self._ep_map = EntryPoint.parse_map( + self._get_metadata('entry_points.txt'), self + ) + if group is not None: + return ep_map.get(group, {}) + return ep_map + + def get_entry_info(self, group, name): + """Return the EntryPoint object for `group`+`name`, or ``None``""" + return self.get_entry_map(group).get(name) + + def insert_on(self, path, loc=None, replace=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 + return True + + def clone(self, **kw): + """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) + return self.__class__(**kw) + + @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 = _version_from_file(self._get_metadata(self.PKG_INFO)) + 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): + """Recompute this distribution's dependencies.""" + dm = self.__dep_map = {None: []} + + reqs = [] + # 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 = frozenset(reqs_for_extra(None)) + dm[None].extend(common) + + for extra in self._parsed_pkg_info.get_all('Provides-Extra') or []: + s_extra = safe_extra(extra.strip()) + dm[s_extra] = list(frozenset(reqs_for_extra(extra)) - common) + + return dm + + +_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) + + +class RequirementParseError(ValueError): + def __str__(self): + return ' '.join(self.args) + + +def parse_requirements(strs): + """Yield ``Requirement`` objects for each specification in `strs` + + `strs` must be a string, or a (possibly-nested) iterable thereof. + """ + # create a steppable iterator, so we can handle \-continuations + lines = iter(yield_lines(strs)) + + 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() + try: + line += next(lines) + except StopIteration: + return + yield Requirement(line) + + +class Requirement(packaging.requirements.Requirement): + def __init__(self, requirement_string): + """DO NOT CALL THIS UNDOCUMENTED METHOD; use Requirement.parse()!""" + try: + super(Requirement, self).__init__(requirement_string) + except packaging.requirements.InvalidRequirement as e: + raise RequirementParseError(str(e)) + 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] + self.extras = tuple(map(safe_extra, self.extras)) + self.hashCmp = ( + self.key, + self.specifier, + frozenset(self.extras), + str(self.marker) if self.marker else None, + ) + self.__hash = hash(self.hashCmp) + + def __eq__(self, other): + return ( + isinstance(other, Requirement) and + self.hashCmp == other.hashCmp + ) + + def __ne__(self, other): + return not self == other + + def __contains__(self, item): + 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): + 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, ob): + """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] + + +def ensure_directory(path): + """Ensure that the parent directory of `path` exists""" + dirname = os.path.dirname(path) + py31compat.makedirs(dirname, exist_ok=True) + + +def _bypass_ensure_directory(path): + """Sandbox-bypassing version of ensure_directory()""" + if not WRITE_SUPPORT: + raise IOError('"os.mkdir" not supported on this platform.') + dirname, filename = split(path) + if dirname and filename and not isdir(dirname): + _bypass_ensure_directory(dirname) + mkdir(dirname, 0o755) + + +def split_sections(s): + """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) + + +# 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 = WorkingSet._build_master() + _declare_state('object', working_set=working_set) + + 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()) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6596d25ab840df171505cc158db64032c017d8f9 GIT binary patch literal 95310 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/__pycache__/py31compat.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/__pycache__/py31compat.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7663710e1428af94df2cacf49783d718d6785a1b GIT binary patch literal 657 zcmYjO!EVz)5S`hz(<pV)w8#8G4r$s3aYCpFQV9;_5F~;HSZ#J8juWq$bx?x>2jFM8 z@Iia!<X_;#j;o-oHP18iMl)|`N9}g&?eEifQvvV?_D<maOK+AuC{VbB`2LSE*0G3% zI#f~xKQWeCECLl}P`p=d_5+ZRp}AC@4Dvt#GIO-Y#Hzbv;!uY)*D?<@EE;h`;RO1} zm7fdOS2HiHKGI{?+f#4$g@;Y2gavNl2O_+N{9yp4$XfIa;j2LS(%WJL_F^j*vXqM; zll0)buY1Fn@D<<06moA0{4l)khfWylnyZ^ktCXxecsUsp8FHZ}%8hG`$J6JNSAFS% z;-;LtroKyUnV8H;eK-3B)bf)4J{gv)Vpycb;C7uZ)!^*Y{MMXZs9}+P9FVqVO*3sd zO7^17=zL~YzU^tTaZ$3<kc`e7d|B=cD6oTFJVA<lRPi<{UQHD;a9zbuR-uPJUiBrl zy+<8}BhHEY1ZQ_-UBNruk;i)^`*gyI1L8r%gPgP*TPtwUXH7OWd6MQIjO*lDEBjwM hvA%jGdvM4NnvYgSt(W>S3$-k-iT;zVsD(Z3iGL|di^>21 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/__init__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..07b2739ac532da7c140bd90e4935cdba71ab3979 GIT binary patch literal 154 zcmXr!<>iW5rx(ir1dl-k3@`#24nSPY0whuxf*CX!{Z=v*frJsnFL(Wt+yecA%mUq{ z(#)I`U4z1mq<jOT6#atiblsxV;{4L0<kVsiFCM{*FH6l!$uH86kI&4@EQycTE2zB1 SVUwGmQks)$2eP0Th#3H+3nvHw literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/__pycache__/appdirs.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/__pycache__/appdirs.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..124c5079097d195ecd14cbe779a5417bc561e402 GIT binary patch literal 18580 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 YpdZT7u<L>h=wW>4!f!gG>k)ka7czU?tpET3 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/__pycache__/pyparsing.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/__pycache__/pyparsing.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..aa4288f2597102bbaede6c0520d3286628000ba0 GIT binary patch literal 201076 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�}F=DaL%ve(O<C4BHnNiY6AzRIBD_5{=SO-uXOpRy8IPg zeomLa%B8-e$l0|tXMW?g(Zd%OW<oFA0cJ<2otbu&Nl(uOuI@3MOxx5Q25V~mCsn+W zV9)7puP)E)@>9ADa;f*fzHX2J1u_NK)KFXlrQy^(t~8(4<uzSCs{-HF<sDr<t9KRM z?bF?eE~ZoXr0(owdRoJMTS<26omek{Si`}xE`|~4%n$bKVrFbQ!2<c{48;8pICT8^ zc0hN-x{T{`SeLvmUAjnrFc6nG5Y83I)v)tjvqyJ7q4J*6-GnYbrN^Jv#nc@OdS?c5 z|3vRb^=QU*;&BDrbUCPtVn_w^y1c5(lrF!kzP+J49gV@;D&V5-rggcd%XM9D=wf)! zjPB0qBJw*Z>hgJAzQCp4H&?FUBcWV+6JrE6rGNTV`OXY_fANbq7OM858=cRYH%^~n zGdtfc_O^FUT7qvCSCPP5q^1GQ!<=e)U6(7mSb!(P<Kn}ApVECsU(f4O)@8rm-PGMB zT@LB-ur5n_d|Q{3y1cK;d%7&>@}@3}y1byvJG#86i=i>Us=Ke~@`j4~Gu^$ci_{Z? zmvlL!OQ#0(s_tIV<%BM0b$M48p?JZEDqvENLQ@P|y}ZpGzNV{kxkpF3-PSuzLUOs+ z9T6AUotHsVg;(hQJgYwZChrQDdu(4=vhC5WrRs5B%r1WRd@!yiE~^oSWEvv7uE%*@ zVob{J?$E?~4%UEdE>5aDmEWWj9hnZ)UBRkQ|CJGC`oF$R1`bGn`%eGso(4L_7wJct zy4S9{lLEPW(p&DcJGm;Pm6e};Cd*wW_e2LZ^b?_8JkWv6?o6(CAlpY8SMTo3z)J&9 zQ2yfsxq;q+?`jMG>+Z|sw&(hCy}7LY_ldq&6JNtrC30;W*fH>Y2cZxLrU#xJ*g0^5 zboqgETzdyz8#pr1J@E9vvje+GwUg_U1Gfgw54<sOdSGMVb-v^Wo*&pd@Err)xN3TJ zpfd2;fey+Xp-t0#9mtLJJ>K^nxt`oJ{Fm!Hm)qO7Ki8dm$|=xu#Q;?b#Lv^e!<pP3 z+S|{6BYoMvZ0?h}$I1ChF4MQSOa0C4zS)u84Zhlk+VQiQJ(v3f#x9fRO`*NF^O@{U zzV6KCvmM+GFlL9_^PSe~U46KS>dg#L+b({&W(KnzyK|YY?p&6CnXYV(8QsY!{J+_` B!KeTL literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/__pycache__/six.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/__pycache__/six.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..53220c150b1cf78748bd247782323e4a0248c131 GIT binary patch literal 24451 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/appdirs.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/appdirs.py new file mode 100644 index 00000000..32e7c9f7 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/appdirs.py @@ -0,0 +1,552 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# Copyright (c) 2005-2010 ActiveState Software Inc. +# Copyright (c) 2013 Eddy Petrișor + +"""Utilities for determining application-specific dirs. + +See <http://github.com/ActiveState/appdirs> for details and usage. +""" +# Dev Notes: +# - MSDN on where to store app data files: +# http://support.microsoft.com/default.aspx?scid=kb;en-us;310294#XSLTH3194121123120121120120 +# - Mac OS X: http://developer.apple.com/documentation/MacOSX/Conceptual/BPFileSystem/index.html +# - XDG spec for Un*x: http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html + +__version_info__ = (1, 4, 0) +__version__ = '.'.join(map(str, __version_info__)) + + +import sys +import os + +PY3 = sys.version_info[0] == 3 + +if PY3: + unicode = str + +if sys.platform.startswith('java'): + import platform + os_name = platform.java_ver()[3][0] + if os_name.startswith('Windows'): # "Windows XP", "Windows 7", etc. + system = 'win32' + elif os_name.startswith('Mac'): # "Mac OS X", etc. + system = 'darwin' + else: # "Linux", "SunOS", "FreeBSD", etc. + # Setting this to "linux2" is not ideal, but only Windows or Mac + # are actually checked for and the rest of the module expects + # *sys.platform* style strings. + system = 'linux2' +else: + system = sys.platform + + + +def user_data_dir(appname=None, appauthor=None, version=None, roaming=False): + r"""Return full path to the user-specific data dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is 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>". + Only applied when appname is present. + "roaming" (boolean, default False) can be set True to use the Windows + roaming appdata directory. That means that for users on a Windows + network setup for roaming profiles, this user data will be + sync'd on login. See + <http://technet.microsoft.com/en-us/library/cc766489(WS.10).aspx> + for a discussion of issues. + + Typical user data directories are: + Mac OS X: ~/Library/Application Support/<AppName> + Unix: ~/.local/share/<AppName> # or in $XDG_DATA_HOME, if defined + Win XP (not roaming): C:\Documents and Settings\<username>\Application Data\<AppAuthor>\<AppName> + Win XP (roaming): C:\Documents and Settings\<username>\Local Settings\Application Data\<AppAuthor>\<AppName> + Win 7 (not roaming): C:\Users\<username>\AppData\Local\<AppAuthor>\<AppName> + Win 7 (roaming): C:\Users\<username>\AppData\Roaming\<AppAuthor>\<AppName> + + For Unix, we follow the XDG spec and support $XDG_DATA_HOME. + That means, by default "~/.local/share/<AppName>". + """ + if system == "win32": + if appauthor is None: + appauthor = appname + const = roaming and "CSIDL_APPDATA" or "CSIDL_LOCAL_APPDATA" + path = os.path.normpath(_get_win_folder(const)) + if appname: + if appauthor is not False: + path = os.path.join(path, appauthor, appname) + else: + path = os.path.join(path, appname) + elif system == 'darwin': + path = os.path.expanduser('~/Library/Application Support/') + if appname: + path = os.path.join(path, appname) + else: + path = os.getenv('XDG_DATA_HOME', os.path.expanduser("~/.local/share")) + if appname: + path = os.path.join(path, appname) + if appname and version: + path = os.path.join(path, version) + return path + + +def site_data_dir(appname=None, appauthor=None, version=None, multipath=False): + r"""Return full path to the user-shared data dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is 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>". + Only applied when appname is present. + "multipath" is an optional parameter only applicable to *nix + which indicates that the entire list of data dirs should be + returned. By default, the first item from XDG_DATA_DIRS is + returned, or '/usr/local/share/<AppName>', + if XDG_DATA_DIRS is not set + + Typical user data directories are: + Mac OS X: /Library/Application Support/<AppName> + Unix: /usr/local/share/<AppName> or /usr/share/<AppName> + Win XP: C:\Documents and Settings\All Users\Application Data\<AppAuthor>\<AppName> + Vista: (Fail! "C:\ProgramData" is a hidden *system* directory on Vista.) + Win 7: C:\ProgramData\<AppAuthor>\<AppName> # Hidden, but writeable on Win 7. + + For Unix, this is using the $XDG_DATA_DIRS[0] default. + + WARNING: Do not use this on Windows. See the Vista-Fail note above for why. + """ + if system == "win32": + if appauthor is None: + appauthor = appname + path = os.path.normpath(_get_win_folder("CSIDL_COMMON_APPDATA")) + if appname: + if appauthor is not False: + path = os.path.join(path, appauthor, appname) + else: + path = os.path.join(path, appname) + elif system == 'darwin': + path = os.path.expanduser('/Library/Application Support') + if appname: + path = os.path.join(path, appname) + else: + # XDG default for $XDG_DATA_DIRS + # only first, if multipath is False + path = os.getenv('XDG_DATA_DIRS', + os.pathsep.join(['/usr/local/share', '/usr/share'])) + pathlist = [os.path.expanduser(x.rstrip(os.sep)) for x in path.split(os.pathsep)] + if appname: + if version: + appname = os.path.join(appname, version) + pathlist = [os.sep.join([x, appname]) for x in pathlist] + + if multipath: + path = os.pathsep.join(pathlist) + else: + path = pathlist[0] + return path + + if appname and version: + path = os.path.join(path, version) + return path + + +def user_config_dir(appname=None, appauthor=None, version=None, roaming=False): + r"""Return full path to the user-specific config dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is 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>". + Only applied when appname is present. + "roaming" (boolean, default False) can be set True to use the Windows + roaming appdata directory. That means that for users on a Windows + network setup for roaming profiles, this user data will be + sync'd on login. See + <http://technet.microsoft.com/en-us/library/cc766489(WS.10).aspx> + for a discussion of issues. + + Typical user data directories are: + Mac OS X: same as user_data_dir + Unix: ~/.config/<AppName> # or in $XDG_CONFIG_HOME, if defined + Win *: same as user_data_dir + + For Unix, we follow the XDG spec and support $XDG_CONFIG_HOME. + That means, by deafult "~/.config/<AppName>". + """ + if system in ["win32", "darwin"]: + path = user_data_dir(appname, appauthor, None, roaming) + else: + path = os.getenv('XDG_CONFIG_HOME', os.path.expanduser("~/.config")) + if appname: + path = os.path.join(path, appname) + if appname and version: + path = os.path.join(path, version) + return path + + +def site_config_dir(appname=None, appauthor=None, version=None, multipath=False): + r"""Return full path to the user-shared data dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is 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>". + Only applied when appname is present. + "multipath" is an optional parameter only applicable to *nix + which indicates that the entire list of config dirs should be + returned. By default, the first item from XDG_CONFIG_DIRS is + returned, or '/etc/xdg/<AppName>', if XDG_CONFIG_DIRS is not set + + Typical user data directories are: + Mac OS X: same as site_data_dir + Unix: /etc/xdg/<AppName> or $XDG_CONFIG_DIRS[i]/<AppName> for each value in + $XDG_CONFIG_DIRS + Win *: same as site_data_dir + Vista: (Fail! "C:\ProgramData" is a hidden *system* directory on Vista.) + + For Unix, this is using the $XDG_CONFIG_DIRS[0] default, if multipath=False + + WARNING: Do not use this on Windows. See the Vista-Fail note above for why. + """ + if system in ["win32", "darwin"]: + path = site_data_dir(appname, appauthor) + if appname and version: + path = os.path.join(path, version) + else: + # XDG default for $XDG_CONFIG_DIRS + # only first, if multipath is False + path = os.getenv('XDG_CONFIG_DIRS', '/etc/xdg') + pathlist = [os.path.expanduser(x.rstrip(os.sep)) for x in path.split(os.pathsep)] + if appname: + if version: + appname = os.path.join(appname, version) + pathlist = [os.sep.join([x, appname]) for x in pathlist] + + if multipath: + path = os.pathsep.join(pathlist) + else: + path = pathlist[0] + return path + + +def user_cache_dir(appname=None, appauthor=None, version=None, opinion=True): + r"""Return full path to the user-specific cache dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is 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>". + Only applied when appname is present. + "opinion" (boolean) can be False to disable the appending of + "Cache" to the base app data dir for Windows. See + discussion below. + + Typical user cache directories are: + Mac OS X: ~/Library/Caches/<AppName> + Unix: ~/.cache/<AppName> (XDG default) + Win XP: C:\Documents and Settings\<username>\Local Settings\Application Data\<AppAuthor>\<AppName>\Cache + Vista: C:\Users\<username>\AppData\Local\<AppAuthor>\<AppName>\Cache + + On Windows the only suggestion in the MSDN docs is that local settings go in + the `CSIDL_LOCAL_APPDATA` directory. This is identical to the non-roaming + app data dir (the default returned by `user_data_dir` above). Apps typically + put cache data somewhere *under* the given dir here. Some examples: + ...\Mozilla\Firefox\Profiles\<ProfileName>\Cache + ...\Acme\SuperApp\Cache\1.0 + OPINION: This function appends "Cache" to the `CSIDL_LOCAL_APPDATA` value. + This can be disabled with the `opinion=False` option. + """ + if system == "win32": + if appauthor is None: + appauthor = appname + path = os.path.normpath(_get_win_folder("CSIDL_LOCAL_APPDATA")) + if appname: + if appauthor is not False: + path = os.path.join(path, appauthor, appname) + else: + path = os.path.join(path, appname) + if opinion: + path = os.path.join(path, "Cache") + elif system == 'darwin': + path = os.path.expanduser('~/Library/Caches') + if appname: + path = os.path.join(path, appname) + else: + path = os.getenv('XDG_CACHE_HOME', os.path.expanduser('~/.cache')) + if appname: + path = os.path.join(path, appname) + if appname and version: + path = os.path.join(path, version) + return path + + +def user_log_dir(appname=None, appauthor=None, version=None, opinion=True): + r"""Return full path to the user-specific log dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is 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>". + Only applied when appname is present. + "opinion" (boolean) can be False to disable the appending of + "Logs" to the base app data dir for Windows, and "log" to the + base cache dir for Unix. See discussion below. + + Typical user cache directories are: + Mac OS X: ~/Library/Logs/<AppName> + Unix: ~/.cache/<AppName>/log # or under $XDG_CACHE_HOME if defined + Win XP: C:\Documents and Settings\<username>\Local Settings\Application Data\<AppAuthor>\<AppName>\Logs + Vista: C:\Users\<username>\AppData\Local\<AppAuthor>\<AppName>\Logs + + On Windows the only suggestion in the MSDN docs is that local settings + go in the `CSIDL_LOCAL_APPDATA` directory. (Note: I'm interested in + examples of what some windows apps use for a logs dir.) + + OPINION: This function appends "Logs" to the `CSIDL_LOCAL_APPDATA` + value for Windows and appends "log" to the user cache dir for Unix. + This can be disabled with the `opinion=False` option. + """ + if system == "darwin": + path = os.path.join( + os.path.expanduser('~/Library/Logs'), + appname) + elif system == "win32": + path = user_data_dir(appname, appauthor, version) + version = False + if opinion: + path = os.path.join(path, "Logs") + else: + path = user_cache_dir(appname, appauthor, version) + version = False + if opinion: + path = os.path.join(path, "log") + if appname and version: + path = os.path.join(path, version) + return path + + +class AppDirs(object): + """Convenience wrapper for getting application dirs.""" + def __init__(self, appname, appauthor=None, version=None, roaming=False, + multipath=False): + self.appname = appname + self.appauthor = appauthor + self.version = version + self.roaming = roaming + self.multipath = multipath + + @property + def user_data_dir(self): + return user_data_dir(self.appname, self.appauthor, + version=self.version, roaming=self.roaming) + + @property + def site_data_dir(self): + return site_data_dir(self.appname, self.appauthor, + version=self.version, multipath=self.multipath) + + @property + def user_config_dir(self): + return user_config_dir(self.appname, self.appauthor, + version=self.version, roaming=self.roaming) + + @property + def site_config_dir(self): + return site_config_dir(self.appname, self.appauthor, + version=self.version, multipath=self.multipath) + + @property + def user_cache_dir(self): + return user_cache_dir(self.appname, self.appauthor, + version=self.version) + + @property + def user_log_dir(self): + return user_log_dir(self.appname, self.appauthor, + version=self.version) + + +#---- internal support stuff + +def _get_win_folder_from_registry(csidl_name): + """This is a fallback technique at best. I'm not sure if using the + registry for this guarantees us the correct answer for all CSIDL_* + names. + """ + import _winreg + + shell_folder_name = { + "CSIDL_APPDATA": "AppData", + "CSIDL_COMMON_APPDATA": "Common AppData", + "CSIDL_LOCAL_APPDATA": "Local AppData", + }[csidl_name] + + key = _winreg.OpenKey( + _winreg.HKEY_CURRENT_USER, + r"Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" + ) + dir, type = _winreg.QueryValueEx(key, shell_folder_name) + return dir + + +def _get_win_folder_with_pywin32(csidl_name): + from win32com.shell import shellcon, shell + dir = shell.SHGetFolderPath(0, getattr(shellcon, csidl_name), 0, 0) + # Try to make this a unicode path because SHGetFolderPath does + # not return unicode strings when there is unicode data in the + # path. + try: + dir = unicode(dir) + + # Downgrade to short path name if have highbit chars. See + # <http://bugs.activestate.com/show_bug.cgi?id=85099>. + has_high_char = False + for c in dir: + if ord(c) > 255: + has_high_char = True + break + if has_high_char: + try: + import win32api + dir = win32api.GetShortPathName(dir) + except ImportError: + pass + except UnicodeError: + pass + return dir + + +def _get_win_folder_with_ctypes(csidl_name): + import ctypes + + csidl_const = { + "CSIDL_APPDATA": 26, + "CSIDL_COMMON_APPDATA": 35, + "CSIDL_LOCAL_APPDATA": 28, + }[csidl_name] + + buf = ctypes.create_unicode_buffer(1024) + ctypes.windll.shell32.SHGetFolderPathW(None, csidl_const, None, 0, buf) + + # Downgrade to short path name if have highbit chars. See + # <http://bugs.activestate.com/show_bug.cgi?id=85099>. + has_high_char = False + for c in buf: + if ord(c) > 255: + has_high_char = True + break + if has_high_char: + buf2 = ctypes.create_unicode_buffer(1024) + if ctypes.windll.kernel32.GetShortPathNameW(buf.value, buf2, 1024): + buf = buf2 + + return buf.value + +def _get_win_folder_with_jna(csidl_name): + import array + from com.sun import jna + from com.sun.jna.platform import win32 + + buf_size = win32.WinDef.MAX_PATH * 2 + buf = array.zeros('c', buf_size) + shell = win32.Shell32.INSTANCE + shell.SHGetFolderPath(None, getattr(win32.ShlObj, csidl_name), None, win32.ShlObj.SHGFP_TYPE_CURRENT, buf) + dir = jna.Native.toString(buf.tostring()).rstrip("\0") + + # Downgrade to short path name if have highbit chars. See + # <http://bugs.activestate.com/show_bug.cgi?id=85099>. + has_high_char = False + for c in dir: + if ord(c) > 255: + has_high_char = True + break + if has_high_char: + buf = array.zeros('c', buf_size) + kernel = win32.Kernel32.INSTANCE + if kernal.GetShortPathName(dir, buf, buf_size): + dir = jna.Native.toString(buf.tostring()).rstrip("\0") + + return dir + +if system == "win32": + try: + import win32com.shell + _get_win_folder = _get_win_folder_with_pywin32 + except ImportError: + try: + from ctypes import windll + _get_win_folder = _get_win_folder_with_ctypes + except ImportError: + try: + import com.sun.jna + _get_win_folder = _get_win_folder_with_jna + except ImportError: + _get_win_folder = _get_win_folder_from_registry + + +#---- self test code + +if __name__ == "__main__": + appname = "MyApp" + appauthor = "MyCompany" + + props = ("user_data_dir", "site_data_dir", + "user_config_dir", "site_config_dir", + "user_cache_dir", "user_log_dir") + + print("-- app dirs (with optional 'version')") + dirs = AppDirs(appname, appauthor, version="1.0") + for prop in props: + print("%s: %s" % (prop, getattr(dirs, prop))) + + print("\n-- app dirs (without optional 'version')") + dirs = AppDirs(appname, appauthor) + for prop in props: + print("%s: %s" % (prop, getattr(dirs, prop))) + + print("\n-- app dirs (without optional 'appauthor')") + dirs = AppDirs(appname) + for prop in props: + print("%s: %s" % (prop, getattr(dirs, prop))) + + print("\n-- app dirs (with disabled 'appauthor')") + dirs = AppDirs(appname, appauthor=False) + for prop in props: + print("%s: %s" % (prop, getattr(dirs, prop))) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__about__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__about__.py new file mode 100644 index 00000000..95d330ef --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__about__.py @@ -0,0 +1,21 @@ +# 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 absolute_import, division, print_function + +__all__ = [ + "__title__", "__summary__", "__uri__", "__version__", "__author__", + "__email__", "__license__", "__copyright__", +] + +__title__ = "packaging" +__summary__ = "Core utilities for Python packages" +__uri__ = "https://github.com/pypa/packaging" + +__version__ = "16.8" + +__author__ = "Donald Stufft and individual contributors" +__email__ = "donald@stufft.io" + +__license__ = "BSD or Apache License, Version 2.0" +__copyright__ = "Copyright 2014-2016 %s" % __author__ diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__init__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__init__.py new file mode 100644 index 00000000..5ee62202 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__init__.py @@ -0,0 +1,14 @@ +# 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 absolute_import, division, print_function + +from .__about__ import ( + __author__, __copyright__, __email__, __license__, __summary__, __title__, + __uri__, __version__ +) + +__all__ = [ + "__title__", "__summary__", "__uri__", "__version__", "__author__", + "__email__", "__license__", "__copyright__", +] diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/__about__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/__about__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5f30536653c294f66e8fa6c4dd4761cb38bf9cec GIT binary patch literal 690 zcmYk3O^?$s5QdYcA8Fd|7Fg}sti+)bO}YiG5JG5S_lVGnN*pYZm1Nw++9WpqsFeI8 zF8mhGy>j9&aKhdSl~{Q+W4#{FynZp8MPGizUw`&I@0a)A7uxvR{_4&GJn$>8_OW00 zaIX$<;Cs-60QxY1A&ek|aS`G^M0fxbJcKD8!3>9Rg2!-*Bbeg}Jfh=s4^QFo##=o3 zZL4~VV1JrsidRNc!fL^#-iN?;OflZ<PlRNRCR@|w+T~+HG}9F&WIrK9nYvD8Ym*Tn zMzX{1j!JjdCJ`a2(IuBQwkK(wvg)9zSWX+|%FGDKxo9OTO6_DK&F|BKHAQ!E!zD#V zvx;d(720x%?pj-}K?f04-P2NQp<X9R!E|Y|IOlaDT9GElGX2Y|_*J*K<xN@v+Gw-g zYLqsBSmVY7lU69_jg~AknoHHq;X!(>9;7kj-NpOOEwZ=2vsFuqJ{+2Vjy@kIMeBIg zo!|VM0<Bk<FP9cq=$ZPsm^mA^MjL6zmG+4}894MUoNsAmJ&^;qHFOv`xR;k>hsa^# zFtzyZ$+?Ri{(MSwEfT@RGBd1#<?36R@zoj<abGMYRouv&DwmOCMs~CTE{_H!wuOuv gYkn-+efXy4U@H37wWrQ3&VtB~g1&E8&n`#*FA!AE6#xJL literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1779dd675ad99c5a16655dd199531b4b28ae2217 GIT binary patch literal 528 zcmYk2&1&2*5XWVE*PrW@LLQ=f*f_M;Qu+jeke)=s;I$O5h{jT7X<;9!mpqWKIpr04 zswN9*1o|<5F&}@;x3;bCpRXR0l(84~;gm7{8SnfnLNJkNh6ztF<tb)7OPEMSrdPP; zYs`6$1uwAVC04w`n%CIy1~+^Y^HyRla#4s<RH7EmSn^hE?%1|{jh)#xTR!#s+34UU zD741;r4;I@W@V=3!a6m1cns6vqkc`OqFic#KKO%i080xn7<+PRJoqRp0ExZQF>C;| z8ss#~vzP;7?@s3=ue_%B0w6ebPB=<OQvqBP=eU}%A+&^?Kx=Uop@_KIUXYi^;Dd|J zTwEe^8DSMcUi!TW(bl<`N<MUW>;E?CeF)j<bu|BnxzChM_<P%Vw4GIUw+~8--SzLo z-dukboqZa2PR=H{LC&P$zk;KjgmIniho^p2)7Sy1NkubP_Oz7W(TJes4>CH_*Dlj9 Hd7b<NUc-&< literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/_compat.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/_compat.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3cdea12ec9a351bd81cd0a11575b745a7105aa79 GIT binary patch literal 975 zcmah{OHUgy5cXq}ENKV_5K<q9^ipXLBnYkuRcfW)5K^T|T~S%i+JS|AVS7PA^aK+8 zm0tRTeC>(9&{JoeHc<7@k!CzIw!is2<K5NO{?YgGmm^Nd5AsA9_-{e&CoqaAT9A^a zv}7qOdCDo~SP`X>j!rv@JSU2uv9!C4B8YmrXWr|0M$?t5tNXaBj_Tf$^qFEGNz!`& zY?5%lCa1P8TBk)`Hnnj+R{2G4^SbiG#^jX~v$o0{#0L*Z>;c%4jN)w&3_74aQ2PeV z2XaU5=!_|<*ln!XJ-y*ynIot4nkhabIk}0Td~`MGk3ilTEu9|8(NtPJ$_i=i=rVUF zkSVp3Au$doGXP%-mPN5Iz-W?EMN;;(aLN@AWnLqic*NQ(>P!}Pf4od(QGg-@SJZV- zI{<S}ujxIx<~ImM5556y&$Gh%sFJ1jeRq;ufyAw+Dq+5}@FRpa*pZ)y6IV8qCU3T; zZC<FY?emjqy}hF*&Drsm(Y9_)rY%O|F%lQLQni^hGCPyUd38JySzR{Ljhnge2~p`w zAzmR#oCl#-$$#HC{(b8JUJ!#1^o8(!A<9~{1^NRa&Rbb5cFY>!h8HBvU?<G#pM)8L z=U0~9dkJCS5mSSW^J`AyKayrH!t|gok()O<U?zNl6fp7lzeNK6@b4FGV39DU-X=Gj z5G4a-KWklUfW5&+82l6lPkC<V)(<YU!EY?`YF2xG_<0A-E^IpE2VkJH0-0Ig4}%Mt efF4*qF@aOOw`kTrmav%GU@;%kVHDArb@?xG{Px`d literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/_structures.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/_structures.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..40570e97310aba224492369d0122bd57cac9974d GIT binary patch literal 2832 zcmcIm&2G~`5Z<*D$4S#R{eiY1kT@Yrw5f`akU&)t2*f29dWt|R*SksGCbqj?S8CN; zdf-*K@IbzD;uSbCv#HypvT^v^XlK@*-Th`~XTJF9{Cwl%*R4;VtAu<b6RiT{J?QZp z5S(y2AVb=vL!)a9&8|twJHicaUJ`DK%E;_iMRi2FRd`$BRd`#~Z!KZLTZ>yCh*SFx zI}yiB7u|z693)CGe;9>Qr8f6Z{n!tKbRm*{pja;nJO$4luE?4JgFWc+J_td&l#{N( zDK{=j*W@OzfCg-Cfv)lzw?SLH&Ksa>e2zCk+kBocfUfgJ-U8j=OMDsh9A5zsS5y0a z(DMUdop}^Mu%X8O8hVUD;S^>X9SH#=Ux-7~N-PFFX~ClwKla;d7_}om+B``70pHv{ zIXnorcX&HG?r%yFhl%t=j8E+5iJgjohq4{H-m%;FgMOREN+zC4V9r)_mf8$vN0PBR zI)bqv^n59EcPq0_`E9}^?ROIfiYR(PMs$S!(~e`Ll|wf^Oe?spLuC!-+?+z%@Q9!| zhcVnB4|Htxv^y{bbzZRE>Wv*kgQV3^9SV6H%VKPx7+ah`TAVl@+I|m5&cjxDD1x!& zA{4Mqq1+1L1%&X3j*KjX4M^J{R&L;lv<^!LZX7dqb<iRQ#0g_}3LHRNz5@%eLXpgY zCb@D!w(yioAWBdJINEvvD%z${^Dc3J@)C>A)`x4lUx0$Pe}n@5J}g4Pv!MUjP*0sj zUB!*2t&Zrs%0CrZk`>fIjj=%V8G8g<WhKzc)<E59W5;P?u>|fA(9;HE!;mKf95)#| zN!-EMBC&WS7L&y5l$h)ib5X9KSVe)EA=gk`Q_6UR6{%SVD>cSdwqcvoKW+EGbltEd z_n`kr)|7W)|KgBe5$1V)GmF|dk#Z?VN60~cHK)+?joa7sCsZdJu%ny<k$=hhN}iOU z&d7D8WumXXJps0sbHthGt{e&zY^Mwg3r0s9CZhf|=gmYoI;o$P0RJDZ)1~yh1bQaI zoBG$vBRpNOFG`?hV!d)Gq=nrwsM)AblSDxwAo0AKfLYJU&5ZFR{+-AT6!%d4HMt>= zJceFGZfNf~HRRV`f?r1P)q@EuF=HiuoTXNHa3nmXkEnSmk401a<(Qv$aZQZGx@xu_ HSkQk0u&woT literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/markers.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/markers.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4d84c6008bb7eced1aad6343db739d016ffcbcda GIT binary patch literal 8855 zcmcIp&2t+^cAuUZ00R&NDUuc`*^)=pCu9kvWm}eQiWY5CmevwUi(1(`v4afJO$s0| z1N97K2?DojO>Zu#t*x!f(T6>ylB!J(xuh!pLatjm%rz%nQk7$PNq(<qFa#kgyK+^4 z>hJE?@4bHg-s?B-jE)w*`KQXa*KAGu4{hL=NBss;aKq3vu5s4XTFhZB-O*cyV=(H| zo2Fx`GUH@anRT+N%sDxfM$>BLoqVg{6j~$BNUP`+)jAXXqt0ln<dj-t&RA>Q8CU%o z^dE61P|xyQbFww%OsTrne64lVIog_brqRyx0w3W;KDw20W<J+=iRXVnuQ;}AILFZ* z;{~(}s{K0J<9r0|5!HSJ?IU~w?Fn%L^G~8Z$*0hs5+~7q6YbadQM8Y$wvF~QpFw*@ zwNHr&er%T^KfcR8(NMmgly4;EiKIN4ly4@bos_4NayBVXC*_%>Je!o~lJa~~UP#Jv zQeLFendPVXEI-NL<j3)U>&L8fTFf@i@Jsyi585tcgkeSDJD04RPs+EG@=8*^la%i! z<$F{*XT@1SxSI66ulml3bJ*cpy2CjC06UEH57p>-aUP=|rK1ykLG6ECjb0G5;ymD% zMM;#!xoJ(5r-7$)QC!5T#er2H@3O{QyP9(e``<|Fm&F)*D&itmUlJ9pzD%nDZ%$Oi zoEQ}ssCSo5Yl|9aA5n9P)0#8Sm-r_?XwKVwoqxuce_+lPev@|NpHnW(#yd#wBE5%n z73qDXYy8%amh%C>&3}fqA3|a@=Og|Fzk}8SzspxpUgxWP4do*Ll8>VN7!q@j7Xi7b zB<u#)*R}Hf=XABoMl|Mb1b(v<ifX;p_GK7Zy#BZz)O{~1wPoE4tD7CK7NWgUHlxy- zD+96oq$b+b6%|$co(MY4Fo;Hi5G%IULl<!JabwxzSXXd_^jGCwUy3O6x%4~jD0kDB z-?@@U#V<R4DEPWsTV_%2PCXRTZ9Zp&A&ZJJplbNEErPNh<=5MyR^O}(8I9le9=pvt z-|rbsdhWV%8xtmf?s2hM_XPjcZ?#=n4}kPc+PUmKu1nu*2`^l6TO!K#mtm0$lB!~V zLX8;K{}F08kb-e!LUS0`9Gx@AP|P*t1iHJ+1slI5&#uQ<+AW2Y{hb@wn|{aRm+Vd; zWMBsm{Z5nHQfvxohrYeGyk@^Qf32d{6Wgt7)dPOjYE-CJTR!hJsa~vBA9dVjGLoxS zxnHYR|3Q<lV|SJ9t<8n4_FTK(zP!<?H~HoHM-Mmr`73;`y}fl=iooy4nh2;>-EUPN z3y=G9uI<*g-7OsGT#R^7X+Kqz9V5zhWR~$tT$v=UtPOL;Z{xH{niON)Fchse<iSRV zYvXu3!VVw0q0M~}c;`bq=(I^t?RuCpNKO;QGn5f-@;GHF7vkC*)JGV+iS$#jpTfHC zH!=1$F?|SM9NdPW6XpB(+MXZU;z>OKx?WJ{!uB^YDio9f;d*sS2%EDhCFX&1prg4# zW0#QaODET%4h(K^6Q#*BJc}~JbKF9i<$0)uLS(M^T+|2x{ivk$DN;~C)?+=b3R8=@ zYz3DyqYenS(hNj%Q=Y_>0mc*0NqFmCJ*-wM1Vlk*-BH@6(jTeOeWD+g2lflKp4MQy zEZ$F#3@8J&OPNVJ$l=X!3oxTveH&x_y^6_RYT&?DCT1zph?|@>)MgDmG<wk4yQC-e zm2Pq2+5FChXK$a9JLN@O#_XmqTP_q_wOVVsK~Sy6;&%!#UV;@^AVnK!y*q$bp9S&A z0lbI}3NH(lQ2QS0rO)um6+gV)YBvQbEy0(i^yN!-%|p4=p&q;9{ef*uiW}+BN;x-t zdu+^>vy_p5$@7#Qc9~9KfFvv+EG^wK=r5`FaA_nazbK6$3<~Z6bhEqB6bIOlN<z#A zI+TPB^5x7{_+BTp5>cDz!>$YvZ4MLtQYtS1)JJ`AmM*FN%JgL(kRCgnIJ#D`>?!gf zahX|2+$>J@G=>g8Tt%f4k%Y=IwZl&%v5ak&kQB#2BDG(cM18e=IDM~tc(?ngXslaY zZT~cyE&|BseL$dz+R;(?IPuL<1_y>tDo^KRyXl5>t*h;);X~geUua-nG<mSCjBzxX z%-!rXn<=F66p|E8;RYhw@9FQh-_vqy58<3dW9h2kX#o2N*DJ=Ozodx%YJXCc^8<xK z7nKTGqArbB`s3YngG#b~peNa~o01Hpei+HG9p0T0PeSRIv;U7<%d0r5nt_adRA!Kr ztdoTgwU9OR9=xq%TAc6d$;FYRH_L{)qET+?&h4f3<@Lze5+NL27DTKWv2Z|@#pY?D z>9#hwyI9BK07;XiJ-WvA>({$FrA4F#q*F-0yuQa4_t-)=OP0OvMS9&kfGgpva4n(& z>!t8KfFDz`2sA&Wy-2ml1<LkSta4QdiSLjUN_*`59-DpTjp!o(SsQix8%2ie@ksaO ztL_zL!Vd1tpS9bs`n&D13wx}5Ky9S_voVRRe+WY?XE-D8rKf$SY(Nj@P?<zyC0$H< zknH(7Qb49=3)8<X?l1s>1Mxfkk+~i-8E(r|wdM=BzE!*l0ztknynT2vdSyOh^`WEK zD=akO!PW4BSo|$Pr>(MD_rhU7Dho}&<~D;xRQihmxPT{>7lf`?6EchC^v;QQ4Tg4; zw=n!0+J@$7tiVdT>bswMWyGWOPW(L@F`q&>E}O=#9!!Pi_e6HgyIWy~EGK8%fJ41p zKZcP|-_*g`TVXctAsJ2Ad>?y>F~4{89+Mu=G;%$4(+~_v>eCv}O@rg!tXfI%eotfE zq7X>Dn&77ARalWF;Hxg`fs-S0NYVpx-EnRc@wstW#^2}<;1@p9<EPb4aymEbG6>22 zELCG?tQx;i%DN=u5wX?~Q}^-<Tf!4h+H&#tv`Z{3-BSmb51d_p_8zn4O{|b)OAcU6 zhwy@|_25J9Y6oOZS?UBaxkjLdF8UYf`#Yq*Sk1l^seOU6<Q=StOzM%#1ayqrrKJEq z4!xz6Ul<up;mK7sv*Fi0Xu)jED7iwNnY!l*IgAg@|68Phw5`UbvPanjE9#I#X0n1l z1&N%}71UH9iJg>`;v;+C!=2mCDrZfB#|<!=4}-{%4_}aXQgnYnQi|?RfXoeol)u0# z=}<PrQUdvpeUN2K-ax&tvE|3qPzs%tJ1O<W>v9pDsmdc^97R&(G*NkaJR}#5;du33 z==3ezgI%^`e5H9)rWP981zBMbQl|Yv^NL?<J)>d9-fEa>WaCwsZ}t$J+_vOKnB#iG zqPG-ol(EacXFbeEot_-VN~Cp9r!flq**snz^cq%A5F7g0es%?2m2zHE_(49PO!==z zP>ZaZ?}aY34T1&n+uE0b{D3A+Qg#|yIir{dMc-Bo#Pbb7mB^&|L(IhcP2iCSQ2&C3 zO0#NAXU8E9S-qf_n1$B3Azh57r$?8AlH%YwRPc&}NRTdvHqk={F3g6ojSYj8v*JMV z+?tE&rPuy}*RxGnbmBn4;LEveD%wCSA}VpLN0R!F=`^B|fyt3c-qK56sc;i0-t%u* ztDd?Vgq~<C8d9Jyr7e#Jsb)pnA5q!Tw%CsT<X=hOef!Tl26Ul8`ZdwUXA*6UKIq5K z;1OhxX^jl@F3}E2f^sXWHA;W>jBkt`b0@QtMV}ewu;y_{vSK#!;9jnmZRB?>Z-Ux8 zIW>YFj97r2Q;-Y2TrbnJNU{ia&*0W}HuwYKfw}=ZQ0(cA%oeNyjen(uBOLJnXl$MA ztMXRziKZqh<!8uVP<~2XAH@jNb*XP=6IBh(7{><;x7qA#WfO6|VZ|)J1c3iU>Z{~4 zO4@MFBGKu=AzJzQ|KKMdVi{nk7?z7lD@xMJ`$|#XM>ER0?KYxX(UBLxD{oPqa4Z)j z$K(Y)E$5?L68Mre1!Ic>mx26>;49tpmsBGK6y>4aswAKy%0tJ+)uEdt8<_d;NWm;J zjjj(gX@MPuMlGN$GE2`w=w@`($m-Mll<fu@X}sbJ8vQrp4%A2k0*K?+w+&f=sOa2) ziPzB&5t!EA*DwcWxNNR;PduBiwA_Xd{Xw<5m)2_1-yzfLxy{&-Hq{l1ipfi+DISZa zdU!|K_$3W{V%EJ)Kg#vrDdu+F<3nUelZlNUd?@`F2uN;Ofn`DNQ6?V~xk&0q=7d~m zI^BSDF!}wQZjg<e1-;QQp;6I?T4slN7T0(1frki%-;>4t$~CNA4S8PW1(lmBA5nR+ zUx$-n{#yA&@LV!Kj(}0wm8f*^%@?tG`4>RrIh{j!L|#TA-=ge2$|&9>=P0A2k@J*M zyh~o9>>bM9MOGe-au3}AK~9NK*3&@IEXmE6A!QsHlyVSR{l^^1VEjmgzZkzLv+*M_ zhI*BtBK%gz5yVIh*+ROZ|BV#b$jF^6LfA}Z8ai~F3EuDjODttS%_T~2AO%Foi-DV= zFk(SDeGGv_GSVaRH7rVXCJ8RZ#MNp36)I1sl6Rca{)j1(Exid_YQmN}Oxw|!*1ZT3 z&)_^E(6FLNT%XqHq@eALFxOL-^DEd~oFG>GQvX`>kdl`{_pRhxKoWQVFt((ZY~}OY zV3#j##Fdp<eNJ8rJcU~*@EKs~-WSXFq7gN7U458<8SE<qau4FGVZhf{5pftH6^$g- z5HS(u0G$GnLsvoC7{}*CEg;b*Gdjh_aR@W4J9bxn9C-DRsPe?*uL15Qks?wy$7xTx zQV6M((w$xmh|-a(Gb*7%3MRyDN-P2bQ)3J9+6&4?BO0nJKKx(NxU&FsVqo`uI^($K zN-86?ce?)>G(x!2^!C8ZB`;@i{*VN+Sg~SDyd~W|1L(`KZy;<pIqXV7h1hNU?uoD? zJ&L;98@`V#<k_3jZ>9c(x249maD%-5CmMH)9H=l2)f1cnKcX_&u<HSwGTT>Q#N4Ls z%B>CsXX#6hPq&i7{xE~KFH@W#SYh%hz~%y<yP$~i-C%HweFE+S^MMiCZ(xn0g@~(l zq@-=vR6NISOCO(hg80h<;g1hVl9WM|?X)@Ut1>UK;25#=)@XDxfiw8+Ye<YEEAhpI zO(#oNN6V8EFX*Wp_h*nB@TVfoe}nY{TPOvlVj!eL@FhNtFk2L1F0=dPCHfGy*}=i$ zLzpDNmLxio^h{*+y<XX)z8%V*(ZI<A-?=IXWeMpa{zcaupSh&E*yP&D9A!k8ByUd^ zC>x=S?yaP^LB#GvIRpUkRWXboUj=fZ)pyAt_REzwjt>$zd-`(sfV_ic(mG0I#LoB> zfy(+D4N(hK=sb2uC~y;pEUgDi_iitJa%Wjyqp77pgliPDSW@3)qmc*8_ttN(u2et0 zyB6hRy;WUZi;7A0!P1?dFGtx=R#)$!w~+Qixh3`6_m}TR7JXDhJR*p)ch;8fEw4n` zdvV#Hw*2+l{+gxxt9Rut;Yj*2eqrj(Fw&bM(#4}lM@&=Sq7=$+X@*PL24#XWa%^JL zM*^u##bM_kSqt&U&P6)c;0dxRxa8`u&p>My;VF%qkUVodi+^r>OqJ7r%?irAk%`mc xRh9Br(K7{~YMhd8sj`UmS!m!Xy=Yju!VDQg7{=sZFs&n5!y2((w=8S=e*t9qzgz$S literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/requirements.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/requirements.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2773e321b470ea04ebb59146fae14cc675586b9b GIT binary patch literal 3851 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 SG>a&&IWq-0W?B<w!TKKux!6Pi literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/specifiers.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/specifiers.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..14f817a0c105daabd34f56199964ed60c232f75c GIT binary patch literal 19794 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 F`ri*D$&mm6 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/utils.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/utils.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9d86ec66e85f25c348816f01a874af48b51107d6 GIT binary patch literal 459 zcmY*VyH3L}6!jxbqd<8Gej-9?s<I-4#NLH1P+3WAf?FpxcEY1#E5E|P!UuU};ukt$ zS3)XRy2tl@?)CX-6yJS~=N}M&Z?GfC*;h`@)Byz)3ednDHYi68&N1{cB!WC(!D2x1 z8s;Gl=-?gXLyB%d68^Y8kYIaQltzlaV}v(K>dr=#KXJolYY&v>ZAb3=w(6WeTZOkN z8PCrux6D@ji=AFOHAfCQuz(c4fi+s7HE=X&wt=Z*IU!Zi%9dA!;44NntJ#airZ4S4 z$Y-V#XoI$B*eB4jo3oi^U86F^Ra*93&~)<nP|C@aW@=fdni<*aiW%>@S$`gRVl9<A zQ$@8bYTnja-*I8a>eU|qqxVeverNxS0BLV0k&TJFwd*w_MEi{Px9PxvMVi@RB^$*B f)1eRhp6#wXu;)voi$>C3uuI=)eC;WUaEyNe^ig+` literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/version.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__/version.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..95eecbb0e5a4a319579ac064aaa91629ed5cd556 GIT binary patch literal 10569 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/_compat.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/_compat.py new file mode 100644 index 00000000..210bb80b --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/_compat.py @@ -0,0 +1,30 @@ +# 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 absolute_import, division, print_function + +import sys + + +PY2 = sys.version_info[0] == 2 +PY3 = sys.version_info[0] == 3 + +# flake8: noqa + +if PY3: + string_types = str, +else: + string_types = basestring, + + +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(meta): + def __new__(cls, name, this_bases, d): + return meta(name, bases, d) + return type.__new__(metaclass, 'temporary_class', (), {}) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/_structures.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/_structures.py new file mode 100644 index 00000000..ccc27861 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/_structures.py @@ -0,0 +1,68 @@ +# 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 absolute_import, division, print_function + + +class Infinity(object): + + def __repr__(self): + return "Infinity" + + def __hash__(self): + return hash(repr(self)) + + def __lt__(self, other): + return False + + def __le__(self, other): + return False + + def __eq__(self, other): + return isinstance(other, self.__class__) + + def __ne__(self, other): + return not isinstance(other, self.__class__) + + def __gt__(self, other): + return True + + def __ge__(self, other): + return True + + def __neg__(self): + return NegativeInfinity + +Infinity = Infinity() + + +class NegativeInfinity(object): + + def __repr__(self): + return "-Infinity" + + def __hash__(self): + return hash(repr(self)) + + def __lt__(self, other): + return True + + def __le__(self, other): + return True + + def __eq__(self, other): + return isinstance(other, self.__class__) + + def __ne__(self, other): + return not isinstance(other, self.__class__) + + def __gt__(self, other): + return False + + def __ge__(self, other): + return False + + def __neg__(self): + return Infinity + +NegativeInfinity = NegativeInfinity() diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/markers.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/markers.py new file mode 100644 index 00000000..892e578e --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/markers.py @@ -0,0 +1,301 @@ +# 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 absolute_import, division, print_function + +import operator +import os +import platform +import sys + +from pkg_resources.extern.pyparsing import ParseException, ParseResults, stringStart, stringEnd +from pkg_resources.extern.pyparsing import ZeroOrMore, Group, Forward, QuotedString +from pkg_resources.extern.pyparsing import Literal as L # noqa + +from ._compat import string_types +from .specifiers import Specifier, InvalidSpecifier + + +__all__ = [ + "InvalidMarker", "UndefinedComparison", "UndefinedEnvironmentName", + "Marker", "default_environment", +] + + +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 Node(object): + + def __init__(self, value): + self.value = value + + def __str__(self): + return str(self.value) + + def __repr__(self): + return "<{0}({1!r})>".format(self.__class__.__name__, str(self)) + + def serialize(self): + raise NotImplementedError + + +class Variable(Node): + + def serialize(self): + return str(self) + + +class Value(Node): + + def serialize(self): + return '"{0}"'.format(self) + + +class Op(Node): + + def serialize(self): + return str(self) + + +VARIABLE = ( + L("implementation_version") | + L("platform_python_implementation") | + L("implementation_name") | + L("python_full_version") | + L("platform_release") | + L("platform_version") | + L("platform_machine") | + L("platform_system") | + L("python_version") | + L("sys_platform") | + L("os_name") | + L("os.name") | # PEP-345 + L("sys.platform") | # PEP-345 + L("platform.version") | # PEP-345 + L("platform.machine") | # PEP-345 + L("platform.python_implementation") | # PEP-345 + L("python_implementation") | # undocumented setuptools legacy + L("extra") +) +ALIASES = { + 'os.name': 'os_name', + 'sys.platform': 'sys_platform', + 'platform.version': 'platform_version', + 'platform.machine': 'platform_machine', + 'platform.python_implementation': 'platform_python_implementation', + 'python_implementation': 'platform_python_implementation' +} +VARIABLE.setParseAction(lambda s, l, t: Variable(ALIASES.get(t[0], t[0]))) + +VERSION_CMP = ( + L("===") | + L("==") | + L(">=") | + L("<=") | + L("!=") | + L("~=") | + L(">") | + L("<") +) + +MARKER_OP = VERSION_CMP | L("not in") | L("in") +MARKER_OP.setParseAction(lambda s, l, t: Op(t[0])) + +MARKER_VALUE = QuotedString("'") | QuotedString('"') +MARKER_VALUE.setParseAction(lambda s, l, t: Value(t[0])) + +BOOLOP = L("and") | L("or") + +MARKER_VAR = VARIABLE | MARKER_VALUE + +MARKER_ITEM = Group(MARKER_VAR + MARKER_OP + MARKER_VAR) +MARKER_ITEM.setParseAction(lambda s, l, t: tuple(t[0])) + +LPAREN = L("(").suppress() +RPAREN = L(")").suppress() + +MARKER_EXPR = Forward() +MARKER_ATOM = MARKER_ITEM | Group(LPAREN + MARKER_EXPR + RPAREN) +MARKER_EXPR << MARKER_ATOM + ZeroOrMore(BOOLOP + MARKER_EXPR) + +MARKER = stringStart + MARKER_EXPR + stringEnd + + +def _coerce_parse_result(results): + if isinstance(results, ParseResults): + return [_coerce_parse_result(i) for i in results] + else: + return results + + +def _format_marker(marker, first=True): + assert isinstance(marker, (list, tuple, string_types)) + + # 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 = { + "in": lambda lhs, rhs: lhs in rhs, + "not in": lambda lhs, rhs: lhs not in rhs, + "<": operator.lt, + "<=": operator.le, + "==": operator.eq, + "!=": operator.ne, + ">=": operator.ge, + ">": operator.gt, +} + + +def _eval_op(lhs, op, rhs): + try: + spec = Specifier("".join([op.serialize(), rhs])) + except InvalidSpecifier: + pass + else: + return spec.contains(lhs) + + oper = _operators.get(op.serialize()) + if oper is None: + raise UndefinedComparison( + "Undefined {0!r} on {1!r} and {2!r}.".format(op, lhs, rhs) + ) + + return oper(lhs, rhs) + + +_undefined = object() + + +def _get_env(environment, name): + value = environment.get(name, _undefined) + + if value is _undefined: + raise UndefinedEnvironmentName( + "{0!r} does not exist in evaluation environment.".format(name) + ) + + return value + + +def _evaluate_markers(markers, environment): + groups = [[]] + + for marker in markers: + assert isinstance(marker, (list, tuple, string_types)) + + if isinstance(marker, list): + groups[-1].append(_evaluate_markers(marker, environment)) + elif isinstance(marker, tuple): + lhs, op, rhs = marker + + if isinstance(lhs, Variable): + lhs_value = _get_env(environment, lhs.value) + rhs_value = rhs.value + else: + lhs_value = lhs.value + rhs_value = _get_env(environment, rhs.value) + + groups[-1].append(_eval_op(lhs_value, op, rhs_value)) + else: + assert marker in ["and", "or"] + if marker == "or": + groups.append([]) + + return any(all(item) for item in groups) + + +def format_full_version(info): + version = '{0.major}.{0.minor}.{0.micro}'.format(info) + kind = info.releaselevel + if kind != 'final': + version += kind[0] + str(info.serial) + return version + + +def default_environment(): + if hasattr(sys, 'implementation'): + iver = format_full_version(sys.implementation.version) + implementation_name = sys.implementation.name + else: + iver = '0' + 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": platform.python_version()[:3], + "sys_platform": sys.platform, + } + + +class Marker(object): + + def __init__(self, marker): + try: + self._markers = _coerce_parse_result(MARKER.parseString(marker)) + except ParseException as e: + err_str = "Invalid marker: {0!r}, parse error at {1!r}".format( + marker, marker[e.loc:e.loc + 8]) + raise InvalidMarker(err_str) + + def __str__(self): + return _format_marker(self._markers) + + def __repr__(self): + return "<Marker({0!r})>".format(str(self)) + + def evaluate(self, environment=None): + """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 environment is determined from the current Python process. + """ + current_environment = default_environment() + if environment is not None: + current_environment.update(environment) + + return _evaluate_markers(self._markers, current_environment) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/requirements.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/requirements.py new file mode 100644 index 00000000..0c8c4a38 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/requirements.py @@ -0,0 +1,127 @@ +# 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 absolute_import, division, print_function + +import string +import re + +from pkg_resources.extern.pyparsing import stringStart, stringEnd, originalTextFor, ParseException +from pkg_resources.extern.pyparsing import ZeroOrMore, Word, Optional, Regex, Combine +from pkg_resources.extern.pyparsing import Literal as L # noqa +from pkg_resources.extern.six.moves.urllib import parse as urlparse + +from .markers import MARKER_EXPR, Marker +from .specifiers import LegacySpecifier, Specifier, SpecifierSet + + +class InvalidRequirement(ValueError): + """ + An invalid requirement was found, users should refer to PEP 508. + """ + + +ALPHANUM = Word(string.ascii_letters + string.digits) + +LBRACKET = L("[").suppress() +RBRACKET = L("]").suppress() +LPAREN = L("(").suppress() +RPAREN = L(")").suppress() +COMMA = L(",").suppress() +SEMICOLON = L(";").suppress() +AT = L("@").suppress() + +PUNCTUATION = Word("-_.") +IDENTIFIER_END = ALPHANUM | (ZeroOrMore(PUNCTUATION) + ALPHANUM) +IDENTIFIER = Combine(ALPHANUM + ZeroOrMore(IDENTIFIER_END)) + +NAME = IDENTIFIER("name") +EXTRA = IDENTIFIER + +URI = Regex(r'[^ ]+')("url") +URL = (AT + URI) + +EXTRAS_LIST = EXTRA + ZeroOrMore(COMMA + EXTRA) +EXTRAS = (LBRACKET + Optional(EXTRAS_LIST) + RBRACKET)("extras") + +VERSION_PEP440 = Regex(Specifier._regex_str, re.VERBOSE | re.IGNORECASE) +VERSION_LEGACY = Regex(LegacySpecifier._regex_str, re.VERBOSE | re.IGNORECASE) + +VERSION_ONE = VERSION_PEP440 ^ VERSION_LEGACY +VERSION_MANY = Combine(VERSION_ONE + ZeroOrMore(COMMA + VERSION_ONE), + joinString=",", adjacent=False)("_raw_spec") +_VERSION_SPEC = Optional(((LPAREN + VERSION_MANY + RPAREN) | VERSION_MANY)) +_VERSION_SPEC.setParseAction(lambda s, l, t: t._raw_spec or '') + +VERSION_SPEC = originalTextFor(_VERSION_SPEC)("specifier") +VERSION_SPEC.setParseAction(lambda s, l, t: t[1]) + +MARKER_EXPR = originalTextFor(MARKER_EXPR())("marker") +MARKER_EXPR.setParseAction( + lambda s, l, t: Marker(s[t._original_start:t._original_end]) +) +MARKER_SEPERATOR = SEMICOLON +MARKER = MARKER_SEPERATOR + MARKER_EXPR + +VERSION_AND_MARKER = VERSION_SPEC + Optional(MARKER) +URL_AND_MARKER = URL + Optional(MARKER) + +NAMED_REQUIREMENT = \ + NAME + Optional(EXTRAS) + (URL_AND_MARKER | VERSION_AND_MARKER) + +REQUIREMENT = stringStart + NAMED_REQUIREMENT + stringEnd + + +class Requirement(object): + """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): + try: + req = REQUIREMENT.parseString(requirement_string) + except ParseException as e: + raise InvalidRequirement( + "Invalid requirement, parse error at \"{0!r}\"".format( + requirement_string[e.loc:e.loc + 8])) + + self.name = req.name + if req.url: + parsed_url = urlparse.urlparse(req.url) + if not (parsed_url.scheme and parsed_url.netloc) or ( + not parsed_url.scheme and not parsed_url.netloc): + raise InvalidRequirement("Invalid URL given") + self.url = req.url + else: + self.url = None + self.extras = set(req.extras.asList() if req.extras else []) + self.specifier = SpecifierSet(req.specifier) + self.marker = req.marker if req.marker else None + + def __str__(self): + parts = [self.name] + + if self.extras: + parts.append("[{0}]".format(",".join(sorted(self.extras)))) + + if self.specifier: + parts.append(str(self.specifier)) + + if self.url: + parts.append("@ {0}".format(self.url)) + + if self.marker: + parts.append("; {0}".format(self.marker)) + + return "".join(parts) + + def __repr__(self): + return "<Requirement({0!r})>".format(str(self)) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/specifiers.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/specifiers.py new file mode 100644 index 00000000..7f5a76cf --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/specifiers.py @@ -0,0 +1,774 @@ +# 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 absolute_import, division, print_function + +import abc +import functools +import itertools +import re + +from ._compat import string_types, with_metaclass +from .version import Version, LegacyVersion, parse + + +class InvalidSpecifier(ValueError): + """ + An invalid specifier was found, users should refer to PEP 440. + """ + + +class BaseSpecifier(with_metaclass(abc.ABCMeta, object)): + + @abc.abstractmethod + def __str__(self): + """ + Returns the str representation of this Specifier like object. This + should be representative of the Specifier itself. + """ + + @abc.abstractmethod + def __hash__(self): + """ + Returns a hash value for this Specifier like object. + """ + + @abc.abstractmethod + def __eq__(self, other): + """ + Returns a boolean representing whether or not the two Specifier like + objects are equal. + """ + + @abc.abstractmethod + def __ne__(self, other): + """ + Returns a boolean representing whether or not the two Specifier like + objects are not equal. + """ + + @abc.abstractproperty + def prereleases(self): + """ + Returns whether or not pre-releases as a whole are allowed by this + specifier. + """ + + @prereleases.setter + def prereleases(self, value): + """ + Sets whether or not pre-releases as a whole are allowed by this + specifier. + """ + + @abc.abstractmethod + def contains(self, item, prereleases=None): + """ + Determines if the given item is contained within this specifier. + """ + + @abc.abstractmethod + def filter(self, iterable, prereleases=None): + """ + Takes an iterable of items and filters them so that only items which + are contained within this specifier are allowed in it. + """ + + +class _IndividualSpecifier(BaseSpecifier): + + _operators = {} + + def __init__(self, spec="", prereleases=None): + match = self._regex.search(spec) + if not match: + raise InvalidSpecifier("Invalid specifier: '{0}'".format(spec)) + + self._spec = ( + match.group("operator").strip(), + match.group("version").strip(), + ) + + # Store whether or not this Specifier should accept prereleases + self._prereleases = prereleases + + def __repr__(self): + pre = ( + ", prereleases={0!r}".format(self.prereleases) + if self._prereleases is not None + else "" + ) + + return "<{0}({1!r}{2})>".format( + self.__class__.__name__, + str(self), + pre, + ) + + def __str__(self): + return "{0}{1}".format(*self._spec) + + def __hash__(self): + return hash(self._spec) + + def __eq__(self, other): + if isinstance(other, string_types): + try: + other = self.__class__(other) + except InvalidSpecifier: + return NotImplemented + elif not isinstance(other, self.__class__): + return NotImplemented + + return self._spec == other._spec + + def __ne__(self, other): + if isinstance(other, string_types): + try: + other = self.__class__(other) + except InvalidSpecifier: + return NotImplemented + elif not isinstance(other, self.__class__): + return NotImplemented + + return self._spec != other._spec + + def _get_operator(self, op): + return getattr(self, "_compare_{0}".format(self._operators[op])) + + def _coerce_version(self, version): + if not isinstance(version, (LegacyVersion, Version)): + version = parse(version) + return version + + @property + def operator(self): + return self._spec[0] + + @property + def version(self): + return self._spec[1] + + @property + def prereleases(self): + return self._prereleases + + @prereleases.setter + def prereleases(self, value): + self._prereleases = value + + def __contains__(self, item): + return self.contains(item) + + def contains(self, item, prereleases=None): + # Determine if prereleases are to be allowed or not. + if prereleases is None: + prereleases = self.prereleases + + # Normalize item to a Version or LegacyVersion, this allows us to have + # a shortcut for ``"2.0" in Specifier(">=2") + item = self._coerce_version(item) + + # Determine if we should be supporting prereleases in this specifier + # or not, if we do not support prereleases than we can short circuit + # logic if this version is a prereleases. + if item.is_prerelease and not prereleases: + return False + + # Actually do the comparison to determine if this item is contained + # within this Specifier or not. + return self._get_operator(self.operator)(item, self.version) + + def filter(self, iterable, prereleases=None): + yielded = False + found_prereleases = [] + + kw = {"prereleases": prereleases if prereleases is not None else True} + + # Attempt to iterate over all the values in the iterable and if any of + # them match, yield them. + for version in iterable: + parsed_version = self._coerce_version(version) + + if self.contains(parsed_version, **kw): + # If our version is a prerelease, and we were not set to allow + # prereleases, then we'll store it for later incase nothing + # else matches this specifier. + if (parsed_version.is_prerelease and not + (prereleases or self.prereleases)): + found_prereleases.append(version) + # Either this is not a prerelease, or we should have been + # accepting prereleases from the begining. + else: + yielded = True + yield version + + # Now that we've iterated over everything, determine if we've yielded + # any values, and if we have not and we have any prereleases stored up + # then we will go ahead and yield the prereleases. + if not yielded and found_prereleases: + for version in found_prereleases: + yield version + + +class LegacySpecifier(_IndividualSpecifier): + + _regex_str = ( + r""" + (?P<operator>(==|!=|<=|>=|<|>)) + \s* + (?P<version> + [^,;\s)]* # Since this is a "legacy" specifier, and the version + # string can be just about anything, we match everything + # except for whitespace, a semi-colon for marker support, + # a closing paren since versions can be enclosed in + # them, and a comma since it's a version separator. + ) + """ + ) + + _regex = re.compile( + r"^\s*" + _regex_str + r"\s*$", re.VERBOSE | re.IGNORECASE) + + _operators = { + "==": "equal", + "!=": "not_equal", + "<=": "less_than_equal", + ">=": "greater_than_equal", + "<": "less_than", + ">": "greater_than", + } + + def _coerce_version(self, version): + if not isinstance(version, LegacyVersion): + version = LegacyVersion(str(version)) + return version + + def _compare_equal(self, prospective, spec): + return prospective == self._coerce_version(spec) + + def _compare_not_equal(self, prospective, spec): + return prospective != self._coerce_version(spec) + + def _compare_less_than_equal(self, prospective, spec): + return prospective <= self._coerce_version(spec) + + def _compare_greater_than_equal(self, prospective, spec): + return prospective >= self._coerce_version(spec) + + def _compare_less_than(self, prospective, spec): + return prospective < self._coerce_version(spec) + + def _compare_greater_than(self, prospective, spec): + return prospective > self._coerce_version(spec) + + +def _require_version_compare(fn): + @functools.wraps(fn) + def wrapped(self, prospective, spec): + if not isinstance(prospective, Version): + return False + return fn(self, prospective, spec) + return wrapped + + +class Specifier(_IndividualSpecifier): + + _regex_str = ( + r""" + (?P<operator>(~=|==|!=|<=|>=|<|>|===)) + (?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]* # We just match everything, except for whitespace + # since we are only testing for strict identity. + ) + | + (?: + # 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 + (?: # pre release + [-_\.]? + (a|b|c|rc|alpha|beta|pre|preview) + [-_\.]? + [0-9]* + )? + (?: # post release + (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*) + )? + + # You cannot use a wild card and a dev or local version + # together so group them with a | and make them optional. + (?: + (?:[-_\.]?dev[-_\.]?[0-9]*)? # dev release + (?:\+[a-z0-9]+(?:[-_\.][a-z0-9]+)*)? # local + | + \.\* # Wild card syntax of .* + )? + ) + | + (?: + # 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 + [-_\.]? + (a|b|c|rc|alpha|beta|pre|preview) + [-_\.]? + [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 + [-_\.]? + (a|b|c|rc|alpha|beta|pre|preview) + [-_\.]? + [0-9]* + )? + (?: # post release + (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*) + )? + (?:[-_\.]?dev[-_\.]?[0-9]*)? # dev release + ) + ) + """ + ) + + _regex = re.compile( + r"^\s*" + _regex_str + r"\s*$", re.VERBOSE | re.IGNORECASE) + + _operators = { + "~=": "compatible", + "==": "equal", + "!=": "not_equal", + "<=": "less_than_equal", + ">=": "greater_than_equal", + "<": "less_than", + ">": "greater_than", + "===": "arbitrary", + } + + @_require_version_compare + def _compare_compatible(self, prospective, spec): + # 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 post and dev releases and we want to treat the pre-release as + # it's own separate segment. + prefix = ".".join( + list( + itertools.takewhile( + lambda x: (not x.startswith("post") and not + x.startswith("dev")), + _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)) + + @_require_version_compare + def _compare_equal(self, prospective, spec): + # We need special logic to handle prefix matching + if spec.endswith(".*"): + # In the case of prefix matching we want to ignore local segment. + prospective = Version(prospective.public) + # Split the spec out by dots, and pretend that there is an implicit + # dot in between a release segment and a pre-release segment. + spec = _version_split(spec[:-2]) # Remove the trailing .* + + # Split the prospective version out by dots, and pretend that there + # is an implicit dot in between a release segment and a pre-release + # segment. + prospective = _version_split(str(prospective)) + + # 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. + prospective = prospective[:len(spec)] + + # Pad out our two sides with zeros so that they both equal the same + # length. + spec, prospective = _pad_version(spec, prospective) + else: + # Convert our spec string into a Version + 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.local: + prospective = Version(prospective.public) + + return prospective == spec + + @_require_version_compare + def _compare_not_equal(self, prospective, spec): + return not self._compare_equal(prospective, spec) + + @_require_version_compare + def _compare_less_than_equal(self, prospective, spec): + return prospective <= Version(spec) + + @_require_version_compare + def _compare_greater_than_equal(self, prospective, spec): + return prospective >= Version(spec) + + @_require_version_compare + def _compare_less_than(self, prospective, spec): + # Convert our spec to a Version instance, since we'll want to work with + # it as a version. + spec = Version(spec) + + # 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: + if Version(prospective.base_version) == Version(spec.base_version): + 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 + + @_require_version_compare + def _compare_greater_than(self, prospective, spec): + # Convert our spec to a Version instance, since we'll want to work with + # it as a version. + spec = Version(spec) + + # 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: + if Version(prospective.base_version) == Version(spec.base_version): + return False + + # Ensure that we do not allow a local version of the version mentioned + # in the specifier, which is techincally greater than, to match. + if prospective.local is not None: + if Version(prospective.base_version) == Version(spec.base_version): + 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, spec): + return str(prospective).lower() == str(spec).lower() + + @property + def prereleases(self): + # 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 + + # Look at all of our specifiers and determine if they are inclusive + # operators, and if they are if they are including an explicit + # prerelease. + operator, version = self._spec + if operator in ["==", ">=", "<=", "~=", "==="]: + # The == specifier can include a trailing .*, if it does we + # want to remove before parsing. + if operator == "==" and version.endswith(".*"): + version = version[:-2] + + # Parse the version, and if it is a pre-release than this + # specifier allows pre-releases. + if parse(version).is_prerelease: + return True + + return False + + @prereleases.setter + def prereleases(self, value): + self._prereleases = value + + +_prefix_regex = re.compile(r"^([0-9]+)((?:a|b|c|rc)[0-9]+)$") + + +def _version_split(version): + result = [] + for item in version.split("."): + match = _prefix_regex.search(item) + if match: + result.extend(match.groups()) + else: + result.append(item) + return result + + +def _pad_version(left, right): + 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(*left_split)), + list(itertools.chain(*right_split)), + ) + + +class SpecifierSet(BaseSpecifier): + + def __init__(self, specifiers="", prereleases=None): + # Split on , to break each indidivual specifier into it's own item, and + # strip each item to remove leading/trailing whitespace. + specifiers = [s.strip() for s in specifiers.split(",") if s.strip()] + + # Parsed each individual specifier, attempting first to make it a + # Specifier and falling back to a LegacySpecifier. + parsed = set() + for specifier in specifiers: + try: + parsed.add(Specifier(specifier)) + except InvalidSpecifier: + parsed.add(LegacySpecifier(specifier)) + + # Turn our parsed specifiers into a frozen set and save them for later. + self._specs = frozenset(parsed) + + # Store our prereleases value so we can use it later to determine if + # we accept prereleases or not. + self._prereleases = prereleases + + def __repr__(self): + pre = ( + ", prereleases={0!r}".format(self.prereleases) + if self._prereleases is not None + else "" + ) + + return "<SpecifierSet({0!r}{1})>".format(str(self), pre) + + def __str__(self): + return ",".join(sorted(str(s) for s in self._specs)) + + def __hash__(self): + return hash(self._specs) + + def __and__(self, other): + if isinstance(other, string_types): + 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: + specifier._prereleases = self._prereleases + elif 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): + if isinstance(other, string_types): + other = SpecifierSet(other) + elif isinstance(other, _IndividualSpecifier): + other = SpecifierSet(str(other)) + elif not isinstance(other, SpecifierSet): + return NotImplemented + + return self._specs == other._specs + + def __ne__(self, other): + if isinstance(other, string_types): + other = SpecifierSet(other) + elif isinstance(other, _IndividualSpecifier): + other = SpecifierSet(str(other)) + elif not isinstance(other, SpecifierSet): + return NotImplemented + + return self._specs != other._specs + + def __len__(self): + return len(self._specs) + + def __iter__(self): + return iter(self._specs) + + @property + def prereleases(self): + # 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. + return any(s.prereleases for s in self._specs) + + @prereleases.setter + def prereleases(self, value): + self._prereleases = value + + def __contains__(self, item): + return self.contains(item) + + def contains(self, item, prereleases=None): + # Ensure that our item is a Version or LegacyVersion instance. + if not isinstance(item, (LegacyVersion, Version)): + item = parse(item) + + # 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: + prereleases = self.prereleases + + # We can determine if we're going to allow pre-releases by looking to + # see if any of the underlying items supports them. If none of them do + # and this item is a pre-release then we do not allow it and we can + # short circuit that here. + # Note: This means that 1.0.dev1 would not be contained in something + # like >=1.0.devabc however it would be in >=1.0.debabc,>0.0.dev0 + if not prereleases and item.is_prerelease: + return False + + # We simply dispatch to the underlying specs here to make sure that the + # given version is contained within all of them. + # Note: This use of all() here means that an empty set of specifiers + # will always return True, this is an explicit design decision. + return all( + s.contains(item, prereleases=prereleases) + for s in self._specs + ) + + def filter(self, iterable, prereleases=None): + # 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: + 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: + for spec in self._specs: + iterable = spec.filter(iterable, prereleases=bool(prereleases)) + return iterable + # If we do not have any specifiers, then we need to have a rough filter + # which will filter out any pre-releases, unless there are no final + # releases, and which will filter out LegacyVersion in general. + else: + filtered = [] + found_prereleases = [] + + for item in iterable: + # Ensure that we some kind of Version class for this item. + if not isinstance(item, (LegacyVersion, Version)): + parsed_version = parse(item) + else: + parsed_version = item + + # Filter out any item which is parsed as a LegacyVersion + if isinstance(parsed_version, LegacyVersion): + continue + + # Store any item which is a pre-release for later unless we've + # already found a final version or we are accepting prereleases + if parsed_version.is_prerelease and not prereleases: + if not filtered: + found_prereleases.append(item) + else: + filtered.append(item) + + # If we've found no items except for pre-releases, then we'll go + # ahead and use the pre-releases + if not filtered and found_prereleases and prereleases is None: + return found_prereleases + + return filtered diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/utils.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/utils.py new file mode 100644 index 00000000..942387ce --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/utils.py @@ -0,0 +1,14 @@ +# 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 absolute_import, division, print_function + +import re + + +_canonicalize_regex = re.compile(r"[-_.]+") + + +def canonicalize_name(name): + # This is taken from PEP 503. + return _canonicalize_regex.sub("-", name).lower() diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/version.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/version.py new file mode 100644 index 00000000..83b5ee8c --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/version.py @@ -0,0 +1,393 @@ +# 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 absolute_import, division, print_function + +import collections +import itertools +import re + +from ._structures import Infinity + + +__all__ = [ + "parse", "Version", "LegacyVersion", "InvalidVersion", "VERSION_PATTERN" +] + + +_Version = collections.namedtuple( + "_Version", + ["epoch", "release", "dev", "pre", "post", "local"], +) + + +def parse(version): + """ + Parse the given version string and return either a :class:`Version` object + or a :class:`LegacyVersion` object depending on if the given version is + a valid PEP 440 version or a legacy version. + """ + try: + return Version(version) + except InvalidVersion: + return LegacyVersion(version) + + +class InvalidVersion(ValueError): + """ + An invalid version was found, users should refer to PEP 440. + """ + + +class _BaseVersion(object): + + def __hash__(self): + return hash(self._key) + + def __lt__(self, other): + return self._compare(other, lambda s, o: s < o) + + def __le__(self, other): + return self._compare(other, lambda s, o: s <= o) + + def __eq__(self, other): + return self._compare(other, lambda s, o: s == o) + + def __ge__(self, other): + return self._compare(other, lambda s, o: s >= o) + + def __gt__(self, other): + return self._compare(other, lambda s, o: s > o) + + def __ne__(self, other): + return self._compare(other, lambda s, o: s != o) + + def _compare(self, other, method): + if not isinstance(other, _BaseVersion): + return NotImplemented + + return method(self._key, other._key) + + +class LegacyVersion(_BaseVersion): + + def __init__(self, version): + self._version = str(version) + self._key = _legacy_cmpkey(self._version) + + def __str__(self): + return self._version + + def __repr__(self): + return "<LegacyVersion({0})>".format(repr(str(self))) + + @property + def public(self): + return self._version + + @property + def base_version(self): + return self._version + + @property + def local(self): + return None + + @property + def is_prerelease(self): + return False + + @property + def is_postrelease(self): + return False + + +_legacy_version_component_re = re.compile( + r"(\d+ | [a-z]+ | \.| -)", re.VERBOSE, +) + +_legacy_version_replacement_map = { + "pre": "c", "preview": "c", "-": "final-", "rc": "c", "dev": "@", +} + + +def _parse_version_parts(s): + for part in _legacy_version_component_re.split(s): + part = _legacy_version_replacement_map.get(part, part) + + if not part or part == ".": + continue + + if part[:1] in "0123456789": + # pad for numeric comparison + yield part.zfill(8) + else: + yield "*" + part + + # ensure that alpha/beta/candidate are before final + yield "*final" + + +def _legacy_cmpkey(version): + # We hardcode an epoch of -1 here. A PEP 440 version can only have a epoch + # greater than or equal to 0. This will effectively put the LegacyVersion, + # which uses the defacto standard originally implemented by setuptools, + # as before all PEP 440 versions. + epoch = -1 + + # This scheme is taken from pkg_resources.parse_version setuptools prior to + # it's adoption of the packaging library. + parts = [] + for part in _parse_version_parts(version.lower()): + if part.startswith("*"): + # remove "-" before a prerelease tag + if part < "*final": + while parts and parts[-1] == "*final-": + parts.pop() + + # remove trailing zeros from each series of numeric parts + while parts and parts[-1] == "00000000": + parts.pop() + + parts.append(part) + parts = tuple(parts) + + return epoch, parts + +# Deliberately not anchored to the start and end of the string, to make it +# easier for 3rd party code to reuse +VERSION_PATTERN = r""" + v? + (?: + (?:(?P<epoch>[0-9]+)!)? # epoch + (?P<release>[0-9]+(?:\.[0-9]+)*) # release segment + (?P<pre> # pre-release + [-_\.]? + (?P<pre_l>(a|b|c|rc|alpha|beta|pre|preview)) + [-_\.]? + (?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>[a-z0-9]+(?:[-_\.][a-z0-9]+)*))? # local version +""" + + +class Version(_BaseVersion): + + _regex = re.compile( + r"^\s*" + VERSION_PATTERN + r"\s*$", + re.VERBOSE | re.IGNORECASE, + ) + + def __init__(self, version): + # Validate the version and parse it into pieces + match = self._regex.search(version) + if not match: + raise InvalidVersion("Invalid version: '{0}'".format(version)) + + # Store the parsed out pieces of the version + self._version = _Version( + epoch=int(match.group("epoch")) if match.group("epoch") else 0, + release=tuple(int(i) for i in match.group("release").split(".")), + pre=_parse_letter_version( + match.group("pre_l"), + match.group("pre_n"), + ), + post=_parse_letter_version( + match.group("post_l"), + match.group("post_n1") or match.group("post_n2"), + ), + dev=_parse_letter_version( + match.group("dev_l"), + match.group("dev_n"), + ), + local=_parse_local_version(match.group("local")), + ) + + # Generate a key which will be used for sorting + self._key = _cmpkey( + self._version.epoch, + self._version.release, + self._version.pre, + self._version.post, + self._version.dev, + self._version.local, + ) + + def __repr__(self): + return "<Version({0})>".format(repr(str(self))) + + def __str__(self): + parts = [] + + # Epoch + if self._version.epoch != 0: + parts.append("{0}!".format(self._version.epoch)) + + # Release segment + parts.append(".".join(str(x) for x in self._version.release)) + + # Pre-release + if self._version.pre is not None: + parts.append("".join(str(x) for x in self._version.pre)) + + # Post-release + if self._version.post is not None: + parts.append(".post{0}".format(self._version.post[1])) + + # Development release + if self._version.dev is not None: + parts.append(".dev{0}".format(self._version.dev[1])) + + # Local version segment + if self._version.local is not None: + parts.append( + "+{0}".format(".".join(str(x) for x in self._version.local)) + ) + + return "".join(parts) + + @property + def public(self): + return str(self).split("+", 1)[0] + + @property + def base_version(self): + parts = [] + + # Epoch + if self._version.epoch != 0: + parts.append("{0}!".format(self._version.epoch)) + + # Release segment + parts.append(".".join(str(x) for x in self._version.release)) + + return "".join(parts) + + @property + def local(self): + version_string = str(self) + if "+" in version_string: + return version_string.split("+", 1)[1] + + @property + def is_prerelease(self): + return bool(self._version.dev or self._version.pre) + + @property + def is_postrelease(self): + return bool(self._version.post) + + +def _parse_letter_version(letter, number): + if letter: + # We consider there to be an implicit 0 in a pre-release if there is + # not a numeral associated with it. + if number is None: + number = 0 + + # 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. + if letter == "alpha": + letter = "a" + elif letter == "beta": + letter = "b" + elif letter in ["c", "pre", "preview"]: + letter = "rc" + elif letter in ["rev", "r"]: + letter = "post" + + return letter, int(number) + if not letter and 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) + letter = "post" + + return letter, int(number) + + +_local_version_seperators = re.compile(r"[\._-]") + + +def _parse_local_version(local): + """ + 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_seperators.split(local) + ) + + +def _cmpkey(epoch, release, pre, post, dev, local): + # When we compare a release version, we want to compare it with all of the + # trailing zeros removed. So we'll use a reverse the list, drop all the now + # leading zeros until we come to something non zero, then take the rest + # re-reverse it back into the correct order and make it a tuple and use + # that for our sorting key. + release = tuple( + reversed(list( + itertools.dropwhile( + lambda x: x == 0, + reversed(release), + ) + )) + ) + + # 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 = -Infinity + # Versions without a pre-release (except as noted above) should sort after + # those with one. + elif pre is None: + pre = Infinity + + # Versions without a post segment should sort before those with one. + if post is None: + post = -Infinity + + # Versions without a development segment should sort after those with one. + if dev is None: + dev = Infinity + + if local is None: + # Versions without a local segment should sort before those with one. + local = -Infinity + 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 (-Infinity, i) + for i in local + ) + + return epoch, release, pre, post, dev, local diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/pyparsing.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/pyparsing.py new file mode 100644 index 00000000..38a8d2f5 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/pyparsing.py @@ -0,0 +1,5696 @@ +# module pyparsing.py +# +# Copyright (c) 2003-2016 Paul T. McGuire +# +# 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. +# + +__doc__ = \ +""" +pyparsing module - Classes and methods to define and execute parsing grammars + +The pyparsing module is an alternative approach to creating and executing simple grammars, +vs. the traditional lex/yacc approach, or the use of regular expressions. With pyparsing, you +don't need to learn a new syntax for defining grammars or matching expressions - the parsing module +provides a library of classes that you use to construct the grammar directly in Python. + +Here is a program to parse "Hello, World!" (or any greeting of the form +C{"<salutation>, <addressee>!"}), built up using L{Word}, L{Literal}, and L{And} elements +(L{'+'<ParserElement.__add__>} operator gives L{And} expressions, strings are auto-converted to +L{Literal} expressions):: + + from pyparsing import Word, alphas + + # define grammar of a greeting + greet = Word(alphas) + "," + Word(alphas) + "!" + + hello = "Hello, World!" + print (hello, "->", greet.parseString(hello)) + +The program outputs the following:: + + Hello, World! -> ['Hello', ',', 'World', '!'] + +The Python representation of the grammar is quite readable, owing to the self-explanatory +class names, and the use of '+', '|' and '^' operators. + +The L{ParseResults} object returned from L{ParserElement.parseString<ParserElement.parseString>} can be accessed as a nested list, a dictionary, or an +object with named attributes. + +The pyparsing module handles some of the problems that are typically vexing when writing text parsers: + - extra or missing whitespace (the above program will also handle "Hello,World!", "Hello , World !", etc.) + - quoted strings + - embedded comments +""" + +__version__ = "2.1.10" +__versionTime__ = "07 Oct 2016 01:31 UTC" +__author__ = "Paul McGuire <ptmcg@users.sourceforge.net>" + +import string +from weakref import ref as wkref +import copy +import sys +import warnings +import re +import sre_constants +import collections +import pprint +import traceback +import types +from datetime import datetime + +try: + from _thread import RLock +except ImportError: + from threading import RLock + +try: + from collections import OrderedDict as _OrderedDict +except ImportError: + try: + from ordereddict import OrderedDict as _OrderedDict + except ImportError: + _OrderedDict = None + +#~ sys.stderr.write( "testing pyparsing module, version %s, %s\n" % (__version__,__versionTime__ ) ) + +__all__ = [ +'And', 'CaselessKeyword', 'CaselessLiteral', 'CharsNotIn', 'Combine', 'Dict', 'Each', 'Empty', +'FollowedBy', 'Forward', 'GoToColumn', 'Group', 'Keyword', 'LineEnd', 'LineStart', 'Literal', +'MatchFirst', 'NoMatch', 'NotAny', 'OneOrMore', 'OnlyOnce', 'Optional', 'Or', +'ParseBaseException', 'ParseElementEnhance', 'ParseException', 'ParseExpression', 'ParseFatalException', +'ParseResults', 'ParseSyntaxException', 'ParserElement', 'QuotedString', 'RecursiveGrammarException', +'Regex', 'SkipTo', 'StringEnd', 'StringStart', 'Suppress', 'Token', 'TokenConverter', +'White', 'Word', 'WordEnd', 'WordStart', 'ZeroOrMore', +'alphanums', 'alphas', 'alphas8bit', 'anyCloseTag', 'anyOpenTag', 'cStyleComment', 'col', +'commaSeparatedList', 'commonHTMLEntity', 'countedArray', 'cppStyleComment', 'dblQuotedString', +'dblSlashComment', 'delimitedList', 'dictOf', 'downcaseTokens', 'empty', 'hexnums', +'htmlComment', 'javaStyleComment', 'line', 'lineEnd', 'lineStart', 'lineno', +'makeHTMLTags', 'makeXMLTags', 'matchOnlyAtCol', 'matchPreviousExpr', 'matchPreviousLiteral', +'nestedExpr', 'nullDebugAction', 'nums', 'oneOf', 'opAssoc', 'operatorPrecedence', 'printables', +'punc8bit', 'pythonStyleComment', 'quotedString', 'removeQuotes', 'replaceHTMLEntity', +'replaceWith', 'restOfLine', 'sglQuotedString', 'srange', 'stringEnd', +'stringStart', 'traceParseAction', 'unicodeString', 'upcaseTokens', 'withAttribute', +'indentedBlock', 'originalTextFor', 'ungroup', 'infixNotation','locatedExpr', 'withClass', +'CloseMatch', 'tokenMap', 'pyparsing_common', +] + +system_version = tuple(sys.version_info)[:3] +PY_3 = system_version[0] == 3 +if PY_3: + _MAX_INT = sys.maxsize + basestring = str + unichr = chr + _ustr = str + + # build list of single arg builtins, that can be used as parse actions + singleArgBuiltins = [sum, len, sorted, reversed, list, tuple, set, any, all, min, max] + +else: + _MAX_INT = sys.maxint + range = xrange + + def _ustr(obj): + """Drop-in replacement for str(obj) that tries to be Unicode friendly. It first tries + str(obj). If that fails with a UnicodeEncodeError, then it tries unicode(obj). It + then < returns the unicode object | encodes it with the default encoding | ... >. + """ + if isinstance(obj,unicode): + return obj + + try: + # If this works, then _ustr(obj) has the same behaviour as str(obj), so + # it won't break any existing code. + return str(obj) + + except UnicodeEncodeError: + # Else encode it + ret = unicode(obj).encode(sys.getdefaultencoding(), 'xmlcharrefreplace') + xmlcharref = Regex(r'&#\d+;') + xmlcharref.setParseAction(lambda t: '\\u' + hex(int(t[0][2:-1]))[2:]) + return xmlcharref.transformString(ret) + + # build list of single arg builtins, tolerant of Python version, that can be used as parse actions + singleArgBuiltins = [] + import __builtin__ + for fname in "sum len sorted reversed list tuple set any all min max".split(): + try: + singleArgBuiltins.append(getattr(__builtin__,fname)) + except AttributeError: + continue + +_generatorType = type((y for y in range(1))) + +def _xml_escape(data): + """Escape &, <, >, ", ', etc. in a string of data.""" + + # ampersand must be replaced first + from_symbols = '&><"\'' + to_symbols = ('&'+s+';' for s in "amp gt lt quot apos".split()) + for from_,to_ in zip(from_symbols, to_symbols): + data = data.replace(from_, to_) + return data + +class _Constants(object): + pass + +alphas = string.ascii_uppercase + string.ascii_lowercase +nums = "0123456789" +hexnums = nums + "ABCDEFabcdef" +alphanums = alphas + nums +_bslash = chr(92) +printables = "".join(c for c in string.printable if c not in string.whitespace) + +class ParseBaseException(Exception): + """base exception class for all parsing runtime exceptions""" + # Performance tuning: we construct a *lot* of these, so keep this + # constructor as small and fast as possible + def __init__( self, pstr, loc=0, msg=None, elem=None ): + self.loc = loc + if msg is None: + self.msg = pstr + self.pstr = "" + else: + self.msg = msg + self.pstr = pstr + self.parserElement = elem + self.args = (pstr, loc, msg) + + @classmethod + def _from_exception(cls, pe): + """ + internal factory method to simplify creating one type of ParseException + from another - avoids having __init__ signature conflicts among subclasses + """ + return cls(pe.pstr, pe.loc, pe.msg, pe.parserElement) + + def __getattr__( self, aname ): + """supported attributes by name are: + - lineno - returns the line number of the exception text + - col - returns the column number of the exception text + - line - returns the line containing the exception text + """ + if( aname == "lineno" ): + return lineno( self.loc, self.pstr ) + elif( aname in ("col", "column") ): + return col( self.loc, self.pstr ) + elif( aname == "line" ): + return line( self.loc, self.pstr ) + else: + raise AttributeError(aname) + + def __str__( self ): + return "%s (at char %d), (line:%d, col:%d)" % \ + ( self.msg, self.loc, self.lineno, self.column ) + def __repr__( self ): + return _ustr(self) + def markInputline( self, markerString = ">!<" ): + """Extracts the exception line from the input string, and marks + the location of the exception with a special symbol. + """ + line_str = self.line + line_column = self.column - 1 + if markerString: + line_str = "".join((line_str[:line_column], + markerString, line_str[line_column:])) + return line_str.strip() + def __dir__(self): + return "lineno col line".split() + dir(type(self)) + +class ParseException(ParseBaseException): + """ + Exception thrown when parse expressions don't match class; + supported attributes by name are: + - lineno - returns the line number of the exception text + - col - returns the column number of the exception text + - line - returns the line containing the exception text + + Example:: + try: + Word(nums).setName("integer").parseString("ABC") + except ParseException as pe: + print(pe) + print("column: {}".format(pe.col)) + + prints:: + Expected integer (at char 0), (line:1, col:1) + column: 1 + """ + pass + +class ParseFatalException(ParseBaseException): + """user-throwable exception thrown when inconsistent parse content + is found; stops all parsing immediately""" + pass + +class ParseSyntaxException(ParseFatalException): + """just like L{ParseFatalException}, but thrown internally when an + L{ErrorStop<And._ErrorStop>} ('-' operator) indicates that parsing is to stop + immediately because an unbacktrackable syntax error has been found""" + pass + +#~ class ReparseException(ParseBaseException): + #~ """Experimental class - parse actions can raise this exception to cause + #~ pyparsing to reparse the input string: + #~ - with a modified input string, and/or + #~ - with a modified start location + #~ Set the values of the ReparseException in the constructor, and raise the + #~ exception in a parse action to cause pyparsing to use the new string/location. + #~ Setting the values as None causes no change to be made. + #~ """ + #~ def __init_( self, newstring, restartLoc ): + #~ self.newParseText = newstring + #~ self.reparseLoc = restartLoc + +class RecursiveGrammarException(Exception): + """exception thrown by L{ParserElement.validate} if the grammar could be improperly recursive""" + def __init__( self, parseElementList ): + self.parseElementTrace = parseElementList + + def __str__( self ): + return "RecursiveGrammarException: %s" % self.parseElementTrace + +class _ParseResultsWithOffset(object): + def __init__(self,p1,p2): + self.tup = (p1,p2) + def __getitem__(self,i): + return self.tup[i] + def __repr__(self): + return repr(self.tup[0]) + def setOffset(self,i): + self.tup = (self.tup[0],i) + +class ParseResults(object): + """ + Structured parse results, to provide multiple means of access to the parsed data: + - as a list (C{len(results)}) + - by list index (C{results[0], results[1]}, etc.) + - by attribute (C{results.<resultsName>} - see L{ParserElement.setResultsName}) + + Example:: + integer = Word(nums) + date_str = (integer.setResultsName("year") + '/' + + integer.setResultsName("month") + '/' + + integer.setResultsName("day")) + # equivalent form: + # date_str = integer("year") + '/' + integer("month") + '/' + integer("day") + + # parseString returns a ParseResults object + result = date_str.parseString("1999/12/31") + + def test(s, fn=repr): + print("%s -> %s" % (s, fn(eval(s)))) + test("list(result)") + test("result[0]") + test("result['month']") + test("result.day") + test("'month' in result") + test("'minutes' in result") + test("result.dump()", str) + prints:: + list(result) -> ['1999', '/', '12', '/', '31'] + result[0] -> '1999' + result['month'] -> '12' + result.day -> '31' + 'month' in result -> True + 'minutes' in result -> False + result.dump() -> ['1999', '/', '12', '/', '31'] + - day: 31 + - month: 12 + - year: 1999 + """ + def __new__(cls, toklist=None, name=None, asList=True, modal=True ): + if isinstance(toklist, cls): + return toklist + retobj = object.__new__(cls) + retobj.__doinit = True + return retobj + + # Performance tuning: we construct a *lot* of these, so keep this + # constructor as small and fast as possible + def __init__( self, toklist=None, name=None, asList=True, modal=True, isinstance=isinstance ): + if self.__doinit: + self.__doinit = False + self.__name = None + self.__parent = None + self.__accumNames = {} + self.__asList = asList + self.__modal = modal + if toklist is None: + toklist = [] + if isinstance(toklist, list): + self.__toklist = toklist[:] + elif isinstance(toklist, _generatorType): + self.__toklist = list(toklist) + else: + self.__toklist = [toklist] + self.__tokdict = dict() + + if name is not None and name: + if not modal: + self.__accumNames[name] = 0 + if isinstance(name,int): + name = _ustr(name) # will always return a str, but use _ustr for consistency + self.__name = name + if not (isinstance(toklist, (type(None), basestring, list)) and toklist in (None,'',[])): + if isinstance(toklist,basestring): + toklist = [ toklist ] + if asList: + if isinstance(toklist,ParseResults): + self[name] = _ParseResultsWithOffset(toklist.copy(),0) + else: + self[name] = _ParseResultsWithOffset(ParseResults(toklist[0]),0) + self[name].__name = name + else: + try: + self[name] = toklist[0] + except (KeyError,TypeError,IndexError): + self[name] = toklist + + def __getitem__( self, i ): + if isinstance( i, (int,slice) ): + return self.__toklist[i] + else: + if i not in self.__accumNames: + return self.__tokdict[i][-1][0] + else: + return ParseResults([ v[0] for v in self.__tokdict[i] ]) + + def __setitem__( self, k, v, isinstance=isinstance ): + if isinstance(v,_ParseResultsWithOffset): + self.__tokdict[k] = self.__tokdict.get(k,list()) + [v] + sub = v[0] + elif isinstance(k,(int,slice)): + self.__toklist[k] = v + sub = v + else: + self.__tokdict[k] = self.__tokdict.get(k,list()) + [_ParseResultsWithOffset(v,0)] + sub = v + if isinstance(sub,ParseResults): + sub.__parent = wkref(self) + + def __delitem__( self, i ): + if isinstance(i,(int,slice)): + mylen = len( self.__toklist ) + del self.__toklist[i] + + # convert int to slice + if isinstance(i, int): + if i < 0: + i += mylen + i = slice(i, i+1) + # get removed indices + removed = list(range(*i.indices(mylen))) + removed.reverse() + # fixup indices in token dictionary + for name,occurrences in self.__tokdict.items(): + for j in removed: + for k, (value, position) in enumerate(occurrences): + occurrences[k] = _ParseResultsWithOffset(value, position - (position > j)) + else: + del self.__tokdict[i] + + def __contains__( self, k ): + return k in self.__tokdict + + def __len__( self ): return len( self.__toklist ) + def __bool__(self): return ( not not self.__toklist ) + __nonzero__ = __bool__ + def __iter__( self ): return iter( self.__toklist ) + def __reversed__( self ): return iter( self.__toklist[::-1] ) + def _iterkeys( self ): + if hasattr(self.__tokdict, "iterkeys"): + return self.__tokdict.iterkeys() + else: + return iter(self.__tokdict) + + def _itervalues( self ): + return (self[k] for k in self._iterkeys()) + + def _iteritems( self ): + return ((k, self[k]) for k in self._iterkeys()) + + if PY_3: + keys = _iterkeys + """Returns an iterator of all named result keys (Python 3.x only).""" + + values = _itervalues + """Returns an iterator of all named result values (Python 3.x only).""" + + items = _iteritems + """Returns an iterator of all named result key-value tuples (Python 3.x only).""" + + else: + iterkeys = _iterkeys + """Returns an iterator of all named result keys (Python 2.x only).""" + + itervalues = _itervalues + """Returns an iterator of all named result values (Python 2.x only).""" + + iteritems = _iteritems + """Returns an iterator of all named result key-value tuples (Python 2.x only).""" + + def keys( self ): + """Returns all named result keys (as a list in Python 2.x, as an iterator in Python 3.x).""" + return list(self.iterkeys()) + + def values( self ): + """Returns all named result values (as a list in Python 2.x, as an iterator in Python 3.x).""" + return list(self.itervalues()) + + def items( self ): + """Returns all named result key-values (as a list of tuples in Python 2.x, as an iterator in Python 3.x).""" + return list(self.iteritems()) + + def haskeys( self ): + """Since keys() returns an iterator, this method is helpful in bypassing + code that looks for the existence of any defined results names.""" + return bool(self.__tokdict) + + def pop( self, *args, **kwargs): + """ + Removes and returns item at specified index (default=C{last}). + Supports both C{list} and C{dict} semantics for C{pop()}. If passed no + argument or an integer argument, it will use C{list} semantics + and pop tokens from the list of parsed tokens. If passed a + non-integer argument (most likely a string), it will use C{dict} + semantics and pop the corresponding value from any defined + results names. A second default return value argument is + supported, just as in C{dict.pop()}. + + Example:: + def remove_first(tokens): + tokens.pop(0) + print(OneOrMore(Word(nums)).parseString("0 123 321")) # -> ['0', '123', '321'] + print(OneOrMore(Word(nums)).addParseAction(remove_first).parseString("0 123 321")) # -> ['123', '321'] + + label = Word(alphas) + patt = label("LABEL") + OneOrMore(Word(nums)) + print(patt.parseString("AAB 123 321").dump()) + + # Use pop() in a parse action to remove named result (note that corresponding value is not + # removed from list form of results) + def remove_LABEL(tokens): + tokens.pop("LABEL") + return tokens + patt.addParseAction(remove_LABEL) + print(patt.parseString("AAB 123 321").dump()) + prints:: + ['AAB', '123', '321'] + - LABEL: AAB + + ['AAB', '123', '321'] + """ + if not args: + args = [-1] + for k,v in kwargs.items(): + if k == 'default': + args = (args[0], v) + else: + raise TypeError("pop() got an unexpected keyword argument '%s'" % k) + if (isinstance(args[0], int) or + len(args) == 1 or + args[0] in self): + index = args[0] + ret = self[index] + del self[index] + return ret + else: + defaultvalue = args[1] + return defaultvalue + + def get(self, key, defaultValue=None): + """ + Returns named result matching the given key, or if there is no + such name, then returns the given C{defaultValue} or C{None} if no + C{defaultValue} is specified. + + Similar to C{dict.get()}. + + Example:: + integer = Word(nums) + date_str = integer("year") + '/' + integer("month") + '/' + integer("day") + + result = date_str.parseString("1999/12/31") + print(result.get("year")) # -> '1999' + print(result.get("hour", "not specified")) # -> 'not specified' + print(result.get("hour")) # -> None + """ + if key in self: + return self[key] + else: + return defaultValue + + def insert( self, index, insStr ): + """ + Inserts new element at location index in the list of parsed tokens. + + Similar to C{list.insert()}. + + Example:: + print(OneOrMore(Word(nums)).parseString("0 123 321")) # -> ['0', '123', '321'] + + # use a parse action to insert the parse location in the front of the parsed results + def insert_locn(locn, tokens): + tokens.insert(0, locn) + print(OneOrMore(Word(nums)).addParseAction(insert_locn).parseString("0 123 321")) # -> [0, '0', '123', '321'] + """ + self.__toklist.insert(index, insStr) + # fixup indices in token dictionary + for name,occurrences in self.__tokdict.items(): + for k, (value, position) in enumerate(occurrences): + occurrences[k] = _ParseResultsWithOffset(value, position + (position > index)) + + def append( self, item ): + """ + Add single element to end of ParseResults list of elements. + + Example:: + print(OneOrMore(Word(nums)).parseString("0 123 321")) # -> ['0', '123', '321'] + + # use a parse action to compute the sum of the parsed integers, and add it to the end + def append_sum(tokens): + tokens.append(sum(map(int, tokens))) + print(OneOrMore(Word(nums)).addParseAction(append_sum).parseString("0 123 321")) # -> ['0', '123', '321', 444] + """ + self.__toklist.append(item) + + def extend( self, itemseq ): + """ + Add sequence of elements to end of ParseResults list of elements. + + Example:: + patt = OneOrMore(Word(alphas)) + + # use a parse action to append the reverse of the matched strings, to make a palindrome + def make_palindrome(tokens): + tokens.extend(reversed([t[::-1] for t in tokens])) + return ''.join(tokens) + print(patt.addParseAction(make_palindrome).parseString("lskdj sdlkjf lksd")) # -> 'lskdjsdlkjflksddsklfjkldsjdksl' + """ + if isinstance(itemseq, ParseResults): + self += itemseq + else: + self.__toklist.extend(itemseq) + + def clear( self ): + """ + Clear all elements and results names. + """ + del self.__toklist[:] + self.__tokdict.clear() + + def __getattr__( self, name ): + try: + return self[name] + except KeyError: + return "" + + if name in self.__tokdict: + if name not in self.__accumNames: + return self.__tokdict[name][-1][0] + else: + return ParseResults([ v[0] for v in self.__tokdict[name] ]) + else: + return "" + + def __add__( self, other ): + ret = self.copy() + ret += other + return ret + + def __iadd__( self, other ): + if other.__tokdict: + offset = len(self.__toklist) + addoffset = lambda a: offset if a<0 else a+offset + otheritems = other.__tokdict.items() + otherdictitems = [(k, _ParseResultsWithOffset(v[0],addoffset(v[1])) ) + for (k,vlist) in otheritems for v in vlist] + for k,v in otherdictitems: + self[k] = v + if isinstance(v[0],ParseResults): + v[0].__parent = wkref(self) + + self.__toklist += other.__toklist + self.__accumNames.update( other.__accumNames ) + return self + + def __radd__(self, other): + if isinstance(other,int) and other == 0: + # useful for merging many ParseResults using sum() builtin + return self.copy() + else: + # this may raise a TypeError - so be it + return other + self + + def __repr__( self ): + return "(%s, %s)" % ( repr( self.__toklist ), repr( self.__tokdict ) ) + + def __str__( self ): + return '[' + ', '.join(_ustr(i) if isinstance(i, ParseResults) else repr(i) for i in self.__toklist) + ']' + + def _asStringList( self, sep='' ): + out = [] + for item in self.__toklist: + if out and sep: + out.append(sep) + if isinstance( item, ParseResults ): + out += item._asStringList() + else: + out.append( _ustr(item) ) + return out + + def asList( self ): + """ + Returns the parse results as a nested list of matching tokens, all converted to strings. + + Example:: + patt = OneOrMore(Word(alphas)) + result = patt.parseString("sldkj lsdkj sldkj") + # even though the result prints in string-like form, it is actually a pyparsing ParseResults + print(type(result), result) # -> <class 'pyparsing.ParseResults'> ['sldkj', 'lsdkj', 'sldkj'] + + # Use asList() to create an actual list + result_list = result.asList() + print(type(result_list), result_list) # -> <class 'list'> ['sldkj', 'lsdkj', 'sldkj'] + """ + return [res.asList() if isinstance(res,ParseResults) else res for res in self.__toklist] + + def asDict( self ): + """ + Returns the named parse results as a nested dictionary. + + Example:: + integer = Word(nums) + date_str = integer("year") + '/' + integer("month") + '/' + integer("day") + + result = date_str.parseString('12/31/1999') + print(type(result), repr(result)) # -> <class 'pyparsing.ParseResults'> (['12', '/', '31', '/', '1999'], {'day': [('1999', 4)], 'year': [('12', 0)], 'month': [('31', 2)]}) + + result_dict = result.asDict() + print(type(result_dict), repr(result_dict)) # -> <class 'dict'> {'day': '1999', 'year': '12', 'month': '31'} + + # even though a ParseResults supports dict-like access, sometime you just need to have a dict + import json + print(json.dumps(result)) # -> Exception: TypeError: ... is not JSON serializable + print(json.dumps(result.asDict())) # -> {"month": "31", "day": "1999", "year": "12"} + """ + if PY_3: + item_fn = self.items + else: + item_fn = self.iteritems + + def toItem(obj): + if isinstance(obj, ParseResults): + if obj.haskeys(): + return obj.asDict() + else: + return [toItem(v) for v in obj] + else: + return obj + + return dict((k,toItem(v)) for k,v in item_fn()) + + def copy( self ): + """ + Returns a new copy of a C{ParseResults} object. + """ + ret = ParseResults( self.__toklist ) + ret.__tokdict = self.__tokdict.copy() + ret.__parent = self.__parent + ret.__accumNames.update( self.__accumNames ) + ret.__name = self.__name + return ret + + def asXML( self, doctag=None, namedItemsOnly=False, indent="", formatted=True ): + """ + (Deprecated) Returns the parse results as XML. Tags are created for tokens and lists that have defined results names. + """ + nl = "\n" + out = [] + namedItems = dict((v[1],k) for (k,vlist) in self.__tokdict.items() + for v in vlist) + nextLevelIndent = indent + " " + + # collapse out indents if formatting is not desired + if not formatted: + indent = "" + nextLevelIndent = "" + nl = "" + + selfTag = None + if doctag is not None: + selfTag = doctag + else: + if self.__name: + selfTag = self.__name + + if not selfTag: + if namedItemsOnly: + return "" + else: + selfTag = "ITEM" + + out += [ nl, indent, "<", selfTag, ">" ] + + for i,res in enumerate(self.__toklist): + if isinstance(res,ParseResults): + if i in namedItems: + out += [ res.asXML(namedItems[i], + namedItemsOnly and doctag is None, + nextLevelIndent, + formatted)] + else: + out += [ res.asXML(None, + namedItemsOnly and doctag is None, + nextLevelIndent, + formatted)] + else: + # individual token, see if there is a name for it + resTag = None + if i in namedItems: + resTag = namedItems[i] + if not resTag: + if namedItemsOnly: + continue + else: + resTag = "ITEM" + xmlBodyText = _xml_escape(_ustr(res)) + out += [ nl, nextLevelIndent, "<", resTag, ">", + xmlBodyText, + "</", resTag, ">" ] + + out += [ nl, indent, "</", selfTag, ">" ] + return "".join(out) + + def __lookup(self,sub): + for k,vlist in self.__tokdict.items(): + for v,loc in vlist: + if sub is v: + return k + return None + + def getName(self): + r""" + Returns the results name for this token expression. Useful when several + different expressions might match at a particular location. + + Example:: + integer = Word(nums) + ssn_expr = Regex(r"\d\d\d-\d\d-\d\d\d\d") + house_number_expr = Suppress('#') + Word(nums, alphanums) + user_data = (Group(house_number_expr)("house_number") + | Group(ssn_expr)("ssn") + | Group(integer)("age")) + user_info = OneOrMore(user_data) + + result = user_info.parseString("22 111-22-3333 #221B") + for item in result: + print(item.getName(), ':', item[0]) + prints:: + age : 22 + ssn : 111-22-3333 + house_number : 221B + """ + if self.__name: + return self.__name + elif self.__parent: + par = self.__parent() + if par: + return par.__lookup(self) + else: + return None + elif (len(self) == 1 and + len(self.__tokdict) == 1 and + next(iter(self.__tokdict.values()))[0][1] in (0,-1)): + return next(iter(self.__tokdict.keys())) + else: + return None + + def dump(self, indent='', depth=0, full=True): + """ + Diagnostic method for listing out the contents of a C{ParseResults}. + Accepts an optional C{indent} argument so that this string can be embedded + in a nested display of other data. + + Example:: + integer = Word(nums) + date_str = integer("year") + '/' + integer("month") + '/' + integer("day") + + result = date_str.parseString('12/31/1999') + print(result.dump()) + prints:: + ['12', '/', '31', '/', '1999'] + - day: 1999 + - month: 31 + - year: 12 + """ + out = [] + NL = '\n' + out.append( indent+_ustr(self.asList()) ) + if full: + if self.haskeys(): + items = sorted((str(k), v) for k,v in self.items()) + for k,v in items: + if out: + out.append(NL) + out.append( "%s%s- %s: " % (indent,(' '*depth), k) ) + if isinstance(v,ParseResults): + if v: + out.append( v.dump(indent,depth+1) ) + else: + out.append(_ustr(v)) + else: + out.append(repr(v)) + elif any(isinstance(vv,ParseResults) for vv in self): + v = self + for i,vv in enumerate(v): + if isinstance(vv,ParseResults): + out.append("\n%s%s[%d]:\n%s%s%s" % (indent,(' '*(depth)),i,indent,(' '*(depth+1)),vv.dump(indent,depth+1) )) + else: + out.append("\n%s%s[%d]:\n%s%s%s" % (indent,(' '*(depth)),i,indent,(' '*(depth+1)),_ustr(vv))) + + return "".join(out) + + def pprint(self, *args, **kwargs): + """ + Pretty-printer for parsed results as a list, using the C{pprint} module. + Accepts additional positional or keyword args as defined for the + C{pprint.pprint} method. (U{http://docs.python.org/3/library/pprint.html#pprint.pprint}) + + Example:: + ident = Word(alphas, alphanums) + num = Word(nums) + func = Forward() + term = ident | num | Group('(' + func + ')') + func <<= ident + Group(Optional(delimitedList(term))) + result = func.parseString("fna a,b,(fnb c,d,200),100") + result.pprint(width=40) + prints:: + ['fna', + ['a', + 'b', + ['(', 'fnb', ['c', 'd', '200'], ')'], + '100']] + """ + pprint.pprint(self.asList(), *args, **kwargs) + + # add support for pickle protocol + def __getstate__(self): + return ( self.__toklist, + ( self.__tokdict.copy(), + self.__parent is not None and self.__parent() or None, + self.__accumNames, + self.__name ) ) + + def __setstate__(self,state): + self.__toklist = state[0] + (self.__tokdict, + par, + inAccumNames, + self.__name) = state[1] + self.__accumNames = {} + self.__accumNames.update(inAccumNames) + if par is not None: + self.__parent = wkref(par) + else: + self.__parent = None + + def __getnewargs__(self): + return self.__toklist, self.__name, self.__asList, self.__modal + + def __dir__(self): + return (dir(type(self)) + list(self.keys())) + +collections.MutableMapping.register(ParseResults) + +def col (loc,strg): + """Returns current column within a string, counting newlines as line separators. + The first column is number 1. + + Note: the default parsing behavior is to expand tabs in the input string + before starting the parsing process. See L{I{ParserElement.parseString}<ParserElement.parseString>} for more information + on parsing strings containing C{<TAB>}s, and suggested methods to maintain a + consistent view of the parsed string, the parse location, and line and column + positions within the parsed string. + """ + s = strg + return 1 if 0<loc<len(s) and s[loc-1] == '\n' else loc - s.rfind("\n", 0, loc) + +def lineno(loc,strg): + """Returns current line number within a string, counting newlines as line separators. + The first line is number 1. + + Note: the default parsing behavior is to expand tabs in the input string + before starting the parsing process. See L{I{ParserElement.parseString}<ParserElement.parseString>} for more information + on parsing strings containing C{<TAB>}s, and suggested methods to maintain a + consistent view of the parsed string, the parse location, and line and column + positions within the parsed string. + """ + return strg.count("\n",0,loc) + 1 + +def line( loc, strg ): + """Returns the line of text containing loc within a string, counting newlines as line separators. + """ + lastCR = strg.rfind("\n", 0, loc) + nextCR = strg.find("\n", loc) + if nextCR >= 0: + return strg[lastCR+1:nextCR] + else: + return strg[lastCR+1:] + +def _defaultStartDebugAction( instring, loc, expr ): + print (("Match " + _ustr(expr) + " at loc " + _ustr(loc) + "(%d,%d)" % ( lineno(loc,instring), col(loc,instring) ))) + +def _defaultSuccessDebugAction( instring, startloc, endloc, expr, toks ): + print ("Matched " + _ustr(expr) + " -> " + str(toks.asList())) + +def _defaultExceptionDebugAction( instring, loc, expr, exc ): + print ("Exception raised:" + _ustr(exc)) + +def nullDebugAction(*args): + """'Do-nothing' debug action, to suppress debugging output during parsing.""" + pass + +# Only works on Python 3.x - nonlocal is toxic to Python 2 installs +#~ 'decorator to trim function calls to match the arity of the target' +#~ def _trim_arity(func, maxargs=3): + #~ if func in singleArgBuiltins: + #~ return lambda s,l,t: func(t) + #~ limit = 0 + #~ foundArity = False + #~ def wrapper(*args): + #~ nonlocal limit,foundArity + #~ while 1: + #~ try: + #~ ret = func(*args[limit:]) + #~ foundArity = True + #~ return ret + #~ except TypeError: + #~ if limit == maxargs or foundArity: + #~ raise + #~ limit += 1 + #~ continue + #~ return wrapper + +# this version is Python 2.x-3.x cross-compatible +'decorator to trim function calls to match the arity of the target' +def _trim_arity(func, maxargs=2): + if func in singleArgBuiltins: + return lambda s,l,t: func(t) + limit = [0] + foundArity = [False] + + # traceback return data structure changed in Py3.5 - normalize back to plain tuples + if system_version[:2] >= (3,5): + def extract_stack(limit=0): + # special handling for Python 3.5.0 - extra deep call stack by 1 + offset = -3 if system_version == (3,5,0) else -2 + frame_summary = traceback.extract_stack(limit=-offset+limit-1)[offset] + return [(frame_summary.filename, frame_summary.lineno)] + def extract_tb(tb, limit=0): + frames = traceback.extract_tb(tb, limit=limit) + frame_summary = frames[-1] + return [(frame_summary.filename, frame_summary.lineno)] + else: + extract_stack = traceback.extract_stack + extract_tb = traceback.extract_tb + + # synthesize what would be returned by traceback.extract_stack at the call to + # user's parse action 'func', so that we don't incur call penalty at parse time + + LINE_DIFF = 6 + # IF ANY CODE CHANGES, EVEN JUST COMMENTS OR BLANK LINES, BETWEEN THE NEXT LINE AND + # THE CALL TO FUNC INSIDE WRAPPER, LINE_DIFF MUST BE MODIFIED!!!! + this_line = extract_stack(limit=2)[-1] + pa_call_line_synth = (this_line[0], this_line[1]+LINE_DIFF) + + def wrapper(*args): + while 1: + try: + ret = func(*args[limit[0]:]) + foundArity[0] = True + return ret + except TypeError: + # re-raise TypeErrors if they did not come from our arity testing + if foundArity[0]: + raise + else: + try: + tb = sys.exc_info()[-1] + if not extract_tb(tb, limit=2)[-1][:2] == pa_call_line_synth: + raise + finally: + del tb + + if limit[0] <= maxargs: + limit[0] += 1 + continue + raise + + # copy func name to wrapper for sensible debug output + func_name = "<parse action>" + try: + func_name = getattr(func, '__name__', + getattr(func, '__class__').__name__) + except Exception: + func_name = str(func) + wrapper.__name__ = func_name + + return wrapper + +class ParserElement(object): + """Abstract base level parser element class.""" + DEFAULT_WHITE_CHARS = " \n\t\r" + verbose_stacktrace = False + + @staticmethod + def setDefaultWhitespaceChars( chars ): + r""" + Overrides the default whitespace chars + + Example:: + # default whitespace chars are space, <TAB> and newline + OneOrMore(Word(alphas)).parseString("abc def\nghi jkl") # -> ['abc', 'def', 'ghi', 'jkl'] + + # change to just treat newline as significant + ParserElement.setDefaultWhitespaceChars(" \t") + OneOrMore(Word(alphas)).parseString("abc def\nghi jkl") # -> ['abc', 'def'] + """ + ParserElement.DEFAULT_WHITE_CHARS = chars + + @staticmethod + def inlineLiteralsUsing(cls): + """ + Set class to be used for inclusion of string literals into a parser. + + Example:: + # default literal class used is Literal + integer = Word(nums) + date_str = integer("year") + '/' + integer("month") + '/' + integer("day") + + date_str.parseString("1999/12/31") # -> ['1999', '/', '12', '/', '31'] + + + # change to Suppress + ParserElement.inlineLiteralsUsing(Suppress) + date_str = integer("year") + '/' + integer("month") + '/' + integer("day") + + date_str.parseString("1999/12/31") # -> ['1999', '12', '31'] + """ + ParserElement._literalStringClass = cls + + def __init__( self, savelist=False ): + self.parseAction = list() + self.failAction = None + #~ self.name = "<unknown>" # don't define self.name, let subclasses try/except upcall + self.strRepr = None + self.resultsName = None + self.saveAsList = savelist + self.skipWhitespace = True + self.whiteChars = ParserElement.DEFAULT_WHITE_CHARS + self.copyDefaultWhiteChars = True + self.mayReturnEmpty = False # used when checking for left-recursion + self.keepTabs = False + self.ignoreExprs = list() + self.debug = False + self.streamlined = False + self.mayIndexError = True # used to optimize exception handling for subclasses that don't advance parse index + self.errmsg = "" + self.modalResults = True # used to mark results names as modal (report only last) or cumulative (list all) + self.debugActions = ( None, None, None ) #custom debug actions + self.re = None + self.callPreparse = True # used to avoid redundant calls to preParse + self.callDuringTry = False + + def copy( self ): + """ + Make a copy of this C{ParserElement}. Useful for defining different parse actions + for the same parsing pattern, using copies of the original parse element. + + Example:: + integer = Word(nums).setParseAction(lambda toks: int(toks[0])) + integerK = integer.copy().addParseAction(lambda toks: toks[0]*1024) + Suppress("K") + integerM = integer.copy().addParseAction(lambda toks: toks[0]*1024*1024) + Suppress("M") + + print(OneOrMore(integerK | integerM | integer).parseString("5K 100 640K 256M")) + prints:: + [5120, 100, 655360, 268435456] + Equivalent form of C{expr.copy()} is just C{expr()}:: + integerM = integer().addParseAction(lambda toks: toks[0]*1024*1024) + Suppress("M") + """ + cpy = copy.copy( self ) + cpy.parseAction = self.parseAction[:] + cpy.ignoreExprs = self.ignoreExprs[:] + if self.copyDefaultWhiteChars: + cpy.whiteChars = ParserElement.DEFAULT_WHITE_CHARS + return cpy + + def setName( self, name ): + """ + Define name for this expression, makes debugging and exception messages clearer. + + Example:: + Word(nums).parseString("ABC") # -> Exception: Expected W:(0123...) (at char 0), (line:1, col:1) + Word(nums).setName("integer").parseString("ABC") # -> Exception: Expected integer (at char 0), (line:1, col:1) + """ + self.name = name + self.errmsg = "Expected " + self.name + if hasattr(self,"exception"): + self.exception.msg = self.errmsg + return self + + def setResultsName( self, name, listAllMatches=False ): + """ + Define name for referencing matching tokens as a nested attribute + of the returned parse results. + NOTE: this returns a *copy* of the original C{ParserElement} object; + this is so that the client can define a basic element, such as an + integer, and reference it in multiple places with different names. + + You can also set results names using the abbreviated syntax, + C{expr("name")} in place of C{expr.setResultsName("name")} - + see L{I{__call__}<__call__>}. + + Example:: + date_str = (integer.setResultsName("year") + '/' + + integer.setResultsName("month") + '/' + + integer.setResultsName("day")) + + # equivalent form: + date_str = integer("year") + '/' + integer("month") + '/' + integer("day") + """ + newself = self.copy() + if name.endswith("*"): + name = name[:-1] + listAllMatches=True + newself.resultsName = name + newself.modalResults = not listAllMatches + return newself + + def setBreak(self,breakFlag = True): + """Method to invoke the Python pdb debugger when this element is + about to be parsed. Set C{breakFlag} to True to enable, False to + disable. + """ + if breakFlag: + _parseMethod = self._parse + def breaker(instring, loc, doActions=True, callPreParse=True): + import pdb + pdb.set_trace() + return _parseMethod( instring, loc, doActions, callPreParse ) + breaker._originalParseMethod = _parseMethod + self._parse = breaker + else: + if hasattr(self._parse,"_originalParseMethod"): + self._parse = self._parse._originalParseMethod + return self + + def setParseAction( self, *fns, **kwargs ): + """ + Define action to perform when successfully matching parse element definition. + Parse action fn is a callable method with 0-3 arguments, called as C{fn(s,loc,toks)}, + C{fn(loc,toks)}, C{fn(toks)}, or just C{fn()}, where: + - s = the original string being parsed (see note below) + - loc = the location of the matching substring + - toks = a list of the matched tokens, packaged as a C{L{ParseResults}} object + If the functions in fns modify the tokens, they can return them as the return + value from fn, and the modified list of tokens will replace the original. + Otherwise, fn does not need to return any value. + + Optional keyword arguments: + - callDuringTry = (default=C{False}) indicate if parse action should be run during lookaheads and alternate testing + + Note: the default parsing behavior is to expand tabs in the input string + before starting the parsing process. See L{I{parseString}<parseString>} for more information + on parsing strings containing C{<TAB>}s, and suggested methods to maintain a + consistent view of the parsed string, the parse location, and line and column + positions within the parsed string. + + Example:: + integer = Word(nums) + date_str = integer + '/' + integer + '/' + integer + + date_str.parseString("1999/12/31") # -> ['1999', '/', '12', '/', '31'] + + # use parse action to convert to ints at parse time + integer = Word(nums).setParseAction(lambda toks: int(toks[0])) + date_str = integer + '/' + integer + '/' + integer + + # note that integer fields are now ints, not strings + date_str.parseString("1999/12/31") # -> [1999, '/', 12, '/', 31] + """ + self.parseAction = list(map(_trim_arity, list(fns))) + self.callDuringTry = kwargs.get("callDuringTry", False) + return self + + def addParseAction( self, *fns, **kwargs ): + """ + Add parse action to expression's list of parse actions. See L{I{setParseAction}<setParseAction>}. + + See examples in L{I{copy}<copy>}. + """ + self.parseAction += list(map(_trim_arity, list(fns))) + self.callDuringTry = self.callDuringTry or kwargs.get("callDuringTry", False) + return self + + def addCondition(self, *fns, **kwargs): + """Add a boolean predicate function to expression's list of parse actions. See + L{I{setParseAction}<setParseAction>} for function call signatures. Unlike C{setParseAction}, + functions passed to C{addCondition} need to return boolean success/fail of the condition. + + Optional keyword arguments: + - message = define a custom message to be used in the raised exception + - fatal = if True, will raise ParseFatalException to stop parsing immediately; otherwise will raise ParseException + + Example:: + integer = Word(nums).setParseAction(lambda toks: int(toks[0])) + year_int = integer.copy() + year_int.addCondition(lambda toks: toks[0] >= 2000, message="Only support years 2000 and later") + date_str = year_int + '/' + integer + '/' + integer + + result = date_str.parseString("1999/12/31") # -> Exception: Only support years 2000 and later (at char 0), (line:1, col:1) + """ + msg = kwargs.get("message", "failed user-defined condition") + exc_type = ParseFatalException if kwargs.get("fatal", False) else ParseException + for fn in fns: + def pa(s,l,t): + if not bool(_trim_arity(fn)(s,l,t)): + raise exc_type(s,l,msg) + self.parseAction.append(pa) + self.callDuringTry = self.callDuringTry or kwargs.get("callDuringTry", False) + return self + + def setFailAction( self, fn ): + """Define action to perform if parsing fails at this expression. + Fail acton fn is a callable function that takes the arguments + C{fn(s,loc,expr,err)} where: + - s = string being parsed + - loc = location where expression match was attempted and failed + - expr = the parse expression that failed + - err = the exception thrown + The function returns no value. It may throw C{L{ParseFatalException}} + if it is desired to stop parsing immediately.""" + self.failAction = fn + return self + + def _skipIgnorables( self, instring, loc ): + exprsFound = True + while exprsFound: + exprsFound = False + for e in self.ignoreExprs: + try: + while 1: + loc,dummy = e._parse( instring, loc ) + exprsFound = True + except ParseException: + pass + return loc + + def preParse( self, instring, loc ): + if self.ignoreExprs: + loc = self._skipIgnorables( instring, loc ) + + if self.skipWhitespace: + wt = self.whiteChars + instrlen = len(instring) + while loc < instrlen and instring[loc] in wt: + loc += 1 + + return loc + + def parseImpl( self, instring, loc, doActions=True ): + return loc, [] + + def postParse( self, instring, loc, tokenlist ): + return tokenlist + + #~ @profile + def _parseNoCache( self, instring, loc, doActions=True, callPreParse=True ): + debugging = ( self.debug ) #and doActions ) + + if debugging or self.failAction: + #~ print ("Match",self,"at loc",loc,"(%d,%d)" % ( lineno(loc,instring), col(loc,instring) )) + if (self.debugActions[0] ): + self.debugActions[0]( instring, loc, self ) + if callPreParse and self.callPreparse: + preloc = self.preParse( instring, loc ) + else: + preloc = loc + tokensStart = preloc + try: + try: + loc,tokens = self.parseImpl( instring, preloc, doActions ) + except IndexError: + raise ParseException( instring, len(instring), self.errmsg, self ) + except ParseBaseException as err: + #~ print ("Exception raised:", err) + if self.debugActions[2]: + self.debugActions[2]( instring, tokensStart, self, err ) + if self.failAction: + self.failAction( instring, tokensStart, self, err ) + raise + else: + if callPreParse and self.callPreparse: + preloc = self.preParse( instring, loc ) + else: + preloc = loc + tokensStart = preloc + if self.mayIndexError or loc >= len(instring): + try: + loc,tokens = self.parseImpl( instring, preloc, doActions ) + except IndexError: + raise ParseException( instring, len(instring), self.errmsg, self ) + else: + loc,tokens = self.parseImpl( instring, preloc, doActions ) + + tokens = self.postParse( instring, loc, tokens ) + + retTokens = ParseResults( tokens, self.resultsName, asList=self.saveAsList, modal=self.modalResults ) + if self.parseAction and (doActions or self.callDuringTry): + if debugging: + try: + for fn in self.parseAction: + tokens = fn( instring, tokensStart, retTokens ) + if tokens is not None: + retTokens = ParseResults( tokens, + self.resultsName, + asList=self.saveAsList and isinstance(tokens,(ParseResults,list)), + modal=self.modalResults ) + except ParseBaseException as err: + #~ print "Exception raised in user parse action:", err + if (self.debugActions[2] ): + self.debugActions[2]( instring, tokensStart, self, err ) + raise + else: + for fn in self.parseAction: + tokens = fn( instring, tokensStart, retTokens ) + if tokens is not None: + retTokens = ParseResults( tokens, + self.resultsName, + asList=self.saveAsList and isinstance(tokens,(ParseResults,list)), + modal=self.modalResults ) + + if debugging: + #~ print ("Matched",self,"->",retTokens.asList()) + if (self.debugActions[1] ): + self.debugActions[1]( instring, tokensStart, loc, self, retTokens ) + + return loc, retTokens + + def tryParse( self, instring, loc ): + try: + return self._parse( instring, loc, doActions=False )[0] + except ParseFatalException: + raise ParseException( instring, loc, self.errmsg, self) + + def canParseNext(self, instring, loc): + try: + self.tryParse(instring, loc) + except (ParseException, IndexError): + return False + else: + return True + + class _UnboundedCache(object): + def __init__(self): + cache = {} + self.not_in_cache = not_in_cache = object() + + def get(self, key): + return cache.get(key, not_in_cache) + + def set(self, key, value): + cache[key] = value + + def clear(self): + cache.clear() + + self.get = types.MethodType(get, self) + self.set = types.MethodType(set, self) + self.clear = types.MethodType(clear, self) + + if _OrderedDict is not None: + class _FifoCache(object): + def __init__(self, size): + self.not_in_cache = not_in_cache = object() + + cache = _OrderedDict() + + def get(self, key): + return cache.get(key, not_in_cache) + + def set(self, key, value): + cache[key] = value + if len(cache) > size: + cache.popitem(False) + + def clear(self): + cache.clear() + + self.get = types.MethodType(get, self) + self.set = types.MethodType(set, self) + self.clear = types.MethodType(clear, self) + + else: + class _FifoCache(object): + def __init__(self, size): + self.not_in_cache = not_in_cache = object() + + cache = {} + key_fifo = collections.deque([], size) + + def get(self, key): + return cache.get(key, not_in_cache) + + def set(self, key, value): + cache[key] = value + if len(cache) > size: + cache.pop(key_fifo.popleft(), None) + key_fifo.append(key) + + def clear(self): + cache.clear() + key_fifo.clear() + + self.get = types.MethodType(get, self) + self.set = types.MethodType(set, self) + self.clear = types.MethodType(clear, self) + + # argument cache for optimizing repeated calls when backtracking through recursive expressions + packrat_cache = {} # this is set later by enabledPackrat(); this is here so that resetCache() doesn't fail + packrat_cache_lock = RLock() + packrat_cache_stats = [0, 0] + + # this method gets repeatedly called during backtracking with the same arguments - + # we can cache these arguments and save ourselves the trouble of re-parsing the contained expression + def _parseCache( self, instring, loc, doActions=True, callPreParse=True ): + HIT, MISS = 0, 1 + lookup = (self, instring, loc, callPreParse, doActions) + with ParserElement.packrat_cache_lock: + cache = ParserElement.packrat_cache + value = cache.get(lookup) + if value is cache.not_in_cache: + ParserElement.packrat_cache_stats[MISS] += 1 + try: + value = self._parseNoCache(instring, loc, doActions, callPreParse) + except ParseBaseException as pe: + # cache a copy of the exception, without the traceback + cache.set(lookup, pe.__class__(*pe.args)) + raise + else: + cache.set(lookup, (value[0], value[1].copy())) + return value + else: + ParserElement.packrat_cache_stats[HIT] += 1 + if isinstance(value, Exception): + raise value + return (value[0], value[1].copy()) + + _parse = _parseNoCache + + @staticmethod + def resetCache(): + ParserElement.packrat_cache.clear() + ParserElement.packrat_cache_stats[:] = [0] * len(ParserElement.packrat_cache_stats) + + _packratEnabled = False + @staticmethod + def enablePackrat(cache_size_limit=128): + """Enables "packrat" parsing, which adds memoizing to the parsing logic. + Repeated parse attempts at the same string location (which happens + often in many complex grammars) can immediately return a cached value, + instead of re-executing parsing/validating code. Memoizing is done of + both valid results and parsing exceptions. + + Parameters: + - cache_size_limit - (default=C{128}) - if an integer value is provided + will limit the size of the packrat cache; if None is passed, then + the cache size will be unbounded; if 0 is passed, the cache will + be effectively disabled. + + This speedup may break existing programs that use parse actions that + have side-effects. For this reason, packrat parsing is disabled when + you first import pyparsing. To activate the packrat feature, your + program must call the class method C{ParserElement.enablePackrat()}. If + your program uses C{psyco} to "compile as you go", you must call + C{enablePackrat} before calling C{psyco.full()}. If you do not do this, + Python will crash. For best results, call C{enablePackrat()} immediately + after importing pyparsing. + + Example:: + import pyparsing + pyparsing.ParserElement.enablePackrat() + """ + if not ParserElement._packratEnabled: + ParserElement._packratEnabled = True + if cache_size_limit is None: + ParserElement.packrat_cache = ParserElement._UnboundedCache() + else: + ParserElement.packrat_cache = ParserElement._FifoCache(cache_size_limit) + ParserElement._parse = ParserElement._parseCache + + def parseString( self, instring, parseAll=False ): + """ + Execute the parse expression with the given string. + This is the main interface to the client code, once the complete + expression has been built. + + If you want the grammar to require that the entire input string be + successfully parsed, then set C{parseAll} to True (equivalent to ending + the grammar with C{L{StringEnd()}}). + + Note: C{parseString} implicitly calls C{expandtabs()} on the input string, + in order to report proper column numbers in parse actions. + If the input string contains tabs and + the grammar uses parse actions that use the C{loc} argument to index into the + string being parsed, you can ensure you have a consistent view of the input + string by: + - calling C{parseWithTabs} on your grammar before calling C{parseString} + (see L{I{parseWithTabs}<parseWithTabs>}) + - define your parse action using the full C{(s,loc,toks)} signature, and + reference the input string using the parse action's C{s} argument + - explictly expand the tabs in your input string before calling + C{parseString} + + Example:: + Word('a').parseString('aaaaabaaa') # -> ['aaaaa'] + Word('a').parseString('aaaaabaaa', parseAll=True) # -> Exception: Expected end of text + """ + ParserElement.resetCache() + if not self.streamlined: + self.streamline() + #~ self.saveAsList = True + for e in self.ignoreExprs: + e.streamline() + if not self.keepTabs: + instring = instring.expandtabs() + try: + loc, tokens = self._parse( instring, 0 ) + if parseAll: + loc = self.preParse( instring, loc ) + se = Empty() + StringEnd() + se._parse( instring, loc ) + except ParseBaseException as exc: + if ParserElement.verbose_stacktrace: + raise + else: + # catch and re-raise exception from here, clears out pyparsing internal stack trace + raise exc + else: + return tokens + + def scanString( self, instring, maxMatches=_MAX_INT, overlap=False ): + """ + Scan the input string for expression matches. Each match will return the + matching tokens, start location, and end location. May be called with optional + C{maxMatches} argument, to clip scanning after 'n' matches are found. If + C{overlap} is specified, then overlapping matches will be reported. + + Note that the start and end locations are reported relative to the string + being parsed. See L{I{parseString}<parseString>} for more information on parsing + strings with embedded tabs. + + Example:: + source = "sldjf123lsdjjkf345sldkjf879lkjsfd987" + print(source) + for tokens,start,end in Word(alphas).scanString(source): + print(' '*start + '^'*(end-start)) + print(' '*start + tokens[0]) + + prints:: + + sldjf123lsdjjkf345sldkjf879lkjsfd987 + ^^^^^ + sldjf + ^^^^^^^ + lsdjjkf + ^^^^^^ + sldkjf + ^^^^^^ + lkjsfd + """ + if not self.streamlined: + self.streamline() + for e in self.ignoreExprs: + e.streamline() + + if not self.keepTabs: + instring = _ustr(instring).expandtabs() + instrlen = len(instring) + loc = 0 + preparseFn = self.preParse + parseFn = self._parse + ParserElement.resetCache() + matches = 0 + try: + while loc <= instrlen and matches < maxMatches: + try: + preloc = preparseFn( instring, loc ) + nextLoc,tokens = parseFn( instring, preloc, callPreParse=False ) + except ParseException: + loc = preloc+1 + else: + if nextLoc > loc: + matches += 1 + yield tokens, preloc, nextLoc + if overlap: + nextloc = preparseFn( instring, loc ) + if nextloc > loc: + loc = nextLoc + else: + loc += 1 + else: + loc = nextLoc + else: + loc = preloc+1 + except ParseBaseException as exc: + if ParserElement.verbose_stacktrace: + raise + else: + # catch and re-raise exception from here, clears out pyparsing internal stack trace + raise exc + + def transformString( self, instring ): + """ + Extension to C{L{scanString}}, to modify matching text with modified tokens that may + be returned from a parse action. To use C{transformString}, define a grammar and + attach a parse action to it that modifies the returned token list. + Invoking C{transformString()} on a target string will then scan for matches, + and replace the matched text patterns according to the logic in the parse + action. C{transformString()} returns the resulting transformed string. + + Example:: + wd = Word(alphas) + wd.setParseAction(lambda toks: toks[0].title()) + + print(wd.transformString("now is the winter of our discontent made glorious summer by this sun of york.")) + Prints:: + Now Is The Winter Of Our Discontent Made Glorious Summer By This Sun Of York. + """ + out = [] + lastE = 0 + # force preservation of <TAB>s, to minimize unwanted transformation of string, and to + # keep string locs straight between transformString and scanString + self.keepTabs = True + try: + for t,s,e in self.scanString( instring ): + out.append( instring[lastE:s] ) + if t: + if isinstance(t,ParseResults): + out += t.asList() + elif isinstance(t,list): + out += t + else: + out.append(t) + lastE = e + out.append(instring[lastE:]) + out = [o for o in out if o] + return "".join(map(_ustr,_flatten(out))) + except ParseBaseException as exc: + if ParserElement.verbose_stacktrace: + raise + else: + # catch and re-raise exception from here, clears out pyparsing internal stack trace + raise exc + + def searchString( self, instring, maxMatches=_MAX_INT ): + """ + Another extension to C{L{scanString}}, simplifying the access to the tokens found + to match the given parse expression. May be called with optional + C{maxMatches} argument, to clip searching after 'n' matches are found. + + Example:: + # a capitalized word starts with an uppercase letter, followed by zero or more lowercase letters + cap_word = Word(alphas.upper(), alphas.lower()) + + print(cap_word.searchString("More than Iron, more than Lead, more than Gold I need Electricity")) + prints:: + ['More', 'Iron', 'Lead', 'Gold', 'I'] + """ + try: + return ParseResults([ t for t,s,e in self.scanString( instring, maxMatches ) ]) + except ParseBaseException as exc: + if ParserElement.verbose_stacktrace: + raise + else: + # catch and re-raise exception from here, clears out pyparsing internal stack trace + raise exc + + def split(self, instring, maxsplit=_MAX_INT, includeSeparators=False): + """ + Generator method to split a string using the given expression as a separator. + May be called with optional C{maxsplit} argument, to limit the number of splits; + and the optional C{includeSeparators} argument (default=C{False}), if the separating + matching text should be included in the split results. + + Example:: + punc = oneOf(list(".,;:/-!?")) + print(list(punc.split("This, this?, this sentence, is badly punctuated!"))) + prints:: + ['This', ' this', '', ' this sentence', ' is badly punctuated', ''] + """ + splits = 0 + last = 0 + for t,s,e in self.scanString(instring, maxMatches=maxsplit): + yield instring[last:s] + if includeSeparators: + yield t[0] + last = e + yield instring[last:] + + def __add__(self, other ): + """ + Implementation of + operator - returns C{L{And}}. Adding strings to a ParserElement + converts them to L{Literal}s by default. + + Example:: + greet = Word(alphas) + "," + Word(alphas) + "!" + hello = "Hello, World!" + print (hello, "->", greet.parseString(hello)) + Prints:: + Hello, World! -> ['Hello', ',', 'World', '!'] + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return And( [ self, other ] ) + + def __radd__(self, other ): + """ + Implementation of + operator when left operand is not a C{L{ParserElement}} + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return other + self + + def __sub__(self, other): + """ + Implementation of - operator, returns C{L{And}} with error stop + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return And( [ self, And._ErrorStop(), other ] ) + + def __rsub__(self, other ): + """ + Implementation of - operator when left operand is not a C{L{ParserElement}} + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return other - self + + def __mul__(self,other): + """ + Implementation of * operator, allows use of C{expr * 3} in place of + C{expr + expr + expr}. Expressions may also me multiplied by a 2-integer + tuple, similar to C{{min,max}} multipliers in regular expressions. Tuples + may also include C{None} as in: + - C{expr*(n,None)} or C{expr*(n,)} is equivalent + to C{expr*n + L{ZeroOrMore}(expr)} + (read as "at least n instances of C{expr}") + - C{expr*(None,n)} is equivalent to C{expr*(0,n)} + (read as "0 to n instances of C{expr}") + - C{expr*(None,None)} is equivalent to C{L{ZeroOrMore}(expr)} + - C{expr*(1,None)} is equivalent to C{L{OneOrMore}(expr)} + + Note that C{expr*(None,n)} does not raise an exception if + more than n exprs exist in the input stream; that is, + C{expr*(None,n)} does not enforce a maximum number of expr + occurrences. If this behavior is desired, then write + C{expr*(None,n) + ~expr} + """ + if isinstance(other,int): + minElements, optElements = other,0 + elif isinstance(other,tuple): + other = (other + (None, None))[:2] + if other[0] is None: + other = (0, other[1]) + if isinstance(other[0],int) and other[1] is None: + if other[0] == 0: + return ZeroOrMore(self) + if other[0] == 1: + return OneOrMore(self) + else: + return self*other[0] + ZeroOrMore(self) + elif isinstance(other[0],int) and isinstance(other[1],int): + minElements, optElements = other + optElements -= minElements + else: + raise TypeError("cannot multiply 'ParserElement' and ('%s','%s') objects", type(other[0]),type(other[1])) + else: + raise TypeError("cannot multiply 'ParserElement' and '%s' objects", type(other)) + + if minElements < 0: + raise ValueError("cannot multiply ParserElement by negative value") + if optElements < 0: + raise ValueError("second tuple value must be greater or equal to first tuple value") + if minElements == optElements == 0: + raise ValueError("cannot multiply ParserElement by 0 or (0,0)") + + if (optElements): + def makeOptionalList(n): + if n>1: + return Optional(self + makeOptionalList(n-1)) + else: + return Optional(self) + if minElements: + if minElements == 1: + ret = self + makeOptionalList(optElements) + else: + ret = And([self]*minElements) + makeOptionalList(optElements) + else: + ret = makeOptionalList(optElements) + else: + if minElements == 1: + ret = self + else: + ret = And([self]*minElements) + return ret + + def __rmul__(self, other): + return self.__mul__(other) + + def __or__(self, other ): + """ + Implementation of | operator - returns C{L{MatchFirst}} + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return MatchFirst( [ self, other ] ) + + def __ror__(self, other ): + """ + Implementation of | operator when left operand is not a C{L{ParserElement}} + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return other | self + + def __xor__(self, other ): + """ + Implementation of ^ operator - returns C{L{Or}} + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return Or( [ self, other ] ) + + def __rxor__(self, other ): + """ + Implementation of ^ operator when left operand is not a C{L{ParserElement}} + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return other ^ self + + def __and__(self, other ): + """ + Implementation of & operator - returns C{L{Each}} + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return Each( [ self, other ] ) + + def __rand__(self, other ): + """ + Implementation of & operator when left operand is not a C{L{ParserElement}} + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return other & self + + def __invert__( self ): + """ + Implementation of ~ operator - returns C{L{NotAny}} + """ + return NotAny( self ) + + def __call__(self, name=None): + """ + Shortcut for C{L{setResultsName}}, with C{listAllMatches=False}. + + If C{name} is given with a trailing C{'*'} character, then C{listAllMatches} will be + passed as C{True}. + + If C{name} is omitted, same as calling C{L{copy}}. + + Example:: + # these are equivalent + userdata = Word(alphas).setResultsName("name") + Word(nums+"-").setResultsName("socsecno") + userdata = Word(alphas)("name") + Word(nums+"-")("socsecno") + """ + if name is not None: + return self.setResultsName(name) + else: + return self.copy() + + def suppress( self ): + """ + Suppresses the output of this C{ParserElement}; useful to keep punctuation from + cluttering up returned output. + """ + return Suppress( self ) + + def leaveWhitespace( self ): + """ + Disables the skipping of whitespace before matching the characters in the + C{ParserElement}'s defined pattern. This is normally only used internally by + the pyparsing module, but may be needed in some whitespace-sensitive grammars. + """ + self.skipWhitespace = False + return self + + def setWhitespaceChars( self, chars ): + """ + Overrides the default whitespace chars + """ + self.skipWhitespace = True + self.whiteChars = chars + self.copyDefaultWhiteChars = False + return self + + def parseWithTabs( self ): + """ + Overrides default behavior to expand C{<TAB>}s to spaces before parsing the input string. + Must be called before C{parseString} when the input grammar contains elements that + match C{<TAB>} characters. + """ + self.keepTabs = True + return self + + def ignore( self, other ): + """ + Define expression to be ignored (e.g., comments) while doing pattern + matching; may be called repeatedly, to define multiple comment or other + ignorable patterns. + + Example:: + patt = OneOrMore(Word(alphas)) + patt.parseString('ablaj /* comment */ lskjd') # -> ['ablaj'] + + patt.ignore(cStyleComment) + patt.parseString('ablaj /* comment */ lskjd') # -> ['ablaj', 'lskjd'] + """ + if isinstance(other, basestring): + other = Suppress(other) + + if isinstance( other, Suppress ): + if other not in self.ignoreExprs: + self.ignoreExprs.append(other) + else: + self.ignoreExprs.append( Suppress( other.copy() ) ) + return self + + def setDebugActions( self, startAction, successAction, exceptionAction ): + """ + Enable display of debugging messages while doing pattern matching. + """ + self.debugActions = (startAction or _defaultStartDebugAction, + successAction or _defaultSuccessDebugAction, + exceptionAction or _defaultExceptionDebugAction) + self.debug = True + return self + + def setDebug( self, flag=True ): + """ + Enable display of debugging messages while doing pattern matching. + Set C{flag} to True to enable, False to disable. + + Example:: + wd = Word(alphas).setName("alphaword") + integer = Word(nums).setName("numword") + term = wd | integer + + # turn on debugging for wd + wd.setDebug() + + OneOrMore(term).parseString("abc 123 xyz 890") + + prints:: + Match alphaword at loc 0(1,1) + Matched alphaword -> ['abc'] + Match alphaword at loc 3(1,4) + Exception raised:Expected alphaword (at char 4), (line:1, col:5) + Match alphaword at loc 7(1,8) + Matched alphaword -> ['xyz'] + Match alphaword at loc 11(1,12) + Exception raised:Expected alphaword (at char 12), (line:1, col:13) + Match alphaword at loc 15(1,16) + Exception raised:Expected alphaword (at char 15), (line:1, col:16) + + The output shown is that produced by the default debug actions - custom debug actions can be + specified using L{setDebugActions}. Prior to attempting + to match the C{wd} expression, the debugging message C{"Match <exprname> at loc <n>(<line>,<col>)"} + is shown. Then if the parse succeeds, a C{"Matched"} message is shown, or an C{"Exception raised"} + message is shown. Also note the use of L{setName} to assign a human-readable name to the expression, + which makes debugging and exception messages easier to understand - for instance, the default + name created for the C{Word} expression without calling C{setName} is C{"W:(ABCD...)"}. + """ + if flag: + self.setDebugActions( _defaultStartDebugAction, _defaultSuccessDebugAction, _defaultExceptionDebugAction ) + else: + self.debug = False + return self + + def __str__( self ): + return self.name + + def __repr__( self ): + return _ustr(self) + + def streamline( self ): + self.streamlined = True + self.strRepr = None + return self + + def checkRecursion( self, parseElementList ): + pass + + def validate( self, validateTrace=[] ): + """ + Check defined expressions for valid structure, check for infinite recursive definitions. + """ + self.checkRecursion( [] ) + + def parseFile( self, file_or_filename, parseAll=False ): + """ + Execute the parse expression on the given file or filename. + If a filename is specified (instead of a file object), + the entire file is opened, read, and closed before parsing. + """ + try: + file_contents = file_or_filename.read() + except AttributeError: + with open(file_or_filename, "r") as f: + file_contents = f.read() + try: + return self.parseString(file_contents, parseAll) + except ParseBaseException as exc: + if ParserElement.verbose_stacktrace: + raise + else: + # catch and re-raise exception from here, clears out pyparsing internal stack trace + raise exc + + def __eq__(self,other): + if isinstance(other, ParserElement): + return self is other or vars(self) == vars(other) + elif isinstance(other, basestring): + return self.matches(other) + else: + return super(ParserElement,self)==other + + def __ne__(self,other): + return not (self == other) + + def __hash__(self): + return hash(id(self)) + + def __req__(self,other): + return self == other + + def __rne__(self,other): + return not (self == other) + + def matches(self, testString, parseAll=True): + """ + Method for quick testing of a parser against a test string. Good for simple + inline microtests of sub expressions while building up larger parser. + + Parameters: + - testString - to test against this expression for a match + - parseAll - (default=C{True}) - flag to pass to C{L{parseString}} when running tests + + Example:: + expr = Word(nums) + assert expr.matches("100") + """ + try: + self.parseString(_ustr(testString), parseAll=parseAll) + return True + except ParseBaseException: + return False + + def runTests(self, tests, parseAll=True, comment='#', fullDump=True, printResults=True, failureTests=False): + """ + Execute the parse expression on a series of test strings, showing each + test, the parsed results or where the parse failed. Quick and easy way to + run a parse expression against a list of sample strings. + + Parameters: + - tests - a list of separate test strings, or a multiline string of test strings + - parseAll - (default=C{True}) - flag to pass to C{L{parseString}} when running tests + - comment - (default=C{'#'}) - expression for indicating embedded comments in the test + string; pass None to disable comment filtering + - fullDump - (default=C{True}) - dump results as list followed by results names in nested outline; + if False, only dump nested list + - printResults - (default=C{True}) prints test output to stdout + - failureTests - (default=C{False}) indicates if these tests are expected to fail parsing + + Returns: a (success, results) tuple, where success indicates that all tests succeeded + (or failed if C{failureTests} is True), and the results contain a list of lines of each + test's output + + Example:: + number_expr = pyparsing_common.number.copy() + + result = number_expr.runTests(''' + # unsigned integer + 100 + # negative integer + -100 + # float with scientific notation + 6.02e23 + # integer with scientific notation + 1e-12 + ''') + print("Success" if result[0] else "Failed!") + + result = number_expr.runTests(''' + # stray character + 100Z + # missing leading digit before '.' + -.100 + # too many '.' + 3.14.159 + ''', failureTests=True) + print("Success" if result[0] else "Failed!") + prints:: + # unsigned integer + 100 + [100] + + # negative integer + -100 + [-100] + + # float with scientific notation + 6.02e23 + [6.02e+23] + + # integer with scientific notation + 1e-12 + [1e-12] + + Success + + # stray character + 100Z + ^ + FAIL: Expected end of text (at char 3), (line:1, col:4) + + # missing leading digit before '.' + -.100 + ^ + FAIL: Expected {real number with scientific notation | real number | signed integer} (at char 0), (line:1, col:1) + + # too many '.' + 3.14.159 + ^ + FAIL: Expected end of text (at char 4), (line:1, col:5) + + Success + + Each test string must be on a single line. If you want to test a string that spans multiple + lines, create a test like this:: + + expr.runTest(r"this is a test\\n of strings that spans \\n 3 lines") + + (Note that this is a raw string literal, you must include the leading 'r'.) + """ + if isinstance(tests, basestring): + tests = list(map(str.strip, tests.rstrip().splitlines())) + if isinstance(comment, basestring): + comment = Literal(comment) + allResults = [] + comments = [] + success = True + for t in tests: + if comment is not None and comment.matches(t, False) or comments and not t: + comments.append(t) + continue + if not t: + continue + out = ['\n'.join(comments), t] + comments = [] + try: + t = t.replace(r'\n','\n') + result = self.parseString(t, parseAll=parseAll) + out.append(result.dump(full=fullDump)) + success = success and not failureTests + except ParseBaseException as pe: + fatal = "(FATAL)" if isinstance(pe, ParseFatalException) else "" + if '\n' in t: + out.append(line(pe.loc, t)) + out.append(' '*(col(pe.loc,t)-1) + '^' + fatal) + else: + out.append(' '*pe.loc + '^' + fatal) + out.append("FAIL: " + str(pe)) + success = success and failureTests + result = pe + except Exception as exc: + out.append("FAIL-EXCEPTION: " + str(exc)) + success = success and failureTests + result = exc + + if printResults: + if fullDump: + out.append('') + print('\n'.join(out)) + + allResults.append((t, result)) + + return success, allResults + + +class Token(ParserElement): + """ + Abstract C{ParserElement} subclass, for defining atomic matching patterns. + """ + def __init__( self ): + super(Token,self).__init__( savelist=False ) + + +class Empty(Token): + """ + An empty token, will always match. + """ + def __init__( self ): + super(Empty,self).__init__() + self.name = "Empty" + self.mayReturnEmpty = True + self.mayIndexError = False + + +class NoMatch(Token): + """ + A token that will never match. + """ + def __init__( self ): + super(NoMatch,self).__init__() + self.name = "NoMatch" + self.mayReturnEmpty = True + self.mayIndexError = False + self.errmsg = "Unmatchable token" + + def parseImpl( self, instring, loc, doActions=True ): + raise ParseException(instring, loc, self.errmsg, self) + + +class Literal(Token): + """ + Token to exactly match a specified string. + + Example:: + Literal('blah').parseString('blah') # -> ['blah'] + Literal('blah').parseString('blahfooblah') # -> ['blah'] + Literal('blah').parseString('bla') # -> Exception: Expected "blah" + + For case-insensitive matching, use L{CaselessLiteral}. + + For keyword matching (force word break before and after the matched string), + use L{Keyword} or L{CaselessKeyword}. + """ + def __init__( self, matchString ): + super(Literal,self).__init__() + self.match = matchString + self.matchLen = len(matchString) + try: + self.firstMatchChar = matchString[0] + except IndexError: + warnings.warn("null string passed to Literal; use Empty() instead", + SyntaxWarning, stacklevel=2) + self.__class__ = Empty + self.name = '"%s"' % _ustr(self.match) + self.errmsg = "Expected " + self.name + self.mayReturnEmpty = False + self.mayIndexError = False + + # Performance tuning: this routine gets called a *lot* + # if this is a single character match string and the first character matches, + # short-circuit as quickly as possible, and avoid calling startswith + #~ @profile + def parseImpl( self, instring, loc, doActions=True ): + if (instring[loc] == self.firstMatchChar and + (self.matchLen==1 or instring.startswith(self.match,loc)) ): + return loc+self.matchLen, self.match + raise ParseException(instring, loc, self.errmsg, self) +_L = Literal +ParserElement._literalStringClass = Literal + +class Keyword(Token): + """ + Token to exactly match a specified string as a keyword, that is, it must be + immediately followed by a non-keyword character. Compare with C{L{Literal}}: + - C{Literal("if")} will match the leading C{'if'} in C{'ifAndOnlyIf'}. + - C{Keyword("if")} will not; it will only match the leading C{'if'} in C{'if x=1'}, or C{'if(y==2)'} + Accepts two optional constructor arguments in addition to the keyword string: + - C{identChars} is a string of characters that would be valid identifier characters, + defaulting to all alphanumerics + "_" and "$" + - C{caseless} allows case-insensitive matching, default is C{False}. + + Example:: + Keyword("start").parseString("start") # -> ['start'] + Keyword("start").parseString("starting") # -> Exception + + For case-insensitive matching, use L{CaselessKeyword}. + """ + DEFAULT_KEYWORD_CHARS = alphanums+"_$" + + def __init__( self, matchString, identChars=None, caseless=False ): + super(Keyword,self).__init__() + if identChars is None: + identChars = Keyword.DEFAULT_KEYWORD_CHARS + self.match = matchString + self.matchLen = len(matchString) + try: + self.firstMatchChar = matchString[0] + except IndexError: + warnings.warn("null string passed to Keyword; use Empty() instead", + SyntaxWarning, stacklevel=2) + self.name = '"%s"' % self.match + self.errmsg = "Expected " + self.name + self.mayReturnEmpty = False + self.mayIndexError = False + self.caseless = caseless + if caseless: + self.caselessmatch = matchString.upper() + identChars = identChars.upper() + self.identChars = set(identChars) + + def parseImpl( self, instring, loc, doActions=True ): + if self.caseless: + if ( (instring[ loc:loc+self.matchLen ].upper() == self.caselessmatch) and + (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen].upper() not in self.identChars) and + (loc == 0 or instring[loc-1].upper() not in self.identChars) ): + return loc+self.matchLen, self.match + else: + if (instring[loc] == self.firstMatchChar and + (self.matchLen==1 or instring.startswith(self.match,loc)) and + (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen] not in self.identChars) and + (loc == 0 or instring[loc-1] not in self.identChars) ): + return loc+self.matchLen, self.match + raise ParseException(instring, loc, self.errmsg, self) + + def copy(self): + c = super(Keyword,self).copy() + c.identChars = Keyword.DEFAULT_KEYWORD_CHARS + return c + + @staticmethod + def setDefaultKeywordChars( chars ): + """Overrides the default Keyword chars + """ + Keyword.DEFAULT_KEYWORD_CHARS = chars + +class CaselessLiteral(Literal): + """ + Token to match a specified string, ignoring case of letters. + Note: the matched results will always be in the case of the given + match string, NOT the case of the input text. + + Example:: + OneOrMore(CaselessLiteral("CMD")).parseString("cmd CMD Cmd10") # -> ['CMD', 'CMD', 'CMD'] + + (Contrast with example for L{CaselessKeyword}.) + """ + def __init__( self, matchString ): + super(CaselessLiteral,self).__init__( matchString.upper() ) + # Preserve the defining literal. + self.returnString = matchString + self.name = "'%s'" % self.returnString + self.errmsg = "Expected " + self.name + + def parseImpl( self, instring, loc, doActions=True ): + if instring[ loc:loc+self.matchLen ].upper() == self.match: + return loc+self.matchLen, self.returnString + raise ParseException(instring, loc, self.errmsg, self) + +class CaselessKeyword(Keyword): + """ + Caseless version of L{Keyword}. + + Example:: + OneOrMore(CaselessKeyword("CMD")).parseString("cmd CMD Cmd10") # -> ['CMD', 'CMD'] + + (Contrast with example for L{CaselessLiteral}.) + """ + def __init__( self, matchString, identChars=None ): + super(CaselessKeyword,self).__init__( matchString, identChars, caseless=True ) + + def parseImpl( self, instring, loc, doActions=True ): + if ( (instring[ loc:loc+self.matchLen ].upper() == self.caselessmatch) and + (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen].upper() not in self.identChars) ): + return loc+self.matchLen, self.match + raise ParseException(instring, loc, self.errmsg, self) + +class CloseMatch(Token): + """ + A variation on L{Literal} which matches "close" matches, that is, + strings with at most 'n' mismatching characters. C{CloseMatch} takes parameters: + - C{match_string} - string to be matched + - C{maxMismatches} - (C{default=1}) maximum number of mismatches allowed to count as a match + + The results from a successful parse will contain the matched text from the input string and the following named results: + - C{mismatches} - a list of the positions within the match_string where mismatches were found + - C{original} - the original match_string used to compare against the input string + + If C{mismatches} is an empty list, then the match was an exact match. + + Example:: + patt = CloseMatch("ATCATCGAATGGA") + patt.parseString("ATCATCGAAXGGA") # -> (['ATCATCGAAXGGA'], {'mismatches': [[9]], 'original': ['ATCATCGAATGGA']}) + patt.parseString("ATCAXCGAAXGGA") # -> Exception: Expected 'ATCATCGAATGGA' (with up to 1 mismatches) (at char 0), (line:1, col:1) + + # exact match + patt.parseString("ATCATCGAATGGA") # -> (['ATCATCGAATGGA'], {'mismatches': [[]], 'original': ['ATCATCGAATGGA']}) + + # close match allowing up to 2 mismatches + patt = CloseMatch("ATCATCGAATGGA", maxMismatches=2) + patt.parseString("ATCAXCGAAXGGA") # -> (['ATCAXCGAAXGGA'], {'mismatches': [[4, 9]], 'original': ['ATCATCGAATGGA']}) + """ + def __init__(self, match_string, maxMismatches=1): + super(CloseMatch,self).__init__() + self.name = match_string + self.match_string = match_string + self.maxMismatches = maxMismatches + self.errmsg = "Expected %r (with up to %d mismatches)" % (self.match_string, self.maxMismatches) + self.mayIndexError = False + self.mayReturnEmpty = False + + def parseImpl( self, instring, loc, doActions=True ): + start = loc + instrlen = len(instring) + maxloc = start + len(self.match_string) + + if maxloc <= instrlen: + match_string = self.match_string + match_stringloc = 0 + mismatches = [] + maxMismatches = self.maxMismatches + + for match_stringloc,s_m in enumerate(zip(instring[loc:maxloc], self.match_string)): + src,mat = s_m + if src != mat: + mismatches.append(match_stringloc) + if len(mismatches) > maxMismatches: + break + else: + loc = match_stringloc + 1 + results = ParseResults([instring[start:loc]]) + results['original'] = self.match_string + results['mismatches'] = mismatches + return loc, results + + raise ParseException(instring, loc, self.errmsg, self) + + +class Word(Token): + """ + Token for matching words composed of allowed character sets. + Defined with string containing all allowed initial characters, + an optional string containing allowed body characters (if omitted, + defaults to the initial character set), and an optional minimum, + maximum, and/or exact length. The default value for C{min} is 1 (a + minimum value < 1 is not valid); the default values for C{max} and C{exact} + are 0, meaning no maximum or exact length restriction. An optional + C{excludeChars} parameter can list characters that might be found in + the input C{bodyChars} string; useful to define a word of all printables + except for one or two characters, for instance. + + L{srange} is useful for defining custom character set strings for defining + C{Word} expressions, using range notation from regular expression character sets. + + A common mistake is to use C{Word} to match a specific literal string, as in + C{Word("Address")}. Remember that C{Word} uses the string argument to define + I{sets} of matchable characters. This expression would match "Add", "AAA", + "dAred", or any other word made up of the characters 'A', 'd', 'r', 'e', and 's'. + To match an exact literal string, use L{Literal} or L{Keyword}. + + pyparsing includes helper strings for building Words: + - L{alphas} + - L{nums} + - L{alphanums} + - L{hexnums} + - L{alphas8bit} (alphabetic characters in ASCII range 128-255 - accented, tilded, umlauted, etc.) + - L{punc8bit} (non-alphabetic characters in ASCII range 128-255 - currency, symbols, superscripts, diacriticals, etc.) + - L{printables} (any non-whitespace character) + + Example:: + # a word composed of digits + integer = Word(nums) # equivalent to Word("0123456789") or Word(srange("0-9")) + + # a word with a leading capital, and zero or more lowercase + capital_word = Word(alphas.upper(), alphas.lower()) + + # hostnames are alphanumeric, with leading alpha, and '-' + hostname = Word(alphas, alphanums+'-') + + # roman numeral (not a strict parser, accepts invalid mix of characters) + roman = Word("IVXLCDM") + + # any string of non-whitespace characters, except for ',' + csv_value = Word(printables, excludeChars=",") + """ + def __init__( self, initChars, bodyChars=None, min=1, max=0, exact=0, asKeyword=False, excludeChars=None ): + super(Word,self).__init__() + if excludeChars: + initChars = ''.join(c for c in initChars if c not in excludeChars) + if bodyChars: + bodyChars = ''.join(c for c in bodyChars if c not in excludeChars) + self.initCharsOrig = initChars + self.initChars = set(initChars) + if bodyChars : + self.bodyCharsOrig = bodyChars + self.bodyChars = set(bodyChars) + else: + self.bodyCharsOrig = initChars + self.bodyChars = set(initChars) + + self.maxSpecified = max > 0 + + if min < 1: + raise ValueError("cannot specify a minimum length < 1; use Optional(Word()) if zero-length word is permitted") + + self.minLen = min + + if max > 0: + self.maxLen = max + else: + self.maxLen = _MAX_INT + + if exact > 0: + self.maxLen = exact + self.minLen = exact + + self.name = _ustr(self) + self.errmsg = "Expected " + self.name + self.mayIndexError = False + self.asKeyword = asKeyword + + if ' ' not in self.initCharsOrig+self.bodyCharsOrig and (min==1 and max==0 and exact==0): + if self.bodyCharsOrig == self.initCharsOrig: + self.reString = "[%s]+" % _escapeRegexRangeChars(self.initCharsOrig) + elif len(self.initCharsOrig) == 1: + self.reString = "%s[%s]*" % \ + (re.escape(self.initCharsOrig), + _escapeRegexRangeChars(self.bodyCharsOrig),) + else: + self.reString = "[%s][%s]*" % \ + (_escapeRegexRangeChars(self.initCharsOrig), + _escapeRegexRangeChars(self.bodyCharsOrig),) + if self.asKeyword: + self.reString = r"\b"+self.reString+r"\b" + try: + self.re = re.compile( self.reString ) + except Exception: + self.re = None + + def parseImpl( self, instring, loc, doActions=True ): + if self.re: + result = self.re.match(instring,loc) + if not result: + raise ParseException(instring, loc, self.errmsg, self) + + loc = result.end() + return loc, result.group() + + if not(instring[ loc ] in self.initChars): + raise ParseException(instring, loc, self.errmsg, self) + + start = loc + loc += 1 + instrlen = len(instring) + bodychars = self.bodyChars + maxloc = start + self.maxLen + maxloc = min( maxloc, instrlen ) + while loc < maxloc and instring[loc] in bodychars: + loc += 1 + + throwException = False + if loc - start < self.minLen: + throwException = True + if self.maxSpecified and loc < instrlen and instring[loc] in bodychars: + throwException = True + if self.asKeyword: + if (start>0 and instring[start-1] in bodychars) or (loc<instrlen and instring[loc] in bodychars): + throwException = True + + if throwException: + raise ParseException(instring, loc, self.errmsg, self) + + return loc, instring[start:loc] + + def __str__( self ): + try: + return super(Word,self).__str__() + except Exception: + pass + + + if self.strRepr is None: + + def charsAsStr(s): + if len(s)>4: + return s[:4]+"..." + else: + return s + + if ( self.initCharsOrig != self.bodyCharsOrig ): + self.strRepr = "W:(%s,%s)" % ( charsAsStr(self.initCharsOrig), charsAsStr(self.bodyCharsOrig) ) + else: + self.strRepr = "W:(%s)" % charsAsStr(self.initCharsOrig) + + return self.strRepr + + +class Regex(Token): + r""" + Token for matching strings that match a given regular expression. + Defined with string specifying the regular expression in a form recognized by the inbuilt Python re module. + If the given regex contains named groups (defined using C{(?P<name>...)}), these will be preserved as + named parse results. + + Example:: + realnum = Regex(r"[+-]?\d+\.\d*") + date = Regex(r'(?P<year>\d{4})-(?P<month>\d\d?)-(?P<day>\d\d?)') + # ref: http://stackoverflow.com/questions/267399/how-do-you-match-only-valid-roman-numerals-with-a-regular-expression + roman = Regex(r"M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})") + """ + compiledREtype = type(re.compile("[A-Z]")) + def __init__( self, pattern, flags=0): + """The parameters C{pattern} and C{flags} are passed to the C{re.compile()} function as-is. See the Python C{re} module for an explanation of the acceptable patterns and flags.""" + super(Regex,self).__init__() + + if isinstance(pattern, basestring): + if not pattern: + warnings.warn("null string passed to Regex; use Empty() instead", + SyntaxWarning, stacklevel=2) + + self.pattern = pattern + self.flags = flags + + try: + self.re = re.compile(self.pattern, self.flags) + self.reString = self.pattern + except sre_constants.error: + warnings.warn("invalid pattern (%s) passed to Regex" % pattern, + SyntaxWarning, stacklevel=2) + raise + + elif isinstance(pattern, Regex.compiledREtype): + self.re = pattern + self.pattern = \ + self.reString = str(pattern) + self.flags = flags + + else: + raise ValueError("Regex may only be constructed with a string or a compiled RE object") + + self.name = _ustr(self) + self.errmsg = "Expected " + self.name + self.mayIndexError = False + self.mayReturnEmpty = True + + def parseImpl( self, instring, loc, doActions=True ): + result = self.re.match(instring,loc) + if not result: + raise ParseException(instring, loc, self.errmsg, self) + + loc = result.end() + d = result.groupdict() + ret = ParseResults(result.group()) + if d: + for k in d: + ret[k] = d[k] + return loc,ret + + def __str__( self ): + try: + return super(Regex,self).__str__() + except Exception: + pass + + if self.strRepr is None: + self.strRepr = "Re:(%s)" % repr(self.pattern) + + return self.strRepr + + +class QuotedString(Token): + r""" + Token for matching strings that are delimited by quoting characters. + + Defined with the following parameters: + - quoteChar - string of one or more characters defining the quote delimiting string + - escChar - character to escape quotes, typically backslash (default=C{None}) + - escQuote - special quote sequence to escape an embedded quote string (such as SQL's "" to escape an embedded ") (default=C{None}) + - multiline - boolean indicating whether quotes can span multiple lines (default=C{False}) + - unquoteResults - boolean indicating whether the matched text should be unquoted (default=C{True}) + - endQuoteChar - string of one or more characters defining the end of the quote delimited string (default=C{None} => same as quoteChar) + - convertWhitespaceEscapes - convert escaped whitespace (C{'\t'}, C{'\n'}, etc.) to actual whitespace (default=C{True}) + + Example:: + qs = QuotedString('"') + print(qs.searchString('lsjdf "This is the quote" sldjf')) + complex_qs = QuotedString('{{', endQuoteChar='}}') + print(complex_qs.searchString('lsjdf {{This is the "quote"}} sldjf')) + sql_qs = QuotedString('"', escQuote='""') + print(sql_qs.searchString('lsjdf "This is the quote with ""embedded"" quotes" sldjf')) + prints:: + [['This is the quote']] + [['This is the "quote"']] + [['This is the quote with "embedded" quotes']] + """ + def __init__( self, quoteChar, escChar=None, escQuote=None, multiline=False, unquoteResults=True, endQuoteChar=None, convertWhitespaceEscapes=True): + super(QuotedString,self).__init__() + + # remove white space from quote chars - wont work anyway + quoteChar = quoteChar.strip() + if not quoteChar: + warnings.warn("quoteChar cannot be the empty string",SyntaxWarning,stacklevel=2) + raise SyntaxError() + + if endQuoteChar is None: + endQuoteChar = quoteChar + else: + endQuoteChar = endQuoteChar.strip() + if not endQuoteChar: + warnings.warn("endQuoteChar cannot be the empty string",SyntaxWarning,stacklevel=2) + raise SyntaxError() + + self.quoteChar = quoteChar + self.quoteCharLen = len(quoteChar) + self.firstQuoteChar = quoteChar[0] + self.endQuoteChar = endQuoteChar + self.endQuoteCharLen = len(endQuoteChar) + self.escChar = escChar + self.escQuote = escQuote + self.unquoteResults = unquoteResults + self.convertWhitespaceEscapes = convertWhitespaceEscapes + + if multiline: + self.flags = re.MULTILINE | re.DOTALL + self.pattern = r'%s(?:[^%s%s]' % \ + ( re.escape(self.quoteChar), + _escapeRegexRangeChars(self.endQuoteChar[0]), + (escChar is not None and _escapeRegexRangeChars(escChar) or '') ) + else: + self.flags = 0 + self.pattern = r'%s(?:[^%s\n\r%s]' % \ + ( re.escape(self.quoteChar), + _escapeRegexRangeChars(self.endQuoteChar[0]), + (escChar is not None and _escapeRegexRangeChars(escChar) or '') ) + if len(self.endQuoteChar) > 1: + self.pattern += ( + '|(?:' + ')|(?:'.join("%s[^%s]" % (re.escape(self.endQuoteChar[:i]), + _escapeRegexRangeChars(self.endQuoteChar[i])) + for i in range(len(self.endQuoteChar)-1,0,-1)) + ')' + ) + if escQuote: + self.pattern += (r'|(?:%s)' % re.escape(escQuote)) + if escChar: + self.pattern += (r'|(?:%s.)' % re.escape(escChar)) + self.escCharReplacePattern = re.escape(self.escChar)+"(.)" + self.pattern += (r')*%s' % re.escape(self.endQuoteChar)) + + try: + self.re = re.compile(self.pattern, self.flags) + self.reString = self.pattern + except sre_constants.error: + warnings.warn("invalid pattern (%s) passed to Regex" % self.pattern, + SyntaxWarning, stacklevel=2) + raise + + self.name = _ustr(self) + self.errmsg = "Expected " + self.name + self.mayIndexError = False + self.mayReturnEmpty = True + + def parseImpl( self, instring, loc, doActions=True ): + result = instring[loc] == self.firstQuoteChar and self.re.match(instring,loc) or None + if not result: + raise ParseException(instring, loc, self.errmsg, self) + + loc = result.end() + ret = result.group() + + if self.unquoteResults: + + # strip off quotes + ret = ret[self.quoteCharLen:-self.endQuoteCharLen] + + if isinstance(ret,basestring): + # replace escaped whitespace + if '\\' in ret and self.convertWhitespaceEscapes: + ws_map = { + r'\t' : '\t', + r'\n' : '\n', + r'\f' : '\f', + r'\r' : '\r', + } + for wslit,wschar in ws_map.items(): + ret = ret.replace(wslit, wschar) + + # replace escaped characters + if self.escChar: + ret = re.sub(self.escCharReplacePattern,r"\g<1>",ret) + + # replace escaped quotes + if self.escQuote: + ret = ret.replace(self.escQuote, self.endQuoteChar) + + return loc, ret + + def __str__( self ): + try: + return super(QuotedString,self).__str__() + except Exception: + pass + + if self.strRepr is None: + self.strRepr = "quoted string, starting with %s ending with %s" % (self.quoteChar, self.endQuoteChar) + + return self.strRepr + + +class CharsNotIn(Token): + """ + Token for matching words composed of characters I{not} in a given set (will + include whitespace in matched characters if not listed in the provided exclusion set - see example). + Defined with string containing all disallowed characters, and an optional + minimum, maximum, and/or exact length. The default value for C{min} is 1 (a + minimum value < 1 is not valid); the default values for C{max} and C{exact} + are 0, meaning no maximum or exact length restriction. + + Example:: + # define a comma-separated-value as anything that is not a ',' + csv_value = CharsNotIn(',') + print(delimitedList(csv_value).parseString("dkls,lsdkjf,s12 34,@!#,213")) + prints:: + ['dkls', 'lsdkjf', 's12 34', '@!#', '213'] + """ + def __init__( self, notChars, min=1, max=0, exact=0 ): + super(CharsNotIn,self).__init__() + self.skipWhitespace = False + self.notChars = notChars + + if min < 1: + raise ValueError("cannot specify a minimum length < 1; use Optional(CharsNotIn()) if zero-length char group is permitted") + + self.minLen = min + + if max > 0: + self.maxLen = max + else: + self.maxLen = _MAX_INT + + if exact > 0: + self.maxLen = exact + self.minLen = exact + + self.name = _ustr(self) + self.errmsg = "Expected " + self.name + self.mayReturnEmpty = ( self.minLen == 0 ) + self.mayIndexError = False + + def parseImpl( self, instring, loc, doActions=True ): + if instring[loc] in self.notChars: + raise ParseException(instring, loc, self.errmsg, self) + + start = loc + loc += 1 + notchars = self.notChars + maxlen = min( start+self.maxLen, len(instring) ) + while loc < maxlen and \ + (instring[loc] not in notchars): + loc += 1 + + if loc - start < self.minLen: + raise ParseException(instring, loc, self.errmsg, self) + + return loc, instring[start:loc] + + def __str__( self ): + try: + return super(CharsNotIn, self).__str__() + except Exception: + pass + + if self.strRepr is None: + if len(self.notChars) > 4: + self.strRepr = "!W:(%s...)" % self.notChars[:4] + else: + self.strRepr = "!W:(%s)" % self.notChars + + return self.strRepr + +class White(Token): + """ + Special matching class for matching whitespace. Normally, whitespace is ignored + by pyparsing grammars. This class is included when some whitespace structures + are significant. Define with a string containing the whitespace characters to be + matched; default is C{" \\t\\r\\n"}. Also takes optional C{min}, C{max}, and C{exact} arguments, + as defined for the C{L{Word}} class. + """ + whiteStrs = { + " " : "<SPC>", + "\t": "<TAB>", + "\n": "<LF>", + "\r": "<CR>", + "\f": "<FF>", + } + def __init__(self, ws=" \t\r\n", min=1, max=0, exact=0): + super(White,self).__init__() + self.matchWhite = ws + self.setWhitespaceChars( "".join(c for c in self.whiteChars if c not in self.matchWhite) ) + #~ self.leaveWhitespace() + self.name = ("".join(White.whiteStrs[c] for c in self.matchWhite)) + self.mayReturnEmpty = True + self.errmsg = "Expected " + self.name + + self.minLen = min + + if max > 0: + self.maxLen = max + else: + self.maxLen = _MAX_INT + + if exact > 0: + self.maxLen = exact + self.minLen = exact + + def parseImpl( self, instring, loc, doActions=True ): + if not(instring[ loc ] in self.matchWhite): + raise ParseException(instring, loc, self.errmsg, self) + start = loc + loc += 1 + maxloc = start + self.maxLen + maxloc = min( maxloc, len(instring) ) + while loc < maxloc and instring[loc] in self.matchWhite: + loc += 1 + + if loc - start < self.minLen: + raise ParseException(instring, loc, self.errmsg, self) + + return loc, instring[start:loc] + + +class _PositionToken(Token): + def __init__( self ): + super(_PositionToken,self).__init__() + self.name=self.__class__.__name__ + self.mayReturnEmpty = True + self.mayIndexError = False + +class GoToColumn(_PositionToken): + """ + Token to advance to a specific column of input text; useful for tabular report scraping. + """ + def __init__( self, colno ): + super(GoToColumn,self).__init__() + self.col = colno + + def preParse( self, instring, loc ): + if col(loc,instring) != self.col: + instrlen = len(instring) + if self.ignoreExprs: + loc = self._skipIgnorables( instring, loc ) + while loc < instrlen and instring[loc].isspace() and col( loc, instring ) != self.col : + loc += 1 + return loc + + def parseImpl( self, instring, loc, doActions=True ): + thiscol = col( loc, instring ) + if thiscol > self.col: + raise ParseException( instring, loc, "Text not in expected column", self ) + newloc = loc + self.col - thiscol + ret = instring[ loc: newloc ] + return newloc, ret + + +class LineStart(_PositionToken): + """ + Matches if current position is at the beginning of a line within the parse string + + Example:: + + test = '''\ + AAA this line + AAA and this line + AAA but not this one + B AAA and definitely not this one + ''' + + for t in (LineStart() + 'AAA' + restOfLine).searchString(test): + print(t) + + Prints:: + ['AAA', ' this line'] + ['AAA', ' and this line'] + + """ + def __init__( self ): + super(LineStart,self).__init__() + self.errmsg = "Expected start of line" + + def parseImpl( self, instring, loc, doActions=True ): + if col(loc, instring) == 1: + return loc, [] + raise ParseException(instring, loc, self.errmsg, self) + +class LineEnd(_PositionToken): + """ + Matches if current position is at the end of a line within the parse string + """ + def __init__( self ): + super(LineEnd,self).__init__() + self.setWhitespaceChars( ParserElement.DEFAULT_WHITE_CHARS.replace("\n","") ) + self.errmsg = "Expected end of line" + + def parseImpl( self, instring, loc, doActions=True ): + if loc<len(instring): + if instring[loc] == "\n": + return loc+1, "\n" + else: + raise ParseException(instring, loc, self.errmsg, self) + elif loc == len(instring): + return loc+1, [] + else: + raise ParseException(instring, loc, self.errmsg, self) + +class StringStart(_PositionToken): + """ + Matches if current position is at the beginning of the parse string + """ + def __init__( self ): + super(StringStart,self).__init__() + self.errmsg = "Expected start of text" + + def parseImpl( self, instring, loc, doActions=True ): + if loc != 0: + # see if entire string up to here is just whitespace and ignoreables + if loc != self.preParse( instring, 0 ): + raise ParseException(instring, loc, self.errmsg, self) + return loc, [] + +class StringEnd(_PositionToken): + """ + Matches if current position is at the end of the parse string + """ + def __init__( self ): + super(StringEnd,self).__init__() + self.errmsg = "Expected end of text" + + def parseImpl( self, instring, loc, doActions=True ): + if loc < len(instring): + raise ParseException(instring, loc, self.errmsg, self) + elif loc == len(instring): + return loc+1, [] + elif loc > len(instring): + return loc, [] + else: + raise ParseException(instring, loc, self.errmsg, self) + +class WordStart(_PositionToken): + """ + Matches if the current position is at the beginning of a Word, and + is not preceded by any character in a given set of C{wordChars} + (default=C{printables}). To emulate the C{\b} behavior of regular expressions, + use C{WordStart(alphanums)}. C{WordStart} will also match at the beginning of + the string being parsed, or at the beginning of a line. + """ + def __init__(self, wordChars = printables): + super(WordStart,self).__init__() + self.wordChars = set(wordChars) + self.errmsg = "Not at the start of a word" + + def parseImpl(self, instring, loc, doActions=True ): + if loc != 0: + if (instring[loc-1] in self.wordChars or + instring[loc] not in self.wordChars): + raise ParseException(instring, loc, self.errmsg, self) + return loc, [] + +class WordEnd(_PositionToken): + """ + Matches if the current position is at the end of a Word, and + is not followed by any character in a given set of C{wordChars} + (default=C{printables}). To emulate the C{\b} behavior of regular expressions, + use C{WordEnd(alphanums)}. C{WordEnd} will also match at the end of + the string being parsed, or at the end of a line. + """ + def __init__(self, wordChars = printables): + super(WordEnd,self).__init__() + self.wordChars = set(wordChars) + self.skipWhitespace = False + self.errmsg = "Not at the end of a word" + + def parseImpl(self, instring, loc, doActions=True ): + instrlen = len(instring) + if instrlen>0 and loc<instrlen: + if (instring[loc] in self.wordChars or + instring[loc-1] not in self.wordChars): + raise ParseException(instring, loc, self.errmsg, self) + return loc, [] + + +class ParseExpression(ParserElement): + """ + Abstract subclass of ParserElement, for combining and post-processing parsed tokens. + """ + def __init__( self, exprs, savelist = False ): + super(ParseExpression,self).__init__(savelist) + if isinstance( exprs, _generatorType ): + exprs = list(exprs) + + if isinstance( exprs, basestring ): + self.exprs = [ ParserElement._literalStringClass( exprs ) ] + elif isinstance( exprs, collections.Iterable ): + exprs = list(exprs) + # if sequence of strings provided, wrap with Literal + if all(isinstance(expr, basestring) for expr in exprs): + exprs = map(ParserElement._literalStringClass, exprs) + self.exprs = list(exprs) + else: + try: + self.exprs = list( exprs ) + except TypeError: + self.exprs = [ exprs ] + self.callPreparse = False + + def __getitem__( self, i ): + return self.exprs[i] + + def append( self, other ): + self.exprs.append( other ) + self.strRepr = None + return self + + def leaveWhitespace( self ): + """Extends C{leaveWhitespace} defined in base class, and also invokes C{leaveWhitespace} on + all contained expressions.""" + self.skipWhitespace = False + self.exprs = [ e.copy() for e in self.exprs ] + for e in self.exprs: + e.leaveWhitespace() + return self + + def ignore( self, other ): + if isinstance( other, Suppress ): + if other not in self.ignoreExprs: + super( ParseExpression, self).ignore( other ) + for e in self.exprs: + e.ignore( self.ignoreExprs[-1] ) + else: + super( ParseExpression, self).ignore( other ) + for e in self.exprs: + e.ignore( self.ignoreExprs[-1] ) + return self + + def __str__( self ): + try: + return super(ParseExpression,self).__str__() + except Exception: + pass + + if self.strRepr is None: + self.strRepr = "%s:(%s)" % ( self.__class__.__name__, _ustr(self.exprs) ) + return self.strRepr + + def streamline( self ): + super(ParseExpression,self).streamline() + + for e in self.exprs: + e.streamline() + + # collapse nested And's of the form And( And( And( a,b), c), d) to And( a,b,c,d ) + # but only if there are no parse actions or resultsNames on the nested And's + # (likewise for Or's and MatchFirst's) + if ( len(self.exprs) == 2 ): + other = self.exprs[0] + if ( isinstance( other, self.__class__ ) and + not(other.parseAction) and + other.resultsName is None and + not other.debug ): + self.exprs = other.exprs[:] + [ self.exprs[1] ] + self.strRepr = None + self.mayReturnEmpty |= other.mayReturnEmpty + self.mayIndexError |= other.mayIndexError + + other = self.exprs[-1] + if ( isinstance( other, self.__class__ ) and + not(other.parseAction) and + other.resultsName is None and + not other.debug ): + self.exprs = self.exprs[:-1] + other.exprs[:] + self.strRepr = None + self.mayReturnEmpty |= other.mayReturnEmpty + self.mayIndexError |= other.mayIndexError + + self.errmsg = "Expected " + _ustr(self) + + return self + + def setResultsName( self, name, listAllMatches=False ): + ret = super(ParseExpression,self).setResultsName(name,listAllMatches) + return ret + + def validate( self, validateTrace=[] ): + tmp = validateTrace[:]+[self] + for e in self.exprs: + e.validate(tmp) + self.checkRecursion( [] ) + + def copy(self): + ret = super(ParseExpression,self).copy() + ret.exprs = [e.copy() for e in self.exprs] + return ret + +class And(ParseExpression): + """ + Requires all given C{ParseExpression}s to be found in the given order. + Expressions may be separated by whitespace. + May be constructed using the C{'+'} operator. + May also be constructed using the C{'-'} operator, which will suppress backtracking. + + Example:: + integer = Word(nums) + name_expr = OneOrMore(Word(alphas)) + + expr = And([integer("id"),name_expr("name"),integer("age")]) + # more easily written as: + expr = integer("id") + name_expr("name") + integer("age") + """ + + class _ErrorStop(Empty): + def __init__(self, *args, **kwargs): + super(And._ErrorStop,self).__init__(*args, **kwargs) + self.name = '-' + self.leaveWhitespace() + + def __init__( self, exprs, savelist = True ): + super(And,self).__init__(exprs, savelist) + self.mayReturnEmpty = all(e.mayReturnEmpty for e in self.exprs) + self.setWhitespaceChars( self.exprs[0].whiteChars ) + self.skipWhitespace = self.exprs[0].skipWhitespace + self.callPreparse = True + + def parseImpl( self, instring, loc, doActions=True ): + # pass False as last arg to _parse for first element, since we already + # pre-parsed the string as part of our And pre-parsing + loc, resultlist = self.exprs[0]._parse( instring, loc, doActions, callPreParse=False ) + errorStop = False + for e in self.exprs[1:]: + if isinstance(e, And._ErrorStop): + errorStop = True + continue + if errorStop: + try: + loc, exprtokens = e._parse( instring, loc, doActions ) + except ParseSyntaxException: + raise + except ParseBaseException as pe: + pe.__traceback__ = None + raise ParseSyntaxException._from_exception(pe) + except IndexError: + raise ParseSyntaxException(instring, len(instring), self.errmsg, self) + else: + loc, exprtokens = e._parse( instring, loc, doActions ) + if exprtokens or exprtokens.haskeys(): + resultlist += exprtokens + return loc, resultlist + + def __iadd__(self, other ): + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + return self.append( other ) #And( [ self, other ] ) + + def checkRecursion( self, parseElementList ): + subRecCheckList = parseElementList[:] + [ self ] + for e in self.exprs: + e.checkRecursion( subRecCheckList ) + if not e.mayReturnEmpty: + break + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "{" + " ".join(_ustr(e) for e in self.exprs) + "}" + + return self.strRepr + + +class Or(ParseExpression): + """ + Requires that at least one C{ParseExpression} is found. + If two expressions match, the expression that matches the longest string will be used. + May be constructed using the C{'^'} operator. + + Example:: + # construct Or using '^' operator + + number = Word(nums) ^ Combine(Word(nums) + '.' + Word(nums)) + print(number.searchString("123 3.1416 789")) + prints:: + [['123'], ['3.1416'], ['789']] + """ + def __init__( self, exprs, savelist = False ): + super(Or,self).__init__(exprs, savelist) + if self.exprs: + self.mayReturnEmpty = any(e.mayReturnEmpty for e in self.exprs) + else: + self.mayReturnEmpty = True + + def parseImpl( self, instring, loc, doActions=True ): + maxExcLoc = -1 + maxException = None + matches = [] + for e in self.exprs: + try: + loc2 = e.tryParse( instring, loc ) + except ParseException as err: + err.__traceback__ = None + if err.loc > maxExcLoc: + maxException = err + maxExcLoc = err.loc + except IndexError: + if len(instring) > maxExcLoc: + maxException = ParseException(instring,len(instring),e.errmsg,self) + maxExcLoc = len(instring) + else: + # save match among all matches, to retry longest to shortest + matches.append((loc2, e)) + + if matches: + matches.sort(key=lambda x: -x[0]) + for _,e in matches: + try: + return e._parse( instring, loc, doActions ) + except ParseException as err: + err.__traceback__ = None + if err.loc > maxExcLoc: + maxException = err + maxExcLoc = err.loc + + if maxException is not None: + maxException.msg = self.errmsg + raise maxException + else: + raise ParseException(instring, loc, "no defined alternatives to match", self) + + + def __ixor__(self, other ): + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + return self.append( other ) #Or( [ self, other ] ) + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "{" + " ^ ".join(_ustr(e) for e in self.exprs) + "}" + + return self.strRepr + + def checkRecursion( self, parseElementList ): + subRecCheckList = parseElementList[:] + [ self ] + for e in self.exprs: + e.checkRecursion( subRecCheckList ) + + +class MatchFirst(ParseExpression): + """ + Requires that at least one C{ParseExpression} is found. + If two expressions match, the first one listed is the one that will match. + May be constructed using the C{'|'} operator. + + Example:: + # construct MatchFirst using '|' operator + + # watch the order of expressions to match + number = Word(nums) | Combine(Word(nums) + '.' + Word(nums)) + print(number.searchString("123 3.1416 789")) # Fail! -> [['123'], ['3'], ['1416'], ['789']] + + # put more selective expression first + number = Combine(Word(nums) + '.' + Word(nums)) | Word(nums) + print(number.searchString("123 3.1416 789")) # Better -> [['123'], ['3.1416'], ['789']] + """ + def __init__( self, exprs, savelist = False ): + super(MatchFirst,self).__init__(exprs, savelist) + if self.exprs: + self.mayReturnEmpty = any(e.mayReturnEmpty for e in self.exprs) + else: + self.mayReturnEmpty = True + + def parseImpl( self, instring, loc, doActions=True ): + maxExcLoc = -1 + maxException = None + for e in self.exprs: + try: + ret = e._parse( instring, loc, doActions ) + return ret + except ParseException as err: + if err.loc > maxExcLoc: + maxException = err + maxExcLoc = err.loc + except IndexError: + if len(instring) > maxExcLoc: + maxException = ParseException(instring,len(instring),e.errmsg,self) + maxExcLoc = len(instring) + + # only got here if no expression matched, raise exception for match that made it the furthest + else: + if maxException is not None: + maxException.msg = self.errmsg + raise maxException + else: + raise ParseException(instring, loc, "no defined alternatives to match", self) + + def __ior__(self, other ): + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + return self.append( other ) #MatchFirst( [ self, other ] ) + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "{" + " | ".join(_ustr(e) for e in self.exprs) + "}" + + return self.strRepr + + def checkRecursion( self, parseElementList ): + subRecCheckList = parseElementList[:] + [ self ] + for e in self.exprs: + e.checkRecursion( subRecCheckList ) + + +class Each(ParseExpression): + """ + Requires all given C{ParseExpression}s to be found, but in any order. + Expressions may be separated by whitespace. + May be constructed using the C{'&'} operator. + + Example:: + color = oneOf("RED ORANGE YELLOW GREEN BLUE PURPLE BLACK WHITE BROWN") + shape_type = oneOf("SQUARE CIRCLE TRIANGLE STAR HEXAGON OCTAGON") + integer = Word(nums) + shape_attr = "shape:" + shape_type("shape") + posn_attr = "posn:" + Group(integer("x") + ',' + integer("y"))("posn") + color_attr = "color:" + color("color") + size_attr = "size:" + integer("size") + + # use Each (using operator '&') to accept attributes in any order + # (shape and posn are required, color and size are optional) + shape_spec = shape_attr & posn_attr & Optional(color_attr) & Optional(size_attr) + + shape_spec.runTests(''' + shape: SQUARE color: BLACK posn: 100, 120 + shape: CIRCLE size: 50 color: BLUE posn: 50,80 + color:GREEN size:20 shape:TRIANGLE posn:20,40 + ''' + ) + prints:: + shape: SQUARE color: BLACK posn: 100, 120 + ['shape:', 'SQUARE', 'color:', 'BLACK', 'posn:', ['100', ',', '120']] + - color: BLACK + - posn: ['100', ',', '120'] + - x: 100 + - y: 120 + - shape: SQUARE + + + shape: CIRCLE size: 50 color: BLUE posn: 50,80 + ['shape:', 'CIRCLE', 'size:', '50', 'color:', 'BLUE', 'posn:', ['50', ',', '80']] + - color: BLUE + - posn: ['50', ',', '80'] + - x: 50 + - y: 80 + - shape: CIRCLE + - size: 50 + + + color: GREEN size: 20 shape: TRIANGLE posn: 20,40 + ['color:', 'GREEN', 'size:', '20', 'shape:', 'TRIANGLE', 'posn:', ['20', ',', '40']] + - color: GREEN + - posn: ['20', ',', '40'] + - x: 20 + - y: 40 + - shape: TRIANGLE + - size: 20 + """ + def __init__( self, exprs, savelist = True ): + super(Each,self).__init__(exprs, savelist) + self.mayReturnEmpty = all(e.mayReturnEmpty for e in self.exprs) + self.skipWhitespace = True + self.initExprGroups = True + + def parseImpl( self, instring, loc, doActions=True ): + if self.initExprGroups: + self.opt1map = dict((id(e.expr),e) for e in self.exprs if isinstance(e,Optional)) + opt1 = [ e.expr for e in self.exprs if isinstance(e,Optional) ] + opt2 = [ e for e in self.exprs if e.mayReturnEmpty and not isinstance(e,Optional)] + self.optionals = opt1 + opt2 + self.multioptionals = [ e.expr for e in self.exprs if isinstance(e,ZeroOrMore) ] + self.multirequired = [ e.expr for e in self.exprs if isinstance(e,OneOrMore) ] + self.required = [ e for e in self.exprs if not isinstance(e,(Optional,ZeroOrMore,OneOrMore)) ] + self.required += self.multirequired + self.initExprGroups = False + tmpLoc = loc + tmpReqd = self.required[:] + tmpOpt = self.optionals[:] + matchOrder = [] + + keepMatching = True + while keepMatching: + tmpExprs = tmpReqd + tmpOpt + self.multioptionals + self.multirequired + failed = [] + for e in tmpExprs: + try: + tmpLoc = e.tryParse( instring, tmpLoc ) + except ParseException: + failed.append(e) + else: + matchOrder.append(self.opt1map.get(id(e),e)) + if e in tmpReqd: + tmpReqd.remove(e) + elif e in tmpOpt: + tmpOpt.remove(e) + if len(failed) == len(tmpExprs): + keepMatching = False + + if tmpReqd: + missing = ", ".join(_ustr(e) for e in tmpReqd) + raise ParseException(instring,loc,"Missing one or more required elements (%s)" % missing ) + + # add any unmatched Optionals, in case they have default values defined + matchOrder += [e for e in self.exprs if isinstance(e,Optional) and e.expr in tmpOpt] + + resultlist = [] + for e in matchOrder: + loc,results = e._parse(instring,loc,doActions) + resultlist.append(results) + + finalResults = sum(resultlist, ParseResults([])) + return loc, finalResults + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "{" + " & ".join(_ustr(e) for e in self.exprs) + "}" + + return self.strRepr + + def checkRecursion( self, parseElementList ): + subRecCheckList = parseElementList[:] + [ self ] + for e in self.exprs: + e.checkRecursion( subRecCheckList ) + + +class ParseElementEnhance(ParserElement): + """ + Abstract subclass of C{ParserElement}, for combining and post-processing parsed tokens. + """ + def __init__( self, expr, savelist=False ): + super(ParseElementEnhance,self).__init__(savelist) + if isinstance( expr, basestring ): + if issubclass(ParserElement._literalStringClass, Token): + expr = ParserElement._literalStringClass(expr) + else: + expr = ParserElement._literalStringClass(Literal(expr)) + self.expr = expr + self.strRepr = None + if expr is not None: + self.mayIndexError = expr.mayIndexError + self.mayReturnEmpty = expr.mayReturnEmpty + self.setWhitespaceChars( expr.whiteChars ) + self.skipWhitespace = expr.skipWhitespace + self.saveAsList = expr.saveAsList + self.callPreparse = expr.callPreparse + self.ignoreExprs.extend(expr.ignoreExprs) + + def parseImpl( self, instring, loc, doActions=True ): + if self.expr is not None: + return self.expr._parse( instring, loc, doActions, callPreParse=False ) + else: + raise ParseException("",loc,self.errmsg,self) + + def leaveWhitespace( self ): + self.skipWhitespace = False + self.expr = self.expr.copy() + if self.expr is not None: + self.expr.leaveWhitespace() + return self + + def ignore( self, other ): + if isinstance( other, Suppress ): + if other not in self.ignoreExprs: + super( ParseElementEnhance, self).ignore( other ) + if self.expr is not None: + self.expr.ignore( self.ignoreExprs[-1] ) + else: + super( ParseElementEnhance, self).ignore( other ) + if self.expr is not None: + self.expr.ignore( self.ignoreExprs[-1] ) + return self + + def streamline( self ): + super(ParseElementEnhance,self).streamline() + if self.expr is not None: + self.expr.streamline() + return self + + def checkRecursion( self, parseElementList ): + if self in parseElementList: + raise RecursiveGrammarException( parseElementList+[self] ) + subRecCheckList = parseElementList[:] + [ self ] + if self.expr is not None: + self.expr.checkRecursion( subRecCheckList ) + + def validate( self, validateTrace=[] ): + tmp = validateTrace[:]+[self] + if self.expr is not None: + self.expr.validate(tmp) + self.checkRecursion( [] ) + + def __str__( self ): + try: + return super(ParseElementEnhance,self).__str__() + except Exception: + pass + + if self.strRepr is None and self.expr is not None: + self.strRepr = "%s:(%s)" % ( self.__class__.__name__, _ustr(self.expr) ) + return self.strRepr + + +class FollowedBy(ParseElementEnhance): + """ + Lookahead matching of the given parse expression. C{FollowedBy} + does I{not} advance the parsing position within the input string, it only + verifies that the specified parse expression matches at the current + position. C{FollowedBy} always returns a null token list. + + Example:: + # use FollowedBy to match a label only if it is followed by a ':' + data_word = Word(alphas) + label = data_word + FollowedBy(':') + attr_expr = Group(label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join)) + + OneOrMore(attr_expr).parseString("shape: SQUARE color: BLACK posn: upper left").pprint() + prints:: + [['shape', 'SQUARE'], ['color', 'BLACK'], ['posn', 'upper left']] + """ + def __init__( self, expr ): + super(FollowedBy,self).__init__(expr) + self.mayReturnEmpty = True + + def parseImpl( self, instring, loc, doActions=True ): + self.expr.tryParse( instring, loc ) + return loc, [] + + +class NotAny(ParseElementEnhance): + """ + Lookahead to disallow matching with the given parse expression. C{NotAny} + does I{not} advance the parsing position within the input string, it only + verifies that the specified parse expression does I{not} match at the current + position. Also, C{NotAny} does I{not} skip over leading whitespace. C{NotAny} + always returns a null token list. May be constructed using the '~' operator. + + Example:: + + """ + def __init__( self, expr ): + super(NotAny,self).__init__(expr) + #~ self.leaveWhitespace() + self.skipWhitespace = False # do NOT use self.leaveWhitespace(), don't want to propagate to exprs + self.mayReturnEmpty = True + self.errmsg = "Found unwanted token, "+_ustr(self.expr) + + def parseImpl( self, instring, loc, doActions=True ): + if self.expr.canParseNext(instring, loc): + raise ParseException(instring, loc, self.errmsg, self) + return loc, [] + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "~{" + _ustr(self.expr) + "}" + + return self.strRepr + +class _MultipleMatch(ParseElementEnhance): + def __init__( self, expr, stopOn=None): + super(_MultipleMatch, self).__init__(expr) + self.saveAsList = True + ender = stopOn + if isinstance(ender, basestring): + ender = ParserElement._literalStringClass(ender) + self.not_ender = ~ender if ender is not None else None + + def parseImpl( self, instring, loc, doActions=True ): + self_expr_parse = self.expr._parse + self_skip_ignorables = self._skipIgnorables + check_ender = self.not_ender is not None + if check_ender: + try_not_ender = self.not_ender.tryParse + + # must be at least one (but first see if we are the stopOn sentinel; + # if so, fail) + if check_ender: + try_not_ender(instring, loc) + loc, tokens = self_expr_parse( instring, loc, doActions, callPreParse=False ) + try: + hasIgnoreExprs = (not not self.ignoreExprs) + while 1: + if check_ender: + try_not_ender(instring, loc) + if hasIgnoreExprs: + preloc = self_skip_ignorables( instring, loc ) + else: + preloc = loc + loc, tmptokens = self_expr_parse( instring, preloc, doActions ) + if tmptokens or tmptokens.haskeys(): + tokens += tmptokens + except (ParseException,IndexError): + pass + + return loc, tokens + +class OneOrMore(_MultipleMatch): + """ + Repetition of one or more of the given expression. + + Parameters: + - expr - expression that must match one or more times + - stopOn - (default=C{None}) - expression for a terminating sentinel + (only required if the sentinel would ordinarily match the repetition + expression) + + Example:: + data_word = Word(alphas) + label = data_word + FollowedBy(':') + attr_expr = Group(label + Suppress(':') + OneOrMore(data_word).setParseAction(' '.join)) + + text = "shape: SQUARE posn: upper left color: BLACK" + OneOrMore(attr_expr).parseString(text).pprint() # Fail! read 'color' as data instead of next label -> [['shape', 'SQUARE color']] + + # use stopOn attribute for OneOrMore to avoid reading label string as part of the data + attr_expr = Group(label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join)) + OneOrMore(attr_expr).parseString(text).pprint() # Better -> [['shape', 'SQUARE'], ['posn', 'upper left'], ['color', 'BLACK']] + + # could also be written as + (attr_expr * (1,)).parseString(text).pprint() + """ + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "{" + _ustr(self.expr) + "}..." + + return self.strRepr + +class ZeroOrMore(_MultipleMatch): + """ + Optional repetition of zero or more of the given expression. + + Parameters: + - expr - expression that must match zero or more times + - stopOn - (default=C{None}) - expression for a terminating sentinel + (only required if the sentinel would ordinarily match the repetition + expression) + + Example: similar to L{OneOrMore} + """ + def __init__( self, expr, stopOn=None): + super(ZeroOrMore,self).__init__(expr, stopOn=stopOn) + self.mayReturnEmpty = True + + def parseImpl( self, instring, loc, doActions=True ): + try: + return super(ZeroOrMore, self).parseImpl(instring, loc, doActions) + except (ParseException,IndexError): + return loc, [] + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "[" + _ustr(self.expr) + "]..." + + return self.strRepr + +class _NullToken(object): + def __bool__(self): + return False + __nonzero__ = __bool__ + def __str__(self): + return "" + +_optionalNotMatched = _NullToken() +class Optional(ParseElementEnhance): + """ + Optional matching of the given expression. + + Parameters: + - expr - expression that must match zero or more times + - default (optional) - value to be returned if the optional expression is not found. + + Example:: + # US postal code can be a 5-digit zip, plus optional 4-digit qualifier + zip = Combine(Word(nums, exact=5) + Optional('-' + Word(nums, exact=4))) + zip.runTests(''' + # traditional ZIP code + 12345 + + # ZIP+4 form + 12101-0001 + + # invalid ZIP + 98765- + ''') + prints:: + # traditional ZIP code + 12345 + ['12345'] + + # ZIP+4 form + 12101-0001 + ['12101-0001'] + + # invalid ZIP + 98765- + ^ + FAIL: Expected end of text (at char 5), (line:1, col:6) + """ + def __init__( self, expr, default=_optionalNotMatched ): + super(Optional,self).__init__( expr, savelist=False ) + self.saveAsList = self.expr.saveAsList + self.defaultValue = default + self.mayReturnEmpty = True + + def parseImpl( self, instring, loc, doActions=True ): + try: + loc, tokens = self.expr._parse( instring, loc, doActions, callPreParse=False ) + except (ParseException,IndexError): + if self.defaultValue is not _optionalNotMatched: + if self.expr.resultsName: + tokens = ParseResults([ self.defaultValue ]) + tokens[self.expr.resultsName] = self.defaultValue + else: + tokens = [ self.defaultValue ] + else: + tokens = [] + return loc, tokens + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "[" + _ustr(self.expr) + "]" + + return self.strRepr + +class SkipTo(ParseElementEnhance): + """ + Token for skipping over all undefined text until the matched expression is found. + + Parameters: + - expr - target expression marking the end of the data to be skipped + - include - (default=C{False}) if True, the target expression is also parsed + (the skipped text and target expression are returned as a 2-element list). + - ignore - (default=C{None}) used to define grammars (typically quoted strings and + comments) that might contain false matches to the target expression + - failOn - (default=C{None}) define expressions that are not allowed to be + included in the skipped test; if found before the target expression is found, + the SkipTo is not a match + + Example:: + report = ''' + Outstanding Issues Report - 1 Jan 2000 + + # | Severity | Description | Days Open + -----+----------+-------------------------------------------+----------- + 101 | Critical | Intermittent system crash | 6 + 94 | Cosmetic | Spelling error on Login ('log|n') | 14 + 79 | Minor | System slow when running too many reports | 47 + ''' + integer = Word(nums) + SEP = Suppress('|') + # use SkipTo to simply match everything up until the next SEP + # - ignore quoted strings, so that a '|' character inside a quoted string does not match + # - parse action will call token.strip() for each matched token, i.e., the description body + string_data = SkipTo(SEP, ignore=quotedString) + string_data.setParseAction(tokenMap(str.strip)) + ticket_expr = (integer("issue_num") + SEP + + string_data("sev") + SEP + + string_data("desc") + SEP + + integer("days_open")) + + for tkt in ticket_expr.searchString(report): + print tkt.dump() + prints:: + ['101', 'Critical', 'Intermittent system crash', '6'] + - days_open: 6 + - desc: Intermittent system crash + - issue_num: 101 + - sev: Critical + ['94', 'Cosmetic', "Spelling error on Login ('log|n')", '14'] + - days_open: 14 + - desc: Spelling error on Login ('log|n') + - issue_num: 94 + - sev: Cosmetic + ['79', 'Minor', 'System slow when running too many reports', '47'] + - days_open: 47 + - desc: System slow when running too many reports + - issue_num: 79 + - sev: Minor + """ + def __init__( self, other, include=False, ignore=None, failOn=None ): + super( SkipTo, self ).__init__( other ) + self.ignoreExpr = ignore + self.mayReturnEmpty = True + self.mayIndexError = False + self.includeMatch = include + self.asList = False + if isinstance(failOn, basestring): + self.failOn = ParserElement._literalStringClass(failOn) + else: + self.failOn = failOn + self.errmsg = "No match found for "+_ustr(self.expr) + + def parseImpl( self, instring, loc, doActions=True ): + startloc = loc + instrlen = len(instring) + expr = self.expr + expr_parse = self.expr._parse + self_failOn_canParseNext = self.failOn.canParseNext if self.failOn is not None else None + self_ignoreExpr_tryParse = self.ignoreExpr.tryParse if self.ignoreExpr is not None else None + + tmploc = loc + while tmploc <= instrlen: + if self_failOn_canParseNext is not None: + # break if failOn expression matches + if self_failOn_canParseNext(instring, tmploc): + break + + if self_ignoreExpr_tryParse is not None: + # advance past ignore expressions + while 1: + try: + tmploc = self_ignoreExpr_tryParse(instring, tmploc) + except ParseBaseException: + break + + try: + expr_parse(instring, tmploc, doActions=False, callPreParse=False) + except (ParseException, IndexError): + # no match, advance loc in string + tmploc += 1 + else: + # matched skipto expr, done + break + + else: + # ran off the end of the input string without matching skipto expr, fail + raise ParseException(instring, loc, self.errmsg, self) + + # build up return values + loc = tmploc + skiptext = instring[startloc:loc] + skipresult = ParseResults(skiptext) + + if self.includeMatch: + loc, mat = expr_parse(instring,loc,doActions,callPreParse=False) + skipresult += mat + + return loc, skipresult + +class Forward(ParseElementEnhance): + """ + Forward declaration of an expression to be defined later - + used for recursive grammars, such as algebraic infix notation. + When the expression is known, it is assigned to the C{Forward} variable using the '<<' operator. + + Note: take care when assigning to C{Forward} not to overlook precedence of operators. + Specifically, '|' has a lower precedence than '<<', so that:: + fwdExpr << a | b | c + will actually be evaluated as:: + (fwdExpr << a) | b | c + thereby leaving b and c out as parseable alternatives. It is recommended that you + explicitly group the values inserted into the C{Forward}:: + fwdExpr << (a | b | c) + Converting to use the '<<=' operator instead will avoid this problem. + + See L{ParseResults.pprint} for an example of a recursive parser created using + C{Forward}. + """ + def __init__( self, other=None ): + super(Forward,self).__init__( other, savelist=False ) + + def __lshift__( self, other ): + if isinstance( other, basestring ): + other = ParserElement._literalStringClass(other) + self.expr = other + self.strRepr = None + self.mayIndexError = self.expr.mayIndexError + self.mayReturnEmpty = self.expr.mayReturnEmpty + self.setWhitespaceChars( self.expr.whiteChars ) + self.skipWhitespace = self.expr.skipWhitespace + self.saveAsList = self.expr.saveAsList + self.ignoreExprs.extend(self.expr.ignoreExprs) + return self + + def __ilshift__(self, other): + return self << other + + def leaveWhitespace( self ): + self.skipWhitespace = False + return self + + def streamline( self ): + if not self.streamlined: + self.streamlined = True + if self.expr is not None: + self.expr.streamline() + return self + + def validate( self, validateTrace=[] ): + if self not in validateTrace: + tmp = validateTrace[:]+[self] + if self.expr is not None: + self.expr.validate(tmp) + self.checkRecursion([]) + + def __str__( self ): + if hasattr(self,"name"): + return self.name + return self.__class__.__name__ + ": ..." + + # stubbed out for now - creates awful memory and perf issues + self._revertClass = self.__class__ + self.__class__ = _ForwardNoRecurse + try: + if self.expr is not None: + retString = _ustr(self.expr) + else: + retString = "None" + finally: + self.__class__ = self._revertClass + return self.__class__.__name__ + ": " + retString + + def copy(self): + if self.expr is not None: + return super(Forward,self).copy() + else: + ret = Forward() + ret <<= self + return ret + +class _ForwardNoRecurse(Forward): + def __str__( self ): + return "..." + +class TokenConverter(ParseElementEnhance): + """ + Abstract subclass of C{ParseExpression}, for converting parsed results. + """ + def __init__( self, expr, savelist=False ): + super(TokenConverter,self).__init__( expr )#, savelist ) + self.saveAsList = False + +class Combine(TokenConverter): + """ + Converter to concatenate all matching tokens to a single string. + By default, the matching patterns must also be contiguous in the input string; + this can be disabled by specifying C{'adjacent=False'} in the constructor. + + Example:: + real = Word(nums) + '.' + Word(nums) + print(real.parseString('3.1416')) # -> ['3', '.', '1416'] + # will also erroneously match the following + print(real.parseString('3. 1416')) # -> ['3', '.', '1416'] + + real = Combine(Word(nums) + '.' + Word(nums)) + print(real.parseString('3.1416')) # -> ['3.1416'] + # no match when there are internal spaces + print(real.parseString('3. 1416')) # -> Exception: Expected W:(0123...) + """ + def __init__( self, expr, joinString="", adjacent=True ): + super(Combine,self).__init__( expr ) + # suppress whitespace-stripping in contained parse expressions, but re-enable it on the Combine itself + if adjacent: + self.leaveWhitespace() + self.adjacent = adjacent + self.skipWhitespace = True + self.joinString = joinString + self.callPreparse = True + + def ignore( self, other ): + if self.adjacent: + ParserElement.ignore(self, other) + else: + super( Combine, self).ignore( other ) + return self + + def postParse( self, instring, loc, tokenlist ): + retToks = tokenlist.copy() + del retToks[:] + retToks += ParseResults([ "".join(tokenlist._asStringList(self.joinString)) ], modal=self.modalResults) + + if self.resultsName and retToks.haskeys(): + return [ retToks ] + else: + return retToks + +class Group(TokenConverter): + """ + Converter to return the matched tokens as a list - useful for returning tokens of C{L{ZeroOrMore}} and C{L{OneOrMore}} expressions. + + Example:: + ident = Word(alphas) + num = Word(nums) + term = ident | num + func = ident + Optional(delimitedList(term)) + print(func.parseString("fn a,b,100")) # -> ['fn', 'a', 'b', '100'] + + func = ident + Group(Optional(delimitedList(term))) + print(func.parseString("fn a,b,100")) # -> ['fn', ['a', 'b', '100']] + """ + def __init__( self, expr ): + super(Group,self).__init__( expr ) + self.saveAsList = True + + def postParse( self, instring, loc, tokenlist ): + return [ tokenlist ] + +class Dict(TokenConverter): + """ + Converter to return a repetitive expression as a list, but also as a dictionary. + Each element can also be referenced using the first token in the expression as its key. + Useful for tabular report scraping when the first column can be used as a item key. + + Example:: + data_word = Word(alphas) + label = data_word + FollowedBy(':') + attr_expr = Group(label + Suppress(':') + OneOrMore(data_word).setParseAction(' '.join)) + + text = "shape: SQUARE posn: upper left color: light blue texture: burlap" + attr_expr = (label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join)) + + # print attributes as plain groups + print(OneOrMore(attr_expr).parseString(text).dump()) + + # instead of OneOrMore(expr), parse using Dict(OneOrMore(Group(expr))) - Dict will auto-assign names + result = Dict(OneOrMore(Group(attr_expr))).parseString(text) + print(result.dump()) + + # access named fields as dict entries, or output as dict + print(result['shape']) + print(result.asDict()) + prints:: + ['shape', 'SQUARE', 'posn', 'upper left', 'color', 'light blue', 'texture', 'burlap'] + + [['shape', 'SQUARE'], ['posn', 'upper left'], ['color', 'light blue'], ['texture', 'burlap']] + - color: light blue + - posn: upper left + - shape: SQUARE + - texture: burlap + SQUARE + {'color': 'light blue', 'posn': 'upper left', 'texture': 'burlap', 'shape': 'SQUARE'} + See more examples at L{ParseResults} of accessing fields by results name. + """ + def __init__( self, expr ): + super(Dict,self).__init__( expr ) + self.saveAsList = True + + def postParse( self, instring, loc, tokenlist ): + for i,tok in enumerate(tokenlist): + if len(tok) == 0: + continue + ikey = tok[0] + if isinstance(ikey,int): + ikey = _ustr(tok[0]).strip() + if len(tok)==1: + tokenlist[ikey] = _ParseResultsWithOffset("",i) + elif len(tok)==2 and not isinstance(tok[1],ParseResults): + tokenlist[ikey] = _ParseResultsWithOffset(tok[1],i) + else: + dictvalue = tok.copy() #ParseResults(i) + del dictvalue[0] + if len(dictvalue)!= 1 or (isinstance(dictvalue,ParseResults) and dictvalue.haskeys()): + tokenlist[ikey] = _ParseResultsWithOffset(dictvalue,i) + else: + tokenlist[ikey] = _ParseResultsWithOffset(dictvalue[0],i) + + if self.resultsName: + return [ tokenlist ] + else: + return tokenlist + + +class Suppress(TokenConverter): + """ + Converter for ignoring the results of a parsed expression. + + Example:: + source = "a, b, c,d" + wd = Word(alphas) + wd_list1 = wd + ZeroOrMore(',' + wd) + print(wd_list1.parseString(source)) + + # often, delimiters that are useful during parsing are just in the + # way afterward - use Suppress to keep them out of the parsed output + wd_list2 = wd + ZeroOrMore(Suppress(',') + wd) + print(wd_list2.parseString(source)) + prints:: + ['a', ',', 'b', ',', 'c', ',', 'd'] + ['a', 'b', 'c', 'd'] + (See also L{delimitedList}.) + """ + def postParse( self, instring, loc, tokenlist ): + return [] + + def suppress( self ): + return self + + +class OnlyOnce(object): + """ + Wrapper for parse actions, to ensure they are only called once. + """ + def __init__(self, methodCall): + self.callable = _trim_arity(methodCall) + self.called = False + def __call__(self,s,l,t): + if not self.called: + results = self.callable(s,l,t) + self.called = True + return results + raise ParseException(s,l,"") + def reset(self): + self.called = False + +def traceParseAction(f): + """ + Decorator for debugging parse actions. + + When the parse action is called, this decorator will print C{">> entering I{method-name}(line:I{current_source_line}, I{parse_location}, I{matched_tokens})".} + When the parse action completes, the decorator will print C{"<<"} followed by the returned value, or any exception that the parse action raised. + + Example:: + wd = Word(alphas) + + @traceParseAction + def remove_duplicate_chars(tokens): + return ''.join(sorted(set(''.join(tokens))) + + wds = OneOrMore(wd).setParseAction(remove_duplicate_chars) + print(wds.parseString("slkdjs sld sldd sdlf sdljf")) + prints:: + >>entering remove_duplicate_chars(line: 'slkdjs sld sldd sdlf sdljf', 0, (['slkdjs', 'sld', 'sldd', 'sdlf', 'sdljf'], {})) + <<leaving remove_duplicate_chars (ret: 'dfjkls') + ['dfjkls'] + """ + f = _trim_arity(f) + def z(*paArgs): + thisFunc = f.__name__ + s,l,t = paArgs[-3:] + if len(paArgs)>3: + thisFunc = paArgs[0].__class__.__name__ + '.' + thisFunc + sys.stderr.write( ">>entering %s(line: '%s', %d, %r)\n" % (thisFunc,line(l,s),l,t) ) + try: + ret = f(*paArgs) + except Exception as exc: + sys.stderr.write( "<<leaving %s (exception: %s)\n" % (thisFunc,exc) ) + raise + sys.stderr.write( "<<leaving %s (ret: %r)\n" % (thisFunc,ret) ) + return ret + try: + z.__name__ = f.__name__ + except AttributeError: + pass + return z + +# +# global helpers +# +def delimitedList( expr, delim=",", combine=False ): + """ + Helper to define a delimited list of expressions - the delimiter defaults to ','. + By default, the list elements and delimiters can have intervening whitespace, and + comments, but this can be overridden by passing C{combine=True} in the constructor. + If C{combine} is set to C{True}, the matching tokens are returned as a single token + string, with the delimiters included; otherwise, the matching tokens are returned + as a list of tokens, with the delimiters suppressed. + + Example:: + delimitedList(Word(alphas)).parseString("aa,bb,cc") # -> ['aa', 'bb', 'cc'] + delimitedList(Word(hexnums), delim=':', combine=True).parseString("AA:BB:CC:DD:EE") # -> ['AA:BB:CC:DD:EE'] + """ + dlName = _ustr(expr)+" ["+_ustr(delim)+" "+_ustr(expr)+"]..." + if combine: + return Combine( expr + ZeroOrMore( delim + expr ) ).setName(dlName) + else: + return ( expr + ZeroOrMore( Suppress( delim ) + expr ) ).setName(dlName) + +def countedArray( expr, intExpr=None ): + """ + Helper to define a counted list of expressions. + This helper defines a pattern of the form:: + integer expr expr expr... + where the leading integer tells how many expr expressions follow. + The matched tokens returns the array of expr tokens as a list - the leading count token is suppressed. + + If C{intExpr} is specified, it should be a pyparsing expression that produces an integer value. + + Example:: + countedArray(Word(alphas)).parseString('2 ab cd ef') # -> ['ab', 'cd'] + + # in this parser, the leading integer value is given in binary, + # '10' indicating that 2 values are in the array + binaryConstant = Word('01').setParseAction(lambda t: int(t[0], 2)) + countedArray(Word(alphas), intExpr=binaryConstant).parseString('10 ab cd ef') # -> ['ab', 'cd'] + """ + arrayExpr = Forward() + def countFieldParseAction(s,l,t): + n = t[0] + arrayExpr << (n and Group(And([expr]*n)) or Group(empty)) + return [] + if intExpr is None: + intExpr = Word(nums).setParseAction(lambda t:int(t[0])) + else: + intExpr = intExpr.copy() + intExpr.setName("arrayLen") + intExpr.addParseAction(countFieldParseAction, callDuringTry=True) + return ( intExpr + arrayExpr ).setName('(len) ' + _ustr(expr) + '...') + +def _flatten(L): + ret = [] + for i in L: + if isinstance(i,list): + ret.extend(_flatten(i)) + else: + ret.append(i) + return ret + +def matchPreviousLiteral(expr): + """ + Helper to define an expression that is indirectly defined from + the tokens matched in a previous expression, that is, it looks + for a 'repeat' of a previous expression. For example:: + first = Word(nums) + second = matchPreviousLiteral(first) + matchExpr = first + ":" + second + will match C{"1:1"}, but not C{"1:2"}. Because this matches a + previous literal, will also match the leading C{"1:1"} in C{"1:10"}. + If this is not desired, use C{matchPreviousExpr}. + Do I{not} use with packrat parsing enabled. + """ + rep = Forward() + def copyTokenToRepeater(s,l,t): + if t: + if len(t) == 1: + rep << t[0] + else: + # flatten t tokens + tflat = _flatten(t.asList()) + rep << And(Literal(tt) for tt in tflat) + else: + rep << Empty() + expr.addParseAction(copyTokenToRepeater, callDuringTry=True) + rep.setName('(prev) ' + _ustr(expr)) + return rep + +def matchPreviousExpr(expr): + """ + Helper to define an expression that is indirectly defined from + the tokens matched in a previous expression, that is, it looks + for a 'repeat' of a previous expression. For example:: + first = Word(nums) + second = matchPreviousExpr(first) + matchExpr = first + ":" + second + will match C{"1:1"}, but not C{"1:2"}. Because this matches by + expressions, will I{not} match the leading C{"1:1"} in C{"1:10"}; + the expressions are evaluated first, and then compared, so + C{"1"} is compared with C{"10"}. + Do I{not} use with packrat parsing enabled. + """ + rep = Forward() + e2 = expr.copy() + rep <<= e2 + def copyTokenToRepeater(s,l,t): + matchTokens = _flatten(t.asList()) + def mustMatchTheseTokens(s,l,t): + theseTokens = _flatten(t.asList()) + if theseTokens != matchTokens: + raise ParseException("",0,"") + rep.setParseAction( mustMatchTheseTokens, callDuringTry=True ) + expr.addParseAction(copyTokenToRepeater, callDuringTry=True) + rep.setName('(prev) ' + _ustr(expr)) + return rep + +def _escapeRegexRangeChars(s): + #~ escape these chars: ^-] + for c in r"\^-]": + s = s.replace(c,_bslash+c) + s = s.replace("\n",r"\n") + s = s.replace("\t",r"\t") + return _ustr(s) + +def oneOf( strs, caseless=False, useRegex=True ): + """ + Helper to quickly define a set of alternative Literals, and makes sure to do + longest-first testing when there is a conflict, regardless of the input order, + but returns a C{L{MatchFirst}} for best performance. + + Parameters: + - strs - a string of space-delimited literals, or a collection of string literals + - caseless - (default=C{False}) - treat all literals as caseless + - useRegex - (default=C{True}) - as an optimization, will generate a Regex + object; otherwise, will generate a C{MatchFirst} object (if C{caseless=True}, or + if creating a C{Regex} raises an exception) + + Example:: + comp_oper = oneOf("< = > <= >= !=") + var = Word(alphas) + number = Word(nums) + term = var | number + comparison_expr = term + comp_oper + term + print(comparison_expr.searchString("B = 12 AA=23 B<=AA AA>12")) + prints:: + [['B', '=', '12'], ['AA', '=', '23'], ['B', '<=', 'AA'], ['AA', '>', '12']] + """ + if caseless: + isequal = ( lambda a,b: a.upper() == b.upper() ) + masks = ( lambda a,b: b.upper().startswith(a.upper()) ) + parseElementClass = CaselessLiteral + else: + isequal = ( lambda a,b: a == b ) + masks = ( lambda a,b: b.startswith(a) ) + parseElementClass = Literal + + symbols = [] + if isinstance(strs,basestring): + symbols = strs.split() + elif isinstance(strs, collections.Iterable): + symbols = list(strs) + else: + warnings.warn("Invalid argument to oneOf, expected string or iterable", + SyntaxWarning, stacklevel=2) + if not symbols: + return NoMatch() + + i = 0 + while i < len(symbols)-1: + cur = symbols[i] + for j,other in enumerate(symbols[i+1:]): + if ( isequal(other, cur) ): + del symbols[i+j+1] + break + elif ( masks(cur, other) ): + del symbols[i+j+1] + symbols.insert(i,other) + cur = other + break + else: + i += 1 + + if not caseless and useRegex: + #~ print (strs,"->", "|".join( [ _escapeRegexChars(sym) for sym in symbols] )) + try: + if len(symbols)==len("".join(symbols)): + return Regex( "[%s]" % "".join(_escapeRegexRangeChars(sym) for sym in symbols) ).setName(' | '.join(symbols)) + else: + return Regex( "|".join(re.escape(sym) for sym in symbols) ).setName(' | '.join(symbols)) + except Exception: + warnings.warn("Exception creating Regex for oneOf, building MatchFirst", + SyntaxWarning, stacklevel=2) + + + # last resort, just use MatchFirst + return MatchFirst(parseElementClass(sym) for sym in symbols).setName(' | '.join(symbols)) + +def dictOf( key, value ): + """ + Helper to easily and clearly define a dictionary by specifying the respective patterns + for the key and value. Takes care of defining the C{L{Dict}}, C{L{ZeroOrMore}}, and C{L{Group}} tokens + in the proper order. The key pattern can include delimiting markers or punctuation, + as long as they are suppressed, thereby leaving the significant key text. The value + pattern can include named results, so that the C{Dict} results can include named token + fields. + + Example:: + text = "shape: SQUARE posn: upper left color: light blue texture: burlap" + attr_expr = (label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join)) + print(OneOrMore(attr_expr).parseString(text).dump()) + + attr_label = label + attr_value = Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join) + + # similar to Dict, but simpler call format + result = dictOf(attr_label, attr_value).parseString(text) + print(result.dump()) + print(result['shape']) + print(result.shape) # object attribute access works too + print(result.asDict()) + prints:: + [['shape', 'SQUARE'], ['posn', 'upper left'], ['color', 'light blue'], ['texture', 'burlap']] + - color: light blue + - posn: upper left + - shape: SQUARE + - texture: burlap + SQUARE + SQUARE + {'color': 'light blue', 'shape': 'SQUARE', 'posn': 'upper left', 'texture': 'burlap'} + """ + return Dict( ZeroOrMore( Group ( key + value ) ) ) + +def originalTextFor(expr, asString=True): + """ + Helper to return the original, untokenized text for a given expression. Useful to + restore the parsed fields of an HTML start tag into the raw tag text itself, or to + revert separate tokens with intervening whitespace back to the original matching + input text. By default, returns astring containing the original parsed text. + + If the optional C{asString} argument is passed as C{False}, then the return value is a + C{L{ParseResults}} containing any results names that were originally matched, and a + single token containing the original matched text from the input string. So if + the expression passed to C{L{originalTextFor}} contains expressions with defined + results names, you must set C{asString} to C{False} if you want to preserve those + results name values. + + Example:: + src = "this is test <b> bold <i>text</i> </b> normal text " + for tag in ("b","i"): + opener,closer = makeHTMLTags(tag) + patt = originalTextFor(opener + SkipTo(closer) + closer) + print(patt.searchString(src)[0]) + prints:: + ['<b> bold <i>text</i> </b>'] + ['<i>text</i>'] + """ + locMarker = Empty().setParseAction(lambda s,loc,t: loc) + endlocMarker = locMarker.copy() + endlocMarker.callPreparse = False + matchExpr = locMarker("_original_start") + expr + endlocMarker("_original_end") + if asString: + extractText = lambda s,l,t: s[t._original_start:t._original_end] + else: + def extractText(s,l,t): + t[:] = [s[t.pop('_original_start'):t.pop('_original_end')]] + matchExpr.setParseAction(extractText) + matchExpr.ignoreExprs = expr.ignoreExprs + return matchExpr + +def ungroup(expr): + """ + Helper to undo pyparsing's default grouping of And expressions, even + if all but one are non-empty. + """ + return TokenConverter(expr).setParseAction(lambda t:t[0]) + +def locatedExpr(expr): + """ + Helper to decorate a returned token with its starting and ending locations in the input string. + This helper adds the following results names: + - locn_start = location where matched expression begins + - locn_end = location where matched expression ends + - value = the actual parsed results + + Be careful if the input text contains C{<TAB>} characters, you may want to call + C{L{ParserElement.parseWithTabs}} + + Example:: + wd = Word(alphas) + for match in locatedExpr(wd).searchString("ljsdf123lksdjjf123lkkjj1222"): + print(match) + prints:: + [[0, 'ljsdf', 5]] + [[8, 'lksdjjf', 15]] + [[18, 'lkkjj', 23]] + """ + locator = Empty().setParseAction(lambda s,l,t: l) + return Group(locator("locn_start") + expr("value") + locator.copy().leaveWhitespace()("locn_end")) + + +# convenience constants for positional expressions +empty = Empty().setName("empty") +lineStart = LineStart().setName("lineStart") +lineEnd = LineEnd().setName("lineEnd") +stringStart = StringStart().setName("stringStart") +stringEnd = StringEnd().setName("stringEnd") + +_escapedPunc = Word( _bslash, r"\[]-*.$+^?()~ ", exact=2 ).setParseAction(lambda s,l,t:t[0][1]) +_escapedHexChar = Regex(r"\\0?[xX][0-9a-fA-F]+").setParseAction(lambda s,l,t:unichr(int(t[0].lstrip(r'\0x'),16))) +_escapedOctChar = Regex(r"\\0[0-7]+").setParseAction(lambda s,l,t:unichr(int(t[0][1:],8))) +_singleChar = _escapedPunc | _escapedHexChar | _escapedOctChar | Word(printables, excludeChars=r'\]', exact=1) | Regex(r"\w", re.UNICODE) +_charRange = Group(_singleChar + Suppress("-") + _singleChar) +_reBracketExpr = Literal("[") + Optional("^").setResultsName("negate") + Group( OneOrMore( _charRange | _singleChar ) ).setResultsName("body") + "]" + +def srange(s): + r""" + Helper to easily define string ranges for use in Word construction. Borrows + syntax from regexp '[]' string range definitions:: + srange("[0-9]") -> "0123456789" + srange("[a-z]") -> "abcdefghijklmnopqrstuvwxyz" + srange("[a-z$_]") -> "abcdefghijklmnopqrstuvwxyz$_" + The input string must be enclosed in []'s, and the returned string is the expanded + character set joined into a single string. + The values enclosed in the []'s may be: + - a single character + - an escaped character with a leading backslash (such as C{\-} or C{\]}) + - an escaped hex character with a leading C{'\x'} (C{\x21}, which is a C{'!'} character) + (C{\0x##} is also supported for backwards compatibility) + - an escaped octal character with a leading C{'\0'} (C{\041}, which is a C{'!'} character) + - a range of any of the above, separated by a dash (C{'a-z'}, etc.) + - any combination of the above (C{'aeiouy'}, C{'a-zA-Z0-9_$'}, etc.) + """ + _expanded = lambda p: p if not isinstance(p,ParseResults) else ''.join(unichr(c) for c in range(ord(p[0]),ord(p[1])+1)) + try: + return "".join(_expanded(part) for part in _reBracketExpr.parseString(s).body) + except Exception: + return "" + +def matchOnlyAtCol(n): + """ + Helper method for defining parse actions that require matching at a specific + column in the input text. + """ + def verifyCol(strg,locn,toks): + if col(locn,strg) != n: + raise ParseException(strg,locn,"matched token not at column %d" % n) + return verifyCol + +def replaceWith(replStr): + """ + Helper method for common parse actions that simply return a literal value. Especially + useful when used with C{L{transformString<ParserElement.transformString>}()}. + + Example:: + num = Word(nums).setParseAction(lambda toks: int(toks[0])) + na = oneOf("N/A NA").setParseAction(replaceWith(math.nan)) + term = na | num + + OneOrMore(term).parseString("324 234 N/A 234") # -> [324, 234, nan, 234] + """ + return lambda s,l,t: [replStr] + +def removeQuotes(s,l,t): + """ + Helper parse action for removing quotation marks from parsed quoted strings. + + Example:: + # by default, quotation marks are included in parsed results + quotedString.parseString("'Now is the Winter of our Discontent'") # -> ["'Now is the Winter of our Discontent'"] + + # use removeQuotes to strip quotation marks from parsed results + quotedString.setParseAction(removeQuotes) + quotedString.parseString("'Now is the Winter of our Discontent'") # -> ["Now is the Winter of our Discontent"] + """ + return t[0][1:-1] + +def tokenMap(func, *args): + """ + Helper to define a parse action by mapping a function to all elements of a ParseResults list.If any additional + args are passed, they are forwarded to the given function as additional arguments after + the token, as in C{hex_integer = Word(hexnums).setParseAction(tokenMap(int, 16))}, which will convert the + parsed data to an integer using base 16. + + Example (compare the last to example in L{ParserElement.transformString}:: + hex_ints = OneOrMore(Word(hexnums)).setParseAction(tokenMap(int, 16)) + hex_ints.runTests(''' + 00 11 22 aa FF 0a 0d 1a + ''') + + upperword = Word(alphas).setParseAction(tokenMap(str.upper)) + OneOrMore(upperword).runTests(''' + my kingdom for a horse + ''') + + wd = Word(alphas).setParseAction(tokenMap(str.title)) + OneOrMore(wd).setParseAction(' '.join).runTests(''' + now is the winter of our discontent made glorious summer by this sun of york + ''') + prints:: + 00 11 22 aa FF 0a 0d 1a + [0, 17, 34, 170, 255, 10, 13, 26] + + my kingdom for a horse + ['MY', 'KINGDOM', 'FOR', 'A', 'HORSE'] + + now is the winter of our discontent made glorious summer by this sun of york + ['Now Is The Winter Of Our Discontent Made Glorious Summer By This Sun Of York'] + """ + def pa(s,l,t): + return [func(tokn, *args) for tokn in t] + + try: + func_name = getattr(func, '__name__', + getattr(func, '__class__').__name__) + except Exception: + func_name = str(func) + pa.__name__ = func_name + + return pa + +upcaseTokens = tokenMap(lambda t: _ustr(t).upper()) +"""(Deprecated) Helper parse action to convert tokens to upper case. Deprecated in favor of L{pyparsing_common.upcaseTokens}""" + +downcaseTokens = tokenMap(lambda t: _ustr(t).lower()) +"""(Deprecated) Helper parse action to convert tokens to lower case. Deprecated in favor of L{pyparsing_common.downcaseTokens}""" + +def _makeTags(tagStr, xml): + """Internal helper to construct opening and closing tag expressions, given a tag name""" + if isinstance(tagStr,basestring): + resname = tagStr + tagStr = Keyword(tagStr, caseless=not xml) + else: + resname = tagStr.name + + tagAttrName = Word(alphas,alphanums+"_-:") + if (xml): + tagAttrValue = dblQuotedString.copy().setParseAction( removeQuotes ) + openTag = Suppress("<") + tagStr("tag") + \ + Dict(ZeroOrMore(Group( tagAttrName + Suppress("=") + tagAttrValue ))) + \ + Optional("/",default=[False]).setResultsName("empty").setParseAction(lambda s,l,t:t[0]=='/') + Suppress(">") + else: + printablesLessRAbrack = "".join(c for c in printables if c not in ">") + tagAttrValue = quotedString.copy().setParseAction( removeQuotes ) | Word(printablesLessRAbrack) + openTag = Suppress("<") + tagStr("tag") + \ + Dict(ZeroOrMore(Group( tagAttrName.setParseAction(downcaseTokens) + \ + Optional( Suppress("=") + tagAttrValue ) ))) + \ + Optional("/",default=[False]).setResultsName("empty").setParseAction(lambda s,l,t:t[0]=='/') + Suppress(">") + closeTag = Combine(_L("</") + tagStr + ">") + + openTag = openTag.setResultsName("start"+"".join(resname.replace(":"," ").title().split())).setName("<%s>" % resname) + closeTag = closeTag.setResultsName("end"+"".join(resname.replace(":"," ").title().split())).setName("</%s>" % resname) + openTag.tag = resname + closeTag.tag = resname + return openTag, closeTag + +def makeHTMLTags(tagStr): + """ + Helper to construct opening and closing tag expressions for HTML, given a tag name. Matches + tags in either upper or lower case, attributes with namespaces and with quoted or unquoted values. + + Example:: + text = '<td>More info at the <a href="http://pyparsing.wikispaces.com">pyparsing</a> wiki page</td>' + # makeHTMLTags returns pyparsing expressions for the opening and closing tags as a 2-tuple + a,a_end = makeHTMLTags("A") + link_expr = a + SkipTo(a_end)("link_text") + a_end + + for link in link_expr.searchString(text): + # attributes in the <A> tag (like "href" shown here) are also accessible as named results + print(link.link_text, '->', link.href) + prints:: + pyparsing -> http://pyparsing.wikispaces.com + """ + return _makeTags( tagStr, False ) + +def makeXMLTags(tagStr): + """ + Helper to construct opening and closing tag expressions for XML, given a tag name. Matches + tags only in the given upper/lower case. + + Example: similar to L{makeHTMLTags} + """ + return _makeTags( tagStr, True ) + +def withAttribute(*args,**attrDict): + """ + Helper to create a validating parse action to be used with start tags created + with C{L{makeXMLTags}} or C{L{makeHTMLTags}}. Use C{withAttribute} to qualify a starting tag + with a required attribute value, to avoid false matches on common tags such as + C{<TD>} or C{<DIV>}. + + Call C{withAttribute} with a series of attribute names and values. Specify the list + of filter attributes names and values as: + - keyword arguments, as in C{(align="right")}, or + - as an explicit dict with C{**} operator, when an attribute name is also a Python + reserved word, as in C{**{"class":"Customer", "align":"right"}} + - a list of name-value tuples, as in ( ("ns1:class", "Customer"), ("ns2:align","right") ) + For attribute names with a namespace prefix, you must use the second form. Attribute + names are matched insensitive to upper/lower case. + + If just testing for C{class} (with or without a namespace), use C{L{withClass}}. + + To verify that the attribute exists, but without specifying a value, pass + C{withAttribute.ANY_VALUE} as the value. + + Example:: + html = ''' + <div> + Some text + <div type="grid">1 4 0 1 0</div> + <div type="graph">1,3 2,3 1,1</div> + <div>this has no type</div> + </div> + + ''' + div,div_end = makeHTMLTags("div") + + # only match div tag having a type attribute with value "grid" + div_grid = div().setParseAction(withAttribute(type="grid")) + grid_expr = div_grid + SkipTo(div | div_end)("body") + for grid_header in grid_expr.searchString(html): + print(grid_header.body) + + # construct a match with any div tag having a type attribute, regardless of the value + div_any_type = div().setParseAction(withAttribute(type=withAttribute.ANY_VALUE)) + div_expr = div_any_type + SkipTo(div | div_end)("body") + for div_header in div_expr.searchString(html): + print(div_header.body) + prints:: + 1 4 0 1 0 + + 1 4 0 1 0 + 1,3 2,3 1,1 + """ + if args: + attrs = args[:] + else: + attrs = attrDict.items() + attrs = [(k,v) for k,v in attrs] + def pa(s,l,tokens): + for attrName,attrValue in attrs: + if attrName not in tokens: + raise ParseException(s,l,"no matching attribute " + attrName) + if attrValue != withAttribute.ANY_VALUE and tokens[attrName] != attrValue: + raise ParseException(s,l,"attribute '%s' has value '%s', must be '%s'" % + (attrName, tokens[attrName], attrValue)) + return pa +withAttribute.ANY_VALUE = object() + +def withClass(classname, namespace=''): + """ + Simplified version of C{L{withAttribute}} when matching on a div class - made + difficult because C{class} is a reserved word in Python. + + Example:: + html = ''' + <div> + Some text + <div class="grid">1 4 0 1 0</div> + <div class="graph">1,3 2,3 1,1</div> + <div>this <div> has no class</div> + </div> + + ''' + div,div_end = makeHTMLTags("div") + div_grid = div().setParseAction(withClass("grid")) + + grid_expr = div_grid + SkipTo(div | div_end)("body") + for grid_header in grid_expr.searchString(html): + print(grid_header.body) + + div_any_type = div().setParseAction(withClass(withAttribute.ANY_VALUE)) + div_expr = div_any_type + SkipTo(div | div_end)("body") + for div_header in div_expr.searchString(html): + print(div_header.body) + prints:: + 1 4 0 1 0 + + 1 4 0 1 0 + 1,3 2,3 1,1 + """ + classattr = "%s:class" % namespace if namespace else "class" + return withAttribute(**{classattr : classname}) + +opAssoc = _Constants() +opAssoc.LEFT = object() +opAssoc.RIGHT = object() + +def infixNotation( baseExpr, opList, lpar=Suppress('('), rpar=Suppress(')') ): + """ + Helper method for constructing grammars of expressions made up of + operators working in a precedence hierarchy. Operators may be unary or + binary, left- or right-associative. Parse actions can also be attached + to operator expressions. The generated parser will also recognize the use + of parentheses to override operator precedences (see example below). + + Note: if you define a deep operator list, you may see performance issues + when using infixNotation. See L{ParserElement.enablePackrat} for a + mechanism to potentially improve your parser performance. + + Parameters: + - baseExpr - expression representing the most basic element for the nested + - opList - list of tuples, one for each operator precedence level in the + expression grammar; each tuple is of the form + (opExpr, numTerms, rightLeftAssoc, parseAction), where: + - opExpr is the pyparsing expression for the operator; + may also be a string, which will be converted to a Literal; + if numTerms is 3, opExpr is a tuple of two expressions, for the + two operators separating the 3 terms + - numTerms is the number of terms for this operator (must + be 1, 2, or 3) + - rightLeftAssoc is the indicator whether the operator is + right or left associative, using the pyparsing-defined + constants C{opAssoc.RIGHT} and C{opAssoc.LEFT}. + - parseAction is the parse action to be associated with + expressions matching this operator expression (the + parse action tuple member may be omitted) + - lpar - expression for matching left-parentheses (default=C{Suppress('(')}) + - rpar - expression for matching right-parentheses (default=C{Suppress(')')}) + + Example:: + # simple example of four-function arithmetic with ints and variable names + integer = pyparsing_common.signed_integer + varname = pyparsing_common.identifier + + arith_expr = infixNotation(integer | varname, + [ + ('-', 1, opAssoc.RIGHT), + (oneOf('* /'), 2, opAssoc.LEFT), + (oneOf('+ -'), 2, opAssoc.LEFT), + ]) + + arith_expr.runTests(''' + 5+3*6 + (5+3)*6 + -2--11 + ''', fullDump=False) + prints:: + 5+3*6 + [[5, '+', [3, '*', 6]]] + + (5+3)*6 + [[[5, '+', 3], '*', 6]] + + -2--11 + [[['-', 2], '-', ['-', 11]]] + """ + ret = Forward() + lastExpr = baseExpr | ( lpar + ret + rpar ) + for i,operDef in enumerate(opList): + opExpr,arity,rightLeftAssoc,pa = (operDef + (None,))[:4] + termName = "%s term" % opExpr if arity < 3 else "%s%s term" % opExpr + if arity == 3: + if opExpr is None or len(opExpr) != 2: + raise ValueError("if numterms=3, opExpr must be a tuple or list of two expressions") + opExpr1, opExpr2 = opExpr + thisExpr = Forward().setName(termName) + if rightLeftAssoc == opAssoc.LEFT: + if arity == 1: + matchExpr = FollowedBy(lastExpr + opExpr) + Group( lastExpr + OneOrMore( opExpr ) ) + elif arity == 2: + if opExpr is not None: + matchExpr = FollowedBy(lastExpr + opExpr + lastExpr) + Group( lastExpr + OneOrMore( opExpr + lastExpr ) ) + else: + matchExpr = FollowedBy(lastExpr+lastExpr) + Group( lastExpr + OneOrMore(lastExpr) ) + elif arity == 3: + matchExpr = FollowedBy(lastExpr + opExpr1 + lastExpr + opExpr2 + lastExpr) + \ + Group( lastExpr + opExpr1 + lastExpr + opExpr2 + lastExpr ) + else: + raise ValueError("operator must be unary (1), binary (2), or ternary (3)") + elif rightLeftAssoc == opAssoc.RIGHT: + if arity == 1: + # try to avoid LR with this extra test + if not isinstance(opExpr, Optional): + opExpr = Optional(opExpr) + matchExpr = FollowedBy(opExpr.expr + thisExpr) + Group( opExpr + thisExpr ) + elif arity == 2: + if opExpr is not None: + matchExpr = FollowedBy(lastExpr + opExpr + thisExpr) + Group( lastExpr + OneOrMore( opExpr + thisExpr ) ) + else: + matchExpr = FollowedBy(lastExpr + thisExpr) + Group( lastExpr + OneOrMore( thisExpr ) ) + elif arity == 3: + matchExpr = FollowedBy(lastExpr + opExpr1 + thisExpr + opExpr2 + thisExpr) + \ + Group( lastExpr + opExpr1 + thisExpr + opExpr2 + thisExpr ) + else: + raise ValueError("operator must be unary (1), binary (2), or ternary (3)") + else: + raise ValueError("operator must indicate right or left associativity") + if pa: + matchExpr.setParseAction( pa ) + thisExpr <<= ( matchExpr.setName(termName) | lastExpr ) + lastExpr = thisExpr + ret <<= lastExpr + return ret + +operatorPrecedence = infixNotation +"""(Deprecated) Former name of C{L{infixNotation}}, will be dropped in a future release.""" + +dblQuotedString = Combine(Regex(r'"(?:[^"\n\r\\]|(?:"")|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*')+'"').setName("string enclosed in double quotes") +sglQuotedString = Combine(Regex(r"'(?:[^'\n\r\\]|(?:'')|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*")+"'").setName("string enclosed in single quotes") +quotedString = Combine(Regex(r'"(?:[^"\n\r\\]|(?:"")|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*')+'"'| + Regex(r"'(?:[^'\n\r\\]|(?:'')|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*")+"'").setName("quotedString using single or double quotes") +unicodeString = Combine(_L('u') + quotedString.copy()).setName("unicode string literal") + +def nestedExpr(opener="(", closer=")", content=None, ignoreExpr=quotedString.copy()): + """ + Helper method for defining nested lists enclosed in opening and closing + delimiters ("(" and ")" are the default). + + Parameters: + - opener - opening character for a nested list (default=C{"("}); can also be a pyparsing expression + - closer - closing character for a nested list (default=C{")"}); can also be a pyparsing expression + - content - expression for items within the nested lists (default=C{None}) + - ignoreExpr - expression for ignoring opening and closing delimiters (default=C{quotedString}) + + If an expression is not provided for the content argument, the nested + expression will capture all whitespace-delimited content between delimiters + as a list of separate values. + + Use the C{ignoreExpr} argument to define expressions that may contain + opening or closing characters that should not be treated as opening + or closing characters for nesting, such as quotedString or a comment + expression. Specify multiple expressions using an C{L{Or}} or C{L{MatchFirst}}. + The default is L{quotedString}, but if no expressions are to be ignored, + then pass C{None} for this argument. + + Example:: + data_type = oneOf("void int short long char float double") + decl_data_type = Combine(data_type + Optional(Word('*'))) + ident = Word(alphas+'_', alphanums+'_') + number = pyparsing_common.number + arg = Group(decl_data_type + ident) + LPAR,RPAR = map(Suppress, "()") + + code_body = nestedExpr('{', '}', ignoreExpr=(quotedString | cStyleComment)) + + c_function = (decl_data_type("type") + + ident("name") + + LPAR + Optional(delimitedList(arg), [])("args") + RPAR + + code_body("body")) + c_function.ignore(cStyleComment) + + source_code = ''' + int is_odd(int x) { + return (x%2); + } + + int dec_to_hex(char hchar) { + if (hchar >= '0' && hchar <= '9') { + return (ord(hchar)-ord('0')); + } else { + return (10+ord(hchar)-ord('A')); + } + } + ''' + for func in c_function.searchString(source_code): + print("%(name)s (%(type)s) args: %(args)s" % func) + + prints:: + is_odd (int) args: [['int', 'x']] + dec_to_hex (int) args: [['char', 'hchar']] + """ + if opener == closer: + raise ValueError("opening and closing strings cannot be the same") + if content is None: + if isinstance(opener,basestring) and isinstance(closer,basestring): + if len(opener) == 1 and len(closer)==1: + if ignoreExpr is not None: + content = (Combine(OneOrMore(~ignoreExpr + + CharsNotIn(opener+closer+ParserElement.DEFAULT_WHITE_CHARS,exact=1)) + ).setParseAction(lambda t:t[0].strip())) + else: + content = (empty.copy()+CharsNotIn(opener+closer+ParserElement.DEFAULT_WHITE_CHARS + ).setParseAction(lambda t:t[0].strip())) + else: + if ignoreExpr is not None: + content = (Combine(OneOrMore(~ignoreExpr + + ~Literal(opener) + ~Literal(closer) + + CharsNotIn(ParserElement.DEFAULT_WHITE_CHARS,exact=1)) + ).setParseAction(lambda t:t[0].strip())) + else: + content = (Combine(OneOrMore(~Literal(opener) + ~Literal(closer) + + CharsNotIn(ParserElement.DEFAULT_WHITE_CHARS,exact=1)) + ).setParseAction(lambda t:t[0].strip())) + else: + raise ValueError("opening and closing arguments must be strings if no content expression is given") + ret = Forward() + if ignoreExpr is not None: + ret <<= Group( Suppress(opener) + ZeroOrMore( ignoreExpr | ret | content ) + Suppress(closer) ) + else: + ret <<= Group( Suppress(opener) + ZeroOrMore( ret | content ) + Suppress(closer) ) + ret.setName('nested %s%s expression' % (opener,closer)) + return ret + +def indentedBlock(blockStatementExpr, indentStack, indent=True): + """ + Helper method for defining space-delimited indentation blocks, such as + those used to define block statements in Python source code. + + Parameters: + - blockStatementExpr - expression defining syntax of statement that + is repeated within the indented block + - indentStack - list created by caller to manage indentation stack + (multiple statementWithIndentedBlock expressions within a single grammar + should share a common indentStack) + - indent - boolean indicating whether block must be indented beyond the + the current level; set to False for block of left-most statements + (default=C{True}) + + A valid block must contain at least one C{blockStatement}. + + Example:: + data = ''' + def A(z): + A1 + B = 100 + G = A2 + A2 + A3 + B + def BB(a,b,c): + BB1 + def BBA(): + bba1 + bba2 + bba3 + C + D + def spam(x,y): + def eggs(z): + pass + ''' + + + indentStack = [1] + stmt = Forward() + + identifier = Word(alphas, alphanums) + funcDecl = ("def" + identifier + Group( "(" + Optional( delimitedList(identifier) ) + ")" ) + ":") + func_body = indentedBlock(stmt, indentStack) + funcDef = Group( funcDecl + func_body ) + + rvalue = Forward() + funcCall = Group(identifier + "(" + Optional(delimitedList(rvalue)) + ")") + rvalue << (funcCall | identifier | Word(nums)) + assignment = Group(identifier + "=" + rvalue) + stmt << ( funcDef | assignment | identifier ) + + module_body = OneOrMore(stmt) + + parseTree = module_body.parseString(data) + parseTree.pprint() + prints:: + [['def', + 'A', + ['(', 'z', ')'], + ':', + [['A1'], [['B', '=', '100']], [['G', '=', 'A2']], ['A2'], ['A3']]], + 'B', + ['def', + 'BB', + ['(', 'a', 'b', 'c', ')'], + ':', + [['BB1'], [['def', 'BBA', ['(', ')'], ':', [['bba1'], ['bba2'], ['bba3']]]]]], + 'C', + 'D', + ['def', + 'spam', + ['(', 'x', 'y', ')'], + ':', + [[['def', 'eggs', ['(', 'z', ')'], ':', [['pass']]]]]]] + """ + def checkPeerIndent(s,l,t): + if l >= len(s): return + curCol = col(l,s) + if curCol != indentStack[-1]: + if curCol > indentStack[-1]: + raise ParseFatalException(s,l,"illegal nesting") + raise ParseException(s,l,"not a peer entry") + + def checkSubIndent(s,l,t): + curCol = col(l,s) + if curCol > indentStack[-1]: + indentStack.append( curCol ) + else: + raise ParseException(s,l,"not a subentry") + + def checkUnindent(s,l,t): + if l >= len(s): return + curCol = col(l,s) + if not(indentStack and curCol < indentStack[-1] and curCol <= indentStack[-2]): + raise ParseException(s,l,"not an unindent") + indentStack.pop() + + NL = OneOrMore(LineEnd().setWhitespaceChars("\t ").suppress()) + INDENT = (Empty() + Empty().setParseAction(checkSubIndent)).setName('INDENT') + PEER = Empty().setParseAction(checkPeerIndent).setName('') + UNDENT = Empty().setParseAction(checkUnindent).setName('UNINDENT') + if indent: + smExpr = Group( Optional(NL) + + #~ FollowedBy(blockStatementExpr) + + INDENT + (OneOrMore( PEER + Group(blockStatementExpr) + Optional(NL) )) + UNDENT) + else: + smExpr = Group( Optional(NL) + + (OneOrMore( PEER + Group(blockStatementExpr) + Optional(NL) )) ) + blockStatementExpr.ignore(_bslash + LineEnd()) + return smExpr.setName('indented block') + +alphas8bit = srange(r"[\0xc0-\0xd6\0xd8-\0xf6\0xf8-\0xff]") +punc8bit = srange(r"[\0xa1-\0xbf\0xd7\0xf7]") + +anyOpenTag,anyCloseTag = makeHTMLTags(Word(alphas,alphanums+"_:").setName('any tag')) +_htmlEntityMap = dict(zip("gt lt amp nbsp quot apos".split(),'><& "\'')) +commonHTMLEntity = Regex('&(?P<entity>' + '|'.join(_htmlEntityMap.keys()) +");").setName("common HTML entity") +def replaceHTMLEntity(t): + """Helper parser action to replace common HTML entities with their special characters""" + return _htmlEntityMap.get(t.entity) + +# it's easy to get these comment structures wrong - they're very common, so may as well make them available +cStyleComment = Combine(Regex(r"/\*(?:[^*]|\*(?!/))*") + '*/').setName("C style comment") +"Comment of the form C{/* ... */}" + +htmlComment = Regex(r"<!--[\s\S]*?-->").setName("HTML comment") +"Comment of the form C{<!-- ... -->}" + +restOfLine = Regex(r".*").leaveWhitespace().setName("rest of line") +dblSlashComment = Regex(r"//(?:\\\n|[^\n])*").setName("// comment") +"Comment of the form C{// ... (to end of line)}" + +cppStyleComment = Combine(Regex(r"/\*(?:[^*]|\*(?!/))*") + '*/'| dblSlashComment).setName("C++ style comment") +"Comment of either form C{L{cStyleComment}} or C{L{dblSlashComment}}" + +javaStyleComment = cppStyleComment +"Same as C{L{cppStyleComment}}" + +pythonStyleComment = Regex(r"#.*").setName("Python style comment") +"Comment of the form C{# ... (to end of line)}" + +_commasepitem = Combine(OneOrMore(Word(printables, excludeChars=',') + + Optional( Word(" \t") + + ~Literal(",") + ~LineEnd() ) ) ).streamline().setName("commaItem") +commaSeparatedList = delimitedList( Optional( quotedString.copy() | _commasepitem, default="") ).setName("commaSeparatedList") +"""(Deprecated) Predefined expression of 1 or more printable words or quoted strings, separated by commas. + This expression is deprecated in favor of L{pyparsing_common.comma_separated_list}.""" + +# some other useful expressions - using lower-case class name since we are really using this as a namespace +class pyparsing_common: + """ + Here are some common low-level expressions that may be useful in jump-starting parser development: + - numeric forms (L{integers<integer>}, L{reals<real>}, L{scientific notation<sci_real>}) + - common L{programming identifiers<identifier>} + - network addresses (L{MAC<mac_address>}, L{IPv4<ipv4_address>}, L{IPv6<ipv6_address>}) + - ISO8601 L{dates<iso8601_date>} and L{datetime<iso8601_datetime>} + - L{UUID<uuid>} + - L{comma-separated list<comma_separated_list>} + Parse actions: + - C{L{convertToInteger}} + - C{L{convertToFloat}} + - C{L{convertToDate}} + - C{L{convertToDatetime}} + - C{L{stripHTMLTags}} + - C{L{upcaseTokens}} + - C{L{downcaseTokens}} + + Example:: + pyparsing_common.number.runTests(''' + # any int or real number, returned as the appropriate type + 100 + -100 + +100 + 3.14159 + 6.02e23 + 1e-12 + ''') + + pyparsing_common.fnumber.runTests(''' + # any int or real number, returned as float + 100 + -100 + +100 + 3.14159 + 6.02e23 + 1e-12 + ''') + + pyparsing_common.hex_integer.runTests(''' + # hex numbers + 100 + FF + ''') + + pyparsing_common.fraction.runTests(''' + # fractions + 1/2 + -3/4 + ''') + + pyparsing_common.mixed_integer.runTests(''' + # mixed fractions + 1 + 1/2 + -3/4 + 1-3/4 + ''') + + import uuid + pyparsing_common.uuid.setParseAction(tokenMap(uuid.UUID)) + pyparsing_common.uuid.runTests(''' + # uuid + 12345678-1234-5678-1234-567812345678 + ''') + prints:: + # any int or real number, returned as the appropriate type + 100 + [100] + + -100 + [-100] + + +100 + [100] + + 3.14159 + [3.14159] + + 6.02e23 + [6.02e+23] + + 1e-12 + [1e-12] + + # any int or real number, returned as float + 100 + [100.0] + + -100 + [-100.0] + + +100 + [100.0] + + 3.14159 + [3.14159] + + 6.02e23 + [6.02e+23] + + 1e-12 + [1e-12] + + # hex numbers + 100 + [256] + + FF + [255] + + # fractions + 1/2 + [0.5] + + -3/4 + [-0.75] + + # mixed fractions + 1 + [1] + + 1/2 + [0.5] + + -3/4 + [-0.75] + + 1-3/4 + [1.75] + + # uuid + 12345678-1234-5678-1234-567812345678 + [UUID('12345678-1234-5678-1234-567812345678')] + """ + + convertToInteger = tokenMap(int) + """ + Parse action for converting parsed integers to Python int + """ + + convertToFloat = tokenMap(float) + """ + Parse action for converting parsed numbers to Python float + """ + + integer = Word(nums).setName("integer").setParseAction(convertToInteger) + """expression that parses an unsigned integer, returns an int""" + + hex_integer = Word(hexnums).setName("hex integer").setParseAction(tokenMap(int,16)) + """expression that parses a hexadecimal integer, returns an int""" + + signed_integer = Regex(r'[+-]?\d+').setName("signed integer").setParseAction(convertToInteger) + """expression that parses an integer with optional leading sign, returns an int""" + + fraction = (signed_integer().setParseAction(convertToFloat) + '/' + signed_integer().setParseAction(convertToFloat)).setName("fraction") + """fractional expression of an integer divided by an integer, returns a float""" + fraction.addParseAction(lambda t: t[0]/t[-1]) + + mixed_integer = (fraction | signed_integer + Optional(Optional('-').suppress() + fraction)).setName("fraction or mixed integer-fraction") + """mixed integer of the form 'integer - fraction', with optional leading integer, returns float""" + mixed_integer.addParseAction(sum) + + real = Regex(r'[+-]?\d+\.\d*').setName("real number").setParseAction(convertToFloat) + """expression that parses a floating point number and returns a float""" + + sci_real = Regex(r'[+-]?\d+([eE][+-]?\d+|\.\d*([eE][+-]?\d+)?)').setName("real number with scientific notation").setParseAction(convertToFloat) + """expression that parses a floating point number with optional scientific notation and returns a float""" + + # streamlining this expression makes the docs nicer-looking + number = (sci_real | real | signed_integer).streamline() + """any numeric expression, returns the corresponding Python type""" + + fnumber = Regex(r'[+-]?\d+\.?\d*([eE][+-]?\d+)?').setName("fnumber").setParseAction(convertToFloat) + """any int or real number, returned as float""" + + identifier = Word(alphas+'_', alphanums+'_').setName("identifier") + """typical code identifier (leading alpha or '_', followed by 0 or more alphas, nums, or '_')""" + + ipv4_address = Regex(r'(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})(\.(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})){3}').setName("IPv4 address") + "IPv4 address (C{0.0.0.0 - 255.255.255.255})" + + _ipv6_part = Regex(r'[0-9a-fA-F]{1,4}').setName("hex_integer") + _full_ipv6_address = (_ipv6_part + (':' + _ipv6_part)*7).setName("full IPv6 address") + _short_ipv6_address = (Optional(_ipv6_part + (':' + _ipv6_part)*(0,6)) + "::" + Optional(_ipv6_part + (':' + _ipv6_part)*(0,6))).setName("short IPv6 address") + _short_ipv6_address.addCondition(lambda t: sum(1 for tt in t if pyparsing_common._ipv6_part.matches(tt)) < 8) + _mixed_ipv6_address = ("::ffff:" + ipv4_address).setName("mixed IPv6 address") + ipv6_address = Combine((_full_ipv6_address | _mixed_ipv6_address | _short_ipv6_address).setName("IPv6 address")).setName("IPv6 address") + "IPv6 address (long, short, or mixed form)" + + mac_address = Regex(r'[0-9a-fA-F]{2}([:.-])[0-9a-fA-F]{2}(?:\1[0-9a-fA-F]{2}){4}').setName("MAC address") + "MAC address xx:xx:xx:xx:xx (may also have '-' or '.' delimiters)" + + @staticmethod + def convertToDate(fmt="%Y-%m-%d"): + """ + Helper to create a parse action for converting parsed date string to Python datetime.date + + Params - + - fmt - format to be passed to datetime.strptime (default=C{"%Y-%m-%d"}) + + Example:: + date_expr = pyparsing_common.iso8601_date.copy() + date_expr.setParseAction(pyparsing_common.convertToDate()) + print(date_expr.parseString("1999-12-31")) + prints:: + [datetime.date(1999, 12, 31)] + """ + def cvt_fn(s,l,t): + try: + return datetime.strptime(t[0], fmt).date() + except ValueError as ve: + raise ParseException(s, l, str(ve)) + return cvt_fn + + @staticmethod + def convertToDatetime(fmt="%Y-%m-%dT%H:%M:%S.%f"): + """ + Helper to create a parse action for converting parsed datetime string to Python datetime.datetime + + Params - + - fmt - format to be passed to datetime.strptime (default=C{"%Y-%m-%dT%H:%M:%S.%f"}) + + Example:: + dt_expr = pyparsing_common.iso8601_datetime.copy() + dt_expr.setParseAction(pyparsing_common.convertToDatetime()) + print(dt_expr.parseString("1999-12-31T23:59:59.999")) + prints:: + [datetime.datetime(1999, 12, 31, 23, 59, 59, 999000)] + """ + def cvt_fn(s,l,t): + try: + return datetime.strptime(t[0], fmt) + except ValueError as ve: + raise ParseException(s, l, str(ve)) + return cvt_fn + + iso8601_date = Regex(r'(?P<year>\d{4})(?:-(?P<month>\d\d)(?:-(?P<day>\d\d))?)?').setName("ISO8601 date") + "ISO8601 date (C{yyyy-mm-dd})" + + iso8601_datetime = Regex(r'(?P<year>\d{4})-(?P<month>\d\d)-(?P<day>\d\d)[T ](?P<hour>\d\d):(?P<minute>\d\d)(:(?P<second>\d\d(\.\d*)?)?)?(?P<tz>Z|[+-]\d\d:?\d\d)?').setName("ISO8601 datetime") + "ISO8601 datetime (C{yyyy-mm-ddThh:mm:ss.s(Z|+-00:00)}) - trailing seconds, milliseconds, and timezone optional; accepts separating C{'T'} or C{' '}" + + uuid = Regex(r'[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}').setName("UUID") + "UUID (C{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx})" + + _html_stripper = anyOpenTag.suppress() | anyCloseTag.suppress() + @staticmethod + def stripHTMLTags(s, l, tokens): + """ + Parse action to remove HTML tags from web page HTML source + + Example:: + # strip HTML links from normal text + text = '<td>More info at the <a href="http://pyparsing.wikispaces.com">pyparsing</a> wiki page</td>' + td,td_end = makeHTMLTags("TD") + table_text = td + SkipTo(td_end).setParseAction(pyparsing_common.stripHTMLTags)("body") + td_end + + print(table_text.parseString(text).body) # -> 'More info at the pyparsing wiki page' + """ + return pyparsing_common._html_stripper.transformString(tokens[0]) + + _commasepitem = Combine(OneOrMore(~Literal(",") + ~LineEnd() + Word(printables, excludeChars=',') + + Optional( White(" \t") ) ) ).streamline().setName("commaItem") + comma_separated_list = delimitedList( Optional( quotedString.copy() | _commasepitem, default="") ).setName("comma separated list") + """Predefined expression of 1 or more printable words or quoted strings, separated by commas.""" + + upcaseTokens = staticmethod(tokenMap(lambda t: _ustr(t).upper())) + """Parse action to convert tokens to upper case.""" + + downcaseTokens = staticmethod(tokenMap(lambda t: _ustr(t).lower())) + """Parse action to convert tokens to lower case.""" + + +if __name__ == "__main__": + + selectToken = CaselessLiteral("select") + fromToken = CaselessLiteral("from") + + ident = Word(alphas, alphanums + "_$") + + columnName = delimitedList(ident, ".", combine=True).setParseAction(upcaseTokens) + columnNameList = Group(delimitedList(columnName)).setName("columns") + columnSpec = ('*' | columnNameList) + + tableName = delimitedList(ident, ".", combine=True).setParseAction(upcaseTokens) + tableNameList = Group(delimitedList(tableName)).setName("tables") + + simpleSQL = selectToken("command") + columnSpec("columns") + fromToken + tableNameList("tables") + + # demo runTests method, including embedded comments in test string + simpleSQL.runTests(""" + # '*' as column list and dotted table name + select * from SYS.XYZZY + + # caseless match on "SELECT", and casts back to "select" + SELECT * from XYZZY, ABC + + # list of column names, and mixed case SELECT keyword + Select AA,BB,CC from Sys.dual + + # multiple tables + Select A, B, C from Sys.dual, Table2 + + # invalid SELECT keyword - should fail + Xelect A, B, C from Sys.dual + + # incomplete command - should fail + Select + + # invalid column name - should fail + Select ^^^ frox Sys.dual + + """) + + pyparsing_common.number.runTests(""" + 100 + -100 + +100 + 3.14159 + 6.02e23 + 1e-12 + """) + + # any int or real number, returned as float + pyparsing_common.fnumber.runTests(""" + 100 + -100 + +100 + 3.14159 + 6.02e23 + 1e-12 + """) + + pyparsing_common.hex_integer.runTests(""" + 100 + FF + """) + + import uuid + pyparsing_common.uuid.setParseAction(tokenMap(uuid.UUID)) + pyparsing_common.uuid.runTests(""" + 12345678-1234-5678-1234-567812345678 + """) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/six.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/six.py new file mode 100644 index 00000000..190c0239 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/_vendor/six.py @@ -0,0 +1,868 @@ +"""Utilities for writing code that runs on Python 2 and 3""" + +# Copyright (c) 2010-2015 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. + +from __future__ import absolute_import + +import functools +import itertools +import operator +import sys +import types + +__author__ = "Benjamin Peterson <benjamin@python.org>" +__version__ = "1.10.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 + + +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 __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 + +_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("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("copyreg", "copy_reg"), + MovedModule("dbm_gnu", "gdbm", "dbm.gnu"), + MovedModule("_dummy_thread", "dummy_thread", "_dummy_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_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("email_mime_base", "email.MIMEBase", "email.mime.base"), + 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("urlencode", "urllib", "urllib.parse"), + MovedAttribute("splitquery", "urllib", "urllib.parse"), + MovedAttribute("splittag", "urllib", "urllib.parse"), + MovedAttribute("splituser", "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"), +] +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 + _assertCountEqual = "assertCountEqual" + if sys.version_info[1] <= 1: + _assertRaisesRegex = "assertRaisesRegexp" + _assertRegex = "assertRegexpMatches" + else: + _assertRaisesRegex = "assertRaisesRegex" + _assertRegex = "assertRegex" +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" +_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) + + +if PY3: + exec_ = getattr(moves.builtins, "exec") + + def reraise(tp, value, tb=None): + if value is None: + value = tp() + if value.__traceback__ is not tb: + raise value.with_traceback(tb) + raise value + +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): + raise tp, value, tb +""") + + +if sys.version_info[:2] == (3, 2): + exec_("""def raise_from(value, from_value): + if from_value is None: + raise value + raise value from from_value +""") +elif sys.version_info[:2] > (3, 2): + exec_("""def raise_from(value, from_value): + raise value from from_value +""") +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): + def wraps(wrapped, assigned=functools.WRAPPER_ASSIGNMENTS, + updated=functools.WRAPPER_UPDATES): + def wrapper(f): + f = functools.wraps(wrapped, assigned, updated)(f) + f.__wrapped__ = wrapped + return f + return wrapper +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(meta): + + def __new__(cls, name, this_bases, d): + return meta(name, bases, d) + 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) + return metaclass(cls.__name__, cls.__bases__, orig_vars) + return wrapper + + +def python_2_unicode_compatible(klass): + """ + A 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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/extern/__init__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/extern/__init__.py new file mode 100644 index 00000000..b4156fec --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/extern/__init__.py @@ -0,0 +1,73 @@ +import sys + + +class VendorImporter: + """ + A PEP 302 meta path importer for finding optionally-vendored + or otherwise naturally-installed packages from root_name. + """ + + def __init__(self, root_name, vendored_names=(), vendor_pkg=None): + self.root_name = root_name + self.vendored_names = set(vendored_names) + self.vendor_pkg = vendor_pkg or root_name.replace('extern', '_vendor') + + @property + def search_path(self): + """ + Search first the vendor package then as a natural package. + """ + yield self.vendor_pkg + '.' + yield '' + + def find_module(self, fullname, path=None): + """ + Return self when fullname starts with root_name and the + target module is one vendored through this importer. + """ + root, base, target = fullname.partition(self.root_name + '.') + if root: + return + if not any(map(target.startswith, self.vendored_names)): + return + return self + + def load_module(self, fullname): + """ + Iterate over the search path to locate and load fullname. + """ + root, base, target = fullname.partition(self.root_name + '.') + for prefix in self.search_path: + try: + extant = prefix + target + __import__(extant) + mod = sys.modules[extant] + sys.modules[fullname] = mod + # mysterious hack: + # Remove the reference to the extant package/module + # on later Python versions to cause relative imports + # in the vendor package to resolve the same modules + # as those going through this importer. + if sys.version_info > (3, 3): + del sys.modules[extant] + return mod + except ImportError: + pass + else: + raise ImportError( + "The '{target}' package is required; " + "normally this is bundled with this package so if you get " + "this warning, consult the packager of your " + "distribution.".format(**locals()) + ) + + def install(self): + """ + Install this importer into sys.meta_path if not already present. + """ + if self not in sys.meta_path: + sys.meta_path.append(self) + + +names = 'packaging', 'pyparsing', 'six', 'appdirs' +VendorImporter(__name__, names).install() diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/extern/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/extern/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ac86db67bced4601deaf0c1a555d3795c07b1f11 GIT binary patch literal 2385 zcmZ`)&yO256t?GACbQY_Lt>W}b!7>OYEU=3v>Xr=R74A^KvC6J1)^4?+1S~gY%()z zJKZKsE@Z_CapRBR!j=EUS5EyGIPsn*$!@!<NAv6%+t1JM`~3OV=4SNt@6NM-nuPpI zE));ici>ewz;MFpi1f&Jgge|lBivm$J<7wLBdBnNvv7vqf>0Rsh{Vm8FoSgaXjjFB z#vORoT`+>cT+(wm?YRT+H~^pAJEJ{M_}u5g8ClR?z&Ck=hw!(-n>;!ry^wG47Sv7d zz$$Iiej;*S$ou26kXp#uS;U}x%^uu)z;5l|WMiRIR;K!hWy>LKP)Ih&a-QXftSEI> z<mqTM-F<Ey32q(0kU}2`d73G~@>EZx9h2osLql+I**{JXg<=C)jF~J7o#g3QbnNVI z9}|ZKYuxrX@T!l%RJ0-q(X?_F*m5ej+^Oi$<&;AL;g81&Y|QPNK)iqr<))F;k;T4g zuGcZH656y^G26A3X-H9y(!MZJ-I0{Xhp}foB}N13!|Jku22dt{5xD`?f8Xxuak*D! z<?g{G8}Z%!lcR%T|0dsqsk>6BVj}xO;a770RY$g$Bw3#6B<Yk>6RtiY@TvkZga$OC zv+XCZ0MuEH>r)&91#1Uhq>9=CQ;{KXXq!AiE;-h^kP>h9gH0~t`$(j+e*`E>r5WJF z>iw=z!CyH`6-!sxt$J#F(1oELL%K1w*?<b;wkfGi3qH+;vg;(spSLhP3#;Fvv#YP| z>cYT2;*AB9fD<hCpFsm~#?4XO+=4!J=kDB_`;{wqkj&cAZsiX>7~wB~9qLp3TUj>D zep_$-p#U=G3?XHwxXr<2G(zezpr+J{on}DxHBnfab4<s2J`6e(nvDxS83~ptR^+Sn z0j>3sEGCCXP(#n^#GEHhwqYCHI55o;*2?hgSY8=7&8Nm4r=^MNFfa<swm7h<HQ_2w z<6%0Dhanp8AXUNybx@bmkEb-LBi)9D6@o(iE$YGZF1(juxG<rQoWc^qixVvjzeD2^ z3=RVEqJ+ddcgeHIbAS4I<yYP|nFjz#u%MJ^Z|GOS6*6yB4cn%-@n69GV^8+#-Y-ej zcm#;+#&IM|3hbriXL7Rh6TCmdU+xaW0nyC``GYR#uatYh>R|T$8k+lX-cv1D@mxs6 z3_!LtxALV6HY)nqjfjqll&_J04WE}tz}cUV!NK)k>delsuMPkrF2%_tlY)Q2@<NVL z*p_%Jb}-2~%9|yTCBahYm?~H{VAEp4kUqBSG?h7s=nd8{ay1#%CviC*^wW-(jAu&A z>|laq>2za9egNTF6G!qLY+Ge|8(Jm;b+9s>B%p9pP_!C-Wm=FE1s*_h28G$E_5Ple zg){*O`Z(1l!2FC<9M)&~J#>w<k?*6qg8qY2ib3|mYHONnU~IuJu?};)WZj1_N$r3k z-WF|9hlcP(Gzuc9J=&&`<Iupp#KQ|NF6o@*;Z<;15e;H++>l#X4?+BqY4-MXW)II< zQQtYQ9!ZwvKnTcC2QN4)PzX<6XqJwoNcoh(R+Y&0IXSwqE3d)2rn#PDg0w6_pWmQ= zjpcoJ2WHjU=YgVcy{3K3K{4&d5#9qRMt~n+S%U}dR+5}dQY%yN)kqRv^piwxVl-hX zi&98El}G`JnUQ!?$`}n^QWp#!WQivmh1Kdo=y^`tZ-r4Syk>h)oA7Q1W<qlcLZz_j zD!{z~+vRX+#Gc$kPy1*-L30yK?A!d*UVPk!k{@H|n<6pc?Rtw};U#8oz0hsn_2~a4 C;Bn~y literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/py31compat.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/py31compat.py new file mode 100644 index 00000000..331a51bb --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/pkg_resources/py31compat.py @@ -0,0 +1,22 @@ +import os +import errno +import sys + + +def _makedirs_31(path, exist_ok=False): + try: + os.makedirs(path) + except OSError as exc: + if not exist_ok or exc.errno != errno.EEXIST: + raise + + +# rely on compatibility behavior until mode considerations +# and exists_ok considerations are disentangled. +# See https://github.com/pypa/setuptools/pull/1083#issuecomment-315168663 +needs_makedirs = ( + sys.version_info < (3, 2, 5) or + (3, 3) <= sys.version_info < (3, 3, 6) or + (3, 4) <= sys.version_info < (3, 4, 1) +) +makedirs = _makedirs_31 if needs_makedirs else os.makedirs diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools-41.0.1.dist-info/INSTALLER b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools-41.0.1.dist-info/INSTALLER new file mode 100644 index 00000000..a1b589e3 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools-41.0.1.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools-41.0.1.dist-info/LICENSE b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools-41.0.1.dist-info/LICENSE new file mode 100644 index 00000000..6e0693b4 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools-41.0.1.dist-info/LICENSE @@ -0,0 +1,19 @@ +Copyright (C) 2016 Jason R Coombs <jaraco@jaraco.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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools-41.0.1.dist-info/METADATA b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools-41.0.1.dist-info/METADATA new file mode 100644 index 00000000..571a5cb2 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools-41.0.1.dist-info/METADATA @@ -0,0 +1,77 @@ +Metadata-Version: 2.1 +Name: setuptools +Version: 41.0.1 +Summary: Easily download, build, install, upgrade, and uninstall Python packages +Home-page: https://github.com/pypa/setuptools +Author: Python Packaging Authority +Author-email: distutils-sig@python.org +License: UNKNOWN +Project-URL: Documentation, https://setuptools.readthedocs.io/ +Keywords: CPAN PyPI distutils eggs package management +Platform: UNKNOWN +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: MIT License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python :: 2 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.4 +Classifier: Programming Language :: Python :: 3.5 +Classifier: Programming Language :: Python :: 3.6 +Classifier: Programming Language :: Python :: 3.7 +Classifier: Topic :: Software Development :: Libraries :: Python Modules +Classifier: Topic :: System :: Archiving :: Packaging +Classifier: Topic :: System :: Systems Administration +Classifier: Topic :: Utilities +Requires-Python: >=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.* +Description-Content-Type: text/x-rst; charset=UTF-8 +Provides-Extra: certs +Requires-Dist: certifi (==2016.9.26) ; extra == 'certs' +Provides-Extra: ssl +Requires-Dist: wincertstore (==0.2) ; (sys_platform=='win32') and extra == 'ssl' + +.. image:: https://img.shields.io/pypi/v/setuptools.svg + :target: https://pypi.org/project/setuptools + +.. image:: https://img.shields.io/readthedocs/setuptools/latest.svg + :target: https://setuptools.readthedocs.io + +.. image:: https://img.shields.io/travis/pypa/setuptools/master.svg?label=Linux%20CI&logo=travis&logoColor=white + :target: https://travis-ci.org/pypa/setuptools + +.. image:: https://img.shields.io/appveyor/ci/pypa/setuptools/master.svg?label=Windows%20CI&logo=appveyor&logoColor=white + :target: https://ci.appveyor.com/project/pypa/setuptools/branch/master + +.. image:: https://img.shields.io/codecov/c/github/pypa/setuptools/master.svg?logo=codecov&logoColor=white + :target: https://codecov.io/gh/pypa/setuptools + +.. image:: https://tidelift.com/badges/github/pypa/setuptools?style=flat + :target: https://tidelift.com/subscription/pkg/pypi-setuptools?utm_source=pypi-setuptools&utm_medium=readme + +.. image:: https://img.shields.io/pypi/pyversions/setuptools.svg + +See the `Installation Instructions +<https://packaging.python.org/installing/>`_ in the Python Packaging +User's Guide for instructions on installing, upgrading, and uninstalling +Setuptools. + +Questions and comments should be directed to the `distutils-sig +mailing list <http://mail.python.org/pipermail/distutils-sig/>`_. +Bug reports and especially tested patches may be +submitted directly to the `bug tracker +<https://github.com/pypa/setuptools/issues>`_. + +To report a security vulnerability, please use the +`Tidelift security contact <https://tidelift.com/security>`_. +Tidelift will coordinate the fix and disclosure. + + +Code of Conduct +--------------- + +Everyone interacting in the setuptools project's codebases, issue trackers, +chat rooms, and mailing lists is expected to follow the +`PyPA Code of Conduct <https://www.pypa.io/en/latest/code-of-conduct/>`_. + + diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools-41.0.1.dist-info/RECORD b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools-41.0.1.dist-info/RECORD new file mode 100644 index 00000000..8cf1dccb --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools-41.0.1.dist-info/RECORD @@ -0,0 +1,186 @@ +easy_install.py,sha256=MDC9vt5AxDsXX5qcKlBz2TnW6Tpuv_AobnfhCJ9X3PM,126 +pkg_resources/__init__.py,sha256=pp8b7Asoaheso-q8lIMS1tpQp88xjAkYgCIRX-JsPlE,107982 +pkg_resources/py31compat.py,sha256=-WQ0e4c3RG_acdhwC3gLiXhP_lg4G5q7XYkZkQg0gxU,558 +pkg_resources/_vendor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pkg_resources/_vendor/appdirs.py,sha256=MievUEuv3l_mQISH5SF0shDk_BNhHHzYiAPrT3ITN4I,24701 +pkg_resources/_vendor/pyparsing.py,sha256=tmrp-lu-qO1i75ZzIN5A12nKRRD1Cm4Vpk-5LR9rims,232055 +pkg_resources/_vendor/six.py,sha256=A6hdJZVjI3t_geebZ9BzUvwRrIXo0lfwzQlM2LcKyas,30098 +pkg_resources/_vendor/packaging/__about__.py,sha256=zkcCPTN_6TcLW0Nrlg0176-R1QQ_WVPTm8sz1R4-HjM,720 +pkg_resources/_vendor/packaging/__init__.py,sha256=_vNac5TrzwsrzbOFIbF-5cHqc_Y2aPT2D7zrIR06BOo,513 +pkg_resources/_vendor/packaging/_compat.py,sha256=Vi_A0rAQeHbU-a9X0tt1yQm9RqkgQbDSxzRw8WlU9kA,860 +pkg_resources/_vendor/packaging/_structures.py,sha256=RImECJ4c_wTlaTYYwZYLHEiebDMaAJmK1oPARhw1T5o,1416 +pkg_resources/_vendor/packaging/markers.py,sha256=uEcBBtGvzqltgnArqb9c4RrcInXezDLos14zbBHhWJo,8248 +pkg_resources/_vendor/packaging/requirements.py,sha256=SikL2UynbsT0qtY9ltqngndha_sfo0w6XGFhAhoSoaQ,4355 +pkg_resources/_vendor/packaging/specifiers.py,sha256=SAMRerzO3fK2IkFZCaZkuwZaL_EGqHNOz4pni4vhnN0,28025 +pkg_resources/_vendor/packaging/utils.py,sha256=3m6WvPm6NNxE8rkTGmn0r75B_GZSGg7ikafxHsBN1WA,421 +pkg_resources/_vendor/packaging/version.py,sha256=OwGnxYfr2ghNzYx59qWIBkrK3SnB6n-Zfd1XaLpnnM0,11556 +pkg_resources/extern/__init__.py,sha256=cHiEfHuLmm6rs5Ve_ztBfMI7Lr31vss-D4wkqF5xzlI,2498 +setuptools/__init__.py,sha256=WBpCcn2lvdckotabeae1TTYonPOcgCIF3raD2zRWzBc,7283 +setuptools/_deprecation_warning.py,sha256=jU9-dtfv6cKmtQJOXN8nP1mm7gONw5kKEtiPtbwnZyI,218 +setuptools/archive_util.py,sha256=kw8Ib_lKjCcnPKNbS7h8HztRVK0d5RacU3r_KRdVnmM,6592 +setuptools/build_meta.py,sha256=ioZE7tGSWY6vy7KLune0Iq334ugXuO39imcKC8prjBY,9387 +setuptools/cli-32.exe,sha256=dfEuovMNnA2HLa3jRfMPVi5tk4R7alCbpTvuxtCyw0Y,65536 +setuptools/cli-64.exe,sha256=KLABu5pyrnokJCv6skjXZ6GsXeyYHGcqOUT3oHI3Xpo,74752 +setuptools/cli.exe,sha256=dfEuovMNnA2HLa3jRfMPVi5tk4R7alCbpTvuxtCyw0Y,65536 +setuptools/config.py,sha256=lz19l1AtoHctpp1_tbYZv176nrEj4Gpf7ykNIYTIkAQ,20425 +setuptools/dep_util.py,sha256=fgixvC1R7sH3r13ktyf7N0FALoqEXL1cBarmNpSEoWg,935 +setuptools/depends.py,sha256=hC8QIDcM3VDpRXvRVA6OfL9AaQfxvhxHcN_w6sAyNq8,5837 +setuptools/dist.py,sha256=qYPmmVlLPWCLHrILR0J74bqoYgTSZh5ocLeyRKqnVyU,49913 +setuptools/extension.py,sha256=uc6nHI-MxwmNCNPbUiBnybSyqhpJqjbhvOQ-emdvt_E,1729 +setuptools/glibc.py,sha256=X64VvGPL2AbURKwYRsWJOXXGAYOiF_v2qixeTkAULuU,3146 +setuptools/glob.py,sha256=o75cHrOxYsvn854thSxE0x9k8JrKDuhP_rRXlVB00Q4,5084 +setuptools/gui-32.exe,sha256=XBr0bHMA6Hpz2s9s9Bzjl-PwXfa9nH4ie0rFn4V2kWA,65536 +setuptools/gui-64.exe,sha256=aYKMhX1IJLn4ULHgWX0sE0yREUt6B3TEHf_jOw6yNyE,75264 +setuptools/gui.exe,sha256=XBr0bHMA6Hpz2s9s9Bzjl-PwXfa9nH4ie0rFn4V2kWA,65536 +setuptools/launch.py,sha256=sd7ejwhBocCDx_wG9rIs0OaZ8HtmmFU8ZC6IR_S0Lvg,787 +setuptools/lib2to3_ex.py,sha256=t5e12hbR2pi9V4ezWDTB4JM-AISUnGOkmcnYHek3xjg,2013 +setuptools/monkey.py,sha256=FGc9fffh7gAxMLFmJs2DW_OYWpBjkdbNS2n14UAK4NA,5264 +setuptools/msvc.py,sha256=uuRFaZzjJt5Fv3ZmyKUUuLtjx12_8G9RILigGec4irI,40838 +setuptools/namespaces.py,sha256=F0Nrbv8KCT2OrO7rwa03om4N4GZKAlnce-rr-cgDQa8,3199 +setuptools/package_index.py,sha256=F9LBC-hQ5fkjeEVflxif0mo_DzRMrepahdFTPenOtGM,40587 +setuptools/pep425tags.py,sha256=o_D_WVeWcXZiI2xjPSg7pouGOvaWRgGRxEDK9DzAXIA,10861 +setuptools/py27compat.py,sha256=3mwxRMDk5Q5O1rSXOERbQDXhFqwDJhhUitfMW_qpUCo,536 +setuptools/py31compat.py,sha256=h2rtZghOfwoGYd8sQ0-auaKiF3TcL3qX0bX3VessqcE,838 +setuptools/py33compat.py,sha256=OubjldHJH1KGE1CKt1kRU-Q55keftHT3ea1YoL0ZSco,1195 +setuptools/sandbox.py,sha256=9UbwfEL5QY436oMI1LtFWohhoZ-UzwHvGyZjUH_qhkw,14276 +setuptools/script (dev).tmpl,sha256=RUzQzCQUaXtwdLtYHWYbIQmOaES5Brqq1FvUA_tu-5I,218 +setuptools/script.tmpl,sha256=WGTt5piezO27c-Dbx6l5Q4T3Ff20A5z7872hv3aAhYY,138 +setuptools/site-patch.py,sha256=OumkIHMuoSenRSW1382kKWI1VAwxNE86E5W8iDd34FY,2302 +setuptools/ssl_support.py,sha256=nLjPUBBw7RTTx6O4RJZ5eAMGgjJG8beiDbkFXDZpLuM,8493 +setuptools/unicode_utils.py,sha256=NOiZ_5hD72A6w-4wVj8awHFM3n51Kmw1Ic_vx15XFqw,996 +setuptools/version.py,sha256=og_cuZQb0QI6ukKZFfZWPlr1HgJBPPn2vO2m_bI9ZTE,144 +setuptools/wheel.py,sha256=94uqXsOaKt91d9hW5z6ZppZmNSs_nO66R4uiwhcr4V0,8094 +setuptools/windows_support.py,sha256=5GrfqSP2-dLGJoZTq2g6dCKkyQxxa2n5IQiXlJCoYEE,714 +setuptools/_vendor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +setuptools/_vendor/pyparsing.py,sha256=tmrp-lu-qO1i75ZzIN5A12nKRRD1Cm4Vpk-5LR9rims,232055 +setuptools/_vendor/six.py,sha256=A6hdJZVjI3t_geebZ9BzUvwRrIXo0lfwzQlM2LcKyas,30098 +setuptools/_vendor/packaging/__about__.py,sha256=zkcCPTN_6TcLW0Nrlg0176-R1QQ_WVPTm8sz1R4-HjM,720 +setuptools/_vendor/packaging/__init__.py,sha256=_vNac5TrzwsrzbOFIbF-5cHqc_Y2aPT2D7zrIR06BOo,513 +setuptools/_vendor/packaging/_compat.py,sha256=Vi_A0rAQeHbU-a9X0tt1yQm9RqkgQbDSxzRw8WlU9kA,860 +setuptools/_vendor/packaging/_structures.py,sha256=RImECJ4c_wTlaTYYwZYLHEiebDMaAJmK1oPARhw1T5o,1416 +setuptools/_vendor/packaging/markers.py,sha256=Gvpk9EY20yKaMTiKgQZ8yFEEpodqVgVYtfekoic1Yts,8239 +setuptools/_vendor/packaging/requirements.py,sha256=t44M2HVWtr8phIz2OhnILzuGT3rTATaovctV1dpnVIg,4343 +setuptools/_vendor/packaging/specifiers.py,sha256=SAMRerzO3fK2IkFZCaZkuwZaL_EGqHNOz4pni4vhnN0,28025 +setuptools/_vendor/packaging/utils.py,sha256=3m6WvPm6NNxE8rkTGmn0r75B_GZSGg7ikafxHsBN1WA,421 +setuptools/_vendor/packaging/version.py,sha256=OwGnxYfr2ghNzYx59qWIBkrK3SnB6n-Zfd1XaLpnnM0,11556 +setuptools/command/__init__.py,sha256=NWzJ0A1BEengZpVeqUyWLNm2bk4P3F4iL5QUErHy7kA,594 +setuptools/command/alias.py,sha256=KjpE0sz_SDIHv3fpZcIQK-sCkJz-SrC6Gmug6b9Nkc8,2426 +setuptools/command/bdist_egg.py,sha256=be-IBpr1zhS9i6GjKANJgzkbH3ChImdWY7S-j0r2BK8,18167 +setuptools/command/bdist_rpm.py,sha256=B7l0TnzCGb-0nLlm6rS00jWLkojASwVmdhW2w5Qz_Ak,1508 +setuptools/command/bdist_wininst.py,sha256=_6dz3lpB1tY200LxKPLM7qgwTCceOMgaWFF-jW2-pm0,637 +setuptools/command/build_clib.py,sha256=bQ9aBr-5ZSO-9fGsGsDLz0mnnFteHUZnftVLkhvHDq0,4484 +setuptools/command/build_ext.py,sha256=81CTgsqjBjNl_HOgCJ1lQ5vv1NIM3RBpcoVGpqT4N1M,12897 +setuptools/command/build_py.py,sha256=yWyYaaS9F3o9JbIczn064A5g1C5_UiKRDxGaTqYbtLE,9596 +setuptools/command/develop.py,sha256=MQlnGS6uP19erK2JCNOyQYoYyquk3PADrqrrinqqLtA,8184 +setuptools/command/dist_info.py,sha256=5t6kOfrdgALT-P3ogss6PF9k-Leyesueycuk3dUyZnI,960 +setuptools/command/easy_install.py,sha256=telww7CuPsoTtvlpY-ktnZGT85cZ6xGCGZa0vHvFJ-Q,87273 +setuptools/command/egg_info.py,sha256=w73EdxYSOk2gsaAiHGL2dZrCldoPiuRr2eTfqcFvCds,25570 +setuptools/command/install.py,sha256=a0EZpL_A866KEdhicTGbuyD_TYl1sykfzdrri-zazT4,4683 +setuptools/command/install_egg_info.py,sha256=bMgeIeRiXzQ4DAGPV1328kcjwQjHjOWU4FngAWLV78Q,2203 +setuptools/command/install_lib.py,sha256=11mxf0Ch12NsuYwS8PHwXBRvyh671QAM4cTRh7epzG0,3840 +setuptools/command/install_scripts.py,sha256=UD0rEZ6861mTYhIdzcsqKnUl8PozocXWl9VBQ1VTWnc,2439 +setuptools/command/launcher manifest.xml,sha256=xlLbjWrB01tKC0-hlVkOKkiSPbzMml2eOPtJ_ucCnbE,628 +setuptools/command/py36compat.py,sha256=SzjZcOxF7zdFUT47Zv2n7AM3H8koDys_0OpS-n9gIfc,4986 +setuptools/command/register.py,sha256=LO3MvYKPE8dN1m-KkrBRHC68ZFoPvA_vI8Xgp7vv6zI,534 +setuptools/command/rotate.py,sha256=co5C1EkI7P0GGT6Tqz-T2SIj2LBJTZXYELpmao6d4KQ,2164 +setuptools/command/saveopts.py,sha256=za7QCBcQimKKriWcoCcbhxPjUz30gSB74zuTL47xpP4,658 +setuptools/command/sdist.py,sha256=gr5hFrDzUtGfp_0tu0sllzIyr3jMQegIkFmlDauQJxw,7388 +setuptools/command/setopt.py,sha256=NTWDyx-gjDF-txf4dO577s7LOzHVoKR0Mq33rFxaRr8,5085 +setuptools/command/test.py,sha256=oePJ49u17ENKtrM-rOrrLlRhtNnrzcSr0IW-gE9XVq0,9285 +setuptools/command/upload.py,sha256=GxtNkIl7SA0r8mACkbDcSCN1m2_WPppK9gZXJmQSiow,6811 +setuptools/command/upload_docs.py,sha256=oXiGplM_cUKLwE4CWWw98RzCufAu8tBhMC97GegFcms,7311 +setuptools/extern/__init__.py,sha256=TxeNKFMSfBMzBpBDiHx8Dh3RzsdVmvWaXhtZ03DZMs0,2499 +setuptools-41.0.1.dist-info/LICENSE,sha256=wyo6w5WvYyHv0ovnPQagDw22q4h9HCHU_sRhKNIFbVo,1078 +setuptools-41.0.1.dist-info/METADATA,sha256=_i0otxacylu95CLISnMjTjG7DZ2vYZOvwedcoJ06JNE,3303 +setuptools-41.0.1.dist-info/WHEEL,sha256=HX-v9-noUkyUoxyZ1PMSuS7auUxDAR4VBdoYLqD0xws,110 +setuptools-41.0.1.dist-info/dependency_links.txt,sha256=HlkCFkoK5TbZ5EMLbLKYhLcY_E31kBWD8TqW2EgmatQ,239 +setuptools-41.0.1.dist-info/entry_points.txt,sha256=jBqCYDlVjl__sjYFGXo1JQGIMAYFJE-prYWUtnMZEew,2990 +setuptools-41.0.1.dist-info/top_level.txt,sha256=2HUXVVwA4Pff1xgTFr3GsTXXKaPaO6vlG6oNJ_4u4Tg,38 +setuptools-41.0.1.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1 +setuptools-41.0.1.dist-info/RECORD,, +../../../bin/easy_install,sha256=u9VdoJiWE7ctynyTZKPhRzcNijdc9kRoThsG87cf7mg,301 +../../../bin/easy_install-3.6,sha256=u9VdoJiWE7ctynyTZKPhRzcNijdc9kRoThsG87cf7mg,301 +setuptools-41.0.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +setuptools/extern/__pycache__/__init__.cpython-36.pyc,, +setuptools/__pycache__/_deprecation_warning.cpython-36.pyc,, +setuptools/__pycache__/dist.cpython-36.pyc,, +setuptools/__pycache__/msvc.cpython-36.pyc,, +setuptools/__pycache__/py33compat.cpython-36.pyc,, +setuptools/__pycache__/extension.cpython-36.pyc,, +setuptools/__pycache__/launch.cpython-36.pyc,, +setuptools/__pycache__/lib2to3_ex.cpython-36.pyc,, +setuptools/__pycache__/unicode_utils.cpython-36.pyc,, +setuptools/__pycache__/ssl_support.cpython-36.pyc,, +setuptools/__pycache__/monkey.cpython-36.pyc,, +setuptools/__pycache__/glibc.cpython-36.pyc,, +setuptools/__pycache__/site-patch.cpython-36.pyc,, +setuptools/__pycache__/py31compat.cpython-36.pyc,, +setuptools/__pycache__/windows_support.cpython-36.pyc,, +setuptools/__pycache__/sandbox.cpython-36.pyc,, +setuptools/__pycache__/glob.cpython-36.pyc,, +setuptools/__pycache__/version.cpython-36.pyc,, +setuptools/__pycache__/archive_util.cpython-36.pyc,, +setuptools/__pycache__/dep_util.cpython-36.pyc,, +setuptools/__pycache__/py27compat.cpython-36.pyc,, +setuptools/__pycache__/depends.cpython-36.pyc,, +setuptools/__pycache__/build_meta.cpython-36.pyc,, +setuptools/__pycache__/pep425tags.cpython-36.pyc,, +setuptools/__pycache__/wheel.cpython-36.pyc,, +setuptools/__pycache__/package_index.cpython-36.pyc,, +setuptools/__pycache__/config.cpython-36.pyc,, +setuptools/__pycache__/namespaces.cpython-36.pyc,, +setuptools/__pycache__/__init__.cpython-36.pyc,, +setuptools/_vendor/__pycache__/pyparsing.cpython-36.pyc,, +setuptools/_vendor/__pycache__/six.cpython-36.pyc,, +setuptools/_vendor/__pycache__/__init__.cpython-36.pyc,, +setuptools/_vendor/packaging/__pycache__/_structures.cpython-36.pyc,, +setuptools/_vendor/packaging/__pycache__/utils.cpython-36.pyc,, +setuptools/_vendor/packaging/__pycache__/specifiers.cpython-36.pyc,, +setuptools/_vendor/packaging/__pycache__/version.cpython-36.pyc,, +setuptools/_vendor/packaging/__pycache__/requirements.cpython-36.pyc,, +setuptools/_vendor/packaging/__pycache__/__about__.cpython-36.pyc,, +setuptools/_vendor/packaging/__pycache__/markers.cpython-36.pyc,, +setuptools/_vendor/packaging/__pycache__/_compat.cpython-36.pyc,, +setuptools/_vendor/packaging/__pycache__/__init__.cpython-36.pyc,, +setuptools/command/__pycache__/dist_info.cpython-36.pyc,, +setuptools/command/__pycache__/bdist_rpm.cpython-36.pyc,, +setuptools/command/__pycache__/develop.cpython-36.pyc,, +setuptools/command/__pycache__/install_scripts.cpython-36.pyc,, +setuptools/command/__pycache__/easy_install.cpython-36.pyc,, +setuptools/command/__pycache__/upload.cpython-36.pyc,, +setuptools/command/__pycache__/upload_docs.cpython-36.pyc,, +setuptools/command/__pycache__/install.cpython-36.pyc,, +setuptools/command/__pycache__/py36compat.cpython-36.pyc,, +setuptools/command/__pycache__/sdist.cpython-36.pyc,, +setuptools/command/__pycache__/rotate.cpython-36.pyc,, +setuptools/command/__pycache__/saveopts.cpython-36.pyc,, +setuptools/command/__pycache__/install_egg_info.cpython-36.pyc,, +setuptools/command/__pycache__/build_py.cpython-36.pyc,, +setuptools/command/__pycache__/egg_info.cpython-36.pyc,, +setuptools/command/__pycache__/register.cpython-36.pyc,, +setuptools/command/__pycache__/bdist_egg.cpython-36.pyc,, +setuptools/command/__pycache__/setopt.cpython-36.pyc,, +setuptools/command/__pycache__/test.cpython-36.pyc,, +setuptools/command/__pycache__/alias.cpython-36.pyc,, +setuptools/command/__pycache__/build_ext.cpython-36.pyc,, +setuptools/command/__pycache__/build_clib.cpython-36.pyc,, +setuptools/command/__pycache__/bdist_wininst.cpython-36.pyc,, +setuptools/command/__pycache__/install_lib.cpython-36.pyc,, +setuptools/command/__pycache__/__init__.cpython-36.pyc,, +__pycache__/easy_install.cpython-36.pyc,, +pkg_resources/extern/__pycache__/__init__.cpython-36.pyc,, +pkg_resources/__pycache__/py31compat.cpython-36.pyc,, +pkg_resources/__pycache__/__init__.cpython-36.pyc,, +pkg_resources/_vendor/__pycache__/pyparsing.cpython-36.pyc,, +pkg_resources/_vendor/__pycache__/six.cpython-36.pyc,, +pkg_resources/_vendor/__pycache__/appdirs.cpython-36.pyc,, +pkg_resources/_vendor/__pycache__/__init__.cpython-36.pyc,, +pkg_resources/_vendor/packaging/__pycache__/_structures.cpython-36.pyc,, +pkg_resources/_vendor/packaging/__pycache__/utils.cpython-36.pyc,, +pkg_resources/_vendor/packaging/__pycache__/specifiers.cpython-36.pyc,, +pkg_resources/_vendor/packaging/__pycache__/version.cpython-36.pyc,, +pkg_resources/_vendor/packaging/__pycache__/requirements.cpython-36.pyc,, +pkg_resources/_vendor/packaging/__pycache__/__about__.cpython-36.pyc,, +pkg_resources/_vendor/packaging/__pycache__/markers.cpython-36.pyc,, +pkg_resources/_vendor/packaging/__pycache__/_compat.cpython-36.pyc,, +pkg_resources/_vendor/packaging/__pycache__/__init__.cpython-36.pyc,, diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools-41.0.1.dist-info/WHEEL b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools-41.0.1.dist-info/WHEEL new file mode 100644 index 00000000..c8240f03 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools-41.0.1.dist-info/WHEEL @@ -0,0 +1,6 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.33.1) +Root-Is-Purelib: true +Tag: py2-none-any +Tag: py3-none-any + diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools-41.0.1.dist-info/dependency_links.txt b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools-41.0.1.dist-info/dependency_links.txt new file mode 100644 index 00000000..e87d0210 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools-41.0.1.dist-info/dependency_links.txt @@ -0,0 +1,2 @@ +https://files.pythonhosted.org/packages/source/c/certifi/certifi-2016.9.26.tar.gz#md5=baa81e951a29958563689d868ef1064d +https://files.pythonhosted.org/packages/source/w/wincertstore/wincertstore-0.2.zip#md5=ae728f2f007185648d0c7a8679b361e2 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools-41.0.1.dist-info/entry_points.txt b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools-41.0.1.dist-info/entry_points.txt new file mode 100644 index 00000000..4159fd0a --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools-41.0.1.dist-info/entry_points.txt @@ -0,0 +1,65 @@ +[console_scripts] +easy_install = setuptools.command.easy_install:main +easy_install-3.6 = setuptools.command.easy_install:main + +[distutils.commands] +alias = setuptools.command.alias:alias +bdist_egg = setuptools.command.bdist_egg:bdist_egg +bdist_rpm = setuptools.command.bdist_rpm:bdist_rpm +bdist_wininst = setuptools.command.bdist_wininst:bdist_wininst +build_clib = setuptools.command.build_clib:build_clib +build_ext = setuptools.command.build_ext:build_ext +build_py = setuptools.command.build_py:build_py +develop = setuptools.command.develop:develop +dist_info = setuptools.command.dist_info:dist_info +easy_install = setuptools.command.easy_install:easy_install +egg_info = setuptools.command.egg_info:egg_info +install = setuptools.command.install:install +install_egg_info = setuptools.command.install_egg_info:install_egg_info +install_lib = setuptools.command.install_lib:install_lib +install_scripts = setuptools.command.install_scripts:install_scripts +register = setuptools.command.register:register +rotate = setuptools.command.rotate:rotate +saveopts = setuptools.command.saveopts:saveopts +sdist = setuptools.command.sdist:sdist +setopt = setuptools.command.setopt:setopt +test = setuptools.command.test:test +upload = setuptools.command.upload:upload +upload_docs = setuptools.command.upload_docs:upload_docs + +[distutils.setup_keywords] +convert_2to3_doctests = setuptools.dist:assert_string_list +dependency_links = setuptools.dist:assert_string_list +eager_resources = setuptools.dist:assert_string_list +entry_points = setuptools.dist:check_entry_points +exclude_package_data = setuptools.dist:check_package_data +extras_require = setuptools.dist:check_extras +include_package_data = setuptools.dist:assert_bool +install_requires = setuptools.dist:check_requirements +namespace_packages = setuptools.dist:check_nsp +package_data = setuptools.dist:check_package_data +packages = setuptools.dist:check_packages +python_requires = setuptools.dist:check_specifier +setup_requires = setuptools.dist:check_requirements +test_loader = setuptools.dist:check_importable +test_runner = setuptools.dist:check_importable +test_suite = setuptools.dist:check_test_suite +tests_require = setuptools.dist:check_requirements +use_2to3 = setuptools.dist:assert_bool +use_2to3_exclude_fixers = setuptools.dist:assert_string_list +use_2to3_fixers = setuptools.dist:assert_string_list +zip_safe = setuptools.dist:assert_bool + +[egg_info.writers] +PKG-INFO = setuptools.command.egg_info:write_pkg_info +dependency_links.txt = setuptools.command.egg_info:overwrite_arg +depends.txt = setuptools.command.egg_info:warn_depends_obsolete +eager_resources.txt = setuptools.command.egg_info:overwrite_arg +entry_points.txt = setuptools.command.egg_info:write_entries +namespace_packages.txt = setuptools.command.egg_info:overwrite_arg +requires.txt = setuptools.command.egg_info:write_requirements +top_level.txt = setuptools.command.egg_info:write_toplevel_names + +[setuptools.installation] +eggsecutable = setuptools.command.easy_install:bootstrap + diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools-41.0.1.dist-info/top_level.txt b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools-41.0.1.dist-info/top_level.txt new file mode 100644 index 00000000..4577c6a7 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools-41.0.1.dist-info/top_level.txt @@ -0,0 +1,3 @@ +easy_install +pkg_resources +setuptools diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools-41.0.1.dist-info/zip-safe b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools-41.0.1.dist-info/zip-safe new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools-41.0.1.dist-info/zip-safe @@ -0,0 +1 @@ + diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__init__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__init__.py new file mode 100644 index 00000000..a71b2bbd --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__init__.py @@ -0,0 +1,228 @@ +"""Extensions to the 'distutils' for large or complex distributions""" + +import os +import sys +import functools +import distutils.core +import distutils.filelist +import re +from distutils.errors import DistutilsOptionError +from distutils.util import convert_path +from fnmatch import fnmatchcase + +from ._deprecation_warning import SetuptoolsDeprecationWarning + +from setuptools.extern.six import PY3, string_types +from setuptools.extern.six.moves import filter, map + +import setuptools.version +from setuptools.extension import Extension +from setuptools.dist import Distribution, Feature +from setuptools.depends import Require +from . import monkey + +__metaclass__ = type + + +__all__ = [ + 'setup', 'Distribution', 'Feature', 'Command', 'Extension', 'Require', + 'SetuptoolsDeprecationWarning', + 'find_packages' +] + +if PY3: + __all__.append('find_namespace_packages') + +__version__ = setuptools.version.__version__ + +bootstrap_install_from = None + +# If we run 2to3 on .py files, should we also convert docstrings? +# Default: yes; assume that we can detect doctests reliably +run_2to3_on_doctests = True +# Standard package names for fixer packages +lib2to3_fixer_packages = ['lib2to3.fixes'] + + +class PackageFinder: + """ + Generate a list of all Python packages found within a directory + """ + + @classmethod + def find(cls, where='.', exclude=(), include=('*',)): + """Return a list all Python packages found within directory 'where' + + 'where' is the root directory which will be searched for packages. It + should be supplied as a "cross-platform" (i.e. URL-style) path; it will + be converted to the appropriate local path syntax. + + 'exclude' is a sequence of package names to exclude; '*' can be used + as a wildcard in the names, such that 'foo.*' will exclude all + subpackages of 'foo' (but not 'foo' itself). + + 'include' is a sequence of package names to include. If it's + specified, only the named packages will be included. If it's not + specified, all found packages will be included. 'include' can contain + shell style wildcard patterns just like 'exclude'. + """ + + return list(cls._find_packages_iter( + convert_path(where), + cls._build_filter('ez_setup', '*__pycache__', *exclude), + cls._build_filter(*include))) + + @classmethod + def _find_packages_iter(cls, where, exclude, include): + """ + All the packages found in 'where' that pass the 'include' filter, but + not the 'exclude' filter. + """ + for root, dirs, files in os.walk(where, followlinks=True): + # Copy dirs to iterate over it, then empty dirs. + all_dirs = dirs[:] + dirs[:] = [] + + for dir in all_dirs: + full_path = os.path.join(root, dir) + rel_path = os.path.relpath(full_path, where) + package = rel_path.replace(os.path.sep, '.') + + # Skip directory trees that are not valid packages + if ('.' in dir or not cls._looks_like_package(full_path)): + continue + + # Should this package be included? + if include(package) and not exclude(package): + yield package + + # Keep searching subdirectories, as there may be more packages + # down there, even if the parent was excluded. + dirs.append(dir) + + @staticmethod + def _looks_like_package(path): + """Does a directory look like a package?""" + return os.path.isfile(os.path.join(path, '__init__.py')) + + @staticmethod + def _build_filter(*patterns): + """ + Given a list of patterns, return a callable that will be true only if + the input matches at least one of the patterns. + """ + return lambda name: any(fnmatchcase(name, pat=pat) for pat in patterns) + + +class PEP420PackageFinder(PackageFinder): + @staticmethod + def _looks_like_package(path): + return True + + +find_packages = PackageFinder.find + +if PY3: + find_namespace_packages = PEP420PackageFinder.find + + +def _install_setup_requires(attrs): + # Note: do not use `setuptools.Distribution` directly, as + # our PEP 517 backend patch `distutils.core.Distribution`. + dist = distutils.core.Distribution(dict( + (k, v) for k, v in attrs.items() + if k in ('dependency_links', 'setup_requires') + )) + # Honor setup.cfg's options. + dist.parse_config_files(ignore_option_errors=True) + if dist.setup_requires: + dist.fetch_build_eggs(dist.setup_requires) + + +def setup(**attrs): + # Make sure we have any requirements needed to interpret 'attrs'. + _install_setup_requires(attrs) + return distutils.core.setup(**attrs) + +setup.__doc__ = distutils.core.setup.__doc__ + + +_Command = monkey.get_unpatched(distutils.core.Command) + + +class Command(_Command): + __doc__ = _Command.__doc__ + + command_consumes_arguments = False + + def __init__(self, dist, **kw): + """ + Construct the command for dist, updating + vars(self) with any keyword parameters. + """ + _Command.__init__(self, dist) + vars(self).update(kw) + + def _ensure_stringlike(self, option, what, default=None): + val = getattr(self, option) + if val is None: + setattr(self, option, default) + return default + elif not isinstance(val, string_types): + raise DistutilsOptionError("'%s' must be a %s (got `%s`)" + % (option, what, val)) + return val + + def ensure_string_list(self, option): + r"""Ensure that 'option' is a list of strings. If 'option' is + currently a string, we split it either on /,\s*/ or /\s+/, so + "foo bar baz", "foo,bar,baz", and "foo, bar baz" all become + ["foo", "bar", "baz"]. + """ + val = getattr(self, option) + if val is None: + return + elif isinstance(val, string_types): + setattr(self, option, re.split(r',\s*|\s+', val)) + else: + if isinstance(val, list): + ok = all(isinstance(v, string_types) for v in val) + else: + ok = False + if not ok: + raise DistutilsOptionError( + "'%s' must be a list of strings (got %r)" + % (option, val)) + + def reinitialize_command(self, command, reinit_subcommands=0, **kw): + cmd = _Command.reinitialize_command(self, command, reinit_subcommands) + vars(cmd).update(kw) + return cmd + + +def _find_all_simple(path): + """ + Find all files under 'path' + """ + results = ( + os.path.join(base, file) + for base, dirs, files in os.walk(path, followlinks=True) + for file in files + ) + return filter(os.path.isfile, results) + + +def findall(dir=os.curdir): + """ + Find all files under 'dir' and return the list of full filenames. + Unless dir is '.', return full filenames with dir prepended. + """ + files = _find_all_simple(dir) + if dir == os.curdir: + make_rel = functools.partial(os.path.relpath, start=dir) + files = map(make_rel, files) + return list(files) + + +# Apply monkey patches +monkey.patch_all() diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..593bd97b85d285829b14c833b15664f8ce195033 GIT binary patch literal 7655 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/_deprecation_warning.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/_deprecation_warning.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..201159479282e997149d55ddc5796034cf510cb1 GIT binary patch literal 506 zcmZWlO-lnY5Y28&TNVo*JbK8rU_a2SND;-GmkL5rX0w~r2C~UE*{#&8{t|Cq{6Ty5 zUwCqwUD|>JZ+MxRH<Ou*em{Ep9z9otkRQa(+Q_B|cY^MYaKeKRgdp#&dBDRN8MIQ& z>?}YwMYv;hf?y4qhdh|K>e}jbCW<mIj8X1J<W{7tkVZc;tEGN<`-~{sHFJWdiaAFY z#?se1N%_9sQK@MhyIrq1j=c0?DP1E)qD_G+E7yY4g*6#U{tu1gGs-ll%u!dSODdi3 zw3bdLO3-A3Ef%a)#mL9+2koi{pjjpWst6!6yi{9$1h6WZYBF5_Zc>0RVmo*W?|yH` zMV60qnGcgvDn6X7mWi31^YMO@Lkb5gLvw~vzOmaQZ{b38y^eq155lV3+|dX2V{6vM P+NyV1fA`AEF+%<THqwp0 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/archive_util.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/archive_util.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5a924c719edf81dd01c772a8b6dab322a1a05468 GIT binary patch literal 5094 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/build_meta.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/build_meta.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9980e00f80fa8171de11f5ff26361222a150d6ad GIT binary patch literal 8247 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 YN*kNi6}Y3NYIUu>cC8HXG5K@<7nvYcO8@`> literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/config.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/config.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..52c9d2fffed1dadbfc3795f0cefb77c99d0fccee GIT binary patch literal 17670 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 YKRc5tF2l!vxOi;li^dm?&&)mle<r<A0ssI2 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/dep_util.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/dep_util.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c8d91cacfc1e4f8b0624ae84d27ea1f488ba6e3f GIT binary patch literal 813 zcmY*XOK;RL5VrGJ%C=jf6^C;3EseCzRz*D^A%u8bIe<i^71hccd$XpFo!X8Ts`SG0 zUl135P_CT#3vgi)Z>6mxPsa23zL~L~jz+^zzp~38Aws{=&I&+(3ELilV2ELfN<70D zv4Dl&(JWxm2b9Ktz>8Ac?km3LW?mRwS9zD)t$4d%!{15}4mD_lLE;U*3eAzj476{! zK(_(x@XIR~_?QiTgD%f*BNsNPiJm}4CpUq~n&5NfZ5ybj3E|{@aJtSeP!lxaGJx8G zn|~KnUXg`%D?&|Cms~kZgd!C+R7x%<#Bu9{Du`GTPV*J9x;8l{eH%nr(swl^u-u9& zA|OB4#&BC{#kxcXz}#izJ$JQHmQVl}hUg`c!b0@1N3?!2cH*)6B%6};iW|Nqh03;k zp35Uo2+e`fb7}BEI4`MkBDXyjFeN*)KTeaZx8Iy6_ox#>6(fm9wFxO}>&Sw8L|Sqp zxhmW$joT2kcKDIXn!hzhn>IF772I^U+74({amCVjc6blowhy+@?L#%+x;pjFip5W4 z_5tGWv#BeqX(g(YMJ*&dIlW#j^ywL!T9{$ww3c>PWxSf#PROkK+CKK3b|YR3%l%LX z-Rl~IK!ZnkFN|=6$M7BEabQMZeV2yqn89syC^oyp>-*^g`m%P!0VK71&r8i}$zNbN J*{=74_&=M?>&5^8 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/depends.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/depends.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d7390226df01dd1dc690c54cf4706aa35e387741 GIT binary patch literal 5239 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/dist.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/dist.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d9c9ef98668a2b47ee58c61393bd54a0e81596ba GIT binary patch literal 42139 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 aFAQT}z`fDJKq)=)kwo|3{^5@#Zu@_EV?X!+ literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/extension.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/extension.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..01ceee08ca162bff564604ed2df284e1a75210b2 GIT binary patch literal 1933 zcmaJ>PmkO*6t|tsOeVWCUD^r(t%RW!Wz;sU$^nD`RVow-p+%y5C=n>i#-5$b=3i~6 z-5F(1(<^)g?p*i|d<}~mr+x)ayqC;ow^Bu-_xx->KmXo8e=?c)KmQs0^4E}%f5?T; z1^FS6Zh#3QXhy<rq#<qREOgq@-HwBHWZ5tug(FIYBizi($Ke>{ff&9dp)dV#M~<bl z++9vKG@O1*#7KBAiSXof<Af8KkA)9&Uru0tNzf-`w(|-Qko_68P99gUC`>?}97z+^ zMHQQ5Aw_~J_~Gsj&?6xI0GObsWOdb$h6r{<h4U+0QUK&WAuciO*jINb9HQhWQn050 z6fPXD@B19SAEl{P!4Fg|c{=BhR%THaJc$c_2n%^tDkDYEs;=Mbc7v}|ZEBNdIykJ; zOhod;*l{lcZf~y2JOizR$1}(JQPdfVA~gWCcKpprA}f=Y#f*kKNqZ%#WPcDf28Dk= zzi0C5UX@mNTdQ~PKU*A@_aBIR8qijzEHiykg!^To!CX+S>~6G(pUbGTx{DE-0wb<V z8QY^Sozfvy7`;B6xXpkb0%;CR63l+c1chuf;Xqbh;feu_kYfnm2wm9Tx&E{lxmm=9 z*IH_RD@bnfd76Qk7QD*hMDlVD%hl>+yOB6>6@C~Kti&IH^vA#&cL^yKY{ME7QNxx_ zLmJw!xzjkmv&Q`mlS=@Hvu~%>D$3G4g)BvJl|G)i)~U)$O~4LBzQ<-g$U>2tD4Gqd zt7SH~ZV~6wj&xb8L~85C>PTC5{G!c4$9%A&_JG|0(g>0`Q@Xy~n+?vaCRmjCp%PMC zockacvLVXHDsRY=R+j}kr43!O4Rp^jQ#XZMFflk~##y>%upEkE!#2*TV@Aen!1LvJ z!!{HmF>X6$wEnxT#;$m~$ZlQWFH*DM7-BBZ(xbU4`D^=TA-MrxrRnWtadA|~NAmnw zzz-Iw=DAE3agpkr$5~ds(7e}-YiJbJS+A=qTlK~&CGRF>@myl(^j9C&29dz#Tq-CO z+2PzG>lzGQ+P7rwB)4y`-5{x|H4BpU06n@n^V_Pm-Wdct07O#R@w_gQwkPbUij_&@ z%rYgdqw7QKVizi`ZgmCN%vEo}0L$QU=yzej{#Dme1)J|Y@%DPO^&<iR(H3fC$_P)- zKv!dbk>QZJ)TdYJ9$kNQp)&sG@cwLw1&IY1MfgDErKmHMccbW89cSB}Q51<Xfp-II zP`!`r9AhiB6^bx8kcJ1Ic+_RyP~qBZEsh2H5J;n~*IOK0$&S8H4^^yI>o32nwc%NM zEP2e8JgT!;@!qdH98-z!lHsuijjTHceXfm+#XiKC!wu>KWFI2Cf$UAVZ^FiBKpGR| zQHAr_p1KBudKZ|TivFohO33NBpWD4&45U&}iuTHdm9z2>ubn@c0XBsy0-c@&dHG!G zwl2b9UKYo4rLbw+5)1wI1+7*}o>&*}ZG)*Up#nmDlP}i$qRZh|7-#)9FpqA3w##-M L?~)6A@16eu?+5zZ literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/glibc.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/glibc.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f681c773b52f1846a3d03a887921a3eb8eb5174a GIT binary patch literal 1503 zcmZ8h-EJH;6t+D-JDnukzfd7SV2L1QM6!umgj7@ts5C+-T2)P@qNUYncI@4q-I?*! z_B3oXxmw<Ur{IPM@-0`q0#_V+6OqItA6v)v=i~1?XC7^B#c%!^y#09-p}*0UMqvIu zboCP$h8QkUg-00MIVs7AxX~MVZuCb!^O*lT8U-w1A&epGu?WT<yTxJ{BSub8vhfd~ zp#+=T*;t9P)jTb#Mo2x(?SgF{^bP3GpsN>PG@4_ESNI$);||TqIev}mZ69fG5zAeS z?8op4`o-?_JDdg`UZHcM!;a|Qim2m`%;9=KAe{}uJA3?+>sHo^PRnAP)AwAeLex}g zS=7@#DkL3>n$u!JYoTeYz`Nc$7@8ncc~K;{OqlCs!<F%${djzAwx@NQPPtAkVtRpS z`afvE9K$=GODUv@@-&}iGHpyxa%In(xBz&ivpVO-g9uE>crF-EJae~^BIin_byjiJ zWI2~15Mnki;8WQCCz7|p_wUySx@r!ZqS+s}MalLL-_6G2@F6=;@YF^NQL3v`_wYfp zgt)H;Y!TtHvE_an4C=+0;28J4(2H<LVjL5B7yP-E$u=LlojbW~uB_$i(2AUUou_s* znR|?M=mFCHihxw!3DQC5%|qs|K-LZ~h&a0N1kOVi0mu{%&vtgdd-0^o=0ZOG^>F|3 z+b@$h1LrF0|6OO_KL4%Zx#sMKoTr7J(T6k_kYP2iwW1DcP}$RabSm^W^b2)l0_TRo z`jeg^l3Sn7XC^w$WDSIX%64Y@FWXud6@R^U8?UIf38qrCP2$TwJm2&sf7ce0vvdu+ z1+YccR;hzGxN>@}%^iE-em>**BE6==4lF1OhkBdX$011I<9k?s3ZC4SrfrsXOTVMu zu4rWQzJt<SMDm`k35`3T9_j%|Pss2nS*z!85>I{%hvX;L*t>29_Q5QB&r?fZri*dO z*CBodJ5>Y*L0A!lB|n3CZXLE^=r+LXL7@&x)CJ|AKn8SZ0)=P;OoFpNUdbiZf-<hT z1d=$_Gk#slIHu4pi#DT>(Iuy1a#690?m`mpUDk0zPiI9w1HehvmfB+Ts?p2K-43j% zX`ZR|U8N9<wxN@(DAmBN4h;fXZDjys6rSTuf?e*z?`!LtS~rP{E=%edPOiBM9altt z4j%Y-#A!Nd;TOcyR9d#A)lu4tlMk%1CFVqO<hoN=F0lnKUG79rD#6;4KlQ-n5@wS` Opi1OLA4PYf5B~#|MuCg~ literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/glob.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/glob.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..51a1a9c25b277cd87e4ff91f4e4fee0dd8bde455 GIT binary patch literal 3710 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/launch.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/launch.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..57f17f35163fa302de7137f7284f73192a1228d4 GIT binary patch literal 812 zcmYjPO>fjN5cO9!Y1(o@i1y~|B6VBfz@<V+Tv1iQZM#+Ejoq$GVh6{m*j4tlaO8(@ z;RpH3segeJ;{=J?nwMwKWb&ReuMZFN#jn}*Q;N`U^k@;_?;zS4fJAd7u_P6q<Kao> zL{iDVp*dAdCZCCWq38}_B*`Z<oouf1527>Wiu;w~mutVWhPS2DjpxAPWoheL7|APb z6c;yMxx7`rYrM5p%XQ0_*80{v(KJf(do8%G8|(Zme*i(~qKp{V1R{ZW579aR4>CNy zBN88@E%LMnQBmv<y2azYq~FQ$SVJQ}N1pjaCVsM`Thfyr?eJZ?LtEO@yG%}Gx+7cW z_j(4sGN?&>-X}fY5im@_@ZRP!=deC@qq%=pHJDzvGvRLUuU=kr0lsdy_IxGeP`*^k zaBc4GXRv65@0_Tr^=!yJV6YOhqNs&7MR75u@o=LnRTPmKQAd^*g|sCQW*cQTY~dDW zLl!15^;MPA{cune%T8Bbn-;1l=m{(e3QX$KhxAr?;k^r)2NgzdluP4>nNvcB)TyQt zr3xwht_HsCGDuD*VSjWus0e#eOWVY{B&sOFWK7TZjdgV~9s(<^R6mh>4lVw?IrVjO z+UVvas*@*YUsg+d_DY`qAA-lU8m4L1tOIqOIfM@F5dcaU&M_HwMvlk<9=AJ&oP&`@ q)5OIAaZe)T5r$M8m_f)Rhz&z_UR&8!>Mes)8(&~ahBKNy%kW>yjN7jO literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/lib2to3_ex.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/lib2to3_ex.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..043b63b2a93c3dd5f4fe006f14dbfd8e8fd31029 GIT binary patch literal 2391 zcmbVN&2Jk;6yMn|uQ$#|(?Fs?U{$J0mKvu@F9;Bd)RKw=20^8w6=h|6#?Ef`!<iYk zj^&)3EBp!Ex$p;##EBFCLQlLmUT>TzEr?moo0;7=Gw=Q0d%u0Wy6XS*N9*OEHN*JJ zSZX%RkD!YmK~N(!D4}LbGBdOY&aKqWoY2v8J9V>KSj)W7(`zTKhxKO$b!qL=pfy&T zS)mVWkJe#bXBMnY>il3d{mHriWF%yf#S=z@Z{l&BAIjo!AV$Ms!R2SZAM6JmO2y($ z&@Xt<EAm&2%QzndwCG7Dr0{+J`AIB-te~Tm1-ugrCW1~Le4XJzUvUomiahx4T%N#i z*z*4d$BZUX_3BnwSZOh6nri)f*6;LW!QqPMMUkrQ0h3Wb9y2bYJ}<Ip*y){i2CUt~ zQx?sH$q{sM9|SW(0>GIF+@%p()S@<wHg%{AqeE)|fTwnz#zKx{oQfNF_V6@p7zzve zx6s8F2x%l_O8R7K{$~Da0OSUoMA}W0qndIUI@`3BEm+!DRwf3@?(l(7=IQI-4c-8y zH=iHKY<Mt?hx^@8oYMVAXD8j_(IGt$Opb;Ud=|^oH11+tA~tRf&s7~ziu5g;Xp=US zOzyqSlUAi(`GkgIe}?=2gHLvx_lu^*J<#WM6g~=cWiD1>rdIHxj0pjec@JJJEW7_s z%gPP^+ct-??r89@#%a*B>dumB?*>h)x0|l=qA2fVEQ*vLMe`hoc_WI>MxAv2g|8tP z8z?X;OW0_X5FqY?xC33_#3P>NS^8ZMmQ};J96=WkKvY>=rzW*73FI+ku+C#$-jK&0 z7Ba^qIPT$IY?!kS^e4~-2Qf7g$XZHH>wE+AbxOnzj?zplJUOwaWJb1)86l|a%pk8} zboFTRuB;^<&t)Cn`7?51O|4{Q3g^LN{{obhH)JDOox-^@v#bcG{d`h8MoJk3Z%6=T z?Y!o(WZ~+9G@>F;&zoziL7@hD+=VhM^3WRz7GbvQa^mY?y|R-c&edL2aYYpAx|wr= zj*U>e%b(e}myReaNkjQpbro*$QLZn5`=f;|Iu2?@b4+=j$4eH1pjQ_wZ?U^+>vB*| zKTeqly~Rn2@TK7ExCh|F9&~}JXIKql>t~BV4#3PMKG`%Uo7E+)#T`9@8=zr$F{nDA zU6^1%xsM?nz&tX>A4!s!PmPyb7X-g0mee7|fS&EV&_PXHYCr<~JPts^N!+(+AHS$5 zt;W%8{vn9){RIilF)A5YD3^^T%PGfv<LF?xzKCFnJ}@H^ha$rpz=U^iiDL^?1=f)P zz#upcvITvOO!lq-x@BL56&68-RT~x(yr*Pf%q)!!;G}VQFeQlvNWdCV8sD1|KxFsA zoSN{~K6Uv+91~}%zn?uUaWUKB+V%7ThN!_Gsv{+zBd}c|a9xpq0_JE;mCIRHykaG9 zh3lmvEinuIt5m#++C~IFg5~u76iyXLGX?;KQ2Fpoc9-G0zM<VD$4!^tMQf1$Inp%` zQ0$`k0L2x%UojZwA!b9#VE!F%PCd;PRg18gfEL%Vob@lYg;G-!{}?u@di7=gtK2A4 ms<o&zj&Yl365gVV@-{n^_r;urzr@7SuG=QMzF~US#>zk11Vr-y literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/monkey.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/monkey.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8e1d46cbdeddaa199328a7ab56b9879bc0f96beb GIT binary patch literal 4659 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 O&D-+c@~Yk`&-pK_Z{4>5 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/msvc.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/msvc.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6ee73c9a89c1358dc1b427a5e0724700c71a1d9b GIT binary patch literal 34486 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/namespaces.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/namespaces.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2a9a41ca8be40ddcc6e1c1bc56a5e5fbc0291c8b GIT binary patch literal 3636 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/package_index.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/package_index.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4957fa26afb6a2108a809566a0806b7fb1761623 GIT binary patch literal 32789 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 QWk<&z8rh#pq9peJ0OW@Sp#T5? literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/pep425tags.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/pep425tags.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ef83d5bd2e8a7d61e4fc95ebf9186d3dc8688142 GIT binary patch literal 7301 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 Cfc_o; literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/py27compat.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/py27compat.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6bcad61329c6abbf2712c3e2083d4a27e60a5e6e GIT binary patch literal 769 zcma)3JC74F5VrSyOHKz=NHlI&;x?yHTmg!Zt{?@RB3&9*pp~=sCC+&tXM0ihl<xR5 zH2k1#srU<2j5m>ps2FKx{1|`pedE`sr}5_>>6aG{LO;=w!5+N>*9!;?Wr$(sNStBF zu5?N_b1`Bb^S`0Y<L<^+DGLreya^r=3-6qIYHzZThib;7Dqs;if%+5X+@K_Wn8a6g z*-#^vLJHH7o3?3cWyo!<$h<S_x+0VGlF*6~PL&i~#lL_Jx=wKKYOyUWNozJ+zXI1W zgdN(T9e%{n20zSV0`^{f<rQF&*<vyO$hD>`{)#AWS_Q{ak~OD{D@{sjinXX#gp$?p z=8kvi00C{o6*oClCr%%hdyw9Rg6~KL(D(P7u_>EzBbxJND<nI=xL+^piwPTRXw;ax zmil<vbd$?sm_gcf{n-ILKTxqs^q|pG5v>1DuboZ|NC%L_Q69Wiz73Y+K7@8<L7#)~ zo8aF6AgXp-U^ud7v-M%D7G#I)K(7Y`=z_QZ0QS*aNy{ap)0a@K!I2t4Na8-sb5<95 z-ban327b8Ap8cIk%D0BAN?EZ3tKOY|n)HG0wBcoTCM~ZVrj=7&2m!xuRQ5!bMsc2N lddrW93>vLGU{lttm3->LPFta#6FDO{3IiPZBOJI-@gM3iweJ7` literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/py31compat.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/py31compat.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cd840eec2f48629b3521ecea058942a85cc3b5e9 GIT binary patch literal 1167 zcmZ`&OK;RL5Vjp}Hr;lss_Fr$9CAWLq7T|52vy=GK-wa;q7Z?sH1=+@bsn|7v|IJo zp7|Yc;Rof)iNC;!ne1+<pg8h)Y>#KY`DU`+?RGwXU;p&NBjg9UG3G(vfob1@7?7AK z8nf||B$8?`=P{?`fD~JtsMc}Eyru*{xMkXp{bu!I?<J9*<X1%UOBVAFq+svCVvj_v zpWu~5v|ip<c~zRkjGtvjrLHvNUW#|K!9dx8Y43wjB&L$YOw!nsOnO%&=90@6tS#xw zHmtr3!2g`VcjsR_;dH!HW*pique1u?EMzEWF~hVhoH}!1o)pPInf2?32btEPgU7B6 zrP9i&FzGvGP7@;^goh&+o}xvfZ5d{RqBJVp-3yaKVzf*r=Gv1orZhGzi;17CEdE4E zDZs^nu%Q&>4NQ9ngd`V45J!isPcG;eiaSXlMcRwJniol~>Hst9XIj<m{8-{9Vl}r) z_iO(cfDY_8VghjX>(PeGtBoqF)(%IRmTQ|QM~CI+mfWz)jVf1`+TK*F@%F>C%&Ww$ zSK~SmA}cZ{#0rArAPDv8`RczVT%TE9=Y{#<d<xV0ATG#ongunOa6}CrH!vq+4z~52 z5DF?|gg`PZ(nIL^-CILW4bui0*x`z8+{D}hWxVXj5EvXn16{JFfmb+j9yIX1Ndr$? z6gg)N%dEE_@!GdXBbVvgH@P!PHGu2(?%s1OX~Y}kbz7aKZd|E20OfO{M-$DNBvpT> z1yrgtq;eHt*$xOo8C|A}|0i@}-;3H<2Q0e~bw`N2lp~G$f)FR8L{D$pLdY@|!k}-1 zESMz}*abHPa@_nXT~I7u1})A49(c_u1OrEj*5IEvxpg6;a!INaYr#8G+*sE0ukb&1 g4I^d&k8cT82ahLspI|T8MG%~EkFh1lJfH#l4Q*B!`2YX_ literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/py33compat.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/py33compat.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6d745b532461686305174b657fc8b9d43be3da72 GIT binary patch literal 1378 zcmZuxUvJz*5Z^zx&*%8krbM&_gsdVpoJ21bdEkMnYM`eUi3SAeKMQ2}yqk+JKCiRh zL%GQJ!u647#3w*PAU@E(@^oK;7nt!85kc3Q+1c^T?9BYe-s|;(Z+;(q`>R99ALP;s zL4E*K{|HPFK?@SEcN)|7%wjeVTZzZ~IVo>AL^>ydzDEf@g2wzMDcKA3Vud^PVh^-L z@S-#IW1kY)jRVOh8^RIplEvX8B0SM~MMMWqJ-I1~@MUkw<0~L@(Utz>>XJ;hK(i(2 z*Q6h;AUAT*r<T|G8EhNJW?Cdws%xpO`$e^{$LE2nG9_e`>T!nV7mI=L0H}Tkm?T(K z%mfwe6^Xgv!hszUgKIo{<&(LQ7$wQnv`S5e&bV+#`V^=RfHkxs2~-Jg6ccmMtIw=c z%i>6TVDSslK5Tz}ylbY_Zk1PeMzg#SckZ4ZkJQ}{#cnOltTIX!^<}Y|@9nKGA5?Se zCrMuBCQ07Fi`#7I`HlZ%Ik+&&C|KdbivehYji`SEX2=A9YRH66*pe-%;s3~V!30}y zAm{A+hBxel=%1lDev>TR#x>5wJ#qC9s1f`+xrv2C&rlNXHn~n3kQW~4ypPC&w;tXJ z(?6Nc#1~zN(rLV=15nd#vT#msm!a@mdye*|+qjLlWY1ubPH#VlK|r|A@4w7tA)=l4 zRrLYj+24t(G}qCQ(veKF<49FfrzTfrl$TM9x*APnW}+QD>{vR|*osxluxl%bPgWeH zoPc<+`U_S+ux_e#I&bl^olF7jLRwzP(sGg4w)c4d*)ZAv>e16D!-GQ`4qqG&4;~I5 zqDo_2+sjKM$5JO|UddWx)BC>e;460o!&F-?)sf|u(KeK4MwUW~1ZuKORhEMgcMDaH zTmN=o)~t&W5Pbu&lQ-d1N5BZbN<-#QhXu?BiYRaz(2zRZ0r|DF(S|tayBM!br!q-w zkR($jW(CS&lAO-cV*N(raO-!G;SgP7n2~mYT?4AIP@np|)mZ;xBCS6wWu2v!>|fK{ z=&=RNZe*$`03SfCwhn&0cH^^YrL-Apt#rKg@3%0(Ch4;6Zv6KD^aJ<-45sQk=ry8g z9qfDDgL0%vvm&i)tPX1t@O2fkMP!|1XACCBXnhMEgU5$YKL4`)gXs4#(btq~{d?;! c-N!+y-vS0TLz@{ie3J$&L@-#$H*bafZ>IxU_5c6? literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/sandbox.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/sandbox.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..011164f65871d1daeffc9aadac45d6712d4032a4 GIT binary patch literal 15681 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/site-patch.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/site-patch.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..40ed47a3471de5723cc1a065a4fa48ff8e4052f7 GIT binary patch literal 1464 zcmY*Z&2QT_6elTJl4aRR94AYL9efxN_>d2@0}6COu%R8+U9tczkko6SDI()YmL-{F zoDWc!xx4I?-S#hRhy4M?j{749UbjoHJN8iQQAUf72A|0He(&-3KH&T9w*TVyozu4- zLVu$V7J>5@u*D}JD5Cf!8X|@%856$2&>Ug(9irA#G_Yep)N2i75B4M2Vi_V(Oi_la z#TQpt;gqBnC39R6MJO73;xmO(n_3X{p&|j|4@amXd7wzz0JLL}(p8As37T7#1!zw; z6-1!uN3w}38&F>A%N8IT*RPcQ7@huBIm%IuF%dK6K+K<}Gi9ZgGSOV+!n;lWhjP<^ zHbCPkuhzU$UfMPqjE>NBcGIufcdDjp8l-YYcurnem0z{0;27oWHj+zYpZ|-Y78qU4 zo}-+cAmy99_}l61wg;XNQTeK+g1L>+F;r6d>9VQbN&U((#Gt_I2P{{pOTCxKWcV1( zF)(Y_nKvnh%sUh-6n3xI6@d&pl_OV8J{aBM>B%v8*(mL*&I3dMC40)IcoU+$Ak|W} zOi{H0b?shfi|D6k;NLU;U|+3zs;8F6<PP&c)rw(nPEh48a99Cbd+gj{@z;CXKdPIq zEnd%ia9&p{a3dH2!hZm70jFPpQ`fu(vjd&l2MM#%I(%&=Mf*q3pFR2Z@aW5DPjurd z$?xCOt7RlF!emkwTrwWUQGCI)EfUFYKYdhOW;EZD{qrQJeR;w9oJCoG%UHMilY(Am zEXF1>EHk+_?5D8n=^a6JPJ0!WNI_L8+5|4=<YzLqff0Uf{03NilW5EghXK)KXHVM@ zd-5ydKA7KpzAGo?Zkd$ZXO~GvxA&$OXT{z<x+|ExEM-w-;(tf*-G*54#ZGzi#^28p zA>(3F9t;d8L(oCDABW*tQOKSBtcasb9KhinOt-?2jYdf>7?<2J1V7T2xDlEZLc1)V zCA`SBHDXeGWfsZvf=_fqlvyIRYmyMG)GnAKDY>?dMq3%nwM!G8M-!&KFg#B(7KXZI ziW)A8s9RYPy}ww{4c+>tZpl}i7hE^utPs!^n#7W~ftU6pN=+LeE_aQ>iOQ1YR67gy zgEig(HD5BqWInXYBp$j#Qp0N4nA{lGrg8P&bzeJ%2IJiP`DjN-X!nG#n@fW-5p&%d z=fzbX)~RZz$Y=?L!E{J+I&3ap4kIW|&aP^Z#-%2CS$A_GT6O3}56lRN??E8!!7soY z*dYN4a2E%}#~n<t4|>>evk8Io251eIU_yGJb%+Pw0KR}H9kPsVKnCF7GZq|J0qFTQ nyulkF4hM^iX@qG=7=FOb%p9)?di#sU9MlxeBzRwY*unn+v#ond literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/ssl_support.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/ssl_support.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..65ae944239e3754306300a04fdba782412b85d32 GIT binary patch literal 6745 zcma)AO>7)TcJ9BK=^4(9D4L>3ik4eiYop;xL$B>M7LKe)q4nd$p}eGRIUPIgW>*b4 z!=CO@RgFjvhL;@$Rt{e5G1we}90DXjkaG?}PPqmM0wjk%<Pv0o%`t}@a?1Cr=ZBP( ztY^^G)m5)vy?Xzz-l^3pU;a(=tD9F0<KK-_zpLoq!6X09Gz?}iGdBGEZThDEwtP#! zZQs^!$9M3y;zGCR7rQ0D)OCHgTlUK)t+V4wcg~;dR{g4J99Q*<nqPZtB+HJ$>jxE~ zOoRT+^lQIwB-R%Ob69~DS&6xO1^*l?cjiY%=lsa<7mgQrvGZDI(O=}H&ISJhu&e>g z60rPzj)h-z41dwTkYnOCW*(H&f94nYBEQhG4od#=@giub#I^2<ztUaxS4{(0wsTs3 zZi@GFJjZK*nu{+Hls-ol{R#BtDfGKj+E+mTYQF1u@0FjMa{Gb7YOMauV0FGWvi%jl ziqQ^xgUz$^&rJVyw!mI{X85asTVxL49KHy+%lN*)mhipAFW~zP=CO;+#R`utvlXnk z!mqGZcIlZhGX1M;jTJEVJ@z`gjQ5+&+%Xzgenn#4YB*W3FXFhpo6YSj)eEAy%@dW` z-LRJxTkTkJ(Xg^}+gzq`U$xWZo)D?X&fPmwB8+AO7e42r-8yb3dk;VT^pl;3VZvfA zvU;nXupkP9-98Ou)wT@6r(rt|ckxw;xKKeaRQockq&=Q+5wubfTF|b_23OHW@1VV* zV!1(pXv3R1o@OLe4j^Sbn<S`qs~v@k%N(RH#fIDu1>ZOWcp3|V#Ay`9W5DTFB2CrH z8#Q~pTiMt-mWp>bK5p-dP#kYO0_{6HA5SO&89CVhi~D9G$5hfuHGR|b(I(*g{O0UL zIpgcyP(}N}ekxTGc6q}THOLXKI$jaUbn*iab6c&V!ws@e*e1!|(rdOFcIE~FVF`k) z5(M3p^<(N+gWyR&jPselGQ<K9=;nWJZK!T<qu1_14(*uTeCx^nZu-{SY(sL@@2NC} zs7`lf9LRpJml8jY^{zhxE@`20bIN~3WJWd``c?2acsB9K|3<TCoY+G{R*CMR(Sau! znJ3QBVfKn~QotMD;Eycyi^D?4WJS!DhNYo(;E0cv#YzgRN9IL5KQ)IX`89AjBV%Y% zdtd=4e93_&)X?q}m^(5}Be@MsMOGe}@;TsiPyB-BRjK0+3nNoQEuS9glv#z%jX;}e z9IXwD9~xgRp14y8;H8--fBV<~jtZ-?T4!!(6J4x+k;bYc>!ds^cWOgGLPF;TPkxW& z40H0rC`tvRo=Uy#`<vc-KYaT~H$2I;^?C0#-)+8Asd(cb8L@nSV?)cL+2*R%OvT>D zzUsysq7~8F?~Rw<%$H79-p|aYAZdt2G+UXuKDYraUN=mRy+cSl3I&s1JMm7LnfKw= zjz@~}zBefR!5=oi`oX|CN^ag9SYNK^1MBGC#nZ&&H|kkI_Tsk63Q^imlvat%5xgg| zLYyALV-&+4jEQ9xsY2NNVO#BImf%^D%P8#etOVdVjL?bFZm$h5;&jq>l2tx>u=QyB z-sat%ds#snNu!ckEXmx7tz@-scoa-ek~wfZGAs0Go6L=QOLbvYSy}LI2(JZN%BO%^ zBHYVtESZ^ucnyro>H$lnwiUhWZ(>ZYqcIAOiN8}ZU9)PTEm&sVcFg&LYgf(1!h*eQ zSIk9g%@j>QM`RTAD~%s*1OJ5&(tm{rNIDFAu%N>xvswmp#y)y$XhYkse`%dK+8%6Z z^HpUH3(zD>++hxM-0Ik*x6r_=kMSjcadcnfC=d>;e($6RJfyWVJY*G}DW2yq;ORUz zo_q~$c81V-R)V$tgM$4GO~m7(Dk&G^m}yx{+VYb1DWoNS3CPOO99nE{#h6047_HI? zX{Sal`~aGmhZIlkhss+grCax|L;V<!QpTBwNCA#}q4Wg2k4P}IdptD+xZ|BPI^e3g z$5oGWK?trl8qjAL7MDQFz4eK1tT#PvTW|mPhd=fZyQYRV#V6n!rH4p@ePdEpcEj84 zEAOLEypS=$r5sNuDQJo!-cvb^r#G3|>5GotYvUMUTVhR`cr8T8zTi#oQR2xykV$z% z6Wr=2+U#d!>7z>zyOOtPPA3KzdAFyIy;NZCw8>_5+28HJd)$rH7A!ZjVZ&QlX*`Oc zoOZiuLQ~ok48A{Ml6OsbEafu!4V81z<FHOHytL(AlLPC9H(2|>VXq18T?QY39N4%> zd!mg%?aj6$TF=tvwc0#}(}80kz9WZdl(Wj`Vch3=IJ6;LZ9d`>EG4sJo@k#UuHaKp zC=n}Y8l}u3`HO1=<&F(jX0{BI%s$}9S>Y)m#Xx`e1q0WSHN`qfW@@+&?AbA^W*zSe zdUeyW7hu`>*8*l7YgM-k*2__uto#lh>7kiLWn{}1vyq+Yh=w=f66~NPT!0Ne*lBlr zG54NMax8B@&#&Gm*@k_!k9g4EjpC5B5Sr5N^0cqeLuS#OdKTK79_?Ak$-@ebz))rf zK85@PGq9&gi9z{P%62B9L&nff+A0W;oj8)mEpZEoUS!#AjQuGdNfI#3qB*$y%KWf7 z!FGm5T0|LvBpRP1>VIRjOa`C#3?62LsNJx)B8pV>qXQ8z$zRT+QE-@81m`m}e@4L+ z2ePt-v-@wRNunvIW01~f*1;jNsNVvD{4m<LySL)7yUW7ce@@u(7=yRZA{r;UO&xaw z%3+(gbT%n(qmwUgm|2OXdJ?%8ZIRi6KhgV4_SD-|W?24=Hq5!_m;>+EZMxMcigQ>Z zhy&t0ZBYsWmPSD!NEqTiHPb|Hc0{dUe}YL_L<7yXTqi<r`Xm0{!Sh`emS6{WUQ*Zy z49_!`@20aPQu<AF;djxOt7sHNJA~#!y!OwavqR`^fSPlnx#zUHl6>>+^5c_|Hk@3% zchS$a_P41wV+zSYga0KuW9HABgG*<bPpD^lJ5fWTa}LiYE&W$CIh|x#9lK>A{vm=h zV`L+0o2q~>L`d;akJ~gZ9%^eW0=_gt#f!IlVkPu#omi@%%FMxvBUSEHFgC{u-<rsc z?M_w4(&D$ohhnmXd5oZ~X{ge-$bf_5@uI5ZyVyC0>=!%hy0+;UY97_`Kjn3*o<9$| z7swaruh)o@pBm%Jn|SPQA%3KNMAKj#_Mm904{pb(8}g2>PO_y)aQOFt@mAQ6RR9f8 z{7AtVicyHl617WqPIB=SMc*W9z#7ZsrvsP=axyp}`jU;stSEIb&(4pr&h$x;Jdw<y z$jC|v2cc3TEA59;cN|(Leg`0eR0s}U#^Pi8B$deK4n^1t#<**n_qIO`w(tGqvyZm# zeW-nRHg_s}(2*r`<$hnW^f1ZFI}bkt{D+UXk<P}c<P#11T%$&Lj4CQ;h8?M+7c`9$ zSgoXg4QTl$8UxW}*;#_SbPKLkM9x?@7mzV7SeChnejV{<u=)yZ93y(!35W;4np?ov z)SKzL?rDX;gNeVubIJh-8k>4pQgJdzt=h}zkZN}<Dy@3+3WXGvH=P0*;NZ>!j_k+7 zl>)iK>kXu4I$Q7JQXx;|`jjV4qYEW*d03;W9oGx+W8`rt&41G8@XJ+QX=>-mh4xmW zOaKmT0Pp##@Iw{vKjO)4*eaUSvk>lyOPRWp=QzPE#Gr&UhZHvuWB{#yw2WBr1|GSF zMj^x?Be&$zb65%mn&(D<r$Y-Z*hm;3hQ|_mOqr>K+y4x!1Vcj+Clq@!D;^xu8)o28 zS~v5_S&6i=#|8NjEfxd1P&Ee^(j?-u_%enfqtSUGmET!`Mrp%6+Hjv5k~KJ`2Xvfq z2+zL|a^i(yE)~Q9-e-<WJftJbFVNs>4$dn!PUt#p5pKhT+wjKMTW||s7!UFwO-YQ) zpcx%&WdAXkG%|>r9UIPzoC@`HDMBSUSXJE8N#S&7?4@_5x4eO7k|KRW60-6nz_-U= z!1~Pfoo^sgpY*RVxC(PciI-@<K~84IEy}p>V`Qoe6TK#u$jfL*s7QpYj!AA$QQ1V- z1*a0D0?OAu1fxv~r79d6YFStCy*BQHg!l?r#t|J-aVJ}5<p39JNX`(AXNE^{`IoeJ zE`+){_`$EI{^iI+$Dqigk3lRuUO0P@vB)fl?EAUMPWf}n_C$<Tn)a;pXh$d3(?bZ# zd_|9%8Rc}$|HLCHJ2gzpME+|Iu73yWb2s^7u9ABw!kX2_oQilHkGTa}hzPti8QN*l zz<=P;ymQUEqd_uj^KRyBKYH|OqmWgh20D7E6xRoHA9X20=)-AP-$neAdd{Kh9Tw9E zLcdJvqt{LBMsq;h&HRfe{5K+j_+r3CQ%O*?mgb6Z(-l)3VRWk36J6V+1#hBJI_>V* z@SoO+p$a3TcU2+SlT$$tDF8W=!TPp#ASg*asG3xC4YYX|g(uyndUSJogQ}*jG~rtf zR}_Fbvr?(=Huke(Tapb3QV&f}<|GKgxU!%F;-)k>MEQn5?4QSQm>@_~@YNTxxwvOC zC#Op{a=FZ{I=pJdoSqL823<tz^Jyg<Us;eX?Z7@2;)QZr_A8YT4zo0-2!g{^B+4BK z3s;c^O`v!R)PfRJLAN8PNSo1jf(cmdOeb;2VhS3C;!q($b-*=ojGp)jHC<|6r>2d@ zzcjnIY=RkFBu&{qYIf77T<VY{Y=R|Q&DmV*9qhrs=gE*fMcrcpA&Myl4@r&THI!)g z#6_CX!U(DN0W}W^uznXwOB>e-<FdAx>Iz-ZeP~|K()F&twi`wV#2MK{8WZT7jA`y9 z-XUPBQS&Hyhk8|N$hT|p>&U5j@+uZ)?ydX^_%>;)`~;1Q8dv|VWov${;uTc7#cCB_ rRPiD!u@-I0Pv+qVs%Ynt#mpmnnRk%Eyz4gRYxCDDu3N4yyOsY1^0$np literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/unicode_utils.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/unicode_utils.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f2435aa4b821b983ca55e2db25b84c073c194a97 GIT binary patch literal 1127 zcmZ9LL2uJA6o73fP1CHaU>gW=KsijHPOP2avIClsSUCoy3D#9iRaU#LyVS{ShqYCD zDu0FxKPXqY@E17ooRqD?k>9hQpY6QwJ-^=G_P+dRUH-BV`iV9gf$>}D>KFt?6i296 zYTUyxClQ%iJqsghQTrR}*|b6(&=p#xE@+41Gt{j8hTSM=;@nbvHo#^E&FC%Y@1U#C zAT-L5#uKt4@`<)4HpLlQkux;k&(Neo$qFygy?qJZ6Q{JEBe7>AUA^|?M+^sJbb$ov zf(Kl01wAWxf4ZoodU$x;baRg@E|d<%fJqZ!Uej!*`+A<Rd@B`v5K~4&9p*I=%V`+# z1<M`Ej5&9hD0KZ(>DQ4mmJpepgnIlPNfXeYleV5F?Sv<XS1FI^;nB_bDn5Ee+luKl z(QzE9&EfjWeyVw-TFE@Gnaie0te9)q?0`VH4j;iD$Oe24mfK*xgK5L04!wZcg~0~Q z2L^)yw?fHNikCRU6c5Rg%vu>aMVHT)*4#6QGiwF;0+0@X3`&r<2N&q(pbPyR@@;S~ zE<7JvN2pXXUynl#g83u<l?mTq@VW9!T=Zq(8hi*k{_Pl+MeMU#!UmdAzaYuQ$iI!{ zwJIFfISQIp38jdN>_`(DRL)%Gk48)ndBk9>+4SFjSv3wj>x7&Zc`DOlOAnTM&QSHi zIrj#kpd2#GRBnNxNLDEfy1cPIyI=nN9@t9uP958%j$Psv8E9a+3u^;YJEj?ZSIGM? zDQKb$uW4eS`K+XA-a{AO5pX1nwoaw+*V(_v!G(_f&>yB^pm{99$d@schG0RHNK+7Z zv381DEMq0PqqGE^(v-{pp?O-)4Ff3Q7qG0%F^HIQf?yuQ7>HLu$p(nt!}~gI!OLJ$ nl$kIUSA<?{*|@_*FAIk5n`unbh@F_%tqgt_xYcd9?(Y5tTV)NW literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/version.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/version.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a7205919126ec62c19ede361d9f278692390f120 GIT binary patch literal 286 zcmYj~Jx;?w5QS&gMsXY&x#S8d5?df43WR8AX($L5XeDP?VPj`^*&iS^7vLH+9B5lA zu0X{YMZk>a=_}s6cT^Pl?fd-h6#zc)erJMoj^~b1IB?QK1KU!-nsE9;*0f2kK^>$Z z(k{0(fnj;lBsZYw0{vGoO+WD$E@SS555{ZVyEqD}Q~F6w_hMnX6|=(WV3)$hawR<D z(s?V};H6e^^eC(wV8YlA8H?kK=cO=%;SKB<3x4G5r1Be68EIy1kUgK(5BIIE4|(-h c{vUUFbF+=v=|=O=i!*{@E<?#EB_-J>-?$G^aR2}S literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/wheel.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/wheel.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f5d75f7ca86a99891877faa2cb6e367f3a901ab3 GIT binary patch literal 6963 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 VAM!qwaxDHV8-Fl=o^AOn{}01m_QC)F literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/windows_support.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/__pycache__/windows_support.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..de6bb10d7042a915182a884c679d6d385459e9ac GIT binary patch literal 969 zcmZWo&2G~`5Z<*N$8}qNDnOi&kL1vpCK3{;s@jrNtrVrGDT-u)+{C*fPVB6^yC$Sc zFQhk~gbNSCBkYw^Ux5>|jtUX1G&5h;v){~qJE?DOy6?YNKm0Hd`iWMS33wk&JO@V* z!3heM5eJwU#JoX)K@DP&(hXYRz$CbXD)ud8qjrRKfTbfaqc>pUDL9EncmZr<lRsLr zbkH2ZNvo~O-FQOSR78+hEPYZlgkZt~M|37`e?t{RSv~$yD0@8Bk?VE~_iNvmY365f zw%yO;glxaK9QN6Z8u0~{c_tZ4#44OFYlb4vGR9>!n<-~E>7{+r+biq3VCd@ET^gGt zv+8cbqFy5Q04x)s9VbhAa=>`1Y%vp(rWLHLK|YE8w#IFsQX8vOC0#*pBfNnf%+~?^ z5l`P(->VR>1wevu3yhJ(BV%NatZNLYG_ng{9vE{RIt5+><Pzf=cIIeqER1V&Zi-|0 zw!T1LFfp~@S6^KZR)<PY4yiYc3853OCnb;jxuhP0AKoBN0CA7RoJNxIS=B909dVX= zLn*V@zAt1i8naK74-z)5MlAI&b1G!aCc@u&^|Dsmsn`AGv5TxHhZkO&3+eT#C+TNd zE%>hPM{<@?Q3Z7haH}7`UD;4>7{;l7nlM!MGD+E5!z5A8nDPlt>a}1Cu5kpt9^ADr zx`A`Y71*t}-Ol-0P-=8f&l<{sktvD<*5T=COO-ja3)KUs8&8^?GhVTjrCSXi{>Q5x zADy(C;lcU&*~#I%^JaK_(r7f>%H&l3`_^k9Dh;)U`eDTbaA?iJF5befVHqyAFn<Dj m6^lC%_&x1(YO%Y*R*ZKsKF)5+NS@F={l_Rq$H9*2*uMdXY4{TW literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_deprecation_warning.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_deprecation_warning.py new file mode 100644 index 00000000..086b64dd --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_deprecation_warning.py @@ -0,0 +1,7 @@ +class SetuptoolsDeprecationWarning(Warning): + """ + Base class for warning deprecations in ``setuptools`` + + This class is not derived from ``DeprecationWarning``, and as such is + visible by default. + """ diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/__init__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9deb656e08f1a27640ff299adbd1e03c908318f7 GIT binary patch literal 148 zcmXr!<>iW5rx(ir1dl-k3@`#24nSPY0whuxf*CX!{Z=v*frJsnFGu~7+yecA%mUq{ z(#)I`U4z1mq<jOT6#e4VlG1{b{QR6^WM+I>YF<iyk$!x9W?p7Ve7s&k<t+}I-29Z% NoK!oI(ZxW_006!HB>(^b literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/__pycache__/pyparsing.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/__pycache__/pyparsing.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0ae38b504c7f79c070af6bda9b5d3c7cd7f085b6 GIT binary patch literal 203157 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/__pycache__/six.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/__pycache__/six.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c6b7a31812216d1942501892435debd08949135e GIT binary patch literal 24445 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 Wl-t6ZkHk_5d=n=Lx(W9t?B55seCsLz literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__about__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__about__.py new file mode 100644 index 00000000..95d330ef --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__about__.py @@ -0,0 +1,21 @@ +# 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 absolute_import, division, print_function + +__all__ = [ + "__title__", "__summary__", "__uri__", "__version__", "__author__", + "__email__", "__license__", "__copyright__", +] + +__title__ = "packaging" +__summary__ = "Core utilities for Python packages" +__uri__ = "https://github.com/pypa/packaging" + +__version__ = "16.8" + +__author__ = "Donald Stufft and individual contributors" +__email__ = "donald@stufft.io" + +__license__ = "BSD or Apache License, Version 2.0" +__copyright__ = "Copyright 2014-2016 %s" % __author__ diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__init__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__init__.py new file mode 100644 index 00000000..5ee62202 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__init__.py @@ -0,0 +1,14 @@ +# 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 absolute_import, division, print_function + +from .__about__ import ( + __author__, __copyright__, __email__, __license__, __summary__, __title__, + __uri__, __version__ +) + +__all__ = [ + "__title__", "__summary__", "__uri__", "__version__", "__author__", + "__email__", "__license__", "__copyright__", +] diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/__about__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/__about__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..82e1822c07caccafbaf3743a483041358ec4cc31 GIT binary patch literal 684 zcmYk3O>5gQ7{~26FOHM6*;abi3OfWAJIzKJV~lR?v5Z1s2eBb+KT0enTbf=1@i*FK zpJnG<ciLCzsZzseCG_KY#9x2udGuy7NxuC~zyIk3!QbG?h+TZ?mcDg>074$rAr9*f z?$i;E!T>rDK^J<^hXKSe+{CyG3GTrN_hF0&Fu^e#;UOI31g3Zd&*<<pz+-s63T7|< zIoDto?T_<93vLZ1td>HVeGF{NG!xDKNGjGCvbIfWd_E+^FvBS!`w=19)^)CSE*TJF z6+7&1sq$xCk`R(xQwil_caqjQ;|C3AC2h2~nGjM6xl?RY884H0`6J)3X49Ts2}O}L zj5EWiMr)za?atXX=pdrHeOVbJ_4_Q_FjLtgEk&Kloy@aGo9_8V`mUW_izerQR>rQ^ z2IUPP*7!2P<{XuxF^Uz|2&LO8JV-C~gEVELJ^Q@6M(*}c&b6ZG=J5E}=<A_Uv`iQ6 z>DB)#&~kD9cJ6S2Ug<BhiEqQ&8mnBn%6)O5B9E?v?_17YPgKuu^*sh2{^!-uBk>q{ zj2(UjYU*Q;yPM3^GLuZs3(Gjn7eA{)ES8XIYOFLuaQ!qSTiSq7kFCkv<%O`W?Wx@D b;}5j}%jrk|Fn!{15+z|0bwf8hZhD6I7Ou?= literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e88f411af1cc0be74ca0910e3e82a7a75efff410 GIT binary patch literal 522 zcmYk2&u-f=48~<U@!z;Zfj&fYXkDz=Vc2~@FWpI4K{%nC2oo(;mICCFcG&~@+EZVl zr-}_QM1X!E1@hx3-nVW2``_(Tk_z!E&Q2NQAMsAVB2ZwW1tl_}RHl^4ED@MurWdr7 zOUh+Vg)FF)B~`MbTGrIahE{SF>lV1g91AS5!Wx@hDO+4Uigo)ImBl)nzx12Q=->xX zWR3H4iRz#xWybl!IyHKD4&&Cx{4L>*a;^dT;P=J>%q_sy*rQXsy^m=HFi@{_3>yHg zw!=6Lr(_C5y*r+Yyz-jg3xMF%so*d;o(kZaILFnD6{BV33|@<?7)8Xx`hvYY2OnG% zb8(5nWsF4xd+9eOL|dn3ZaGu<)c>6He+b*@bu|B1xJ#~Py#MSx+0H6^vk6M$&E3m> zWA46UHw`{mZ;YPKLpTg08rRu=`={Tjan}K;QAHcK_BfZ{$Y9XJceXh3r>@fLyiPs< D2fK^r literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/_compat.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/_compat.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0c8495982da3b23c4d12b1437ffc8501c89c6e07 GIT binary patch literal 969 zcmah{OKTf35Y}UDZ(PSYGz9uMxR=5nVu$1!LZO9151~*fbV(8NN=`P}S0rtMLwZUe z`76Ej2kF{V{z6Zkkz3cLhYrkWW+Z*{X-0eN>;0o|<IhK&kndzg82GP1?ME<*C|Zz` zrnF=!D|yN(=2#J>k&aF~iaa5TpRu&Nj3S77x@X?#ct+E;s;m3Bs*dX3lJt>cA4t-B z0Bn+Qzagi#E?TEWUN*IHK34ffZu7eG!^Y&56SKC;9K?qYNbCXFl8oYQ5DYq?Jy81+ z%v*9t?&ypus@QF;*gd`BUzj7O^qMI?BRRQ=pnP;S>5o8O8!eq4$<b6=J<1Ac?dURh zCy*(%lOZt<Co=$F3YJB&Pr+!CQbkg>S~%s3hcYh^P5i;yFX~Jd_F%kBWl?}41Xt9@ zpmqS}o?g>?a?NiLiXMIi+MZ{H^-(2D?fdQ|w*rY<PgTNvXW>T(ZLlLh-c4NDOq#se zp0;_Rws+1?ruELQnpo}H#?^IUS6y+TD^;6GBeOGkoL9#ak=11*-ME?io)DG36yiD3 z!$}Z&mHhX0<6pN9fqM)-5EsJtg(z#)7U&OzIB#XK*fAS`8@MOTU=Pgt?}QnG=hv2f zdj?_P5mSRL^BYd%50Yjs!rY)Ek()O<U?zNl6fp7lzeNK6@b4FGVv#VQ-WE4o5G4a- zKWklUfW5&+82k<fPkC<V)(<YU!4E9*YF2yx{?jg+J=k={55PcY1v0a~A4V230X?u< aF@aOOzi8G0mav%GWHBGoVHDArb@@;8mh{yC literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/_structures.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/_structures.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e1917d7fb28dd5d61249018cd905b0b6cd2480c8 GIT binary patch literal 2826 zcmcIm&2G~`5Z<*D$4S#R{eiY1kT@Yrw5f`akU&)t2*f29dWt|R*Sk$!9NS&5E4At^ zJ@6`AcpzUn@d})n+0-SeY#jbJ+L^UycfZ-$nJ<1kKi_))W$VMIIw4=lM61Dg4|?(n z1SgyZWJvpTX!MPt**7V9L%6}sOTtZ28=3vOsE<g$4sUC`4sYxFttBjYYjNuxaT?!X zC*qjdqI-};L8=7vhjAoTW^@14Py8s%7Gmj#iXEn*r{LMc6?rpYum?Ta2O&tGa?&?A z<;ErHo806z(16V?&~@J6HfW1Cc?)!d&+#^Bo6qwF&`rL`JD^*9i7$hm<166dYG%I; z5B<<rXC4I*Y^brngq~nfIE9%;PeQ=RXX4PTmWbd`TJWgF_g+^G<8JK7n+K^M@XhU$ zql0LBhj$a9(pW`NkW3EQsR(%_yRqwibO(Mo=(0q~)KjSx$yR)p*^EgMOU9b$0!D$* z^QGL;t=u~0u?ds3$88uWqUZ$~(Ghx1dybLSj@;xZtKqf|l?|Bl(|>8hBZA@_#&Clo z(6QCi?!Xk(MPYiaH+BpSlGP)1B;-vji?Kj4wm5;bIB`6*{T_~-hpmcG1Y^r(C}5jH zxe>w(2;ngu8F>g>kg#E*+|UzQ6P5;Uk}!64&@u<a31hcP96(#K0}HT1k=%hcxpF~v z@RUm+Do{f>+Ik5p+NMy8E^&YI63fmufNQ#2f`YbxgaZEFFGInzp#RuVPn|_w#f@g2 zo*1~wKNWeBmDE6ku}};cdjMPICD6&&K;3C$&uL?^gzgZ~vle5+h^GOL+l-y0ZZNh; zEMAGlB=I^WCcDI3lq)D!QDA1sH5AumG9F<?YQDirO>mWM*yi+4+dVK{H!R6L=>L%~ z<!#u%JmgnYdEVU2qc%>YLdww*a?oGRDfE2f<~98Z)yWp@DCa;FU$VZEM-`|ua$RMa z=&SEefUOlAaVEN}hQb8fse;0S(b0y9sDI6QGZBtX>L(Sz|A*^zDLt)#o{8|L{<Vq- zPZ#X73aFV_uNn$zVYdouHtN$PQBnv<JTE3-)(dhoXFQ32CvpSD9Ta~}Zpb4Kp_h>x z+Ivm|`SmcxFC+Ns!Gx8Vu@XPaGAlYb7M{{a)Vx&0qM7}C%+I^HCP89dH9Pk#=sy5Q CW%FwQ literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/markers.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/markers.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0bf0a55121b82073b0393f4993f676bb1933ec76 GIT binary patch literal 8846 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/requirements.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/requirements.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..64c7018e0acae8f4e1898a404e9750567a0ce6e4 GIT binary patch literal 3839 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 KQXkWD`hNj80MqpV literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/specifiers.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/specifiers.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..410c42cd080972d397da0f4028a7c8cd5fc30d30 GIT binary patch literal 19788 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/utils.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/utils.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..791747617fcd5b64e36d097a52a8bb8468495f85 GIT binary patch literal 453 zcmY*VyH3L}6t$f+tpepC_=yOmsmh8F5(`rowm@Yiu_-Q2Z2Txtv6Ww8VBv$jGVu$Y zusfA2-Q(l?@VVFL!(n>=J(_(&0Di!ZA<wV8>xl;f2;`uJC2UcN+Ng|Rh#?-AF^v~J z60KpGkeKv7K-nkg7G%k<?*m!n4y#%VZVkn(l|mUeAZ*Dr6P-JdiggA**sd}DK3yeu zIUdc<8b8d|!WntL_O6dS7_fi@zJoPdpf&I^Xu5&9S2@8=)rpQZ6=y4o6`j*p7in9& z9v3fEWzfZ4)zUAZQvc58rZBB6B$Ih<87KMp`LPz`2`Mx+RvIC=-lcd+J0esetLCYi zvu<8k!?+&FH+TF`IB4vLX~X{kqyo<dF2#OJV->|%g^UVYsn~-<in@LyTFE$7NeG9Y a?UXyP7fJ^gtss`u%h0Gp?I{{WY4iu!Gj)mp literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/version.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/__pycache__/version.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3ea424eca6fdab0536f813357741d681d11c79fd GIT binary patch literal 10563 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 UnA4_n!1>ZNrq`WMN`^D>|9gmO$^ZZW literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/_compat.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/_compat.py new file mode 100644 index 00000000..210bb80b --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/_compat.py @@ -0,0 +1,30 @@ +# 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 absolute_import, division, print_function + +import sys + + +PY2 = sys.version_info[0] == 2 +PY3 = sys.version_info[0] == 3 + +# flake8: noqa + +if PY3: + string_types = str, +else: + string_types = basestring, + + +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(meta): + def __new__(cls, name, this_bases, d): + return meta(name, bases, d) + return type.__new__(metaclass, 'temporary_class', (), {}) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/_structures.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/_structures.py new file mode 100644 index 00000000..ccc27861 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/_structures.py @@ -0,0 +1,68 @@ +# 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 absolute_import, division, print_function + + +class Infinity(object): + + def __repr__(self): + return "Infinity" + + def __hash__(self): + return hash(repr(self)) + + def __lt__(self, other): + return False + + def __le__(self, other): + return False + + def __eq__(self, other): + return isinstance(other, self.__class__) + + def __ne__(self, other): + return not isinstance(other, self.__class__) + + def __gt__(self, other): + return True + + def __ge__(self, other): + return True + + def __neg__(self): + return NegativeInfinity + +Infinity = Infinity() + + +class NegativeInfinity(object): + + def __repr__(self): + return "-Infinity" + + def __hash__(self): + return hash(repr(self)) + + def __lt__(self, other): + return True + + def __le__(self, other): + return True + + def __eq__(self, other): + return isinstance(other, self.__class__) + + def __ne__(self, other): + return not isinstance(other, self.__class__) + + def __gt__(self, other): + return False + + def __ge__(self, other): + return False + + def __neg__(self): + return Infinity + +NegativeInfinity = NegativeInfinity() diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/markers.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/markers.py new file mode 100644 index 00000000..031332a3 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/markers.py @@ -0,0 +1,301 @@ +# 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 absolute_import, division, print_function + +import operator +import os +import platform +import sys + +from setuptools.extern.pyparsing import ParseException, ParseResults, stringStart, stringEnd +from setuptools.extern.pyparsing import ZeroOrMore, Group, Forward, QuotedString +from setuptools.extern.pyparsing import Literal as L # noqa + +from ._compat import string_types +from .specifiers import Specifier, InvalidSpecifier + + +__all__ = [ + "InvalidMarker", "UndefinedComparison", "UndefinedEnvironmentName", + "Marker", "default_environment", +] + + +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 Node(object): + + def __init__(self, value): + self.value = value + + def __str__(self): + return str(self.value) + + def __repr__(self): + return "<{0}({1!r})>".format(self.__class__.__name__, str(self)) + + def serialize(self): + raise NotImplementedError + + +class Variable(Node): + + def serialize(self): + return str(self) + + +class Value(Node): + + def serialize(self): + return '"{0}"'.format(self) + + +class Op(Node): + + def serialize(self): + return str(self) + + +VARIABLE = ( + L("implementation_version") | + L("platform_python_implementation") | + L("implementation_name") | + L("python_full_version") | + L("platform_release") | + L("platform_version") | + L("platform_machine") | + L("platform_system") | + L("python_version") | + L("sys_platform") | + L("os_name") | + L("os.name") | # PEP-345 + L("sys.platform") | # PEP-345 + L("platform.version") | # PEP-345 + L("platform.machine") | # PEP-345 + L("platform.python_implementation") | # PEP-345 + L("python_implementation") | # undocumented setuptools legacy + L("extra") +) +ALIASES = { + 'os.name': 'os_name', + 'sys.platform': 'sys_platform', + 'platform.version': 'platform_version', + 'platform.machine': 'platform_machine', + 'platform.python_implementation': 'platform_python_implementation', + 'python_implementation': 'platform_python_implementation' +} +VARIABLE.setParseAction(lambda s, l, t: Variable(ALIASES.get(t[0], t[0]))) + +VERSION_CMP = ( + L("===") | + L("==") | + L(">=") | + L("<=") | + L("!=") | + L("~=") | + L(">") | + L("<") +) + +MARKER_OP = VERSION_CMP | L("not in") | L("in") +MARKER_OP.setParseAction(lambda s, l, t: Op(t[0])) + +MARKER_VALUE = QuotedString("'") | QuotedString('"') +MARKER_VALUE.setParseAction(lambda s, l, t: Value(t[0])) + +BOOLOP = L("and") | L("or") + +MARKER_VAR = VARIABLE | MARKER_VALUE + +MARKER_ITEM = Group(MARKER_VAR + MARKER_OP + MARKER_VAR) +MARKER_ITEM.setParseAction(lambda s, l, t: tuple(t[0])) + +LPAREN = L("(").suppress() +RPAREN = L(")").suppress() + +MARKER_EXPR = Forward() +MARKER_ATOM = MARKER_ITEM | Group(LPAREN + MARKER_EXPR + RPAREN) +MARKER_EXPR << MARKER_ATOM + ZeroOrMore(BOOLOP + MARKER_EXPR) + +MARKER = stringStart + MARKER_EXPR + stringEnd + + +def _coerce_parse_result(results): + if isinstance(results, ParseResults): + return [_coerce_parse_result(i) for i in results] + else: + return results + + +def _format_marker(marker, first=True): + assert isinstance(marker, (list, tuple, string_types)) + + # 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 = { + "in": lambda lhs, rhs: lhs in rhs, + "not in": lambda lhs, rhs: lhs not in rhs, + "<": operator.lt, + "<=": operator.le, + "==": operator.eq, + "!=": operator.ne, + ">=": operator.ge, + ">": operator.gt, +} + + +def _eval_op(lhs, op, rhs): + try: + spec = Specifier("".join([op.serialize(), rhs])) + except InvalidSpecifier: + pass + else: + return spec.contains(lhs) + + oper = _operators.get(op.serialize()) + if oper is None: + raise UndefinedComparison( + "Undefined {0!r} on {1!r} and {2!r}.".format(op, lhs, rhs) + ) + + return oper(lhs, rhs) + + +_undefined = object() + + +def _get_env(environment, name): + value = environment.get(name, _undefined) + + if value is _undefined: + raise UndefinedEnvironmentName( + "{0!r} does not exist in evaluation environment.".format(name) + ) + + return value + + +def _evaluate_markers(markers, environment): + groups = [[]] + + for marker in markers: + assert isinstance(marker, (list, tuple, string_types)) + + if isinstance(marker, list): + groups[-1].append(_evaluate_markers(marker, environment)) + elif isinstance(marker, tuple): + lhs, op, rhs = marker + + if isinstance(lhs, Variable): + lhs_value = _get_env(environment, lhs.value) + rhs_value = rhs.value + else: + lhs_value = lhs.value + rhs_value = _get_env(environment, rhs.value) + + groups[-1].append(_eval_op(lhs_value, op, rhs_value)) + else: + assert marker in ["and", "or"] + if marker == "or": + groups.append([]) + + return any(all(item) for item in groups) + + +def format_full_version(info): + version = '{0.major}.{0.minor}.{0.micro}'.format(info) + kind = info.releaselevel + if kind != 'final': + version += kind[0] + str(info.serial) + return version + + +def default_environment(): + if hasattr(sys, 'implementation'): + iver = format_full_version(sys.implementation.version) + implementation_name = sys.implementation.name + else: + iver = '0' + 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": platform.python_version()[:3], + "sys_platform": sys.platform, + } + + +class Marker(object): + + def __init__(self, marker): + try: + self._markers = _coerce_parse_result(MARKER.parseString(marker)) + except ParseException as e: + err_str = "Invalid marker: {0!r}, parse error at {1!r}".format( + marker, marker[e.loc:e.loc + 8]) + raise InvalidMarker(err_str) + + def __str__(self): + return _format_marker(self._markers) + + def __repr__(self): + return "<Marker({0!r})>".format(str(self)) + + def evaluate(self, environment=None): + """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 environment is determined from the current Python process. + """ + current_environment = default_environment() + if environment is not None: + current_environment.update(environment) + + return _evaluate_markers(self._markers, current_environment) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/requirements.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/requirements.py new file mode 100644 index 00000000..5b493416 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/requirements.py @@ -0,0 +1,127 @@ +# 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 absolute_import, division, print_function + +import string +import re + +from setuptools.extern.pyparsing import stringStart, stringEnd, originalTextFor, ParseException +from setuptools.extern.pyparsing import ZeroOrMore, Word, Optional, Regex, Combine +from setuptools.extern.pyparsing import Literal as L # noqa +from setuptools.extern.six.moves.urllib import parse as urlparse + +from .markers import MARKER_EXPR, Marker +from .specifiers import LegacySpecifier, Specifier, SpecifierSet + + +class InvalidRequirement(ValueError): + """ + An invalid requirement was found, users should refer to PEP 508. + """ + + +ALPHANUM = Word(string.ascii_letters + string.digits) + +LBRACKET = L("[").suppress() +RBRACKET = L("]").suppress() +LPAREN = L("(").suppress() +RPAREN = L(")").suppress() +COMMA = L(",").suppress() +SEMICOLON = L(";").suppress() +AT = L("@").suppress() + +PUNCTUATION = Word("-_.") +IDENTIFIER_END = ALPHANUM | (ZeroOrMore(PUNCTUATION) + ALPHANUM) +IDENTIFIER = Combine(ALPHANUM + ZeroOrMore(IDENTIFIER_END)) + +NAME = IDENTIFIER("name") +EXTRA = IDENTIFIER + +URI = Regex(r'[^ ]+')("url") +URL = (AT + URI) + +EXTRAS_LIST = EXTRA + ZeroOrMore(COMMA + EXTRA) +EXTRAS = (LBRACKET + Optional(EXTRAS_LIST) + RBRACKET)("extras") + +VERSION_PEP440 = Regex(Specifier._regex_str, re.VERBOSE | re.IGNORECASE) +VERSION_LEGACY = Regex(LegacySpecifier._regex_str, re.VERBOSE | re.IGNORECASE) + +VERSION_ONE = VERSION_PEP440 ^ VERSION_LEGACY +VERSION_MANY = Combine(VERSION_ONE + ZeroOrMore(COMMA + VERSION_ONE), + joinString=",", adjacent=False)("_raw_spec") +_VERSION_SPEC = Optional(((LPAREN + VERSION_MANY + RPAREN) | VERSION_MANY)) +_VERSION_SPEC.setParseAction(lambda s, l, t: t._raw_spec or '') + +VERSION_SPEC = originalTextFor(_VERSION_SPEC)("specifier") +VERSION_SPEC.setParseAction(lambda s, l, t: t[1]) + +MARKER_EXPR = originalTextFor(MARKER_EXPR())("marker") +MARKER_EXPR.setParseAction( + lambda s, l, t: Marker(s[t._original_start:t._original_end]) +) +MARKER_SEPERATOR = SEMICOLON +MARKER = MARKER_SEPERATOR + MARKER_EXPR + +VERSION_AND_MARKER = VERSION_SPEC + Optional(MARKER) +URL_AND_MARKER = URL + Optional(MARKER) + +NAMED_REQUIREMENT = \ + NAME + Optional(EXTRAS) + (URL_AND_MARKER | VERSION_AND_MARKER) + +REQUIREMENT = stringStart + NAMED_REQUIREMENT + stringEnd + + +class Requirement(object): + """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): + try: + req = REQUIREMENT.parseString(requirement_string) + except ParseException as e: + raise InvalidRequirement( + "Invalid requirement, parse error at \"{0!r}\"".format( + requirement_string[e.loc:e.loc + 8])) + + self.name = req.name + if req.url: + parsed_url = urlparse.urlparse(req.url) + if not (parsed_url.scheme and parsed_url.netloc) or ( + not parsed_url.scheme and not parsed_url.netloc): + raise InvalidRequirement("Invalid URL given") + self.url = req.url + else: + self.url = None + self.extras = set(req.extras.asList() if req.extras else []) + self.specifier = SpecifierSet(req.specifier) + self.marker = req.marker if req.marker else None + + def __str__(self): + parts = [self.name] + + if self.extras: + parts.append("[{0}]".format(",".join(sorted(self.extras)))) + + if self.specifier: + parts.append(str(self.specifier)) + + if self.url: + parts.append("@ {0}".format(self.url)) + + if self.marker: + parts.append("; {0}".format(self.marker)) + + return "".join(parts) + + def __repr__(self): + return "<Requirement({0!r})>".format(str(self)) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/specifiers.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/specifiers.py new file mode 100644 index 00000000..7f5a76cf --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/specifiers.py @@ -0,0 +1,774 @@ +# 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 absolute_import, division, print_function + +import abc +import functools +import itertools +import re + +from ._compat import string_types, with_metaclass +from .version import Version, LegacyVersion, parse + + +class InvalidSpecifier(ValueError): + """ + An invalid specifier was found, users should refer to PEP 440. + """ + + +class BaseSpecifier(with_metaclass(abc.ABCMeta, object)): + + @abc.abstractmethod + def __str__(self): + """ + Returns the str representation of this Specifier like object. This + should be representative of the Specifier itself. + """ + + @abc.abstractmethod + def __hash__(self): + """ + Returns a hash value for this Specifier like object. + """ + + @abc.abstractmethod + def __eq__(self, other): + """ + Returns a boolean representing whether or not the two Specifier like + objects are equal. + """ + + @abc.abstractmethod + def __ne__(self, other): + """ + Returns a boolean representing whether or not the two Specifier like + objects are not equal. + """ + + @abc.abstractproperty + def prereleases(self): + """ + Returns whether or not pre-releases as a whole are allowed by this + specifier. + """ + + @prereleases.setter + def prereleases(self, value): + """ + Sets whether or not pre-releases as a whole are allowed by this + specifier. + """ + + @abc.abstractmethod + def contains(self, item, prereleases=None): + """ + Determines if the given item is contained within this specifier. + """ + + @abc.abstractmethod + def filter(self, iterable, prereleases=None): + """ + Takes an iterable of items and filters them so that only items which + are contained within this specifier are allowed in it. + """ + + +class _IndividualSpecifier(BaseSpecifier): + + _operators = {} + + def __init__(self, spec="", prereleases=None): + match = self._regex.search(spec) + if not match: + raise InvalidSpecifier("Invalid specifier: '{0}'".format(spec)) + + self._spec = ( + match.group("operator").strip(), + match.group("version").strip(), + ) + + # Store whether or not this Specifier should accept prereleases + self._prereleases = prereleases + + def __repr__(self): + pre = ( + ", prereleases={0!r}".format(self.prereleases) + if self._prereleases is not None + else "" + ) + + return "<{0}({1!r}{2})>".format( + self.__class__.__name__, + str(self), + pre, + ) + + def __str__(self): + return "{0}{1}".format(*self._spec) + + def __hash__(self): + return hash(self._spec) + + def __eq__(self, other): + if isinstance(other, string_types): + try: + other = self.__class__(other) + except InvalidSpecifier: + return NotImplemented + elif not isinstance(other, self.__class__): + return NotImplemented + + return self._spec == other._spec + + def __ne__(self, other): + if isinstance(other, string_types): + try: + other = self.__class__(other) + except InvalidSpecifier: + return NotImplemented + elif not isinstance(other, self.__class__): + return NotImplemented + + return self._spec != other._spec + + def _get_operator(self, op): + return getattr(self, "_compare_{0}".format(self._operators[op])) + + def _coerce_version(self, version): + if not isinstance(version, (LegacyVersion, Version)): + version = parse(version) + return version + + @property + def operator(self): + return self._spec[0] + + @property + def version(self): + return self._spec[1] + + @property + def prereleases(self): + return self._prereleases + + @prereleases.setter + def prereleases(self, value): + self._prereleases = value + + def __contains__(self, item): + return self.contains(item) + + def contains(self, item, prereleases=None): + # Determine if prereleases are to be allowed or not. + if prereleases is None: + prereleases = self.prereleases + + # Normalize item to a Version or LegacyVersion, this allows us to have + # a shortcut for ``"2.0" in Specifier(">=2") + item = self._coerce_version(item) + + # Determine if we should be supporting prereleases in this specifier + # or not, if we do not support prereleases than we can short circuit + # logic if this version is a prereleases. + if item.is_prerelease and not prereleases: + return False + + # Actually do the comparison to determine if this item is contained + # within this Specifier or not. + return self._get_operator(self.operator)(item, self.version) + + def filter(self, iterable, prereleases=None): + yielded = False + found_prereleases = [] + + kw = {"prereleases": prereleases if prereleases is not None else True} + + # Attempt to iterate over all the values in the iterable and if any of + # them match, yield them. + for version in iterable: + parsed_version = self._coerce_version(version) + + if self.contains(parsed_version, **kw): + # If our version is a prerelease, and we were not set to allow + # prereleases, then we'll store it for later incase nothing + # else matches this specifier. + if (parsed_version.is_prerelease and not + (prereleases or self.prereleases)): + found_prereleases.append(version) + # Either this is not a prerelease, or we should have been + # accepting prereleases from the begining. + else: + yielded = True + yield version + + # Now that we've iterated over everything, determine if we've yielded + # any values, and if we have not and we have any prereleases stored up + # then we will go ahead and yield the prereleases. + if not yielded and found_prereleases: + for version in found_prereleases: + yield version + + +class LegacySpecifier(_IndividualSpecifier): + + _regex_str = ( + r""" + (?P<operator>(==|!=|<=|>=|<|>)) + \s* + (?P<version> + [^,;\s)]* # Since this is a "legacy" specifier, and the version + # string can be just about anything, we match everything + # except for whitespace, a semi-colon for marker support, + # a closing paren since versions can be enclosed in + # them, and a comma since it's a version separator. + ) + """ + ) + + _regex = re.compile( + r"^\s*" + _regex_str + r"\s*$", re.VERBOSE | re.IGNORECASE) + + _operators = { + "==": "equal", + "!=": "not_equal", + "<=": "less_than_equal", + ">=": "greater_than_equal", + "<": "less_than", + ">": "greater_than", + } + + def _coerce_version(self, version): + if not isinstance(version, LegacyVersion): + version = LegacyVersion(str(version)) + return version + + def _compare_equal(self, prospective, spec): + return prospective == self._coerce_version(spec) + + def _compare_not_equal(self, prospective, spec): + return prospective != self._coerce_version(spec) + + def _compare_less_than_equal(self, prospective, spec): + return prospective <= self._coerce_version(spec) + + def _compare_greater_than_equal(self, prospective, spec): + return prospective >= self._coerce_version(spec) + + def _compare_less_than(self, prospective, spec): + return prospective < self._coerce_version(spec) + + def _compare_greater_than(self, prospective, spec): + return prospective > self._coerce_version(spec) + + +def _require_version_compare(fn): + @functools.wraps(fn) + def wrapped(self, prospective, spec): + if not isinstance(prospective, Version): + return False + return fn(self, prospective, spec) + return wrapped + + +class Specifier(_IndividualSpecifier): + + _regex_str = ( + r""" + (?P<operator>(~=|==|!=|<=|>=|<|>|===)) + (?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]* # We just match everything, except for whitespace + # since we are only testing for strict identity. + ) + | + (?: + # 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 + (?: # pre release + [-_\.]? + (a|b|c|rc|alpha|beta|pre|preview) + [-_\.]? + [0-9]* + )? + (?: # post release + (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*) + )? + + # You cannot use a wild card and a dev or local version + # together so group them with a | and make them optional. + (?: + (?:[-_\.]?dev[-_\.]?[0-9]*)? # dev release + (?:\+[a-z0-9]+(?:[-_\.][a-z0-9]+)*)? # local + | + \.\* # Wild card syntax of .* + )? + ) + | + (?: + # 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 + [-_\.]? + (a|b|c|rc|alpha|beta|pre|preview) + [-_\.]? + [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 + [-_\.]? + (a|b|c|rc|alpha|beta|pre|preview) + [-_\.]? + [0-9]* + )? + (?: # post release + (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*) + )? + (?:[-_\.]?dev[-_\.]?[0-9]*)? # dev release + ) + ) + """ + ) + + _regex = re.compile( + r"^\s*" + _regex_str + r"\s*$", re.VERBOSE | re.IGNORECASE) + + _operators = { + "~=": "compatible", + "==": "equal", + "!=": "not_equal", + "<=": "less_than_equal", + ">=": "greater_than_equal", + "<": "less_than", + ">": "greater_than", + "===": "arbitrary", + } + + @_require_version_compare + def _compare_compatible(self, prospective, spec): + # 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 post and dev releases and we want to treat the pre-release as + # it's own separate segment. + prefix = ".".join( + list( + itertools.takewhile( + lambda x: (not x.startswith("post") and not + x.startswith("dev")), + _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)) + + @_require_version_compare + def _compare_equal(self, prospective, spec): + # We need special logic to handle prefix matching + if spec.endswith(".*"): + # In the case of prefix matching we want to ignore local segment. + prospective = Version(prospective.public) + # Split the spec out by dots, and pretend that there is an implicit + # dot in between a release segment and a pre-release segment. + spec = _version_split(spec[:-2]) # Remove the trailing .* + + # Split the prospective version out by dots, and pretend that there + # is an implicit dot in between a release segment and a pre-release + # segment. + prospective = _version_split(str(prospective)) + + # 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. + prospective = prospective[:len(spec)] + + # Pad out our two sides with zeros so that they both equal the same + # length. + spec, prospective = _pad_version(spec, prospective) + else: + # Convert our spec string into a Version + 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.local: + prospective = Version(prospective.public) + + return prospective == spec + + @_require_version_compare + def _compare_not_equal(self, prospective, spec): + return not self._compare_equal(prospective, spec) + + @_require_version_compare + def _compare_less_than_equal(self, prospective, spec): + return prospective <= Version(spec) + + @_require_version_compare + def _compare_greater_than_equal(self, prospective, spec): + return prospective >= Version(spec) + + @_require_version_compare + def _compare_less_than(self, prospective, spec): + # Convert our spec to a Version instance, since we'll want to work with + # it as a version. + spec = Version(spec) + + # 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: + if Version(prospective.base_version) == Version(spec.base_version): + 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 + + @_require_version_compare + def _compare_greater_than(self, prospective, spec): + # Convert our spec to a Version instance, since we'll want to work with + # it as a version. + spec = Version(spec) + + # 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: + if Version(prospective.base_version) == Version(spec.base_version): + return False + + # Ensure that we do not allow a local version of the version mentioned + # in the specifier, which is techincally greater than, to match. + if prospective.local is not None: + if Version(prospective.base_version) == Version(spec.base_version): + 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, spec): + return str(prospective).lower() == str(spec).lower() + + @property + def prereleases(self): + # 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 + + # Look at all of our specifiers and determine if they are inclusive + # operators, and if they are if they are including an explicit + # prerelease. + operator, version = self._spec + if operator in ["==", ">=", "<=", "~=", "==="]: + # The == specifier can include a trailing .*, if it does we + # want to remove before parsing. + if operator == "==" and version.endswith(".*"): + version = version[:-2] + + # Parse the version, and if it is a pre-release than this + # specifier allows pre-releases. + if parse(version).is_prerelease: + return True + + return False + + @prereleases.setter + def prereleases(self, value): + self._prereleases = value + + +_prefix_regex = re.compile(r"^([0-9]+)((?:a|b|c|rc)[0-9]+)$") + + +def _version_split(version): + result = [] + for item in version.split("."): + match = _prefix_regex.search(item) + if match: + result.extend(match.groups()) + else: + result.append(item) + return result + + +def _pad_version(left, right): + 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(*left_split)), + list(itertools.chain(*right_split)), + ) + + +class SpecifierSet(BaseSpecifier): + + def __init__(self, specifiers="", prereleases=None): + # Split on , to break each indidivual specifier into it's own item, and + # strip each item to remove leading/trailing whitespace. + specifiers = [s.strip() for s in specifiers.split(",") if s.strip()] + + # Parsed each individual specifier, attempting first to make it a + # Specifier and falling back to a LegacySpecifier. + parsed = set() + for specifier in specifiers: + try: + parsed.add(Specifier(specifier)) + except InvalidSpecifier: + parsed.add(LegacySpecifier(specifier)) + + # Turn our parsed specifiers into a frozen set and save them for later. + self._specs = frozenset(parsed) + + # Store our prereleases value so we can use it later to determine if + # we accept prereleases or not. + self._prereleases = prereleases + + def __repr__(self): + pre = ( + ", prereleases={0!r}".format(self.prereleases) + if self._prereleases is not None + else "" + ) + + return "<SpecifierSet({0!r}{1})>".format(str(self), pre) + + def __str__(self): + return ",".join(sorted(str(s) for s in self._specs)) + + def __hash__(self): + return hash(self._specs) + + def __and__(self, other): + if isinstance(other, string_types): + 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: + specifier._prereleases = self._prereleases + elif 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): + if isinstance(other, string_types): + other = SpecifierSet(other) + elif isinstance(other, _IndividualSpecifier): + other = SpecifierSet(str(other)) + elif not isinstance(other, SpecifierSet): + return NotImplemented + + return self._specs == other._specs + + def __ne__(self, other): + if isinstance(other, string_types): + other = SpecifierSet(other) + elif isinstance(other, _IndividualSpecifier): + other = SpecifierSet(str(other)) + elif not isinstance(other, SpecifierSet): + return NotImplemented + + return self._specs != other._specs + + def __len__(self): + return len(self._specs) + + def __iter__(self): + return iter(self._specs) + + @property + def prereleases(self): + # 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. + return any(s.prereleases for s in self._specs) + + @prereleases.setter + def prereleases(self, value): + self._prereleases = value + + def __contains__(self, item): + return self.contains(item) + + def contains(self, item, prereleases=None): + # Ensure that our item is a Version or LegacyVersion instance. + if not isinstance(item, (LegacyVersion, Version)): + item = parse(item) + + # 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: + prereleases = self.prereleases + + # We can determine if we're going to allow pre-releases by looking to + # see if any of the underlying items supports them. If none of them do + # and this item is a pre-release then we do not allow it and we can + # short circuit that here. + # Note: This means that 1.0.dev1 would not be contained in something + # like >=1.0.devabc however it would be in >=1.0.debabc,>0.0.dev0 + if not prereleases and item.is_prerelease: + return False + + # We simply dispatch to the underlying specs here to make sure that the + # given version is contained within all of them. + # Note: This use of all() here means that an empty set of specifiers + # will always return True, this is an explicit design decision. + return all( + s.contains(item, prereleases=prereleases) + for s in self._specs + ) + + def filter(self, iterable, prereleases=None): + # 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: + 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: + for spec in self._specs: + iterable = spec.filter(iterable, prereleases=bool(prereleases)) + return iterable + # If we do not have any specifiers, then we need to have a rough filter + # which will filter out any pre-releases, unless there are no final + # releases, and which will filter out LegacyVersion in general. + else: + filtered = [] + found_prereleases = [] + + for item in iterable: + # Ensure that we some kind of Version class for this item. + if not isinstance(item, (LegacyVersion, Version)): + parsed_version = parse(item) + else: + parsed_version = item + + # Filter out any item which is parsed as a LegacyVersion + if isinstance(parsed_version, LegacyVersion): + continue + + # Store any item which is a pre-release for later unless we've + # already found a final version or we are accepting prereleases + if parsed_version.is_prerelease and not prereleases: + if not filtered: + found_prereleases.append(item) + else: + filtered.append(item) + + # If we've found no items except for pre-releases, then we'll go + # ahead and use the pre-releases + if not filtered and found_prereleases and prereleases is None: + return found_prereleases + + return filtered diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/utils.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/utils.py new file mode 100644 index 00000000..942387ce --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/utils.py @@ -0,0 +1,14 @@ +# 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 absolute_import, division, print_function + +import re + + +_canonicalize_regex = re.compile(r"[-_.]+") + + +def canonicalize_name(name): + # This is taken from PEP 503. + return _canonicalize_regex.sub("-", name).lower() diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/version.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/version.py new file mode 100644 index 00000000..83b5ee8c --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/packaging/version.py @@ -0,0 +1,393 @@ +# 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 absolute_import, division, print_function + +import collections +import itertools +import re + +from ._structures import Infinity + + +__all__ = [ + "parse", "Version", "LegacyVersion", "InvalidVersion", "VERSION_PATTERN" +] + + +_Version = collections.namedtuple( + "_Version", + ["epoch", "release", "dev", "pre", "post", "local"], +) + + +def parse(version): + """ + Parse the given version string and return either a :class:`Version` object + or a :class:`LegacyVersion` object depending on if the given version is + a valid PEP 440 version or a legacy version. + """ + try: + return Version(version) + except InvalidVersion: + return LegacyVersion(version) + + +class InvalidVersion(ValueError): + """ + An invalid version was found, users should refer to PEP 440. + """ + + +class _BaseVersion(object): + + def __hash__(self): + return hash(self._key) + + def __lt__(self, other): + return self._compare(other, lambda s, o: s < o) + + def __le__(self, other): + return self._compare(other, lambda s, o: s <= o) + + def __eq__(self, other): + return self._compare(other, lambda s, o: s == o) + + def __ge__(self, other): + return self._compare(other, lambda s, o: s >= o) + + def __gt__(self, other): + return self._compare(other, lambda s, o: s > o) + + def __ne__(self, other): + return self._compare(other, lambda s, o: s != o) + + def _compare(self, other, method): + if not isinstance(other, _BaseVersion): + return NotImplemented + + return method(self._key, other._key) + + +class LegacyVersion(_BaseVersion): + + def __init__(self, version): + self._version = str(version) + self._key = _legacy_cmpkey(self._version) + + def __str__(self): + return self._version + + def __repr__(self): + return "<LegacyVersion({0})>".format(repr(str(self))) + + @property + def public(self): + return self._version + + @property + def base_version(self): + return self._version + + @property + def local(self): + return None + + @property + def is_prerelease(self): + return False + + @property + def is_postrelease(self): + return False + + +_legacy_version_component_re = re.compile( + r"(\d+ | [a-z]+ | \.| -)", re.VERBOSE, +) + +_legacy_version_replacement_map = { + "pre": "c", "preview": "c", "-": "final-", "rc": "c", "dev": "@", +} + + +def _parse_version_parts(s): + for part in _legacy_version_component_re.split(s): + part = _legacy_version_replacement_map.get(part, part) + + if not part or part == ".": + continue + + if part[:1] in "0123456789": + # pad for numeric comparison + yield part.zfill(8) + else: + yield "*" + part + + # ensure that alpha/beta/candidate are before final + yield "*final" + + +def _legacy_cmpkey(version): + # We hardcode an epoch of -1 here. A PEP 440 version can only have a epoch + # greater than or equal to 0. This will effectively put the LegacyVersion, + # which uses the defacto standard originally implemented by setuptools, + # as before all PEP 440 versions. + epoch = -1 + + # This scheme is taken from pkg_resources.parse_version setuptools prior to + # it's adoption of the packaging library. + parts = [] + for part in _parse_version_parts(version.lower()): + if part.startswith("*"): + # remove "-" before a prerelease tag + if part < "*final": + while parts and parts[-1] == "*final-": + parts.pop() + + # remove trailing zeros from each series of numeric parts + while parts and parts[-1] == "00000000": + parts.pop() + + parts.append(part) + parts = tuple(parts) + + return epoch, parts + +# Deliberately not anchored to the start and end of the string, to make it +# easier for 3rd party code to reuse +VERSION_PATTERN = r""" + v? + (?: + (?:(?P<epoch>[0-9]+)!)? # epoch + (?P<release>[0-9]+(?:\.[0-9]+)*) # release segment + (?P<pre> # pre-release + [-_\.]? + (?P<pre_l>(a|b|c|rc|alpha|beta|pre|preview)) + [-_\.]? + (?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>[a-z0-9]+(?:[-_\.][a-z0-9]+)*))? # local version +""" + + +class Version(_BaseVersion): + + _regex = re.compile( + r"^\s*" + VERSION_PATTERN + r"\s*$", + re.VERBOSE | re.IGNORECASE, + ) + + def __init__(self, version): + # Validate the version and parse it into pieces + match = self._regex.search(version) + if not match: + raise InvalidVersion("Invalid version: '{0}'".format(version)) + + # Store the parsed out pieces of the version + self._version = _Version( + epoch=int(match.group("epoch")) if match.group("epoch") else 0, + release=tuple(int(i) for i in match.group("release").split(".")), + pre=_parse_letter_version( + match.group("pre_l"), + match.group("pre_n"), + ), + post=_parse_letter_version( + match.group("post_l"), + match.group("post_n1") or match.group("post_n2"), + ), + dev=_parse_letter_version( + match.group("dev_l"), + match.group("dev_n"), + ), + local=_parse_local_version(match.group("local")), + ) + + # Generate a key which will be used for sorting + self._key = _cmpkey( + self._version.epoch, + self._version.release, + self._version.pre, + self._version.post, + self._version.dev, + self._version.local, + ) + + def __repr__(self): + return "<Version({0})>".format(repr(str(self))) + + def __str__(self): + parts = [] + + # Epoch + if self._version.epoch != 0: + parts.append("{0}!".format(self._version.epoch)) + + # Release segment + parts.append(".".join(str(x) for x in self._version.release)) + + # Pre-release + if self._version.pre is not None: + parts.append("".join(str(x) for x in self._version.pre)) + + # Post-release + if self._version.post is not None: + parts.append(".post{0}".format(self._version.post[1])) + + # Development release + if self._version.dev is not None: + parts.append(".dev{0}".format(self._version.dev[1])) + + # Local version segment + if self._version.local is not None: + parts.append( + "+{0}".format(".".join(str(x) for x in self._version.local)) + ) + + return "".join(parts) + + @property + def public(self): + return str(self).split("+", 1)[0] + + @property + def base_version(self): + parts = [] + + # Epoch + if self._version.epoch != 0: + parts.append("{0}!".format(self._version.epoch)) + + # Release segment + parts.append(".".join(str(x) for x in self._version.release)) + + return "".join(parts) + + @property + def local(self): + version_string = str(self) + if "+" in version_string: + return version_string.split("+", 1)[1] + + @property + def is_prerelease(self): + return bool(self._version.dev or self._version.pre) + + @property + def is_postrelease(self): + return bool(self._version.post) + + +def _parse_letter_version(letter, number): + if letter: + # We consider there to be an implicit 0 in a pre-release if there is + # not a numeral associated with it. + if number is None: + number = 0 + + # 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. + if letter == "alpha": + letter = "a" + elif letter == "beta": + letter = "b" + elif letter in ["c", "pre", "preview"]: + letter = "rc" + elif letter in ["rev", "r"]: + letter = "post" + + return letter, int(number) + if not letter and 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) + letter = "post" + + return letter, int(number) + + +_local_version_seperators = re.compile(r"[\._-]") + + +def _parse_local_version(local): + """ + 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_seperators.split(local) + ) + + +def _cmpkey(epoch, release, pre, post, dev, local): + # When we compare a release version, we want to compare it with all of the + # trailing zeros removed. So we'll use a reverse the list, drop all the now + # leading zeros until we come to something non zero, then take the rest + # re-reverse it back into the correct order and make it a tuple and use + # that for our sorting key. + release = tuple( + reversed(list( + itertools.dropwhile( + lambda x: x == 0, + reversed(release), + ) + )) + ) + + # 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 = -Infinity + # Versions without a pre-release (except as noted above) should sort after + # those with one. + elif pre is None: + pre = Infinity + + # Versions without a post segment should sort before those with one. + if post is None: + post = -Infinity + + # Versions without a development segment should sort after those with one. + if dev is None: + dev = Infinity + + if local is None: + # Versions without a local segment should sort before those with one. + local = -Infinity + 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 (-Infinity, i) + for i in local + ) + + return epoch, release, pre, post, dev, local diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/pyparsing.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/pyparsing.py new file mode 100644 index 00000000..cf75e1e5 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/pyparsing.py @@ -0,0 +1,5742 @@ +# module pyparsing.py +# +# Copyright (c) 2003-2018 Paul T. McGuire +# +# 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. +# + +__doc__ = \ +""" +pyparsing module - Classes and methods to define and execute parsing grammars +============================================================================= + +The pyparsing module is an alternative approach to creating and executing simple grammars, +vs. the traditional lex/yacc approach, or the use of regular expressions. With pyparsing, you +don't need to learn a new syntax for defining grammars or matching expressions - the parsing module +provides a library of classes that you use to construct the grammar directly in Python. + +Here is a program to parse "Hello, World!" (or any greeting of the form +C{"<salutation>, <addressee>!"}), built up using L{Word}, L{Literal}, and L{And} elements +(L{'+'<ParserElement.__add__>} operator gives L{And} expressions, strings are auto-converted to +L{Literal} expressions):: + + from pyparsing import Word, alphas + + # define grammar of a greeting + greet = Word(alphas) + "," + Word(alphas) + "!" + + hello = "Hello, World!" + print (hello, "->", greet.parseString(hello)) + +The program outputs the following:: + + Hello, World! -> ['Hello', ',', 'World', '!'] + +The Python representation of the grammar is quite readable, owing to the self-explanatory +class names, and the use of '+', '|' and '^' operators. + +The L{ParseResults} object returned from L{ParserElement.parseString<ParserElement.parseString>} can be accessed as a nested list, a dictionary, or an +object with named attributes. + +The pyparsing module handles some of the problems that are typically vexing when writing text parsers: + - extra or missing whitespace (the above program will also handle "Hello,World!", "Hello , World !", etc.) + - quoted strings + - embedded comments + + +Getting Started - +----------------- +Visit the classes L{ParserElement} and L{ParseResults} to see the base classes that most other pyparsing +classes inherit from. Use the docstrings for examples of how to: + - construct literal match expressions from L{Literal} and L{CaselessLiteral} classes + - construct character word-group expressions using the L{Word} class + - see how to create repetitive expressions using L{ZeroOrMore} and L{OneOrMore} classes + - use L{'+'<And>}, L{'|'<MatchFirst>}, L{'^'<Or>}, and L{'&'<Each>} operators to combine simple expressions into more complex ones + - associate names with your parsed results using L{ParserElement.setResultsName} + - find some helpful expression short-cuts like L{delimitedList} and L{oneOf} + - find more useful common expressions in the L{pyparsing_common} namespace class +""" + +__version__ = "2.2.1" +__versionTime__ = "18 Sep 2018 00:49 UTC" +__author__ = "Paul McGuire <ptmcg@users.sourceforge.net>" + +import string +from weakref import ref as wkref +import copy +import sys +import warnings +import re +import sre_constants +import collections +import pprint +import traceback +import types +from datetime import datetime + +try: + from _thread import RLock +except ImportError: + from threading import RLock + +try: + # Python 3 + from collections.abc import Iterable + from collections.abc import MutableMapping +except ImportError: + # Python 2.7 + from collections import Iterable + from collections import MutableMapping + +try: + from collections import OrderedDict as _OrderedDict +except ImportError: + try: + from ordereddict import OrderedDict as _OrderedDict + except ImportError: + _OrderedDict = None + +#~ sys.stderr.write( "testing pyparsing module, version %s, %s\n" % (__version__,__versionTime__ ) ) + +__all__ = [ +'And', 'CaselessKeyword', 'CaselessLiteral', 'CharsNotIn', 'Combine', 'Dict', 'Each', 'Empty', +'FollowedBy', 'Forward', 'GoToColumn', 'Group', 'Keyword', 'LineEnd', 'LineStart', 'Literal', +'MatchFirst', 'NoMatch', 'NotAny', 'OneOrMore', 'OnlyOnce', 'Optional', 'Or', +'ParseBaseException', 'ParseElementEnhance', 'ParseException', 'ParseExpression', 'ParseFatalException', +'ParseResults', 'ParseSyntaxException', 'ParserElement', 'QuotedString', 'RecursiveGrammarException', +'Regex', 'SkipTo', 'StringEnd', 'StringStart', 'Suppress', 'Token', 'TokenConverter', +'White', 'Word', 'WordEnd', 'WordStart', 'ZeroOrMore', +'alphanums', 'alphas', 'alphas8bit', 'anyCloseTag', 'anyOpenTag', 'cStyleComment', 'col', +'commaSeparatedList', 'commonHTMLEntity', 'countedArray', 'cppStyleComment', 'dblQuotedString', +'dblSlashComment', 'delimitedList', 'dictOf', 'downcaseTokens', 'empty', 'hexnums', +'htmlComment', 'javaStyleComment', 'line', 'lineEnd', 'lineStart', 'lineno', +'makeHTMLTags', 'makeXMLTags', 'matchOnlyAtCol', 'matchPreviousExpr', 'matchPreviousLiteral', +'nestedExpr', 'nullDebugAction', 'nums', 'oneOf', 'opAssoc', 'operatorPrecedence', 'printables', +'punc8bit', 'pythonStyleComment', 'quotedString', 'removeQuotes', 'replaceHTMLEntity', +'replaceWith', 'restOfLine', 'sglQuotedString', 'srange', 'stringEnd', +'stringStart', 'traceParseAction', 'unicodeString', 'upcaseTokens', 'withAttribute', +'indentedBlock', 'originalTextFor', 'ungroup', 'infixNotation','locatedExpr', 'withClass', +'CloseMatch', 'tokenMap', 'pyparsing_common', +] + +system_version = tuple(sys.version_info)[:3] +PY_3 = system_version[0] == 3 +if PY_3: + _MAX_INT = sys.maxsize + basestring = str + unichr = chr + _ustr = str + + # build list of single arg builtins, that can be used as parse actions + singleArgBuiltins = [sum, len, sorted, reversed, list, tuple, set, any, all, min, max] + +else: + _MAX_INT = sys.maxint + range = xrange + + def _ustr(obj): + """Drop-in replacement for str(obj) that tries to be Unicode friendly. It first tries + str(obj). If that fails with a UnicodeEncodeError, then it tries unicode(obj). It + then < returns the unicode object | encodes it with the default encoding | ... >. + """ + if isinstance(obj,unicode): + return obj + + try: + # If this works, then _ustr(obj) has the same behaviour as str(obj), so + # it won't break any existing code. + return str(obj) + + except UnicodeEncodeError: + # Else encode it + ret = unicode(obj).encode(sys.getdefaultencoding(), 'xmlcharrefreplace') + xmlcharref = Regex(r'&#\d+;') + xmlcharref.setParseAction(lambda t: '\\u' + hex(int(t[0][2:-1]))[2:]) + return xmlcharref.transformString(ret) + + # build list of single arg builtins, tolerant of Python version, that can be used as parse actions + singleArgBuiltins = [] + import __builtin__ + for fname in "sum len sorted reversed list tuple set any all min max".split(): + try: + singleArgBuiltins.append(getattr(__builtin__,fname)) + except AttributeError: + continue + +_generatorType = type((y for y in range(1))) + +def _xml_escape(data): + """Escape &, <, >, ", ', etc. in a string of data.""" + + # ampersand must be replaced first + from_symbols = '&><"\'' + to_symbols = ('&'+s+';' for s in "amp gt lt quot apos".split()) + for from_,to_ in zip(from_symbols, to_symbols): + data = data.replace(from_, to_) + return data + +class _Constants(object): + pass + +alphas = string.ascii_uppercase + string.ascii_lowercase +nums = "0123456789" +hexnums = nums + "ABCDEFabcdef" +alphanums = alphas + nums +_bslash = chr(92) +printables = "".join(c for c in string.printable if c not in string.whitespace) + +class ParseBaseException(Exception): + """base exception class for all parsing runtime exceptions""" + # Performance tuning: we construct a *lot* of these, so keep this + # constructor as small and fast as possible + def __init__( self, pstr, loc=0, msg=None, elem=None ): + self.loc = loc + if msg is None: + self.msg = pstr + self.pstr = "" + else: + self.msg = msg + self.pstr = pstr + self.parserElement = elem + self.args = (pstr, loc, msg) + + @classmethod + def _from_exception(cls, pe): + """ + internal factory method to simplify creating one type of ParseException + from another - avoids having __init__ signature conflicts among subclasses + """ + return cls(pe.pstr, pe.loc, pe.msg, pe.parserElement) + + def __getattr__( self, aname ): + """supported attributes by name are: + - lineno - returns the line number of the exception text + - col - returns the column number of the exception text + - line - returns the line containing the exception text + """ + if( aname == "lineno" ): + return lineno( self.loc, self.pstr ) + elif( aname in ("col", "column") ): + return col( self.loc, self.pstr ) + elif( aname == "line" ): + return line( self.loc, self.pstr ) + else: + raise AttributeError(aname) + + def __str__( self ): + return "%s (at char %d), (line:%d, col:%d)" % \ + ( self.msg, self.loc, self.lineno, self.column ) + def __repr__( self ): + return _ustr(self) + def markInputline( self, markerString = ">!<" ): + """Extracts the exception line from the input string, and marks + the location of the exception with a special symbol. + """ + line_str = self.line + line_column = self.column - 1 + if markerString: + line_str = "".join((line_str[:line_column], + markerString, line_str[line_column:])) + return line_str.strip() + def __dir__(self): + return "lineno col line".split() + dir(type(self)) + +class ParseException(ParseBaseException): + """ + Exception thrown when parse expressions don't match class; + supported attributes by name are: + - lineno - returns the line number of the exception text + - col - returns the column number of the exception text + - line - returns the line containing the exception text + + Example:: + try: + Word(nums).setName("integer").parseString("ABC") + except ParseException as pe: + print(pe) + print("column: {}".format(pe.col)) + + prints:: + Expected integer (at char 0), (line:1, col:1) + column: 1 + """ + pass + +class ParseFatalException(ParseBaseException): + """user-throwable exception thrown when inconsistent parse content + is found; stops all parsing immediately""" + pass + +class ParseSyntaxException(ParseFatalException): + """just like L{ParseFatalException}, but thrown internally when an + L{ErrorStop<And._ErrorStop>} ('-' operator) indicates that parsing is to stop + immediately because an unbacktrackable syntax error has been found""" + pass + +#~ class ReparseException(ParseBaseException): + #~ """Experimental class - parse actions can raise this exception to cause + #~ pyparsing to reparse the input string: + #~ - with a modified input string, and/or + #~ - with a modified start location + #~ Set the values of the ReparseException in the constructor, and raise the + #~ exception in a parse action to cause pyparsing to use the new string/location. + #~ Setting the values as None causes no change to be made. + #~ """ + #~ def __init_( self, newstring, restartLoc ): + #~ self.newParseText = newstring + #~ self.reparseLoc = restartLoc + +class RecursiveGrammarException(Exception): + """exception thrown by L{ParserElement.validate} if the grammar could be improperly recursive""" + def __init__( self, parseElementList ): + self.parseElementTrace = parseElementList + + def __str__( self ): + return "RecursiveGrammarException: %s" % self.parseElementTrace + +class _ParseResultsWithOffset(object): + def __init__(self,p1,p2): + self.tup = (p1,p2) + def __getitem__(self,i): + return self.tup[i] + def __repr__(self): + return repr(self.tup[0]) + def setOffset(self,i): + self.tup = (self.tup[0],i) + +class ParseResults(object): + """ + Structured parse results, to provide multiple means of access to the parsed data: + - as a list (C{len(results)}) + - by list index (C{results[0], results[1]}, etc.) + - by attribute (C{results.<resultsName>} - see L{ParserElement.setResultsName}) + + Example:: + integer = Word(nums) + date_str = (integer.setResultsName("year") + '/' + + integer.setResultsName("month") + '/' + + integer.setResultsName("day")) + # equivalent form: + # date_str = integer("year") + '/' + integer("month") + '/' + integer("day") + + # parseString returns a ParseResults object + result = date_str.parseString("1999/12/31") + + def test(s, fn=repr): + print("%s -> %s" % (s, fn(eval(s)))) + test("list(result)") + test("result[0]") + test("result['month']") + test("result.day") + test("'month' in result") + test("'minutes' in result") + test("result.dump()", str) + prints:: + list(result) -> ['1999', '/', '12', '/', '31'] + result[0] -> '1999' + result['month'] -> '12' + result.day -> '31' + 'month' in result -> True + 'minutes' in result -> False + result.dump() -> ['1999', '/', '12', '/', '31'] + - day: 31 + - month: 12 + - year: 1999 + """ + def __new__(cls, toklist=None, name=None, asList=True, modal=True ): + if isinstance(toklist, cls): + return toklist + retobj = object.__new__(cls) + retobj.__doinit = True + return retobj + + # Performance tuning: we construct a *lot* of these, so keep this + # constructor as small and fast as possible + def __init__( self, toklist=None, name=None, asList=True, modal=True, isinstance=isinstance ): + if self.__doinit: + self.__doinit = False + self.__name = None + self.__parent = None + self.__accumNames = {} + self.__asList = asList + self.__modal = modal + if toklist is None: + toklist = [] + if isinstance(toklist, list): + self.__toklist = toklist[:] + elif isinstance(toklist, _generatorType): + self.__toklist = list(toklist) + else: + self.__toklist = [toklist] + self.__tokdict = dict() + + if name is not None and name: + if not modal: + self.__accumNames[name] = 0 + if isinstance(name,int): + name = _ustr(name) # will always return a str, but use _ustr for consistency + self.__name = name + if not (isinstance(toklist, (type(None), basestring, list)) and toklist in (None,'',[])): + if isinstance(toklist,basestring): + toklist = [ toklist ] + if asList: + if isinstance(toklist,ParseResults): + self[name] = _ParseResultsWithOffset(toklist.copy(),0) + else: + self[name] = _ParseResultsWithOffset(ParseResults(toklist[0]),0) + self[name].__name = name + else: + try: + self[name] = toklist[0] + except (KeyError,TypeError,IndexError): + self[name] = toklist + + def __getitem__( self, i ): + if isinstance( i, (int,slice) ): + return self.__toklist[i] + else: + if i not in self.__accumNames: + return self.__tokdict[i][-1][0] + else: + return ParseResults([ v[0] for v in self.__tokdict[i] ]) + + def __setitem__( self, k, v, isinstance=isinstance ): + if isinstance(v,_ParseResultsWithOffset): + self.__tokdict[k] = self.__tokdict.get(k,list()) + [v] + sub = v[0] + elif isinstance(k,(int,slice)): + self.__toklist[k] = v + sub = v + else: + self.__tokdict[k] = self.__tokdict.get(k,list()) + [_ParseResultsWithOffset(v,0)] + sub = v + if isinstance(sub,ParseResults): + sub.__parent = wkref(self) + + def __delitem__( self, i ): + if isinstance(i,(int,slice)): + mylen = len( self.__toklist ) + del self.__toklist[i] + + # convert int to slice + if isinstance(i, int): + if i < 0: + i += mylen + i = slice(i, i+1) + # get removed indices + removed = list(range(*i.indices(mylen))) + removed.reverse() + # fixup indices in token dictionary + for name,occurrences in self.__tokdict.items(): + for j in removed: + for k, (value, position) in enumerate(occurrences): + occurrences[k] = _ParseResultsWithOffset(value, position - (position > j)) + else: + del self.__tokdict[i] + + def __contains__( self, k ): + return k in self.__tokdict + + def __len__( self ): return len( self.__toklist ) + def __bool__(self): return ( not not self.__toklist ) + __nonzero__ = __bool__ + def __iter__( self ): return iter( self.__toklist ) + def __reversed__( self ): return iter( self.__toklist[::-1] ) + def _iterkeys( self ): + if hasattr(self.__tokdict, "iterkeys"): + return self.__tokdict.iterkeys() + else: + return iter(self.__tokdict) + + def _itervalues( self ): + return (self[k] for k in self._iterkeys()) + + def _iteritems( self ): + return ((k, self[k]) for k in self._iterkeys()) + + if PY_3: + keys = _iterkeys + """Returns an iterator of all named result keys (Python 3.x only).""" + + values = _itervalues + """Returns an iterator of all named result values (Python 3.x only).""" + + items = _iteritems + """Returns an iterator of all named result key-value tuples (Python 3.x only).""" + + else: + iterkeys = _iterkeys + """Returns an iterator of all named result keys (Python 2.x only).""" + + itervalues = _itervalues + """Returns an iterator of all named result values (Python 2.x only).""" + + iteritems = _iteritems + """Returns an iterator of all named result key-value tuples (Python 2.x only).""" + + def keys( self ): + """Returns all named result keys (as a list in Python 2.x, as an iterator in Python 3.x).""" + return list(self.iterkeys()) + + def values( self ): + """Returns all named result values (as a list in Python 2.x, as an iterator in Python 3.x).""" + return list(self.itervalues()) + + def items( self ): + """Returns all named result key-values (as a list of tuples in Python 2.x, as an iterator in Python 3.x).""" + return list(self.iteritems()) + + def haskeys( self ): + """Since keys() returns an iterator, this method is helpful in bypassing + code that looks for the existence of any defined results names.""" + return bool(self.__tokdict) + + def pop( self, *args, **kwargs): + """ + Removes and returns item at specified index (default=C{last}). + Supports both C{list} and C{dict} semantics for C{pop()}. If passed no + argument or an integer argument, it will use C{list} semantics + and pop tokens from the list of parsed tokens. If passed a + non-integer argument (most likely a string), it will use C{dict} + semantics and pop the corresponding value from any defined + results names. A second default return value argument is + supported, just as in C{dict.pop()}. + + Example:: + def remove_first(tokens): + tokens.pop(0) + print(OneOrMore(Word(nums)).parseString("0 123 321")) # -> ['0', '123', '321'] + print(OneOrMore(Word(nums)).addParseAction(remove_first).parseString("0 123 321")) # -> ['123', '321'] + + label = Word(alphas) + patt = label("LABEL") + OneOrMore(Word(nums)) + print(patt.parseString("AAB 123 321").dump()) + + # Use pop() in a parse action to remove named result (note that corresponding value is not + # removed from list form of results) + def remove_LABEL(tokens): + tokens.pop("LABEL") + return tokens + patt.addParseAction(remove_LABEL) + print(patt.parseString("AAB 123 321").dump()) + prints:: + ['AAB', '123', '321'] + - LABEL: AAB + + ['AAB', '123', '321'] + """ + if not args: + args = [-1] + for k,v in kwargs.items(): + if k == 'default': + args = (args[0], v) + else: + raise TypeError("pop() got an unexpected keyword argument '%s'" % k) + if (isinstance(args[0], int) or + len(args) == 1 or + args[0] in self): + index = args[0] + ret = self[index] + del self[index] + return ret + else: + defaultvalue = args[1] + return defaultvalue + + def get(self, key, defaultValue=None): + """ + Returns named result matching the given key, or if there is no + such name, then returns the given C{defaultValue} or C{None} if no + C{defaultValue} is specified. + + Similar to C{dict.get()}. + + Example:: + integer = Word(nums) + date_str = integer("year") + '/' + integer("month") + '/' + integer("day") + + result = date_str.parseString("1999/12/31") + print(result.get("year")) # -> '1999' + print(result.get("hour", "not specified")) # -> 'not specified' + print(result.get("hour")) # -> None + """ + if key in self: + return self[key] + else: + return defaultValue + + def insert( self, index, insStr ): + """ + Inserts new element at location index in the list of parsed tokens. + + Similar to C{list.insert()}. + + Example:: + print(OneOrMore(Word(nums)).parseString("0 123 321")) # -> ['0', '123', '321'] + + # use a parse action to insert the parse location in the front of the parsed results + def insert_locn(locn, tokens): + tokens.insert(0, locn) + print(OneOrMore(Word(nums)).addParseAction(insert_locn).parseString("0 123 321")) # -> [0, '0', '123', '321'] + """ + self.__toklist.insert(index, insStr) + # fixup indices in token dictionary + for name,occurrences in self.__tokdict.items(): + for k, (value, position) in enumerate(occurrences): + occurrences[k] = _ParseResultsWithOffset(value, position + (position > index)) + + def append( self, item ): + """ + Add single element to end of ParseResults list of elements. + + Example:: + print(OneOrMore(Word(nums)).parseString("0 123 321")) # -> ['0', '123', '321'] + + # use a parse action to compute the sum of the parsed integers, and add it to the end + def append_sum(tokens): + tokens.append(sum(map(int, tokens))) + print(OneOrMore(Word(nums)).addParseAction(append_sum).parseString("0 123 321")) # -> ['0', '123', '321', 444] + """ + self.__toklist.append(item) + + def extend( self, itemseq ): + """ + Add sequence of elements to end of ParseResults list of elements. + + Example:: + patt = OneOrMore(Word(alphas)) + + # use a parse action to append the reverse of the matched strings, to make a palindrome + def make_palindrome(tokens): + tokens.extend(reversed([t[::-1] for t in tokens])) + return ''.join(tokens) + print(patt.addParseAction(make_palindrome).parseString("lskdj sdlkjf lksd")) # -> 'lskdjsdlkjflksddsklfjkldsjdksl' + """ + if isinstance(itemseq, ParseResults): + self += itemseq + else: + self.__toklist.extend(itemseq) + + def clear( self ): + """ + Clear all elements and results names. + """ + del self.__toklist[:] + self.__tokdict.clear() + + def __getattr__( self, name ): + try: + return self[name] + except KeyError: + return "" + + if name in self.__tokdict: + if name not in self.__accumNames: + return self.__tokdict[name][-1][0] + else: + return ParseResults([ v[0] for v in self.__tokdict[name] ]) + else: + return "" + + def __add__( self, other ): + ret = self.copy() + ret += other + return ret + + def __iadd__( self, other ): + if other.__tokdict: + offset = len(self.__toklist) + addoffset = lambda a: offset if a<0 else a+offset + otheritems = other.__tokdict.items() + otherdictitems = [(k, _ParseResultsWithOffset(v[0],addoffset(v[1])) ) + for (k,vlist) in otheritems for v in vlist] + for k,v in otherdictitems: + self[k] = v + if isinstance(v[0],ParseResults): + v[0].__parent = wkref(self) + + self.__toklist += other.__toklist + self.__accumNames.update( other.__accumNames ) + return self + + def __radd__(self, other): + if isinstance(other,int) and other == 0: + # useful for merging many ParseResults using sum() builtin + return self.copy() + else: + # this may raise a TypeError - so be it + return other + self + + def __repr__( self ): + return "(%s, %s)" % ( repr( self.__toklist ), repr( self.__tokdict ) ) + + def __str__( self ): + return '[' + ', '.join(_ustr(i) if isinstance(i, ParseResults) else repr(i) for i in self.__toklist) + ']' + + def _asStringList( self, sep='' ): + out = [] + for item in self.__toklist: + if out and sep: + out.append(sep) + if isinstance( item, ParseResults ): + out += item._asStringList() + else: + out.append( _ustr(item) ) + return out + + def asList( self ): + """ + Returns the parse results as a nested list of matching tokens, all converted to strings. + + Example:: + patt = OneOrMore(Word(alphas)) + result = patt.parseString("sldkj lsdkj sldkj") + # even though the result prints in string-like form, it is actually a pyparsing ParseResults + print(type(result), result) # -> <class 'pyparsing.ParseResults'> ['sldkj', 'lsdkj', 'sldkj'] + + # Use asList() to create an actual list + result_list = result.asList() + print(type(result_list), result_list) # -> <class 'list'> ['sldkj', 'lsdkj', 'sldkj'] + """ + return [res.asList() if isinstance(res,ParseResults) else res for res in self.__toklist] + + def asDict( self ): + """ + Returns the named parse results as a nested dictionary. + + Example:: + integer = Word(nums) + date_str = integer("year") + '/' + integer("month") + '/' + integer("day") + + result = date_str.parseString('12/31/1999') + print(type(result), repr(result)) # -> <class 'pyparsing.ParseResults'> (['12', '/', '31', '/', '1999'], {'day': [('1999', 4)], 'year': [('12', 0)], 'month': [('31', 2)]}) + + result_dict = result.asDict() + print(type(result_dict), repr(result_dict)) # -> <class 'dict'> {'day': '1999', 'year': '12', 'month': '31'} + + # even though a ParseResults supports dict-like access, sometime you just need to have a dict + import json + print(json.dumps(result)) # -> Exception: TypeError: ... is not JSON serializable + print(json.dumps(result.asDict())) # -> {"month": "31", "day": "1999", "year": "12"} + """ + if PY_3: + item_fn = self.items + else: + item_fn = self.iteritems + + def toItem(obj): + if isinstance(obj, ParseResults): + if obj.haskeys(): + return obj.asDict() + else: + return [toItem(v) for v in obj] + else: + return obj + + return dict((k,toItem(v)) for k,v in item_fn()) + + def copy( self ): + """ + Returns a new copy of a C{ParseResults} object. + """ + ret = ParseResults( self.__toklist ) + ret.__tokdict = self.__tokdict.copy() + ret.__parent = self.__parent + ret.__accumNames.update( self.__accumNames ) + ret.__name = self.__name + return ret + + def asXML( self, doctag=None, namedItemsOnly=False, indent="", formatted=True ): + """ + (Deprecated) Returns the parse results as XML. Tags are created for tokens and lists that have defined results names. + """ + nl = "\n" + out = [] + namedItems = dict((v[1],k) for (k,vlist) in self.__tokdict.items() + for v in vlist) + nextLevelIndent = indent + " " + + # collapse out indents if formatting is not desired + if not formatted: + indent = "" + nextLevelIndent = "" + nl = "" + + selfTag = None + if doctag is not None: + selfTag = doctag + else: + if self.__name: + selfTag = self.__name + + if not selfTag: + if namedItemsOnly: + return "" + else: + selfTag = "ITEM" + + out += [ nl, indent, "<", selfTag, ">" ] + + for i,res in enumerate(self.__toklist): + if isinstance(res,ParseResults): + if i in namedItems: + out += [ res.asXML(namedItems[i], + namedItemsOnly and doctag is None, + nextLevelIndent, + formatted)] + else: + out += [ res.asXML(None, + namedItemsOnly and doctag is None, + nextLevelIndent, + formatted)] + else: + # individual token, see if there is a name for it + resTag = None + if i in namedItems: + resTag = namedItems[i] + if not resTag: + if namedItemsOnly: + continue + else: + resTag = "ITEM" + xmlBodyText = _xml_escape(_ustr(res)) + out += [ nl, nextLevelIndent, "<", resTag, ">", + xmlBodyText, + "</", resTag, ">" ] + + out += [ nl, indent, "</", selfTag, ">" ] + return "".join(out) + + def __lookup(self,sub): + for k,vlist in self.__tokdict.items(): + for v,loc in vlist: + if sub is v: + return k + return None + + def getName(self): + r""" + Returns the results name for this token expression. Useful when several + different expressions might match at a particular location. + + Example:: + integer = Word(nums) + ssn_expr = Regex(r"\d\d\d-\d\d-\d\d\d\d") + house_number_expr = Suppress('#') + Word(nums, alphanums) + user_data = (Group(house_number_expr)("house_number") + | Group(ssn_expr)("ssn") + | Group(integer)("age")) + user_info = OneOrMore(user_data) + + result = user_info.parseString("22 111-22-3333 #221B") + for item in result: + print(item.getName(), ':', item[0]) + prints:: + age : 22 + ssn : 111-22-3333 + house_number : 221B + """ + if self.__name: + return self.__name + elif self.__parent: + par = self.__parent() + if par: + return par.__lookup(self) + else: + return None + elif (len(self) == 1 and + len(self.__tokdict) == 1 and + next(iter(self.__tokdict.values()))[0][1] in (0,-1)): + return next(iter(self.__tokdict.keys())) + else: + return None + + def dump(self, indent='', depth=0, full=True): + """ + Diagnostic method for listing out the contents of a C{ParseResults}. + Accepts an optional C{indent} argument so that this string can be embedded + in a nested display of other data. + + Example:: + integer = Word(nums) + date_str = integer("year") + '/' + integer("month") + '/' + integer("day") + + result = date_str.parseString('12/31/1999') + print(result.dump()) + prints:: + ['12', '/', '31', '/', '1999'] + - day: 1999 + - month: 31 + - year: 12 + """ + out = [] + NL = '\n' + out.append( indent+_ustr(self.asList()) ) + if full: + if self.haskeys(): + items = sorted((str(k), v) for k,v in self.items()) + for k,v in items: + if out: + out.append(NL) + out.append( "%s%s- %s: " % (indent,(' '*depth), k) ) + if isinstance(v,ParseResults): + if v: + out.append( v.dump(indent,depth+1) ) + else: + out.append(_ustr(v)) + else: + out.append(repr(v)) + elif any(isinstance(vv,ParseResults) for vv in self): + v = self + for i,vv in enumerate(v): + if isinstance(vv,ParseResults): + out.append("\n%s%s[%d]:\n%s%s%s" % (indent,(' '*(depth)),i,indent,(' '*(depth+1)),vv.dump(indent,depth+1) )) + else: + out.append("\n%s%s[%d]:\n%s%s%s" % (indent,(' '*(depth)),i,indent,(' '*(depth+1)),_ustr(vv))) + + return "".join(out) + + def pprint(self, *args, **kwargs): + """ + Pretty-printer for parsed results as a list, using the C{pprint} module. + Accepts additional positional or keyword args as defined for the + C{pprint.pprint} method. (U{http://docs.python.org/3/library/pprint.html#pprint.pprint}) + + Example:: + ident = Word(alphas, alphanums) + num = Word(nums) + func = Forward() + term = ident | num | Group('(' + func + ')') + func <<= ident + Group(Optional(delimitedList(term))) + result = func.parseString("fna a,b,(fnb c,d,200),100") + result.pprint(width=40) + prints:: + ['fna', + ['a', + 'b', + ['(', 'fnb', ['c', 'd', '200'], ')'], + '100']] + """ + pprint.pprint(self.asList(), *args, **kwargs) + + # add support for pickle protocol + def __getstate__(self): + return ( self.__toklist, + ( self.__tokdict.copy(), + self.__parent is not None and self.__parent() or None, + self.__accumNames, + self.__name ) ) + + def __setstate__(self,state): + self.__toklist = state[0] + (self.__tokdict, + par, + inAccumNames, + self.__name) = state[1] + self.__accumNames = {} + self.__accumNames.update(inAccumNames) + if par is not None: + self.__parent = wkref(par) + else: + self.__parent = None + + def __getnewargs__(self): + return self.__toklist, self.__name, self.__asList, self.__modal + + def __dir__(self): + return (dir(type(self)) + list(self.keys())) + +MutableMapping.register(ParseResults) + +def col (loc,strg): + """Returns current column within a string, counting newlines as line separators. + The first column is number 1. + + Note: the default parsing behavior is to expand tabs in the input string + before starting the parsing process. See L{I{ParserElement.parseString}<ParserElement.parseString>} for more information + on parsing strings containing C{<TAB>}s, and suggested methods to maintain a + consistent view of the parsed string, the parse location, and line and column + positions within the parsed string. + """ + s = strg + return 1 if 0<loc<len(s) and s[loc-1] == '\n' else loc - s.rfind("\n", 0, loc) + +def lineno(loc,strg): + """Returns current line number within a string, counting newlines as line separators. + The first line is number 1. + + Note: the default parsing behavior is to expand tabs in the input string + before starting the parsing process. See L{I{ParserElement.parseString}<ParserElement.parseString>} for more information + on parsing strings containing C{<TAB>}s, and suggested methods to maintain a + consistent view of the parsed string, the parse location, and line and column + positions within the parsed string. + """ + return strg.count("\n",0,loc) + 1 + +def line( loc, strg ): + """Returns the line of text containing loc within a string, counting newlines as line separators. + """ + lastCR = strg.rfind("\n", 0, loc) + nextCR = strg.find("\n", loc) + if nextCR >= 0: + return strg[lastCR+1:nextCR] + else: + return strg[lastCR+1:] + +def _defaultStartDebugAction( instring, loc, expr ): + print (("Match " + _ustr(expr) + " at loc " + _ustr(loc) + "(%d,%d)" % ( lineno(loc,instring), col(loc,instring) ))) + +def _defaultSuccessDebugAction( instring, startloc, endloc, expr, toks ): + print ("Matched " + _ustr(expr) + " -> " + str(toks.asList())) + +def _defaultExceptionDebugAction( instring, loc, expr, exc ): + print ("Exception raised:" + _ustr(exc)) + +def nullDebugAction(*args): + """'Do-nothing' debug action, to suppress debugging output during parsing.""" + pass + +# Only works on Python 3.x - nonlocal is toxic to Python 2 installs +#~ 'decorator to trim function calls to match the arity of the target' +#~ def _trim_arity(func, maxargs=3): + #~ if func in singleArgBuiltins: + #~ return lambda s,l,t: func(t) + #~ limit = 0 + #~ foundArity = False + #~ def wrapper(*args): + #~ nonlocal limit,foundArity + #~ while 1: + #~ try: + #~ ret = func(*args[limit:]) + #~ foundArity = True + #~ return ret + #~ except TypeError: + #~ if limit == maxargs or foundArity: + #~ raise + #~ limit += 1 + #~ continue + #~ return wrapper + +# this version is Python 2.x-3.x cross-compatible +'decorator to trim function calls to match the arity of the target' +def _trim_arity(func, maxargs=2): + if func in singleArgBuiltins: + return lambda s,l,t: func(t) + limit = [0] + foundArity = [False] + + # traceback return data structure changed in Py3.5 - normalize back to plain tuples + if system_version[:2] >= (3,5): + def extract_stack(limit=0): + # special handling for Python 3.5.0 - extra deep call stack by 1 + offset = -3 if system_version == (3,5,0) else -2 + frame_summary = traceback.extract_stack(limit=-offset+limit-1)[offset] + return [frame_summary[:2]] + def extract_tb(tb, limit=0): + frames = traceback.extract_tb(tb, limit=limit) + frame_summary = frames[-1] + return [frame_summary[:2]] + else: + extract_stack = traceback.extract_stack + extract_tb = traceback.extract_tb + + # synthesize what would be returned by traceback.extract_stack at the call to + # user's parse action 'func', so that we don't incur call penalty at parse time + + LINE_DIFF = 6 + # IF ANY CODE CHANGES, EVEN JUST COMMENTS OR BLANK LINES, BETWEEN THE NEXT LINE AND + # THE CALL TO FUNC INSIDE WRAPPER, LINE_DIFF MUST BE MODIFIED!!!! + this_line = extract_stack(limit=2)[-1] + pa_call_line_synth = (this_line[0], this_line[1]+LINE_DIFF) + + def wrapper(*args): + while 1: + try: + ret = func(*args[limit[0]:]) + foundArity[0] = True + return ret + except TypeError: + # re-raise TypeErrors if they did not come from our arity testing + if foundArity[0]: + raise + else: + try: + tb = sys.exc_info()[-1] + if not extract_tb(tb, limit=2)[-1][:2] == pa_call_line_synth: + raise + finally: + del tb + + if limit[0] <= maxargs: + limit[0] += 1 + continue + raise + + # copy func name to wrapper for sensible debug output + func_name = "<parse action>" + try: + func_name = getattr(func, '__name__', + getattr(func, '__class__').__name__) + except Exception: + func_name = str(func) + wrapper.__name__ = func_name + + return wrapper + +class ParserElement(object): + """Abstract base level parser element class.""" + DEFAULT_WHITE_CHARS = " \n\t\r" + verbose_stacktrace = False + + @staticmethod + def setDefaultWhitespaceChars( chars ): + r""" + Overrides the default whitespace chars + + Example:: + # default whitespace chars are space, <TAB> and newline + OneOrMore(Word(alphas)).parseString("abc def\nghi jkl") # -> ['abc', 'def', 'ghi', 'jkl'] + + # change to just treat newline as significant + ParserElement.setDefaultWhitespaceChars(" \t") + OneOrMore(Word(alphas)).parseString("abc def\nghi jkl") # -> ['abc', 'def'] + """ + ParserElement.DEFAULT_WHITE_CHARS = chars + + @staticmethod + def inlineLiteralsUsing(cls): + """ + Set class to be used for inclusion of string literals into a parser. + + Example:: + # default literal class used is Literal + integer = Word(nums) + date_str = integer("year") + '/' + integer("month") + '/' + integer("day") + + date_str.parseString("1999/12/31") # -> ['1999', '/', '12', '/', '31'] + + + # change to Suppress + ParserElement.inlineLiteralsUsing(Suppress) + date_str = integer("year") + '/' + integer("month") + '/' + integer("day") + + date_str.parseString("1999/12/31") # -> ['1999', '12', '31'] + """ + ParserElement._literalStringClass = cls + + def __init__( self, savelist=False ): + self.parseAction = list() + self.failAction = None + #~ self.name = "<unknown>" # don't define self.name, let subclasses try/except upcall + self.strRepr = None + self.resultsName = None + self.saveAsList = savelist + self.skipWhitespace = True + self.whiteChars = ParserElement.DEFAULT_WHITE_CHARS + self.copyDefaultWhiteChars = True + self.mayReturnEmpty = False # used when checking for left-recursion + self.keepTabs = False + self.ignoreExprs = list() + self.debug = False + self.streamlined = False + self.mayIndexError = True # used to optimize exception handling for subclasses that don't advance parse index + self.errmsg = "" + self.modalResults = True # used to mark results names as modal (report only last) or cumulative (list all) + self.debugActions = ( None, None, None ) #custom debug actions + self.re = None + self.callPreparse = True # used to avoid redundant calls to preParse + self.callDuringTry = False + + def copy( self ): + """ + Make a copy of this C{ParserElement}. Useful for defining different parse actions + for the same parsing pattern, using copies of the original parse element. + + Example:: + integer = Word(nums).setParseAction(lambda toks: int(toks[0])) + integerK = integer.copy().addParseAction(lambda toks: toks[0]*1024) + Suppress("K") + integerM = integer.copy().addParseAction(lambda toks: toks[0]*1024*1024) + Suppress("M") + + print(OneOrMore(integerK | integerM | integer).parseString("5K 100 640K 256M")) + prints:: + [5120, 100, 655360, 268435456] + Equivalent form of C{expr.copy()} is just C{expr()}:: + integerM = integer().addParseAction(lambda toks: toks[0]*1024*1024) + Suppress("M") + """ + cpy = copy.copy( self ) + cpy.parseAction = self.parseAction[:] + cpy.ignoreExprs = self.ignoreExprs[:] + if self.copyDefaultWhiteChars: + cpy.whiteChars = ParserElement.DEFAULT_WHITE_CHARS + return cpy + + def setName( self, name ): + """ + Define name for this expression, makes debugging and exception messages clearer. + + Example:: + Word(nums).parseString("ABC") # -> Exception: Expected W:(0123...) (at char 0), (line:1, col:1) + Word(nums).setName("integer").parseString("ABC") # -> Exception: Expected integer (at char 0), (line:1, col:1) + """ + self.name = name + self.errmsg = "Expected " + self.name + if hasattr(self,"exception"): + self.exception.msg = self.errmsg + return self + + def setResultsName( self, name, listAllMatches=False ): + """ + Define name for referencing matching tokens as a nested attribute + of the returned parse results. + NOTE: this returns a *copy* of the original C{ParserElement} object; + this is so that the client can define a basic element, such as an + integer, and reference it in multiple places with different names. + + You can also set results names using the abbreviated syntax, + C{expr("name")} in place of C{expr.setResultsName("name")} - + see L{I{__call__}<__call__>}. + + Example:: + date_str = (integer.setResultsName("year") + '/' + + integer.setResultsName("month") + '/' + + integer.setResultsName("day")) + + # equivalent form: + date_str = integer("year") + '/' + integer("month") + '/' + integer("day") + """ + newself = self.copy() + if name.endswith("*"): + name = name[:-1] + listAllMatches=True + newself.resultsName = name + newself.modalResults = not listAllMatches + return newself + + def setBreak(self,breakFlag = True): + """Method to invoke the Python pdb debugger when this element is + about to be parsed. Set C{breakFlag} to True to enable, False to + disable. + """ + if breakFlag: + _parseMethod = self._parse + def breaker(instring, loc, doActions=True, callPreParse=True): + import pdb + pdb.set_trace() + return _parseMethod( instring, loc, doActions, callPreParse ) + breaker._originalParseMethod = _parseMethod + self._parse = breaker + else: + if hasattr(self._parse,"_originalParseMethod"): + self._parse = self._parse._originalParseMethod + return self + + def setParseAction( self, *fns, **kwargs ): + """ + Define one or more actions to perform when successfully matching parse element definition. + Parse action fn is a callable method with 0-3 arguments, called as C{fn(s,loc,toks)}, + C{fn(loc,toks)}, C{fn(toks)}, or just C{fn()}, where: + - s = the original string being parsed (see note below) + - loc = the location of the matching substring + - toks = a list of the matched tokens, packaged as a C{L{ParseResults}} object + If the functions in fns modify the tokens, they can return them as the return + value from fn, and the modified list of tokens will replace the original. + Otherwise, fn does not need to return any value. + + Optional keyword arguments: + - callDuringTry = (default=C{False}) indicate if parse action should be run during lookaheads and alternate testing + + Note: the default parsing behavior is to expand tabs in the input string + before starting the parsing process. See L{I{parseString}<parseString>} for more information + on parsing strings containing C{<TAB>}s, and suggested methods to maintain a + consistent view of the parsed string, the parse location, and line and column + positions within the parsed string. + + Example:: + integer = Word(nums) + date_str = integer + '/' + integer + '/' + integer + + date_str.parseString("1999/12/31") # -> ['1999', '/', '12', '/', '31'] + + # use parse action to convert to ints at parse time + integer = Word(nums).setParseAction(lambda toks: int(toks[0])) + date_str = integer + '/' + integer + '/' + integer + + # note that integer fields are now ints, not strings + date_str.parseString("1999/12/31") # -> [1999, '/', 12, '/', 31] + """ + self.parseAction = list(map(_trim_arity, list(fns))) + self.callDuringTry = kwargs.get("callDuringTry", False) + return self + + def addParseAction( self, *fns, **kwargs ): + """ + Add one or more parse actions to expression's list of parse actions. See L{I{setParseAction}<setParseAction>}. + + See examples in L{I{copy}<copy>}. + """ + self.parseAction += list(map(_trim_arity, list(fns))) + self.callDuringTry = self.callDuringTry or kwargs.get("callDuringTry", False) + return self + + def addCondition(self, *fns, **kwargs): + """Add a boolean predicate function to expression's list of parse actions. See + L{I{setParseAction}<setParseAction>} for function call signatures. Unlike C{setParseAction}, + functions passed to C{addCondition} need to return boolean success/fail of the condition. + + Optional keyword arguments: + - message = define a custom message to be used in the raised exception + - fatal = if True, will raise ParseFatalException to stop parsing immediately; otherwise will raise ParseException + + Example:: + integer = Word(nums).setParseAction(lambda toks: int(toks[0])) + year_int = integer.copy() + year_int.addCondition(lambda toks: toks[0] >= 2000, message="Only support years 2000 and later") + date_str = year_int + '/' + integer + '/' + integer + + result = date_str.parseString("1999/12/31") # -> Exception: Only support years 2000 and later (at char 0), (line:1, col:1) + """ + msg = kwargs.get("message", "failed user-defined condition") + exc_type = ParseFatalException if kwargs.get("fatal", False) else ParseException + for fn in fns: + def pa(s,l,t): + if not bool(_trim_arity(fn)(s,l,t)): + raise exc_type(s,l,msg) + self.parseAction.append(pa) + self.callDuringTry = self.callDuringTry or kwargs.get("callDuringTry", False) + return self + + def setFailAction( self, fn ): + """Define action to perform if parsing fails at this expression. + Fail acton fn is a callable function that takes the arguments + C{fn(s,loc,expr,err)} where: + - s = string being parsed + - loc = location where expression match was attempted and failed + - expr = the parse expression that failed + - err = the exception thrown + The function returns no value. It may throw C{L{ParseFatalException}} + if it is desired to stop parsing immediately.""" + self.failAction = fn + return self + + def _skipIgnorables( self, instring, loc ): + exprsFound = True + while exprsFound: + exprsFound = False + for e in self.ignoreExprs: + try: + while 1: + loc,dummy = e._parse( instring, loc ) + exprsFound = True + except ParseException: + pass + return loc + + def preParse( self, instring, loc ): + if self.ignoreExprs: + loc = self._skipIgnorables( instring, loc ) + + if self.skipWhitespace: + wt = self.whiteChars + instrlen = len(instring) + while loc < instrlen and instring[loc] in wt: + loc += 1 + + return loc + + def parseImpl( self, instring, loc, doActions=True ): + return loc, [] + + def postParse( self, instring, loc, tokenlist ): + return tokenlist + + #~ @profile + def _parseNoCache( self, instring, loc, doActions=True, callPreParse=True ): + debugging = ( self.debug ) #and doActions ) + + if debugging or self.failAction: + #~ print ("Match",self,"at loc",loc,"(%d,%d)" % ( lineno(loc,instring), col(loc,instring) )) + if (self.debugActions[0] ): + self.debugActions[0]( instring, loc, self ) + if callPreParse and self.callPreparse: + preloc = self.preParse( instring, loc ) + else: + preloc = loc + tokensStart = preloc + try: + try: + loc,tokens = self.parseImpl( instring, preloc, doActions ) + except IndexError: + raise ParseException( instring, len(instring), self.errmsg, self ) + except ParseBaseException as err: + #~ print ("Exception raised:", err) + if self.debugActions[2]: + self.debugActions[2]( instring, tokensStart, self, err ) + if self.failAction: + self.failAction( instring, tokensStart, self, err ) + raise + else: + if callPreParse and self.callPreparse: + preloc = self.preParse( instring, loc ) + else: + preloc = loc + tokensStart = preloc + if self.mayIndexError or preloc >= len(instring): + try: + loc,tokens = self.parseImpl( instring, preloc, doActions ) + except IndexError: + raise ParseException( instring, len(instring), self.errmsg, self ) + else: + loc,tokens = self.parseImpl( instring, preloc, doActions ) + + tokens = self.postParse( instring, loc, tokens ) + + retTokens = ParseResults( tokens, self.resultsName, asList=self.saveAsList, modal=self.modalResults ) + if self.parseAction and (doActions or self.callDuringTry): + if debugging: + try: + for fn in self.parseAction: + tokens = fn( instring, tokensStart, retTokens ) + if tokens is not None: + retTokens = ParseResults( tokens, + self.resultsName, + asList=self.saveAsList and isinstance(tokens,(ParseResults,list)), + modal=self.modalResults ) + except ParseBaseException as err: + #~ print "Exception raised in user parse action:", err + if (self.debugActions[2] ): + self.debugActions[2]( instring, tokensStart, self, err ) + raise + else: + for fn in self.parseAction: + tokens = fn( instring, tokensStart, retTokens ) + if tokens is not None: + retTokens = ParseResults( tokens, + self.resultsName, + asList=self.saveAsList and isinstance(tokens,(ParseResults,list)), + modal=self.modalResults ) + if debugging: + #~ print ("Matched",self,"->",retTokens.asList()) + if (self.debugActions[1] ): + self.debugActions[1]( instring, tokensStart, loc, self, retTokens ) + + return loc, retTokens + + def tryParse( self, instring, loc ): + try: + return self._parse( instring, loc, doActions=False )[0] + except ParseFatalException: + raise ParseException( instring, loc, self.errmsg, self) + + def canParseNext(self, instring, loc): + try: + self.tryParse(instring, loc) + except (ParseException, IndexError): + return False + else: + return True + + class _UnboundedCache(object): + def __init__(self): + cache = {} + self.not_in_cache = not_in_cache = object() + + def get(self, key): + return cache.get(key, not_in_cache) + + def set(self, key, value): + cache[key] = value + + def clear(self): + cache.clear() + + def cache_len(self): + return len(cache) + + self.get = types.MethodType(get, self) + self.set = types.MethodType(set, self) + self.clear = types.MethodType(clear, self) + self.__len__ = types.MethodType(cache_len, self) + + if _OrderedDict is not None: + class _FifoCache(object): + def __init__(self, size): + self.not_in_cache = not_in_cache = object() + + cache = _OrderedDict() + + def get(self, key): + return cache.get(key, not_in_cache) + + def set(self, key, value): + cache[key] = value + while len(cache) > size: + try: + cache.popitem(False) + except KeyError: + pass + + def clear(self): + cache.clear() + + def cache_len(self): + return len(cache) + + self.get = types.MethodType(get, self) + self.set = types.MethodType(set, self) + self.clear = types.MethodType(clear, self) + self.__len__ = types.MethodType(cache_len, self) + + else: + class _FifoCache(object): + def __init__(self, size): + self.not_in_cache = not_in_cache = object() + + cache = {} + key_fifo = collections.deque([], size) + + def get(self, key): + return cache.get(key, not_in_cache) + + def set(self, key, value): + cache[key] = value + while len(key_fifo) > size: + cache.pop(key_fifo.popleft(), None) + key_fifo.append(key) + + def clear(self): + cache.clear() + key_fifo.clear() + + def cache_len(self): + return len(cache) + + self.get = types.MethodType(get, self) + self.set = types.MethodType(set, self) + self.clear = types.MethodType(clear, self) + self.__len__ = types.MethodType(cache_len, self) + + # argument cache for optimizing repeated calls when backtracking through recursive expressions + packrat_cache = {} # this is set later by enabledPackrat(); this is here so that resetCache() doesn't fail + packrat_cache_lock = RLock() + packrat_cache_stats = [0, 0] + + # this method gets repeatedly called during backtracking with the same arguments - + # we can cache these arguments and save ourselves the trouble of re-parsing the contained expression + def _parseCache( self, instring, loc, doActions=True, callPreParse=True ): + HIT, MISS = 0, 1 + lookup = (self, instring, loc, callPreParse, doActions) + with ParserElement.packrat_cache_lock: + cache = ParserElement.packrat_cache + value = cache.get(lookup) + if value is cache.not_in_cache: + ParserElement.packrat_cache_stats[MISS] += 1 + try: + value = self._parseNoCache(instring, loc, doActions, callPreParse) + except ParseBaseException as pe: + # cache a copy of the exception, without the traceback + cache.set(lookup, pe.__class__(*pe.args)) + raise + else: + cache.set(lookup, (value[0], value[1].copy())) + return value + else: + ParserElement.packrat_cache_stats[HIT] += 1 + if isinstance(value, Exception): + raise value + return (value[0], value[1].copy()) + + _parse = _parseNoCache + + @staticmethod + def resetCache(): + ParserElement.packrat_cache.clear() + ParserElement.packrat_cache_stats[:] = [0] * len(ParserElement.packrat_cache_stats) + + _packratEnabled = False + @staticmethod + def enablePackrat(cache_size_limit=128): + """Enables "packrat" parsing, which adds memoizing to the parsing logic. + Repeated parse attempts at the same string location (which happens + often in many complex grammars) can immediately return a cached value, + instead of re-executing parsing/validating code. Memoizing is done of + both valid results and parsing exceptions. + + Parameters: + - cache_size_limit - (default=C{128}) - if an integer value is provided + will limit the size of the packrat cache; if None is passed, then + the cache size will be unbounded; if 0 is passed, the cache will + be effectively disabled. + + This speedup may break existing programs that use parse actions that + have side-effects. For this reason, packrat parsing is disabled when + you first import pyparsing. To activate the packrat feature, your + program must call the class method C{ParserElement.enablePackrat()}. If + your program uses C{psyco} to "compile as you go", you must call + C{enablePackrat} before calling C{psyco.full()}. If you do not do this, + Python will crash. For best results, call C{enablePackrat()} immediately + after importing pyparsing. + + Example:: + import pyparsing + pyparsing.ParserElement.enablePackrat() + """ + if not ParserElement._packratEnabled: + ParserElement._packratEnabled = True + if cache_size_limit is None: + ParserElement.packrat_cache = ParserElement._UnboundedCache() + else: + ParserElement.packrat_cache = ParserElement._FifoCache(cache_size_limit) + ParserElement._parse = ParserElement._parseCache + + def parseString( self, instring, parseAll=False ): + """ + Execute the parse expression with the given string. + This is the main interface to the client code, once the complete + expression has been built. + + If you want the grammar to require that the entire input string be + successfully parsed, then set C{parseAll} to True (equivalent to ending + the grammar with C{L{StringEnd()}}). + + Note: C{parseString} implicitly calls C{expandtabs()} on the input string, + in order to report proper column numbers in parse actions. + If the input string contains tabs and + the grammar uses parse actions that use the C{loc} argument to index into the + string being parsed, you can ensure you have a consistent view of the input + string by: + - calling C{parseWithTabs} on your grammar before calling C{parseString} + (see L{I{parseWithTabs}<parseWithTabs>}) + - define your parse action using the full C{(s,loc,toks)} signature, and + reference the input string using the parse action's C{s} argument + - explictly expand the tabs in your input string before calling + C{parseString} + + Example:: + Word('a').parseString('aaaaabaaa') # -> ['aaaaa'] + Word('a').parseString('aaaaabaaa', parseAll=True) # -> Exception: Expected end of text + """ + ParserElement.resetCache() + if not self.streamlined: + self.streamline() + #~ self.saveAsList = True + for e in self.ignoreExprs: + e.streamline() + if not self.keepTabs: + instring = instring.expandtabs() + try: + loc, tokens = self._parse( instring, 0 ) + if parseAll: + loc = self.preParse( instring, loc ) + se = Empty() + StringEnd() + se._parse( instring, loc ) + except ParseBaseException as exc: + if ParserElement.verbose_stacktrace: + raise + else: + # catch and re-raise exception from here, clears out pyparsing internal stack trace + raise exc + else: + return tokens + + def scanString( self, instring, maxMatches=_MAX_INT, overlap=False ): + """ + Scan the input string for expression matches. Each match will return the + matching tokens, start location, and end location. May be called with optional + C{maxMatches} argument, to clip scanning after 'n' matches are found. If + C{overlap} is specified, then overlapping matches will be reported. + + Note that the start and end locations are reported relative to the string + being parsed. See L{I{parseString}<parseString>} for more information on parsing + strings with embedded tabs. + + Example:: + source = "sldjf123lsdjjkf345sldkjf879lkjsfd987" + print(source) + for tokens,start,end in Word(alphas).scanString(source): + print(' '*start + '^'*(end-start)) + print(' '*start + tokens[0]) + + prints:: + + sldjf123lsdjjkf345sldkjf879lkjsfd987 + ^^^^^ + sldjf + ^^^^^^^ + lsdjjkf + ^^^^^^ + sldkjf + ^^^^^^ + lkjsfd + """ + if not self.streamlined: + self.streamline() + for e in self.ignoreExprs: + e.streamline() + + if not self.keepTabs: + instring = _ustr(instring).expandtabs() + instrlen = len(instring) + loc = 0 + preparseFn = self.preParse + parseFn = self._parse + ParserElement.resetCache() + matches = 0 + try: + while loc <= instrlen and matches < maxMatches: + try: + preloc = preparseFn( instring, loc ) + nextLoc,tokens = parseFn( instring, preloc, callPreParse=False ) + except ParseException: + loc = preloc+1 + else: + if nextLoc > loc: + matches += 1 + yield tokens, preloc, nextLoc + if overlap: + nextloc = preparseFn( instring, loc ) + if nextloc > loc: + loc = nextLoc + else: + loc += 1 + else: + loc = nextLoc + else: + loc = preloc+1 + except ParseBaseException as exc: + if ParserElement.verbose_stacktrace: + raise + else: + # catch and re-raise exception from here, clears out pyparsing internal stack trace + raise exc + + def transformString( self, instring ): + """ + Extension to C{L{scanString}}, to modify matching text with modified tokens that may + be returned from a parse action. To use C{transformString}, define a grammar and + attach a parse action to it that modifies the returned token list. + Invoking C{transformString()} on a target string will then scan for matches, + and replace the matched text patterns according to the logic in the parse + action. C{transformString()} returns the resulting transformed string. + + Example:: + wd = Word(alphas) + wd.setParseAction(lambda toks: toks[0].title()) + + print(wd.transformString("now is the winter of our discontent made glorious summer by this sun of york.")) + Prints:: + Now Is The Winter Of Our Discontent Made Glorious Summer By This Sun Of York. + """ + out = [] + lastE = 0 + # force preservation of <TAB>s, to minimize unwanted transformation of string, and to + # keep string locs straight between transformString and scanString + self.keepTabs = True + try: + for t,s,e in self.scanString( instring ): + out.append( instring[lastE:s] ) + if t: + if isinstance(t,ParseResults): + out += t.asList() + elif isinstance(t,list): + out += t + else: + out.append(t) + lastE = e + out.append(instring[lastE:]) + out = [o for o in out if o] + return "".join(map(_ustr,_flatten(out))) + except ParseBaseException as exc: + if ParserElement.verbose_stacktrace: + raise + else: + # catch and re-raise exception from here, clears out pyparsing internal stack trace + raise exc + + def searchString( self, instring, maxMatches=_MAX_INT ): + """ + Another extension to C{L{scanString}}, simplifying the access to the tokens found + to match the given parse expression. May be called with optional + C{maxMatches} argument, to clip searching after 'n' matches are found. + + Example:: + # a capitalized word starts with an uppercase letter, followed by zero or more lowercase letters + cap_word = Word(alphas.upper(), alphas.lower()) + + print(cap_word.searchString("More than Iron, more than Lead, more than Gold I need Electricity")) + + # the sum() builtin can be used to merge results into a single ParseResults object + print(sum(cap_word.searchString("More than Iron, more than Lead, more than Gold I need Electricity"))) + prints:: + [['More'], ['Iron'], ['Lead'], ['Gold'], ['I'], ['Electricity']] + ['More', 'Iron', 'Lead', 'Gold', 'I', 'Electricity'] + """ + try: + return ParseResults([ t for t,s,e in self.scanString( instring, maxMatches ) ]) + except ParseBaseException as exc: + if ParserElement.verbose_stacktrace: + raise + else: + # catch and re-raise exception from here, clears out pyparsing internal stack trace + raise exc + + def split(self, instring, maxsplit=_MAX_INT, includeSeparators=False): + """ + Generator method to split a string using the given expression as a separator. + May be called with optional C{maxsplit} argument, to limit the number of splits; + and the optional C{includeSeparators} argument (default=C{False}), if the separating + matching text should be included in the split results. + + Example:: + punc = oneOf(list(".,;:/-!?")) + print(list(punc.split("This, this?, this sentence, is badly punctuated!"))) + prints:: + ['This', ' this', '', ' this sentence', ' is badly punctuated', ''] + """ + splits = 0 + last = 0 + for t,s,e in self.scanString(instring, maxMatches=maxsplit): + yield instring[last:s] + if includeSeparators: + yield t[0] + last = e + yield instring[last:] + + def __add__(self, other ): + """ + Implementation of + operator - returns C{L{And}}. Adding strings to a ParserElement + converts them to L{Literal}s by default. + + Example:: + greet = Word(alphas) + "," + Word(alphas) + "!" + hello = "Hello, World!" + print (hello, "->", greet.parseString(hello)) + Prints:: + Hello, World! -> ['Hello', ',', 'World', '!'] + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return And( [ self, other ] ) + + def __radd__(self, other ): + """ + Implementation of + operator when left operand is not a C{L{ParserElement}} + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return other + self + + def __sub__(self, other): + """ + Implementation of - operator, returns C{L{And}} with error stop + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return self + And._ErrorStop() + other + + def __rsub__(self, other ): + """ + Implementation of - operator when left operand is not a C{L{ParserElement}} + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return other - self + + def __mul__(self,other): + """ + Implementation of * operator, allows use of C{expr * 3} in place of + C{expr + expr + expr}. Expressions may also me multiplied by a 2-integer + tuple, similar to C{{min,max}} multipliers in regular expressions. Tuples + may also include C{None} as in: + - C{expr*(n,None)} or C{expr*(n,)} is equivalent + to C{expr*n + L{ZeroOrMore}(expr)} + (read as "at least n instances of C{expr}") + - C{expr*(None,n)} is equivalent to C{expr*(0,n)} + (read as "0 to n instances of C{expr}") + - C{expr*(None,None)} is equivalent to C{L{ZeroOrMore}(expr)} + - C{expr*(1,None)} is equivalent to C{L{OneOrMore}(expr)} + + Note that C{expr*(None,n)} does not raise an exception if + more than n exprs exist in the input stream; that is, + C{expr*(None,n)} does not enforce a maximum number of expr + occurrences. If this behavior is desired, then write + C{expr*(None,n) + ~expr} + """ + if isinstance(other,int): + minElements, optElements = other,0 + elif isinstance(other,tuple): + other = (other + (None, None))[:2] + if other[0] is None: + other = (0, other[1]) + if isinstance(other[0],int) and other[1] is None: + if other[0] == 0: + return ZeroOrMore(self) + if other[0] == 1: + return OneOrMore(self) + else: + return self*other[0] + ZeroOrMore(self) + elif isinstance(other[0],int) and isinstance(other[1],int): + minElements, optElements = other + optElements -= minElements + else: + raise TypeError("cannot multiply 'ParserElement' and ('%s','%s') objects", type(other[0]),type(other[1])) + else: + raise TypeError("cannot multiply 'ParserElement' and '%s' objects", type(other)) + + if minElements < 0: + raise ValueError("cannot multiply ParserElement by negative value") + if optElements < 0: + raise ValueError("second tuple value must be greater or equal to first tuple value") + if minElements == optElements == 0: + raise ValueError("cannot multiply ParserElement by 0 or (0,0)") + + if (optElements): + def makeOptionalList(n): + if n>1: + return Optional(self + makeOptionalList(n-1)) + else: + return Optional(self) + if minElements: + if minElements == 1: + ret = self + makeOptionalList(optElements) + else: + ret = And([self]*minElements) + makeOptionalList(optElements) + else: + ret = makeOptionalList(optElements) + else: + if minElements == 1: + ret = self + else: + ret = And([self]*minElements) + return ret + + def __rmul__(self, other): + return self.__mul__(other) + + def __or__(self, other ): + """ + Implementation of | operator - returns C{L{MatchFirst}} + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return MatchFirst( [ self, other ] ) + + def __ror__(self, other ): + """ + Implementation of | operator when left operand is not a C{L{ParserElement}} + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return other | self + + def __xor__(self, other ): + """ + Implementation of ^ operator - returns C{L{Or}} + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return Or( [ self, other ] ) + + def __rxor__(self, other ): + """ + Implementation of ^ operator when left operand is not a C{L{ParserElement}} + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return other ^ self + + def __and__(self, other ): + """ + Implementation of & operator - returns C{L{Each}} + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return Each( [ self, other ] ) + + def __rand__(self, other ): + """ + Implementation of & operator when left operand is not a C{L{ParserElement}} + """ + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return other & self + + def __invert__( self ): + """ + Implementation of ~ operator - returns C{L{NotAny}} + """ + return NotAny( self ) + + def __call__(self, name=None): + """ + Shortcut for C{L{setResultsName}}, with C{listAllMatches=False}. + + If C{name} is given with a trailing C{'*'} character, then C{listAllMatches} will be + passed as C{True}. + + If C{name} is omitted, same as calling C{L{copy}}. + + Example:: + # these are equivalent + userdata = Word(alphas).setResultsName("name") + Word(nums+"-").setResultsName("socsecno") + userdata = Word(alphas)("name") + Word(nums+"-")("socsecno") + """ + if name is not None: + return self.setResultsName(name) + else: + return self.copy() + + def suppress( self ): + """ + Suppresses the output of this C{ParserElement}; useful to keep punctuation from + cluttering up returned output. + """ + return Suppress( self ) + + def leaveWhitespace( self ): + """ + Disables the skipping of whitespace before matching the characters in the + C{ParserElement}'s defined pattern. This is normally only used internally by + the pyparsing module, but may be needed in some whitespace-sensitive grammars. + """ + self.skipWhitespace = False + return self + + def setWhitespaceChars( self, chars ): + """ + Overrides the default whitespace chars + """ + self.skipWhitespace = True + self.whiteChars = chars + self.copyDefaultWhiteChars = False + return self + + def parseWithTabs( self ): + """ + Overrides default behavior to expand C{<TAB>}s to spaces before parsing the input string. + Must be called before C{parseString} when the input grammar contains elements that + match C{<TAB>} characters. + """ + self.keepTabs = True + return self + + def ignore( self, other ): + """ + Define expression to be ignored (e.g., comments) while doing pattern + matching; may be called repeatedly, to define multiple comment or other + ignorable patterns. + + Example:: + patt = OneOrMore(Word(alphas)) + patt.parseString('ablaj /* comment */ lskjd') # -> ['ablaj'] + + patt.ignore(cStyleComment) + patt.parseString('ablaj /* comment */ lskjd') # -> ['ablaj', 'lskjd'] + """ + if isinstance(other, basestring): + other = Suppress(other) + + if isinstance( other, Suppress ): + if other not in self.ignoreExprs: + self.ignoreExprs.append(other) + else: + self.ignoreExprs.append( Suppress( other.copy() ) ) + return self + + def setDebugActions( self, startAction, successAction, exceptionAction ): + """ + Enable display of debugging messages while doing pattern matching. + """ + self.debugActions = (startAction or _defaultStartDebugAction, + successAction or _defaultSuccessDebugAction, + exceptionAction or _defaultExceptionDebugAction) + self.debug = True + return self + + def setDebug( self, flag=True ): + """ + Enable display of debugging messages while doing pattern matching. + Set C{flag} to True to enable, False to disable. + + Example:: + wd = Word(alphas).setName("alphaword") + integer = Word(nums).setName("numword") + term = wd | integer + + # turn on debugging for wd + wd.setDebug() + + OneOrMore(term).parseString("abc 123 xyz 890") + + prints:: + Match alphaword at loc 0(1,1) + Matched alphaword -> ['abc'] + Match alphaword at loc 3(1,4) + Exception raised:Expected alphaword (at char 4), (line:1, col:5) + Match alphaword at loc 7(1,8) + Matched alphaword -> ['xyz'] + Match alphaword at loc 11(1,12) + Exception raised:Expected alphaword (at char 12), (line:1, col:13) + Match alphaword at loc 15(1,16) + Exception raised:Expected alphaword (at char 15), (line:1, col:16) + + The output shown is that produced by the default debug actions - custom debug actions can be + specified using L{setDebugActions}. Prior to attempting + to match the C{wd} expression, the debugging message C{"Match <exprname> at loc <n>(<line>,<col>)"} + is shown. Then if the parse succeeds, a C{"Matched"} message is shown, or an C{"Exception raised"} + message is shown. Also note the use of L{setName} to assign a human-readable name to the expression, + which makes debugging and exception messages easier to understand - for instance, the default + name created for the C{Word} expression without calling C{setName} is C{"W:(ABCD...)"}. + """ + if flag: + self.setDebugActions( _defaultStartDebugAction, _defaultSuccessDebugAction, _defaultExceptionDebugAction ) + else: + self.debug = False + return self + + def __str__( self ): + return self.name + + def __repr__( self ): + return _ustr(self) + + def streamline( self ): + self.streamlined = True + self.strRepr = None + return self + + def checkRecursion( self, parseElementList ): + pass + + def validate( self, validateTrace=[] ): + """ + Check defined expressions for valid structure, check for infinite recursive definitions. + """ + self.checkRecursion( [] ) + + def parseFile( self, file_or_filename, parseAll=False ): + """ + Execute the parse expression on the given file or filename. + If a filename is specified (instead of a file object), + the entire file is opened, read, and closed before parsing. + """ + try: + file_contents = file_or_filename.read() + except AttributeError: + with open(file_or_filename, "r") as f: + file_contents = f.read() + try: + return self.parseString(file_contents, parseAll) + except ParseBaseException as exc: + if ParserElement.verbose_stacktrace: + raise + else: + # catch and re-raise exception from here, clears out pyparsing internal stack trace + raise exc + + def __eq__(self,other): + if isinstance(other, ParserElement): + return self is other or vars(self) == vars(other) + elif isinstance(other, basestring): + return self.matches(other) + else: + return super(ParserElement,self)==other + + def __ne__(self,other): + return not (self == other) + + def __hash__(self): + return hash(id(self)) + + def __req__(self,other): + return self == other + + def __rne__(self,other): + return not (self == other) + + def matches(self, testString, parseAll=True): + """ + Method for quick testing of a parser against a test string. Good for simple + inline microtests of sub expressions while building up larger parser. + + Parameters: + - testString - to test against this expression for a match + - parseAll - (default=C{True}) - flag to pass to C{L{parseString}} when running tests + + Example:: + expr = Word(nums) + assert expr.matches("100") + """ + try: + self.parseString(_ustr(testString), parseAll=parseAll) + return True + except ParseBaseException: + return False + + def runTests(self, tests, parseAll=True, comment='#', fullDump=True, printResults=True, failureTests=False): + """ + Execute the parse expression on a series of test strings, showing each + test, the parsed results or where the parse failed. Quick and easy way to + run a parse expression against a list of sample strings. + + Parameters: + - tests - a list of separate test strings, or a multiline string of test strings + - parseAll - (default=C{True}) - flag to pass to C{L{parseString}} when running tests + - comment - (default=C{'#'}) - expression for indicating embedded comments in the test + string; pass None to disable comment filtering + - fullDump - (default=C{True}) - dump results as list followed by results names in nested outline; + if False, only dump nested list + - printResults - (default=C{True}) prints test output to stdout + - failureTests - (default=C{False}) indicates if these tests are expected to fail parsing + + Returns: a (success, results) tuple, where success indicates that all tests succeeded + (or failed if C{failureTests} is True), and the results contain a list of lines of each + test's output + + Example:: + number_expr = pyparsing_common.number.copy() + + result = number_expr.runTests(''' + # unsigned integer + 100 + # negative integer + -100 + # float with scientific notation + 6.02e23 + # integer with scientific notation + 1e-12 + ''') + print("Success" if result[0] else "Failed!") + + result = number_expr.runTests(''' + # stray character + 100Z + # missing leading digit before '.' + -.100 + # too many '.' + 3.14.159 + ''', failureTests=True) + print("Success" if result[0] else "Failed!") + prints:: + # unsigned integer + 100 + [100] + + # negative integer + -100 + [-100] + + # float with scientific notation + 6.02e23 + [6.02e+23] + + # integer with scientific notation + 1e-12 + [1e-12] + + Success + + # stray character + 100Z + ^ + FAIL: Expected end of text (at char 3), (line:1, col:4) + + # missing leading digit before '.' + -.100 + ^ + FAIL: Expected {real number with scientific notation | real number | signed integer} (at char 0), (line:1, col:1) + + # too many '.' + 3.14.159 + ^ + FAIL: Expected end of text (at char 4), (line:1, col:5) + + Success + + Each test string must be on a single line. If you want to test a string that spans multiple + lines, create a test like this:: + + expr.runTest(r"this is a test\\n of strings that spans \\n 3 lines") + + (Note that this is a raw string literal, you must include the leading 'r'.) + """ + if isinstance(tests, basestring): + tests = list(map(str.strip, tests.rstrip().splitlines())) + if isinstance(comment, basestring): + comment = Literal(comment) + allResults = [] + comments = [] + success = True + for t in tests: + if comment is not None and comment.matches(t, False) or comments and not t: + comments.append(t) + continue + if not t: + continue + out = ['\n'.join(comments), t] + comments = [] + try: + t = t.replace(r'\n','\n') + result = self.parseString(t, parseAll=parseAll) + out.append(result.dump(full=fullDump)) + success = success and not failureTests + except ParseBaseException as pe: + fatal = "(FATAL)" if isinstance(pe, ParseFatalException) else "" + if '\n' in t: + out.append(line(pe.loc, t)) + out.append(' '*(col(pe.loc,t)-1) + '^' + fatal) + else: + out.append(' '*pe.loc + '^' + fatal) + out.append("FAIL: " + str(pe)) + success = success and failureTests + result = pe + except Exception as exc: + out.append("FAIL-EXCEPTION: " + str(exc)) + success = success and failureTests + result = exc + + if printResults: + if fullDump: + out.append('') + print('\n'.join(out)) + + allResults.append((t, result)) + + return success, allResults + + +class Token(ParserElement): + """ + Abstract C{ParserElement} subclass, for defining atomic matching patterns. + """ + def __init__( self ): + super(Token,self).__init__( savelist=False ) + + +class Empty(Token): + """ + An empty token, will always match. + """ + def __init__( self ): + super(Empty,self).__init__() + self.name = "Empty" + self.mayReturnEmpty = True + self.mayIndexError = False + + +class NoMatch(Token): + """ + A token that will never match. + """ + def __init__( self ): + super(NoMatch,self).__init__() + self.name = "NoMatch" + self.mayReturnEmpty = True + self.mayIndexError = False + self.errmsg = "Unmatchable token" + + def parseImpl( self, instring, loc, doActions=True ): + raise ParseException(instring, loc, self.errmsg, self) + + +class Literal(Token): + """ + Token to exactly match a specified string. + + Example:: + Literal('blah').parseString('blah') # -> ['blah'] + Literal('blah').parseString('blahfooblah') # -> ['blah'] + Literal('blah').parseString('bla') # -> Exception: Expected "blah" + + For case-insensitive matching, use L{CaselessLiteral}. + + For keyword matching (force word break before and after the matched string), + use L{Keyword} or L{CaselessKeyword}. + """ + def __init__( self, matchString ): + super(Literal,self).__init__() + self.match = matchString + self.matchLen = len(matchString) + try: + self.firstMatchChar = matchString[0] + except IndexError: + warnings.warn("null string passed to Literal; use Empty() instead", + SyntaxWarning, stacklevel=2) + self.__class__ = Empty + self.name = '"%s"' % _ustr(self.match) + self.errmsg = "Expected " + self.name + self.mayReturnEmpty = False + self.mayIndexError = False + + # Performance tuning: this routine gets called a *lot* + # if this is a single character match string and the first character matches, + # short-circuit as quickly as possible, and avoid calling startswith + #~ @profile + def parseImpl( self, instring, loc, doActions=True ): + if (instring[loc] == self.firstMatchChar and + (self.matchLen==1 or instring.startswith(self.match,loc)) ): + return loc+self.matchLen, self.match + raise ParseException(instring, loc, self.errmsg, self) +_L = Literal +ParserElement._literalStringClass = Literal + +class Keyword(Token): + """ + Token to exactly match a specified string as a keyword, that is, it must be + immediately followed by a non-keyword character. Compare with C{L{Literal}}: + - C{Literal("if")} will match the leading C{'if'} in C{'ifAndOnlyIf'}. + - C{Keyword("if")} will not; it will only match the leading C{'if'} in C{'if x=1'}, or C{'if(y==2)'} + Accepts two optional constructor arguments in addition to the keyword string: + - C{identChars} is a string of characters that would be valid identifier characters, + defaulting to all alphanumerics + "_" and "$" + - C{caseless} allows case-insensitive matching, default is C{False}. + + Example:: + Keyword("start").parseString("start") # -> ['start'] + Keyword("start").parseString("starting") # -> Exception + + For case-insensitive matching, use L{CaselessKeyword}. + """ + DEFAULT_KEYWORD_CHARS = alphanums+"_$" + + def __init__( self, matchString, identChars=None, caseless=False ): + super(Keyword,self).__init__() + if identChars is None: + identChars = Keyword.DEFAULT_KEYWORD_CHARS + self.match = matchString + self.matchLen = len(matchString) + try: + self.firstMatchChar = matchString[0] + except IndexError: + warnings.warn("null string passed to Keyword; use Empty() instead", + SyntaxWarning, stacklevel=2) + self.name = '"%s"' % self.match + self.errmsg = "Expected " + self.name + self.mayReturnEmpty = False + self.mayIndexError = False + self.caseless = caseless + if caseless: + self.caselessmatch = matchString.upper() + identChars = identChars.upper() + self.identChars = set(identChars) + + def parseImpl( self, instring, loc, doActions=True ): + if self.caseless: + if ( (instring[ loc:loc+self.matchLen ].upper() == self.caselessmatch) and + (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen].upper() not in self.identChars) and + (loc == 0 or instring[loc-1].upper() not in self.identChars) ): + return loc+self.matchLen, self.match + else: + if (instring[loc] == self.firstMatchChar and + (self.matchLen==1 or instring.startswith(self.match,loc)) and + (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen] not in self.identChars) and + (loc == 0 or instring[loc-1] not in self.identChars) ): + return loc+self.matchLen, self.match + raise ParseException(instring, loc, self.errmsg, self) + + def copy(self): + c = super(Keyword,self).copy() + c.identChars = Keyword.DEFAULT_KEYWORD_CHARS + return c + + @staticmethod + def setDefaultKeywordChars( chars ): + """Overrides the default Keyword chars + """ + Keyword.DEFAULT_KEYWORD_CHARS = chars + +class CaselessLiteral(Literal): + """ + Token to match a specified string, ignoring case of letters. + Note: the matched results will always be in the case of the given + match string, NOT the case of the input text. + + Example:: + OneOrMore(CaselessLiteral("CMD")).parseString("cmd CMD Cmd10") # -> ['CMD', 'CMD', 'CMD'] + + (Contrast with example for L{CaselessKeyword}.) + """ + def __init__( self, matchString ): + super(CaselessLiteral,self).__init__( matchString.upper() ) + # Preserve the defining literal. + self.returnString = matchString + self.name = "'%s'" % self.returnString + self.errmsg = "Expected " + self.name + + def parseImpl( self, instring, loc, doActions=True ): + if instring[ loc:loc+self.matchLen ].upper() == self.match: + return loc+self.matchLen, self.returnString + raise ParseException(instring, loc, self.errmsg, self) + +class CaselessKeyword(Keyword): + """ + Caseless version of L{Keyword}. + + Example:: + OneOrMore(CaselessKeyword("CMD")).parseString("cmd CMD Cmd10") # -> ['CMD', 'CMD'] + + (Contrast with example for L{CaselessLiteral}.) + """ + def __init__( self, matchString, identChars=None ): + super(CaselessKeyword,self).__init__( matchString, identChars, caseless=True ) + + def parseImpl( self, instring, loc, doActions=True ): + if ( (instring[ loc:loc+self.matchLen ].upper() == self.caselessmatch) and + (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen].upper() not in self.identChars) ): + return loc+self.matchLen, self.match + raise ParseException(instring, loc, self.errmsg, self) + +class CloseMatch(Token): + """ + A variation on L{Literal} which matches "close" matches, that is, + strings with at most 'n' mismatching characters. C{CloseMatch} takes parameters: + - C{match_string} - string to be matched + - C{maxMismatches} - (C{default=1}) maximum number of mismatches allowed to count as a match + + The results from a successful parse will contain the matched text from the input string and the following named results: + - C{mismatches} - a list of the positions within the match_string where mismatches were found + - C{original} - the original match_string used to compare against the input string + + If C{mismatches} is an empty list, then the match was an exact match. + + Example:: + patt = CloseMatch("ATCATCGAATGGA") + patt.parseString("ATCATCGAAXGGA") # -> (['ATCATCGAAXGGA'], {'mismatches': [[9]], 'original': ['ATCATCGAATGGA']}) + patt.parseString("ATCAXCGAAXGGA") # -> Exception: Expected 'ATCATCGAATGGA' (with up to 1 mismatches) (at char 0), (line:1, col:1) + + # exact match + patt.parseString("ATCATCGAATGGA") # -> (['ATCATCGAATGGA'], {'mismatches': [[]], 'original': ['ATCATCGAATGGA']}) + + # close match allowing up to 2 mismatches + patt = CloseMatch("ATCATCGAATGGA", maxMismatches=2) + patt.parseString("ATCAXCGAAXGGA") # -> (['ATCAXCGAAXGGA'], {'mismatches': [[4, 9]], 'original': ['ATCATCGAATGGA']}) + """ + def __init__(self, match_string, maxMismatches=1): + super(CloseMatch,self).__init__() + self.name = match_string + self.match_string = match_string + self.maxMismatches = maxMismatches + self.errmsg = "Expected %r (with up to %d mismatches)" % (self.match_string, self.maxMismatches) + self.mayIndexError = False + self.mayReturnEmpty = False + + def parseImpl( self, instring, loc, doActions=True ): + start = loc + instrlen = len(instring) + maxloc = start + len(self.match_string) + + if maxloc <= instrlen: + match_string = self.match_string + match_stringloc = 0 + mismatches = [] + maxMismatches = self.maxMismatches + + for match_stringloc,s_m in enumerate(zip(instring[loc:maxloc], self.match_string)): + src,mat = s_m + if src != mat: + mismatches.append(match_stringloc) + if len(mismatches) > maxMismatches: + break + else: + loc = match_stringloc + 1 + results = ParseResults([instring[start:loc]]) + results['original'] = self.match_string + results['mismatches'] = mismatches + return loc, results + + raise ParseException(instring, loc, self.errmsg, self) + + +class Word(Token): + """ + Token for matching words composed of allowed character sets. + Defined with string containing all allowed initial characters, + an optional string containing allowed body characters (if omitted, + defaults to the initial character set), and an optional minimum, + maximum, and/or exact length. The default value for C{min} is 1 (a + minimum value < 1 is not valid); the default values for C{max} and C{exact} + are 0, meaning no maximum or exact length restriction. An optional + C{excludeChars} parameter can list characters that might be found in + the input C{bodyChars} string; useful to define a word of all printables + except for one or two characters, for instance. + + L{srange} is useful for defining custom character set strings for defining + C{Word} expressions, using range notation from regular expression character sets. + + A common mistake is to use C{Word} to match a specific literal string, as in + C{Word("Address")}. Remember that C{Word} uses the string argument to define + I{sets} of matchable characters. This expression would match "Add", "AAA", + "dAred", or any other word made up of the characters 'A', 'd', 'r', 'e', and 's'. + To match an exact literal string, use L{Literal} or L{Keyword}. + + pyparsing includes helper strings for building Words: + - L{alphas} + - L{nums} + - L{alphanums} + - L{hexnums} + - L{alphas8bit} (alphabetic characters in ASCII range 128-255 - accented, tilded, umlauted, etc.) + - L{punc8bit} (non-alphabetic characters in ASCII range 128-255 - currency, symbols, superscripts, diacriticals, etc.) + - L{printables} (any non-whitespace character) + + Example:: + # a word composed of digits + integer = Word(nums) # equivalent to Word("0123456789") or Word(srange("0-9")) + + # a word with a leading capital, and zero or more lowercase + capital_word = Word(alphas.upper(), alphas.lower()) + + # hostnames are alphanumeric, with leading alpha, and '-' + hostname = Word(alphas, alphanums+'-') + + # roman numeral (not a strict parser, accepts invalid mix of characters) + roman = Word("IVXLCDM") + + # any string of non-whitespace characters, except for ',' + csv_value = Word(printables, excludeChars=",") + """ + def __init__( self, initChars, bodyChars=None, min=1, max=0, exact=0, asKeyword=False, excludeChars=None ): + super(Word,self).__init__() + if excludeChars: + initChars = ''.join(c for c in initChars if c not in excludeChars) + if bodyChars: + bodyChars = ''.join(c for c in bodyChars if c not in excludeChars) + self.initCharsOrig = initChars + self.initChars = set(initChars) + if bodyChars : + self.bodyCharsOrig = bodyChars + self.bodyChars = set(bodyChars) + else: + self.bodyCharsOrig = initChars + self.bodyChars = set(initChars) + + self.maxSpecified = max > 0 + + if min < 1: + raise ValueError("cannot specify a minimum length < 1; use Optional(Word()) if zero-length word is permitted") + + self.minLen = min + + if max > 0: + self.maxLen = max + else: + self.maxLen = _MAX_INT + + if exact > 0: + self.maxLen = exact + self.minLen = exact + + self.name = _ustr(self) + self.errmsg = "Expected " + self.name + self.mayIndexError = False + self.asKeyword = asKeyword + + if ' ' not in self.initCharsOrig+self.bodyCharsOrig and (min==1 and max==0 and exact==0): + if self.bodyCharsOrig == self.initCharsOrig: + self.reString = "[%s]+" % _escapeRegexRangeChars(self.initCharsOrig) + elif len(self.initCharsOrig) == 1: + self.reString = "%s[%s]*" % \ + (re.escape(self.initCharsOrig), + _escapeRegexRangeChars(self.bodyCharsOrig),) + else: + self.reString = "[%s][%s]*" % \ + (_escapeRegexRangeChars(self.initCharsOrig), + _escapeRegexRangeChars(self.bodyCharsOrig),) + if self.asKeyword: + self.reString = r"\b"+self.reString+r"\b" + try: + self.re = re.compile( self.reString ) + except Exception: + self.re = None + + def parseImpl( self, instring, loc, doActions=True ): + if self.re: + result = self.re.match(instring,loc) + if not result: + raise ParseException(instring, loc, self.errmsg, self) + + loc = result.end() + return loc, result.group() + + if not(instring[ loc ] in self.initChars): + raise ParseException(instring, loc, self.errmsg, self) + + start = loc + loc += 1 + instrlen = len(instring) + bodychars = self.bodyChars + maxloc = start + self.maxLen + maxloc = min( maxloc, instrlen ) + while loc < maxloc and instring[loc] in bodychars: + loc += 1 + + throwException = False + if loc - start < self.minLen: + throwException = True + if self.maxSpecified and loc < instrlen and instring[loc] in bodychars: + throwException = True + if self.asKeyword: + if (start>0 and instring[start-1] in bodychars) or (loc<instrlen and instring[loc] in bodychars): + throwException = True + + if throwException: + raise ParseException(instring, loc, self.errmsg, self) + + return loc, instring[start:loc] + + def __str__( self ): + try: + return super(Word,self).__str__() + except Exception: + pass + + + if self.strRepr is None: + + def charsAsStr(s): + if len(s)>4: + return s[:4]+"..." + else: + return s + + if ( self.initCharsOrig != self.bodyCharsOrig ): + self.strRepr = "W:(%s,%s)" % ( charsAsStr(self.initCharsOrig), charsAsStr(self.bodyCharsOrig) ) + else: + self.strRepr = "W:(%s)" % charsAsStr(self.initCharsOrig) + + return self.strRepr + + +class Regex(Token): + r""" + Token for matching strings that match a given regular expression. + Defined with string specifying the regular expression in a form recognized by the inbuilt Python re module. + If the given regex contains named groups (defined using C{(?P<name>...)}), these will be preserved as + named parse results. + + Example:: + realnum = Regex(r"[+-]?\d+\.\d*") + date = Regex(r'(?P<year>\d{4})-(?P<month>\d\d?)-(?P<day>\d\d?)') + # ref: http://stackoverflow.com/questions/267399/how-do-you-match-only-valid-roman-numerals-with-a-regular-expression + roman = Regex(r"M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})") + """ + compiledREtype = type(re.compile("[A-Z]")) + def __init__( self, pattern, flags=0): + """The parameters C{pattern} and C{flags} are passed to the C{re.compile()} function as-is. See the Python C{re} module for an explanation of the acceptable patterns and flags.""" + super(Regex,self).__init__() + + if isinstance(pattern, basestring): + if not pattern: + warnings.warn("null string passed to Regex; use Empty() instead", + SyntaxWarning, stacklevel=2) + + self.pattern = pattern + self.flags = flags + + try: + self.re = re.compile(self.pattern, self.flags) + self.reString = self.pattern + except sre_constants.error: + warnings.warn("invalid pattern (%s) passed to Regex" % pattern, + SyntaxWarning, stacklevel=2) + raise + + elif isinstance(pattern, Regex.compiledREtype): + self.re = pattern + self.pattern = \ + self.reString = str(pattern) + self.flags = flags + + else: + raise ValueError("Regex may only be constructed with a string or a compiled RE object") + + self.name = _ustr(self) + self.errmsg = "Expected " + self.name + self.mayIndexError = False + self.mayReturnEmpty = True + + def parseImpl( self, instring, loc, doActions=True ): + result = self.re.match(instring,loc) + if not result: + raise ParseException(instring, loc, self.errmsg, self) + + loc = result.end() + d = result.groupdict() + ret = ParseResults(result.group()) + if d: + for k in d: + ret[k] = d[k] + return loc,ret + + def __str__( self ): + try: + return super(Regex,self).__str__() + except Exception: + pass + + if self.strRepr is None: + self.strRepr = "Re:(%s)" % repr(self.pattern) + + return self.strRepr + + +class QuotedString(Token): + r""" + Token for matching strings that are delimited by quoting characters. + + Defined with the following parameters: + - quoteChar - string of one or more characters defining the quote delimiting string + - escChar - character to escape quotes, typically backslash (default=C{None}) + - escQuote - special quote sequence to escape an embedded quote string (such as SQL's "" to escape an embedded ") (default=C{None}) + - multiline - boolean indicating whether quotes can span multiple lines (default=C{False}) + - unquoteResults - boolean indicating whether the matched text should be unquoted (default=C{True}) + - endQuoteChar - string of one or more characters defining the end of the quote delimited string (default=C{None} => same as quoteChar) + - convertWhitespaceEscapes - convert escaped whitespace (C{'\t'}, C{'\n'}, etc.) to actual whitespace (default=C{True}) + + Example:: + qs = QuotedString('"') + print(qs.searchString('lsjdf "This is the quote" sldjf')) + complex_qs = QuotedString('{{', endQuoteChar='}}') + print(complex_qs.searchString('lsjdf {{This is the "quote"}} sldjf')) + sql_qs = QuotedString('"', escQuote='""') + print(sql_qs.searchString('lsjdf "This is the quote with ""embedded"" quotes" sldjf')) + prints:: + [['This is the quote']] + [['This is the "quote"']] + [['This is the quote with "embedded" quotes']] + """ + def __init__( self, quoteChar, escChar=None, escQuote=None, multiline=False, unquoteResults=True, endQuoteChar=None, convertWhitespaceEscapes=True): + super(QuotedString,self).__init__() + + # remove white space from quote chars - wont work anyway + quoteChar = quoteChar.strip() + if not quoteChar: + warnings.warn("quoteChar cannot be the empty string",SyntaxWarning,stacklevel=2) + raise SyntaxError() + + if endQuoteChar is None: + endQuoteChar = quoteChar + else: + endQuoteChar = endQuoteChar.strip() + if not endQuoteChar: + warnings.warn("endQuoteChar cannot be the empty string",SyntaxWarning,stacklevel=2) + raise SyntaxError() + + self.quoteChar = quoteChar + self.quoteCharLen = len(quoteChar) + self.firstQuoteChar = quoteChar[0] + self.endQuoteChar = endQuoteChar + self.endQuoteCharLen = len(endQuoteChar) + self.escChar = escChar + self.escQuote = escQuote + self.unquoteResults = unquoteResults + self.convertWhitespaceEscapes = convertWhitespaceEscapes + + if multiline: + self.flags = re.MULTILINE | re.DOTALL + self.pattern = r'%s(?:[^%s%s]' % \ + ( re.escape(self.quoteChar), + _escapeRegexRangeChars(self.endQuoteChar[0]), + (escChar is not None and _escapeRegexRangeChars(escChar) or '') ) + else: + self.flags = 0 + self.pattern = r'%s(?:[^%s\n\r%s]' % \ + ( re.escape(self.quoteChar), + _escapeRegexRangeChars(self.endQuoteChar[0]), + (escChar is not None and _escapeRegexRangeChars(escChar) or '') ) + if len(self.endQuoteChar) > 1: + self.pattern += ( + '|(?:' + ')|(?:'.join("%s[^%s]" % (re.escape(self.endQuoteChar[:i]), + _escapeRegexRangeChars(self.endQuoteChar[i])) + for i in range(len(self.endQuoteChar)-1,0,-1)) + ')' + ) + if escQuote: + self.pattern += (r'|(?:%s)' % re.escape(escQuote)) + if escChar: + self.pattern += (r'|(?:%s.)' % re.escape(escChar)) + self.escCharReplacePattern = re.escape(self.escChar)+"(.)" + self.pattern += (r')*%s' % re.escape(self.endQuoteChar)) + + try: + self.re = re.compile(self.pattern, self.flags) + self.reString = self.pattern + except sre_constants.error: + warnings.warn("invalid pattern (%s) passed to Regex" % self.pattern, + SyntaxWarning, stacklevel=2) + raise + + self.name = _ustr(self) + self.errmsg = "Expected " + self.name + self.mayIndexError = False + self.mayReturnEmpty = True + + def parseImpl( self, instring, loc, doActions=True ): + result = instring[loc] == self.firstQuoteChar and self.re.match(instring,loc) or None + if not result: + raise ParseException(instring, loc, self.errmsg, self) + + loc = result.end() + ret = result.group() + + if self.unquoteResults: + + # strip off quotes + ret = ret[self.quoteCharLen:-self.endQuoteCharLen] + + if isinstance(ret,basestring): + # replace escaped whitespace + if '\\' in ret and self.convertWhitespaceEscapes: + ws_map = { + r'\t' : '\t', + r'\n' : '\n', + r'\f' : '\f', + r'\r' : '\r', + } + for wslit,wschar in ws_map.items(): + ret = ret.replace(wslit, wschar) + + # replace escaped characters + if self.escChar: + ret = re.sub(self.escCharReplacePattern, r"\g<1>", ret) + + # replace escaped quotes + if self.escQuote: + ret = ret.replace(self.escQuote, self.endQuoteChar) + + return loc, ret + + def __str__( self ): + try: + return super(QuotedString,self).__str__() + except Exception: + pass + + if self.strRepr is None: + self.strRepr = "quoted string, starting with %s ending with %s" % (self.quoteChar, self.endQuoteChar) + + return self.strRepr + + +class CharsNotIn(Token): + """ + Token for matching words composed of characters I{not} in a given set (will + include whitespace in matched characters if not listed in the provided exclusion set - see example). + Defined with string containing all disallowed characters, and an optional + minimum, maximum, and/or exact length. The default value for C{min} is 1 (a + minimum value < 1 is not valid); the default values for C{max} and C{exact} + are 0, meaning no maximum or exact length restriction. + + Example:: + # define a comma-separated-value as anything that is not a ',' + csv_value = CharsNotIn(',') + print(delimitedList(csv_value).parseString("dkls,lsdkjf,s12 34,@!#,213")) + prints:: + ['dkls', 'lsdkjf', 's12 34', '@!#', '213'] + """ + def __init__( self, notChars, min=1, max=0, exact=0 ): + super(CharsNotIn,self).__init__() + self.skipWhitespace = False + self.notChars = notChars + + if min < 1: + raise ValueError("cannot specify a minimum length < 1; use Optional(CharsNotIn()) if zero-length char group is permitted") + + self.minLen = min + + if max > 0: + self.maxLen = max + else: + self.maxLen = _MAX_INT + + if exact > 0: + self.maxLen = exact + self.minLen = exact + + self.name = _ustr(self) + self.errmsg = "Expected " + self.name + self.mayReturnEmpty = ( self.minLen == 0 ) + self.mayIndexError = False + + def parseImpl( self, instring, loc, doActions=True ): + if instring[loc] in self.notChars: + raise ParseException(instring, loc, self.errmsg, self) + + start = loc + loc += 1 + notchars = self.notChars + maxlen = min( start+self.maxLen, len(instring) ) + while loc < maxlen and \ + (instring[loc] not in notchars): + loc += 1 + + if loc - start < self.minLen: + raise ParseException(instring, loc, self.errmsg, self) + + return loc, instring[start:loc] + + def __str__( self ): + try: + return super(CharsNotIn, self).__str__() + except Exception: + pass + + if self.strRepr is None: + if len(self.notChars) > 4: + self.strRepr = "!W:(%s...)" % self.notChars[:4] + else: + self.strRepr = "!W:(%s)" % self.notChars + + return self.strRepr + +class White(Token): + """ + Special matching class for matching whitespace. Normally, whitespace is ignored + by pyparsing grammars. This class is included when some whitespace structures + are significant. Define with a string containing the whitespace characters to be + matched; default is C{" \\t\\r\\n"}. Also takes optional C{min}, C{max}, and C{exact} arguments, + as defined for the C{L{Word}} class. + """ + whiteStrs = { + " " : "<SPC>", + "\t": "<TAB>", + "\n": "<LF>", + "\r": "<CR>", + "\f": "<FF>", + } + def __init__(self, ws=" \t\r\n", min=1, max=0, exact=0): + super(White,self).__init__() + self.matchWhite = ws + self.setWhitespaceChars( "".join(c for c in self.whiteChars if c not in self.matchWhite) ) + #~ self.leaveWhitespace() + self.name = ("".join(White.whiteStrs[c] for c in self.matchWhite)) + self.mayReturnEmpty = True + self.errmsg = "Expected " + self.name + + self.minLen = min + + if max > 0: + self.maxLen = max + else: + self.maxLen = _MAX_INT + + if exact > 0: + self.maxLen = exact + self.minLen = exact + + def parseImpl( self, instring, loc, doActions=True ): + if not(instring[ loc ] in self.matchWhite): + raise ParseException(instring, loc, self.errmsg, self) + start = loc + loc += 1 + maxloc = start + self.maxLen + maxloc = min( maxloc, len(instring) ) + while loc < maxloc and instring[loc] in self.matchWhite: + loc += 1 + + if loc - start < self.minLen: + raise ParseException(instring, loc, self.errmsg, self) + + return loc, instring[start:loc] + + +class _PositionToken(Token): + def __init__( self ): + super(_PositionToken,self).__init__() + self.name=self.__class__.__name__ + self.mayReturnEmpty = True + self.mayIndexError = False + +class GoToColumn(_PositionToken): + """ + Token to advance to a specific column of input text; useful for tabular report scraping. + """ + def __init__( self, colno ): + super(GoToColumn,self).__init__() + self.col = colno + + def preParse( self, instring, loc ): + if col(loc,instring) != self.col: + instrlen = len(instring) + if self.ignoreExprs: + loc = self._skipIgnorables( instring, loc ) + while loc < instrlen and instring[loc].isspace() and col( loc, instring ) != self.col : + loc += 1 + return loc + + def parseImpl( self, instring, loc, doActions=True ): + thiscol = col( loc, instring ) + if thiscol > self.col: + raise ParseException( instring, loc, "Text not in expected column", self ) + newloc = loc + self.col - thiscol + ret = instring[ loc: newloc ] + return newloc, ret + + +class LineStart(_PositionToken): + """ + Matches if current position is at the beginning of a line within the parse string + + Example:: + + test = '''\ + AAA this line + AAA and this line + AAA but not this one + B AAA and definitely not this one + ''' + + for t in (LineStart() + 'AAA' + restOfLine).searchString(test): + print(t) + + Prints:: + ['AAA', ' this line'] + ['AAA', ' and this line'] + + """ + def __init__( self ): + super(LineStart,self).__init__() + self.errmsg = "Expected start of line" + + def parseImpl( self, instring, loc, doActions=True ): + if col(loc, instring) == 1: + return loc, [] + raise ParseException(instring, loc, self.errmsg, self) + +class LineEnd(_PositionToken): + """ + Matches if current position is at the end of a line within the parse string + """ + def __init__( self ): + super(LineEnd,self).__init__() + self.setWhitespaceChars( ParserElement.DEFAULT_WHITE_CHARS.replace("\n","") ) + self.errmsg = "Expected end of line" + + def parseImpl( self, instring, loc, doActions=True ): + if loc<len(instring): + if instring[loc] == "\n": + return loc+1, "\n" + else: + raise ParseException(instring, loc, self.errmsg, self) + elif loc == len(instring): + return loc+1, [] + else: + raise ParseException(instring, loc, self.errmsg, self) + +class StringStart(_PositionToken): + """ + Matches if current position is at the beginning of the parse string + """ + def __init__( self ): + super(StringStart,self).__init__() + self.errmsg = "Expected start of text" + + def parseImpl( self, instring, loc, doActions=True ): + if loc != 0: + # see if entire string up to here is just whitespace and ignoreables + if loc != self.preParse( instring, 0 ): + raise ParseException(instring, loc, self.errmsg, self) + return loc, [] + +class StringEnd(_PositionToken): + """ + Matches if current position is at the end of the parse string + """ + def __init__( self ): + super(StringEnd,self).__init__() + self.errmsg = "Expected end of text" + + def parseImpl( self, instring, loc, doActions=True ): + if loc < len(instring): + raise ParseException(instring, loc, self.errmsg, self) + elif loc == len(instring): + return loc+1, [] + elif loc > len(instring): + return loc, [] + else: + raise ParseException(instring, loc, self.errmsg, self) + +class WordStart(_PositionToken): + """ + Matches if the current position is at the beginning of a Word, and + is not preceded by any character in a given set of C{wordChars} + (default=C{printables}). To emulate the C{\b} behavior of regular expressions, + use C{WordStart(alphanums)}. C{WordStart} will also match at the beginning of + the string being parsed, or at the beginning of a line. + """ + def __init__(self, wordChars = printables): + super(WordStart,self).__init__() + self.wordChars = set(wordChars) + self.errmsg = "Not at the start of a word" + + def parseImpl(self, instring, loc, doActions=True ): + if loc != 0: + if (instring[loc-1] in self.wordChars or + instring[loc] not in self.wordChars): + raise ParseException(instring, loc, self.errmsg, self) + return loc, [] + +class WordEnd(_PositionToken): + """ + Matches if the current position is at the end of a Word, and + is not followed by any character in a given set of C{wordChars} + (default=C{printables}). To emulate the C{\b} behavior of regular expressions, + use C{WordEnd(alphanums)}. C{WordEnd} will also match at the end of + the string being parsed, or at the end of a line. + """ + def __init__(self, wordChars = printables): + super(WordEnd,self).__init__() + self.wordChars = set(wordChars) + self.skipWhitespace = False + self.errmsg = "Not at the end of a word" + + def parseImpl(self, instring, loc, doActions=True ): + instrlen = len(instring) + if instrlen>0 and loc<instrlen: + if (instring[loc] in self.wordChars or + instring[loc-1] not in self.wordChars): + raise ParseException(instring, loc, self.errmsg, self) + return loc, [] + + +class ParseExpression(ParserElement): + """ + Abstract subclass of ParserElement, for combining and post-processing parsed tokens. + """ + def __init__( self, exprs, savelist = False ): + super(ParseExpression,self).__init__(savelist) + if isinstance( exprs, _generatorType ): + exprs = list(exprs) + + if isinstance( exprs, basestring ): + self.exprs = [ ParserElement._literalStringClass( exprs ) ] + elif isinstance( exprs, Iterable ): + exprs = list(exprs) + # if sequence of strings provided, wrap with Literal + if all(isinstance(expr, basestring) for expr in exprs): + exprs = map(ParserElement._literalStringClass, exprs) + self.exprs = list(exprs) + else: + try: + self.exprs = list( exprs ) + except TypeError: + self.exprs = [ exprs ] + self.callPreparse = False + + def __getitem__( self, i ): + return self.exprs[i] + + def append( self, other ): + self.exprs.append( other ) + self.strRepr = None + return self + + def leaveWhitespace( self ): + """Extends C{leaveWhitespace} defined in base class, and also invokes C{leaveWhitespace} on + all contained expressions.""" + self.skipWhitespace = False + self.exprs = [ e.copy() for e in self.exprs ] + for e in self.exprs: + e.leaveWhitespace() + return self + + def ignore( self, other ): + if isinstance( other, Suppress ): + if other not in self.ignoreExprs: + super( ParseExpression, self).ignore( other ) + for e in self.exprs: + e.ignore( self.ignoreExprs[-1] ) + else: + super( ParseExpression, self).ignore( other ) + for e in self.exprs: + e.ignore( self.ignoreExprs[-1] ) + return self + + def __str__( self ): + try: + return super(ParseExpression,self).__str__() + except Exception: + pass + + if self.strRepr is None: + self.strRepr = "%s:(%s)" % ( self.__class__.__name__, _ustr(self.exprs) ) + return self.strRepr + + def streamline( self ): + super(ParseExpression,self).streamline() + + for e in self.exprs: + e.streamline() + + # collapse nested And's of the form And( And( And( a,b), c), d) to And( a,b,c,d ) + # but only if there are no parse actions or resultsNames on the nested And's + # (likewise for Or's and MatchFirst's) + if ( len(self.exprs) == 2 ): + other = self.exprs[0] + if ( isinstance( other, self.__class__ ) and + not(other.parseAction) and + other.resultsName is None and + not other.debug ): + self.exprs = other.exprs[:] + [ self.exprs[1] ] + self.strRepr = None + self.mayReturnEmpty |= other.mayReturnEmpty + self.mayIndexError |= other.mayIndexError + + other = self.exprs[-1] + if ( isinstance( other, self.__class__ ) and + not(other.parseAction) and + other.resultsName is None and + not other.debug ): + self.exprs = self.exprs[:-1] + other.exprs[:] + self.strRepr = None + self.mayReturnEmpty |= other.mayReturnEmpty + self.mayIndexError |= other.mayIndexError + + self.errmsg = "Expected " + _ustr(self) + + return self + + def setResultsName( self, name, listAllMatches=False ): + ret = super(ParseExpression,self).setResultsName(name,listAllMatches) + return ret + + def validate( self, validateTrace=[] ): + tmp = validateTrace[:]+[self] + for e in self.exprs: + e.validate(tmp) + self.checkRecursion( [] ) + + def copy(self): + ret = super(ParseExpression,self).copy() + ret.exprs = [e.copy() for e in self.exprs] + return ret + +class And(ParseExpression): + """ + Requires all given C{ParseExpression}s to be found in the given order. + Expressions may be separated by whitespace. + May be constructed using the C{'+'} operator. + May also be constructed using the C{'-'} operator, which will suppress backtracking. + + Example:: + integer = Word(nums) + name_expr = OneOrMore(Word(alphas)) + + expr = And([integer("id"),name_expr("name"),integer("age")]) + # more easily written as: + expr = integer("id") + name_expr("name") + integer("age") + """ + + class _ErrorStop(Empty): + def __init__(self, *args, **kwargs): + super(And._ErrorStop,self).__init__(*args, **kwargs) + self.name = '-' + self.leaveWhitespace() + + def __init__( self, exprs, savelist = True ): + super(And,self).__init__(exprs, savelist) + self.mayReturnEmpty = all(e.mayReturnEmpty for e in self.exprs) + self.setWhitespaceChars( self.exprs[0].whiteChars ) + self.skipWhitespace = self.exprs[0].skipWhitespace + self.callPreparse = True + + def parseImpl( self, instring, loc, doActions=True ): + # pass False as last arg to _parse for first element, since we already + # pre-parsed the string as part of our And pre-parsing + loc, resultlist = self.exprs[0]._parse( instring, loc, doActions, callPreParse=False ) + errorStop = False + for e in self.exprs[1:]: + if isinstance(e, And._ErrorStop): + errorStop = True + continue + if errorStop: + try: + loc, exprtokens = e._parse( instring, loc, doActions ) + except ParseSyntaxException: + raise + except ParseBaseException as pe: + pe.__traceback__ = None + raise ParseSyntaxException._from_exception(pe) + except IndexError: + raise ParseSyntaxException(instring, len(instring), self.errmsg, self) + else: + loc, exprtokens = e._parse( instring, loc, doActions ) + if exprtokens or exprtokens.haskeys(): + resultlist += exprtokens + return loc, resultlist + + def __iadd__(self, other ): + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + return self.append( other ) #And( [ self, other ] ) + + def checkRecursion( self, parseElementList ): + subRecCheckList = parseElementList[:] + [ self ] + for e in self.exprs: + e.checkRecursion( subRecCheckList ) + if not e.mayReturnEmpty: + break + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "{" + " ".join(_ustr(e) for e in self.exprs) + "}" + + return self.strRepr + + +class Or(ParseExpression): + """ + Requires that at least one C{ParseExpression} is found. + If two expressions match, the expression that matches the longest string will be used. + May be constructed using the C{'^'} operator. + + Example:: + # construct Or using '^' operator + + number = Word(nums) ^ Combine(Word(nums) + '.' + Word(nums)) + print(number.searchString("123 3.1416 789")) + prints:: + [['123'], ['3.1416'], ['789']] + """ + def __init__( self, exprs, savelist = False ): + super(Or,self).__init__(exprs, savelist) + if self.exprs: + self.mayReturnEmpty = any(e.mayReturnEmpty for e in self.exprs) + else: + self.mayReturnEmpty = True + + def parseImpl( self, instring, loc, doActions=True ): + maxExcLoc = -1 + maxException = None + matches = [] + for e in self.exprs: + try: + loc2 = e.tryParse( instring, loc ) + except ParseException as err: + err.__traceback__ = None + if err.loc > maxExcLoc: + maxException = err + maxExcLoc = err.loc + except IndexError: + if len(instring) > maxExcLoc: + maxException = ParseException(instring,len(instring),e.errmsg,self) + maxExcLoc = len(instring) + else: + # save match among all matches, to retry longest to shortest + matches.append((loc2, e)) + + if matches: + matches.sort(key=lambda x: -x[0]) + for _,e in matches: + try: + return e._parse( instring, loc, doActions ) + except ParseException as err: + err.__traceback__ = None + if err.loc > maxExcLoc: + maxException = err + maxExcLoc = err.loc + + if maxException is not None: + maxException.msg = self.errmsg + raise maxException + else: + raise ParseException(instring, loc, "no defined alternatives to match", self) + + + def __ixor__(self, other ): + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + return self.append( other ) #Or( [ self, other ] ) + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "{" + " ^ ".join(_ustr(e) for e in self.exprs) + "}" + + return self.strRepr + + def checkRecursion( self, parseElementList ): + subRecCheckList = parseElementList[:] + [ self ] + for e in self.exprs: + e.checkRecursion( subRecCheckList ) + + +class MatchFirst(ParseExpression): + """ + Requires that at least one C{ParseExpression} is found. + If two expressions match, the first one listed is the one that will match. + May be constructed using the C{'|'} operator. + + Example:: + # construct MatchFirst using '|' operator + + # watch the order of expressions to match + number = Word(nums) | Combine(Word(nums) + '.' + Word(nums)) + print(number.searchString("123 3.1416 789")) # Fail! -> [['123'], ['3'], ['1416'], ['789']] + + # put more selective expression first + number = Combine(Word(nums) + '.' + Word(nums)) | Word(nums) + print(number.searchString("123 3.1416 789")) # Better -> [['123'], ['3.1416'], ['789']] + """ + def __init__( self, exprs, savelist = False ): + super(MatchFirst,self).__init__(exprs, savelist) + if self.exprs: + self.mayReturnEmpty = any(e.mayReturnEmpty for e in self.exprs) + else: + self.mayReturnEmpty = True + + def parseImpl( self, instring, loc, doActions=True ): + maxExcLoc = -1 + maxException = None + for e in self.exprs: + try: + ret = e._parse( instring, loc, doActions ) + return ret + except ParseException as err: + if err.loc > maxExcLoc: + maxException = err + maxExcLoc = err.loc + except IndexError: + if len(instring) > maxExcLoc: + maxException = ParseException(instring,len(instring),e.errmsg,self) + maxExcLoc = len(instring) + + # only got here if no expression matched, raise exception for match that made it the furthest + else: + if maxException is not None: + maxException.msg = self.errmsg + raise maxException + else: + raise ParseException(instring, loc, "no defined alternatives to match", self) + + def __ior__(self, other ): + if isinstance( other, basestring ): + other = ParserElement._literalStringClass( other ) + return self.append( other ) #MatchFirst( [ self, other ] ) + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "{" + " | ".join(_ustr(e) for e in self.exprs) + "}" + + return self.strRepr + + def checkRecursion( self, parseElementList ): + subRecCheckList = parseElementList[:] + [ self ] + for e in self.exprs: + e.checkRecursion( subRecCheckList ) + + +class Each(ParseExpression): + """ + Requires all given C{ParseExpression}s to be found, but in any order. + Expressions may be separated by whitespace. + May be constructed using the C{'&'} operator. + + Example:: + color = oneOf("RED ORANGE YELLOW GREEN BLUE PURPLE BLACK WHITE BROWN") + shape_type = oneOf("SQUARE CIRCLE TRIANGLE STAR HEXAGON OCTAGON") + integer = Word(nums) + shape_attr = "shape:" + shape_type("shape") + posn_attr = "posn:" + Group(integer("x") + ',' + integer("y"))("posn") + color_attr = "color:" + color("color") + size_attr = "size:" + integer("size") + + # use Each (using operator '&') to accept attributes in any order + # (shape and posn are required, color and size are optional) + shape_spec = shape_attr & posn_attr & Optional(color_attr) & Optional(size_attr) + + shape_spec.runTests(''' + shape: SQUARE color: BLACK posn: 100, 120 + shape: CIRCLE size: 50 color: BLUE posn: 50,80 + color:GREEN size:20 shape:TRIANGLE posn:20,40 + ''' + ) + prints:: + shape: SQUARE color: BLACK posn: 100, 120 + ['shape:', 'SQUARE', 'color:', 'BLACK', 'posn:', ['100', ',', '120']] + - color: BLACK + - posn: ['100', ',', '120'] + - x: 100 + - y: 120 + - shape: SQUARE + + + shape: CIRCLE size: 50 color: BLUE posn: 50,80 + ['shape:', 'CIRCLE', 'size:', '50', 'color:', 'BLUE', 'posn:', ['50', ',', '80']] + - color: BLUE + - posn: ['50', ',', '80'] + - x: 50 + - y: 80 + - shape: CIRCLE + - size: 50 + + + color: GREEN size: 20 shape: TRIANGLE posn: 20,40 + ['color:', 'GREEN', 'size:', '20', 'shape:', 'TRIANGLE', 'posn:', ['20', ',', '40']] + - color: GREEN + - posn: ['20', ',', '40'] + - x: 20 + - y: 40 + - shape: TRIANGLE + - size: 20 + """ + def __init__( self, exprs, savelist = True ): + super(Each,self).__init__(exprs, savelist) + self.mayReturnEmpty = all(e.mayReturnEmpty for e in self.exprs) + self.skipWhitespace = True + self.initExprGroups = True + + def parseImpl( self, instring, loc, doActions=True ): + if self.initExprGroups: + self.opt1map = dict((id(e.expr),e) for e in self.exprs if isinstance(e,Optional)) + opt1 = [ e.expr for e in self.exprs if isinstance(e,Optional) ] + opt2 = [ e for e in self.exprs if e.mayReturnEmpty and not isinstance(e,Optional)] + self.optionals = opt1 + opt2 + self.multioptionals = [ e.expr for e in self.exprs if isinstance(e,ZeroOrMore) ] + self.multirequired = [ e.expr for e in self.exprs if isinstance(e,OneOrMore) ] + self.required = [ e for e in self.exprs if not isinstance(e,(Optional,ZeroOrMore,OneOrMore)) ] + self.required += self.multirequired + self.initExprGroups = False + tmpLoc = loc + tmpReqd = self.required[:] + tmpOpt = self.optionals[:] + matchOrder = [] + + keepMatching = True + while keepMatching: + tmpExprs = tmpReqd + tmpOpt + self.multioptionals + self.multirequired + failed = [] + for e in tmpExprs: + try: + tmpLoc = e.tryParse( instring, tmpLoc ) + except ParseException: + failed.append(e) + else: + matchOrder.append(self.opt1map.get(id(e),e)) + if e in tmpReqd: + tmpReqd.remove(e) + elif e in tmpOpt: + tmpOpt.remove(e) + if len(failed) == len(tmpExprs): + keepMatching = False + + if tmpReqd: + missing = ", ".join(_ustr(e) for e in tmpReqd) + raise ParseException(instring,loc,"Missing one or more required elements (%s)" % missing ) + + # add any unmatched Optionals, in case they have default values defined + matchOrder += [e for e in self.exprs if isinstance(e,Optional) and e.expr in tmpOpt] + + resultlist = [] + for e in matchOrder: + loc,results = e._parse(instring,loc,doActions) + resultlist.append(results) + + finalResults = sum(resultlist, ParseResults([])) + return loc, finalResults + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "{" + " & ".join(_ustr(e) for e in self.exprs) + "}" + + return self.strRepr + + def checkRecursion( self, parseElementList ): + subRecCheckList = parseElementList[:] + [ self ] + for e in self.exprs: + e.checkRecursion( subRecCheckList ) + + +class ParseElementEnhance(ParserElement): + """ + Abstract subclass of C{ParserElement}, for combining and post-processing parsed tokens. + """ + def __init__( self, expr, savelist=False ): + super(ParseElementEnhance,self).__init__(savelist) + if isinstance( expr, basestring ): + if issubclass(ParserElement._literalStringClass, Token): + expr = ParserElement._literalStringClass(expr) + else: + expr = ParserElement._literalStringClass(Literal(expr)) + self.expr = expr + self.strRepr = None + if expr is not None: + self.mayIndexError = expr.mayIndexError + self.mayReturnEmpty = expr.mayReturnEmpty + self.setWhitespaceChars( expr.whiteChars ) + self.skipWhitespace = expr.skipWhitespace + self.saveAsList = expr.saveAsList + self.callPreparse = expr.callPreparse + self.ignoreExprs.extend(expr.ignoreExprs) + + def parseImpl( self, instring, loc, doActions=True ): + if self.expr is not None: + return self.expr._parse( instring, loc, doActions, callPreParse=False ) + else: + raise ParseException("",loc,self.errmsg,self) + + def leaveWhitespace( self ): + self.skipWhitespace = False + self.expr = self.expr.copy() + if self.expr is not None: + self.expr.leaveWhitespace() + return self + + def ignore( self, other ): + if isinstance( other, Suppress ): + if other not in self.ignoreExprs: + super( ParseElementEnhance, self).ignore( other ) + if self.expr is not None: + self.expr.ignore( self.ignoreExprs[-1] ) + else: + super( ParseElementEnhance, self).ignore( other ) + if self.expr is not None: + self.expr.ignore( self.ignoreExprs[-1] ) + return self + + def streamline( self ): + super(ParseElementEnhance,self).streamline() + if self.expr is not None: + self.expr.streamline() + return self + + def checkRecursion( self, parseElementList ): + if self in parseElementList: + raise RecursiveGrammarException( parseElementList+[self] ) + subRecCheckList = parseElementList[:] + [ self ] + if self.expr is not None: + self.expr.checkRecursion( subRecCheckList ) + + def validate( self, validateTrace=[] ): + tmp = validateTrace[:]+[self] + if self.expr is not None: + self.expr.validate(tmp) + self.checkRecursion( [] ) + + def __str__( self ): + try: + return super(ParseElementEnhance,self).__str__() + except Exception: + pass + + if self.strRepr is None and self.expr is not None: + self.strRepr = "%s:(%s)" % ( self.__class__.__name__, _ustr(self.expr) ) + return self.strRepr + + +class FollowedBy(ParseElementEnhance): + """ + Lookahead matching of the given parse expression. C{FollowedBy} + does I{not} advance the parsing position within the input string, it only + verifies that the specified parse expression matches at the current + position. C{FollowedBy} always returns a null token list. + + Example:: + # use FollowedBy to match a label only if it is followed by a ':' + data_word = Word(alphas) + label = data_word + FollowedBy(':') + attr_expr = Group(label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join)) + + OneOrMore(attr_expr).parseString("shape: SQUARE color: BLACK posn: upper left").pprint() + prints:: + [['shape', 'SQUARE'], ['color', 'BLACK'], ['posn', 'upper left']] + """ + def __init__( self, expr ): + super(FollowedBy,self).__init__(expr) + self.mayReturnEmpty = True + + def parseImpl( self, instring, loc, doActions=True ): + self.expr.tryParse( instring, loc ) + return loc, [] + + +class NotAny(ParseElementEnhance): + """ + Lookahead to disallow matching with the given parse expression. C{NotAny} + does I{not} advance the parsing position within the input string, it only + verifies that the specified parse expression does I{not} match at the current + position. Also, C{NotAny} does I{not} skip over leading whitespace. C{NotAny} + always returns a null token list. May be constructed using the '~' operator. + + Example:: + + """ + def __init__( self, expr ): + super(NotAny,self).__init__(expr) + #~ self.leaveWhitespace() + self.skipWhitespace = False # do NOT use self.leaveWhitespace(), don't want to propagate to exprs + self.mayReturnEmpty = True + self.errmsg = "Found unwanted token, "+_ustr(self.expr) + + def parseImpl( self, instring, loc, doActions=True ): + if self.expr.canParseNext(instring, loc): + raise ParseException(instring, loc, self.errmsg, self) + return loc, [] + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "~{" + _ustr(self.expr) + "}" + + return self.strRepr + +class _MultipleMatch(ParseElementEnhance): + def __init__( self, expr, stopOn=None): + super(_MultipleMatch, self).__init__(expr) + self.saveAsList = True + ender = stopOn + if isinstance(ender, basestring): + ender = ParserElement._literalStringClass(ender) + self.not_ender = ~ender if ender is not None else None + + def parseImpl( self, instring, loc, doActions=True ): + self_expr_parse = self.expr._parse + self_skip_ignorables = self._skipIgnorables + check_ender = self.not_ender is not None + if check_ender: + try_not_ender = self.not_ender.tryParse + + # must be at least one (but first see if we are the stopOn sentinel; + # if so, fail) + if check_ender: + try_not_ender(instring, loc) + loc, tokens = self_expr_parse( instring, loc, doActions, callPreParse=False ) + try: + hasIgnoreExprs = (not not self.ignoreExprs) + while 1: + if check_ender: + try_not_ender(instring, loc) + if hasIgnoreExprs: + preloc = self_skip_ignorables( instring, loc ) + else: + preloc = loc + loc, tmptokens = self_expr_parse( instring, preloc, doActions ) + if tmptokens or tmptokens.haskeys(): + tokens += tmptokens + except (ParseException,IndexError): + pass + + return loc, tokens + +class OneOrMore(_MultipleMatch): + """ + Repetition of one or more of the given expression. + + Parameters: + - expr - expression that must match one or more times + - stopOn - (default=C{None}) - expression for a terminating sentinel + (only required if the sentinel would ordinarily match the repetition + expression) + + Example:: + data_word = Word(alphas) + label = data_word + FollowedBy(':') + attr_expr = Group(label + Suppress(':') + OneOrMore(data_word).setParseAction(' '.join)) + + text = "shape: SQUARE posn: upper left color: BLACK" + OneOrMore(attr_expr).parseString(text).pprint() # Fail! read 'color' as data instead of next label -> [['shape', 'SQUARE color']] + + # use stopOn attribute for OneOrMore to avoid reading label string as part of the data + attr_expr = Group(label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join)) + OneOrMore(attr_expr).parseString(text).pprint() # Better -> [['shape', 'SQUARE'], ['posn', 'upper left'], ['color', 'BLACK']] + + # could also be written as + (attr_expr * (1,)).parseString(text).pprint() + """ + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "{" + _ustr(self.expr) + "}..." + + return self.strRepr + +class ZeroOrMore(_MultipleMatch): + """ + Optional repetition of zero or more of the given expression. + + Parameters: + - expr - expression that must match zero or more times + - stopOn - (default=C{None}) - expression for a terminating sentinel + (only required if the sentinel would ordinarily match the repetition + expression) + + Example: similar to L{OneOrMore} + """ + def __init__( self, expr, stopOn=None): + super(ZeroOrMore,self).__init__(expr, stopOn=stopOn) + self.mayReturnEmpty = True + + def parseImpl( self, instring, loc, doActions=True ): + try: + return super(ZeroOrMore, self).parseImpl(instring, loc, doActions) + except (ParseException,IndexError): + return loc, [] + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "[" + _ustr(self.expr) + "]..." + + return self.strRepr + +class _NullToken(object): + def __bool__(self): + return False + __nonzero__ = __bool__ + def __str__(self): + return "" + +_optionalNotMatched = _NullToken() +class Optional(ParseElementEnhance): + """ + Optional matching of the given expression. + + Parameters: + - expr - expression that must match zero or more times + - default (optional) - value to be returned if the optional expression is not found. + + Example:: + # US postal code can be a 5-digit zip, plus optional 4-digit qualifier + zip = Combine(Word(nums, exact=5) + Optional('-' + Word(nums, exact=4))) + zip.runTests(''' + # traditional ZIP code + 12345 + + # ZIP+4 form + 12101-0001 + + # invalid ZIP + 98765- + ''') + prints:: + # traditional ZIP code + 12345 + ['12345'] + + # ZIP+4 form + 12101-0001 + ['12101-0001'] + + # invalid ZIP + 98765- + ^ + FAIL: Expected end of text (at char 5), (line:1, col:6) + """ + def __init__( self, expr, default=_optionalNotMatched ): + super(Optional,self).__init__( expr, savelist=False ) + self.saveAsList = self.expr.saveAsList + self.defaultValue = default + self.mayReturnEmpty = True + + def parseImpl( self, instring, loc, doActions=True ): + try: + loc, tokens = self.expr._parse( instring, loc, doActions, callPreParse=False ) + except (ParseException,IndexError): + if self.defaultValue is not _optionalNotMatched: + if self.expr.resultsName: + tokens = ParseResults([ self.defaultValue ]) + tokens[self.expr.resultsName] = self.defaultValue + else: + tokens = [ self.defaultValue ] + else: + tokens = [] + return loc, tokens + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "[" + _ustr(self.expr) + "]" + + return self.strRepr + +class SkipTo(ParseElementEnhance): + """ + Token for skipping over all undefined text until the matched expression is found. + + Parameters: + - expr - target expression marking the end of the data to be skipped + - include - (default=C{False}) if True, the target expression is also parsed + (the skipped text and target expression are returned as a 2-element list). + - ignore - (default=C{None}) used to define grammars (typically quoted strings and + comments) that might contain false matches to the target expression + - failOn - (default=C{None}) define expressions that are not allowed to be + included in the skipped test; if found before the target expression is found, + the SkipTo is not a match + + Example:: + report = ''' + Outstanding Issues Report - 1 Jan 2000 + + # | Severity | Description | Days Open + -----+----------+-------------------------------------------+----------- + 101 | Critical | Intermittent system crash | 6 + 94 | Cosmetic | Spelling error on Login ('log|n') | 14 + 79 | Minor | System slow when running too many reports | 47 + ''' + integer = Word(nums) + SEP = Suppress('|') + # use SkipTo to simply match everything up until the next SEP + # - ignore quoted strings, so that a '|' character inside a quoted string does not match + # - parse action will call token.strip() for each matched token, i.e., the description body + string_data = SkipTo(SEP, ignore=quotedString) + string_data.setParseAction(tokenMap(str.strip)) + ticket_expr = (integer("issue_num") + SEP + + string_data("sev") + SEP + + string_data("desc") + SEP + + integer("days_open")) + + for tkt in ticket_expr.searchString(report): + print tkt.dump() + prints:: + ['101', 'Critical', 'Intermittent system crash', '6'] + - days_open: 6 + - desc: Intermittent system crash + - issue_num: 101 + - sev: Critical + ['94', 'Cosmetic', "Spelling error on Login ('log|n')", '14'] + - days_open: 14 + - desc: Spelling error on Login ('log|n') + - issue_num: 94 + - sev: Cosmetic + ['79', 'Minor', 'System slow when running too many reports', '47'] + - days_open: 47 + - desc: System slow when running too many reports + - issue_num: 79 + - sev: Minor + """ + def __init__( self, other, include=False, ignore=None, failOn=None ): + super( SkipTo, self ).__init__( other ) + self.ignoreExpr = ignore + self.mayReturnEmpty = True + self.mayIndexError = False + self.includeMatch = include + self.asList = False + if isinstance(failOn, basestring): + self.failOn = ParserElement._literalStringClass(failOn) + else: + self.failOn = failOn + self.errmsg = "No match found for "+_ustr(self.expr) + + def parseImpl( self, instring, loc, doActions=True ): + startloc = loc + instrlen = len(instring) + expr = self.expr + expr_parse = self.expr._parse + self_failOn_canParseNext = self.failOn.canParseNext if self.failOn is not None else None + self_ignoreExpr_tryParse = self.ignoreExpr.tryParse if self.ignoreExpr is not None else None + + tmploc = loc + while tmploc <= instrlen: + if self_failOn_canParseNext is not None: + # break if failOn expression matches + if self_failOn_canParseNext(instring, tmploc): + break + + if self_ignoreExpr_tryParse is not None: + # advance past ignore expressions + while 1: + try: + tmploc = self_ignoreExpr_tryParse(instring, tmploc) + except ParseBaseException: + break + + try: + expr_parse(instring, tmploc, doActions=False, callPreParse=False) + except (ParseException, IndexError): + # no match, advance loc in string + tmploc += 1 + else: + # matched skipto expr, done + break + + else: + # ran off the end of the input string without matching skipto expr, fail + raise ParseException(instring, loc, self.errmsg, self) + + # build up return values + loc = tmploc + skiptext = instring[startloc:loc] + skipresult = ParseResults(skiptext) + + if self.includeMatch: + loc, mat = expr_parse(instring,loc,doActions,callPreParse=False) + skipresult += mat + + return loc, skipresult + +class Forward(ParseElementEnhance): + """ + Forward declaration of an expression to be defined later - + used for recursive grammars, such as algebraic infix notation. + When the expression is known, it is assigned to the C{Forward} variable using the '<<' operator. + + Note: take care when assigning to C{Forward} not to overlook precedence of operators. + Specifically, '|' has a lower precedence than '<<', so that:: + fwdExpr << a | b | c + will actually be evaluated as:: + (fwdExpr << a) | b | c + thereby leaving b and c out as parseable alternatives. It is recommended that you + explicitly group the values inserted into the C{Forward}:: + fwdExpr << (a | b | c) + Converting to use the '<<=' operator instead will avoid this problem. + + See L{ParseResults.pprint} for an example of a recursive parser created using + C{Forward}. + """ + def __init__( self, other=None ): + super(Forward,self).__init__( other, savelist=False ) + + def __lshift__( self, other ): + if isinstance( other, basestring ): + other = ParserElement._literalStringClass(other) + self.expr = other + self.strRepr = None + self.mayIndexError = self.expr.mayIndexError + self.mayReturnEmpty = self.expr.mayReturnEmpty + self.setWhitespaceChars( self.expr.whiteChars ) + self.skipWhitespace = self.expr.skipWhitespace + self.saveAsList = self.expr.saveAsList + self.ignoreExprs.extend(self.expr.ignoreExprs) + return self + + def __ilshift__(self, other): + return self << other + + def leaveWhitespace( self ): + self.skipWhitespace = False + return self + + def streamline( self ): + if not self.streamlined: + self.streamlined = True + if self.expr is not None: + self.expr.streamline() + return self + + def validate( self, validateTrace=[] ): + if self not in validateTrace: + tmp = validateTrace[:]+[self] + if self.expr is not None: + self.expr.validate(tmp) + self.checkRecursion([]) + + def __str__( self ): + if hasattr(self,"name"): + return self.name + return self.__class__.__name__ + ": ..." + + # stubbed out for now - creates awful memory and perf issues + self._revertClass = self.__class__ + self.__class__ = _ForwardNoRecurse + try: + if self.expr is not None: + retString = _ustr(self.expr) + else: + retString = "None" + finally: + self.__class__ = self._revertClass + return self.__class__.__name__ + ": " + retString + + def copy(self): + if self.expr is not None: + return super(Forward,self).copy() + else: + ret = Forward() + ret <<= self + return ret + +class _ForwardNoRecurse(Forward): + def __str__( self ): + return "..." + +class TokenConverter(ParseElementEnhance): + """ + Abstract subclass of C{ParseExpression}, for converting parsed results. + """ + def __init__( self, expr, savelist=False ): + super(TokenConverter,self).__init__( expr )#, savelist ) + self.saveAsList = False + +class Combine(TokenConverter): + """ + Converter to concatenate all matching tokens to a single string. + By default, the matching patterns must also be contiguous in the input string; + this can be disabled by specifying C{'adjacent=False'} in the constructor. + + Example:: + real = Word(nums) + '.' + Word(nums) + print(real.parseString('3.1416')) # -> ['3', '.', '1416'] + # will also erroneously match the following + print(real.parseString('3. 1416')) # -> ['3', '.', '1416'] + + real = Combine(Word(nums) + '.' + Word(nums)) + print(real.parseString('3.1416')) # -> ['3.1416'] + # no match when there are internal spaces + print(real.parseString('3. 1416')) # -> Exception: Expected W:(0123...) + """ + def __init__( self, expr, joinString="", adjacent=True ): + super(Combine,self).__init__( expr ) + # suppress whitespace-stripping in contained parse expressions, but re-enable it on the Combine itself + if adjacent: + self.leaveWhitespace() + self.adjacent = adjacent + self.skipWhitespace = True + self.joinString = joinString + self.callPreparse = True + + def ignore( self, other ): + if self.adjacent: + ParserElement.ignore(self, other) + else: + super( Combine, self).ignore( other ) + return self + + def postParse( self, instring, loc, tokenlist ): + retToks = tokenlist.copy() + del retToks[:] + retToks += ParseResults([ "".join(tokenlist._asStringList(self.joinString)) ], modal=self.modalResults) + + if self.resultsName and retToks.haskeys(): + return [ retToks ] + else: + return retToks + +class Group(TokenConverter): + """ + Converter to return the matched tokens as a list - useful for returning tokens of C{L{ZeroOrMore}} and C{L{OneOrMore}} expressions. + + Example:: + ident = Word(alphas) + num = Word(nums) + term = ident | num + func = ident + Optional(delimitedList(term)) + print(func.parseString("fn a,b,100")) # -> ['fn', 'a', 'b', '100'] + + func = ident + Group(Optional(delimitedList(term))) + print(func.parseString("fn a,b,100")) # -> ['fn', ['a', 'b', '100']] + """ + def __init__( self, expr ): + super(Group,self).__init__( expr ) + self.saveAsList = True + + def postParse( self, instring, loc, tokenlist ): + return [ tokenlist ] + +class Dict(TokenConverter): + """ + Converter to return a repetitive expression as a list, but also as a dictionary. + Each element can also be referenced using the first token in the expression as its key. + Useful for tabular report scraping when the first column can be used as a item key. + + Example:: + data_word = Word(alphas) + label = data_word + FollowedBy(':') + attr_expr = Group(label + Suppress(':') + OneOrMore(data_word).setParseAction(' '.join)) + + text = "shape: SQUARE posn: upper left color: light blue texture: burlap" + attr_expr = (label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join)) + + # print attributes as plain groups + print(OneOrMore(attr_expr).parseString(text).dump()) + + # instead of OneOrMore(expr), parse using Dict(OneOrMore(Group(expr))) - Dict will auto-assign names + result = Dict(OneOrMore(Group(attr_expr))).parseString(text) + print(result.dump()) + + # access named fields as dict entries, or output as dict + print(result['shape']) + print(result.asDict()) + prints:: + ['shape', 'SQUARE', 'posn', 'upper left', 'color', 'light blue', 'texture', 'burlap'] + + [['shape', 'SQUARE'], ['posn', 'upper left'], ['color', 'light blue'], ['texture', 'burlap']] + - color: light blue + - posn: upper left + - shape: SQUARE + - texture: burlap + SQUARE + {'color': 'light blue', 'posn': 'upper left', 'texture': 'burlap', 'shape': 'SQUARE'} + See more examples at L{ParseResults} of accessing fields by results name. + """ + def __init__( self, expr ): + super(Dict,self).__init__( expr ) + self.saveAsList = True + + def postParse( self, instring, loc, tokenlist ): + for i,tok in enumerate(tokenlist): + if len(tok) == 0: + continue + ikey = tok[0] + if isinstance(ikey,int): + ikey = _ustr(tok[0]).strip() + if len(tok)==1: + tokenlist[ikey] = _ParseResultsWithOffset("",i) + elif len(tok)==2 and not isinstance(tok[1],ParseResults): + tokenlist[ikey] = _ParseResultsWithOffset(tok[1],i) + else: + dictvalue = tok.copy() #ParseResults(i) + del dictvalue[0] + if len(dictvalue)!= 1 or (isinstance(dictvalue,ParseResults) and dictvalue.haskeys()): + tokenlist[ikey] = _ParseResultsWithOffset(dictvalue,i) + else: + tokenlist[ikey] = _ParseResultsWithOffset(dictvalue[0],i) + + if self.resultsName: + return [ tokenlist ] + else: + return tokenlist + + +class Suppress(TokenConverter): + """ + Converter for ignoring the results of a parsed expression. + + Example:: + source = "a, b, c,d" + wd = Word(alphas) + wd_list1 = wd + ZeroOrMore(',' + wd) + print(wd_list1.parseString(source)) + + # often, delimiters that are useful during parsing are just in the + # way afterward - use Suppress to keep them out of the parsed output + wd_list2 = wd + ZeroOrMore(Suppress(',') + wd) + print(wd_list2.parseString(source)) + prints:: + ['a', ',', 'b', ',', 'c', ',', 'd'] + ['a', 'b', 'c', 'd'] + (See also L{delimitedList}.) + """ + def postParse( self, instring, loc, tokenlist ): + return [] + + def suppress( self ): + return self + + +class OnlyOnce(object): + """ + Wrapper for parse actions, to ensure they are only called once. + """ + def __init__(self, methodCall): + self.callable = _trim_arity(methodCall) + self.called = False + def __call__(self,s,l,t): + if not self.called: + results = self.callable(s,l,t) + self.called = True + return results + raise ParseException(s,l,"") + def reset(self): + self.called = False + +def traceParseAction(f): + """ + Decorator for debugging parse actions. + + When the parse action is called, this decorator will print C{">> entering I{method-name}(line:I{current_source_line}, I{parse_location}, I{matched_tokens})".} + When the parse action completes, the decorator will print C{"<<"} followed by the returned value, or any exception that the parse action raised. + + Example:: + wd = Word(alphas) + + @traceParseAction + def remove_duplicate_chars(tokens): + return ''.join(sorted(set(''.join(tokens)))) + + wds = OneOrMore(wd).setParseAction(remove_duplicate_chars) + print(wds.parseString("slkdjs sld sldd sdlf sdljf")) + prints:: + >>entering remove_duplicate_chars(line: 'slkdjs sld sldd sdlf sdljf', 0, (['slkdjs', 'sld', 'sldd', 'sdlf', 'sdljf'], {})) + <<leaving remove_duplicate_chars (ret: 'dfjkls') + ['dfjkls'] + """ + f = _trim_arity(f) + def z(*paArgs): + thisFunc = f.__name__ + s,l,t = paArgs[-3:] + if len(paArgs)>3: + thisFunc = paArgs[0].__class__.__name__ + '.' + thisFunc + sys.stderr.write( ">>entering %s(line: '%s', %d, %r)\n" % (thisFunc,line(l,s),l,t) ) + try: + ret = f(*paArgs) + except Exception as exc: + sys.stderr.write( "<<leaving %s (exception: %s)\n" % (thisFunc,exc) ) + raise + sys.stderr.write( "<<leaving %s (ret: %r)\n" % (thisFunc,ret) ) + return ret + try: + z.__name__ = f.__name__ + except AttributeError: + pass + return z + +# +# global helpers +# +def delimitedList( expr, delim=",", combine=False ): + """ + Helper to define a delimited list of expressions - the delimiter defaults to ','. + By default, the list elements and delimiters can have intervening whitespace, and + comments, but this can be overridden by passing C{combine=True} in the constructor. + If C{combine} is set to C{True}, the matching tokens are returned as a single token + string, with the delimiters included; otherwise, the matching tokens are returned + as a list of tokens, with the delimiters suppressed. + + Example:: + delimitedList(Word(alphas)).parseString("aa,bb,cc") # -> ['aa', 'bb', 'cc'] + delimitedList(Word(hexnums), delim=':', combine=True).parseString("AA:BB:CC:DD:EE") # -> ['AA:BB:CC:DD:EE'] + """ + dlName = _ustr(expr)+" ["+_ustr(delim)+" "+_ustr(expr)+"]..." + if combine: + return Combine( expr + ZeroOrMore( delim + expr ) ).setName(dlName) + else: + return ( expr + ZeroOrMore( Suppress( delim ) + expr ) ).setName(dlName) + +def countedArray( expr, intExpr=None ): + """ + Helper to define a counted list of expressions. + This helper defines a pattern of the form:: + integer expr expr expr... + where the leading integer tells how many expr expressions follow. + The matched tokens returns the array of expr tokens as a list - the leading count token is suppressed. + + If C{intExpr} is specified, it should be a pyparsing expression that produces an integer value. + + Example:: + countedArray(Word(alphas)).parseString('2 ab cd ef') # -> ['ab', 'cd'] + + # in this parser, the leading integer value is given in binary, + # '10' indicating that 2 values are in the array + binaryConstant = Word('01').setParseAction(lambda t: int(t[0], 2)) + countedArray(Word(alphas), intExpr=binaryConstant).parseString('10 ab cd ef') # -> ['ab', 'cd'] + """ + arrayExpr = Forward() + def countFieldParseAction(s,l,t): + n = t[0] + arrayExpr << (n and Group(And([expr]*n)) or Group(empty)) + return [] + if intExpr is None: + intExpr = Word(nums).setParseAction(lambda t:int(t[0])) + else: + intExpr = intExpr.copy() + intExpr.setName("arrayLen") + intExpr.addParseAction(countFieldParseAction, callDuringTry=True) + return ( intExpr + arrayExpr ).setName('(len) ' + _ustr(expr) + '...') + +def _flatten(L): + ret = [] + for i in L: + if isinstance(i,list): + ret.extend(_flatten(i)) + else: + ret.append(i) + return ret + +def matchPreviousLiteral(expr): + """ + Helper to define an expression that is indirectly defined from + the tokens matched in a previous expression, that is, it looks + for a 'repeat' of a previous expression. For example:: + first = Word(nums) + second = matchPreviousLiteral(first) + matchExpr = first + ":" + second + will match C{"1:1"}, but not C{"1:2"}. Because this matches a + previous literal, will also match the leading C{"1:1"} in C{"1:10"}. + If this is not desired, use C{matchPreviousExpr}. + Do I{not} use with packrat parsing enabled. + """ + rep = Forward() + def copyTokenToRepeater(s,l,t): + if t: + if len(t) == 1: + rep << t[0] + else: + # flatten t tokens + tflat = _flatten(t.asList()) + rep << And(Literal(tt) for tt in tflat) + else: + rep << Empty() + expr.addParseAction(copyTokenToRepeater, callDuringTry=True) + rep.setName('(prev) ' + _ustr(expr)) + return rep + +def matchPreviousExpr(expr): + """ + Helper to define an expression that is indirectly defined from + the tokens matched in a previous expression, that is, it looks + for a 'repeat' of a previous expression. For example:: + first = Word(nums) + second = matchPreviousExpr(first) + matchExpr = first + ":" + second + will match C{"1:1"}, but not C{"1:2"}. Because this matches by + expressions, will I{not} match the leading C{"1:1"} in C{"1:10"}; + the expressions are evaluated first, and then compared, so + C{"1"} is compared with C{"10"}. + Do I{not} use with packrat parsing enabled. + """ + rep = Forward() + e2 = expr.copy() + rep <<= e2 + def copyTokenToRepeater(s,l,t): + matchTokens = _flatten(t.asList()) + def mustMatchTheseTokens(s,l,t): + theseTokens = _flatten(t.asList()) + if theseTokens != matchTokens: + raise ParseException("",0,"") + rep.setParseAction( mustMatchTheseTokens, callDuringTry=True ) + expr.addParseAction(copyTokenToRepeater, callDuringTry=True) + rep.setName('(prev) ' + _ustr(expr)) + return rep + +def _escapeRegexRangeChars(s): + #~ escape these chars: ^-] + for c in r"\^-]": + s = s.replace(c,_bslash+c) + s = s.replace("\n",r"\n") + s = s.replace("\t",r"\t") + return _ustr(s) + +def oneOf( strs, caseless=False, useRegex=True ): + """ + Helper to quickly define a set of alternative Literals, and makes sure to do + longest-first testing when there is a conflict, regardless of the input order, + but returns a C{L{MatchFirst}} for best performance. + + Parameters: + - strs - a string of space-delimited literals, or a collection of string literals + - caseless - (default=C{False}) - treat all literals as caseless + - useRegex - (default=C{True}) - as an optimization, will generate a Regex + object; otherwise, will generate a C{MatchFirst} object (if C{caseless=True}, or + if creating a C{Regex} raises an exception) + + Example:: + comp_oper = oneOf("< = > <= >= !=") + var = Word(alphas) + number = Word(nums) + term = var | number + comparison_expr = term + comp_oper + term + print(comparison_expr.searchString("B = 12 AA=23 B<=AA AA>12")) + prints:: + [['B', '=', '12'], ['AA', '=', '23'], ['B', '<=', 'AA'], ['AA', '>', '12']] + """ + if caseless: + isequal = ( lambda a,b: a.upper() == b.upper() ) + masks = ( lambda a,b: b.upper().startswith(a.upper()) ) + parseElementClass = CaselessLiteral + else: + isequal = ( lambda a,b: a == b ) + masks = ( lambda a,b: b.startswith(a) ) + parseElementClass = Literal + + symbols = [] + if isinstance(strs,basestring): + symbols = strs.split() + elif isinstance(strs, Iterable): + symbols = list(strs) + else: + warnings.warn("Invalid argument to oneOf, expected string or iterable", + SyntaxWarning, stacklevel=2) + if not symbols: + return NoMatch() + + i = 0 + while i < len(symbols)-1: + cur = symbols[i] + for j,other in enumerate(symbols[i+1:]): + if ( isequal(other, cur) ): + del symbols[i+j+1] + break + elif ( masks(cur, other) ): + del symbols[i+j+1] + symbols.insert(i,other) + cur = other + break + else: + i += 1 + + if not caseless and useRegex: + #~ print (strs,"->", "|".join( [ _escapeRegexChars(sym) for sym in symbols] )) + try: + if len(symbols)==len("".join(symbols)): + return Regex( "[%s]" % "".join(_escapeRegexRangeChars(sym) for sym in symbols) ).setName(' | '.join(symbols)) + else: + return Regex( "|".join(re.escape(sym) for sym in symbols) ).setName(' | '.join(symbols)) + except Exception: + warnings.warn("Exception creating Regex for oneOf, building MatchFirst", + SyntaxWarning, stacklevel=2) + + + # last resort, just use MatchFirst + return MatchFirst(parseElementClass(sym) for sym in symbols).setName(' | '.join(symbols)) + +def dictOf( key, value ): + """ + Helper to easily and clearly define a dictionary by specifying the respective patterns + for the key and value. Takes care of defining the C{L{Dict}}, C{L{ZeroOrMore}}, and C{L{Group}} tokens + in the proper order. The key pattern can include delimiting markers or punctuation, + as long as they are suppressed, thereby leaving the significant key text. The value + pattern can include named results, so that the C{Dict} results can include named token + fields. + + Example:: + text = "shape: SQUARE posn: upper left color: light blue texture: burlap" + attr_expr = (label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join)) + print(OneOrMore(attr_expr).parseString(text).dump()) + + attr_label = label + attr_value = Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join) + + # similar to Dict, but simpler call format + result = dictOf(attr_label, attr_value).parseString(text) + print(result.dump()) + print(result['shape']) + print(result.shape) # object attribute access works too + print(result.asDict()) + prints:: + [['shape', 'SQUARE'], ['posn', 'upper left'], ['color', 'light blue'], ['texture', 'burlap']] + - color: light blue + - posn: upper left + - shape: SQUARE + - texture: burlap + SQUARE + SQUARE + {'color': 'light blue', 'shape': 'SQUARE', 'posn': 'upper left', 'texture': 'burlap'} + """ + return Dict( ZeroOrMore( Group ( key + value ) ) ) + +def originalTextFor(expr, asString=True): + """ + Helper to return the original, untokenized text for a given expression. Useful to + restore the parsed fields of an HTML start tag into the raw tag text itself, or to + revert separate tokens with intervening whitespace back to the original matching + input text. By default, returns astring containing the original parsed text. + + If the optional C{asString} argument is passed as C{False}, then the return value is a + C{L{ParseResults}} containing any results names that were originally matched, and a + single token containing the original matched text from the input string. So if + the expression passed to C{L{originalTextFor}} contains expressions with defined + results names, you must set C{asString} to C{False} if you want to preserve those + results name values. + + Example:: + src = "this is test <b> bold <i>text</i> </b> normal text " + for tag in ("b","i"): + opener,closer = makeHTMLTags(tag) + patt = originalTextFor(opener + SkipTo(closer) + closer) + print(patt.searchString(src)[0]) + prints:: + ['<b> bold <i>text</i> </b>'] + ['<i>text</i>'] + """ + locMarker = Empty().setParseAction(lambda s,loc,t: loc) + endlocMarker = locMarker.copy() + endlocMarker.callPreparse = False + matchExpr = locMarker("_original_start") + expr + endlocMarker("_original_end") + if asString: + extractText = lambda s,l,t: s[t._original_start:t._original_end] + else: + def extractText(s,l,t): + t[:] = [s[t.pop('_original_start'):t.pop('_original_end')]] + matchExpr.setParseAction(extractText) + matchExpr.ignoreExprs = expr.ignoreExprs + return matchExpr + +def ungroup(expr): + """ + Helper to undo pyparsing's default grouping of And expressions, even + if all but one are non-empty. + """ + return TokenConverter(expr).setParseAction(lambda t:t[0]) + +def locatedExpr(expr): + """ + Helper to decorate a returned token with its starting and ending locations in the input string. + This helper adds the following results names: + - locn_start = location where matched expression begins + - locn_end = location where matched expression ends + - value = the actual parsed results + + Be careful if the input text contains C{<TAB>} characters, you may want to call + C{L{ParserElement.parseWithTabs}} + + Example:: + wd = Word(alphas) + for match in locatedExpr(wd).searchString("ljsdf123lksdjjf123lkkjj1222"): + print(match) + prints:: + [[0, 'ljsdf', 5]] + [[8, 'lksdjjf', 15]] + [[18, 'lkkjj', 23]] + """ + locator = Empty().setParseAction(lambda s,l,t: l) + return Group(locator("locn_start") + expr("value") + locator.copy().leaveWhitespace()("locn_end")) + + +# convenience constants for positional expressions +empty = Empty().setName("empty") +lineStart = LineStart().setName("lineStart") +lineEnd = LineEnd().setName("lineEnd") +stringStart = StringStart().setName("stringStart") +stringEnd = StringEnd().setName("stringEnd") + +_escapedPunc = Word( _bslash, r"\[]-*.$+^?()~ ", exact=2 ).setParseAction(lambda s,l,t:t[0][1]) +_escapedHexChar = Regex(r"\\0?[xX][0-9a-fA-F]+").setParseAction(lambda s,l,t:unichr(int(t[0].lstrip(r'\0x'),16))) +_escapedOctChar = Regex(r"\\0[0-7]+").setParseAction(lambda s,l,t:unichr(int(t[0][1:],8))) +_singleChar = _escapedPunc | _escapedHexChar | _escapedOctChar | CharsNotIn(r'\]', exact=1) +_charRange = Group(_singleChar + Suppress("-") + _singleChar) +_reBracketExpr = Literal("[") + Optional("^").setResultsName("negate") + Group( OneOrMore( _charRange | _singleChar ) ).setResultsName("body") + "]" + +def srange(s): + r""" + Helper to easily define string ranges for use in Word construction. Borrows + syntax from regexp '[]' string range definitions:: + srange("[0-9]") -> "0123456789" + srange("[a-z]") -> "abcdefghijklmnopqrstuvwxyz" + srange("[a-z$_]") -> "abcdefghijklmnopqrstuvwxyz$_" + The input string must be enclosed in []'s, and the returned string is the expanded + character set joined into a single string. + The values enclosed in the []'s may be: + - a single character + - an escaped character with a leading backslash (such as C{\-} or C{\]}) + - an escaped hex character with a leading C{'\x'} (C{\x21}, which is a C{'!'} character) + (C{\0x##} is also supported for backwards compatibility) + - an escaped octal character with a leading C{'\0'} (C{\041}, which is a C{'!'} character) + - a range of any of the above, separated by a dash (C{'a-z'}, etc.) + - any combination of the above (C{'aeiouy'}, C{'a-zA-Z0-9_$'}, etc.) + """ + _expanded = lambda p: p if not isinstance(p,ParseResults) else ''.join(unichr(c) for c in range(ord(p[0]),ord(p[1])+1)) + try: + return "".join(_expanded(part) for part in _reBracketExpr.parseString(s).body) + except Exception: + return "" + +def matchOnlyAtCol(n): + """ + Helper method for defining parse actions that require matching at a specific + column in the input text. + """ + def verifyCol(strg,locn,toks): + if col(locn,strg) != n: + raise ParseException(strg,locn,"matched token not at column %d" % n) + return verifyCol + +def replaceWith(replStr): + """ + Helper method for common parse actions that simply return a literal value. Especially + useful when used with C{L{transformString<ParserElement.transformString>}()}. + + Example:: + num = Word(nums).setParseAction(lambda toks: int(toks[0])) + na = oneOf("N/A NA").setParseAction(replaceWith(math.nan)) + term = na | num + + OneOrMore(term).parseString("324 234 N/A 234") # -> [324, 234, nan, 234] + """ + return lambda s,l,t: [replStr] + +def removeQuotes(s,l,t): + """ + Helper parse action for removing quotation marks from parsed quoted strings. + + Example:: + # by default, quotation marks are included in parsed results + quotedString.parseString("'Now is the Winter of our Discontent'") # -> ["'Now is the Winter of our Discontent'"] + + # use removeQuotes to strip quotation marks from parsed results + quotedString.setParseAction(removeQuotes) + quotedString.parseString("'Now is the Winter of our Discontent'") # -> ["Now is the Winter of our Discontent"] + """ + return t[0][1:-1] + +def tokenMap(func, *args): + """ + Helper to define a parse action by mapping a function to all elements of a ParseResults list.If any additional + args are passed, they are forwarded to the given function as additional arguments after + the token, as in C{hex_integer = Word(hexnums).setParseAction(tokenMap(int, 16))}, which will convert the + parsed data to an integer using base 16. + + Example (compare the last to example in L{ParserElement.transformString}:: + hex_ints = OneOrMore(Word(hexnums)).setParseAction(tokenMap(int, 16)) + hex_ints.runTests(''' + 00 11 22 aa FF 0a 0d 1a + ''') + + upperword = Word(alphas).setParseAction(tokenMap(str.upper)) + OneOrMore(upperword).runTests(''' + my kingdom for a horse + ''') + + wd = Word(alphas).setParseAction(tokenMap(str.title)) + OneOrMore(wd).setParseAction(' '.join).runTests(''' + now is the winter of our discontent made glorious summer by this sun of york + ''') + prints:: + 00 11 22 aa FF 0a 0d 1a + [0, 17, 34, 170, 255, 10, 13, 26] + + my kingdom for a horse + ['MY', 'KINGDOM', 'FOR', 'A', 'HORSE'] + + now is the winter of our discontent made glorious summer by this sun of york + ['Now Is The Winter Of Our Discontent Made Glorious Summer By This Sun Of York'] + """ + def pa(s,l,t): + return [func(tokn, *args) for tokn in t] + + try: + func_name = getattr(func, '__name__', + getattr(func, '__class__').__name__) + except Exception: + func_name = str(func) + pa.__name__ = func_name + + return pa + +upcaseTokens = tokenMap(lambda t: _ustr(t).upper()) +"""(Deprecated) Helper parse action to convert tokens to upper case. Deprecated in favor of L{pyparsing_common.upcaseTokens}""" + +downcaseTokens = tokenMap(lambda t: _ustr(t).lower()) +"""(Deprecated) Helper parse action to convert tokens to lower case. Deprecated in favor of L{pyparsing_common.downcaseTokens}""" + +def _makeTags(tagStr, xml): + """Internal helper to construct opening and closing tag expressions, given a tag name""" + if isinstance(tagStr,basestring): + resname = tagStr + tagStr = Keyword(tagStr, caseless=not xml) + else: + resname = tagStr.name + + tagAttrName = Word(alphas,alphanums+"_-:") + if (xml): + tagAttrValue = dblQuotedString.copy().setParseAction( removeQuotes ) + openTag = Suppress("<") + tagStr("tag") + \ + Dict(ZeroOrMore(Group( tagAttrName + Suppress("=") + tagAttrValue ))) + \ + Optional("/",default=[False]).setResultsName("empty").setParseAction(lambda s,l,t:t[0]=='/') + Suppress(">") + else: + printablesLessRAbrack = "".join(c for c in printables if c not in ">") + tagAttrValue = quotedString.copy().setParseAction( removeQuotes ) | Word(printablesLessRAbrack) + openTag = Suppress("<") + tagStr("tag") + \ + Dict(ZeroOrMore(Group( tagAttrName.setParseAction(downcaseTokens) + \ + Optional( Suppress("=") + tagAttrValue ) ))) + \ + Optional("/",default=[False]).setResultsName("empty").setParseAction(lambda s,l,t:t[0]=='/') + Suppress(">") + closeTag = Combine(_L("</") + tagStr + ">") + + openTag = openTag.setResultsName("start"+"".join(resname.replace(":"," ").title().split())).setName("<%s>" % resname) + closeTag = closeTag.setResultsName("end"+"".join(resname.replace(":"," ").title().split())).setName("</%s>" % resname) + openTag.tag = resname + closeTag.tag = resname + return openTag, closeTag + +def makeHTMLTags(tagStr): + """ + Helper to construct opening and closing tag expressions for HTML, given a tag name. Matches + tags in either upper or lower case, attributes with namespaces and with quoted or unquoted values. + + Example:: + text = '<td>More info at the <a href="http://pyparsing.wikispaces.com">pyparsing</a> wiki page</td>' + # makeHTMLTags returns pyparsing expressions for the opening and closing tags as a 2-tuple + a,a_end = makeHTMLTags("A") + link_expr = a + SkipTo(a_end)("link_text") + a_end + + for link in link_expr.searchString(text): + # attributes in the <A> tag (like "href" shown here) are also accessible as named results + print(link.link_text, '->', link.href) + prints:: + pyparsing -> http://pyparsing.wikispaces.com + """ + return _makeTags( tagStr, False ) + +def makeXMLTags(tagStr): + """ + Helper to construct opening and closing tag expressions for XML, given a tag name. Matches + tags only in the given upper/lower case. + + Example: similar to L{makeHTMLTags} + """ + return _makeTags( tagStr, True ) + +def withAttribute(*args,**attrDict): + """ + Helper to create a validating parse action to be used with start tags created + with C{L{makeXMLTags}} or C{L{makeHTMLTags}}. Use C{withAttribute} to qualify a starting tag + with a required attribute value, to avoid false matches on common tags such as + C{<TD>} or C{<DIV>}. + + Call C{withAttribute} with a series of attribute names and values. Specify the list + of filter attributes names and values as: + - keyword arguments, as in C{(align="right")}, or + - as an explicit dict with C{**} operator, when an attribute name is also a Python + reserved word, as in C{**{"class":"Customer", "align":"right"}} + - a list of name-value tuples, as in ( ("ns1:class", "Customer"), ("ns2:align","right") ) + For attribute names with a namespace prefix, you must use the second form. Attribute + names are matched insensitive to upper/lower case. + + If just testing for C{class} (with or without a namespace), use C{L{withClass}}. + + To verify that the attribute exists, but without specifying a value, pass + C{withAttribute.ANY_VALUE} as the value. + + Example:: + html = ''' + <div> + Some text + <div type="grid">1 4 0 1 0</div> + <div type="graph">1,3 2,3 1,1</div> + <div>this has no type</div> + </div> + + ''' + div,div_end = makeHTMLTags("div") + + # only match div tag having a type attribute with value "grid" + div_grid = div().setParseAction(withAttribute(type="grid")) + grid_expr = div_grid + SkipTo(div | div_end)("body") + for grid_header in grid_expr.searchString(html): + print(grid_header.body) + + # construct a match with any div tag having a type attribute, regardless of the value + div_any_type = div().setParseAction(withAttribute(type=withAttribute.ANY_VALUE)) + div_expr = div_any_type + SkipTo(div | div_end)("body") + for div_header in div_expr.searchString(html): + print(div_header.body) + prints:: + 1 4 0 1 0 + + 1 4 0 1 0 + 1,3 2,3 1,1 + """ + if args: + attrs = args[:] + else: + attrs = attrDict.items() + attrs = [(k,v) for k,v in attrs] + def pa(s,l,tokens): + for attrName,attrValue in attrs: + if attrName not in tokens: + raise ParseException(s,l,"no matching attribute " + attrName) + if attrValue != withAttribute.ANY_VALUE and tokens[attrName] != attrValue: + raise ParseException(s,l,"attribute '%s' has value '%s', must be '%s'" % + (attrName, tokens[attrName], attrValue)) + return pa +withAttribute.ANY_VALUE = object() + +def withClass(classname, namespace=''): + """ + Simplified version of C{L{withAttribute}} when matching on a div class - made + difficult because C{class} is a reserved word in Python. + + Example:: + html = ''' + <div> + Some text + <div class="grid">1 4 0 1 0</div> + <div class="graph">1,3 2,3 1,1</div> + <div>this <div> has no class</div> + </div> + + ''' + div,div_end = makeHTMLTags("div") + div_grid = div().setParseAction(withClass("grid")) + + grid_expr = div_grid + SkipTo(div | div_end)("body") + for grid_header in grid_expr.searchString(html): + print(grid_header.body) + + div_any_type = div().setParseAction(withClass(withAttribute.ANY_VALUE)) + div_expr = div_any_type + SkipTo(div | div_end)("body") + for div_header in div_expr.searchString(html): + print(div_header.body) + prints:: + 1 4 0 1 0 + + 1 4 0 1 0 + 1,3 2,3 1,1 + """ + classattr = "%s:class" % namespace if namespace else "class" + return withAttribute(**{classattr : classname}) + +opAssoc = _Constants() +opAssoc.LEFT = object() +opAssoc.RIGHT = object() + +def infixNotation( baseExpr, opList, lpar=Suppress('('), rpar=Suppress(')') ): + """ + Helper method for constructing grammars of expressions made up of + operators working in a precedence hierarchy. Operators may be unary or + binary, left- or right-associative. Parse actions can also be attached + to operator expressions. The generated parser will also recognize the use + of parentheses to override operator precedences (see example below). + + Note: if you define a deep operator list, you may see performance issues + when using infixNotation. See L{ParserElement.enablePackrat} for a + mechanism to potentially improve your parser performance. + + Parameters: + - baseExpr - expression representing the most basic element for the nested + - opList - list of tuples, one for each operator precedence level in the + expression grammar; each tuple is of the form + (opExpr, numTerms, rightLeftAssoc, parseAction), where: + - opExpr is the pyparsing expression for the operator; + may also be a string, which will be converted to a Literal; + if numTerms is 3, opExpr is a tuple of two expressions, for the + two operators separating the 3 terms + - numTerms is the number of terms for this operator (must + be 1, 2, or 3) + - rightLeftAssoc is the indicator whether the operator is + right or left associative, using the pyparsing-defined + constants C{opAssoc.RIGHT} and C{opAssoc.LEFT}. + - parseAction is the parse action to be associated with + expressions matching this operator expression (the + parse action tuple member may be omitted); if the parse action + is passed a tuple or list of functions, this is equivalent to + calling C{setParseAction(*fn)} (L{ParserElement.setParseAction}) + - lpar - expression for matching left-parentheses (default=C{Suppress('(')}) + - rpar - expression for matching right-parentheses (default=C{Suppress(')')}) + + Example:: + # simple example of four-function arithmetic with ints and variable names + integer = pyparsing_common.signed_integer + varname = pyparsing_common.identifier + + arith_expr = infixNotation(integer | varname, + [ + ('-', 1, opAssoc.RIGHT), + (oneOf('* /'), 2, opAssoc.LEFT), + (oneOf('+ -'), 2, opAssoc.LEFT), + ]) + + arith_expr.runTests(''' + 5+3*6 + (5+3)*6 + -2--11 + ''', fullDump=False) + prints:: + 5+3*6 + [[5, '+', [3, '*', 6]]] + + (5+3)*6 + [[[5, '+', 3], '*', 6]] + + -2--11 + [[['-', 2], '-', ['-', 11]]] + """ + ret = Forward() + lastExpr = baseExpr | ( lpar + ret + rpar ) + for i,operDef in enumerate(opList): + opExpr,arity,rightLeftAssoc,pa = (operDef + (None,))[:4] + termName = "%s term" % opExpr if arity < 3 else "%s%s term" % opExpr + if arity == 3: + if opExpr is None or len(opExpr) != 2: + raise ValueError("if numterms=3, opExpr must be a tuple or list of two expressions") + opExpr1, opExpr2 = opExpr + thisExpr = Forward().setName(termName) + if rightLeftAssoc == opAssoc.LEFT: + if arity == 1: + matchExpr = FollowedBy(lastExpr + opExpr) + Group( lastExpr + OneOrMore( opExpr ) ) + elif arity == 2: + if opExpr is not None: + matchExpr = FollowedBy(lastExpr + opExpr + lastExpr) + Group( lastExpr + OneOrMore( opExpr + lastExpr ) ) + else: + matchExpr = FollowedBy(lastExpr+lastExpr) + Group( lastExpr + OneOrMore(lastExpr) ) + elif arity == 3: + matchExpr = FollowedBy(lastExpr + opExpr1 + lastExpr + opExpr2 + lastExpr) + \ + Group( lastExpr + opExpr1 + lastExpr + opExpr2 + lastExpr ) + else: + raise ValueError("operator must be unary (1), binary (2), or ternary (3)") + elif rightLeftAssoc == opAssoc.RIGHT: + if arity == 1: + # try to avoid LR with this extra test + if not isinstance(opExpr, Optional): + opExpr = Optional(opExpr) + matchExpr = FollowedBy(opExpr.expr + thisExpr) + Group( opExpr + thisExpr ) + elif arity == 2: + if opExpr is not None: + matchExpr = FollowedBy(lastExpr + opExpr + thisExpr) + Group( lastExpr + OneOrMore( opExpr + thisExpr ) ) + else: + matchExpr = FollowedBy(lastExpr + thisExpr) + Group( lastExpr + OneOrMore( thisExpr ) ) + elif arity == 3: + matchExpr = FollowedBy(lastExpr + opExpr1 + thisExpr + opExpr2 + thisExpr) + \ + Group( lastExpr + opExpr1 + thisExpr + opExpr2 + thisExpr ) + else: + raise ValueError("operator must be unary (1), binary (2), or ternary (3)") + else: + raise ValueError("operator must indicate right or left associativity") + if pa: + if isinstance(pa, (tuple, list)): + matchExpr.setParseAction(*pa) + else: + matchExpr.setParseAction(pa) + thisExpr <<= ( matchExpr.setName(termName) | lastExpr ) + lastExpr = thisExpr + ret <<= lastExpr + return ret + +operatorPrecedence = infixNotation +"""(Deprecated) Former name of C{L{infixNotation}}, will be dropped in a future release.""" + +dblQuotedString = Combine(Regex(r'"(?:[^"\n\r\\]|(?:"")|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*')+'"').setName("string enclosed in double quotes") +sglQuotedString = Combine(Regex(r"'(?:[^'\n\r\\]|(?:'')|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*")+"'").setName("string enclosed in single quotes") +quotedString = Combine(Regex(r'"(?:[^"\n\r\\]|(?:"")|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*')+'"'| + Regex(r"'(?:[^'\n\r\\]|(?:'')|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*")+"'").setName("quotedString using single or double quotes") +unicodeString = Combine(_L('u') + quotedString.copy()).setName("unicode string literal") + +def nestedExpr(opener="(", closer=")", content=None, ignoreExpr=quotedString.copy()): + """ + Helper method for defining nested lists enclosed in opening and closing + delimiters ("(" and ")" are the default). + + Parameters: + - opener - opening character for a nested list (default=C{"("}); can also be a pyparsing expression + - closer - closing character for a nested list (default=C{")"}); can also be a pyparsing expression + - content - expression for items within the nested lists (default=C{None}) + - ignoreExpr - expression for ignoring opening and closing delimiters (default=C{quotedString}) + + If an expression is not provided for the content argument, the nested + expression will capture all whitespace-delimited content between delimiters + as a list of separate values. + + Use the C{ignoreExpr} argument to define expressions that may contain + opening or closing characters that should not be treated as opening + or closing characters for nesting, such as quotedString or a comment + expression. Specify multiple expressions using an C{L{Or}} or C{L{MatchFirst}}. + The default is L{quotedString}, but if no expressions are to be ignored, + then pass C{None} for this argument. + + Example:: + data_type = oneOf("void int short long char float double") + decl_data_type = Combine(data_type + Optional(Word('*'))) + ident = Word(alphas+'_', alphanums+'_') + number = pyparsing_common.number + arg = Group(decl_data_type + ident) + LPAR,RPAR = map(Suppress, "()") + + code_body = nestedExpr('{', '}', ignoreExpr=(quotedString | cStyleComment)) + + c_function = (decl_data_type("type") + + ident("name") + + LPAR + Optional(delimitedList(arg), [])("args") + RPAR + + code_body("body")) + c_function.ignore(cStyleComment) + + source_code = ''' + int is_odd(int x) { + return (x%2); + } + + int dec_to_hex(char hchar) { + if (hchar >= '0' && hchar <= '9') { + return (ord(hchar)-ord('0')); + } else { + return (10+ord(hchar)-ord('A')); + } + } + ''' + for func in c_function.searchString(source_code): + print("%(name)s (%(type)s) args: %(args)s" % func) + + prints:: + is_odd (int) args: [['int', 'x']] + dec_to_hex (int) args: [['char', 'hchar']] + """ + if opener == closer: + raise ValueError("opening and closing strings cannot be the same") + if content is None: + if isinstance(opener,basestring) and isinstance(closer,basestring): + if len(opener) == 1 and len(closer)==1: + if ignoreExpr is not None: + content = (Combine(OneOrMore(~ignoreExpr + + CharsNotIn(opener+closer+ParserElement.DEFAULT_WHITE_CHARS,exact=1)) + ).setParseAction(lambda t:t[0].strip())) + else: + content = (empty.copy()+CharsNotIn(opener+closer+ParserElement.DEFAULT_WHITE_CHARS + ).setParseAction(lambda t:t[0].strip())) + else: + if ignoreExpr is not None: + content = (Combine(OneOrMore(~ignoreExpr + + ~Literal(opener) + ~Literal(closer) + + CharsNotIn(ParserElement.DEFAULT_WHITE_CHARS,exact=1)) + ).setParseAction(lambda t:t[0].strip())) + else: + content = (Combine(OneOrMore(~Literal(opener) + ~Literal(closer) + + CharsNotIn(ParserElement.DEFAULT_WHITE_CHARS,exact=1)) + ).setParseAction(lambda t:t[0].strip())) + else: + raise ValueError("opening and closing arguments must be strings if no content expression is given") + ret = Forward() + if ignoreExpr is not None: + ret <<= Group( Suppress(opener) + ZeroOrMore( ignoreExpr | ret | content ) + Suppress(closer) ) + else: + ret <<= Group( Suppress(opener) + ZeroOrMore( ret | content ) + Suppress(closer) ) + ret.setName('nested %s%s expression' % (opener,closer)) + return ret + +def indentedBlock(blockStatementExpr, indentStack, indent=True): + """ + Helper method for defining space-delimited indentation blocks, such as + those used to define block statements in Python source code. + + Parameters: + - blockStatementExpr - expression defining syntax of statement that + is repeated within the indented block + - indentStack - list created by caller to manage indentation stack + (multiple statementWithIndentedBlock expressions within a single grammar + should share a common indentStack) + - indent - boolean indicating whether block must be indented beyond the + the current level; set to False for block of left-most statements + (default=C{True}) + + A valid block must contain at least one C{blockStatement}. + + Example:: + data = ''' + def A(z): + A1 + B = 100 + G = A2 + A2 + A3 + B + def BB(a,b,c): + BB1 + def BBA(): + bba1 + bba2 + bba3 + C + D + def spam(x,y): + def eggs(z): + pass + ''' + + + indentStack = [1] + stmt = Forward() + + identifier = Word(alphas, alphanums) + funcDecl = ("def" + identifier + Group( "(" + Optional( delimitedList(identifier) ) + ")" ) + ":") + func_body = indentedBlock(stmt, indentStack) + funcDef = Group( funcDecl + func_body ) + + rvalue = Forward() + funcCall = Group(identifier + "(" + Optional(delimitedList(rvalue)) + ")") + rvalue << (funcCall | identifier | Word(nums)) + assignment = Group(identifier + "=" + rvalue) + stmt << ( funcDef | assignment | identifier ) + + module_body = OneOrMore(stmt) + + parseTree = module_body.parseString(data) + parseTree.pprint() + prints:: + [['def', + 'A', + ['(', 'z', ')'], + ':', + [['A1'], [['B', '=', '100']], [['G', '=', 'A2']], ['A2'], ['A3']]], + 'B', + ['def', + 'BB', + ['(', 'a', 'b', 'c', ')'], + ':', + [['BB1'], [['def', 'BBA', ['(', ')'], ':', [['bba1'], ['bba2'], ['bba3']]]]]], + 'C', + 'D', + ['def', + 'spam', + ['(', 'x', 'y', ')'], + ':', + [[['def', 'eggs', ['(', 'z', ')'], ':', [['pass']]]]]]] + """ + def checkPeerIndent(s,l,t): + if l >= len(s): return + curCol = col(l,s) + if curCol != indentStack[-1]: + if curCol > indentStack[-1]: + raise ParseFatalException(s,l,"illegal nesting") + raise ParseException(s,l,"not a peer entry") + + def checkSubIndent(s,l,t): + curCol = col(l,s) + if curCol > indentStack[-1]: + indentStack.append( curCol ) + else: + raise ParseException(s,l,"not a subentry") + + def checkUnindent(s,l,t): + if l >= len(s): return + curCol = col(l,s) + if not(indentStack and curCol < indentStack[-1] and curCol <= indentStack[-2]): + raise ParseException(s,l,"not an unindent") + indentStack.pop() + + NL = OneOrMore(LineEnd().setWhitespaceChars("\t ").suppress()) + INDENT = (Empty() + Empty().setParseAction(checkSubIndent)).setName('INDENT') + PEER = Empty().setParseAction(checkPeerIndent).setName('') + UNDENT = Empty().setParseAction(checkUnindent).setName('UNINDENT') + if indent: + smExpr = Group( Optional(NL) + + #~ FollowedBy(blockStatementExpr) + + INDENT + (OneOrMore( PEER + Group(blockStatementExpr) + Optional(NL) )) + UNDENT) + else: + smExpr = Group( Optional(NL) + + (OneOrMore( PEER + Group(blockStatementExpr) + Optional(NL) )) ) + blockStatementExpr.ignore(_bslash + LineEnd()) + return smExpr.setName('indented block') + +alphas8bit = srange(r"[\0xc0-\0xd6\0xd8-\0xf6\0xf8-\0xff]") +punc8bit = srange(r"[\0xa1-\0xbf\0xd7\0xf7]") + +anyOpenTag,anyCloseTag = makeHTMLTags(Word(alphas,alphanums+"_:").setName('any tag')) +_htmlEntityMap = dict(zip("gt lt amp nbsp quot apos".split(),'><& "\'')) +commonHTMLEntity = Regex('&(?P<entity>' + '|'.join(_htmlEntityMap.keys()) +");").setName("common HTML entity") +def replaceHTMLEntity(t): + """Helper parser action to replace common HTML entities with their special characters""" + return _htmlEntityMap.get(t.entity) + +# it's easy to get these comment structures wrong - they're very common, so may as well make them available +cStyleComment = Combine(Regex(r"/\*(?:[^*]|\*(?!/))*") + '*/').setName("C style comment") +"Comment of the form C{/* ... */}" + +htmlComment = Regex(r"<!--[\s\S]*?-->").setName("HTML comment") +"Comment of the form C{<!-- ... -->}" + +restOfLine = Regex(r".*").leaveWhitespace().setName("rest of line") +dblSlashComment = Regex(r"//(?:\\\n|[^\n])*").setName("// comment") +"Comment of the form C{// ... (to end of line)}" + +cppStyleComment = Combine(Regex(r"/\*(?:[^*]|\*(?!/))*") + '*/'| dblSlashComment).setName("C++ style comment") +"Comment of either form C{L{cStyleComment}} or C{L{dblSlashComment}}" + +javaStyleComment = cppStyleComment +"Same as C{L{cppStyleComment}}" + +pythonStyleComment = Regex(r"#.*").setName("Python style comment") +"Comment of the form C{# ... (to end of line)}" + +_commasepitem = Combine(OneOrMore(Word(printables, excludeChars=',') + + Optional( Word(" \t") + + ~Literal(",") + ~LineEnd() ) ) ).streamline().setName("commaItem") +commaSeparatedList = delimitedList( Optional( quotedString.copy() | _commasepitem, default="") ).setName("commaSeparatedList") +"""(Deprecated) Predefined expression of 1 or more printable words or quoted strings, separated by commas. + This expression is deprecated in favor of L{pyparsing_common.comma_separated_list}.""" + +# some other useful expressions - using lower-case class name since we are really using this as a namespace +class pyparsing_common: + """ + Here are some common low-level expressions that may be useful in jump-starting parser development: + - numeric forms (L{integers<integer>}, L{reals<real>}, L{scientific notation<sci_real>}) + - common L{programming identifiers<identifier>} + - network addresses (L{MAC<mac_address>}, L{IPv4<ipv4_address>}, L{IPv6<ipv6_address>}) + - ISO8601 L{dates<iso8601_date>} and L{datetime<iso8601_datetime>} + - L{UUID<uuid>} + - L{comma-separated list<comma_separated_list>} + Parse actions: + - C{L{convertToInteger}} + - C{L{convertToFloat}} + - C{L{convertToDate}} + - C{L{convertToDatetime}} + - C{L{stripHTMLTags}} + - C{L{upcaseTokens}} + - C{L{downcaseTokens}} + + Example:: + pyparsing_common.number.runTests(''' + # any int or real number, returned as the appropriate type + 100 + -100 + +100 + 3.14159 + 6.02e23 + 1e-12 + ''') + + pyparsing_common.fnumber.runTests(''' + # any int or real number, returned as float + 100 + -100 + +100 + 3.14159 + 6.02e23 + 1e-12 + ''') + + pyparsing_common.hex_integer.runTests(''' + # hex numbers + 100 + FF + ''') + + pyparsing_common.fraction.runTests(''' + # fractions + 1/2 + -3/4 + ''') + + pyparsing_common.mixed_integer.runTests(''' + # mixed fractions + 1 + 1/2 + -3/4 + 1-3/4 + ''') + + import uuid + pyparsing_common.uuid.setParseAction(tokenMap(uuid.UUID)) + pyparsing_common.uuid.runTests(''' + # uuid + 12345678-1234-5678-1234-567812345678 + ''') + prints:: + # any int or real number, returned as the appropriate type + 100 + [100] + + -100 + [-100] + + +100 + [100] + + 3.14159 + [3.14159] + + 6.02e23 + [6.02e+23] + + 1e-12 + [1e-12] + + # any int or real number, returned as float + 100 + [100.0] + + -100 + [-100.0] + + +100 + [100.0] + + 3.14159 + [3.14159] + + 6.02e23 + [6.02e+23] + + 1e-12 + [1e-12] + + # hex numbers + 100 + [256] + + FF + [255] + + # fractions + 1/2 + [0.5] + + -3/4 + [-0.75] + + # mixed fractions + 1 + [1] + + 1/2 + [0.5] + + -3/4 + [-0.75] + + 1-3/4 + [1.75] + + # uuid + 12345678-1234-5678-1234-567812345678 + [UUID('12345678-1234-5678-1234-567812345678')] + """ + + convertToInteger = tokenMap(int) + """ + Parse action for converting parsed integers to Python int + """ + + convertToFloat = tokenMap(float) + """ + Parse action for converting parsed numbers to Python float + """ + + integer = Word(nums).setName("integer").setParseAction(convertToInteger) + """expression that parses an unsigned integer, returns an int""" + + hex_integer = Word(hexnums).setName("hex integer").setParseAction(tokenMap(int,16)) + """expression that parses a hexadecimal integer, returns an int""" + + signed_integer = Regex(r'[+-]?\d+').setName("signed integer").setParseAction(convertToInteger) + """expression that parses an integer with optional leading sign, returns an int""" + + fraction = (signed_integer().setParseAction(convertToFloat) + '/' + signed_integer().setParseAction(convertToFloat)).setName("fraction") + """fractional expression of an integer divided by an integer, returns a float""" + fraction.addParseAction(lambda t: t[0]/t[-1]) + + mixed_integer = (fraction | signed_integer + Optional(Optional('-').suppress() + fraction)).setName("fraction or mixed integer-fraction") + """mixed integer of the form 'integer - fraction', with optional leading integer, returns float""" + mixed_integer.addParseAction(sum) + + real = Regex(r'[+-]?\d+\.\d*').setName("real number").setParseAction(convertToFloat) + """expression that parses a floating point number and returns a float""" + + sci_real = Regex(r'[+-]?\d+([eE][+-]?\d+|\.\d*([eE][+-]?\d+)?)').setName("real number with scientific notation").setParseAction(convertToFloat) + """expression that parses a floating point number with optional scientific notation and returns a float""" + + # streamlining this expression makes the docs nicer-looking + number = (sci_real | real | signed_integer).streamline() + """any numeric expression, returns the corresponding Python type""" + + fnumber = Regex(r'[+-]?\d+\.?\d*([eE][+-]?\d+)?').setName("fnumber").setParseAction(convertToFloat) + """any int or real number, returned as float""" + + identifier = Word(alphas+'_', alphanums+'_').setName("identifier") + """typical code identifier (leading alpha or '_', followed by 0 or more alphas, nums, or '_')""" + + ipv4_address = Regex(r'(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})(\.(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})){3}').setName("IPv4 address") + "IPv4 address (C{0.0.0.0 - 255.255.255.255})" + + _ipv6_part = Regex(r'[0-9a-fA-F]{1,4}').setName("hex_integer") + _full_ipv6_address = (_ipv6_part + (':' + _ipv6_part)*7).setName("full IPv6 address") + _short_ipv6_address = (Optional(_ipv6_part + (':' + _ipv6_part)*(0,6)) + "::" + Optional(_ipv6_part + (':' + _ipv6_part)*(0,6))).setName("short IPv6 address") + _short_ipv6_address.addCondition(lambda t: sum(1 for tt in t if pyparsing_common._ipv6_part.matches(tt)) < 8) + _mixed_ipv6_address = ("::ffff:" + ipv4_address).setName("mixed IPv6 address") + ipv6_address = Combine((_full_ipv6_address | _mixed_ipv6_address | _short_ipv6_address).setName("IPv6 address")).setName("IPv6 address") + "IPv6 address (long, short, or mixed form)" + + mac_address = Regex(r'[0-9a-fA-F]{2}([:.-])[0-9a-fA-F]{2}(?:\1[0-9a-fA-F]{2}){4}').setName("MAC address") + "MAC address xx:xx:xx:xx:xx (may also have '-' or '.' delimiters)" + + @staticmethod + def convertToDate(fmt="%Y-%m-%d"): + """ + Helper to create a parse action for converting parsed date string to Python datetime.date + + Params - + - fmt - format to be passed to datetime.strptime (default=C{"%Y-%m-%d"}) + + Example:: + date_expr = pyparsing_common.iso8601_date.copy() + date_expr.setParseAction(pyparsing_common.convertToDate()) + print(date_expr.parseString("1999-12-31")) + prints:: + [datetime.date(1999, 12, 31)] + """ + def cvt_fn(s,l,t): + try: + return datetime.strptime(t[0], fmt).date() + except ValueError as ve: + raise ParseException(s, l, str(ve)) + return cvt_fn + + @staticmethod + def convertToDatetime(fmt="%Y-%m-%dT%H:%M:%S.%f"): + """ + Helper to create a parse action for converting parsed datetime string to Python datetime.datetime + + Params - + - fmt - format to be passed to datetime.strptime (default=C{"%Y-%m-%dT%H:%M:%S.%f"}) + + Example:: + dt_expr = pyparsing_common.iso8601_datetime.copy() + dt_expr.setParseAction(pyparsing_common.convertToDatetime()) + print(dt_expr.parseString("1999-12-31T23:59:59.999")) + prints:: + [datetime.datetime(1999, 12, 31, 23, 59, 59, 999000)] + """ + def cvt_fn(s,l,t): + try: + return datetime.strptime(t[0], fmt) + except ValueError as ve: + raise ParseException(s, l, str(ve)) + return cvt_fn + + iso8601_date = Regex(r'(?P<year>\d{4})(?:-(?P<month>\d\d)(?:-(?P<day>\d\d))?)?').setName("ISO8601 date") + "ISO8601 date (C{yyyy-mm-dd})" + + iso8601_datetime = Regex(r'(?P<year>\d{4})-(?P<month>\d\d)-(?P<day>\d\d)[T ](?P<hour>\d\d):(?P<minute>\d\d)(:(?P<second>\d\d(\.\d*)?)?)?(?P<tz>Z|[+-]\d\d:?\d\d)?').setName("ISO8601 datetime") + "ISO8601 datetime (C{yyyy-mm-ddThh:mm:ss.s(Z|+-00:00)}) - trailing seconds, milliseconds, and timezone optional; accepts separating C{'T'} or C{' '}" + + uuid = Regex(r'[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}').setName("UUID") + "UUID (C{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx})" + + _html_stripper = anyOpenTag.suppress() | anyCloseTag.suppress() + @staticmethod + def stripHTMLTags(s, l, tokens): + """ + Parse action to remove HTML tags from web page HTML source + + Example:: + # strip HTML links from normal text + text = '<td>More info at the <a href="http://pyparsing.wikispaces.com">pyparsing</a> wiki page</td>' + td,td_end = makeHTMLTags("TD") + table_text = td + SkipTo(td_end).setParseAction(pyparsing_common.stripHTMLTags)("body") + td_end + + print(table_text.parseString(text).body) # -> 'More info at the pyparsing wiki page' + """ + return pyparsing_common._html_stripper.transformString(tokens[0]) + + _commasepitem = Combine(OneOrMore(~Literal(",") + ~LineEnd() + Word(printables, excludeChars=',') + + Optional( White(" \t") ) ) ).streamline().setName("commaItem") + comma_separated_list = delimitedList( Optional( quotedString.copy() | _commasepitem, default="") ).setName("comma separated list") + """Predefined expression of 1 or more printable words or quoted strings, separated by commas.""" + + upcaseTokens = staticmethod(tokenMap(lambda t: _ustr(t).upper())) + """Parse action to convert tokens to upper case.""" + + downcaseTokens = staticmethod(tokenMap(lambda t: _ustr(t).lower())) + """Parse action to convert tokens to lower case.""" + + +if __name__ == "__main__": + + selectToken = CaselessLiteral("select") + fromToken = CaselessLiteral("from") + + ident = Word(alphas, alphanums + "_$") + + columnName = delimitedList(ident, ".", combine=True).setParseAction(upcaseTokens) + columnNameList = Group(delimitedList(columnName)).setName("columns") + columnSpec = ('*' | columnNameList) + + tableName = delimitedList(ident, ".", combine=True).setParseAction(upcaseTokens) + tableNameList = Group(delimitedList(tableName)).setName("tables") + + simpleSQL = selectToken("command") + columnSpec("columns") + fromToken + tableNameList("tables") + + # demo runTests method, including embedded comments in test string + simpleSQL.runTests(""" + # '*' as column list and dotted table name + select * from SYS.XYZZY + + # caseless match on "SELECT", and casts back to "select" + SELECT * from XYZZY, ABC + + # list of column names, and mixed case SELECT keyword + Select AA,BB,CC from Sys.dual + + # multiple tables + Select A, B, C from Sys.dual, Table2 + + # invalid SELECT keyword - should fail + Xelect A, B, C from Sys.dual + + # incomplete command - should fail + Select + + # invalid column name - should fail + Select ^^^ frox Sys.dual + + """) + + pyparsing_common.number.runTests(""" + 100 + -100 + +100 + 3.14159 + 6.02e23 + 1e-12 + """) + + # any int or real number, returned as float + pyparsing_common.fnumber.runTests(""" + 100 + -100 + +100 + 3.14159 + 6.02e23 + 1e-12 + """) + + pyparsing_common.hex_integer.runTests(""" + 100 + FF + """) + + import uuid + pyparsing_common.uuid.setParseAction(tokenMap(uuid.UUID)) + pyparsing_common.uuid.runTests(""" + 12345678-1234-5678-1234-567812345678 + """) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/six.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/six.py new file mode 100644 index 00000000..190c0239 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/_vendor/six.py @@ -0,0 +1,868 @@ +"""Utilities for writing code that runs on Python 2 and 3""" + +# Copyright (c) 2010-2015 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. + +from __future__ import absolute_import + +import functools +import itertools +import operator +import sys +import types + +__author__ = "Benjamin Peterson <benjamin@python.org>" +__version__ = "1.10.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 + + +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 __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 + +_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("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("copyreg", "copy_reg"), + MovedModule("dbm_gnu", "gdbm", "dbm.gnu"), + MovedModule("_dummy_thread", "dummy_thread", "_dummy_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_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("email_mime_base", "email.MIMEBase", "email.mime.base"), + 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("urlencode", "urllib", "urllib.parse"), + MovedAttribute("splitquery", "urllib", "urllib.parse"), + MovedAttribute("splittag", "urllib", "urllib.parse"), + MovedAttribute("splituser", "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"), +] +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 + _assertCountEqual = "assertCountEqual" + if sys.version_info[1] <= 1: + _assertRaisesRegex = "assertRaisesRegexp" + _assertRegex = "assertRegexpMatches" + else: + _assertRaisesRegex = "assertRaisesRegex" + _assertRegex = "assertRegex" +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" +_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) + + +if PY3: + exec_ = getattr(moves.builtins, "exec") + + def reraise(tp, value, tb=None): + if value is None: + value = tp() + if value.__traceback__ is not tb: + raise value.with_traceback(tb) + raise value + +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): + raise tp, value, tb +""") + + +if sys.version_info[:2] == (3, 2): + exec_("""def raise_from(value, from_value): + if from_value is None: + raise value + raise value from from_value +""") +elif sys.version_info[:2] > (3, 2): + exec_("""def raise_from(value, from_value): + raise value from from_value +""") +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): + def wraps(wrapped, assigned=functools.WRAPPER_ASSIGNMENTS, + updated=functools.WRAPPER_UPDATES): + def wrapper(f): + f = functools.wraps(wrapped, assigned, updated)(f) + f.__wrapped__ = wrapped + return f + return wrapper +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(meta): + + def __new__(cls, name, this_bases, d): + return meta(name, bases, d) + 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) + return metaclass(cls.__name__, cls.__bases__, orig_vars) + return wrapper + + +def python_2_unicode_compatible(klass): + """ + A 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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/archive_util.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/archive_util.py new file mode 100644 index 00000000..81436044 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/archive_util.py @@ -0,0 +1,173 @@ +"""Utilities for extracting common archive formats""" + +import zipfile +import tarfile +import os +import shutil +import posixpath +import contextlib +from distutils.errors import DistutilsError + +from pkg_resources import ensure_directory + +__all__ = [ + "unpack_archive", "unpack_zipfile", "unpack_tarfile", "default_filter", + "UnrecognizedFormat", "extraction_drivers", "unpack_directory", +] + + +class UnrecognizedFormat(DistutilsError): + """Couldn't recognize the archive type""" + + +def default_filter(src, dst): + """The default progress/filter callback; returns True for all files""" + return dst + + +def unpack_archive(filename, extract_dir, progress_filter=default_filter, + drivers=None): + """Unpack `filename` to `extract_dir`, or raise ``UnrecognizedFormat`` + + `progress_filter` is a function taking two arguments: a source path + internal to the archive ('/'-separated), and a filesystem path where it + will be extracted. The callback must return the desired extract path + (which may be the same as the one passed in), or else ``None`` to skip + that file or directory. The callback can thus be used to report on the + progress of the extraction, as well as to filter the items extracted or + alter their extraction paths. + + `drivers`, if supplied, must be a non-empty sequence of functions with the + same signature as this function (minus the `drivers` argument), that raise + ``UnrecognizedFormat`` if they do not support extracting the designated + archive type. The `drivers` are tried in sequence until one is found that + does not raise an error, or until all are exhausted (in which case + ``UnrecognizedFormat`` is raised). If you do not supply a sequence of + drivers, the module's ``extraction_drivers`` constant will be used, which + means that ``unpack_zipfile`` and ``unpack_tarfile`` will be tried, in that + order. + """ + for driver in drivers or extraction_drivers: + try: + driver(filename, extract_dir, progress_filter) + except UnrecognizedFormat: + continue + else: + return + else: + raise UnrecognizedFormat( + "Not a recognized archive type: %s" % filename + ) + + +def unpack_directory(filename, extract_dir, progress_filter=default_filter): + """"Unpack" a directory, using the same interface as for archives + + Raises ``UnrecognizedFormat`` if `filename` is not a directory + """ + if not os.path.isdir(filename): + raise UnrecognizedFormat("%s is not a directory" % filename) + + paths = { + filename: ('', extract_dir), + } + for base, dirs, files in os.walk(filename): + src, dst = paths[base] + for d in dirs: + paths[os.path.join(base, d)] = src + d + '/', os.path.join(dst, d) + for f in files: + target = os.path.join(dst, f) + target = progress_filter(src + f, target) + if not target: + # skip non-files + continue + ensure_directory(target) + f = os.path.join(base, f) + shutil.copyfile(f, target) + shutil.copystat(f, target) + + +def unpack_zipfile(filename, extract_dir, progress_filter=default_filter): + """Unpack zip `filename` to `extract_dir` + + Raises ``UnrecognizedFormat`` if `filename` is not a zipfile (as determined + by ``zipfile.is_zipfile()``). See ``unpack_archive()`` for an explanation + of the `progress_filter` argument. + """ + + if not zipfile.is_zipfile(filename): + raise UnrecognizedFormat("%s is not a zip file" % (filename,)) + + with zipfile.ZipFile(filename) as z: + for info in z.infolist(): + name = info.filename + + # don't extract absolute paths or ones with .. in them + if name.startswith('/') or '..' in name.split('/'): + continue + + target = os.path.join(extract_dir, *name.split('/')) + target = progress_filter(name, target) + if not target: + continue + if name.endswith('/'): + # directory + ensure_directory(target) + else: + # file + ensure_directory(target) + data = z.read(info.filename) + with open(target, 'wb') as f: + f.write(data) + unix_attributes = info.external_attr >> 16 + if unix_attributes: + os.chmod(target, unix_attributes) + + +def unpack_tarfile(filename, extract_dir, progress_filter=default_filter): + """Unpack tar/tar.gz/tar.bz2 `filename` to `extract_dir` + + Raises ``UnrecognizedFormat`` if `filename` is not a tarfile (as determined + by ``tarfile.open()``). See ``unpack_archive()`` for an explanation + of the `progress_filter` argument. + """ + try: + tarobj = tarfile.open(filename) + except tarfile.TarError: + raise UnrecognizedFormat( + "%s is not a compressed or uncompressed tar file" % (filename,) + ) + with contextlib.closing(tarobj): + # don't do any chowning! + tarobj.chown = lambda *args: None + for member in tarobj: + name = member.name + # don't extract absolute paths or ones with .. in them + if not name.startswith('/') and '..' not in name.split('/'): + prelim_dst = os.path.join(extract_dir, *name.split('/')) + + # resolve any links and to extract the link targets as normal + # files + while member is not None and (member.islnk() or member.issym()): + linkpath = member.linkname + if member.issym(): + base = posixpath.dirname(member.name) + linkpath = posixpath.join(base, linkpath) + linkpath = posixpath.normpath(linkpath) + member = tarobj._getmember(linkpath) + + if member is not None and (member.isfile() or member.isdir()): + final_dst = progress_filter(name, prelim_dst) + if final_dst: + if final_dst.endswith(os.sep): + final_dst = final_dst[:-1] + try: + # XXX Ugh + tarobj._extract_member(member, final_dst) + except tarfile.ExtractError: + # chown/chmod/mkfifo/mknode/makedev failed + pass + return True + + +extraction_drivers = unpack_directory, unpack_zipfile, unpack_tarfile diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/build_meta.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/build_meta.py new file mode 100644 index 00000000..e40904a5 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/build_meta.py @@ -0,0 +1,254 @@ +"""A PEP 517 interface to setuptools + +Previously, when a user or a command line tool (let's call it a "frontend") +needed to make a request of setuptools to take a certain action, for +example, generating a list of installation requirements, the frontend would +would call "setup.py egg_info" or "setup.py bdist_wheel" on the command line. + +PEP 517 defines a different method of interfacing with setuptools. Rather +than calling "setup.py" directly, the frontend should: + + 1. Set the current directory to the directory with a setup.py file + 2. Import this module into a safe python interpreter (one in which + setuptools can potentially set global variables or crash hard). + 3. Call one of the functions defined in PEP 517. + +What each function does is defined in PEP 517. However, here is a "casual" +definition of the functions (this definition should not be relied on for +bug reports or API stability): + + - `build_wheel`: build a wheel in the folder and return the basename + - `get_requires_for_build_wheel`: get the `setup_requires` to build + - `prepare_metadata_for_build_wheel`: get the `install_requires` + - `build_sdist`: build an sdist in the folder and return the basename + - `get_requires_for_build_sdist`: get the `setup_requires` to build + +Again, this is not a formal definition! Just a "taste" of the module. +""" + +import io +import os +import sys +import tokenize +import shutil +import contextlib + +import setuptools +import distutils +from setuptools.py31compat import TemporaryDirectory + +from pkg_resources import parse_requirements + +__all__ = ['get_requires_for_build_sdist', + 'get_requires_for_build_wheel', + 'prepare_metadata_for_build_wheel', + 'build_wheel', + 'build_sdist', + '__legacy__', + 'SetupRequirementsError'] + +class SetupRequirementsError(BaseException): + def __init__(self, specifiers): + self.specifiers = specifiers + + +class Distribution(setuptools.dist.Distribution): + def fetch_build_eggs(self, specifiers): + specifier_list = list(map(str, parse_requirements(specifiers))) + + raise SetupRequirementsError(specifier_list) + + @classmethod + @contextlib.contextmanager + def patch(cls): + """ + Replace + distutils.dist.Distribution with this class + for the duration of this context. + """ + orig = distutils.core.Distribution + distutils.core.Distribution = cls + try: + yield + finally: + distutils.core.Distribution = orig + + +def _to_str(s): + """ + Convert a filename to a string (on Python 2, explicitly + a byte string, not Unicode) as distutils checks for the + exact type str. + """ + if sys.version_info[0] == 2 and not isinstance(s, str): + # Assume it's Unicode, as that's what the PEP says + # should be provided. + return s.encode(sys.getfilesystemencoding()) + return s + + +def _get_immediate_subdirectories(a_dir): + return [name for name in os.listdir(a_dir) + if os.path.isdir(os.path.join(a_dir, name))] + + +def _file_with_extension(directory, extension): + matching = ( + f for f in os.listdir(directory) + if f.endswith(extension) + ) + file, = matching + return file + + +def _open_setup_script(setup_script): + if not os.path.exists(setup_script): + # Supply a default setup.py + return io.StringIO(u"from setuptools import setup; setup()") + + return getattr(tokenize, 'open', open)(setup_script) + + +class _BuildMetaBackend(object): + + def _fix_config(self, config_settings): + config_settings = config_settings or {} + config_settings.setdefault('--global-option', []) + return config_settings + + def _get_build_requires(self, config_settings, requirements): + config_settings = self._fix_config(config_settings) + + sys.argv = sys.argv[:1] + ['egg_info'] + \ + config_settings["--global-option"] + try: + with Distribution.patch(): + self.run_setup() + except SetupRequirementsError as e: + requirements += e.specifiers + + return requirements + + def run_setup(self, setup_script='setup.py'): + # Note that we can reuse our build directory between calls + # Correctness comes first, then optimization later + __file__ = setup_script + __name__ = '__main__' + + with _open_setup_script(__file__) as f: + code = f.read().replace(r'\r\n', r'\n') + + exec(compile(code, __file__, 'exec'), locals()) + + def get_requires_for_build_wheel(self, config_settings=None): + config_settings = self._fix_config(config_settings) + return self._get_build_requires(config_settings, requirements=['wheel']) + + def get_requires_for_build_sdist(self, config_settings=None): + config_settings = self._fix_config(config_settings) + return self._get_build_requires(config_settings, requirements=[]) + + def prepare_metadata_for_build_wheel(self, metadata_directory, + config_settings=None): + sys.argv = sys.argv[:1] + ['dist_info', '--egg-base', + _to_str(metadata_directory)] + self.run_setup() + + dist_info_directory = metadata_directory + while True: + dist_infos = [f for f in os.listdir(dist_info_directory) + if f.endswith('.dist-info')] + + if (len(dist_infos) == 0 and + len(_get_immediate_subdirectories(dist_info_directory)) == 1): + + dist_info_directory = os.path.join( + dist_info_directory, os.listdir(dist_info_directory)[0]) + continue + + assert len(dist_infos) == 1 + break + + # PEP 517 requires that the .dist-info directory be placed in the + # metadata_directory. To comply, we MUST copy the directory to the root + if dist_info_directory != metadata_directory: + shutil.move( + os.path.join(dist_info_directory, dist_infos[0]), + metadata_directory) + shutil.rmtree(dist_info_directory, ignore_errors=True) + + return dist_infos[0] + + def build_wheel(self, wheel_directory, config_settings=None, + metadata_directory=None): + config_settings = self._fix_config(config_settings) + wheel_directory = os.path.abspath(wheel_directory) + + # Build the wheel in a temporary directory, then copy to the target + with TemporaryDirectory(dir=wheel_directory) as tmp_dist_dir: + sys.argv = (sys.argv[:1] + + ['bdist_wheel', '--dist-dir', tmp_dist_dir] + + config_settings["--global-option"]) + self.run_setup() + + wheel_basename = _file_with_extension(tmp_dist_dir, '.whl') + wheel_path = os.path.join(wheel_directory, wheel_basename) + if os.path.exists(wheel_path): + # os.rename will fail overwriting on non-unix env + os.remove(wheel_path) + os.rename(os.path.join(tmp_dist_dir, wheel_basename), wheel_path) + + return wheel_basename + + def build_sdist(self, sdist_directory, config_settings=None): + config_settings = self._fix_config(config_settings) + sdist_directory = os.path.abspath(sdist_directory) + sys.argv = sys.argv[:1] + ['sdist', '--formats', 'gztar'] + \ + config_settings["--global-option"] + \ + ["--dist-dir", sdist_directory] + self.run_setup() + + return _file_with_extension(sdist_directory, '.tar.gz') + + +class _BuildMetaLegacyBackend(_BuildMetaBackend): + """Compatibility backend for setuptools + + This is a version of setuptools.build_meta that endeavors to maintain backwards + compatibility with pre-PEP 517 modes of invocation. It exists as a temporary + bridge between the old packaging mechanism and the new packaging mechanism, + and will eventually be removed. + """ + def run_setup(self, setup_script='setup.py'): + # In order to maintain compatibility with scripts assuming that + # the setup.py script is in a directory on the PYTHONPATH, inject + # '' into sys.path. (pypa/setuptools#1642) + sys_path = list(sys.path) # Save the original path + + script_dir = os.path.dirname(os.path.abspath(setup_script)) + if script_dir not in sys.path: + sys.path.insert(0, script_dir) + + try: + super(_BuildMetaLegacyBackend, + self).run_setup(setup_script=setup_script) + finally: + # While PEP 517 frontends should be calling each hook in a fresh + # subprocess according to the standard (and thus it should not be + # strictly necessary to restore the old sys.path), we'll restore + # the original path so that the path manipulation does not persist + # within the hook after run_setup is called. + sys.path[:] = sys_path + +# The primary backend +_BACKEND = _BuildMetaBackend() + +get_requires_for_build_wheel = _BACKEND.get_requires_for_build_wheel +get_requires_for_build_sdist = _BACKEND.get_requires_for_build_sdist +prepare_metadata_for_build_wheel = _BACKEND.prepare_metadata_for_build_wheel +build_wheel = _BACKEND.build_wheel +build_sdist = _BACKEND.build_sdist + + +# The legacy backend +__legacy__ = _BuildMetaLegacyBackend() diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/cli-32.exe b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/cli-32.exe new file mode 100644 index 0000000000000000000000000000000000000000..b1487b7819e7286577a043c7726fbe0ca1543083 GIT binary patch literal 65536 zcmeFae|%KMxj%k3yGc&ShO@v10t8qfC>m5WpovRhA=wa=z=p_%6%z1@blsvwI0vv2 zNIY4alVK~j)mwY3trY!Sy|tffZ$+^cObBMdpZutbN^PuECoa`kXb2K>zVBzw<_Fq) zU-$d^{_*|%@qt&)nVIv<%rnnC&oeX6JTqHy>n_PINs<G9rYTAL@TPx0@%--}9r!$a z((i^#&t<$Zd7o|Z8<TGd-?_=NVdM9{v+=gOJh$I=_ub!9J^yrvXQOtv=gzx5rAw<k zcYSZ|9am>%4a-Xw9jfY!Ot@}WQUBkK=MqH|Mf{(O%J6=?F0E)R-u5-_q9XB5EmFjL zRMB1HZ7a&fd)b}0hpCKjVjS>G(qfxk>Uow`_J8Y;?6yo>h9td;lqFW`r_=Cu;je?@ zJ}aCeNvRaYzy7!6vsuJK8t7Ip04X137Vm)<B}y|cNYZo>`v3N5I`@q}=|CK){8#_3 zR`1xV;$zJbJP0ppD|Paae;!F%bM?lxx2d-wfQV@O6ujTW-;jSkRCTolCLPMh2Nx=) zGP{NVA?TB&mP=FqZ|whc3RJSvJUJGyHOs!nBie<k<-z=e)r`kVud+vM0lsONB<Y9b z0<+))qcqReE=`GTutop6y*iN=`x&*3EzZknc4W?3rP&uIJaeXK<D%wvS9N4nkT;0D zPW$-+vpsE9St6ytWVaCXsHU`%GVdR^wE=Xv01fto0vp%r_OvPOWj3j{W@V_Y;fxbp zySskme5v4&(U>PA7G%%m<=|b-UJ~!-boN$bi#jT{Hcy&A=Niq?KHpr`Y-?=MzKk{I zIl-)f*v>o`q`5M7OP+gKtTfLZsOCS(qPDr~x8=!_5`6-VLD0EMY5XaI$Uqq@V-Jap zR-V}6Ja=V~*CHdz@F4Rb<?;{KZ*yd>ij_JtwPEG;g{#zT!Uq*Py$3gDv`Z2tYF|X8 zYEi!^3#I2mi!9?8K!AuX>_C;=ltI=m5eE7*@I4UZ&p}=3ho&bc^h3P|C;`K|s)PJt z@!8GLOb})@Yp*SMou>fLhC@WZw%7ar>1Sm0aW&hPm&@Wqv5z<cJW4gM&zmkfJJ+a@ zj6&r=dVrlbR^{dLe--p{MqAX8%7LY}g_XQXq&T82+UL#6!luP}xs6BE?<fb3E#r6f ze^S%+ZFw$9UEExnmrHC?k~jf28Qa}v(?%Aw6cJb9i=;f%LL7GNV)O&mRYm+WAK2)J zoc6N?AE0A$CG}^`sG(_iS>i_&0GwOEjRhPMrYB*+WA64e$@ELiFO?ay?gvgcC<n$Y z<L^1CK%h$vSZG@q;PL(x?eqG1V1nyS(*z5;SA+M!_HB5xgCaCQzioLANgKIa^30b| zP)0-wnAuW?PuhpB1D*9VD+*d7r2(|XN$tU(8-F?I^V~ojiGY&$x^&Sr^ySP^J_*UW zrARijT__0kuL5&8h*xu#MI`axM$bS5AWndQ;JM+aKJrO?BE}`X#TVcgz$PT9E&8Dq zZ6JXIg6WKy%Zx0-)XbKtWRx0n<OM3tY=>1!dbl2?B=#{!9_2$Llg!~3%n@58CG`RW z1LPlkk=p2eFSa3N`&F?g@~A1mHitQyVq0yNK4^CN8joui^5gTpuf^0f+qMtEYVL?F z$fu`~#PaZA)VQ4Amx;XbZ%EJqQT~UlXZwx7HHW!>vn=MgCVU7v0(=qWSe%!~9KS(N zgLM=3LHzO$mU+*{wx!#)wXd#auhgvU=lF&*IVnT+hZ`~0nCHPOETKA3I;S!sQ8$^{ zZcv4UbEsTEpxvZ3yazYCQD1%G)vA+(ndH~oy5$RmDNA{h9?j)8QlvdBd-|V!63d!_ zr{P-1vS(7D+|itM9Rk61MnI<ijY!Ly%7^jv=YUlg`cLmOwOJ@HClJm79G^?wO8q+) z2vf7m?6nYbY6S#*GNiuY5H+x^+G@?tJP#TL9re>+K~KhBa?C)KKh+E*p-K?e54p;H z-uNb0vkbWyR)1lbnp%G$OG`vjpo}PU*o}&pp;`PEODluTuiNcFBFmELneD_AsyG+G zkGm*r)oMJHmxrXL#=Plxfj%;6&nXBm<I#%{teK#)2aU^vKFj+G2|d8ZfX<DYT4pfZ zfo|^HD@jrnxXrnoJ(D*BEsHtwkuBFp`spvA2GpIQLK~G_Fij)vWt2{I(c2x~KW)!t zCOE{y+%GQUQ^og%kazlaaoZ=NV(uK8O?>)d`#6i)km>UtDzrb-*V{hPU&@;WB&3=+ zxL1-^s(vuM%+x$5wc!b>TMmX_2j=|8Kt*)b-4;r#_ff_ny|oEKpX@DE=!THWD9l;8 zEWjV=HO&BTAtLP*tp;IMlM0_Vn8(sUqI$?Nv_U1G^tEZC@of=jxa%BH_{Ai!MYo}y zE@)vjviC#f;TCVZ=HXtX$EDFgCrJNz+eAX#tsgc!-#{X?u;vu7>K}|6xr+Y+O$ixV zZ+D5)r){a?S581&?=jW!dQYD^njLNZDwQ49Kbq9~QJUTP@Z(p`mlCNjK7uj2dw$*y z?Fs@NOQ3Fcxb;G+-Z81QBhBuJS%CWlpf9gp&E>m+$xzI$NMcrT+APveYg4QEVhkj# zC+2qrf~MxI;{Q2Zk_`Xps%rkG7-Dkc{@y;QZ4Oz0#y`#fgd*BZP3DWK6>a+@*L<mM zcZ+wv6pXlQp*qv|N$8nGnzy|!owe_wFT`9w_5eJz=cRm7?ApYLBWTQ~Z~Xh0d`OLq zTT$CqaQsCoH<7xV;0<Sr-s;g0IvOs}L}lA&k-l0$xByYj4z~8BGDno!&c4z=oz(hi z8grx*iDYlPN`q&LaV@ehXt=Ne8MeK-x}c@DjsM$J%twl6LU~JSD&H^}!^3Q<i@!_g zv@vrzI}>D@EZXPo+Bl`5Zw>0+GLF5OFNogis^p(SM>i~SO7+N+7^b&-f@XG3hYwRL zs{rPg^&WTKXuZW1;J*Vf^E(^LEqH+VoqCH0;~Qle%pqFtZQVGjSX7wPu*PZbFwOi{ zG*lGy6QCZdX|wX?4#`^~>lfT8wQf{0k4{L2{|oR+{f=JfFn@0V9WOeR5QLU=M!U6~ zB7d(sir<zi(J(xWuRwrR^cpgzK1ceMKSTyn=7h94qQ})c3tBJ-kufbC-S8FZ{*A-+ z;wE$p2;6zcG#Z^Q=wCTDUVHvM{Uf{T%s<wYuE%Y9r%meyA9u+1R(iScdR70ky|pt% zO*{K56g<p=`;6dF!Rj_V9Z4Kex3fBWL}~ny1nH|{??HFC&$rtV!@%g$GEs~YjUt-3 zyg5y8xAoVl=3`2GjRmRwg}nzj?Kb^myE<wR3=lWy37hs;ROnh+ySnXsoC;P)_ZOlx zK7zQFs(oe^qFNu3t$Ssyg|9J2k2}y#^%uW0`}(%CH2YD#%Pcs^MniW#E!k`h>Z!)# z>Ws#2b>jJh;6zDv(pxgML&lgyPQ#zcbb!!sgpiDoqu{tG6%!Ja>nvz7KufAa>qaA# z=oV|HC9oE}Y-%~C<~B7KIy+)gcYDw!`k|a8<5gBx6?_n^Hfnl`YGk#JRXDw`Y3W5Z zF72K~Dqd=&sK!kRIocXZ$WcQ@HMx}F(UwwzM=dX^$<yW*)lApsLU0ONe1#L$wDK}< z+m`P7xi@OFy|1a`^g5Sax&QBIL?i`BM9fM)?J~l{Rc2^%VhrUz829&peWXrWCnHlz z(^x9cG-`TL;&SCcT7aJf@*!}hy(}@hIc?50YSx@pYQ~(aH5qypGnehQvcielAG{aU zX~0_@&*J%hxyYZhxenZpYC#MBj39u^sFM>J%<uNLp{5+>??vDyuV3EiM+4QdBA;io zzdv6tSFL<#t<s2TfRwNG7HQKrPlW>QrIPdbG7F+JhObn}j(kln(mY$%K{!!5k#)1E ziz+3WTCrR!=CNXVR%|-O_{kh9N!CV3M%Px+KVv3eg)|H^tUYmMQB9Bbm&lY5<g+!A z3q(W{bNLa7G-%8GR2a%BXjxsm@<>uSRpgw1Z~T#cB&t&nSAs!Ug_}|kVHMz$WCS?l zqwD<1@hy6X9b^#7A}+?pyqY#|7U^Uy<!oE$R#G6OIHC7~?928tC#m||`Rwb!vt=?X zUvCU&<zZuqgAMm)Z5TgaQb)3^o#QYflyA_|`O&KZm&VE*-qc-V@o_Xmrh)G=FTI?~ zaUiwZw;@Gy>*X6#P>C%ujL9h3=b(@6wKWGF78?2)w89yy=;G^09Q<ASzGu)Qw(X;0 z{;ohoCMo#dETWJz;bQfN@r_l;$_tKiy+f|A>y^}WR?(y1w&Cj}$@F5L2YsfEL<3pY z8Z-dF^8sAbhP4Aqi=v(obhDs>e#QftDyng66L`)T%)98HH5&8BF<Y>v2#E?5hTb_9 zH2mD~chFE=MQHmw0&)Lo6u2YqKeGV1@zG*g<1#Bwv#zb_%-_+JlMrxKd<~ir3Ze1+ zy(_eP6{~SYKhV+(S~~v~1yt)79UHaSeZ5h0^WBheRNU;+TO4|;1L|kljg`GxMRVY5 zgy-B?`L%XKbD$65%Wkaf(<V0uOoUxGf)z4#f3Kscu6N_X#60DBpQ${*$V`+W)Q3=C zVh%!IBlLCRI)r)=>P<|yYD*~1E|lWFafIgb%{TqMMK!$}&wwd`weq~AJfD%@n)sU_ zUiHfyy0+TP&cgr)(wf;G1RCO$+F-8vOp><HO7p|jNn-Q6t|xsd^WT9I=Ikc$B){h> zOt(p4nn%&aNx*RFpHZMF4f(Ufvk=7?JRPMYo=R06O@dN!hp9(J{WAdZdPL@b!%!G% zLqHJ$fo+g=B{EqW3P?d+m=J67#;*QZ08JwbS`rFm!NrD0j{xSFfN^d-(+{H;KZnVO zq>c^Kn`akV>TQ^)nUX?$=?!SjnvZ-^xEv3@Td*3+ToB$GLi`Q1f1eLu;*Pvh0=OLj zdhtFgHl&UZQ-JSB8KgFySnsCLa+gvITEM<JVb|Z0=_NNbv&@H6(`bHB@Igt@ghI@c zl*U&;NMph*gq!`YU((D;uXAEi{}>T?_A^wxGy~aKk5P9rYN}h!*-ueoBA*hw4DFOr zciPZ8^v@j#d(UsI=5c%~N>l%e$W7+;ycJQ_!+(R9k!HS|Ec90*HCfot5kX%T)t%N- zi~Jqxa4NIzB;-ca!0JvWei7b)=I>ieG+2$PYbd;x;wr_LQoMggi&;CG;F7fIhG-(% zJ!c$nrEc$qdPCdkvnu1mRQk}y|2ztlU(w@aFd)D-lsL#-NVQSwulrLY!m_|0v*K-t zB7y%f8D%CG3s<7iT|s_@7ZVu%+>P|Sc?3OwD#DH8xgHD=<f-VsApaaa9sX=8nv;#Z z`k}l%#O<|7rBhsro=L%+c2xoT1-LwYZBh#O<!BUXr-(Z|lREpYkzkpMTP0~-Q7W02 zwZh$V@M_pc5wh%Sm%o^4qt8t_^m(klPsMxqW>>+Hq9%@@@^GtBaXR79?>LQ?^WZ#C z2`ni`a{1lFpInCsiUb$05edblZ^2mnBP=hXEp>8aJojRG7BaJEcKD<{j}yzhTP#U? z=Aa#XBtim8=Gg?r4Uj`5WN-&1pw{2h8%&)Z;9p{i7uubJoO^Qd2$-{7c$u@ERF>y& zqN~6wdfjPB!z|)D^aBs!k+_=q&oG%~7!{|m@ca2}v;&KPJ2>;78Umj~@P&9JSqLha zzlFYP<2&bKzVZaVB-Mc?2YHnu!LA|`O$fbh{3s#N;_-HA4$=p_MZ|rGufc4|OmzUu z^JPvljA~1&s$+Aa<w()zNx!G<0L@dyGr)f#BOMeS6)ST`QZT9-X)BDf9E^O4EH=;B zE*o==+8m?Sfptj=P=j*yt%Pm3WkA!^$&z|GbdnQQQMu~aAXl=XRo6Mq&w=2&97(@S z($~pS2zk2aJAG=JelIfRnTs4-Gueoy6w{_W-;!`D2U;p&H9!}KX!)wyGt%13G>Z>O zBaXr}qS-H-6;8gFl+j!hB|&HG__QCH?uAZY6+qd0>UH`KS<+@;OtPgV@|*2uh0NaK zb;wtOjM^yvHpr<LUa2YUt!L-)wNxOQvg7UAl}UBoaAs>tzb)z&!{3Y1&uQu2YF0;6 z-&pJkNPw~TIeP9tMbGFy@$3@M*Ts{I=TY%&5zoVT@~P)d6APo+yaISwqj*6}fd26l zSTkcVuiyVH03~%8i#~&ZzGlPMWCA!0Gf#IJR{FI;?gP_@en$)RA<KPQ>9elZzErW? z-z!$}DeP6T*8k_BYkgYiUq~IY)=yyvyM1}}O7uIRM!^y9drD&sLd~O$*hyeu#5%<D zB|MuR{sPa&<4WTs;8UXSCjiNK>=0hc&P=2=ADrQtvtr8#<-kGZK>Z2~i+YDr(2b== zcR`DCps{r;k|OD?J&uqOeF)jSt;!F64YPom7yZ+9fQ}L6K;B(=8G8lk_6m~j6~x@z zCDMtQotu#j_2}HA-lTK8dcDqNby|73nvIwet;T0PM(}dy%>!Xa=e&Wit+N2(1_4tK zJ>Ho&@F}G;2jTj!uGD5=No4gi+tKUoGxifUO6&p|zC}*Q`Nt@!^HZd-C<VXUGE6z} zYOGW~YKVB}>-c2srIvNJB1pwv_RV7Hs}lRAC|1y*^It@P6dqcjDCIs;$|7}n{a0bN zwEnC0YEJ!ETa@VSNVnP}A=G&bfqB<!qf3&BkW{O;I*ahh!r#?-)j-(OIT_(*`<&~w z3HA5cW@%$e`m=&S$*g^tLCz@<0M`kCCyB^pUPuD`kpR{zjc?QYPNne;dVddtKfN`j zaX-DcDvf*Ty+UdHHQvTv;)Yn1ge#yte=uO|J&YiKVh)%++R_{)&I_qiSd0WOwwE}M zKLJhMY%j5@ZER5*pMVy>1mb=`bXK5zVw9e>%7YwwQE9vvGOqVjDG&Y)-L5pEZIaIC zt1d9l3jE3C<x2EN7|!Ysdg9Sts0z6xi~B92`HDn$#vVI|kHS`EJa!sEBl<X=N~|0e z#G}+#WRvWC64CQfBGXLJSBXA?#3B7;AUgP28#eff33<>jm|E(KL}PG`1?WOK18iyR zr@EEK-#D<=?b9-MKLq7qL@AMpXFN*8q(*e^0F2H-_4k1j+Inw(tI~Km%BD8|oIZZL z3U#LP!ouD_m~3*fC^b0{i;`Lh@J}(6VsVI}X;M5&;!2eyMl~<&Z4!WS0Y`~eMhmOX z*{Fz-wZUowjBH+3?(n{;&a#?E?5n&i88K>u>i%i|!DBr`8qsAZj-fVnlD&ENu7UOj zcr8tPJKsdI-m^h@@FMC~8b8KU@3}+S`I1Qgj`G7<7-#jKJJoyip1alQde8Ti=;Qd- zEqbZmLK{d(>TSv1K-&|`*$o3Y^LH_kih}8`ftlRO=24yNSd>_EospK1t)P)MNSMz5 zMFbXV!)H|iohdPqaK2TlCsdyXsw|yVJM_5R`8Fcji2AR-qupV#6XH@LR3unydzvBM z4f~1F_TbC*c}(zSLwgMXgM4Bpq**9!s9VzD=qH!e1;$?DRCY2k%qp0&7j#pf$VRk@ zJ}vAuqB{{t3Z*G@GUUh<RahMtFhwyjk)sMzr4_lDBo%wm1?Ew<pEzDWl-uxWJxW(S zme6Q9$r7u~*=q@WxCI^x)$b=M|BjXmCLRK`hJZRJi82A?y-FLA>=QH+(oZ~6)oG_G zm7oW8n-SZG)I^@nHz|$JLoI;48x87n8XKNR#<&=^F9+-;eGV0gPPh}0%>uwt*&h7^ zikjIJeH*WM^eCR-1*y{y7<3vkDAAj#<hY}|)uZNEl<988lt+1aVQ<1g!t+y1WES>P zqW!0sNgW>q8t;8)$CzynZ~LYZ=TGX#rStC(HZCa)yTB3evmPy_-~(OswN&RE!Vcqf zp@Gi}J#;B+uy|&hmNr=+9n;P-K_62nm1xV3H2SPw#e|IhbXfof`+6|7-a1piP-HwN z7^H{2zdg+^sM$1pNn(G@e>T6pEQuKCV2I4dULmNrfxpt(oApIA)u1V4mx*V)ZKf|V zchNeer}=!|H??#5LN6WbNlX_CYfykKg_THOR9^_2FTwuZg0(8r_mh$V#aE#VnGn{e zeCl;DfP%p?tggB$k@J+TKa!uwd@4m9VSVvf-3M5SiBUWMu?`fM{}^?u#Rg7oj438} zF(JrR5f9(+cj98FDW)K7zZihT$5@OwgKx%nE3=G6vK4Y@Bde<-Gp$1S)m91meo|RL zn<`b;MO(K26BC3>4jV6|nK2@IAd(jIpM#El1d*~p8E?Q^LTFiSdXY#}J?38eXq6wU zILE&{2PF4XZYiYgP2}og_GW_ZL=T`a(o6hRfQ6D1w{88ns)Va232{Fagx$LRq%S0O zl)0Az+ySZ5pA=~!CT4ui_9ihZH^Qxh#U26>6Z7Hbqn#h2z5ie)Ybiu*0bt+kjg>s@ zjA<Te+x6L%J}EKXCyl?tC*6y`SMYZff1{CJnvdz?E#UyIH1B}!gaNm%H|Bp7#ui@( z%oNtXQp6YWU}CIctPO>{aix*=UiZ)(*qFTw&sY<UCyANuK8K{sX1gzSn6XuE_vK0L zzG=hSeU~9x*zTJ}dxI>C@-?(l4s4*jzOJb5O{H-dahv}rm2DF96vkFyo8F5}t^)$F zZ(9oMi~Bo>vl1%_AO0!k4`R(0WECATr`T9CY<emo<caMP7+pC8BYll5)vw8`??*{r zQwa1doJQE+frH9%)8A24O!>DxmPlhFq~FmY!A0jT?5Z*B+?Z-mztE>vHrpWqH$Nq7 znQ$bS14=<K=P<2<wbKUBCzDz~Nwd$g_PdY~mJ)PknIrr-mL;(=XMopVX(6vP9zl!D zG8t8u=>F3%*>!CDalr@dER`@@Y?!6d@*<PA64UCJIO-D{+shmcuo$LBx>vxe+Ey;C zzAb-8pA`ZV>?nizOJLlY2g_U%w^_#AX+&7PCq<)De2EOb$F4aLln1f;?205wZvaM# zVFVXXgXYER?xJ1UNedWLbhw#43pHVVJOXQCT7oAT1xqP@drH6g1<S->K{s|^C-D8~ zII-`VG_Cp(PnuTk%;)M~Y9hy;0G87Oi^b`fGFXmJv{=-iJc*G;s){U*MNc7w4PZX$ zFG5NYGosTWBeCdAJRx94bOr)R^%*-w;fF~?jmJo-7}k16tTxu|e7FZm>vqP@h}UDJ zMb_<%9ulu7Tg2<vB$|&tC^RDTJ7N`%xTwhn&1g*%jMzDVutmMrtSTNQWXCw9mbgHc zSQk?Rq?y?(K)r~>PMX=bAQTgbqx%Agz--_|=gN^3-U*{nC`=`o*^BWB5aoD5zDc^L zbCPah$}ndW(fDOKfCnSmYs?O0|98q>)A^t1Kmi5fV)^NK<0K|?>Ztkpg{wAx87u#* zeqqFx;gPHrpt<9XQ}|ZXmRbrVBf~@9!{b|~w(2b~o%2V>(ripi+vjs*FBxfV+~`j# zwUV4ks{+SXm<c0&r6KeC5rkopzl66j6a9?+$nen{e9~GIIv0{&3jd(>d9E1#@;j=6 z)uOkr_4gLM5-{%ICcH@ey-Dse{MZBUT1zu282Bo>*21v||3a&=U&8)UQ`x`eDO#(a z$+2t;o8*GowEI!b(%StdRN6V}iP(KElBg`U#9@D{z*)%O`vf>Iabn-XiXWl4ADbAC zbxL$JvcOIfTh5KDUbfOny8snu^oxD!YWTy%94p!42i&pJ2V91~3)1fIfdSdg-sO4d z0#s^?wrun5SjhZ6>?CT{-mI^K=Fel0?4c+GlPClQ3ODjHfx<bfb!|YLTAMfm$~F|; zzUi(GI2jc0gto%WFHCQ)PbR4%le@x}%Msf$Gn>-kp8?Z8kIzIS{LZ2kPIYA1qR0t$ zn7?WzV-v+FcYYJ4Hb@syr5~l=QXFk8m(jW!<oq3}hoUN{(zpzPWU;St4WBx5kz$$J zstdZw%J~Xa)f0lN%jHF>w}53gPr_z=9*MvMv}fS8675hU*yDz=>Qxqp`&p8$PzafG z#m<%=%AZ_k$Zh6-SXSFN%1V}W(ZY$4no;C;s{g~%TEA5qZDWZ>Vk4~|HI(T3pO(1a zDly^=Z=limT__6dNkqF<O)qXlFWR+|h=Y&CAT5mkLH;f(3SopqcV`3xyoaI#cJoZI zim;&G0GtxTkTVqo4z&eA!rAH-<PNvS(l(>HhpOr_vsaOh;YYEgH_}4<XGm>}xWc;# zn?;DgBeLc+Ou7F;1!12zVqb04b$E-(L8Pvlop1dlMR<bP+lzA4QYLl#oVuz6cm(EQ z;W=YB{ik))y=}SxV~#Y-JE9cTiWGBJ8vh#n6tWyja?=(jex4Nl0ne6Hft8KlkV35y z+y&dDCbKdpJ6!*f9e$D*QZ(PwG9*?lf;3mNx%oX9!Dm#%Tj>sXK7|7O2c;w@PH!A` z$}(qT%e{);@wHLrOr+~eoF4r(b2T#R>l_%jYgt>r>5{5}aWNyvNppn~*97@Ca5!n) zRB&u!64`2fsMa0iy>Oxm@QbJ?bpB*$d`r@}3#0zCM9#0Uq@}4Awna{XqNUUrOuWc% zslzKgZj_jgN(3Qdj%SMs)!HOMgJ?$SA5m?n;P?V#d2f=I&$4o7cdM>mQ?y*xMg;gx zgc(g7CW7dRu|;*V=I(Ayq5ilg`3a_A7|!c@Ic8!~S)viH$y!IUBc2WN3Q-Bvj^$c3 z5<sx!+AtAP?XbA>`_KmLmGEEV1Gd_1d=iz5E(t<VUtR&}*5~|vF-8WPHZkV-dpSZz zp_pr!Gxc~5uY<A@^EYRi-j}!SIA#*7YuofZ0ZDU<FPT}zCJ=W74^VFOBqlYZ^z9Ct znpJI{sOCq(3^0R-^me(SFPx2e+bIFLTI}*=5Tu69@DqdIKdD`5F%49^IqMZF*38aD z71(fbhEG!8)PhF}%!TM2><dpIQPFbva~SF(6L|_oSg~2j>p!M007t}T351I#sty)U z+#Si`84w_Buz4?P3V#KB5SPf|6%DG44C5i97KEp0qBcViqnfK8ixAqFYTieA`GW(w zAaRLIV{Rh7ntx26`g<b-#gL;{Hz3<k?DQn<ll%HHt7-aNNgEa5Q|P1E;2FVHjLjkQ z`T-Xxw7Q2{9Y#SISPD$<Tbr+rbgU>ie*R0Z-#Na;r%mD}%<5Jvs_7s90pggwVaNJy z;Gz5ncB#LFXNdQ_W-sV26M91L>)3K<zv8-CZ&&nBu)9dR+1}I*&}Lh1fJ$0Sh=Bu1 zZIV!tHtTQUYHDH4Y44xZ5%^qP#jpQBOzXUV(rydFEg-4H)}rs&NhB^VDy~OgsRcp) zBQj;caunT&@|oX7tBL@ERuek?2okS5fdLs%LT$*NCE(OF3x;97gEqE-ocb9DFl2Q! zgtm63uT#EgNyte@*InzB9Z1=+&_xdqJ!aCwM~?tK*3e@^?B#m2W|4N3p`^dmSjEDp zr5EJ*DeEctDj!a93cWB2&A~*29n=53!&rXK`>HxJ|5fbYYy!?SjKig2`8l{-`R#sJ z{y|JM;N@7?!z#|5{daszTz&pedK?9JQ8F;@qU0|0D_iceAI?7tSL#Z>U6e&#kwgbP zkkbtwSlf+Cu<f@_ncfPo253+zF_re*BqkMOz=e-l@dSF=3tHNe6Mx!NOm-RZ<2n>! z2^i*I1ua#Wv>X0&z_aSn73?s&*dqlVd-T@)W9p>J$FO7ZOZr;Fjpb*IiZ0<kj-=(t z)3frtzZVEN)Zu&;5GEyyDoKyR4}t#_Nqfj|4VZ{Qpi+zi1s_y<&#G{Aa&GbPMOY+9 zMu&t)2l!LwN5#q;zBt0;6CDn2Z&SxMOE<QuqarD*i|U-p1COE7rnIv5v>VIdYQtLL z+vF=8tIkQ-iCW8@Pz=4^uQuJ=>}nca<}1w6IQAlU`d|lyHiM6o3qDTHh2A>nrl2_S zA+q^%P|?VQl|Hvwh66uk?P7j%C%U{@zVS76a{Yy?)f|yCw>|CZvLrN|l>4FS+vXAI zH~1Q@M_VFOIwyh-O%sQD3<-Z4nfz%+pMuT$dA}3f(Y)N<c#Ca<Hc{-Aj|5{d<1iXZ zo-tGXE}|+3jBfS)BafO0JZ&L^nBNGx!%&i(k|jT2v%Ep@)Id7GlWuGz+R=G5+`2DW z)a`k83dV!1XXu&z6g?+ALC@Kb)3f+dJlE~aJ}h2YFNxQLN5m`jA@Q2FOT4byiPxhK zrncaPvkrTn6K}_!eR#*Pnmk1DXa@$0c&dc34gYu3$34$Yo-f5ypTaYP)@Z5EAVe%L z79fULyzOojc5hm0T5GmFJpjT`w=@qL21F6dx9}hS>_d<iZ+bBSNLanucs{{|sq9Nu zZ%5j$dIA$Db&Ad%>KL78sm^jCQ2QJXENk|S6i>1Swe1^0VH!|z6vhVJ3d~qpZgqg? zzXJ`{qP%dJwHn(Uw4c1)+4_+yvo*He^{Zd~>O~p~F~0$D{+lmT#%8yz$>m$BosT^* z0nr20&}O%cv?bbkjJiUE8qVZG$Ol*3*xZhC4DtbUv%|~|qj@h=J~GK)1f2?6ni^AS zZU9&Mjpv%9p98c#N(mlVtgend_5~7@=MO8-+r5XkjLvWM1!50n(f5dF84tfLw0Q}( zm*9+g613dxj758q1+@iGGXVyKBgR-iD*K=c=}3jXt{(VYjZ9Vis|CbfrAYwv)gXY_ zQ4v6I3!prr+D<=J)7@%Qhu1Goo8W5RnM%bbM$r5yo02?~go2uOrV+Uka(kl)NYvB= ziJ(Qrc=R;N`2{d8IC6yuvxg}q);OGU*^kC<_2?JJZgJKx9*$a$VY4ft=wFT9f@+7O zj$`$od74}ad%Gmf_rA69AldC`VZZbwE$pF`3rQ)z)dl0=BiP1ZJ-dY$-og#)1bxSP zNgczsgfSnLVGH~D`xwSpJO32GZILW~7K4{qB>)7j@ZQ<NRquK%CdOgGwE<m;>40L* znbh<k|G`<n?<OE)VVDVMWCQ4WfcB5bU=AtqL#CZZ1^b}qlhbb~9C*-Gk;ZxAT`V0Y zybkv}y{}K37*C}jNCD~Cih>GjdU1BZa@I@C(fhvEMh*p00h0JY@9QPky)JkP4t`7= zqP*~?>!A&M*52<x2k*Th{F-zns1|+)7*@OCH45wZaE#_Jpf@pHc?`&iqX9+x9zkQ3 z#(yT{uqtVpS=@!-#!nke{xxk-Yyf0~*(t(n5msJ^!~C*MP!4Ndq{RF@00SGz1&Krf zl7x`PN^-FpYdVe!k1rrQ)O`+Ple1_!S03m=74>zWqxiQFifLao4{wB9^g%?F=gS~0 zM>_u(!b6Igk78KGX%zF_BQvo$i2dd%>Ll%S;>zYS8{}-d^88%#^8m>@n(H6JN4eBH z0j1d%dV4m1hFL&aSv{tK$Ix%EF=8gH*LA?R>-5G>76)qa5?U!q{5zOkM$(KDXRO2( zGaf}bx2|K?&R=KDobU79gq@AE{9S-_z5ubTUu>V?@OfJ|ccbj>v{^6<LJ%vN_+lT5 zs+VQoBJBbzaqyAIfg+76Ibk<ohp|+arK#>CO_g}6Xg2YP5?z6EY1!XzyS@qf0Ycyo zuOK0K^{@C^(P8ojvDHkzYo|CVWwttu893J<y#^+hB@U&rn!3T0f)?HX1<Az8=m$z; z84_P?0&WlocJb_!`cw(tn=;==vp-BaJ7}^<vkj)5GB<|@BxD3D3m20zCAX#9AzLA% zHeAJuNh-{DyURAfZT&N3>rN%fv?<X)A_D19F*sY|SK`=n3hiSh@}3UycJ4WiH(bHN zbUmqcI2E<H#I??F`i~;nm*C<{G3o5OtmefzxlK(?W9UPt^?{_R4jL<mG)z;|t{nRI z35>GnumQA32}vG6{NITX#smVXGT-f&W{?OLdm#JQzu|LRVj9_7JPjAE=2mf)a`9Ab zAy_6`@*nHK5Zl4;M_QX+{4AWn;AI>6ng`K$p?E4K0IPv1nYAu|;3Z1JysS<AUUB&Z z&@#*(cou0$s4dFTZe<VbvtnZq!)oOs{F}_@DHn%f0h22Bz;l-Xygvx=wvPbJ=czn? za4`J^1Sw++(os(-O7^h_4k30Gv1ow*3jo*yuOlp`=K1je*G1A%BvDKgg|#5YBM4&7 z6Fcw+#8`T96Shm$F-4CMRvOmRzlU3yc>^y2SSS?R4u@cwoDv##^y~sxs3TZ9P{;%d zV4{fxRJ6JmKGh2ygURWXjF~(9skC^I_ki6)F#9EEOd#ZJVmWw7$<^jN><83bny&>Y zLev|G5KaS;mcdAD^#EG;S!iW2dlFE;4^Gs>Ag}%LHh~9<rUs`{k*H`89YP}tZwN9_ z5Nb4>{Qrg)EWdHM7sD`c1JExBvYFoV>hx-(khc<7V#FIC<h0_$S~x^Q-Xqi}81h0S z`z(%QOf59lZteEL8@Cf<Egd#yUDjAzwgL0B?HFrwc{U|)Sf3nluR1}w+xceXKz4pV zDF<3R#md&RV)B~jccRiE>scXhtpKePdPzHNO}c{S>_$Md+4Z2J`3~AJd3QY$$aFIX z`~CFMe8)VB4>GIofqW${KcIdLn~0fokH)b<em8~*vP0#B*Wwcfs_7_=ve2~sD0Cwh z4X~qPqW%M5l^nSL-&NiFUsQeeSbx>K{=2Hp>_(s@oc@#bn%UH3)&+`=hYRR5kn9dZ z4t}=DW@k4MKznW507XWFA~^)<B}jO2XA!N;-9#m#*l;v`Co<_-f^MC^gCL=EAEC~D z;8WB52Ias8vj}~36ULEv*{WTgK1{L~8r$6<UY<ovHi3v~o-iID>W8V7CdN|4i6qAM z4ebxmQmUl=ftwL8iI;^*g+j63Erc38A%+wZ;C|f;g&~0xDhNPW0h~tJdNR=LCeA_F z+`OLKFu)Did$N&(XP^abKo7X0_}Qc+i1%iQ04)<N6RtU%hyow&e})9WON1!ABurbj zSe5(+yGE=FcDHWzM$lQ1Z?>CA%1Iyuqv1qukiSCW1Bc&-h@49tFbOAM`K$%MhYGq; z(=Mdb8GBlv@Exc~)FVe+e8f?}(3glDZXwD$X&-}Zr%EHufLK``s0(E{f(m10Gpv~1 zip{cOe+QoUHphy6YQ=n3>^&=1YQ<i&V&ztBzZF|mOkGKpJVOZ}R|iHdYfRoAhPD`o zCJfAjO>5Ar<~s<uzn7}5Uivr6h%|Jr#I~<T-l^66Eav$kuMl+A-Czo(;)D~h21A_* zQ`$fw6Ok*(FQ;<(B5a<J1c>h2oIp|=g`GTNh0%lGX3!tM2{;A|w$fM&6xeLy#&FBW zLg$8`qxT*s`p<kP{FI20Bq8#+h)~a(@94z@fxIM8dq{xP(RwifN@|u~OhA%2g_*aT zWO5IE*-dg3Po<1&m-?_UCn%BE66HNfnNu2R6tx5x!vsx*e~$$I3b+71-N?j8VH#)w z2u!(M#6@{R?1`9`T<@Vo{xRYha7AVO8L$Pq_Kxt1N(i1+U@-~+tM2Jnl;!>0eF79t za`&uDxqFzE1tpCq?*5dbmvA>3m(ux<kWSVVOF6@ag?XYYR>Ap^S5b0}94oOE(<En$ z!u;GijRYIYiiCzU!>x6)Op5~OTCvw2;0wtUob>WYcvweLn*2RYH5c0bU(rF-f+I~e zJ?;Jr(tMPJ0|^`4<^~5H^sJ2edjcqjt{$0)Qv~`U4^)Gz(0`5=KwY!|f-Tvtyx{Mh z>UY-HodcW0prhZm;p_foQ6+hf2l<u`8iBB-=?pz}zcz*!!uA`N$aE~WIpFqu4VnV? zo-95=e42t!iI1_GgLA`ZxTinmQW}4NG`2+6JNk^_*djq;ddC;~VR*GW0Rc<))4~;g z2LDMLdW{_CRVQa6OiuGzWHovkZVzODhQ2)jTTloaCA8|ORvPQ6bQ~a?8!NZrbl8%d z{GLVLi#U9?eL^*zV&kXaC_#%Te{Z5fKkPxRwAFGijIrd5F`k?;MzdBpU9)32kS*M< zlV`D$N30zl6+ZY?Rh9fosNJat!B{j>Ohc{B6>^iD7!8eD4O5Y*?yiCAaCS<~NYV+e zhRHr%y%HyDErVkvwwGnv>kvLO-rTR7pmo&@vJdL!n2n#~q3B!C%!r+T--lM~JvOCr zmX&ZPC4eH3zMZf!;lp@*Xt+p=5T$WG!r={2V83@`)=~Ac2U1bZXBG-lfSt0eBkU(X zBsp=58&D1u0S23U?Wx6=&4)aSdmK=~W#JVlCwwu5)X?WQ^p~LYyTw0bl>rj~{NsJV zan9z#Apbr&%YW{*w@2(R&YC`73g3c4@(;rh-7PqhhQ|>F-4+^^RuM2Fc83FigO{62 zKsg6dy~={YUOskRc7jj<O28b9t{nuDlkIVNY*KhSN~-23iv>*Ly2!btcgsodhiaaF z(Nrfzump#s%=((j!^xyq;0+K8nAcaC*^fYXVZw?9q@DMn+llsSHX>hA1Z0_%q`Njc zOeE)5^kMVbq|hXU=vWCIk%UpXI(fk9RTw<1<4v^u?B%~hoHUL1ymCKHgxQDre~Ohj z^d85?E!F&ORD%QiC617{XH)q;;lk9jDTT%DaafQPuv#zQ^bu7ATt>$hVvAy<Po&l) zQ`Ku*FQ%YzkMOr)#t!YFqg%9OjU#5@jI<-jUlJea_!hV`L^fQ}WQ@nK%X)Ym(obiW z9tIf5EK1lz(3lRSMsjd~A6sX1%pMaYPQ&yaAU|(83}~9OpspSw#gHj%|E5y|0NeO4 z0BMnlU|#@v$PWp-o#nJ_3GVAS=aUZ5qZ)f*?VA*a6EWiCUEJaA+xVr>vB7<upy=`6 zK~=->`GOD2F7$Fc8S&#d-jJr7(>HPy^SbCOY;q)zN!e7K+yM^r=h#~t3dIqrFK`n< zCWLBTQF)H?&_Q-k_@P+0N#J~Z@;EFjpJP9)yfEKg6;xihC#~Q(ZYh#;qTQRvvpOgC zSG^ZDX0R2q{XOr+jl&k`Ez`a4Y{Y_Htc?20qPHk7(ifJ`L-K^L%WiOp6rg*D1{_>^ z;NUXg%>qvs%rFQj3@McOm7u2O$gv!KdljX@JDk1*#1|Q)^fF&wE1z`!sNP{qPFaTf z#0ZxdTwg#Zrfdbr#r}<G`Ve<5>=F&}qOo#d(l#A<^XgOJ1`lz$Z!2mWEtukH0>@N` zI(+e;%#kF%0kCc1td+=iIaw0-kj`l9*ONiM1}sR^L(3Awf~$6`=uBEivRA8$iqzrk z<aa-C>a9-u``*_!e*WDSr~RP!@FuyaNORz<w6!}i45Y_!lRPR*7HIuqs^%oOKH$_z zb{PF46zPWuuqA7Z3T%rxjU{W~_pV=%l_;%~SymVo!+=B2WA+Q)ckA-Ld&J4MuhQ4z z#0D!CpC{1g1@=DyA@7N8e`Ynk*a6$Vw)ltG`_eMvWot>`6Sc*=`r{20Us4QXqV>Iz z;&Y3C+#iop{OaOZfBb%mPb_}0KmGv4hZp~d;^`>A8F6#-TI_P32pQYg!Yu)ftTa!+ z{uwgL)?fr&xw?NG0)Ol&1iAOjp@)wirFbMw2l&deh}glRfCFAZUw*gSY1d@E#p!L| zcm_?kSID*A)=jDO8Fa2`GiOs7{QWP{k8Kf8xSW{bCfJvg{t72C>gg9VcPv)3Sz9C} zl;5gO!Jmx3wfU`DDc=MRNFFc6>2FLjZiC<*AQX4gBeBNZvWlG$Ck^4`(=M~L#I3AN z=ZZQ<=V@wwITqVLe6Qc^)IUzSk%F-<@xKocdb{b77=3`+yqg}0VF#$yyXleKx(x8q zXoKPJ2;u&Px(;y0NszV3-=U>rAo$xWa9e^a16By_P?Ufn|H6y1It-12KgUIfHl8g7 z7yZFlxCZI4A1z&LR2+>jT)Pv+P|DR7H{moQ%MuKgP26LDwW#7$-B?y}iWsYUl~FnZ z&Yh<cAMow45#X>w(w`zbS;{1H%i1b)c}FNQ7L>)=Sn}GzaaLSC^e5^9@$FK?um#wU zRT`XTjfHCqTKF048dwrX9I+U57-WGxD=v+$5>fc}gsF4yLQYHNlmC*L{dfna`*0e$ zCb{(s5*8dO9s}l79%^N+q(2(!Iw+3C3*c!b_>FDg)t4Z%X0Ud1HbwY0vVlOWC{*E5 z3eo0n4Qw%kNHeLSP<Xjrsc&`JwLIo?7kg5FJXXyvo=mUd#Z%~&UM%^3YSU7AiI}?6 zy#nDMuEtV9?9IWr({HIv<>gpr!CpmYRxzSr7|bE|d>kDyr&zTu400V?93i@~t2qsu zQlCW}3*oR2#)HpV$S9^0t62TLW|dHtSP<mPkb#{nsh?XMQm>8Js`xTM1D1xmCBdoy z-*z>4Ma*#qW?WO=7MzSR%zl<E^DmkLBW{O`>C*@~NxvK`uO|k~sUb)^<dW*=e<V4W zMnQ=t!l$iy3S0)N3R;3jI{O>8sN-Zl2B*tv1_`TQb{M0;-Su;)XfE7y<nR6M6x=jd zMsw;pW;(nH<mR-d6gU$(n<pyIx4|ENB6*3R4WrC-ItvQxV1=_e&Gb8)Y-Okb)ir*A z!=Si*L3_IXq6gP!UChvafs!2U3rulz7%fv8JAno+{_v=dIT>17S>o)H#K+<TSy|~| zC=kT$JA|OiwBaas!I4Bt+5GystJDjG?Pb`c!&HqfdBA3-t-f#y#)GazRzV9~bNsz@ zU7o-9SSOq<M=lbTr>t6l1|8A9q_&_B)#U<587SO5CqrF``|^r$AT|Ktsl14$T4-ce za~hgwHO|CRs=uX)EIv93VlOk(@oBlUtTTuK7}?X?QzW7oWpH&4M<QBMyAs9Ob&q7) z`Y)q6<HT|*SY0%MtmEL)L$Cx`6ZS9!Az0NkVLiN7tm*o0I#+GXo{r9iX*eBigO7k6 zccrl9@X7B9R8__5&hcTGmC;7nA!jjaoww;G?C)bOv}pnBY5g=M=1|~Oe?83E?*ObT z1b2ullG*Kj)j=xY2n;<|0p)w>%(WrTUt>*4ewWE9BqqPRHvlmm_(No#gNRobd_evZ z+SM>R!?{Uy##0G`SS>NtvOMWMTeV@4lofmE1MY<qC1BMPZ2%DYLs?nHT^Fw+iN)6y zO;U&ZeCuExzhJ%o#%4c@+TgX3AFn#r;|o;d9u@yN^BwqvfGXDn_|p&|OiOzan_PwU zc@HMe=Kw{<2Xeve<@?Zfa<an64KvR(D2}xyR>AjOh0R^N-^_lBlDfQSmBx*rAug;L zM(!9F>Cv6v?hBwUz5vxg@PW1yw$>+*LwF9MzF;+fI$y|j@&kEp_OHE3z@WXsn_)V- z1cT&0WZgr4WI!*4bewMw`Ew>U9kx%!7N&kjj}V-y>X(;%;`=>pC^)<uSF@sRYR37a zd&m<Zu?9Cmp|#ns6Z%?jf!1SYA4a&K%d*qa`;drZW(l|!g7cp%@OKq-!8t4az*3Z) z$c&!VaOoFramws6glqKqcZ}IoLG9}PR*+c2QCZ;*Se7lD0qJJp&c6*VTy#icV=n&$ z)>E+vv_SaXhzrNC#5mlI)<GwsnRPM)D|6*Qsm-Bx_+W^(T71}sD+*G#f-=^?(m#i$ zyQ<E&V&w}T>1LbWO8cBktOV@~+J%;q{#VHtvxzI4k{34Nq7>`8CeG&fBIk9Dr`5ct zK~6Zm<0YADO5%;!e7Ysik>A=Do8LDO`g$PLn+yr{iY|f>Xin^6u{xLctmgJ!-0T90 zz=0_S+?+ba3Q)xDIRDZBo-%iA9?#>jfepC}D1a!agS&um`A-gQm~YxgqS#fm!mUIf z1#Y-|$o(QML)T$<^?Jyzf|@d`tAf1nIm+wgD$0mUuu@=y0YN4<)%$P25nPB|*Lg2) znZXxP?NbJBB0Bz-s2v;WIG+mylbh+CcOl$_c?7iv?r$W|0%qC}n6U`QDx8&7)xn4@ zR^hI!GHRT#SDD!)tH|hv%aszXr7RUPT&DILw#1A5O5yuTlnxY-xX}?3??vT-)p%30 zZu_lhR_9X0t!2}tu0z|P>_D<XS%FQ62zMjaoA7NS7q>xArfE_=?XQ3PN+99B#9u@m zbhF0mK^!`8XSQh5(aA1^o#gDuP9h}Z-No9@uSNP{)=qExvBW}zS0RP2Q3K4e&SM`O z`|Q}s%p=;l^JiHXpm4_@zPQeRVn4QVxEF9+<c*3Ku$wcM<m1D5T%K9*0YWlD&hzi% zAmaNHdzGEQU1+GM_Ml7Br`1EI#4WX0B%&_D%nb~4mM;rbR)#%y4xE{=TpkYLN=SLF zF%A7irzmD(c?9Sg1!LI;C)_WvKD;Gwmi|>Abl%@KUmcsZIkxJzE|v)=fBimO-}<`n zGQh?(Pr)ID7pdDR;zlI#?Aix~nBnFzuv8n#!uk0Q+SJ@faB2bS!%b0g!D0T(y(U)A z;T&@V_`wA$CZ7v3gHvk+44Pr2>?2Wz(<5%fWLKE?<eK;7nD<QQ*-1dm*l-(f75j{a z^@8JMP&1EV%7ae-jD5*kv1_q<Cial&>k)i6%}+2qfk<?{OE?a?RPvux;>KUvFkOzj zd*x-7CT^JH&k5#n)*O_v+Y)Y~xo*Q7K<<vy(4Mk)w(vup0x!@*e*kCD6c`Mdi7DVe zuzAFgu??Uvp8%*e&nACxxVb7n*p22@RkPx?kOjS%G(EWtH(*-^F2iqO(rH<iD!{X$ z&~DQGFh^;_u?2&huoC2T7r=Q!9LK^=UKKGZ8HF%CwUt?Zvx7eS?~*@*c6G#ATa+ri zU9-vd@=J0zz|2DdLY?=a0KVjPEH!5Gh2pguF6;^Tq~AwiyZ~vIldHIH1dD*Dh%jL! zW3q_Shm+ZLJfYF~I(i#=52(P+>UQXlQ0EIsO1kwbQM&F^EDHr0nh^tqwh)D2B7?_n zilAi&`QQE=G)hu@5lxJ9;K%_k0oJMH<2)NCd6<`o@)-0kXC=MmSfHk`cDiQkG`}$q z6y~3x0xU+5+li9FoOHubIR>^gcpbyJc)-h;taj85W;S(+Ri@{gWqvXhWtv(Cf0>$e z$lbp%!;Bqs(+)|yc1RbX^k5a#NV3>Jpjg%eryF=Q*T`t}QyBQb7ImkwPZNC^B_zF( zX9T(9EIyHg$#JkFe-8TyIOC_SA3Sie8c8r`C00{j8cFzr7LXdYIx2CGz~tKqz*{(& zWQ18k{xfpq06{0AH#WZ!<c#9H1ZDO2H;*II#%JQ$xeYyx{G<64#0HT$euNgO*ceY7 z7y1~}VN77XuWg<l=_ok9f}Fx#n{xSI0VW)4t)jVxIB1AT<b1e;yP&|nq$>(Di9HWr zfsSP->B2i6qq!$mQ&>m2y&rCJ<(~y}+y7L>SNvLN4Kb7IUjt@^Au7Aq<MG`iZu{ZH z2pnq44>)mgC1zF|GxQc*KD;q8ux7+CO`gv4T{Ko#v%dU$!4bW!U*Im9JC8WPF|nPt zQeq*D8N(MD6*w)9sp$!PsEXxY%SOT9ngx4}<vnn*#_-mC(59)aUpa2lznZt%9+`J5 zyV>ErS=JWN_Ex?Am1omf_Ueg5Y;lU?{E5k{_LcT!Xj6f}<gtm|*i9V+Umo2@ekb^d zRfaq{<banNtCHDD2Yj9E73Yjw9kimtbD0cBDWF9=8AEEV>Cr#788zpWDC|YJ$FPUh z^t4`dMCO4fZ?5%zxH*M=Xos;&<U)4uJ4kuQ`#w&Lz%TzEhxZ;?^Bxd5U-WDm!(Kb_ z`T2JytH5`$-Jwk;q^?bji{0EI(x0=irB4Fidw?cNk=Y^#T?r^kWQ$~Di3}pcCmQQZ z>_9=AzOOXaqY@0rG3PNB0<=u~L&(1bPZ>||5?Nc*401J9D1EI>2oMpc)z>K!eDq!w zWId4pJ{e<0SWvfgUui~8;tB!e0$GPZg&c_gjv992vsk0RI|H+_UL(yYoe9_aE)!P2 zv-rMyo0xoC1|XKT4GhI*zXTBuOFl_z{YbHwJAY4ehpI{}P{enUC0TYxKo(J)Q?)+o zPc%`NTIC|Oue`(pD0kK0TOw&0`Wi={NYS^#1LF=-92g$o5lI*&2ldDrAOR~9u{q%g zHfPzy@A-#gi$|QPjFr2w<?`2jkQMWBoRAlw-c*9!?9lI$-9kF{sMI1@eJI^1ruGT@ z;O?ymVf9Ak!{CA4xLLTH_PZ@^cu`O-16q>Q84g3yg;!hkRLbSDa_teq*X_0o`0%0m z(D0WWy)eqKb)m*1j<Dnr#%mW{2Y3?YVW$p7jx;yB2CAXfCVr+bkxkrxwcTN+5@M{( zg()+`mF4~RVsHSP4@)__$AvX#!ftOV!DV6>SlgW~LW&z_k`#mg{XMrDKH2a&a2oX{ z?OepcE{Zi*>!*tSUT2tkG>HrbRGDl&kD=FMKan;-2`q;f|CSQ=YW`cTolfk)%-73% zOugw0wkplou3o$h7v3;b#eKb96b(4y^&A0;q|(}Mk@gyv)|f}9l4nS4sS|gb8}sGZ zO$f-we22dF=cU4(<fWezzciPXG#~D3ZEQhTH7zN@@vE&4!D0}}&(0s89FQ3<+wWh2 zVdX6dA(kF4EIgd--TX>uv@xxpDeTp6XtZ-|X)jLLEb@LC+g8-eCK(kjtbdgsE(c=x zl>sG62d=SkaaMWIix5;#>jejNV2^%b-sZH(ybzhoS3A6`Wv#^0Zx=k9#*sAk#1`9x zg4;z3?lMvrV-u6~Rw%f^kB{!61`g42OJ$U1K-n#IupP2-FDB}){5NeCy=0G3e)uGy z={N<B)R>N?vBlS7%Ty@Y)vV@REcc>O<AQ>u{538kBpWw7NTb{=<LM2_T6Oc{bZC)L zq(#yly6M@JTVFSdw8&dS^uyR#>8?`tR>C8`xnfJdp*$J|(n#)?bC)n}^~OrC!yU@T zVjJ$LMG6d0#)4j>^tztTIUpTYdxdx@G1@zaF24f)0ZVMg&AqWz1-(pjwe~rdVDvzO z-Y1$=+YR3lC0b8S)_Uo4{|6AqyL4bc>7xPVO$-}qT0gyq4-P0x#DF5ce2dr^P(bf3 zLfLMSQ7Y+M4K~wW!@_5v!isY-=a=kWA|<&cgT6Q8DJMrZkTtDeIj1>vAOx}s<@_d1 zY3fgWLCU#Eko8R>E54!e9Ya3e>xd=Ex?~7h{Vv09l;-qeraP3u-MfVXsF0zO?5U(` z^wu%@M_m}8!JSo$^b4L~bzP?Zrg`FXy`slVWP$DUSIvU%6Q9vAoh9_%dzcqgIhc3q z@}8-EneS@D^fouVF}x=?a_>oP2b(|z{}(Xt0p>kzWdchg+-o<OvkN(|P3FwF<lB22 zyO1NBKMo%ib`td@_oFgWXoh+tY|tTgv&*ot5|>_Rs(&#i2qa5f%mtOBe}#Du+bI~2 zZQE5kwSsVd3kSKe_+S=4mY1@k{<aLq^{eck8$o<nH4>kaw)wW?FWyyJU`~A#Uh`JL zC^X_(4ZV3}Ve|;}X2m&n%LNA;mXCSQmr4GExNpatrWV`RjbtrmH#xjF$=WK&l8~Uf z%h+2a;JvYJh2Tb`=FHSpO{E6@`V_5zRh+@VKRGio1JYxG?G!_z1wDCepMo4(CV&7s z`DRCQqR@kSWcGcBajydvvhR~(P#Uo<28GnmnK#J>04fQ<sFag<)mogH+1CoLYyy|o zO|7rXl(bC2dXSngGQ4b%NqaN4HI>q&0U%j}44QEt&ADPPS*R}Q5R;-4pJ&_vMFtyk zrZLP|Jc5KCx=`z~A0xR&(sdB)b8L9*UYju&w&ii&2{g`v+?Z>L$%2-yPopGKtA-p~ z;230bvKz@5dvT^1>y%u+_W<l3^e=f2Mls@;H)pmb7U23pUA+On5dz<tAUnwqO(&O) z-@Zf#i4(X+NvB)D>QYe>n7J$$!|t#Ef3ua=4%>5a07wiT;uz~;TG0K3O2$tJV2_vX z<wi&2hY;episL$buxb~G@ZaqhD9~<#ldeEiom3dk^8G6S+k*UG9;YhmdV^wDdg$7i zYy^q7QGAe}CLn77-*<W(mN11dQ4Jo=z_kM~9U9SD@Xs>#7K-OgJc~4!Fa~$Rwt#y= zF6U1H87y3Xh*#3CI2x7k(E~Vk9snp7+t@me<EoX|EbEe$H0wtN?D6Imc_|+py=d&6 zj^djhyByE@i@0gE{-RBri9zW6G1^nOjL$=fz-T6)`i-i71%jhTI!jOwE`RW-Bj^%d z%Yt+}P64AEXd&~?XJ{}vyFCWMXKCG~>5h7(aTg*yL6&#lde}D0-LYscFo1b8z|zcF z=|;?hsF~e?nGj`O19-rRR8?-oQH20f%<NP6&K?ug5(Qv)GCBu2ah-tjzyi?Sh?XMS z9HsW*V!r5iAj8d>OtiY71;1!Qdm~Y*3>VqQ^{u$;DZ4o^t7-YUri#DQ%{Ta|6WoB5 zxLG;S8sP7q5sguAWHG8U|22CBHi~@S!^#6sqF}&AeMrZ`dk&Zq6H$0jS-0Vpm;#Z+ zcx--IKv>!jfr&Y2#0&%?sklR_61Kw_6;z39&4@0^+?Ey5au8UB3~=lbtqs83eJ;SF z)RjyE`7FmCBHR@KW1?ynBSx~f7VRYh8Bt;`WoI_N>-(ww67EL?3k{SB9EKFy?mw4x zNx?^9tJ3#VQ8s1gTZouZD&G|43Onx{_?OH{(IzV|6cij;r}u%>ttBP8Kqkf5OYO6| zISIJT6lr|gG%SPHc?BhvXqf5|g{CC&RIk7#ECEA&=RJ8tfxQ9`YMF%%j;<Do`jq=G ze2umI<@nBqH;=NgY`R66#fBTDN@3@4d?+|VEC5ypf4&UvVwMz&jsV9+X(J}dT@~Oi z53=C$Bf&{5MugCxBwmy91#iTn<%oDIT$_s6!}Qe@UDZ5te*IU&@WTayTJ2Jn&teRm zFth><`>7BU4v{$McG4;(AIJV;(HTe&fO)7~OG*a2d4a%}AZ&tG-Zo|DjUtVz&KE6# zK|;BIG0N`r;EN>~5P2nf3=J!yCRHGPut|i6{v_r9R+Gxu!{V#em&ywx=g(iKqgkVM z(X5n6*2;B8j?bryHm4+C>kOCA*C2SNkJ`8Qf8M@-qM=t%V6c6+iZsGwNc-kd`+WE! z8nlf-V&7^A$!Ylo)2yZLnPasDjj-({Nc)?jDY)r}+F)<D33;)eXo0=mYQa-bdmCRa z=ne+M%d@bkiFLt#Ss9B_x%sW)p2z@e4Ftn<G%hK)C-EygjXy~WndnZ|mfs$THO{8Y z|44vUr+qI0dOzIpTEc1V6Ih&&lvS2sTdlVQTJ-TS&>%4nEEA)w^m7O1UQ$=)%zlP} zONt<-{v=5uc!5Ob((?8FlqPBG_5A`yy(*GgTO=eDzcw)%Cfejy)<gu2nTdHx>77Ex z+r+g=xe)r^2ZO8N!1}^*V(pyA-+7+$=YkacLj-k?*razdfk?h!qSY%gODK4wmWO{X zPPn<koQ7)-a9ZSJ(``KerInZeKokeNC>0|XuNcVV1N(22`Mm(ZQJ2*NaMqCiDU9+M z!*Ep){R&PjSKN&TXB%-Z8Ou}-EWXyEe`Hf%4)7vUG#K5Py}NWKF4h=LWVJ4`xw?l+ zf$Qz*#Ax1&B9oMHh)QX0(Qh&(3~9y?#uxFkLpqg8m&eFGXqyws$+nH+za1!u+Vt<p z3G-sxK%2(#9}NHq10x@oY|K%sF>@|$jDp4t7maBT@by!vG1&J_?=DS4W3Hu<x?>6w zu^D>0gT`DfGs$gel^vGnqMFm{Sbi<)U=^ovM}T{v_J7pCAK<HK;4i5rYraFfgY*j$ zGNyO$V3#gw78UcBTEs20XoQTC*g71?|MMF#H(D_Gc^3R00hwTMkv3e;yLj+XLh4+s z%q$AYYHm69mA4F2o_BSZ4x8Y>-2wQGBXnZ^mrGc?bvo8MSvz1spgD`Uk!U$&1RXiB ziRLDk1WeoL$6{zZ(?vgjfdRksQ|J|JABy`ECh`m*He~nmN52(q!R-kxq=%5#(KIn} zL~My()Fw7f<R<|!B!jiL=kA;iaIxQchU-5gPQZSrtYPQET@3_-e9tiO_aRp&{Z^HZ zJHTlb-mWRlN|Wqch>H;>;rMA{+(1;m2|oZ);nqGU6zokoKJN)7dKi3EIEij9ciXht zv8{BCA-qf{#{6gCkKc>mtqAa$FGGaMK#t4K@nbN(oBm8cIMe$S7UyjwVs!oZt(d7| zb7u36v2AI6Mx7gFOt#8!i!#n&PTXIHyGV1R3^>@om0y9&buceznv`%ftx7WsYkJ68 z{~S5%M*=IvZ_I!|FZ|~vJF-4R!5u?^u^+US9nODKzmT%6BDOV&Lb4ea3U_`R1vJAA zm;KzPN&FU+$qq-ZTw&O#+%e=Ff|CJ>;X`W~@D#>A8Uzz08Hu~S8w&sUN9<g|BW^3$ zeDDWS+=KJ@svzxwe_1r4kyb#3RaN9WA71+znNrbv@VxF4Ql`pAF@Yqq`}ct17!psV zq!f@EJ-2-d-LBzxEh@}WWgmXVs9Qe*)^O*ymV5o~I-Ae%yLS^jyf&1^XHYoC{>CSW zMaZFqcBaJ7AbD{0QyR{S8-5R)eFl}o|Dq<3+(O(~@Q@@qUI8rpFf@<leWElzh=lDW z)_%r$l)v$YSm`{uSi+of%P9Ush&DTfJ?-4M^g7PABt~Gr2|w`?LQ+OtA{xQo2$vMn zALoi-m~Whm0>R7YtXnVW*CkLFO;bNc&1^Q&q^imS5H5D_u)|n@dtbATexLU{scQ8K z{0foM_$;z`D{_?w{|y0C%Z20&&Dpt&zQ4BJpWKci^kI?7NTNTQzcmF_o`V!e;%S6F zJS-FAa39pi-)sRKso=2>!1=<ZMWAmv04DozN>vs8dX%H8Dv@R(LV%#G#~Sxxe+^nk zsF9cd2PUF0g@!sqqHC~&(nUH^^o|=R5a~Cl2D*y$vd2Tp+J6RX39$y8jC@|dM``>3 zErhERybREN)Ngz)K(XBinxhZ?z-DtnP*59RErJ3Uc=n_hba%dh+}n%wo{lYr=q9UE zNAnjagDSo7TKZ!=T~H-1s4|QE+%D-??CRk+dI9(x8jC{;Ek6>v6A|<R6a@NsXpOjc zKQRr&fnN?f3iknkINBK=n}q6c-%%H^KL6qP?y1PmW4)*>F|MDKC@eYBn%UGK26~-S zGl-TwzX2rlBrtR0_pr!G^)Di+J$6S2j0<80!7u-pfeRop27#nBXiP?;sZB=^zi}n7 zAr7(_6R7j)KmsR<{*jkNW#yot?{0$VS<-$1guRjcj<CrZ6tWJlryd|on$(z0fQeZ{ z#GL%UL}IEaM9A-3=oFIQINm~jIRZj{bHEhoLVj}w<<~><>k{(o9F*Uje);_sb@7}A zvkP7}TkuPvgR*;^=>84a4Ul{9rG1P|boI`dV;+7?wu*naOZ0FxRS61_^r9v-4);#E zY5N&2uGCzxSQS4)W<PLwLM!Md;Sk7!y>sa|*9KaGF6Q$mfW3*gX-Hq_MK4Yyrgnj; zodHzA?*st-l3xx)@D%p)2KtC<gxqJJBc|xVR~(!A<Ufcb;;}o<40QkWhyFqLPeCF& zUUWY=@zTB@-A65jP50X#GBh0^|NI6BAud|sn^B*+S>|_(x0A0EZx^o>Z#NH$cMe}d z@9X(O5%utS;+@BD5bx>y8u6aNFBk8be3E$2;$y@+mn-63$kWAp4mbZdVdyhA`}jEo z&CR9!jChyx)8f6DpAzo?|ATnn!e1Bf75tERui`I>_Zt43c(3Kph<BJjA>QlxqvE}R zKP28N-znZ(d82r5<J<5i6rQgKm+`wP_4!5$-Y$Yo6kH*K<Oj|xM39s+Um$`HQSb&4 ze1w8CM39`j_+$}$oPwi8@CgcLir`Zeln~Sp%^0}xQgn(so27YE#mx!O1AoLmInKr6 z*Vh))T?$BfO{8pwKTANQ1o?}U@{K~a<KP~y*G%U5iB*cro4O*I617s?-qcmelucGj zjyH8pGUYZaCD)s}Hkq>2O7VD8!^xClk+M0@JA1uI3G#eO>Bk1M4dD+9c}&Na7W~x4 z^W9I2X`?aIn(tqUC}u^N3E@Iznw~oF3u^DPqlM#C$AYCAxt@OBJiKYxf-=kv?Mt<@ z@X&POMyy+@81d_RUncfmaw-S2oM7@C!T;0Vxd290UW<AsGbBR@%pgI-dk|0*#3&CF z0ydEZf)W@AB&3QG$zT#g5|h1oSON(XY?3jR+SaPa(~79Ix3<SVL~XStKodZUAXZU1 z6_itV&TupyBg7h+`>lV^B$Ei%bK85*z2}~RmA&`>e*f!VYyE3s2}W2t*mRDL+r|C9 z-BHe;*vF%45dPr)Anr&THpVEgmMG^A`}nF4xLvr{9lmX$=(*rPy-;UNcrz=pvd2^n zSL)zXy(+bgPpeXY3}em*(8-p1R3Xtv6xu5|ZyY%94b*Ei^$HB@{&Xygz<DtdNR|Bx zU*#HVe2GU;&gE_E8LA+eOC;w|J8TKbaD*ED<(~3Q?p?lTe-tiXQn=BF(db8%VEA10 zqjfj*F!LkAhBIjH)zBdUP6W@y^tR*dZX2T-g?7<1ql_su>SZ$vqKpY~r}R<HrfX(; zv@s0F!7~eNh70}%wqxT?8Hk-Aw7+e{t|KRWyQ21--OY-m>4}Ze^cBgxPX`g{_}Sgj z;{Nz*KOU0)AzWJ|{oj-ROTOmlKz&%Al>X0?;}_&#p&K`I^QR^C95bfVxkWI_+D`>} zt>jK%J**<`M(5?Cj?edJXX?3IZ!;XX-nOD`GBoXw3DKcgA;t75cZw>n{P>CB`0p+K zcAB=$-}-B*tgp>p$pu-PZ65}AingU;cc-aP{CS#uZd=cv$ANvoIBDKk^!U`zi)x%3 zO}h2-qJ1qkU#m*}V0Y?_%kHo$RFtnJ+SeK_Wq7hX)HW*&_EV*V7;VM3zT1~HZlWN` zKoT$!a07{e3vdAbjBlN4$hhwmPm`y~^EA)XJllD;^X%Z+!LyTRCr|jI_jNVdg@vQp z+HIYo=I{rl(xt$9;9f}^>G<1FMlUsve79;Ja*=r%*&;MYIBb)C4ZNt7u23h8@9Bhr zpMU&B7x}i|PcFf;Z_?6_@=99aKKaz@lS$Gi9h8L-5_p@PKNA5D&^XsN?nwPSo9_eF zdLOFR`$a_3QnpZ-p1%4Z+V`RAh5Cq)+akhI18NxRvkz>(52a_FTXLDI5iv;namw&C z@GIa&U@veGcnx?Tpsh#J)+2c)@=WBJz%zlTizmXO--_pnfa<p#Jh7_%Ejv$?=tuUA z)kfNP=x-nqm<)v5m~zts5q+V)scl3*SYa%;UVRsyY&^f(dg~9Wg%*hhYoYxJLPx|( zyLhoMjaZk#yErH2VR^I5Oc=}*dj)i^)fj9R?+BBm{H^{s0yly{HDz~!Ux|pkc2Z$% z1RP@FrXY0vJ?72C$q&4u)bxi8Qd?B9Ca7OE?$5#PV6w{Px{`#Vi9)<uL<~64Vi^(j z{uYI9q^XIkTQmRVvF<Xo_+M{3%rxjjqI;bXkmz3Q4rr0+GWcdg2<-cE5*?hX?^y|a zqfY`hD*@Qy{@sC_J!XYVj#E8^JW#)$6NdR?h5ES~Q24v-L}0jiRd;IUbd|m@`?%7u z6(;G$QxmlO`j?$B?<asFdi_+gu!vrk9Xus%V-9;<P?BsUUWAe`&^JHc(VCtp0y2TY zeAt`P6Y#=GR%|4Dd<7_0j*6g0ai8LLgtLVQ?wh@h^8|OQoLjkV2~~lc!NH-AC`?#X zU|h*U9a4eO@iBK&tYdZpu4wu|m>#>Dr^J1SBolnyV}9RqJggkQ8*<!YIsQsHJ{WRb zgJb@VNBN=_2}O@s$$QLY%KZ`Cx62<emqjU~B$z(WWBwA);B@&y$NiHMQgn5k(I+F| zI8mJ<hBak(E-pc6{WR<^Pw)*Ak2!-5dZT}BHcjN#0x8?2T%?<Xk}*kwAQMDuPZuvE zw@dl(9O5zOhCDeQbSZ!Ie&K0O3AuB8krRwMKM+9f&4QPNZX(e^a(m;@#?jE0HlaPi zW+ZISaC3N@s2&Xi)yD|)B3QYRyw`_+s75N(T97zMx>+(SQV0ZRd4+J6-wAV;j}bDG zv%Io9W*{f53OE^I*<~OQmV|J^>++U~gs?uqU)AONpuecLv!SalJPu)+X(BJ{f_@Sb zzO^&8k<xE5KP7$i;fRz0N(t@exF<=CJE`V<4f3LJpW4$C*_V3`wrBcn122ur<%VUP zIaNq$X58;#VsVx&x!8>7HQx#X)yd+Fi7lCizq9=a15F?HhL8a-u~!iV24Y#T^QU!{ zzy%a@KNyVRv@S+2W^M_82|+%>&P54kmL$+nE{9_yh&RjZ#d!=%aOw5)#$eD|pOKzl zro`tR4>7@@#^heAX)EMxiF)EM$opT5EPsMOt83~$^A}r{yuZuunYhI78Nb9#po4sS z9bXXlmrD%Xd|2k;BD{-CLiQf4p4jVY!aTfX$$?N4<?e#qS_tYheH+J5#sp=mK7R7r ztGKn`kN;%@_T%N+!p2{6Z{ZT_-a^JN9p-#lPvqq`UINcau?sDe5S*&13s<cQ{V=h> z@HW_`44C#^9PeKepR(9t^ix+E_T()7&373PfdQcx5<zy$(J;r}aA*9o#h&H)EAnsV zhC=XgnA)F!bh*%4PMgox2{FJ0W+`hvSAozyW=uAZJkndnBcE@U`kLxa(bQrQg(0>d zW6?^fPSE2)<fAw4=kNH<ShYBv(>R)C9OLM|7oMi*QJXFi0yOtBOB^24%Q{IIMghjK zzr7ECJkUUM1NN;M!~Gh^%nP*Ee0G%)<I7Hr4j}e0$*|!FWfgkly*H7k&|m6qP%q=1 z_oeUxSLDi?&yt{SW+p(3hn&+GJ8M1G+LtRQhd7PJkL8Ms*1k@cF@)g8AQj3!Yq?>c zCt3Vlio;UG%JAx0$gewJc0L!s@JzE^cQ}9hvac;EFoH{5<fmWL_;O8KLCvSba9?Nh zwYh!G`%|+Ms)kW$2NydlFE{L|2iA_|)2@vFqJ=tf5!QCxN`EmbmE&cz2;9sCKj%NK zNU*&L(?_cAXF>-zKgHecr=pD6z7x@U|5~UW$gZvHPc0`w^<R6LnFJT&OlD$KtHz+$ zU>an11p`i85cF8iVrFY$?WJRB(CCI_ao25US9JC2K$r@F#Bi9TUS4RZ?!KMRv9o(o zPU$Cx$&J{e^&=Q?X!rREbDV+EOBaQpQGbW?%0`C$h0ZJXAAtLYapTDIO5#5%+&Dq} z!I2;2bK6AzECtpB-Di+5JFiIU;IrLf&wpM~Ww_vZC6vZz<Y@vYfMdX6U>~pxcpd=9 z{X3jjBr|_dDm@aI2+R_f|Ly0MM}H{!s`HA6*9)9i9;YmFq9Me#U-5nn(D(?SG0uBl zk<ef5yrR+#r`3(sf7y8@l=f1xxCJN#N&y|%2-E@J2k4u>!+AwA^9P^d@AJSu;JCPi z`{r*suPE$5&KG&P=1Z_&gjTD2wu{9r-#M_eGc`i>i!uiI&P5v|&!lC*8wa(xpP(gC zDA#L{I2=Uuk-28IymRPqfSIt[c}i<OXTz6k>I#RErv3nvcIClH@!{vM)zJ_weD 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/cli-64.exe b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/cli-64.exe new file mode 100644 index 0000000000000000000000000000000000000000..675e6bf3743f3d3011c238657e7128ee9960ef7f GIT binary patch literal 74752 zcmeFad3;nw);Hdr?j}u==7yyqfJg%kqCtqpC80t4LPu^(N8=-ER75n&prFR&UceDB z@phavWskhi=#1m|%%F}lj?UsZGsvQt5J<wlxB%iv+^cPuAew~rzTZ>Todne9_xygp zKi+>{KBRBmT2Gxib?VePr|Op8w9@9V*=$byS(eSV22c7I6u<xdPaBf^ja=8y_RqdM zMy;_&c8r=e|E_9ZWz~H@sk-eRU&U?r-g}?!yZugIm2t1{u6uo<tFQIlbKf0zPV{)P z{Hdx3p3OZsJoLz%^k3!LlXGT?_n*zl!t?Wj+&S0c89qN_PPKRroO6qKy5>w4&mnWJ z$MZk#s+do8oC$GRiOqJ$BTifH-`O?kw07GVTXsfYo9!LM+%035<l~tu!a+MdD4b!l zx#$P~(ob6@QVCi32fWp!3#G~;R#uXJP`*?Q1#MsC+HK=SDD^YfZaV=`{(t{#x7k)o zP=BzhiTa&Obfld17JdjI>U*jm2#J3_n{DpIsylAeZ?oA}or@^cX*&;p@8Yl5zaYqC zqReLd_+ljZfRn*^ItAvsb0S~E#7db_^bvivWg&Uk_wpg@|NZxW0s~rXw%@JA7W#9w znC{QhVoUu#b(VUadc9_T;ft^jG;@np*brtX*3qDS^H;5NPdwDuuEig)w2D?9%(2-D zI|{#yRD9iR8?D95?Ge^qXDz=|8CgU9QI*v>6KammHk?*-@|>EZqYYnO$MQiT*8IwB zjcsG6_)Vxma~#U=Xm-rjtfpi}VFwC1Cur7YyoLi`)=#&Vu0f#zy$X$$g*3L%uW3y8 zmuYONzr5Kox_P?Yrm@-nV3;*)<|dyyN4-Uz-LyUZkNTT;gI4>+ToAv;T(1p4{=!XK zEb1>4F$Xl(sI2a*v18FK`oNW%)lhSElHqI)TC-QUqg#xxw0P7X1TG@+NBu#}xJW$Y z4{GsQ{sQzzi-r6?etCazhNb=jn^N~z-~hqkY$f^}g8yCNU9xZn3QMGGaTEl`MFX9C zG^<s!wrGyln&R1p8$mpEuS^ZJR%JJ%CnC~F_JWC^1fz-owidt!7;Jo($7U15xt3-u zUy3=Y#UB^>k^_1rR8RtYQ(Z&ZG}fxIF8)$B1zR-ss6<%dcHRYkqOqs_HH5(0O@!H7 z(-{Bn=}Th=WLG2XbB!I3m$?Ojp&R@&FvUVkV@K53GMlm?8)Q{d_^}qt<JSQ}bq%^# z85y!6Wu_fu!h<5xXjfL}<24xlQolK<Y}moa%gnBlx{vj6u;wHYVoUM>LZgkr!HyQY z(XX%piOS;*!3)0(v9>){ouv<muoj}vo%}U`p*cDWEvoX_VEsf5bo|t5S$>_)(%i?U zS|zq{MF|F?IUKvFnF@^q@cbE|2r&0wnTB_zh%nk~0w9tZmW7^zXwRVMAE05(%JFqu zi~-E^@F=^jZj0_N+-rF+c@HZ$%}<d0_%!MT$rJu_iQe0gTG&7sJ)p%S{>o5%#{9y) zvDf^><cadi=%<{1=JIB@%@)4_lic$tKm*-W&POiG`_)0B_u0q`nyieVZjA~AiER|o zPeDoHmXg8-5KZA0ypAW5Be*Q@ODI~`V2tOVyU<?T`_lXL(B|^nK`vC{X@3_%QoE@Q zk6W7<;LupaUuJH#Vy-7pi{-r)b%;2kR)X8|hSJskLRLE=U2XP{R2!8YKC`*r{Gk^= zyn%S3<b(-Hsq3jbVRkZH!9lBme{1X;utZF+Nc<Z6vSC-UDO+X6Z~hv#8j%!o?1=<+ zEd4ZGu@z|HN~Y-k_J7-KrED`MRfM(i3<Z%XMtf3Li#p?XS<4C{%=vz}Vh1qx1d4<m z+xgr52n$o*mjyuWV$Osd2|%-S_Zf5)W}5^X1QQf<GI;F`>h&rSL^*gD7~pzOHv=pn zZpOX|VMKkAilc(3scUTLaN!oqd+b0OM&e5aa-zmVIg^N-3ba7uqC91!t)^(Ao-0Z= zBRe=&VB_K>f*4`+Pn0a&i?Yl$8QqaZV>2w}Ro8`hpBI~vsjPOLi(vhXzC8J=&Bped zU6wJL|AUwqsICB*_!{IcXlEQCj!$<ajsQlYi2^( &sjKl@1{;unAiW2w^OujNoW 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/cli.exe b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/cli.exe new file mode 100644 index 0000000000000000000000000000000000000000..b1487b7819e7286577a043c7726fbe0ca1543083 GIT binary patch literal 65536 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[c}i<OXTz6k>I#RErv3nvcIClH@!{vM)zJ_weD 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__init__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__init__.py new file mode 100644 index 00000000..fe619e2e --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__init__.py @@ -0,0 +1,18 @@ +__all__ = [ + 'alias', 'bdist_egg', 'bdist_rpm', 'build_ext', 'build_py', 'develop', + 'easy_install', 'egg_info', 'install', 'install_lib', 'rotate', 'saveopts', + 'sdist', 'setopt', 'test', 'install_egg_info', 'install_scripts', + 'register', 'bdist_wininst', 'upload_docs', 'upload', 'build_clib', + 'dist_info', +] + +from distutils.command.bdist import bdist +import sys + +from setuptools.command import install_scripts + +if 'egg' not in bdist.format_commands: + bdist.format_command['egg'] = ('bdist_egg', "Python .egg file") + bdist.format_commands.append('egg') + +del bdist, sys diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b280a5545c5f572af5fee4ef37a397675aefb68e GIT binary patch literal 699 zcmY*WO>@&Q5S8utBZ<?5LL1r)Os_dK>A<zaz#m{3xT!E2C#$3?awH_B5U%_hF8m-} zIq?^IVihN}*kkGKn|-_cyf1sb&c|PqPw!(wev=2!5b<mL>~}nXKm;))(1H{)$f1BX zbf60*^xy#cFn~vJ2#?_j9KrE&NC^z#sf_BF#!<j0GNB3Hr?OS2G(~R2<D2YrZVWs_ zl*8zf1m>oI(T^x1SMgN>Cm+c8xlb!8D(l-b5Y{oiT<)RKHNv%!!1y=kiw5eA&w<}^ zskAS7Wj9Q$tgEE-1!^%^D4*}C?hY_1W<E2@RgTlbR<~SfXMJizPnucoF!n9St@DGu z=3lw~p0RTyg03)pi9&9CubKL*ScM$gU2CZ-V4&vKXHDQc&ERvKfws3M!;pXQzmsv~ z(`|*f<H+=ppb2)p8@$`NYqdI?U~sk&l8<A93nb<^Xxct!3=K0zhoRis327&DRoB%D zCfjo62orr`H<livxwUpm-RCr&`U_?1%CVi$(u4mApH*7(75pUTH1rO~-J7Ya^;8Re zzBP4z@#T7^E?&U&zRN?nt37477vUJ2;P#5kTESZKSHY1Dj>@QvI{0Qu85MCE2VBN~ E0rgbe`Tzg` literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/alias.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/alias.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a21a3483155d148f9c16d2c0ac67f6a69782368e GIT binary patch literal 2392 zcmZuzOLN>r5T4O%wGTfCCXStu5`+W`*tLt~zyVT$n7{=CWvWu8a!MudjMuXDSkH`t zty*8Q;UDlPxNzo&aGEQp`~{!r9<3e6iMFPv)$>r#*I)PS{kgf$&fkM)b(@g?$fd^t z{Sh?z3kXIS%}7ooN>R5mE4L%t=yvAhZsg`(<mIiX1vZDdFG=M8K$yo`F9~aLZ)!(v z=Cd}~JFK%!!tN{Bm4s9;ZKhIHD$V52W0jW0_d=8c>~@}vLtA$_OI189i@kKDyQP^D z?<SJ#Zexu1(u@x&?gozq4IO_BO@0O9_!e_F$+M+XI-wJC=m}4e37OJua^yV)?SM`} zj_9E+9-NO%2sr4~4}Psm#e<{>5;3ZBUZ`NN6hW3KE`o6)WLk`Z-IGA>XZ&~|$62b@ z!ZZ5u8U6H(?wrv(p(9%0g78rQyhL<BgqC&$9}Df8CGcv){+bT|B4Po?&mOL;e7rtR z$Nk+Z%~*fqXn(id_>!$luBx#r%S>KYhh?581zS(DG?9bxiEhdLBlH|UD|;Y_)uBG^ z(Rq;KJ$N6Y@%*ttc?3=V2!fM{G7?#gMmDn|huM+K=0}u!2d!liK_m}+=8P!lK5H=_ z;@M_x)-iGIvL5tZHV5!6XxBJY-{0hWX#p?-PNh)8N(E{^Q9)WfFAup4N*DuF^HT6& zb`)7}u(ubLvnB6b@tgJp&&%grQ*m~qQG>Or0LVi49(*3rxu6Ns1*u|avI>d<A|Nf0 z(GwC|M%oOCK(`={F3i!_(jrwU>{Ro(VWQLy#7>I$VHh~;NS^JPAU0wV%;GwT+t8#3 zg3u22Xnmsz*4z8N+r!Ub;cE|pw3fK1Z0MaSWk}t7%4OD+zJS<)$M)7MJYfCgr%I|o zj`=X%I|=x4GE~`#f$xIQYZurAMUwL{_<f%jL1n1j?>9JxUUU3Kh~pcFH^<g?#tX3w z-xG*vNW~4*k;#`pK#cD|lSoPgVToF_zTUuab>9mRFq08A6Q+Mbfg?kp7@bncXMjO& zDxfKb4SE~<<69GI^4$W9qnwE~p;K#WQF65Q6oR`=l#43?IQP&Jf1<uaPc7&@vB$`% zee@5mflBe>>JDbL&Af?qeMXgSQhb6tu+|DWwU~d<Qod>%i_6F#)(U}d(^Fe@z}96H zcD7TRqVK(_jbwvxwYPN30KsLw@VLq5;9KM?8v1WO^}MM9kmn7h#R|Yu2U}(H8kocZ zmX-w+tEyn8WZe}432{b)a8CCa6kL(+Ld`7;y)fcxM&_8MLuDeV-LXgurF&5C@<heP zJ8=`XXhQBBlxZPse8+MkFizUXLX0HREhbK4Q5BFkh6}fF&NZCVnq~MEdT1MFe-0Dm zJrIQUEDuVRZ)oCJShhU)`E-#wR*!m6&Q`6u-H-=XZiTk-ODw@+@d1dir~NoaXX03Q z;y5o^m7(5?<D)9cW+SaQX5|pfUB=~5q~>;sR%cG)ts|lC%lJH9WRnQJN^)^g0Ty<l zBJ-p;H<*MMNO*y#xpY*M6Q(907}z8VA5P^^$9AZ1^(^1@eFN4I(+M9$7qK>35P^a> z*$UaQPOVdWVkx+qrxdt+n}MbH!dM^|z_P&{u&f%3Yb@U}4=hl+k;A}x;QcaT{xX@^ z%QG%|qpaLbvU;)KZ?t}M(FWSVbJz3zKK2(@H!Fuprb#{5@1IlP8(`dr;3-rC%-_(_ z4ni)F3EGooC5Bwwg_ld{7+^jE+Y@L87$5@tyz^$k?S<o8VOK9AiOs);0mnZK(iETQ z=IbkRz>ndcE(S6^9^l0w4PT>`OEYG19)JnTxnZ#hu<^NJHpa(%^pc|&VbuQD4Y3|# Rc1gV4dl11T+wUws_#fU%PRsxR literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/bdist_egg.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/bdist_egg.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..158f228cb86e6fbb1d8b500828f210a889c792aa GIT binary patch literal 14367 zcmb7rYiuM}c3!=@ySlph7!HT?&}dY{d5|p)dq&!|;*7Miq<P4*nNYJM?#`-L+MZ_L zBH7J;@m6t$Y<GJXro5{-)>?k84a0vn_74XJ1ULx%BM26Te*}S(IEH`3NF{On$d4#7 z0waHdOdjj+J5}Ay;jWE@MBTb|>)u=Uo_p>&-#O>@XQrmS_dY4V|37XU#-AI9{)))I zjw{?V4MQ0fLz&8InQg0LnatZQyX{n*cBYb%XQ!2I=PEhLXIgGMU&%{8+wv+N>StSp zN<r?$N>T1pl_|MTSEg~#wPxD0m04-ywvM&uDs%1QmE-OC%Dj~2QFfwoLh@c~p?$J) zQu2k?srKp0Y17z0i(ZPYGwo+8&$Q20&f@Kqn*PA3Jo~`tTyc!x+_tCx!Zi4gnlr8E z+J41PYtAM$-!(ecmko7H&7s|SbzIHkzNk*91>7&ZWvG+t)CYz-6`Ve>D;I-H&CBX^ zbLqf1Fe}UIjCuyOO6sh77We1XIrSXwFDPG~SBt-DRj#ND>LN;3)FpKp_p(}2%eY@v zCH1^|L0#E&D%aGD>Z-c-fmwM`W#2JMFZEvzgJ`!Gb-S&wT<^BqwT>#Ut40`AgUwCP zdvmwZQhphEpM|=yz8f{Vo$ymGWyy?>-$W^jTH!nF=a$x8U9#eW4%*#EK{e7r5NF%l zy;`(|+IFkEiJN<)tAe%tUa-otu(4ON<GIZss;={E)n2O>ZFF@zF0%8{C*#?m6YlDu zsv0_|M_s*-#@?+?r1$T28=VMGxx0;ZU6U8N8_8TS7MDG90LeFc`_WdnQ+*WZ5EH3$ z9-}`CnH#u57fFOwJTO5cYc<aG@ZnZty=3ZXy!wZRK8BklPu{#5wR=~4joylke&yQE z)_V8aOX})`u!plLjjxVrT<-11#j1=k`N$cLfI~4%eH<yKFfFf>fnykY2F3qRBfpIi z&!h5Wyh(13W$gSpT<OQ^*ogASyNydo@e(r192nbKeJV1VX44vg9hG(37#ahkX)F7{ z)a3!Tu*&>oS_-0NS7WoR*%Ow(t9Dz#r&&BSo_z0n-zzz>)eU1u*2E2atwt2=MX?)n zRQR|djN)!IT0y7Q4h{{RV~ð+Z}6@&Zai4~b#A=B(+NMN>bEr}0c2Jn$l|!s|%( zKFc|91~-lOFTZCG&7n242UgQMz_uOO>D?Sy1AD{%63TXp4={hSL4W;b*YAeq$F<hB z-{|-?Uk5#nxz!u%t-ya=+rQ%Z_-k}j(8FAUPULqt<S`0#yU_tNH|joT7Vd{p&_?^3 z0yq0ztpY7=S4*}&g>l9XzY;rPS4SY1jasp@UJHZRK{kvt(#uie6j(h_RknSBQzjo9 z&H||8n))L0b>S-(;v(f_jbBEFbRol&0z)gZ2Uz0+>u2Uc9lPm(9>xNwW*VS|@de|) z0WoHPD)wsaK2})<&&jJ`!>?A?yWI#2RqIu&%cbk%m#nba>aN#XPuIDE$5yunB2=r) zb8^+{Q_ULf9_HqQa98}^_GVQFVRu*813co@Q&mUp{m(sJvpi}e{gb(tt5x3k(M!5? zq?6Hr(9LSM6TE_{{SCu@sxd}XX7j4rNB@ob<U6CWO+I#nSmS<T^KmH?yWAO%LC83( z0&-NGZOIOZoi2DR&OFxGJm3&_G`Tq2+b8`h(^UxO^(y#`@-&Fejic=1Nn@$@L*Rgf zTTI85eN;vXx6SyEy!1M*@LNa%qhczfVkxs?L%C#BR^<Zc06el`L)EOPvbwsNtz=X| z%_(=&u4L7`Iss*rQw!=O?yfqePUD_W)tZ;8wL+@aid1WOKcyDc1>C3AMRf`H8Fg7L z;XbRDRSEZFDi1Ea7U#$Ew12jaeH8_Mt>Z63Z!JEhxSn`YaRs~RbFsPp<VDh_OQnHo zsb2A+e0=Go(b@E)t>CF1`X1@ILdHQ4z5XjBb>*|jkGg))UJn!{#AeV5G=`#N)AM!c zFJp()c3aVP|58|bG9T>KTe~V)Nw|4Mw)N_h7ZUa9*IF$f`XP}S{)X<hWjK?5F~2AI z?I7r_a2~O_-M`8wsnrXEUDaJ_bixSz)Tp+7>SMpAySp9b*ES%Q{QmjBcBZIU-)cMx zp5&?eQ<AAC%p?k!lkM$B7+wckn(8llic}$p@WczZN4oLJOUy&;iKZlR1E^uBHD;Gd z^(cUh>}+0DsIs|<Txl%JsY}KRn%t?Nf2v6e$%VWnCAQ=p$!8?ZilnkuMIDuLBVNHY z;yf2mgg`80l<g9`oG)=kEQ3#AN$i2x)$VSD8ONh_t0wCv5+wuzal)YWefw+<qCaZX zT8(~C?e+vdRk)D|B@8or=)Zq<%*N&KZ!{(ag?A2@2=CuO28vkFien5(2y-B6x(cBU z1#N7*`ZcLxLA*N<?wMw`nHyM8-KbHu@y?Z6_oDm(iRz-nQ<lme0E;7Ekhi}c6`|w} z^gV@ZI+|hK=4|uWfzka2`#8upr=UFSw11;HH?URaq#<8HAK0k5Rj7H8vC-M+#u=Gx z#YTaC9kb{=#F-^a9waFpk53T#2!nxqs+z*5I2$yo^|sP5D-8WPByqB_t5lMrLiK5u zI!$0h{TgdgfW;?(%BtZ009~THbUE~!tdM5~86LN4rNDuvFi{X!TqIwN@#xG}Ev!O3 zr(h&ZM(pUD?CTDb&r63K5j#98erHFs8jXVDHav^O0GM$tis4zLu2r-=+rpD$F4+Au z6BhZt4!B47N2pc6B@FTe87vPk(ePDh_oma#NScjuG%pTJGEUQN<~Om)hGZPKn&10) zU;!t6h$Zy~c2qd9^lwMS0T7?EwwY%?Q&?pCH2O%Nv!myslYD33p!dumGcdQU@K*+z z=JdeCn;9?$+6)}@i0>=sB$$f`678MS#s+bjjHo%wF9M0Z`oQQfM#q|SDuXv*D`C## z&^=&smHWs}&<U{$N1q}T7w|omfuB--h!psgl<Gg5mQ(!nYW3~fCPaNLs!^_83gcq> zy2>)3@C+nW9SBSV-IV5q>-3MJpSUopNNi5{mhhh2fe}+DXoGgHwFq|wbL&+$^4M!4 zIAX66N*5h;pMe?G3ScTxy*I+zdI%{L)pR7-80Jy{Fi`6eVd@M!a%3|V>k#sz?NQ1K z7sgW|&;e{8nOYdz-IhXis0vL16nh+?$R%}@IcHQCn^ZK1O#jDFKlG6p*0i-?&Ver% zz@@X`O8i@AtvSmwr_Fh*e|o~7NBS7cFA|@ZuqU@AmvfUK+k{0Zn-MqJM`Jrn3;Zuo z8YD6}`~@^jO_%<O$wv>>7^7X%i9+-5u*n*dy)%&k&YlzOZw|<5K)c|v>;nVVfasGZ z#3MM2Pvj^k<u~y02JC}xnL`JqS@JGwImE*KAHLIh)ZGrC;U>~s`KiqEA3|VJ5Ipp0 z<@npd{$n72XxYtBzkxx;Ii>fjdba}|b@I;YJ8N&;y<5F`=l-o5Yj59wxBAA~+WmLH z3qh1Zh=c>#Qg5^Q{Nc}zSOKQ^ZfEpR$_P~}xpXA4wfz`hZD<ZFwkc4bCb(AU_?K`c z$_lGKhgIgkXZ9B+L_f@Y<7H-76E%gs$7QCCVHyz>lu$LHF{n#B5;DkaW`@+`W|ey! zYU%)D6gjt;+zkb3BKtm{pw5rPeoO0n2gZBW&>3bn@vUlM(->y=K7@S9h`l$!yWG%? zrkc~unSpy?;yFL`<arj~u%lyxJS34zl{GA&qyQCG7>_rPHmS@B|2UeLb|=^m>aaXJ zsy%R<3wV1{c~E_sLGD#!=f}ZU*^l8qfHie$kWJ^1ZJtJ%k1w4O`x9dr7Sr(*6?z>` z;oUQXsd4?YsISu+Q>us>(?ZLs!E`#dyqX?Ns~I&*d5G4}CauS9j-k!Wz(GH;w458v zjAr$*6=tJzc;*T{H<(e!QFnGQ+w|2uq%bHi<B;bxcb?<!T#?=v+45scXQkg0NBW&= zUPybsczA{w;U#Dw&`(M)r|*pBl3F+bU_pOxqQ7NzGNnNYCHK+ld44&10l6!KBGMIH z$8nVp;6VEbPDA9cVn*MHt|7-Aeq5dYh~Ie;`K&s#X&l(lCC@}J36Qz6AzDUY%Gp%` z7EdV%%66Iwb@;9l1)=YA*LjK4s?PUcMnQry;pBQ;(;b4yz6}W9e`XA`X_onkbt#s{ zrSOS)weQ|~>#dbLtGC~db737WjwtM(N(C_0Q(Bg4rkRmwPKz~V8r^QAa(uRu>2#|> zuRqfP^oJ`B;|t5tUep(}k9|VLS&yUG^!karE-C9568A+?dGEm+_gC+%zIEMSI#j#_ z2?o=o(~bP~z~2pF;jHib6Ni_7t^D$N?~5S_1?y=vC>`wV!gL6)0yJr0r}Q~#w_FlI zD3#$BDZ?e01Nd6+0?vtabKvs{pcdr86NH{PL9TM{pV3{?o`PNzM@_V|e!xdjxq{g0 zqy$#75hPMqL|i;WwLvhKDwjCJWeVeb(AfoagAq4T?D`CQq%IL}lU`?z!_qWM^gSeT z4!)sQt&Wy_Dz5KC4?_?1V43T$uvUW!b&`I>8ng9oZ@=0OqME=0xHsvY(IqC&vqGlc z0x9BbBjl{(>~5#k=xoQwQX9Uu5k&jdjaF?lcKdLUg(v_>-UDC_g_r43(j85e8yEWU z%p`6CpqzGXJE)=!`%Qo_m3{2N%B*f-DFUs3gu}2|ngg9`QKSVBmyV_Cgewf?QE>q< zs)R>c%XbJ#Mg%P!qHe{Dx?^&D230FA-wH}50FG_4$Q8aQrbcMeE#ZE}OSqnUt5P_` z-IY9fTp-mEH5S`Yg5N>gu#dz5oTdV!<u!-<w3)Sv$UAr<q;Un*B<~iiENTFR+gVY1 ztX-r(4XP0Bl04qi`#5^%0SYbHXV72PK}{Pl9xZ0^&HmIxWnx5QP06*M!X<#{PmmdT z<4j}k4<e!u$R^;G-yL}@_kMd|<M|U{Y#@1}5J+bWDBEe~;I}jNm(hc(Y-m18Jg1qb z4uniJ@g8zqUmj$JS(O>)BClB(<fOGb>I?TGbl4OOKm<;p4eeoGM&u5%gZze-cmnsQ zQE!?WleoJx?-<bxLLmPv34tV`4%C=s8;)Y<@&jXMf&N2arTl9Dh5L*VQ0N?WaeTi^ zCXu0qn?Wm}e}JN^Pz4LuYxOPo@A?;(f8^e)WS`f{FO=RZ^Qm3iY}8--%2&(pvjkOR zhZSICBHw@RK5a5~MYc~|D_^-3zE1(mJ6L-xODM`)+l+@KQe}+r6B+Of)+^44$3lOT zc}oMuw`);-3(mNj2Ajs2P54}Z+Y`S|oO}BniIlK_gDQCm+C7ivdXdQmCcnspW^Bc! z@lYjv&mjk4)QQb@TG|O7A7OX>(`fVGafK8e1{iaJ%n6n)njTWea*)fS)G=vS61kI^ z55wp~B4W&@G@mH4giT*UCZduBSXN{afH(LF^7_mGNItUQc>p7l`A|o|+<`@qysG~m zTJ}FXl2Sf}mZ%cwk5}NetF`v~T$ps@L*aHJcs|2&xm?QWpFv}h=E?f}eLTj6q){+g zqOYSEj)a?h>rfURr4YwZG(jP5Jp;3MK?`8oxyc3{4RAbtRvl0O_wm3zfyrU2J%kuj z{OTyH0X&l;S_^I#I$*9TSO~BsGDRbN4fm|R8|7ffS{o*J(@&TYY;RbxS&5-ABH;}k zmBZdd8?m2pS1zJ1*{IkAg2i`%wuU*Ck7nt29nxuYEd0G_PTms<;XTWgC#YwhCD{AG zyn}pGa4Y0NzPUggr3zS@;%aR4PfoNrTu>9&VWkNE4}<z{R712wU&8eJZyhf3u||ML zJ;vhvW%$$mdaXl*uvL2$_)8S%wQvcs4p>K64{o%YpN58P^rlZR!IBuYA4PiM{MGeF z=W4j+H8%XO_zy>36#wG2hyLgM#Y@Yhl2W+nzwZHPbo^j1sQXEP@6vK_ANZjZ`YUyR z@o@N{8@|FgLYZ5NQw(&peC-M&J5mCJoA>3Vi`SM)rB@QsfZnz@(O23}^6^sI5wvWy zd}(=Ox78|z%catyzj*QWMK5TD0o?gPeXEN>`;AbToPem_)%2hy4r6h9Zs9G6DZ;2c zYILs^z<B_2QAGF+U@aK(f&dTA9UDf$t-J5nHfxQJv?UQXYW(^}!y6$cvsOB(3!pB1 zo;4i?)po6yprWEITvZkhJ_0ECI71a55<hU!H1|Cm5Bs4&GKNj#Lb7s+$`&Xzk%|OB z0wfTu=)y7#6L2J8XNT{`s7C)J9#i25KVYvNTkvjVWaVNTB##|ZRf}8{T$N1`$qM^9 zVyk`&WyiUv6R9@`b&g$aO+&s}CRIMwHRPae6<nzGQ}X1R{rSnBpJ1M`?|{BEULy2b z$Z*#)3QC;}XDXi%AH)8KCAvpjRotu4&ac8l;51!&uk><S4|+PvCmuBJbn0yQ))L(e zdvo9<8hd9MdQ!w?|M?q0hW-c{`paY!dVEUc1acF6Lj<o-Gy2ysywy^10##%2L6M&m zPpPcb9n^{?!rG!g^8z0ALndEkLMa#L1&&fRj$BFJ<TI5i`i&@T6F+XYhaKJ6OPpTW zq~6iB`2f9M=h{poV>r||giL3!LWez?M^W%t_L6hQz66}uFksu8xVR4RDKt#beh^XK zL7Ia09Uvw60bu{XJjmj?45R}&jg`vLdwCkGbYMhTM77JrMDPH?=QtqNfy&w`KQQ*5 zA7s#Oad_yRvQNT0DgC%usoa4D%YFl><{YehqnU5Q{{Xw1)@Xq!Yv}GN;HV<{sQ^Ju z4e}AJbp73(Pf$7o**l9m9`eTq9&*VD=Qu*xs^E$66ZzJB`bEr*-vl>(0<Dl^J&g4e zd>j6#4RTAi|HfNE<kx&IEQ8NDwIJ3X+?&x>NRGJyAqjQLP0a9&a8Lr#lh939m`Dst zy$hlvS|W!s(5i2%)=KF_0)j5$-GtA?B#JYw?&Cnm$5!81yYr=6)mvX)yS4hxowrxt zNlYYRzE!q+n~Atiy~$|wdo1O-pvo*68gHuH{gi$Jg$@;iF{M~U%|o{PDI}#r0;4`= z!OtRrDB-*l`7yy&G%+gayy)}#IaYPY-#Q{zzJ|BA$-2wP7`6kEk^rhxgjLpM*bV}$ zAY_=EgJ79{$_+Z2Olk=s#D5JP=@*$0MWNucxUFhNVV~Ul{|w-b{R)%?hXWKN0EO-u z;MaeP$?qUR!4EV4x0zf|3SPl&RlmxIx!4`W#bd9UMmMTe98#(7?AByC@B}YGVupc{ zlF&*KegHj+WyCW$0|5Qi85QVT{Mr|oG?+A*C?-G8gossup{5kq6c?I=KO{$FS>{+q zi(kYs$p#T`8=!p_qJ(##8A+MTI-c$3-Ba#q*LFSk3+@>==PtQL>7hSgR*bKPUB9gM zVLH+dQDccinQ!B&;|lL0A=t$(H6dky^&np$?}5?aJ%$un=Gl?Nx5=|311C8>vNt!N zH1Zh#kkcgB$8!Dk2RuiDAoXsC4tlsyAW)aWG2Ff4Gg#Uq66VT|6#(RX5`CSxjCg8< z`w<onHjVyOWJ}pNM*&UaBTMrIR{VLCPppfIy{?XiD)qNfWn(O+EmweX!rk(2tQGU9 zIF`r1frq_o)Nlv%s$Ya(6|_m@t)zheq|*U4p*Mh}+VLJh`W_hJtJHD|blh8ya_PC8 zFM+m@+`}BSX%79p32f`anuSCSE0Tk3)Q@&5JINEQ)bOXI91>AipkEDmU0tk_)BTl! zGjw(;kkOxqoTQiDU7Zl__F7_C(k6VIT87MbOCC-dO?)aiaKorccu3$;-iZAdyTG~C z5Q$Joi#b@}bGmg(dHv5>`Rho4XXv7_Hahwru<Yq2NesRt;^#Z4x5Fi&*U7LbUR*Fc z#E>};aWl`mb;i`JH(nmvt`08QCEQGVKR#X_eRz35D!Aa&#mWd&xhr;@8@?V%aARO? z+j@Xygd!A$<E3_<H-2wvF9OUF2t>$}Pb@#=pb(*=u-Ibs!}i<9STvn5kk!A({J&r_ z!H%LMNLw6tf&dYN`Y2w^B=i&l{yv-kYbHMk5q^jl2c#Xv25Cp<&AeQ6*J!@)(_gm2 z#qJkjuB?onO4i!#I%&v1I%fz$gq~;6qrf?fiWk(woM8i>OM;gW28+suv4<dMa#Zdl zn4j;O4q9cz1Y<Zfqd%{l-d#q>rME2l!a3H{#z`7^xu&aIDmTn^<|6<L_1w0h2g<{< zqY8iufQsV&=hi4DP=Ky;h9h9$0bYn%XCu6U2z@k1Hx1qt_AV<QTk71f2&Z`gWBqP) zyg9FC;G`)Y*f0cVhu+S2v0lgc7GP#!?|F3|Efz;DJ~s4UN}Fd7xB1xE`Acjt4;yT; z|H_T60G7(*tpJisr$!zu!!T^DxAy5T4k7hO@)cM=q_{X?;Bnp9SQY58mRN(o29hW7 zT9>(BNAfA9&Zk5PpUxtIvt^z7iXA{JAxDi5kI<=0;q}p%#o!DOTn*tkx-H@09%N{o zhh|O=aM0Tc!#44)PK}G%tDHb!W?Tx#Yk;6EqVFng&9Ee+d~{R9MLcY1fEJ0%^5|xx zgL6Pq6v|Of0D<u{{LGO4i27=Hi~Ea*M*Vl+csKE`Qw6|I<&evl!cTF6@_X=YkQn+8 zks$wXnExZ@3;N$OA2a!PO#VHS|G?yrnfym4f5PNXnfw`(KSu&scVrWaG4K<7Ut>b) zqe=VNzW44+`Zt*?rl%vs43J%l;5a<Sajp#$bF0>h9mYAt%HzRBklf`VCPY3NT?Y}W z;eLA^M~^4YoYGXXyU+7`zsTh4ObFTZZ!uXw0-p|aqip%uVL(QtDIzCHZ?V0OuO5-3 z{|fECjh!1_N5+6PI19;n&h#Nm>Eg}8Cq|h7S1-!x9v&&b1X3gpU&svhGX@DZ9w;N~ zxWb1>_ULAz67=W~6P546n7D~j0)gu=7~vA)!3Y=vFAprKaZbwMs@3QA79dq22cGHy zs*5H@dJOf=cN+oDWE1~}V*T?>N@o*WDviTDBt;&|t40K`1I|<dT}a%jyWRvBg{z1# zyY;SE?}%|A2PYdN1@B=B$tuf1+s<Y+!ZGbo6AbCUKmw%k-<aphASS_9M+wbp|Ad6* z{xni_OrJUZ<I)MKHU6`ZyMZetm`lVeaTMacXZeJaCbm9Hfl8tg1Hh%ooY>5wR&dtX zY1SUq5WsFV*7`4gu|pS?IGDtlNQa9=UPeTq)dPpi=-^(tzmd9HY9ah909&<PoDmln zRih*4^Zc5>H1Y>7F<>QL=;Z)$d<eKTy&KT6b(>C?(#Wbxk6i%LiAxQz0^xVrH}2@m z`XS~#;r&CD6y_DM`!7)iKK0S@%u~Xrnx#p&agVt#BAJ|5p=WGOTy%9V9RH}m2nuXm z;XgtGg=Mv<Xv_qsQB{42pIwNr5FQK#x9x{;>zc+ljc=M87NhMSxUhyD{U##aP(w)F zq5C1RR~GRF!CX9rGtBQTMjqOdi5Gz7ykP;#BR9woyhO>+W`^}!po;2T{K2(xI$%`$ z7f_oq1Gh#TbR#|8>0><(Iq!K?l1oQPP3;1i;4hI7guqK>-(SPa!~&Buw&T_k$wU;B z`$-*Y;=kZ8mQiaFZ4t?Ye=b>Ueq<5l{LrFwbx#iFkCe?a{FPwFMvF{XB3rP<9e8Xi zckW5cMV~*IXhi!y>!wcDKuKTp=55IFOrF+6!}P2Nc!>URvExe^(VY$K>vTZCN%Ss` zKbjmv*R=*meG{Gl`F+MMxCJHXfY$f%TMZ5SpC917=_+78bp(uPLvNz*ivs4koNcg8 z|H9bbT)G5zF2~D5>`+ni3=cyis*}t3NA4rn@s|dnLbCVOfd#Jk5&$RtW{LL<XUz#h z0Z#~!=uN{e*I9VVGUOs<0zk>huwe$=b`PQy@6yN?U=lb*qFg+?GlH3G_*TDgXkY;0 z6aDs&@ivLwe1kdBbk8%#v1%T7f%#<i^$v1zMg(o5iWrO0j92n!B_rlayqn_<8)qKj zG*|SWxMinNH3`2Eb~5PFf97zwwft)0AbqVYZE%3JKv9JlIsG%GVw_7EEr}FQX26jp zqpc$s7r|Q9o40P?ePiv`&Di79J2*3he6G^y-3F(MeVDjgr{W@d6~x4;>Ho#PevAnh zn0g@@fgZ5z|1$aCO#Tm(|H(wYzR27KCY(Azi1foQ<fxYZ2)REZ5r`ZN*R|&17Madd z>&}80@cyA>)|7fBN0>~KL~xZ}igVSf>ed13X6e-s9xlU*?dsGaJvS-F7O%2`#HfW< zv7A|!MnWe5tcfC{5Kh?PmzlfF<Ub>+96J>JpkoRFbAdclPyOUT+#PaSGzrod*mV9# zQ}M8gH%pFer9ZLKl*4fzu5_r*jmD<@oJeBnaxyS3+>zfoB*DSslL<~5%yY2(kxR0o zW#;G)(f@_Xe?@|$3;aoq{--SXHk0o#p{<jcTtqOUhZ8N*;v-k<2dSUfeKqm)zb2aF zE~+_D>B+f2{;Wj)aYB_=6;A?M)-0ZYuB>Utb>VcGp8cBfHDhtwb_?#DJ8hY+<6d-& K?o`n+%)bHwvYSi* literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/bdist_rpm.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/bdist_rpm.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..36d9697d175a1aa2609ee6e5162815fc7ae7d093 GIT binary patch literal 1735 zcma)6OOM+&5GE;E)+*j6L6HVc3zR6ZO?8mh-AymSVv#<8p1LiPo6&%fP1=@AOIni3 zW*z(F07;Mi8NKue>DpfM7xvU4<;S+$0+qqxfE>=_n{Rx)zaRbdd-wUDErk9+*FGQg zC$RLVAUNV!qA8w|zV{vCgnO?M_k=ekE3Z#DeuiTI9oV6>p_QADfbs;ErXU3BV~(tK z-)lVdeeUztYt(P?06etoy#dd(VXB;^BaBc);rro*P%7hsnu(xXjM7RPy0xPNF-c!! zg`%dQyl_UNLdxPI%g2u+=i!SkeOl#IjK?g?M_^M>k?Tq|F7tFIXqs~hadcMXG=+;& z6{S$}k`7ZjtYm5g?>b*cUHX;0NG~;2;PPRXYm-X(kX9Pv(Il~(6v^6GB3>Gya<I5e zW@(;|1&8R)5mW}XrUNN#Vwz?-efs0~_ROekP#MTXHzAK9eNoDE2<4}GLN78ip;gWy z-C+T_!b=OyCjGpc4d9B70F!|*5Z^l9#2gm0GBw#ClbN|}{0{+X_u1Wc>>F760f+^f zLf=;yBLkhEdJANAj-XfMtPVGT#(sSZ&|u&jisZFlsBEmPr`m(_7}vfQa`YQgA)H-( zeQ0LoVVRZ5pvojqdgqft(L3UYT9~RdMIrTdb?x<V+wyLCsRD3x8<w^#MI<8g{oOsp z+}30bz4g)(6kF32uh0@NpeBwvS&=0%-qfGAY<)|QdkcIY{Q~@65ZLh>^ahWJV`{kY zzI8SWZyLM>WO#5NEq&g$FP1GhZ7=*qYeg_xcz{xPc7>A~v-zC^U~ZQ0y0lHu!UUs- z-iM`oAjXj5^Uqy+ZtPYBng9dmb{H4CzeNz7{7TM!2olUcc~(?vD0+|S!7EGWWpeOp zO^0RIq-q}ji$Rq`vw*9d{mt~Q>jGd5ymH*8^Dl24{U4ssg9G<&{#morB)^v4&FDar zwrY4DlbUpUwJ!lN&;z?49k2ICjzww@pt_1qB+QHD^y$YIKMQ6M&66D$*ev~7FkOlv z8)Z^-Ph<fjtxrMOynJVQKYy_4(2dM!9M+xdb6MXS3$sB@b>OwK9c&nX`yUbORtBT` zvJL=Fp-dd8HrUqfHR$~a{_NH|j0xn~j~Yt`nfCAA$i`J46J^=2?pR@wQ1?LCr9S|H zaD+SX3voy~QApkct%K(u{wFMFaZrbhS?(}aM~ux1UP-HW7(1_0xxQ&L#)~0iZvI@% zrWtmwcWrS%*um6x`ocY*gn>JY{r*Q5NceY?y1O3i?l!Bsy*_fr4W>KKPP4Vv;YpL; LscoF=dB^(;uc+l& literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/bdist_wininst.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/bdist_wininst.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1e82d924c1f07a2095d3fe5c25932b199a713ccf GIT binary patch literal 936 zcmZuvOK;Oa5Z?7ViIoQmh$Dii;^IT&&|Ux`R0*lvaw!rh0<G+<NjCMX`%p#Xp3*<V zg&(w6PW%N<%s8PWsAJ9N&+D1lZ+7-{Fz9~%G5&Jn5%QDlnGgI7Tps}lB4|cdbmh(1 zdm=o+Zi!$iTX`Ec^8~#hq5liw$aIeQ*BFp9aQze@B{M1rM0c8eI%C2Yty?nlMH})1 zH%NrkhF{A<7TPEZIdiOlhH8+%1J@&fnyf%iO>1xC-LRSp|FW%~2v#%h)eP#j)~oJl zXBW1rvNTT%Gg2v(H!{xTI_2{+&*MUjOgXwP)#WHwr7gr=+R~WnbrdCbp~uxXvn-2o zsTPsc+NLLymoHx3MY;}3j<d}5c7$g#nTDQ1(F)av%=NK9B@=68S-8jdN!f<_&ev)7 z)pd3P-J@+R*EZQLX~*Wd_)b(0YX3fuOkPEmtd0{aGjTk*S|;V>L_|6@wlZaz>3zDZ z5gi;jw5ZxptOc&S0HoEX0X%KGK01uNPx&0@g@$hw)r{&n5J79g$$Dtu`m9(@Hk6W& zc%?jC{{#%i#ik$5Lx0xeQgdYsxB?63mr5=aTukB^tc6r{fHxg)p^u*r0EXZ?03e{& zqeE}~@IS@2m_j~k3tKMWyomFZbJyiOFNMvJ_c_0^akl-_97R)mZ$E5HHJhR+oT^3$ uXt&qMga)4BjA6i;9`8<he4s?3$|hJ1kToU$0Ty?`o2{m|C|BcFef9@fGUd4d literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/build_clib.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/build_clib.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2e135212894451d944fe78e1f94d1d2ee8d86ad8 GIT binary patch literal 2407 zcma)8ORwBC6n30UCX;#e_5oC=AaBrgDmu3mRuw`;Eg&`psX|3jOUT5YnM{*7wViwK zTxD1=-B#+4U;_(&P_{@&`~_AVJM+2~izbS5d~zP2&pAHMr~SVF^w06LmzNRx3msez z(D&hyU&BBVwNkXO7C5kh#;KFFf|jNEcIsyBplxU;^|DUTvCub&wy66OQJ2{ZytV^O zt;cB8{s(NKM<c7g`Y@5IR7olyGgTH}3Bd)h?Uc{pbuDM7OoT<0h|@%}a3*+J#9DWI zVIc0qBd^22P+(D{eE>R4?UyKUs0035wLdA7l!kGdOrjG|@(EnuoiHI1%7~gXLfJGb zQ$_ZIWWwgrNy1A(6epA$u_;eeewyU7d%m&p$(Veb6)DSDu1G{gNfS**Vo4NGQbk#D zdlE@T!9&4v%JO(g<Wee@83TYrax#p0RwOCAIU0f|Ci9^JTRC9>v9UBZ(s#$?OG-(` z1tZVdQfg!x{jh<Z<Wmj?l2|1?2MqVNF32syCyNjuNOGIVg2l;nxkr>RNv2#77R7Td z$YMn{h-l+j$LqqS=7}V7&dZcSpkV2HuOy3#0zw2#z_^2OLH#sQbAwz$d}BtYu=qU6 zAQv3eQm6{Tr~j|IizA>OlOH5Fhd^b8g19Q7{pzL6Qa*{&x3I7ixkch>8qFl&+=pm~ zg+!DlCafuG!~kg#Nu7e7i3>~AdD#R}G(n7Yx$5f(o(?<@;E}&r2)(w>PAcmmyq~2{ z@d~f(%3i=`TU#rqawvN4$<LHkISMO#ir2V@#C_#ZT;X@o+WOT}xN@|tYAsx9S0G^_ zW5H4FHCp3U3$$B6V|fO8t*zb+t=y^wo?L~ETpQ%tTQBmrL)o(*E9W74_WjDMyqUG? zRGo!awbvGS0t=P5vEYLRe`n$ELkmX3HyZ8&^fmS3k0+=?3xCnA9C-I=`xRbwRljnp z?i$a~3{CNK`?V#0GVAeRl|4g&_Ns3vu(%o+8-vD1)vNlI=3JuPSMKVP`F2!wD-6_S z!|%Ovz_<4VS{F2k{-e6x6rwzzCOH{GpAeCN0vi%u=&X~Q4Qok;AIah9V=~;x4@p)+ zvBDN81e2x<<gh_EynXq+QRnjf9kXS1xoV40^4jCF_O|=<{OMZ)*(&UjT-c0!O4PD| z7SSNMXExWcM$lh<UaF#0Ax%W>W>GA-tb0iwrzK^YDQmac5~G&T<tltVbYTbv>`aL$ zEI4#HF_U$RvPn4`;YO|xBBLv{J!7i&6Pe^7mB*}h^v14R(CJeq^kxt?47H>CR_*8x zQoCRn+GOoQ57BRLyM=<IrZI)vRw1`t9a?E2^f^_xx564ga5)w%QY-}LDv3iK;TG^m zN3|naI;}gqEC(Ktq3%Dy=A_VwgbUK5txfd~n@-Senu}?twcErs@T7<hC-9rt=w=%n zu`_74iqWt^FZVGNJ#D$Y;s1`r4VeG?;8<nFago5Op^vQFcV5gV{LWo^EcF4YI8Wsv z2@B4moF4Cwt#PreFE!KM`rZS}@@E*3b;a_n>lU^!_AC$gS_7CjGshWNgNAl|%LV>! zu4(MTH{ZSn-}J3#j+WM3SI_kP{QUzUZ-96N=dc%=D2HL~hhfHPnKGbzVfdnqQXPMo zwZo9|I1I&yfY$`&VE91ubQX15q)xgwaB!1XKe$1+zZ2t4V8(kqraE-6jCAdAk<99& zy$1XYa3M`u)}0;ORA_K@AN?`pHPpW>rsNKw>GTPWul7D~mi7g7b|gI*dX~BE{{Y8k BqTT=i literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/build_ext.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/build_ext.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a8ff38eeecf9a7281369a6204d9b962d70ef5e2f GIT binary patch literal 9680 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 CQEOKK literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/build_py.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/build_py.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a44c066599ac1df28527ad3ff65a82349d151194 GIT binary patch literal 8531 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/develop.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/develop.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..18327d9a98c1404d735ddd812b5b1b1d40d42b01 GIT binary patch literal 6442 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 M!<#l+ztLX%KW%%W=>Px# literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/dist_info.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/dist_info.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ef8a106dfe9121673f0d59cb4506a368db18bfde GIT binary patch literal 1352 zcmZuw&2HQ_5GF<KN~_&<(*i-<qycnu_TaUVUV<VCnz}$Qg)g}YDG05|U2CBgWs*YS z&H7~LVRFec^f`FVDX-vDXShGMlStrjG#qihkMr@@;V^mkY5dQBjF8Xd&J%+FI}Gyz zj35~iR0I{xD9o%17A#{FV__98I$4L3zli9F?lloz$*x$|6~S9Fik5#SCtBuKrg<t# zV|iIm6?j?}R_Tl6jY)-^mbDaVS*P|)rvIKvS*50tML8{t+?J|Nz5oVtI-)K*QHw=h z3vgMbW(CH#4=`9G9)lwZASGEKXvV}~Mze5@F6)R$#McDy^+W=5B>I4J=z2SJ%csQ_ z@fd@L_aWc(<ZO00$&GyFsJ!`m$0aRPZS%4&>sdO+oO}P3(xlITYTj1%x74a8Ra4K` zs8$y;wOYziK{sS@4q%+XFbNnzR)m8EtP~F-h5{TxfFBxJO+ONic{hI?*+p~Il+EF! zEh}+&e10}j$Ir!)k+yBDQkA*u7VGmo+OZ!u7w#t@VavQKmy)XnJ769n5JW`i@|WA> zZxioPKpLI`s%Zn>!yHlFgOK;vrVpR)0Vv^K*?ov^%Ras>`*qr`DAvK@i`L+*$Q)F9 zMK39MbVWIgd2mH2fthXQP!QV@!4>V355dnwut(%Fu-$ni!g*|a^JLy%!79G+AMV(J z9odS_2e3;BYXRH^>`nJ{-5G5CvbR&gGPzaKa_HrSDmi$6dEojJ&&$gmbog*4E#LAJ zeA6Et0~b96<Ct!1z3073)*4msLagVyQ>7QVb%8Q2Y;t?%qI_b|$xtrOvCb%5A3Sc5 z4R<HXLB;w9h<()&{UgMlz%UQM5Sq}~zx#AQNa*r*gE62w9WmX3EZs#Dff>av=Df}q zl5>}EzEGmA&>wJq-saV2r7xr@bm^7m2Cb2LD?2^Ft&q1zat9rXU886;_8ZguJ&A*m zb;Fp&%*RKOi#Qjm;9R4G-5yeIZCROdp|sQ}>Gj?BL4Tb7&+nCT@yj)X*I3hFPr@J$ I26Vvw2f%Pz-~a#s literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/easy_install.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/easy_install.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e7fd0584196c47c4e09bba1f332bd722399fa476 GIT binary patch literal 65181 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/egg_info.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/egg_info.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6b158f9263bd6e82c7db93b2016a3892e4f5d7de GIT binary patch literal 21552 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/install.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/install.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5e621b93d5c9bdcec6ef1ff5b98432dad53cfa2d GIT binary patch literal 3932 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/install_egg_info.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/install_egg_info.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..14e06333dcdea7d4e8198b9b6d203d1d9c1afc6c GIT binary patch literal 2397 zcmZ`*&2HO95Z>jVD2cL_G>MZoNEH+<qO_LNrpGi0>Yzm~J~TiI5D5rbyOJqWq_Ru8 zvEZB(puO}73iRGfA84;V^%Z>TH!IO`;#9)U&JJg1X6Kt(@_wh&dj9v|#UCMK|FCmE zAN(T>{TxIv!811FF`qfH!)fhgZtP-qGjHa{zLk04gE+9fpEYJ-9Ikbnaq~we0?~NG zL_-GCmh_ii+!oGL)(`)M2iA9tn-voiic}?4nPz)^ZW_DAY&OgV*j7HANj)Eqq{eEa z%E2BcLp3@`kK~9f)IS%@BMkjLh-5JrEOrD(v^@4icfw;|_#$}2V#Fgt%ni{LEzF^4 ziwJX5bi@Ycme@pmmrOU!bvewkL{272nvaXc;K@qT8|J+Mq}wFzA#^z^3w7KZ7phkt z$Q}hboXFE?ZDAWK-x)4Wx8CZOMQ{DIR~93Vpy@}mgRzUDTOfj+umltlamr1*4hojA z^t8;ze=*g8>gki6ayH+Yr}ORoD$T_9y_X03#l3IDj+SLLFN-46=h@LJ%R9Bj`j~_H zvALY)X_*eQbRm;sUZzE^KcbK*HpUm9UD$I`|LjbJ4AqrA(=#w9Y>LVf{t`6>o(p%$ zU-QzLQf09dKJ_qADN}FBgtx_BJ6H$EL!%6*&1nmJ+9%G^fh3wxemXWk!QR{KWa++Y z!<7l^Q!Scji1i)&%#!|wxr+28RW9T>&84W1YpzZphR7yCB<pOM&irtaD5;A|p(suC zIMt;}_ffk=zVb#T8@I{tkyILDb%`PgR$GiyXyeU?<$>|0MVha|49cN`Khr3xa$c3X z@2Uu!;y|X!XeLa!Kh%;8TclTHgRFMz2<y17L8>o<FdpFF;vT<@IRstYz5v_%yU#$Q zLJTl0Xn%rPfwttFm3#`Qu=bW*J+Lc(wTc+l!L&guj8Hhg1LFLS)oHGG2+S==+O!@6 ze44k|(zV49>Z3B6c2>GpLU3=4Q3#kfNj`S2)!N-9I>v(U@7XM)B^p8<C#uR9&7b6~ zI7;(LZ_(W?=EuZ+uF-9vXzw<3YE;#AoKW2WF@CDiTIv(xgH&f}eyFH|p-<*yQYtCc zr}nXY1@N_L$X9YymC^)NZuPIw)2_^QrDSr}@+KT13cGy^3Nd<Yb-$dy<1Fm&gX|*I z+t{MXFaxHy_!YjvKL)N5@V)LVuGF^bavxyJJ75x^7ED4FX{>J)brb78|DfMCwZOU} z2T-fq|K<g6=M>Mp(p}+UQ1)~W<W~l`xp3Zu=yvuSIv)eQP0(8q-Mx{$VAh*xv%PhG z0Q2e#;Xh_CZs9UO@MwRod#D{}3x_!jR6qt^20vS~)+kk~JN2k;RxVCBF417`)F0@h zeCO2LefD(cl<$0?I2`pQJgToi`o3uaB~|KQ((=G2%LK#uT;@Viti~5|znb)2<7zcB zuFxee<->ITPD*X7HXxp%gYRRTrtW55i(f-$M!<4$_d-tVY8gDpiqSCB4+m=lxEu&X zMO9=A6&D)WQ{NJyS3&KZ{Hi-3Ut?&>Cv&3q;>Q2_+JkL;6EM{zLNB0x+k{C%C7L9r zl_ax5R2lJ6lDw>j+4@N%NklP%xGkg}snotROjK#9>YGVzlFeI0`b6#$q2SJyI|Z+7 z)D3XtUw1)5?m3<txS<=i!%pZbdfJanQ=kFqvq4)hY@^y<254vRJVobL^ahHz-bx4S qj|ltKvC1cPSKNHE>Po4slMlsa!UwA?Jfx<wP<DCfL;y14q5B^orC;*^ literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/install_lib.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/install_lib.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5f5ae33d3267effca6250c978889a20656198488 GIT binary patch literal 4042 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 Iwt3I~FJSTwH2?qr literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/install_scripts.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/install_scripts.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..80a234894703805389c07bcdc4fde2a3ff1946d7 GIT binary patch literal 2237 zcmZuyOOG2x5T5RNdTb|~&65xm6BLjk*$v5&2t^`F;J^xz!%8Ef)_A(tJCk{(yUk{; zF$Wxp8^3}J7f$?|K5*g0of8+RYTKJ-VXW?{sVP_2<NInJ42SVIzwA8!q31ZiJEtxW z<VUd7*RXMilhUb3LI}#Vq=j2}iErf~3G6*gLb$tSRP~Zx6(@1kPx{1p>Tr+yuO03S zzwnlB;&J-S83%uWUuR5=TQ<|Zv1<m8bERcInd!W#&ETt4AATux%2S=1Em5nP6pZIm zWV(^Z8UA^5xgb1(r9OmBI0@lSLODrXPPzNqfdg#-5N^yv9=#?Ia1TQ0oAY_CbXt~7 zWioHInt$@R8P$!f(sHy?jn)=-Mr}D$qqIIAiRqN(^+7W_l4;utxwcdpf#dPQJB9Tb zEOiAo?G&V-owLO9k<MW*ci?=w_hjrDuaWsw24H5k^E%ggTIO@XnilJzj9)iQv`{Bc ziSpoQNA|(;ug`aN)$X==dv`L+OMds>%fm@??>^sELeE;=G^IK%W=&P4HQzmx?oN9w zBXBo>rLf@+8Ibv{vsV9&>LgVR#)oB7{SyQZ#V>8T3rMtp7GTmKd4(_U=%5ITXjO<h zn1Y`5;9V>qVnIOaqy2*FK}U<BK8HK3^Ggc*7OV?PZ{b=y7wkN}-C=W`rMvL0)(33> z+JFZ<1Z~)n;^HFeLirPqz=jl;;K|pQiz_dv{I&C^1hi3cb?JaUDz2eayw#zf-m6=n zx!$>5uXuauEa_wC`ME_5=iKPxAEC=Hf7=H(KqGs55_@i<4K&Qqwq*k=6N^_Oo9T2? z3V6i<=<Eop3gAonELTj<YIvGHnaAz1K5Xh8uphr;ZocW}&boy=B2~u#KMPwEuC-?H zFLfXMv6EML+zGG3HPU4W0k2T!g0+d7nLfx%p(G3f$6THY%?|R~Vv%orNn~1Lvz(+# zNQ8_WqP^ACX(f_A*5F$q6|y)4H>uV#89cKD+n2c(GP$^)*StAWr<KN4$4Z_@XWm3W zVYb%^Fx85TWo4?Ai4SB`u{M=yl|&d~DyJ&xrHUPjlnZGFM|i@z?&H3U(H|9g5{R5- z6*nGMBMBx7pAy@bwZC9;w9-L8*3B`2btjE$|B8oM`mHu(jl2rm7A$oiHlPoUNkq=k zfCSV7nUXE58;}^N6%Y@80g2s!M)2kenO{6hHf#pbnPnq*!~{@&3QK(t8xV}*C|>v# zT?E9@Fo?O^A=&(;3(sqc6#(`n1p+uluZX+Q(lD?v2b!txfMQmshh50M&b<l%U-SU# zKssyN1KI(|J0IQyMXtenm|g+EJ)D1R8wt~J^aj`?gwIGfBYh|~BXM*xuq{Ex)cDz9 z)o?S+W>Sh;vssm@7xU|1tN;xh7~NKz(F?wAD?^U*zkywQ<1Kjs@|W-9_5p4<V~vNS z*z`ALgaZw2l<`{lei*N4@>*U)y8vf(%}vPVG4f5~*n;5;O5@u$Lu_TE#5i7|roUne zLsXk6YibSgf@26@Bw;><&xGJ_qA`I6d<YE&kdYw=XOVIf&U*mMei0nHMYk+A04azV zz(+*pH#TXkS-Nu?&U<4bZ-awzXd-6AV$8&hK|r%ofIMLA<t!~RV0a1{<4wkxo$wZ? z5<@r@77lM|QH)<7<h{bLK}0+ndC_}zI*bRVhm?V@a;a>^lXp*^PlnQ&u;n&-MyIPW x^ASonU^Bz^#gs{*nwiXC*5Eu@O%d$I|Al6vhpYTP#R;pB4g+9PL?U|0{RgHGX@>v+ literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/py36compat.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/py36compat.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e0ca0350dde8268b016a8a64e57c4d95d36f2f4c GIT binary patch literal 4582 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/register.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/register.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8fb92ead82887109fb76491614bd187e42afb961 GIT binary patch literal 733 zcmZ8fv2NQi5G5(fRvicE)FJ4gu?8B+Xt$s!8gvM{cu0p7Y70UU8HIu*G9-l}MmFbX zy7Ys%cIq#5>QS}>qXh2wcs$;FJo4@F@$B2L?E4FX&~J1wDBurZHUq~I$1Un`fpNg3 zB~8@OBECR8;`9-5D&mH2qJnbr87<;Ja0V@~k6Kl)s<7A(pxKsv2|%C%b5sxk#hSQ? zIp*XM6%!so5$Y2oYH6J?72X{W^Bn9Wm|cQfpFE%j#BD&B!wtxKKmlKYOxOWAE^a0p zg3%X<K-FmF6H(Vp_BU$%_3Hd`^=Wl+mR|0dWM8M!rd((vs?rJmIvuP?-4EG=SLvWz zRq|B!APeSKx6WyMmgo9j%S@R%*ZG*6FBVgOWQLwqs_V+0d#a4AO$3^K1aY5~eXoYT z5+=07(;x*pMy+UXej;-O!N2FZ>vXQAKD{1f%TJegx7TX<hUZqeK|7^ddkA+_`MzzL zzBf~-lYrUKHiQY8;pc?Hyq-U$ft(e{O&IITPB7+YjCG0+ZNPKJ?uN46?wAP_*<NDG z7*`czBf}{7zy-1~Ee2r2S4wa~#>isgpK*BA!O7N+cP~z!*4gd~*<PEU?jqyaEq!Rs Te_TF!w-x+8{E(4wj_1)oY3sEJ literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/rotate.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/rotate.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..74ab94369665f1e07e95f799e59fcb7ce65e3b58 GIT binary patch literal 2538 zcmZ`*&2Aev5GJ|1(rP6;vf{*Xn+AJGYO9ImAO(6T+%!O3^i;P+fTk5<Y$cJBSKdF9 zRAUR$rAmPwdg){Il5<aeik^7wsjr|@XDI)s$u2mYogs(AnUBN$cxfqk@w&CIeM0^r zmmU}RC(zW7KsezvAt`NBiabkL>a-opJBgcmZO`&<Qfik#?<VDT8G0}A(@MKyb)_Uo ztL-W!UlLyC{wu<LQJp#M8h4+OX60X4g*2(D_44c|A$3%A^Z|T3Nj`vXbvIUeq~k<= zUFbN^zK}APd#G3OF?8jpd75@I-a|8Ij|a>XXzEiSg0v|oZN_Qa;jHcQ>wJ~p7&vWj zK)~r5UwTEr>1BQmdY{+%3iK7;0OxL+lFW5Si}8EAA`x1IdBTMZIrt>wF1VFvYW#@5 zQ}-Y|6rzZ;LAV!Y;-yeJ?8k{v^HSQ;y@SsTP3N~^!&=Bpg*p$dINX%tXcSAqoAU~; zwZ&rzWBL3ZFrue(c@n-n5K@HtKwR}E>_{>9a8;OaIN!`hX%{@s`wP?P$`$W%Q5@Z) z5Gs7IXV9KPQ#XNdG9l4|LL7l-oIq^oUeht2_1E}lG6LU>i?$#wt`bTA4<c`Xf%)g# zIxV(~xY+8B;)HKKJUZy+4<GSuCG@D!d7h}tY;Td#?M3KY#ffReS*+tu5|2fcTNtQY z=w1m3p(S|7>!+jtKk~}XYB0g>>{nnWWC;5@^kqX+PG|II3KG~INbZ7!q2#2l9hA;M z7qRCgyX_L~9tQFo3ZbF|#yL3d2a>VxiT2Q@E)B~wCXczxy;pXXq0dV*x=XATlvLm- zRAvkh2*fhj8-M%N2*9BV(Tn>hVV(ihWSHiV;!PWmEhUPM1Ss<6DM-#?vng7GR=Cj` z$HfND+GvTvV52#{d&T4h5G(@E@;+YQ+QOWLDX!lYVJ8dYOpAe#=Yc~wU{!bq%?5q| zTiCBpsU{OTq%+vo@9YRpvrTuCNt|FjJR?Pu8P<AeXkm2=f~cAYI|+aW_EtQ;k9KiR ziHz@`=CL1VSMuH3N%CGNQICN+n>VKqjMuerZoq6<7&}Xvfm}fz-ImvZ7zcJ`g6}%X zNZ1-;f>_0w(w(d)Bo+))Lx;0Lq)!T=!2KeLwYdQpjYb(4;E>>F=xb8Bik1=H7ke`G zH@*G<^fqFI29(i~6Hp)eI$g$>-D2alckK5(_=s_I&!YBkU=U%5R=^J9PC`>U1^)O? zMCmTse?4WuIYV~_<#>%u*ct%|)!q<L2^xRGW`O3Y!#!RCbUKL2sWWkgl^Ng}`T%=f z9oBeRFHHd5FvCF&%wFc?7q(8O&hakJ+~0Y@rtZ|Uqy348h=x(u)NgjZI!LJeORo$Y z$Wd~H^6O{(b8>X&`Qijr_KXjxjpD4IODsWHLk3CSHT0wNP+Y;`Z5U*6xQaL&(jjaT zT%~<>8H<i#xiT)^DaIcNo$5Fh0F-r@ZD{|E1j_e8{0X!(G~PMQjvQrg1K{}PJ#Gv7 zraC>9SYPj{an)WIi;w22slxo|w5-Vw!M+8jsa>wb*1ag}q(W}uh$ax@4)Zv(fQE{i zOKr+hz$K}KbgUY~1vjP078oycc@n`|#)}nJ<B~eSs}pXqR7)XDX_O^#cGxT}(2Jg! z@@XA0o~;XpYKiCZjmQ`W%x;5Rg+LI^HCCeyx(Yb<sm~e~(KV>VHPDQMi@3oxA>kK; z$O@7G2nedkV=b0T3&Aq-*O1gv5EwtQv4|oQL{XaaQ6hk^MbXiylVFtKs~kl<?*UWg zLiM27;C*arBM8sgK{eO9aJ`65b|#Q(xX4{3J4h~0u;s8c$ubahPGLFmsmol(?CEux z@A(a@Z!Vc-OrQNVX(3%yJ$qkU;UY!#i$MZ^UDTo^*%Twv+A9~AU`rh1kHDfD1s8IO dHNdX=Hg}D`vxv`QJU0p>2|0il^8#6N{sY#Dnj!!I literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/saveopts.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/saveopts.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e42016846648abb9fd805958d4b634d337a2aff4 GIT binary patch literal 883 zcmYjP&2G~`5Z)g<F-fYT01`+&SfZC4nnWPMr9vPO+#;kNDp{>oj(3x8@LzV<RU0{{ z^a*$iE<Dg)Iq?ddm`xmrr5TTB#@~GN?Y=%b>RkOCUVkSD{Xz$i2l0C_eF}~vj#HH3 z2xlZB7=1yUaQc8a6=Xvr%DoFT@P9)m8W7tRTpE@X`Ap7jw<wJ)ayE^%NL<7Ifq}aL zClCk}VU8lgF@TZC;{f@9BA@#J+_Hg=Zv_D9)yoTr!lcNuIOk`n%tg2xphHuHaX6Ey zSiN=ap{~j@m4Y8OXkn^yn9Sy3p~Ax42nAS<=k~`0H{{yzZh?IS(<QhXEzlZEv?h07 zYrMdp(DmmvttrRfhzgheyEl*}HQnF^-5{u*UXis2=C50|&k1ym>sCz`UQH$1klH&( z%kd>z_Aim~0Uc`K+Z&2OY}lDjlskb{uUR#8s}2I&<5C+Xr<D`c9ye9iXkd@$!ZaU@ z%fwh;8j)$+fyKF)#Z_vQ6W#_+s65VuZF6<cRFx0f*3%-LS<j6C$%Qd8pKD8#j9Us5 zEY&Kp^fpd^AoT=L{(KmjtQ?iHJeyWB<!9sN&9oT5;-jt3rYKT<7&dH2`_mkj_m;xw zM}VdK;1F(MkMu}@2|2+5eoj`sf6dT1ad&|+$D1+RVJs_nmAbgc*s_Y#rqX7N7YU@h zT<Ao}?G;qdV8E95fqUw5PHAV_op}HZJhIJA243{y|0=_V{}56j$5u#1_W%c=P8;Qr RZE(J0_|Dxd?Ua8^{{sIs@iPDb literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/sdist.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/sdist.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2557a0db18411ad78ae254b996b23c5e7a992158 GIT binary patch literal 6909 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 KgQT=-mHz{e+uI8O literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/setopt.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/setopt.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..caacd7505fd629b80f24f37bf619068dc160581f GIT binary patch literal 4561 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 CD!)Sj literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/test.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/test.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c8756b97dd8c2fe231501757cb752e821bffbba9 GIT binary patch literal 8198 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 KEVI$7SN<Q|<tRu1 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/upload.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/upload.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5729f54b74875d4ad49691d1ad2219593e3d4614 GIT binary patch literal 5096 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 X@;V7-N??=zlYOW{_whryLZ$Uj=+m35 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/upload_docs.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/__pycache__/upload_docs.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c50e9c31186e8b8e61bb19a232c56b44129a3abb GIT binary patch literal 6059 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 PAdsE<gVrLt>DvDbbwg*% literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/alias.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/alias.py new file mode 100644 index 00000000..4532b1cc --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/alias.py @@ -0,0 +1,80 @@ +from distutils.errors import DistutilsOptionError + +from setuptools.extern.six.moves import map + +from setuptools.command.setopt import edit_config, option_base, config_file + + +def shquote(arg): + """Quote an argument for later parsing by shlex.split()""" + for c in '"', "'", "\\", "#": + if c in arg: + return repr(arg) + if arg.split() != [arg]: + return repr(arg) + return arg + + +class alias(option_base): + """Define a shortcut that invokes one or more commands""" + + description = "define a shortcut to invoke one or more commands" + command_consumes_arguments = True + + user_options = [ + ('remove', 'r', 'remove (unset) the alias'), + ] + option_base.user_options + + boolean_options = option_base.boolean_options + ['remove'] + + def initialize_options(self): + option_base.initialize_options(self) + self.args = None + self.remove = None + + def finalize_options(self): + option_base.finalize_options(self) + if self.remove and len(self.args) != 1: + raise DistutilsOptionError( + "Must specify exactly one argument (the alias name) when " + "using --remove" + ) + + def run(self): + aliases = self.distribution.get_option_dict('aliases') + + if not self.args: + print("Command Aliases") + print("---------------") + for alias in aliases: + print("setup.py alias", format_alias(alias, aliases)) + return + + elif len(self.args) == 1: + alias, = self.args + if self.remove: + command = None + elif alias in aliases: + print("setup.py alias", format_alias(alias, aliases)) + return + else: + print("No alias definition found for %r" % alias) + return + else: + alias = self.args[0] + command = ' '.join(map(shquote, self.args[1:])) + + edit_config(self.filename, {'aliases': {alias: command}}, self.dry_run) + + +def format_alias(name, aliases): + source, command = aliases[name] + if source == config_file('global'): + source = '--global-config ' + elif source == config_file('user'): + source = '--user-config ' + elif source == config_file('local'): + source = '' + else: + source = '--filename=%r' % source + return source + name + ' ' + command diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/bdist_egg.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/bdist_egg.py new file mode 100644 index 00000000..9f8df917 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/bdist_egg.py @@ -0,0 +1,502 @@ +"""setuptools.command.bdist_egg + +Build .egg distributions""" + +from distutils.errors import DistutilsSetupError +from distutils.dir_util import remove_tree, mkpath +from distutils import log +from types import CodeType +import sys +import os +import re +import textwrap +import marshal + +from setuptools.extern import six + +from pkg_resources import get_build_platform, Distribution, ensure_directory +from pkg_resources import EntryPoint +from setuptools.extension import Library +from setuptools import Command + +try: + # Python 2.7 or >=3.2 + from sysconfig import get_path, get_python_version + + def _get_purelib(): + return get_path("purelib") +except ImportError: + from distutils.sysconfig import get_python_lib, get_python_version + + def _get_purelib(): + return get_python_lib(False) + + +def strip_module(filename): + if '.' in filename: + filename = os.path.splitext(filename)[0] + if filename.endswith('module'): + filename = filename[:-6] + return filename + + +def sorted_walk(dir): + """Do os.walk in a reproducible way, + independent of indeterministic filesystem readdir order + """ + for base, dirs, files in os.walk(dir): + dirs.sort() + files.sort() + yield base, dirs, files + + +def write_stub(resource, pyfile): + _stub_template = textwrap.dedent(""" + def __bootstrap__(): + global __bootstrap__, __loader__, __file__ + import sys, pkg_resources, imp + __file__ = pkg_resources.resource_filename(__name__, %r) + __loader__ = None; del __bootstrap__, __loader__ + imp.load_dynamic(__name__,__file__) + __bootstrap__() + """).lstrip() + with open(pyfile, 'w') as f: + f.write(_stub_template % resource) + + +class bdist_egg(Command): + description = "create an \"egg\" distribution" + + user_options = [ + ('bdist-dir=', 'b', + "temporary directory for creating the distribution"), + ('plat-name=', 'p', "platform name to embed in generated filenames " + "(default: %s)" % get_build_platform()), + ('exclude-source-files', None, + "remove all .py files from the generated egg"), + ('keep-temp', 'k', + "keep the pseudo-installation tree around after " + + "creating the distribution archive"), + ('dist-dir=', 'd', + "directory to put final built distributions in"), + ('skip-build', None, + "skip rebuilding everything (for testing/debugging)"), + ] + + boolean_options = [ + 'keep-temp', 'skip-build', 'exclude-source-files' + ] + + def initialize_options(self): + self.bdist_dir = None + self.plat_name = None + self.keep_temp = 0 + self.dist_dir = None + self.skip_build = 0 + self.egg_output = None + self.exclude_source_files = None + + def finalize_options(self): + ei_cmd = self.ei_cmd = self.get_finalized_command("egg_info") + self.egg_info = ei_cmd.egg_info + + if self.bdist_dir is None: + bdist_base = self.get_finalized_command('bdist').bdist_base + self.bdist_dir = os.path.join(bdist_base, 'egg') + + if self.plat_name is None: + self.plat_name = get_build_platform() + + self.set_undefined_options('bdist', ('dist_dir', 'dist_dir')) + + if self.egg_output is None: + + # Compute filename of the output egg + basename = Distribution( + None, None, ei_cmd.egg_name, ei_cmd.egg_version, + get_python_version(), + self.distribution.has_ext_modules() and self.plat_name + ).egg_name() + + self.egg_output = os.path.join(self.dist_dir, basename + '.egg') + + def do_install_data(self): + # Hack for packages that install data to install's --install-lib + self.get_finalized_command('install').install_lib = self.bdist_dir + + site_packages = os.path.normcase(os.path.realpath(_get_purelib())) + old, self.distribution.data_files = self.distribution.data_files, [] + + for item in old: + if isinstance(item, tuple) and len(item) == 2: + if os.path.isabs(item[0]): + realpath = os.path.realpath(item[0]) + normalized = os.path.normcase(realpath) + if normalized == site_packages or normalized.startswith( + site_packages + os.sep + ): + item = realpath[len(site_packages) + 1:], item[1] + # XXX else: raise ??? + self.distribution.data_files.append(item) + + try: + log.info("installing package data to %s", self.bdist_dir) + self.call_command('install_data', force=0, root=None) + finally: + self.distribution.data_files = old + + def get_outputs(self): + return [self.egg_output] + + def call_command(self, cmdname, **kw): + """Invoke reinitialized command `cmdname` with keyword args""" + for dirname in INSTALL_DIRECTORY_ATTRS: + kw.setdefault(dirname, self.bdist_dir) + kw.setdefault('skip_build', self.skip_build) + kw.setdefault('dry_run', self.dry_run) + cmd = self.reinitialize_command(cmdname, **kw) + self.run_command(cmdname) + return cmd + + def run(self): + # Generate metadata first + self.run_command("egg_info") + # We run install_lib before install_data, because some data hacks + # pull their data path from the install_lib command. + log.info("installing library code to %s", self.bdist_dir) + instcmd = self.get_finalized_command('install') + old_root = instcmd.root + instcmd.root = None + if self.distribution.has_c_libraries() and not self.skip_build: + self.run_command('build_clib') + cmd = self.call_command('install_lib', warn_dir=0) + instcmd.root = old_root + + all_outputs, ext_outputs = self.get_ext_outputs() + self.stubs = [] + to_compile = [] + for (p, ext_name) in enumerate(ext_outputs): + filename, ext = os.path.splitext(ext_name) + pyfile = os.path.join(self.bdist_dir, strip_module(filename) + + '.py') + self.stubs.append(pyfile) + log.info("creating stub loader for %s", ext_name) + if not self.dry_run: + write_stub(os.path.basename(ext_name), pyfile) + to_compile.append(pyfile) + ext_outputs[p] = ext_name.replace(os.sep, '/') + + if to_compile: + cmd.byte_compile(to_compile) + if self.distribution.data_files: + self.do_install_data() + + # Make the EGG-INFO directory + archive_root = self.bdist_dir + egg_info = os.path.join(archive_root, 'EGG-INFO') + self.mkpath(egg_info) + if self.distribution.scripts: + script_dir = os.path.join(egg_info, 'scripts') + log.info("installing scripts to %s", script_dir) + self.call_command('install_scripts', install_dir=script_dir, + no_ep=1) + + self.copy_metadata_to(egg_info) + native_libs = os.path.join(egg_info, "native_libs.txt") + if all_outputs: + log.info("writing %s", native_libs) + if not self.dry_run: + ensure_directory(native_libs) + libs_file = open(native_libs, 'wt') + libs_file.write('\n'.join(all_outputs)) + libs_file.write('\n') + libs_file.close() + elif os.path.isfile(native_libs): + log.info("removing %s", native_libs) + if not self.dry_run: + os.unlink(native_libs) + + write_safety_flag( + os.path.join(archive_root, 'EGG-INFO'), self.zip_safe() + ) + + if os.path.exists(os.path.join(self.egg_info, 'depends.txt')): + log.warn( + "WARNING: 'depends.txt' will not be used by setuptools 0.6!\n" + "Use the install_requires/extras_require setup() args instead." + ) + + if self.exclude_source_files: + self.zap_pyfiles() + + # Make the archive + make_zipfile(self.egg_output, archive_root, verbose=self.verbose, + dry_run=self.dry_run, mode=self.gen_header()) + if not self.keep_temp: + remove_tree(self.bdist_dir, dry_run=self.dry_run) + + # Add to 'Distribution.dist_files' so that the "upload" command works + getattr(self.distribution, 'dist_files', []).append( + ('bdist_egg', get_python_version(), self.egg_output)) + + def zap_pyfiles(self): + log.info("Removing .py files from temporary directory") + for base, dirs, files in walk_egg(self.bdist_dir): + for name in files: + path = os.path.join(base, name) + + if name.endswith('.py'): + log.debug("Deleting %s", path) + os.unlink(path) + + if base.endswith('__pycache__'): + path_old = path + + pattern = r'(?P<name>.+)\.(?P<magic>[^.]+)\.pyc' + m = re.match(pattern, name) + path_new = os.path.join( + base, os.pardir, m.group('name') + '.pyc') + log.info( + "Renaming file from [%s] to [%s]" + % (path_old, path_new)) + try: + os.remove(path_new) + except OSError: + pass + os.rename(path_old, path_new) + + def zip_safe(self): + safe = getattr(self.distribution, 'zip_safe', None) + if safe is not None: + return safe + log.warn("zip_safe flag not set; analyzing archive contents...") + return analyze_egg(self.bdist_dir, self.stubs) + + def gen_header(self): + epm = EntryPoint.parse_map(self.distribution.entry_points or '') + ep = epm.get('setuptools.installation', {}).get('eggsecutable') + if ep is None: + return 'w' # not an eggsecutable, do it the usual way. + + if not ep.attrs or ep.extras: + raise DistutilsSetupError( + "eggsecutable entry point (%r) cannot have 'extras' " + "or refer to a module" % (ep,) + ) + + pyver = sys.version[:3] + pkg = ep.module_name + full = '.'.join(ep.attrs) + base = ep.attrs[0] + basename = os.path.basename(self.egg_output) + + header = ( + "#!/bin/sh\n" + 'if [ `basename $0` = "%(basename)s" ]\n' + 'then exec python%(pyver)s -c "' + "import sys, os; sys.path.insert(0, os.path.abspath('$0')); " + "from %(pkg)s import %(base)s; sys.exit(%(full)s())" + '" "$@"\n' + 'else\n' + ' echo $0 is not the correct name for this egg file.\n' + ' echo Please rename it back to %(basename)s and try again.\n' + ' exec false\n' + 'fi\n' + ) % locals() + + if not self.dry_run: + mkpath(os.path.dirname(self.egg_output), dry_run=self.dry_run) + f = open(self.egg_output, 'w') + f.write(header) + f.close() + return 'a' + + def copy_metadata_to(self, target_dir): + "Copy metadata (egg info) to the target_dir" + # normalize the path (so that a forward-slash in egg_info will + # match using startswith below) + norm_egg_info = os.path.normpath(self.egg_info) + prefix = os.path.join(norm_egg_info, '') + for path in self.ei_cmd.filelist.files: + if path.startswith(prefix): + target = os.path.join(target_dir, path[len(prefix):]) + ensure_directory(target) + self.copy_file(path, target) + + def get_ext_outputs(self): + """Get a list of relative paths to C extensions in the output distro""" + + all_outputs = [] + ext_outputs = [] + + paths = {self.bdist_dir: ''} + for base, dirs, files in sorted_walk(self.bdist_dir): + for filename in files: + if os.path.splitext(filename)[1].lower() in NATIVE_EXTENSIONS: + all_outputs.append(paths[base] + filename) + for filename in dirs: + paths[os.path.join(base, filename)] = (paths[base] + + filename + '/') + + if self.distribution.has_ext_modules(): + build_cmd = self.get_finalized_command('build_ext') + for ext in build_cmd.extensions: + if isinstance(ext, Library): + continue + fullname = build_cmd.get_ext_fullname(ext.name) + filename = build_cmd.get_ext_filename(fullname) + if not os.path.basename(filename).startswith('dl-'): + if os.path.exists(os.path.join(self.bdist_dir, filename)): + ext_outputs.append(filename) + + return all_outputs, ext_outputs + + +NATIVE_EXTENSIONS = dict.fromkeys('.dll .so .dylib .pyd'.split()) + + +def walk_egg(egg_dir): + """Walk an unpacked egg's contents, skipping the metadata directory""" + walker = sorted_walk(egg_dir) + base, dirs, files = next(walker) + if 'EGG-INFO' in dirs: + dirs.remove('EGG-INFO') + yield base, dirs, files + for bdf in walker: + yield bdf + + +def analyze_egg(egg_dir, stubs): + # check for existing flag in EGG-INFO + for flag, fn in safety_flags.items(): + if os.path.exists(os.path.join(egg_dir, 'EGG-INFO', fn)): + return flag + if not can_scan(): + return False + safe = True + for base, dirs, files in walk_egg(egg_dir): + for name in files: + if name.endswith('.py') or name.endswith('.pyw'): + continue + elif name.endswith('.pyc') or name.endswith('.pyo'): + # always scan, even if we already know we're not safe + safe = scan_module(egg_dir, base, name, stubs) and safe + return safe + + +def write_safety_flag(egg_dir, safe): + # Write or remove zip safety flag file(s) + for flag, fn in safety_flags.items(): + fn = os.path.join(egg_dir, fn) + if os.path.exists(fn): + if safe is None or bool(safe) != flag: + os.unlink(fn) + elif safe is not None and bool(safe) == flag: + f = open(fn, 'wt') + f.write('\n') + f.close() + + +safety_flags = { + True: 'zip-safe', + False: 'not-zip-safe', +} + + +def scan_module(egg_dir, base, name, stubs): + """Check whether module possibly uses unsafe-for-zipfile stuff""" + + filename = os.path.join(base, name) + if filename[:-1] in stubs: + return True # Extension module + pkg = base[len(egg_dir) + 1:].replace(os.sep, '.') + module = pkg + (pkg and '.' or '') + os.path.splitext(name)[0] + if six.PY2: + skip = 8 # skip magic & date + elif sys.version_info < (3, 7): + skip = 12 # skip magic & date & file size + else: + skip = 16 # skip magic & reserved? & date & file size + f = open(filename, 'rb') + f.read(skip) + code = marshal.load(f) + f.close() + safe = True + symbols = dict.fromkeys(iter_symbols(code)) + for bad in ['__file__', '__path__']: + if bad in symbols: + log.warn("%s: module references %s", module, bad) + safe = False + if 'inspect' in symbols: + for bad in [ + 'getsource', 'getabsfile', 'getsourcefile', 'getfile' + 'getsourcelines', 'findsource', 'getcomments', 'getframeinfo', + 'getinnerframes', 'getouterframes', 'stack', 'trace' + ]: + if bad in symbols: + log.warn("%s: module MAY be using inspect.%s", module, bad) + safe = False + return safe + + +def iter_symbols(code): + """Yield names and strings used by `code` and its nested code objects""" + for name in code.co_names: + yield name + for const in code.co_consts: + if isinstance(const, six.string_types): + yield const + elif isinstance(const, CodeType): + for name in iter_symbols(const): + yield name + + +def can_scan(): + if not sys.platform.startswith('java') and sys.platform != 'cli': + # CPython, PyPy, etc. + return True + log.warn("Unable to analyze compiled code on this platform.") + log.warn("Please ask the author to include a 'zip_safe'" + " setting (either True or False) in the package's setup.py") + + +# Attribute names of options for commands that might need to be convinced to +# install to the egg build directory + +INSTALL_DIRECTORY_ATTRS = [ + 'install_lib', 'install_dir', 'install_data', 'install_base' +] + + +def make_zipfile(zip_filename, base_dir, verbose=0, dry_run=0, compress=True, + mode='w'): + """Create a zip file from all the files under 'base_dir'. The output + zip file will be named 'base_dir' + ".zip". Uses either the "zipfile" + Python module (if available) or the InfoZIP "zip" utility (if installed + and found on the default search path). If neither tool is available, + raises DistutilsExecError. Returns the name of the output zip file. + """ + import zipfile + + mkpath(os.path.dirname(zip_filename), dry_run=dry_run) + log.info("creating '%s' and adding '%s' to it", zip_filename, base_dir) + + def visit(z, dirname, names): + for name in names: + path = os.path.normpath(os.path.join(dirname, name)) + if os.path.isfile(path): + p = path[len(base_dir) + 1:] + if not dry_run: + z.write(path, p) + log.debug("adding '%s'", p) + + compression = zipfile.ZIP_DEFLATED if compress else zipfile.ZIP_STORED + if not dry_run: + z = zipfile.ZipFile(zip_filename, mode, compression=compression) + for dirname, dirs, files in sorted_walk(base_dir): + visit(z, dirname, files) + z.close() + else: + for dirname, dirs, files in sorted_walk(base_dir): + visit(None, dirname, files) + return zip_filename diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/bdist_rpm.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/bdist_rpm.py new file mode 100644 index 00000000..70730927 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/bdist_rpm.py @@ -0,0 +1,43 @@ +import distutils.command.bdist_rpm as orig + + +class bdist_rpm(orig.bdist_rpm): + """ + Override the default bdist_rpm behavior to do the following: + + 1. Run egg_info to ensure the name and version are properly calculated. + 2. Always run 'install' using --single-version-externally-managed to + disable eggs in RPM distributions. + 3. Replace dash with underscore in the version numbers for better RPM + compatibility. + """ + + def run(self): + # ensure distro name is up-to-date + self.run_command('egg_info') + + orig.bdist_rpm.run(self) + + def _make_spec_file(self): + version = self.distribution.get_version() + rpmversion = version.replace('-', '_') + spec = orig.bdist_rpm._make_spec_file(self) + line23 = '%define version ' + version + line24 = '%define version ' + rpmversion + spec = [ + line.replace( + "Source0: %{name}-%{version}.tar", + "Source0: %{name}-%{unmangled_version}.tar" + ).replace( + "setup.py install ", + "setup.py install --single-version-externally-managed " + ).replace( + "%setup", + "%setup -n %{name}-%{unmangled_version}" + ).replace(line23, line24) + for line in spec + ] + insert_loc = spec.index(line24) + 1 + unmangled_version = "%define unmangled_version " + version + spec.insert(insert_loc, unmangled_version) + return spec diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/bdist_wininst.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/bdist_wininst.py new file mode 100644 index 00000000..073de97b --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/bdist_wininst.py @@ -0,0 +1,21 @@ +import distutils.command.bdist_wininst as orig + + +class bdist_wininst(orig.bdist_wininst): + def reinitialize_command(self, command, reinit_subcommands=0): + """ + Supplement reinitialize_command to work around + http://bugs.python.org/issue20819 + """ + cmd = self.distribution.reinitialize_command( + command, reinit_subcommands) + if command in ('install', 'install_lib'): + cmd.install_lib = None + return cmd + + def run(self): + self._is_running = True + try: + orig.bdist_wininst.run(self) + finally: + self._is_running = False diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/build_clib.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/build_clib.py new file mode 100644 index 00000000..09caff6f --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/build_clib.py @@ -0,0 +1,98 @@ +import distutils.command.build_clib as orig +from distutils.errors import DistutilsSetupError +from distutils import log +from setuptools.dep_util import newer_pairwise_group + + +class build_clib(orig.build_clib): + """ + Override the default build_clib behaviour to do the following: + + 1. Implement a rudimentary timestamp-based dependency system + so 'compile()' doesn't run every time. + 2. Add more keys to the 'build_info' dictionary: + * obj_deps - specify dependencies for each object compiled. + this should be a dictionary mapping a key + with the source filename to a list of + dependencies. Use an empty string for global + dependencies. + * cflags - specify a list of additional flags to pass to + the compiler. + """ + + def build_libraries(self, libraries): + for (lib_name, build_info) in libraries: + sources = build_info.get('sources') + if sources is None or not isinstance(sources, (list, tuple)): + raise DistutilsSetupError( + "in 'libraries' option (library '%s'), " + "'sources' must be present and must be " + "a list of source filenames" % lib_name) + sources = list(sources) + + log.info("building '%s' library", lib_name) + + # Make sure everything is the correct type. + # obj_deps should be a dictionary of keys as sources + # and a list/tuple of files that are its dependencies. + obj_deps = build_info.get('obj_deps', dict()) + if not isinstance(obj_deps, dict): + raise DistutilsSetupError( + "in 'libraries' option (library '%s'), " + "'obj_deps' must be a dictionary of " + "type 'source: list'" % lib_name) + dependencies = [] + + # Get the global dependencies that are specified by the '' key. + # These will go into every source's dependency list. + global_deps = obj_deps.get('', list()) + if not isinstance(global_deps, (list, tuple)): + raise DistutilsSetupError( + "in 'libraries' option (library '%s'), " + "'obj_deps' must be a dictionary of " + "type 'source: list'" % lib_name) + + # Build the list to be used by newer_pairwise_group + # each source will be auto-added to its dependencies. + for source in sources: + src_deps = [source] + src_deps.extend(global_deps) + extra_deps = obj_deps.get(source, list()) + if not isinstance(extra_deps, (list, tuple)): + raise DistutilsSetupError( + "in 'libraries' option (library '%s'), " + "'obj_deps' must be a dictionary of " + "type 'source: list'" % lib_name) + src_deps.extend(extra_deps) + dependencies.append(src_deps) + + expected_objects = self.compiler.object_filenames( + sources, + output_dir=self.build_temp + ) + + if newer_pairwise_group(dependencies, expected_objects) != ([], []): + # First, compile the source code to object files in the library + # directory. (This should probably change to putting object + # files in a temporary build directory.) + macros = build_info.get('macros') + include_dirs = build_info.get('include_dirs') + cflags = build_info.get('cflags') + objects = self.compiler.compile( + sources, + output_dir=self.build_temp, + macros=macros, + include_dirs=include_dirs, + extra_postargs=cflags, + debug=self.debug + ) + + # Now "link" the object files together into a static library. + # (On Unix at least, this isn't really linking -- it just + # builds an archive. Whatever.) + self.compiler.create_static_lib( + expected_objects, + lib_name, + output_dir=self.build_clib, + debug=self.debug + ) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/build_ext.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/build_ext.py new file mode 100644 index 00000000..60a8a32f --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/build_ext.py @@ -0,0 +1,321 @@ +import os +import sys +import itertools +import imp +from distutils.command.build_ext import build_ext as _du_build_ext +from distutils.file_util import copy_file +from distutils.ccompiler import new_compiler +from distutils.sysconfig import customize_compiler, get_config_var +from distutils.errors import DistutilsError +from distutils import log + +from setuptools.extension import Library +from setuptools.extern import six + +try: + # Attempt to use Cython for building extensions, if available + from Cython.Distutils.build_ext import build_ext as _build_ext + # Additionally, assert that the compiler module will load + # also. Ref #1229. + __import__('Cython.Compiler.Main') +except ImportError: + _build_ext = _du_build_ext + +# make sure _config_vars is initialized +get_config_var("LDSHARED") +from distutils.sysconfig import _config_vars as _CONFIG_VARS + + +def _customize_compiler_for_shlib(compiler): + if sys.platform == "darwin": + # building .dylib requires additional compiler flags on OSX; here we + # temporarily substitute the pyconfig.h variables so that distutils' + # 'customize_compiler' uses them before we build the shared libraries. + tmp = _CONFIG_VARS.copy() + try: + # XXX Help! I don't have any idea whether these are right... + _CONFIG_VARS['LDSHARED'] = ( + "gcc -Wl,-x -dynamiclib -undefined dynamic_lookup") + _CONFIG_VARS['CCSHARED'] = " -dynamiclib" + _CONFIG_VARS['SO'] = ".dylib" + customize_compiler(compiler) + finally: + _CONFIG_VARS.clear() + _CONFIG_VARS.update(tmp) + else: + customize_compiler(compiler) + + +have_rtld = False +use_stubs = False +libtype = 'shared' + +if sys.platform == "darwin": + use_stubs = True +elif os.name != 'nt': + try: + import dl + use_stubs = have_rtld = hasattr(dl, 'RTLD_NOW') + except ImportError: + pass + +if_dl = lambda s: s if have_rtld else '' + + +def get_abi3_suffix(): + """Return the file extension for an abi3-compliant Extension()""" + for suffix, _, _ in (s for s in imp.get_suffixes() if s[2] == imp.C_EXTENSION): + if '.abi3' in suffix: # Unix + return suffix + elif suffix == '.pyd': # Windows + return suffix + + +class build_ext(_build_ext): + def run(self): + """Build extensions in build directory, then copy if --inplace""" + old_inplace, self.inplace = self.inplace, 0 + _build_ext.run(self) + self.inplace = old_inplace + if old_inplace: + self.copy_extensions_to_source() + + def copy_extensions_to_source(self): + build_py = self.get_finalized_command('build_py') + for ext in self.extensions: + fullname = self.get_ext_fullname(ext.name) + filename = self.get_ext_filename(fullname) + modpath = fullname.split('.') + package = '.'.join(modpath[:-1]) + package_dir = build_py.get_package_dir(package) + dest_filename = os.path.join(package_dir, + os.path.basename(filename)) + src_filename = os.path.join(self.build_lib, filename) + + # Always copy, even if source is older than destination, to ensure + # that the right extensions for the current Python/platform are + # used. + copy_file( + src_filename, dest_filename, verbose=self.verbose, + dry_run=self.dry_run + ) + if ext._needs_stub: + self.write_stub(package_dir or os.curdir, ext, True) + + def get_ext_filename(self, fullname): + filename = _build_ext.get_ext_filename(self, fullname) + if fullname in self.ext_map: + ext = self.ext_map[fullname] + use_abi3 = ( + six.PY3 + and getattr(ext, 'py_limited_api') + and get_abi3_suffix() + ) + if use_abi3: + so_ext = get_config_var('EXT_SUFFIX') + filename = filename[:-len(so_ext)] + filename = filename + get_abi3_suffix() + if isinstance(ext, Library): + fn, ext = os.path.splitext(filename) + return self.shlib_compiler.library_filename(fn, libtype) + elif use_stubs and ext._links_to_dynamic: + d, fn = os.path.split(filename) + return os.path.join(d, 'dl-' + fn) + return filename + + def initialize_options(self): + _build_ext.initialize_options(self) + self.shlib_compiler = None + self.shlibs = [] + self.ext_map = {} + + def finalize_options(self): + _build_ext.finalize_options(self) + self.extensions = self.extensions or [] + self.check_extensions_list(self.extensions) + self.shlibs = [ext for ext in self.extensions + if isinstance(ext, Library)] + if self.shlibs: + self.setup_shlib_compiler() + for ext in self.extensions: + ext._full_name = self.get_ext_fullname(ext.name) + for ext in self.extensions: + fullname = ext._full_name + self.ext_map[fullname] = ext + + # distutils 3.1 will also ask for module names + # XXX what to do with conflicts? + self.ext_map[fullname.split('.')[-1]] = ext + + ltd = self.shlibs and self.links_to_dynamic(ext) or False + ns = ltd and use_stubs and not isinstance(ext, Library) + ext._links_to_dynamic = ltd + ext._needs_stub = ns + filename = ext._file_name = self.get_ext_filename(fullname) + libdir = os.path.dirname(os.path.join(self.build_lib, filename)) + if ltd and libdir not in ext.library_dirs: + ext.library_dirs.append(libdir) + if ltd and use_stubs and os.curdir not in ext.runtime_library_dirs: + ext.runtime_library_dirs.append(os.curdir) + + def setup_shlib_compiler(self): + compiler = self.shlib_compiler = new_compiler( + compiler=self.compiler, dry_run=self.dry_run, force=self.force + ) + _customize_compiler_for_shlib(compiler) + + if self.include_dirs is not None: + compiler.set_include_dirs(self.include_dirs) + if self.define is not None: + # 'define' option is a list of (name,value) tuples + for (name, value) in self.define: + compiler.define_macro(name, value) + if self.undef is not None: + for macro in self.undef: + compiler.undefine_macro(macro) + if self.libraries is not None: + compiler.set_libraries(self.libraries) + if self.library_dirs is not None: + compiler.set_library_dirs(self.library_dirs) + if self.rpath is not None: + compiler.set_runtime_library_dirs(self.rpath) + if self.link_objects is not None: + compiler.set_link_objects(self.link_objects) + + # hack so distutils' build_extension() builds a library instead + compiler.link_shared_object = link_shared_object.__get__(compiler) + + def get_export_symbols(self, ext): + if isinstance(ext, Library): + return ext.export_symbols + return _build_ext.get_export_symbols(self, ext) + + def build_extension(self, ext): + ext._convert_pyx_sources_to_lang() + _compiler = self.compiler + try: + if isinstance(ext, Library): + self.compiler = self.shlib_compiler + _build_ext.build_extension(self, ext) + if ext._needs_stub: + cmd = self.get_finalized_command('build_py').build_lib + self.write_stub(cmd, ext) + finally: + self.compiler = _compiler + + def links_to_dynamic(self, ext): + """Return true if 'ext' links to a dynamic lib in the same package""" + # XXX this should check to ensure the lib is actually being built + # XXX as dynamic, and not just using a locally-found version or a + # XXX static-compiled version + libnames = dict.fromkeys([lib._full_name for lib in self.shlibs]) + pkg = '.'.join(ext._full_name.split('.')[:-1] + ['']) + return any(pkg + libname in libnames for libname in ext.libraries) + + def get_outputs(self): + return _build_ext.get_outputs(self) + self.__get_stubs_outputs() + + def __get_stubs_outputs(self): + # assemble the base name for each extension that needs a stub + ns_ext_bases = ( + os.path.join(self.build_lib, *ext._full_name.split('.')) + for ext in self.extensions + if ext._needs_stub + ) + # pair each base with the extension + pairs = itertools.product(ns_ext_bases, self.__get_output_extensions()) + return list(base + fnext for base, fnext in pairs) + + def __get_output_extensions(self): + yield '.py' + yield '.pyc' + if self.get_finalized_command('build_py').optimize: + yield '.pyo' + + def write_stub(self, output_dir, ext, compile=False): + log.info("writing stub loader for %s to %s", ext._full_name, + output_dir) + stub_file = (os.path.join(output_dir, *ext._full_name.split('.')) + + '.py') + if compile and os.path.exists(stub_file): + raise DistutilsError(stub_file + " already exists! Please delete.") + if not self.dry_run: + f = open(stub_file, 'w') + f.write( + '\n'.join([ + "def __bootstrap__():", + " global __bootstrap__, __file__, __loader__", + " import sys, os, pkg_resources, imp" + if_dl(", dl"), + " __file__ = pkg_resources.resource_filename" + "(__name__,%r)" + % os.path.basename(ext._file_name), + " del __bootstrap__", + " if '__loader__' in globals():", + " del __loader__", + if_dl(" old_flags = sys.getdlopenflags()"), + " old_dir = os.getcwd()", + " try:", + " os.chdir(os.path.dirname(__file__))", + if_dl(" sys.setdlopenflags(dl.RTLD_NOW)"), + " imp.load_dynamic(__name__,__file__)", + " finally:", + if_dl(" sys.setdlopenflags(old_flags)"), + " os.chdir(old_dir)", + "__bootstrap__()", + "" # terminal \n + ]) + ) + f.close() + if compile: + from distutils.util import byte_compile + + byte_compile([stub_file], optimize=0, + force=True, dry_run=self.dry_run) + optimize = self.get_finalized_command('install_lib').optimize + if optimize > 0: + byte_compile([stub_file], optimize=optimize, + force=True, dry_run=self.dry_run) + if os.path.exists(stub_file) and not self.dry_run: + os.unlink(stub_file) + + +if use_stubs or os.name == 'nt': + # Build shared libraries + # + def link_shared_object( + self, objects, output_libname, output_dir=None, libraries=None, + library_dirs=None, runtime_library_dirs=None, export_symbols=None, + debug=0, extra_preargs=None, extra_postargs=None, build_temp=None, + target_lang=None): + self.link( + self.SHARED_LIBRARY, objects, output_libname, + output_dir, libraries, library_dirs, runtime_library_dirs, + export_symbols, debug, extra_preargs, extra_postargs, + build_temp, target_lang + ) +else: + # Build static libraries everywhere else + libtype = 'static' + + def link_shared_object( + self, objects, output_libname, output_dir=None, libraries=None, + library_dirs=None, runtime_library_dirs=None, export_symbols=None, + debug=0, extra_preargs=None, extra_postargs=None, build_temp=None, + target_lang=None): + # XXX we need to either disallow these attrs on Library instances, + # or warn/abort here if set, or something... + # libraries=None, library_dirs=None, runtime_library_dirs=None, + # export_symbols=None, extra_preargs=None, extra_postargs=None, + # build_temp=None + + assert output_dir is None # distutils build_ext doesn't pass this + output_dir, filename = os.path.split(output_libname) + basename, ext = os.path.splitext(filename) + if self.library_filename("x").startswith('lib'): + # strip 'lib' prefix; this is kludgy if some platform uses + # a different prefix + basename = basename[3:] + + self.create_static_lib( + objects, basename, output_dir, debug, target_lang + ) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/build_py.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/build_py.py new file mode 100644 index 00000000..b0314fd4 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/build_py.py @@ -0,0 +1,270 @@ +from glob import glob +from distutils.util import convert_path +import distutils.command.build_py as orig +import os +import fnmatch +import textwrap +import io +import distutils.errors +import itertools + +from setuptools.extern import six +from setuptools.extern.six.moves import map, filter, filterfalse + +try: + from setuptools.lib2to3_ex import Mixin2to3 +except ImportError: + + class Mixin2to3: + def run_2to3(self, files, doctests=True): + "do nothing" + + +class build_py(orig.build_py, Mixin2to3): + """Enhanced 'build_py' command that includes data files with packages + + The data files are specified via a 'package_data' argument to 'setup()'. + See 'setuptools.dist.Distribution' for more details. + + Also, this version of the 'build_py' command allows you to specify both + 'py_modules' and 'packages' in the same setup operation. + """ + + def finalize_options(self): + orig.build_py.finalize_options(self) + self.package_data = self.distribution.package_data + self.exclude_package_data = (self.distribution.exclude_package_data or + {}) + if 'data_files' in self.__dict__: + del self.__dict__['data_files'] + self.__updated_files = [] + self.__doctests_2to3 = [] + + def run(self): + """Build modules, packages, and copy data files to build directory""" + if not self.py_modules and not self.packages: + return + + if self.py_modules: + self.build_modules() + + if self.packages: + self.build_packages() + self.build_package_data() + + self.run_2to3(self.__updated_files, False) + self.run_2to3(self.__updated_files, True) + self.run_2to3(self.__doctests_2to3, True) + + # Only compile actual .py files, using our base class' idea of what our + # output files are. + self.byte_compile(orig.build_py.get_outputs(self, include_bytecode=0)) + + def __getattr__(self, attr): + "lazily compute data files" + if attr == 'data_files': + self.data_files = self._get_data_files() + return self.data_files + return orig.build_py.__getattr__(self, attr) + + def build_module(self, module, module_file, package): + if six.PY2 and isinstance(package, six.string_types): + # avoid errors on Python 2 when unicode is passed (#190) + package = package.split('.') + outfile, copied = orig.build_py.build_module(self, module, module_file, + package) + if copied: + self.__updated_files.append(outfile) + return outfile, copied + + def _get_data_files(self): + """Generate list of '(package,src_dir,build_dir,filenames)' tuples""" + self.analyze_manifest() + return list(map(self._get_pkg_data_files, self.packages or ())) + + def _get_pkg_data_files(self, package): + # Locate package source directory + src_dir = self.get_package_dir(package) + + # Compute package build directory + build_dir = os.path.join(*([self.build_lib] + package.split('.'))) + + # Strip directory from globbed filenames + filenames = [ + os.path.relpath(file, src_dir) + for file in self.find_data_files(package, src_dir) + ] + return package, src_dir, build_dir, filenames + + def find_data_files(self, package, src_dir): + """Return filenames for package's data files in 'src_dir'""" + patterns = self._get_platform_patterns( + self.package_data, + package, + src_dir, + ) + globs_expanded = map(glob, patterns) + # flatten the expanded globs into an iterable of matches + globs_matches = itertools.chain.from_iterable(globs_expanded) + glob_files = filter(os.path.isfile, globs_matches) + files = itertools.chain( + self.manifest_files.get(package, []), + glob_files, + ) + return self.exclude_data_files(package, src_dir, files) + + def build_package_data(self): + """Copy data files into build directory""" + for package, src_dir, build_dir, filenames in self.data_files: + for filename in filenames: + target = os.path.join(build_dir, filename) + self.mkpath(os.path.dirname(target)) + srcfile = os.path.join(src_dir, filename) + outf, copied = self.copy_file(srcfile, target) + srcfile = os.path.abspath(srcfile) + if (copied and + srcfile in self.distribution.convert_2to3_doctests): + self.__doctests_2to3.append(outf) + + def analyze_manifest(self): + self.manifest_files = mf = {} + if not self.distribution.include_package_data: + return + src_dirs = {} + for package in self.packages or (): + # Locate package source directory + src_dirs[assert_relative(self.get_package_dir(package))] = package + + self.run_command('egg_info') + ei_cmd = self.get_finalized_command('egg_info') + for path in ei_cmd.filelist.files: + d, f = os.path.split(assert_relative(path)) + prev = None + oldf = f + while d and d != prev and d not in src_dirs: + prev = d + d, df = os.path.split(d) + f = os.path.join(df, f) + if d in src_dirs: + if path.endswith('.py') and f == oldf: + continue # it's a module, not data + mf.setdefault(src_dirs[d], []).append(path) + + def get_data_files(self): + pass # Lazily compute data files in _get_data_files() function. + + def check_package(self, package, package_dir): + """Check namespace packages' __init__ for declare_namespace""" + try: + return self.packages_checked[package] + except KeyError: + pass + + init_py = orig.build_py.check_package(self, package, package_dir) + self.packages_checked[package] = init_py + + if not init_py or not self.distribution.namespace_packages: + return init_py + + for pkg in self.distribution.namespace_packages: + if pkg == package or pkg.startswith(package + '.'): + break + else: + return init_py + + with io.open(init_py, 'rb') as f: + contents = f.read() + if b'declare_namespace' not in contents: + raise distutils.errors.DistutilsError( + "Namespace package problem: %s is a namespace package, but " + "its\n__init__.py does not call declare_namespace()! Please " + 'fix it.\n(See the setuptools manual under ' + '"Namespace Packages" for details.)\n"' % (package,) + ) + return init_py + + def initialize_options(self): + self.packages_checked = {} + orig.build_py.initialize_options(self) + + def get_package_dir(self, package): + res = orig.build_py.get_package_dir(self, package) + if self.distribution.src_root is not None: + return os.path.join(self.distribution.src_root, res) + return res + + def exclude_data_files(self, package, src_dir, files): + """Filter filenames for package's data files in 'src_dir'""" + files = list(files) + patterns = self._get_platform_patterns( + self.exclude_package_data, + package, + src_dir, + ) + match_groups = ( + fnmatch.filter(files, pattern) + for pattern in patterns + ) + # flatten the groups of matches into an iterable of matches + matches = itertools.chain.from_iterable(match_groups) + bad = set(matches) + keepers = ( + fn + for fn in files + if fn not in bad + ) + # ditch dupes + return list(_unique_everseen(keepers)) + + @staticmethod + def _get_platform_patterns(spec, package, src_dir): + """ + yield platform-specific path patterns (suitable for glob + or fn_match) from a glob-based spec (such as + self.package_data or self.exclude_package_data) + matching package in src_dir. + """ + raw_patterns = itertools.chain( + spec.get('', []), + spec.get(package, []), + ) + return ( + # Each pattern has to be converted to a platform-specific path + os.path.join(src_dir, convert_path(pattern)) + for pattern in raw_patterns + ) + + +# from Python docs +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 + + +def assert_relative(path): + if not os.path.isabs(path): + return path + from distutils.errors import DistutilsSetupError + + msg = textwrap.dedent(""" + Error: setup script specifies an absolute path: + + %s + + setup() arguments must *always* be /-separated paths relative to the + setup.py directory, *never* absolute paths. + """).lstrip() % path + raise DistutilsSetupError(msg) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/develop.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/develop.py new file mode 100644 index 00000000..009e4f93 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/develop.py @@ -0,0 +1,221 @@ +from distutils.util import convert_path +from distutils import log +from distutils.errors import DistutilsError, DistutilsOptionError +import os +import glob +import io + +from setuptools.extern import six + +import pkg_resources +from setuptools.command.easy_install import easy_install +from setuptools import namespaces +import setuptools + +__metaclass__ = type + + +class develop(namespaces.DevelopInstaller, easy_install): + """Set up package for development""" + + description = "install package in 'development mode'" + + user_options = easy_install.user_options + [ + ("uninstall", "u", "Uninstall this source package"), + ("egg-path=", None, "Set the path to be used in the .egg-link file"), + ] + + boolean_options = easy_install.boolean_options + ['uninstall'] + + command_consumes_arguments = False # override base + + def run(self): + if self.uninstall: + self.multi_version = True + self.uninstall_link() + self.uninstall_namespaces() + else: + self.install_for_development() + self.warn_deprecated_options() + + def initialize_options(self): + self.uninstall = None + self.egg_path = None + easy_install.initialize_options(self) + self.setup_path = None + self.always_copy_from = '.' # always copy eggs installed in curdir + + def finalize_options(self): + ei = self.get_finalized_command("egg_info") + if ei.broken_egg_info: + template = "Please rename %r to %r before using 'develop'" + args = ei.egg_info, ei.broken_egg_info + raise DistutilsError(template % args) + self.args = [ei.egg_name] + + easy_install.finalize_options(self) + self.expand_basedirs() + self.expand_dirs() + # pick up setup-dir .egg files only: no .egg-info + self.package_index.scan(glob.glob('*.egg')) + + egg_link_fn = ei.egg_name + '.egg-link' + self.egg_link = os.path.join(self.install_dir, egg_link_fn) + self.egg_base = ei.egg_base + if self.egg_path is None: + self.egg_path = os.path.abspath(ei.egg_base) + + target = pkg_resources.normalize_path(self.egg_base) + egg_path = pkg_resources.normalize_path( + os.path.join(self.install_dir, self.egg_path)) + if egg_path != target: + raise DistutilsOptionError( + "--egg-path must be a relative path from the install" + " directory to " + target + ) + + # Make a distribution for the package's source + self.dist = pkg_resources.Distribution( + target, + pkg_resources.PathMetadata(target, os.path.abspath(ei.egg_info)), + project_name=ei.egg_name + ) + + self.setup_path = self._resolve_setup_path( + self.egg_base, + self.install_dir, + self.egg_path, + ) + + @staticmethod + def _resolve_setup_path(egg_base, install_dir, egg_path): + """ + Generate a path from egg_base back to '.' where the + setup script resides and ensure that path points to the + setup path from $install_dir/$egg_path. + """ + path_to_setup = egg_base.replace(os.sep, '/').rstrip('/') + if path_to_setup != os.curdir: + path_to_setup = '../' * (path_to_setup.count('/') + 1) + resolved = pkg_resources.normalize_path( + os.path.join(install_dir, egg_path, path_to_setup) + ) + if resolved != pkg_resources.normalize_path(os.curdir): + raise DistutilsOptionError( + "Can't get a consistent path to setup script from" + " installation directory", resolved, + pkg_resources.normalize_path(os.curdir)) + return path_to_setup + + def install_for_development(self): + if six.PY3 and getattr(self.distribution, 'use_2to3', False): + # If we run 2to3 we can not do this inplace: + + # Ensure metadata is up-to-date + self.reinitialize_command('build_py', inplace=0) + self.run_command('build_py') + bpy_cmd = self.get_finalized_command("build_py") + build_path = pkg_resources.normalize_path(bpy_cmd.build_lib) + + # Build extensions + self.reinitialize_command('egg_info', egg_base=build_path) + self.run_command('egg_info') + + self.reinitialize_command('build_ext', inplace=0) + self.run_command('build_ext') + + # Fixup egg-link and easy-install.pth + ei_cmd = self.get_finalized_command("egg_info") + self.egg_path = build_path + self.dist.location = build_path + # XXX + self.dist._provider = pkg_resources.PathMetadata( + build_path, ei_cmd.egg_info) + else: + # Without 2to3 inplace works fine: + self.run_command('egg_info') + + # Build extensions in-place + self.reinitialize_command('build_ext', inplace=1) + self.run_command('build_ext') + + self.install_site_py() # ensure that target dir is site-safe + if setuptools.bootstrap_install_from: + self.easy_install(setuptools.bootstrap_install_from) + setuptools.bootstrap_install_from = None + + self.install_namespaces() + + # create an .egg-link in the installation dir, pointing to our egg + log.info("Creating %s (link to %s)", self.egg_link, self.egg_base) + if not self.dry_run: + with open(self.egg_link, "w") as f: + f.write(self.egg_path + "\n" + self.setup_path) + # postprocess the installed distro, fixing up .pth, installing scripts, + # and handling requirements + self.process_distribution(None, self.dist, not self.no_deps) + + def uninstall_link(self): + if os.path.exists(self.egg_link): + log.info("Removing %s (link to %s)", self.egg_link, self.egg_base) + egg_link_file = open(self.egg_link) + contents = [line.rstrip() for line in egg_link_file] + egg_link_file.close() + if contents not in ([self.egg_path], + [self.egg_path, self.setup_path]): + log.warn("Link points to %s: uninstall aborted", contents) + return + if not self.dry_run: + os.unlink(self.egg_link) + if not self.dry_run: + self.update_pth(self.dist) # remove any .pth link to us + if self.distribution.scripts: + # XXX should also check for entry point scripts! + log.warn("Note: you must uninstall or replace scripts manually!") + + def install_egg_scripts(self, dist): + if dist is not self.dist: + # Installing a dependency, so fall back to normal behavior + return easy_install.install_egg_scripts(self, dist) + + # create wrapper scripts in the script dir, pointing to dist.scripts + + # new-style... + self.install_wrapper_scripts(dist) + + # ...and old-style + for script_name in self.distribution.scripts or []: + script_path = os.path.abspath(convert_path(script_name)) + script_name = os.path.basename(script_path) + with io.open(script_path) as strm: + script_text = strm.read() + self.install_script(dist, script_name, script_text, script_path) + + def install_wrapper_scripts(self, dist): + dist = VersionlessRequirement(dist) + return easy_install.install_wrapper_scripts(self, dist) + + +class VersionlessRequirement: + """ + Adapt a pkg_resources.Distribution to simply return the project + name as the 'requirement' so that scripts will work across + multiple versions. + + >>> from pkg_resources import Distribution + >>> dist = Distribution(project_name='foo', version='1.0') + >>> str(dist.as_requirement()) + 'foo==1.0' + >>> adapted_dist = VersionlessRequirement(dist) + >>> str(adapted_dist.as_requirement()) + 'foo' + """ + + def __init__(self, dist): + self.__dist = dist + + def __getattr__(self, name): + return getattr(self.__dist, name) + + def as_requirement(self): + return self.project_name diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/dist_info.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/dist_info.py new file mode 100644 index 00000000..c45258fa --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/dist_info.py @@ -0,0 +1,36 @@ +""" +Create a dist_info directory +As defined in the wheel specification +""" + +import os + +from distutils.core import Command +from distutils import log + + +class dist_info(Command): + + description = 'create a .dist-info directory' + + user_options = [ + ('egg-base=', 'e', "directory containing .egg-info directories" + " (default: top of the source tree)"), + ] + + def initialize_options(self): + self.egg_base = None + + def finalize_options(self): + pass + + def run(self): + egg_info = self.get_finalized_command('egg_info') + egg_info.egg_base = self.egg_base + egg_info.finalize_options() + egg_info.run() + dist_info_dir = egg_info.egg_info[:-len('.egg-info')] + '.dist-info' + log.info("creating '{}'".format(os.path.abspath(dist_info_dir))) + + bdist_wheel = self.get_finalized_command('bdist_wheel') + bdist_wheel.egg2dist(egg_info.egg_info, dist_info_dir) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/easy_install.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/easy_install.py new file mode 100644 index 00000000..06c98271 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/easy_install.py @@ -0,0 +1,2342 @@ +#!/usr/bin/env python +""" +Easy Install +------------ + +A tool for doing automatic download/extract/build of distutils-based Python +packages. For detailed documentation, see the accompanying EasyInstall.txt +file, or visit the `EasyInstall home page`__. + +__ https://setuptools.readthedocs.io/en/latest/easy_install.html + +""" + +from glob import glob +from distutils.util import get_platform +from distutils.util import convert_path, subst_vars +from distutils.errors import ( + DistutilsArgError, DistutilsOptionError, + DistutilsError, DistutilsPlatformError, +) +from distutils.command.install import INSTALL_SCHEMES, SCHEME_KEYS +from distutils import log, dir_util +from distutils.command.build_scripts import first_line_re +from distutils.spawn import find_executable +import sys +import os +import zipimport +import shutil +import tempfile +import zipfile +import re +import stat +import random +import textwrap +import warnings +import site +import struct +import contextlib +import subprocess +import shlex +import io + + +from sysconfig import get_config_vars, get_path + +from setuptools import SetuptoolsDeprecationWarning + +from setuptools.extern import six +from setuptools.extern.six.moves import configparser, map + +from setuptools import Command +from setuptools.sandbox import run_setup +from setuptools.py27compat import rmtree_safe +from setuptools.command import setopt +from setuptools.archive_util import unpack_archive +from setuptools.package_index import ( + PackageIndex, parse_requirement_arg, URL_SCHEME, +) +from setuptools.command import bdist_egg, egg_info +from setuptools.wheel import Wheel +from pkg_resources import ( + yield_lines, normalize_path, resource_string, ensure_directory, + get_distribution, find_distributions, Environment, Requirement, + Distribution, PathMetadata, EggMetadata, WorkingSet, DistributionNotFound, + VersionConflict, DEVELOP_DIST, +) +import pkg_resources.py31compat + +__metaclass__ = type + +# Turn on PEP440Warnings +warnings.filterwarnings("default", category=pkg_resources.PEP440Warning) + +__all__ = [ + 'samefile', 'easy_install', 'PthDistributions', 'extract_wininst_cfg', + 'main', 'get_exe_prefixes', +] + + +def is_64bit(): + return struct.calcsize("P") == 8 + + +def samefile(p1, p2): + """ + Determine if two paths reference the same file. + + Augments os.path.samefile to work on Windows and + suppresses errors if the path doesn't exist. + """ + both_exist = os.path.exists(p1) and os.path.exists(p2) + use_samefile = hasattr(os.path, 'samefile') and both_exist + if use_samefile: + return os.path.samefile(p1, p2) + norm_p1 = os.path.normpath(os.path.normcase(p1)) + norm_p2 = os.path.normpath(os.path.normcase(p2)) + return norm_p1 == norm_p2 + + +if six.PY2: + + def _to_bytes(s): + return s + + def isascii(s): + try: + six.text_type(s, 'ascii') + return True + except UnicodeError: + return False +else: + + def _to_bytes(s): + return s.encode('utf8') + + def isascii(s): + try: + s.encode('ascii') + return True + except UnicodeError: + return False + + +_one_liner = lambda text: textwrap.dedent(text).strip().replace('\n', '; ') + + +class easy_install(Command): + """Manage a download/build/install process""" + description = "Find/get/install Python packages" + command_consumes_arguments = True + + user_options = [ + ('prefix=', None, "installation prefix"), + ("zip-ok", "z", "install package as a zipfile"), + ("multi-version", "m", "make apps have to require() a version"), + ("upgrade", "U", "force upgrade (searches PyPI for latest versions)"), + ("install-dir=", "d", "install package to DIR"), + ("script-dir=", "s", "install scripts to DIR"), + ("exclude-scripts", "x", "Don't install scripts"), + ("always-copy", "a", "Copy all needed packages to install dir"), + ("index-url=", "i", "base URL of Python Package Index"), + ("find-links=", "f", "additional URL(s) to search for packages"), + ("build-directory=", "b", + "download/extract/build in DIR; keep the results"), + ('optimize=', 'O', + "also compile with optimization: -O1 for \"python -O\", " + "-O2 for \"python -OO\", and -O0 to disable [default: -O0]"), + ('record=', None, + "filename in which to record list of installed files"), + ('always-unzip', 'Z', "don't install as a zipfile, no matter what"), + ('site-dirs=', 'S', "list of directories where .pth files work"), + ('editable', 'e', "Install specified packages in editable form"), + ('no-deps', 'N', "don't install dependencies"), + ('allow-hosts=', 'H', "pattern(s) that hostnames must match"), + ('local-snapshots-ok', 'l', + "allow building eggs from local checkouts"), + ('version', None, "print version information and exit"), + ('no-find-links', None, + "Don't load find-links defined in packages being installed") + ] + boolean_options = [ + 'zip-ok', 'multi-version', 'exclude-scripts', 'upgrade', 'always-copy', + 'editable', + 'no-deps', 'local-snapshots-ok', 'version' + ] + + if site.ENABLE_USER_SITE: + help_msg = "install in user site-package '%s'" % site.USER_SITE + user_options.append(('user', None, help_msg)) + boolean_options.append('user') + + negative_opt = {'always-unzip': 'zip-ok'} + create_index = PackageIndex + + def initialize_options(self): + # the --user option seems to be an opt-in one, + # so the default should be False. + self.user = 0 + self.zip_ok = self.local_snapshots_ok = None + self.install_dir = self.script_dir = self.exclude_scripts = None + self.index_url = None + self.find_links = None + self.build_directory = None + self.args = None + self.optimize = self.record = None + self.upgrade = self.always_copy = self.multi_version = None + self.editable = self.no_deps = self.allow_hosts = None + self.root = self.prefix = self.no_report = None + self.version = None + self.install_purelib = None # for pure module distributions + self.install_platlib = None # non-pure (dists w/ extensions) + self.install_headers = None # for C/C++ headers + self.install_lib = None # set to either purelib or platlib + self.install_scripts = None + self.install_data = None + self.install_base = None + self.install_platbase = None + if site.ENABLE_USER_SITE: + self.install_userbase = site.USER_BASE + self.install_usersite = site.USER_SITE + else: + self.install_userbase = None + self.install_usersite = None + self.no_find_links = None + + # Options not specifiable via command line + self.package_index = None + self.pth_file = self.always_copy_from = None + self.site_dirs = None + self.installed_projects = {} + self.sitepy_installed = False + # Always read easy_install options, even if we are subclassed, or have + # an independent instance created. This ensures that defaults will + # always come from the standard configuration file(s)' "easy_install" + # section, even if this is a "develop" or "install" command, or some + # other embedding. + self._dry_run = None + self.verbose = self.distribution.verbose + self.distribution._set_command_options( + self, self.distribution.get_option_dict('easy_install') + ) + + def delete_blockers(self, blockers): + extant_blockers = ( + filename for filename in blockers + if os.path.exists(filename) or os.path.islink(filename) + ) + list(map(self._delete_path, extant_blockers)) + + def _delete_path(self, path): + log.info("Deleting %s", path) + if self.dry_run: + return + + is_tree = os.path.isdir(path) and not os.path.islink(path) + remover = rmtree if is_tree else os.unlink + remover(path) + + @staticmethod + def _render_version(): + """ + Render the Setuptools version and installation details, then exit. + """ + ver = sys.version[:3] + dist = get_distribution('setuptools') + tmpl = 'setuptools {dist.version} from {dist.location} (Python {ver})' + print(tmpl.format(**locals())) + raise SystemExit() + + def finalize_options(self): + self.version and self._render_version() + + py_version = sys.version.split()[0] + prefix, exec_prefix = get_config_vars('prefix', 'exec_prefix') + + self.config_vars = { + 'dist_name': self.distribution.get_name(), + 'dist_version': self.distribution.get_version(), + 'dist_fullname': self.distribution.get_fullname(), + 'py_version': py_version, + 'py_version_short': py_version[0:3], + 'py_version_nodot': py_version[0] + py_version[2], + 'sys_prefix': prefix, + 'prefix': prefix, + 'sys_exec_prefix': exec_prefix, + 'exec_prefix': exec_prefix, + # Only python 3.2+ has abiflags + 'abiflags': getattr(sys, 'abiflags', ''), + } + + if site.ENABLE_USER_SITE: + self.config_vars['userbase'] = self.install_userbase + self.config_vars['usersite'] = self.install_usersite + + self._fix_install_dir_for_user_site() + + self.expand_basedirs() + self.expand_dirs() + + self._expand( + 'install_dir', 'script_dir', 'build_directory', + 'site_dirs', + ) + # If a non-default installation directory was specified, default the + # script directory to match it. + if self.script_dir is None: + self.script_dir = self.install_dir + + if self.no_find_links is None: + self.no_find_links = False + + # Let install_dir get set by install_lib command, which in turn + # gets its info from the install command, and takes into account + # --prefix and --home and all that other crud. + self.set_undefined_options( + 'install_lib', ('install_dir', 'install_dir') + ) + # Likewise, set default script_dir from 'install_scripts.install_dir' + self.set_undefined_options( + 'install_scripts', ('install_dir', 'script_dir') + ) + + if self.user and self.install_purelib: + self.install_dir = self.install_purelib + self.script_dir = self.install_scripts + # default --record from the install command + self.set_undefined_options('install', ('record', 'record')) + # Should this be moved to the if statement below? It's not used + # elsewhere + normpath = map(normalize_path, sys.path) + self.all_site_dirs = get_site_dirs() + if self.site_dirs is not None: + site_dirs = [ + os.path.expanduser(s.strip()) for s in + self.site_dirs.split(',') + ] + for d in site_dirs: + if not os.path.isdir(d): + log.warn("%s (in --site-dirs) does not exist", d) + elif normalize_path(d) not in normpath: + raise DistutilsOptionError( + d + " (in --site-dirs) is not on sys.path" + ) + else: + self.all_site_dirs.append(normalize_path(d)) + if not self.editable: + self.check_site_dir() + self.index_url = self.index_url or "https://pypi.org/simple/" + self.shadow_path = self.all_site_dirs[:] + for path_item in self.install_dir, normalize_path(self.script_dir): + if path_item not in self.shadow_path: + self.shadow_path.insert(0, path_item) + + if self.allow_hosts is not None: + hosts = [s.strip() for s in self.allow_hosts.split(',')] + else: + hosts = ['*'] + if self.package_index is None: + self.package_index = self.create_index( + self.index_url, search_path=self.shadow_path, hosts=hosts, + ) + self.local_index = Environment(self.shadow_path + sys.path) + + if self.find_links is not None: + if isinstance(self.find_links, six.string_types): + self.find_links = self.find_links.split() + else: + self.find_links = [] + if self.local_snapshots_ok: + self.package_index.scan_egg_links(self.shadow_path + sys.path) + if not self.no_find_links: + self.package_index.add_find_links(self.find_links) + self.set_undefined_options('install_lib', ('optimize', 'optimize')) + if not isinstance(self.optimize, int): + try: + self.optimize = int(self.optimize) + if not (0 <= self.optimize <= 2): + raise ValueError + except ValueError: + raise DistutilsOptionError("--optimize must be 0, 1, or 2") + + if self.editable and not self.build_directory: + raise DistutilsArgError( + "Must specify a build directory (-b) when using --editable" + ) + if not self.args: + raise DistutilsArgError( + "No urls, filenames, or requirements specified (see --help)") + + self.outputs = [] + + def _fix_install_dir_for_user_site(self): + """ + Fix the install_dir if "--user" was used. + """ + if not self.user or not site.ENABLE_USER_SITE: + return + + self.create_home_path() + if self.install_userbase is None: + msg = "User base directory is not specified" + raise DistutilsPlatformError(msg) + self.install_base = self.install_platbase = self.install_userbase + scheme_name = os.name.replace('posix', 'unix') + '_user' + self.select_scheme(scheme_name) + + def _expand_attrs(self, attrs): + for attr in attrs: + val = getattr(self, attr) + if val is not None: + if os.name == 'posix' or os.name == 'nt': + val = os.path.expanduser(val) + val = subst_vars(val, self.config_vars) + setattr(self, attr, val) + + def expand_basedirs(self): + """Calls `os.path.expanduser` on install_base, install_platbase and + root.""" + self._expand_attrs(['install_base', 'install_platbase', 'root']) + + def expand_dirs(self): + """Calls `os.path.expanduser` on install dirs.""" + dirs = [ + 'install_purelib', + 'install_platlib', + 'install_lib', + 'install_headers', + 'install_scripts', + 'install_data', + ] + self._expand_attrs(dirs) + + def run(self): + if self.verbose != self.distribution.verbose: + log.set_verbosity(self.verbose) + try: + for spec in self.args: + self.easy_install(spec, not self.no_deps) + if self.record: + outputs = self.outputs + if self.root: # strip any package prefix + root_len = len(self.root) + for counter in range(len(outputs)): + outputs[counter] = outputs[counter][root_len:] + from distutils import file_util + + self.execute( + file_util.write_file, (self.record, outputs), + "writing list of installed files to '%s'" % + self.record + ) + self.warn_deprecated_options() + finally: + log.set_verbosity(self.distribution.verbose) + + def pseudo_tempname(self): + """Return a pseudo-tempname base in the install directory. + This code is intentionally naive; if a malicious party can write to + the target directory you're already in deep doodoo. + """ + try: + pid = os.getpid() + except Exception: + pid = random.randint(0, sys.maxsize) + return os.path.join(self.install_dir, "test-easy-install-%s" % pid) + + def warn_deprecated_options(self): + pass + + def check_site_dir(self): + """Verify that self.install_dir is .pth-capable dir, if needed""" + + instdir = normalize_path(self.install_dir) + pth_file = os.path.join(instdir, 'easy-install.pth') + + # Is it a configured, PYTHONPATH, implicit, or explicit site dir? + is_site_dir = instdir in self.all_site_dirs + + if not is_site_dir and not self.multi_version: + # No? Then directly test whether it does .pth file processing + is_site_dir = self.check_pth_processing() + else: + # make sure we can write to target dir + testfile = self.pseudo_tempname() + '.write-test' + test_exists = os.path.exists(testfile) + try: + if test_exists: + os.unlink(testfile) + open(testfile, 'w').close() + os.unlink(testfile) + except (OSError, IOError): + self.cant_write_to_target() + + if not is_site_dir and not self.multi_version: + # Can't install non-multi to non-site dir + raise DistutilsError(self.no_default_version_msg()) + + if is_site_dir: + if self.pth_file is None: + self.pth_file = PthDistributions(pth_file, self.all_site_dirs) + else: + self.pth_file = None + + if instdir not in map(normalize_path, _pythonpath()): + # only PYTHONPATH dirs need a site.py, so pretend it's there + self.sitepy_installed = True + elif self.multi_version and not os.path.exists(pth_file): + self.sitepy_installed = True # don't need site.py in this case + self.pth_file = None # and don't create a .pth file + self.install_dir = instdir + + __cant_write_msg = textwrap.dedent(""" + can't create or remove files in install directory + + The following error occurred while trying to add or remove files in the + installation directory: + + %s + + The installation directory you specified (via --install-dir, --prefix, or + the distutils default setting) was: + + %s + """).lstrip() + + __not_exists_id = textwrap.dedent(""" + This directory does not currently exist. Please create it and try again, or + choose a different installation directory (using the -d or --install-dir + option). + """).lstrip() + + __access_msg = textwrap.dedent(""" + Perhaps your account does not have write access to this directory? If the + installation directory is a system-owned directory, you may need to sign in + as the administrator or "root" account. If you do not have administrative + access to this machine, you may wish to choose a different installation + directory, preferably one that is listed in your PYTHONPATH environment + variable. + + For information on other options, you may wish to consult the + documentation at: + + https://setuptools.readthedocs.io/en/latest/easy_install.html + + Please make the appropriate changes for your system and try again. + """).lstrip() + + def cant_write_to_target(self): + msg = self.__cant_write_msg % (sys.exc_info()[1], self.install_dir,) + + if not os.path.exists(self.install_dir): + msg += '\n' + self.__not_exists_id + else: + msg += '\n' + self.__access_msg + raise DistutilsError(msg) + + def check_pth_processing(self): + """Empirically verify whether .pth files are supported in inst. dir""" + instdir = self.install_dir + log.info("Checking .pth file support in %s", instdir) + pth_file = self.pseudo_tempname() + ".pth" + ok_file = pth_file + '.ok' + ok_exists = os.path.exists(ok_file) + tmpl = _one_liner(""" + import os + f = open({ok_file!r}, 'w') + f.write('OK') + f.close() + """) + '\n' + try: + if ok_exists: + os.unlink(ok_file) + dirname = os.path.dirname(ok_file) + pkg_resources.py31compat.makedirs(dirname, exist_ok=True) + f = open(pth_file, 'w') + except (OSError, IOError): + self.cant_write_to_target() + else: + try: + f.write(tmpl.format(**locals())) + f.close() + f = None + executable = sys.executable + if os.name == 'nt': + dirname, basename = os.path.split(executable) + alt = os.path.join(dirname, 'pythonw.exe') + use_alt = ( + basename.lower() == 'python.exe' and + os.path.exists(alt) + ) + if use_alt: + # use pythonw.exe to avoid opening a console window + executable = alt + + from distutils.spawn import spawn + + spawn([executable, '-E', '-c', 'pass'], 0) + + if os.path.exists(ok_file): + log.info( + "TEST PASSED: %s appears to support .pth files", + instdir + ) + return True + finally: + if f: + f.close() + if os.path.exists(ok_file): + os.unlink(ok_file) + if os.path.exists(pth_file): + os.unlink(pth_file) + if not self.multi_version: + log.warn("TEST FAILED: %s does NOT support .pth files", instdir) + return False + + def install_egg_scripts(self, dist): + """Write all the scripts for `dist`, unless scripts are excluded""" + if not self.exclude_scripts and dist.metadata_isdir('scripts'): + for script_name in dist.metadata_listdir('scripts'): + if dist.metadata_isdir('scripts/' + script_name): + # The "script" is a directory, likely a Python 3 + # __pycache__ directory, so skip it. + continue + self.install_script( + dist, script_name, + dist.get_metadata('scripts/' + script_name) + ) + self.install_wrapper_scripts(dist) + + def add_output(self, path): + if os.path.isdir(path): + for base, dirs, files in os.walk(path): + for filename in files: + self.outputs.append(os.path.join(base, filename)) + else: + self.outputs.append(path) + + def not_editable(self, spec): + if self.editable: + raise DistutilsArgError( + "Invalid argument %r: you can't use filenames or URLs " + "with --editable (except via the --find-links option)." + % (spec,) + ) + + def check_editable(self, spec): + if not self.editable: + return + + if os.path.exists(os.path.join(self.build_directory, spec.key)): + raise DistutilsArgError( + "%r already exists in %s; can't do a checkout there" % + (spec.key, self.build_directory) + ) + + @contextlib.contextmanager + def _tmpdir(self): + tmpdir = tempfile.mkdtemp(prefix=u"easy_install-") + try: + # cast to str as workaround for #709 and #710 and #712 + yield str(tmpdir) + finally: + os.path.exists(tmpdir) and rmtree(rmtree_safe(tmpdir)) + + def easy_install(self, spec, deps=False): + if not self.editable: + self.install_site_py() + + with self._tmpdir() as tmpdir: + if not isinstance(spec, Requirement): + if URL_SCHEME(spec): + # It's a url, download it to tmpdir and process + self.not_editable(spec) + dl = self.package_index.download(spec, tmpdir) + return self.install_item(None, dl, tmpdir, deps, True) + + elif os.path.exists(spec): + # Existing file or directory, just process it directly + self.not_editable(spec) + return self.install_item(None, spec, tmpdir, deps, True) + else: + spec = parse_requirement_arg(spec) + + self.check_editable(spec) + dist = self.package_index.fetch_distribution( + spec, tmpdir, self.upgrade, self.editable, + not self.always_copy, self.local_index + ) + if dist is None: + msg = "Could not find suitable distribution for %r" % spec + if self.always_copy: + msg += " (--always-copy skips system and development eggs)" + raise DistutilsError(msg) + elif dist.precedence == DEVELOP_DIST: + # .egg-info dists don't need installing, just process deps + self.process_distribution(spec, dist, deps, "Using") + return dist + else: + return self.install_item(spec, dist.location, tmpdir, deps) + + def install_item(self, spec, download, tmpdir, deps, install_needed=False): + + # Installation is also needed if file in tmpdir or is not an egg + install_needed = install_needed or self.always_copy + install_needed = install_needed or os.path.dirname(download) == tmpdir + install_needed = install_needed or not download.endswith('.egg') + install_needed = install_needed or ( + self.always_copy_from is not None and + os.path.dirname(normalize_path(download)) == + normalize_path(self.always_copy_from) + ) + + if spec and not install_needed: + # at this point, we know it's a local .egg, we just don't know if + # it's already installed. + for dist in self.local_index[spec.project_name]: + if dist.location == download: + break + else: + install_needed = True # it's not in the local index + + log.info("Processing %s", os.path.basename(download)) + + if install_needed: + dists = self.install_eggs(spec, download, tmpdir) + for dist in dists: + self.process_distribution(spec, dist, deps) + else: + dists = [self.egg_distribution(download)] + self.process_distribution(spec, dists[0], deps, "Using") + + if spec is not None: + for dist in dists: + if dist in spec: + return dist + + def select_scheme(self, name): + """Sets the install directories by applying the install schemes.""" + # it's the caller's problem if they supply a bad name! + scheme = INSTALL_SCHEMES[name] + for key in SCHEME_KEYS: + attrname = 'install_' + key + if getattr(self, attrname) is None: + setattr(self, attrname, scheme[key]) + + def process_distribution(self, requirement, dist, deps=True, *info): + self.update_pth(dist) + self.package_index.add(dist) + if dist in self.local_index[dist.key]: + self.local_index.remove(dist) + self.local_index.add(dist) + self.install_egg_scripts(dist) + self.installed_projects[dist.key] = dist + log.info(self.installation_report(requirement, dist, *info)) + if (dist.has_metadata('dependency_links.txt') and + not self.no_find_links): + self.package_index.add_find_links( + dist.get_metadata_lines('dependency_links.txt') + ) + if not deps and not self.always_copy: + return + elif requirement is not None and dist.key != requirement.key: + log.warn("Skipping dependencies for %s", dist) + return # XXX this is not the distribution we were looking for + elif requirement is None or dist not in requirement: + # if we wound up with a different version, resolve what we've got + distreq = dist.as_requirement() + requirement = Requirement(str(distreq)) + log.info("Processing dependencies for %s", requirement) + try: + distros = WorkingSet([]).resolve( + [requirement], self.local_index, self.easy_install + ) + except DistributionNotFound as e: + raise DistutilsError(str(e)) + except VersionConflict as e: + raise DistutilsError(e.report()) + if self.always_copy or self.always_copy_from: + # Force all the relevant distros to be copied or activated + for dist in distros: + if dist.key not in self.installed_projects: + self.easy_install(dist.as_requirement()) + log.info("Finished processing dependencies for %s", requirement) + + def should_unzip(self, dist): + if self.zip_ok is not None: + return not self.zip_ok + if dist.has_metadata('not-zip-safe'): + return True + if not dist.has_metadata('zip-safe'): + return True + return False + + def maybe_move(self, spec, dist_filename, setup_base): + dst = os.path.join(self.build_directory, spec.key) + if os.path.exists(dst): + msg = ( + "%r already exists in %s; build directory %s will not be kept" + ) + log.warn(msg, spec.key, self.build_directory, setup_base) + return setup_base + if os.path.isdir(dist_filename): + setup_base = dist_filename + else: + if os.path.dirname(dist_filename) == setup_base: + os.unlink(dist_filename) # get it out of the tmp dir + contents = os.listdir(setup_base) + if len(contents) == 1: + dist_filename = os.path.join(setup_base, contents[0]) + if os.path.isdir(dist_filename): + # if the only thing there is a directory, move it instead + setup_base = dist_filename + ensure_directory(dst) + shutil.move(setup_base, dst) + return dst + + def install_wrapper_scripts(self, dist): + if self.exclude_scripts: + return + for args in ScriptWriter.best().get_args(dist): + self.write_script(*args) + + def install_script(self, dist, script_name, script_text, dev_path=None): + """Generate a legacy script wrapper and install it""" + spec = str(dist.as_requirement()) + is_script = is_python_script(script_text, script_name) + + if is_script: + body = self._load_template(dev_path) % locals() + script_text = ScriptWriter.get_header(script_text) + body + self.write_script(script_name, _to_bytes(script_text), 'b') + + @staticmethod + def _load_template(dev_path): + """ + There are a couple of template scripts in the package. This + function loads one of them and prepares it for use. + """ + # See https://github.com/pypa/setuptools/issues/134 for info + # on script file naming and downstream issues with SVR4 + name = 'script.tmpl' + if dev_path: + name = name.replace('.tmpl', ' (dev).tmpl') + + raw_bytes = resource_string('setuptools', name) + return raw_bytes.decode('utf-8') + + def write_script(self, script_name, contents, mode="t", blockers=()): + """Write an executable file to the scripts directory""" + self.delete_blockers( # clean up old .py/.pyw w/o a script + [os.path.join(self.script_dir, x) for x in blockers] + ) + log.info("Installing %s script to %s", script_name, self.script_dir) + target = os.path.join(self.script_dir, script_name) + self.add_output(target) + + if self.dry_run: + return + + mask = current_umask() + ensure_directory(target) + if os.path.exists(target): + os.unlink(target) + with open(target, "w" + mode) as f: + f.write(contents) + chmod(target, 0o777 - mask) + + def install_eggs(self, spec, dist_filename, tmpdir): + # .egg dirs or files are already built, so just return them + if dist_filename.lower().endswith('.egg'): + return [self.install_egg(dist_filename, tmpdir)] + elif dist_filename.lower().endswith('.exe'): + return [self.install_exe(dist_filename, tmpdir)] + elif dist_filename.lower().endswith('.whl'): + return [self.install_wheel(dist_filename, tmpdir)] + + # Anything else, try to extract and build + setup_base = tmpdir + if os.path.isfile(dist_filename) and not dist_filename.endswith('.py'): + unpack_archive(dist_filename, tmpdir, self.unpack_progress) + elif os.path.isdir(dist_filename): + setup_base = os.path.abspath(dist_filename) + + if (setup_base.startswith(tmpdir) # something we downloaded + and self.build_directory and spec is not None): + setup_base = self.maybe_move(spec, dist_filename, setup_base) + + # Find the setup.py file + setup_script = os.path.join(setup_base, 'setup.py') + + if not os.path.exists(setup_script): + setups = glob(os.path.join(setup_base, '*', 'setup.py')) + if not setups: + raise DistutilsError( + "Couldn't find a setup script in %s" % + os.path.abspath(dist_filename) + ) + if len(setups) > 1: + raise DistutilsError( + "Multiple setup scripts in %s" % + os.path.abspath(dist_filename) + ) + setup_script = setups[0] + + # Now run it, and return the result + if self.editable: + log.info(self.report_editable(spec, setup_script)) + return [] + else: + return self.build_and_install(setup_script, setup_base) + + def egg_distribution(self, egg_path): + if os.path.isdir(egg_path): + metadata = PathMetadata(egg_path, os.path.join(egg_path, + 'EGG-INFO')) + else: + metadata = EggMetadata(zipimport.zipimporter(egg_path)) + return Distribution.from_filename(egg_path, metadata=metadata) + + def install_egg(self, egg_path, tmpdir): + destination = os.path.join( + self.install_dir, + os.path.basename(egg_path), + ) + destination = os.path.abspath(destination) + if not self.dry_run: + ensure_directory(destination) + + dist = self.egg_distribution(egg_path) + if not samefile(egg_path, destination): + if os.path.isdir(destination) and not os.path.islink(destination): + dir_util.remove_tree(destination, dry_run=self.dry_run) + elif os.path.exists(destination): + self.execute( + os.unlink, + (destination,), + "Removing " + destination, + ) + try: + new_dist_is_zipped = False + if os.path.isdir(egg_path): + if egg_path.startswith(tmpdir): + f, m = shutil.move, "Moving" + else: + f, m = shutil.copytree, "Copying" + elif self.should_unzip(dist): + self.mkpath(destination) + f, m = self.unpack_and_compile, "Extracting" + else: + new_dist_is_zipped = True + if egg_path.startswith(tmpdir): + f, m = shutil.move, "Moving" + else: + f, m = shutil.copy2, "Copying" + self.execute( + f, + (egg_path, destination), + (m + " %s to %s") % ( + os.path.basename(egg_path), + os.path.dirname(destination) + ), + ) + update_dist_caches( + destination, + fix_zipimporter_caches=new_dist_is_zipped, + ) + except Exception: + update_dist_caches(destination, fix_zipimporter_caches=False) + raise + + self.add_output(destination) + return self.egg_distribution(destination) + + def install_exe(self, dist_filename, tmpdir): + # See if it's valid, get data + cfg = extract_wininst_cfg(dist_filename) + if cfg is None: + raise DistutilsError( + "%s is not a valid distutils Windows .exe" % dist_filename + ) + # Create a dummy distribution object until we build the real distro + dist = Distribution( + None, + project_name=cfg.get('metadata', 'name'), + version=cfg.get('metadata', 'version'), platform=get_platform(), + ) + + # Convert the .exe to an unpacked egg + egg_path = os.path.join(tmpdir, dist.egg_name() + '.egg') + dist.location = egg_path + egg_tmp = egg_path + '.tmp' + _egg_info = os.path.join(egg_tmp, 'EGG-INFO') + pkg_inf = os.path.join(_egg_info, 'PKG-INFO') + ensure_directory(pkg_inf) # make sure EGG-INFO dir exists + dist._provider = PathMetadata(egg_tmp, _egg_info) # XXX + self.exe_to_egg(dist_filename, egg_tmp) + + # Write EGG-INFO/PKG-INFO + if not os.path.exists(pkg_inf): + f = open(pkg_inf, 'w') + f.write('Metadata-Version: 1.0\n') + for k, v in cfg.items('metadata'): + if k != 'target_version': + f.write('%s: %s\n' % (k.replace('_', '-').title(), v)) + f.close() + script_dir = os.path.join(_egg_info, 'scripts') + # delete entry-point scripts to avoid duping + self.delete_blockers([ + os.path.join(script_dir, args[0]) + for args in ScriptWriter.get_args(dist) + ]) + # Build .egg file from tmpdir + bdist_egg.make_zipfile( + egg_path, egg_tmp, verbose=self.verbose, dry_run=self.dry_run, + ) + # install the .egg + return self.install_egg(egg_path, tmpdir) + + def exe_to_egg(self, dist_filename, egg_tmp): + """Extract a bdist_wininst to the directories an egg would use""" + # Check for .pth file and set up prefix translations + prefixes = get_exe_prefixes(dist_filename) + to_compile = [] + native_libs = [] + top_level = {} + + def process(src, dst): + s = src.lower() + for old, new in prefixes: + if s.startswith(old): + src = new + src[len(old):] + parts = src.split('/') + dst = os.path.join(egg_tmp, *parts) + dl = dst.lower() + if dl.endswith('.pyd') or dl.endswith('.dll'): + parts[-1] = bdist_egg.strip_module(parts[-1]) + top_level[os.path.splitext(parts[0])[0]] = 1 + native_libs.append(src) + elif dl.endswith('.py') and old != 'SCRIPTS/': + top_level[os.path.splitext(parts[0])[0]] = 1 + to_compile.append(dst) + return dst + if not src.endswith('.pth'): + log.warn("WARNING: can't process %s", src) + return None + + # extract, tracking .pyd/.dll->native_libs and .py -> to_compile + unpack_archive(dist_filename, egg_tmp, process) + stubs = [] + for res in native_libs: + if res.lower().endswith('.pyd'): # create stubs for .pyd's + parts = res.split('/') + resource = parts[-1] + parts[-1] = bdist_egg.strip_module(parts[-1]) + '.py' + pyfile = os.path.join(egg_tmp, *parts) + to_compile.append(pyfile) + stubs.append(pyfile) + bdist_egg.write_stub(resource, pyfile) + self.byte_compile(to_compile) # compile .py's + bdist_egg.write_safety_flag( + os.path.join(egg_tmp, 'EGG-INFO'), + bdist_egg.analyze_egg(egg_tmp, stubs)) # write zip-safety flag + + for name in 'top_level', 'native_libs': + if locals()[name]: + txt = os.path.join(egg_tmp, 'EGG-INFO', name + '.txt') + if not os.path.exists(txt): + f = open(txt, 'w') + f.write('\n'.join(locals()[name]) + '\n') + f.close() + + def install_wheel(self, wheel_path, tmpdir): + wheel = Wheel(wheel_path) + assert wheel.is_compatible() + destination = os.path.join(self.install_dir, wheel.egg_name()) + destination = os.path.abspath(destination) + if not self.dry_run: + ensure_directory(destination) + if os.path.isdir(destination) and not os.path.islink(destination): + dir_util.remove_tree(destination, dry_run=self.dry_run) + elif os.path.exists(destination): + self.execute( + os.unlink, + (destination,), + "Removing " + destination, + ) + try: + self.execute( + wheel.install_as_egg, + (destination,), + ("Installing %s to %s") % ( + os.path.basename(wheel_path), + os.path.dirname(destination) + ), + ) + finally: + update_dist_caches(destination, fix_zipimporter_caches=False) + self.add_output(destination) + return self.egg_distribution(destination) + + __mv_warning = textwrap.dedent(""" + Because this distribution was installed --multi-version, before you can + import modules from this package in an application, you will need to + 'import pkg_resources' and then use a 'require()' call similar to one of + these examples, in order to select the desired version: + + pkg_resources.require("%(name)s") # latest installed version + pkg_resources.require("%(name)s==%(version)s") # this exact version + pkg_resources.require("%(name)s>=%(version)s") # this version or higher + """).lstrip() + + __id_warning = textwrap.dedent(""" + Note also that the installation directory must be on sys.path at runtime for + this to work. (e.g. by being the application's script directory, by being on + PYTHONPATH, or by being added to sys.path by your code.) + """) + + def installation_report(self, req, dist, what="Installed"): + """Helpful installation message for display to package users""" + msg = "\n%(what)s %(eggloc)s%(extras)s" + if self.multi_version and not self.no_report: + msg += '\n' + self.__mv_warning + if self.install_dir not in map(normalize_path, sys.path): + msg += '\n' + self.__id_warning + + eggloc = dist.location + name = dist.project_name + version = dist.version + extras = '' # TODO: self.report_extras(req, dist) + return msg % locals() + + __editable_msg = textwrap.dedent(""" + Extracted editable version of %(spec)s to %(dirname)s + + If it uses setuptools in its setup script, you can activate it in + "development" mode by going to that directory and running:: + + %(python)s setup.py develop + + See the setuptools documentation for the "develop" command for more info. + """).lstrip() + + def report_editable(self, spec, setup_script): + dirname = os.path.dirname(setup_script) + python = sys.executable + return '\n' + self.__editable_msg % locals() + + def run_setup(self, setup_script, setup_base, args): + sys.modules.setdefault('distutils.command.bdist_egg', bdist_egg) + sys.modules.setdefault('distutils.command.egg_info', egg_info) + + args = list(args) + if self.verbose > 2: + v = 'v' * (self.verbose - 1) + args.insert(0, '-' + v) + elif self.verbose < 2: + args.insert(0, '-q') + if self.dry_run: + args.insert(0, '-n') + log.info( + "Running %s %s", setup_script[len(setup_base) + 1:], ' '.join(args) + ) + try: + run_setup(setup_script, args) + except SystemExit as v: + raise DistutilsError("Setup script exited with %s" % (v.args[0],)) + + def build_and_install(self, setup_script, setup_base): + args = ['bdist_egg', '--dist-dir'] + + dist_dir = tempfile.mkdtemp( + prefix='egg-dist-tmp-', dir=os.path.dirname(setup_script) + ) + try: + self._set_fetcher_options(os.path.dirname(setup_script)) + args.append(dist_dir) + + self.run_setup(setup_script, setup_base, args) + all_eggs = Environment([dist_dir]) + eggs = [] + for key in all_eggs: + for dist in all_eggs[key]: + eggs.append(self.install_egg(dist.location, setup_base)) + if not eggs and not self.dry_run: + log.warn("No eggs found in %s (setup script problem?)", + dist_dir) + return eggs + finally: + rmtree(dist_dir) + log.set_verbosity(self.verbose) # restore our log verbosity + + def _set_fetcher_options(self, base): + """ + When easy_install is about to run bdist_egg on a source dist, that + source dist might have 'setup_requires' directives, requiring + additional fetching. Ensure the fetcher options given to easy_install + are available to that command as well. + """ + # find the fetch options from easy_install and write them out + # to the setup.cfg file. + ei_opts = self.distribution.get_option_dict('easy_install').copy() + fetch_directives = ( + 'find_links', 'site_dirs', 'index_url', 'optimize', + 'site_dirs', 'allow_hosts', + ) + fetch_options = {} + for key, val in ei_opts.items(): + if key not in fetch_directives: + continue + fetch_options[key.replace('_', '-')] = val[1] + # create a settings dictionary suitable for `edit_config` + settings = dict(easy_install=fetch_options) + cfg_filename = os.path.join(base, 'setup.cfg') + setopt.edit_config(cfg_filename, settings) + + def update_pth(self, dist): + if self.pth_file is None: + return + + for d in self.pth_file[dist.key]: # drop old entries + if self.multi_version or d.location != dist.location: + log.info("Removing %s from easy-install.pth file", d) + self.pth_file.remove(d) + if d.location in self.shadow_path: + self.shadow_path.remove(d.location) + + if not self.multi_version: + if dist.location in self.pth_file.paths: + log.info( + "%s is already the active version in easy-install.pth", + dist, + ) + else: + log.info("Adding %s to easy-install.pth file", dist) + self.pth_file.add(dist) # add new entry + if dist.location not in self.shadow_path: + self.shadow_path.append(dist.location) + + if not self.dry_run: + + self.pth_file.save() + + if dist.key == 'setuptools': + # Ensure that setuptools itself never becomes unavailable! + # XXX should this check for latest version? + filename = os.path.join(self.install_dir, 'setuptools.pth') + if os.path.islink(filename): + os.unlink(filename) + f = open(filename, 'wt') + f.write(self.pth_file.make_relative(dist.location) + '\n') + f.close() + + def unpack_progress(self, src, dst): + # Progress filter for unpacking + log.debug("Unpacking %s to %s", src, dst) + return dst # only unpack-and-compile skips files for dry run + + def unpack_and_compile(self, egg_path, destination): + to_compile = [] + to_chmod = [] + + def pf(src, dst): + if dst.endswith('.py') and not src.startswith('EGG-INFO/'): + to_compile.append(dst) + elif dst.endswith('.dll') or dst.endswith('.so'): + to_chmod.append(dst) + self.unpack_progress(src, dst) + return not self.dry_run and dst or None + + unpack_archive(egg_path, destination, pf) + self.byte_compile(to_compile) + if not self.dry_run: + for f in to_chmod: + mode = ((os.stat(f)[stat.ST_MODE]) | 0o555) & 0o7755 + chmod(f, mode) + + def byte_compile(self, to_compile): + if sys.dont_write_bytecode: + return + + from distutils.util import byte_compile + + try: + # try to make the byte compile messages quieter + log.set_verbosity(self.verbose - 1) + + byte_compile(to_compile, optimize=0, force=1, dry_run=self.dry_run) + if self.optimize: + byte_compile( + to_compile, optimize=self.optimize, force=1, + dry_run=self.dry_run, + ) + finally: + log.set_verbosity(self.verbose) # restore original verbosity + + __no_default_msg = textwrap.dedent(""" + bad install directory or PYTHONPATH + + You are attempting to install a package to a directory that is not + on PYTHONPATH and which Python does not read ".pth" files from. The + installation directory you specified (via --install-dir, --prefix, or + the distutils default setting) was: + + %s + + and your PYTHONPATH environment variable currently contains: + + %r + + Here are some of your options for correcting the problem: + + * You can choose a different installation directory, i.e., one that is + on PYTHONPATH or supports .pth files + + * You can add the installation directory to the PYTHONPATH environment + variable. (It must then also be on PYTHONPATH whenever you run + Python and want to use the package(s) you are installing.) + + * You can set up the installation directory to support ".pth" files by + using one of the approaches described here: + + https://setuptools.readthedocs.io/en/latest/easy_install.html#custom-installation-locations + + + Please make the appropriate changes for your system and try again.""").lstrip() + + def no_default_version_msg(self): + template = self.__no_default_msg + return template % (self.install_dir, os.environ.get('PYTHONPATH', '')) + + def install_site_py(self): + """Make sure there's a site.py in the target dir, if needed""" + + if self.sitepy_installed: + return # already did it, or don't need to + + sitepy = os.path.join(self.install_dir, "site.py") + source = resource_string("setuptools", "site-patch.py") + source = source.decode('utf-8') + current = "" + + if os.path.exists(sitepy): + log.debug("Checking existing site.py in %s", self.install_dir) + with io.open(sitepy) as strm: + current = strm.read() + + if not current.startswith('def __boot():'): + raise DistutilsError( + "%s is not a setuptools-generated site.py; please" + " remove it." % sitepy + ) + + if current != source: + log.info("Creating %s", sitepy) + if not self.dry_run: + ensure_directory(sitepy) + with io.open(sitepy, 'w', encoding='utf-8') as strm: + strm.write(source) + self.byte_compile([sitepy]) + + self.sitepy_installed = True + + def create_home_path(self): + """Create directories under ~.""" + if not self.user: + return + home = convert_path(os.path.expanduser("~")) + for name, path in six.iteritems(self.config_vars): + if path.startswith(home) and not os.path.isdir(path): + self.debug_print("os.makedirs('%s', 0o700)" % path) + os.makedirs(path, 0o700) + + INSTALL_SCHEMES = dict( + posix=dict( + install_dir='$base/lib/python$py_version_short/site-packages', + script_dir='$base/bin', + ), + ) + + DEFAULT_SCHEME = dict( + install_dir='$base/Lib/site-packages', + script_dir='$base/Scripts', + ) + + def _expand(self, *attrs): + config_vars = self.get_finalized_command('install').config_vars + + if self.prefix: + # Set default install_dir/scripts from --prefix + config_vars = config_vars.copy() + config_vars['base'] = self.prefix + scheme = self.INSTALL_SCHEMES.get(os.name, self.DEFAULT_SCHEME) + for attr, val in scheme.items(): + if getattr(self, attr, None) is None: + setattr(self, attr, val) + + from distutils.util import subst_vars + + for attr in attrs: + val = getattr(self, attr) + if val is not None: + val = subst_vars(val, config_vars) + if os.name == 'posix': + val = os.path.expanduser(val) + setattr(self, attr, val) + + +def _pythonpath(): + items = os.environ.get('PYTHONPATH', '').split(os.pathsep) + return filter(None, items) + + +def get_site_dirs(): + """ + Return a list of 'site' dirs + """ + + sitedirs = [] + + # start with PYTHONPATH + sitedirs.extend(_pythonpath()) + + prefixes = [sys.prefix] + if sys.exec_prefix != sys.prefix: + prefixes.append(sys.exec_prefix) + for prefix in prefixes: + if prefix: + if sys.platform in ('os2emx', 'riscos'): + sitedirs.append(os.path.join(prefix, "Lib", "site-packages")) + elif os.sep == '/': + sitedirs.extend([ + os.path.join( + prefix, + "lib", + "python" + sys.version[:3], + "site-packages", + ), + os.path.join(prefix, "lib", "site-python"), + ]) + else: + sitedirs.extend([ + prefix, + os.path.join(prefix, "lib", "site-packages"), + ]) + if sys.platform == 'darwin': + # for framework builds *only* we add the standard Apple + # locations. Currently only per-user, but /Library and + # /Network/Library could be added too + if 'Python.framework' in prefix: + home = os.environ.get('HOME') + if home: + home_sp = os.path.join( + home, + 'Library', + 'Python', + sys.version[:3], + 'site-packages', + ) + sitedirs.append(home_sp) + lib_paths = get_path('purelib'), get_path('platlib') + for site_lib in lib_paths: + if site_lib not in sitedirs: + sitedirs.append(site_lib) + + if site.ENABLE_USER_SITE: + sitedirs.append(site.USER_SITE) + + try: + sitedirs.extend(site.getsitepackages()) + except AttributeError: + pass + + sitedirs = list(map(normalize_path, sitedirs)) + + return sitedirs + + +def expand_paths(inputs): + """Yield sys.path directories that might contain "old-style" packages""" + + seen = {} + + for dirname in inputs: + dirname = normalize_path(dirname) + if dirname in seen: + continue + + seen[dirname] = 1 + if not os.path.isdir(dirname): + continue + + files = os.listdir(dirname) + yield dirname, files + + for name in files: + if not name.endswith('.pth'): + # We only care about the .pth files + continue + if name in ('easy-install.pth', 'setuptools.pth'): + # Ignore .pth files that we control + continue + + # Read the .pth file + f = open(os.path.join(dirname, name)) + lines = list(yield_lines(f)) + f.close() + + # Yield existing non-dupe, non-import directory lines from it + for line in lines: + if not line.startswith("import"): + line = normalize_path(line.rstrip()) + if line not in seen: + seen[line] = 1 + if not os.path.isdir(line): + continue + yield line, os.listdir(line) + + +def extract_wininst_cfg(dist_filename): + """Extract configuration data from a bdist_wininst .exe + + Returns a configparser.RawConfigParser, or None + """ + f = open(dist_filename, 'rb') + try: + endrec = zipfile._EndRecData(f) + if endrec is None: + return None + + prepended = (endrec[9] - endrec[5]) - endrec[6] + if prepended < 12: # no wininst data here + return None + f.seek(prepended - 12) + + tag, cfglen, bmlen = struct.unpack("<iii", f.read(12)) + if tag not in (0x1234567A, 0x1234567B): + return None # not a valid tag + + f.seek(prepended - (12 + cfglen)) + init = {'version': '', 'target_version': ''} + cfg = configparser.RawConfigParser(init) + try: + part = f.read(cfglen) + # Read up to the first null byte. + config = part.split(b'\0', 1)[0] + # Now the config is in bytes, but for RawConfigParser, it should + # be text, so decode it. + config = config.decode(sys.getfilesystemencoding()) + cfg.readfp(six.StringIO(config)) + except configparser.Error: + return None + if not cfg.has_section('metadata') or not cfg.has_section('Setup'): + return None + return cfg + + finally: + f.close() + + +def get_exe_prefixes(exe_filename): + """Get exe->egg path translations for a given .exe file""" + + prefixes = [ + ('PURELIB/', ''), + ('PLATLIB/pywin32_system32', ''), + ('PLATLIB/', ''), + ('SCRIPTS/', 'EGG-INFO/scripts/'), + ('DATA/lib/site-packages', ''), + ] + z = zipfile.ZipFile(exe_filename) + try: + for info in z.infolist(): + name = info.filename + parts = name.split('/') + if len(parts) == 3 and parts[2] == 'PKG-INFO': + if parts[1].endswith('.egg-info'): + prefixes.insert(0, ('/'.join(parts[:2]), 'EGG-INFO/')) + break + if len(parts) != 2 or not name.endswith('.pth'): + continue + if name.endswith('-nspkg.pth'): + continue + if parts[0].upper() in ('PURELIB', 'PLATLIB'): + contents = z.read(name) + if six.PY3: + contents = contents.decode() + for pth in yield_lines(contents): + pth = pth.strip().replace('\\', '/') + if not pth.startswith('import'): + prefixes.append((('%s/%s/' % (parts[0], pth)), '')) + finally: + z.close() + prefixes = [(x.lower(), y) for x, y in prefixes] + prefixes.sort() + prefixes.reverse() + return prefixes + + +class PthDistributions(Environment): + """A .pth file with Distribution paths in it""" + + dirty = False + + def __init__(self, filename, sitedirs=()): + self.filename = filename + self.sitedirs = list(map(normalize_path, sitedirs)) + self.basedir = normalize_path(os.path.dirname(self.filename)) + self._load() + Environment.__init__(self, [], None, None) + for path in yield_lines(self.paths): + list(map(self.add, find_distributions(path, True))) + + def _load(self): + self.paths = [] + saw_import = False + seen = dict.fromkeys(self.sitedirs) + if os.path.isfile(self.filename): + f = open(self.filename, 'rt') + for line in f: + if line.startswith('import'): + saw_import = True + continue + path = line.rstrip() + self.paths.append(path) + if not path.strip() or path.strip().startswith('#'): + continue + # skip non-existent paths, in case somebody deleted a package + # manually, and duplicate paths as well + path = self.paths[-1] = normalize_path( + os.path.join(self.basedir, path) + ) + if not os.path.exists(path) or path in seen: + self.paths.pop() # skip it + self.dirty = True # we cleaned up, so we're dirty now :) + continue + seen[path] = 1 + f.close() + + if self.paths and not saw_import: + self.dirty = True # ensure anything we touch has import wrappers + while self.paths and not self.paths[-1].strip(): + self.paths.pop() + + def save(self): + """Write changed .pth file back to disk""" + if not self.dirty: + return + + rel_paths = list(map(self.make_relative, self.paths)) + if rel_paths: + log.debug("Saving %s", self.filename) + lines = self._wrap_lines(rel_paths) + data = '\n'.join(lines) + '\n' + + if os.path.islink(self.filename): + os.unlink(self.filename) + with open(self.filename, 'wt') as f: + f.write(data) + + elif os.path.exists(self.filename): + log.debug("Deleting empty %s", self.filename) + os.unlink(self.filename) + + self.dirty = False + + @staticmethod + def _wrap_lines(lines): + return lines + + def add(self, dist): + """Add `dist` to the distribution map""" + new_path = ( + dist.location not in self.paths and ( + dist.location not in self.sitedirs or + # account for '.' being in PYTHONPATH + dist.location == os.getcwd() + ) + ) + if new_path: + self.paths.append(dist.location) + self.dirty = True + Environment.add(self, dist) + + def remove(self, dist): + """Remove `dist` from the distribution map""" + while dist.location in self.paths: + self.paths.remove(dist.location) + self.dirty = True + Environment.remove(self, dist) + + def make_relative(self, path): + npath, last = os.path.split(normalize_path(path)) + baselen = len(self.basedir) + parts = [last] + sep = os.altsep == '/' and '/' or os.sep + while len(npath) >= baselen: + if npath == self.basedir: + parts.append(os.curdir) + parts.reverse() + return sep.join(parts) + npath, last = os.path.split(npath) + parts.append(last) + else: + return path + + +class RewritePthDistributions(PthDistributions): + @classmethod + def _wrap_lines(cls, lines): + yield cls.prelude + for line in lines: + yield line + yield cls.postlude + + prelude = _one_liner(""" + import sys + sys.__plen = len(sys.path) + """) + postlude = _one_liner(""" + import sys + new = sys.path[sys.__plen:] + del sys.path[sys.__plen:] + p = getattr(sys, '__egginsert', 0) + sys.path[p:p] = new + sys.__egginsert = p + len(new) + """) + + +if os.environ.get('SETUPTOOLS_SYS_PATH_TECHNIQUE', 'raw') == 'rewrite': + PthDistributions = RewritePthDistributions + + +def _first_line_re(): + """ + Return a regular expression based on first_line_re suitable for matching + strings. + """ + if isinstance(first_line_re.pattern, str): + return first_line_re + + # first_line_re in Python >=3.1.4 and >=3.2.1 is a bytes pattern. + return re.compile(first_line_re.pattern.decode()) + + +def auto_chmod(func, arg, exc): + if func in [os.unlink, os.remove] and os.name == 'nt': + chmod(arg, stat.S_IWRITE) + return func(arg) + et, ev, _ = sys.exc_info() + six.reraise(et, (ev[0], ev[1] + (" %s %s" % (func, arg)))) + + +def update_dist_caches(dist_path, fix_zipimporter_caches): + """ + Fix any globally cached `dist_path` related data + + `dist_path` should be a path of a newly installed egg distribution (zipped + or unzipped). + + sys.path_importer_cache contains finder objects that have been cached when + importing data from the original distribution. Any such finders need to be + cleared since the replacement distribution might be packaged differently, + e.g. a zipped egg distribution might get replaced with an unzipped egg + folder or vice versa. Having the old finders cached may then cause Python + to attempt loading modules from the replacement distribution using an + incorrect loader. + + zipimport.zipimporter objects are Python loaders charged with importing + data packaged inside zip archives. If stale loaders referencing the + original distribution, are left behind, they can fail to load modules from + the replacement distribution. E.g. if an old zipimport.zipimporter instance + is used to load data from a new zipped egg archive, it may cause the + operation to attempt to locate the requested data in the wrong location - + one indicated by the original distribution's zip archive directory + information. Such an operation may then fail outright, e.g. report having + read a 'bad local file header', or even worse, it may fail silently & + return invalid data. + + zipimport._zip_directory_cache contains cached zip archive directory + information for all existing zipimport.zipimporter instances and all such + instances connected to the same archive share the same cached directory + information. + + If asked, and the underlying Python implementation allows it, we can fix + all existing zipimport.zipimporter instances instead of having to track + them down and remove them one by one, by updating their shared cached zip + archive directory information. This, of course, assumes that the + replacement distribution is packaged as a zipped egg. + + If not asked to fix existing zipimport.zipimporter instances, we still do + our best to clear any remaining zipimport.zipimporter related cached data + that might somehow later get used when attempting to load data from the new + distribution and thus cause such load operations to fail. Note that when + tracking down such remaining stale data, we can not catch every conceivable + usage from here, and we clear only those that we know of and have found to + cause problems if left alive. Any remaining caches should be updated by + whomever is in charge of maintaining them, i.e. they should be ready to + handle us replacing their zip archives with new distributions at runtime. + + """ + # There are several other known sources of stale zipimport.zipimporter + # instances that we do not clear here, but might if ever given a reason to + # do so: + # * Global setuptools pkg_resources.working_set (a.k.a. 'master working + # set') may contain distributions which may in turn contain their + # zipimport.zipimporter loaders. + # * Several zipimport.zipimporter loaders held by local variables further + # up the function call stack when running the setuptools installation. + # * Already loaded modules may have their __loader__ attribute set to the + # exact loader instance used when importing them. Python 3.4 docs state + # that this information is intended mostly for introspection and so is + # not expected to cause us problems. + normalized_path = normalize_path(dist_path) + _uncache(normalized_path, sys.path_importer_cache) + if fix_zipimporter_caches: + _replace_zip_directory_cache_data(normalized_path) + else: + # Here, even though we do not want to fix existing and now stale + # zipimporter cache information, we still want to remove it. Related to + # Python's zip archive directory information cache, we clear each of + # its stale entries in two phases: + # 1. Clear the entry so attempting to access zip archive information + # via any existing stale zipimport.zipimporter instances fails. + # 2. Remove the entry from the cache so any newly constructed + # zipimport.zipimporter instances do not end up using old stale + # zip archive directory information. + # This whole stale data removal step does not seem strictly necessary, + # but has been left in because it was done before we started replacing + # the zip archive directory information cache content if possible, and + # there are no relevant unit tests that we can depend on to tell us if + # this is really needed. + _remove_and_clear_zip_directory_cache_data(normalized_path) + + +def _collect_zipimporter_cache_entries(normalized_path, cache): + """ + Return zipimporter cache entry keys related to a given normalized path. + + Alternative path spellings (e.g. those using different character case or + those using alternative path separators) related to the same path are + included. Any sub-path entries are included as well, i.e. those + corresponding to zip archives embedded in other zip archives. + + """ + result = [] + prefix_len = len(normalized_path) + for p in cache: + np = normalize_path(p) + if (np.startswith(normalized_path) and + np[prefix_len:prefix_len + 1] in (os.sep, '')): + result.append(p) + return result + + +def _update_zipimporter_cache(normalized_path, cache, updater=None): + """ + Update zipimporter cache data for a given normalized path. + + Any sub-path entries are processed as well, i.e. those corresponding to zip + archives embedded in other zip archives. + + Given updater is a callable taking a cache entry key and the original entry + (after already removing the entry from the cache), and expected to update + the entry and possibly return a new one to be inserted in its place. + Returning None indicates that the entry should not be replaced with a new + one. If no updater is given, the cache entries are simply removed without + any additional processing, the same as if the updater simply returned None. + + """ + for p in _collect_zipimporter_cache_entries(normalized_path, cache): + # N.B. pypy's custom zipimport._zip_directory_cache implementation does + # not support the complete dict interface: + # * Does not support item assignment, thus not allowing this function + # to be used only for removing existing cache entries. + # * Does not support the dict.pop() method, forcing us to use the + # get/del patterns instead. For more detailed information see the + # following links: + # https://github.com/pypa/setuptools/issues/202#issuecomment-202913420 + # http://bit.ly/2h9itJX + old_entry = cache[p] + del cache[p] + new_entry = updater and updater(p, old_entry) + if new_entry is not None: + cache[p] = new_entry + + +def _uncache(normalized_path, cache): + _update_zipimporter_cache(normalized_path, cache) + + +def _remove_and_clear_zip_directory_cache_data(normalized_path): + def clear_and_remove_cached_zip_archive_directory_data(path, old_entry): + old_entry.clear() + + _update_zipimporter_cache( + normalized_path, zipimport._zip_directory_cache, + updater=clear_and_remove_cached_zip_archive_directory_data) + + +# PyPy Python implementation does not allow directly writing to the +# zipimport._zip_directory_cache and so prevents us from attempting to correct +# its content. The best we can do there is clear the problematic cache content +# and have PyPy repopulate it as needed. The downside is that if there are any +# stale zipimport.zipimporter instances laying around, attempting to use them +# will fail due to not having its zip archive directory information available +# instead of being automatically corrected to use the new correct zip archive +# directory information. +if '__pypy__' in sys.builtin_module_names: + _replace_zip_directory_cache_data = \ + _remove_and_clear_zip_directory_cache_data +else: + + def _replace_zip_directory_cache_data(normalized_path): + def replace_cached_zip_archive_directory_data(path, old_entry): + # N.B. In theory, we could load the zip directory information just + # once for all updated path spellings, and then copy it locally and + # update its contained path strings to contain the correct + # spelling, but that seems like a way too invasive move (this cache + # structure is not officially documented anywhere and could in + # theory change with new Python releases) for no significant + # benefit. + old_entry.clear() + zipimport.zipimporter(path) + old_entry.update(zipimport._zip_directory_cache[path]) + return old_entry + + _update_zipimporter_cache( + normalized_path, zipimport._zip_directory_cache, + updater=replace_cached_zip_archive_directory_data) + + +def is_python(text, filename='<string>'): + "Is this string a valid Python script?" + try: + compile(text, filename, 'exec') + except (SyntaxError, TypeError): + return False + else: + return True + + +def is_sh(executable): + """Determine if the specified executable is a .sh (contains a #! line)""" + try: + with io.open(executable, encoding='latin-1') as fp: + magic = fp.read(2) + except (OSError, IOError): + return executable + return magic == '#!' + + +def nt_quote_arg(arg): + """Quote a command line argument according to Windows parsing rules""" + return subprocess.list2cmdline([arg]) + + +def is_python_script(script_text, filename): + """Is this text, as a whole, a Python script? (as opposed to shell/bat/etc. + """ + if filename.endswith('.py') or filename.endswith('.pyw'): + return True # extension says it's Python + if is_python(script_text, filename): + return True # it's syntactically valid Python + if script_text.startswith('#!'): + # It begins with a '#!' line, so check if 'python' is in it somewhere + return 'python' in script_text.splitlines()[0].lower() + + return False # Not any Python I can recognize + + +try: + from os import chmod as _chmod +except ImportError: + # Jython compatibility + def _chmod(*args): + pass + + +def chmod(path, mode): + log.debug("changing mode of %s to %o", path, mode) + try: + _chmod(path, mode) + except os.error as e: + log.debug("chmod failed: %s", e) + + +class CommandSpec(list): + """ + A command spec for a #! header, specified as a list of arguments akin to + those passed to Popen. + """ + + options = [] + split_args = dict() + + @classmethod + def best(cls): + """ + Choose the best CommandSpec class based on environmental conditions. + """ + return cls + + @classmethod + def _sys_executable(cls): + _default = os.path.normpath(sys.executable) + return os.environ.get('__PYVENV_LAUNCHER__', _default) + + @classmethod + def from_param(cls, param): + """ + Construct a CommandSpec from a parameter to build_scripts, which may + be None. + """ + if isinstance(param, cls): + return param + if isinstance(param, list): + return cls(param) + if param is None: + return cls.from_environment() + # otherwise, assume it's a string. + return cls.from_string(param) + + @classmethod + def from_environment(cls): + return cls([cls._sys_executable()]) + + @classmethod + def from_string(cls, string): + """ + Construct a command spec from a simple string representing a command + line parseable by shlex.split. + """ + items = shlex.split(string, **cls.split_args) + return cls(items) + + def install_options(self, script_text): + self.options = shlex.split(self._extract_options(script_text)) + cmdline = subprocess.list2cmdline(self) + if not isascii(cmdline): + self.options[:0] = ['-x'] + + @staticmethod + def _extract_options(orig_script): + """ + Extract any options from the first line of the script. + """ + first = (orig_script + '\n').splitlines()[0] + match = _first_line_re().match(first) + options = match.group(1) or '' if match else '' + return options.strip() + + def as_header(self): + return self._render(self + list(self.options)) + + @staticmethod + def _strip_quotes(item): + _QUOTES = '"\'' + for q in _QUOTES: + if item.startswith(q) and item.endswith(q): + return item[1:-1] + return item + + @staticmethod + def _render(items): + cmdline = subprocess.list2cmdline( + CommandSpec._strip_quotes(item.strip()) for item in items) + return '#!' + cmdline + '\n' + + +# For pbr compat; will be removed in a future version. +sys_executable = CommandSpec._sys_executable() + + +class WindowsCommandSpec(CommandSpec): + split_args = dict(posix=False) + + +class ScriptWriter: + """ + Encapsulates behavior around writing entry point scripts for console and + gui apps. + """ + + template = textwrap.dedent(r""" + # EASY-INSTALL-ENTRY-SCRIPT: %(spec)r,%(group)r,%(name)r + __requires__ = %(spec)r + import re + import sys + from pkg_resources import load_entry_point + + if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit( + load_entry_point(%(spec)r, %(group)r, %(name)r)() + ) + """).lstrip() + + command_spec_class = CommandSpec + + @classmethod + def get_script_args(cls, dist, executable=None, wininst=False): + # for backward compatibility + warnings.warn("Use get_args", EasyInstallDeprecationWarning) + writer = (WindowsScriptWriter if wininst else ScriptWriter).best() + header = cls.get_script_header("", executable, wininst) + return writer.get_args(dist, header) + + @classmethod + def get_script_header(cls, script_text, executable=None, wininst=False): + # for backward compatibility + warnings.warn("Use get_header", EasyInstallDeprecationWarning, stacklevel=2) + if wininst: + executable = "python.exe" + return cls.get_header(script_text, executable) + + @classmethod + def get_args(cls, dist, header=None): + """ + Yield write_script() argument tuples for a distribution's + console_scripts and gui_scripts entry points. + """ + if header is None: + header = cls.get_header() + spec = str(dist.as_requirement()) + for type_ in 'console', 'gui': + group = type_ + '_scripts' + for name, ep in dist.get_entry_map(group).items(): + cls._ensure_safe_name(name) + script_text = cls.template % locals() + args = cls._get_script_args(type_, name, header, script_text) + for res in args: + yield res + + @staticmethod + def _ensure_safe_name(name): + """ + Prevent paths in *_scripts entry point names. + """ + has_path_sep = re.search(r'[\\/]', name) + if has_path_sep: + raise ValueError("Path separators not allowed in script names") + + @classmethod + def get_writer(cls, force_windows): + # for backward compatibility + warnings.warn("Use best", EasyInstallDeprecationWarning) + return WindowsScriptWriter.best() if force_windows else cls.best() + + @classmethod + def best(cls): + """ + Select the best ScriptWriter for this environment. + """ + if sys.platform == 'win32' or (os.name == 'java' and os._name == 'nt'): + return WindowsScriptWriter.best() + else: + return cls + + @classmethod + def _get_script_args(cls, type_, name, header, script_text): + # Simply write the stub with no extension. + yield (name, header + script_text) + + @classmethod + def get_header(cls, script_text="", executable=None): + """Create a #! line, getting options (if any) from script_text""" + cmd = cls.command_spec_class.best().from_param(executable) + cmd.install_options(script_text) + return cmd.as_header() + + +class WindowsScriptWriter(ScriptWriter): + command_spec_class = WindowsCommandSpec + + @classmethod + def get_writer(cls): + # for backward compatibility + warnings.warn("Use best", EasyInstallDeprecationWarning) + return cls.best() + + @classmethod + def best(cls): + """ + Select the best ScriptWriter suitable for Windows + """ + writer_lookup = dict( + executable=WindowsExecutableLauncherWriter, + natural=cls, + ) + # for compatibility, use the executable launcher by default + launcher = os.environ.get('SETUPTOOLS_LAUNCHER', 'executable') + return writer_lookup[launcher] + + @classmethod + def _get_script_args(cls, type_, name, header, script_text): + "For Windows, add a .py extension" + ext = dict(console='.pya', gui='.pyw')[type_] + if ext not in os.environ['PATHEXT'].lower().split(';'): + msg = ( + "{ext} not listed in PATHEXT; scripts will not be " + "recognized as executables." + ).format(**locals()) + warnings.warn(msg, UserWarning) + old = ['.pya', '.py', '-script.py', '.pyc', '.pyo', '.pyw', '.exe'] + old.remove(ext) + header = cls._adjust_header(type_, header) + blockers = [name + x for x in old] + yield name + ext, header + script_text, 't', blockers + + @classmethod + def _adjust_header(cls, type_, orig_header): + """ + Make sure 'pythonw' is used for gui and and 'python' is used for + console (regardless of what sys.executable is). + """ + pattern = 'pythonw.exe' + repl = 'python.exe' + if type_ == 'gui': + pattern, repl = repl, pattern + pattern_ob = re.compile(re.escape(pattern), re.IGNORECASE) + new_header = pattern_ob.sub(string=orig_header, repl=repl) + return new_header if cls._use_header(new_header) else orig_header + + @staticmethod + def _use_header(new_header): + """ + Should _adjust_header use the replaced header? + + On non-windows systems, always use. On + Windows systems, only use the replaced header if it resolves + to an executable on the system. + """ + clean_header = new_header[2:-1].strip('"') + return sys.platform != 'win32' or find_executable(clean_header) + + +class WindowsExecutableLauncherWriter(WindowsScriptWriter): + @classmethod + def _get_script_args(cls, type_, name, header, script_text): + """ + For Windows, add a .py extension and an .exe launcher + """ + if type_ == 'gui': + launcher_type = 'gui' + ext = '-script.pyw' + old = ['.pyw'] + else: + launcher_type = 'cli' + ext = '-script.py' + old = ['.py', '.pyc', '.pyo'] + hdr = cls._adjust_header(type_, header) + blockers = [name + x for x in old] + yield (name + ext, hdr + script_text, 't', blockers) + yield ( + name + '.exe', get_win_launcher(launcher_type), + 'b' # write in binary mode + ) + if not is_64bit(): + # install a manifest for the launcher to prevent Windows + # from detecting it as an installer (which it will for + # launchers like easy_install.exe). Consider only + # adding a manifest for launchers detected as installers. + # See Distribute #143 for details. + m_name = name + '.exe.manifest' + yield (m_name, load_launcher_manifest(name), 't') + + +# for backward-compatibility +get_script_args = ScriptWriter.get_script_args +get_script_header = ScriptWriter.get_script_header + + +def get_win_launcher(type): + """ + Load the Windows launcher (executable) suitable for launching a script. + + `type` should be either 'cli' or 'gui' + + Returns the executable as a byte string. + """ + launcher_fn = '%s.exe' % type + if is_64bit(): + launcher_fn = launcher_fn.replace(".", "-64.") + else: + launcher_fn = launcher_fn.replace(".", "-32.") + return resource_string('setuptools', launcher_fn) + + +def load_launcher_manifest(name): + manifest = pkg_resources.resource_string(__name__, 'launcher manifest.xml') + if six.PY2: + return manifest % vars() + else: + return manifest.decode('utf-8') % vars() + + +def rmtree(path, ignore_errors=False, onerror=auto_chmod): + return shutil.rmtree(path, ignore_errors, onerror) + + +def current_umask(): + tmp = os.umask(0o022) + os.umask(tmp) + return tmp + + +def bootstrap(): + # This function is called when setuptools*.egg is run using /bin/sh + import setuptools + + argv0 = os.path.dirname(setuptools.__path__[0]) + sys.argv[0] = argv0 + sys.argv.append(argv0) + main() + + +def main(argv=None, **kw): + from setuptools import setup + from setuptools.dist import Distribution + + class DistributionWithoutHelpCommands(Distribution): + common_usage = "" + + def _show_help(self, *args, **kw): + with _patch_usage(): + Distribution._show_help(self, *args, **kw) + + if argv is None: + argv = sys.argv[1:] + + with _patch_usage(): + setup( + script_args=['-q', 'easy_install', '-v'] + argv, + script_name=sys.argv[0] or 'easy_install', + distclass=DistributionWithoutHelpCommands, + **kw + ) + + +@contextlib.contextmanager +def _patch_usage(): + import distutils.core + USAGE = textwrap.dedent(""" + usage: %(script)s [options] requirement_or_url ... + or: %(script)s --help + """).lstrip() + + def gen_usage(script_name): + return USAGE % dict( + script=os.path.basename(script_name), + ) + + saved = distutils.core.gen_usage + distutils.core.gen_usage = gen_usage + try: + yield + finally: + distutils.core.gen_usage = saved + +class EasyInstallDeprecationWarning(SetuptoolsDeprecationWarning): + """Class for warning about deprecations in EasyInstall in SetupTools. Not ignored by default, unlike DeprecationWarning.""" + diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/egg_info.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/egg_info.py new file mode 100644 index 00000000..5d8f451e --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/egg_info.py @@ -0,0 +1,717 @@ +"""setuptools.command.egg_info + +Create a distribution's .egg-info directory and contents""" + +from distutils.filelist import FileList as _FileList +from distutils.errors import DistutilsInternalError +from distutils.util import convert_path +from distutils import log +import distutils.errors +import distutils.filelist +import os +import re +import sys +import io +import warnings +import time +import collections + +from setuptools.extern import six +from setuptools.extern.six.moves import map + +from setuptools import Command +from setuptools.command.sdist import sdist +from setuptools.command.sdist import walk_revctrl +from setuptools.command.setopt import edit_config +from setuptools.command import bdist_egg +from pkg_resources import ( + parse_requirements, safe_name, parse_version, + safe_version, yield_lines, EntryPoint, iter_entry_points, to_filename) +import setuptools.unicode_utils as unicode_utils +from setuptools.glob import glob + +from setuptools.extern import packaging +from setuptools import SetuptoolsDeprecationWarning + +def translate_pattern(glob): + """ + Translate a file path glob like '*.txt' in to a regular expression. + This differs from fnmatch.translate which allows wildcards to match + directory separators. It also knows about '**/' which matches any number of + directories. + """ + pat = '' + + # This will split on '/' within [character classes]. This is deliberate. + chunks = glob.split(os.path.sep) + + sep = re.escape(os.sep) + valid_char = '[^%s]' % (sep,) + + for c, chunk in enumerate(chunks): + last_chunk = c == len(chunks) - 1 + + # Chunks that are a literal ** are globstars. They match anything. + if chunk == '**': + if last_chunk: + # Match anything if this is the last component + pat += '.*' + else: + # Match '(name/)*' + pat += '(?:%s+%s)*' % (valid_char, sep) + continue # Break here as the whole path component has been handled + + # Find any special characters in the remainder + i = 0 + chunk_len = len(chunk) + while i < chunk_len: + char = chunk[i] + if char == '*': + # Match any number of name characters + pat += valid_char + '*' + elif char == '?': + # Match a name character + pat += valid_char + elif char == '[': + # Character class + inner_i = i + 1 + # Skip initial !/] chars + if inner_i < chunk_len and chunk[inner_i] == '!': + inner_i = inner_i + 1 + if inner_i < chunk_len and chunk[inner_i] == ']': + inner_i = inner_i + 1 + + # Loop till the closing ] is found + while inner_i < chunk_len and chunk[inner_i] != ']': + inner_i = inner_i + 1 + + if inner_i >= chunk_len: + # Got to the end of the string without finding a closing ] + # Do not treat this as a matching group, but as a literal [ + pat += re.escape(char) + else: + # Grab the insides of the [brackets] + inner = chunk[i + 1:inner_i] + char_class = '' + + # Class negation + if inner[0] == '!': + char_class = '^' + inner = inner[1:] + + char_class += re.escape(inner) + pat += '[%s]' % (char_class,) + + # Skip to the end ] + i = inner_i + else: + pat += re.escape(char) + i += 1 + + # Join each chunk with the dir separator + if not last_chunk: + pat += sep + + pat += r'\Z' + return re.compile(pat, flags=re.MULTILINE|re.DOTALL) + + +class InfoCommon: + tag_build = None + tag_date = None + + @property + def name(self): + return safe_name(self.distribution.get_name()) + + def tagged_version(self): + version = self.distribution.get_version() + # egg_info may be called more than once for a distribution, + # in which case the version string already contains all tags. + if self.vtags and version.endswith(self.vtags): + return safe_version(version) + return safe_version(version + self.vtags) + + def tags(self): + version = '' + if self.tag_build: + version += self.tag_build + if self.tag_date: + version += time.strftime("-%Y%m%d") + return version + vtags = property(tags) + + +class egg_info(InfoCommon, Command): + description = "create a distribution's .egg-info directory" + + user_options = [ + ('egg-base=', 'e', "directory containing .egg-info directories" + " (default: top of the source tree)"), + ('tag-date', 'd', "Add date stamp (e.g. 20050528) to version number"), + ('tag-build=', 'b', "Specify explicit tag to add to version number"), + ('no-date', 'D', "Don't include date stamp [default]"), + ] + + boolean_options = ['tag-date'] + negative_opt = { + 'no-date': 'tag-date', + } + + def initialize_options(self): + self.egg_base = None + self.egg_name = None + self.egg_info = None + self.egg_version = None + self.broken_egg_info = False + + #################################### + # allow the 'tag_svn_revision' to be detected and + # set, supporting sdists built on older Setuptools. + @property + def tag_svn_revision(self): + pass + + @tag_svn_revision.setter + def tag_svn_revision(self, value): + pass + #################################### + + def save_version_info(self, filename): + """ + Materialize the value of date into the + build tag. Install build keys in a deterministic order + to avoid arbitrary reordering on subsequent builds. + """ + egg_info = collections.OrderedDict() + # follow the order these keys would have been added + # when PYTHONHASHSEED=0 + egg_info['tag_build'] = self.tags() + egg_info['tag_date'] = 0 + edit_config(filename, dict(egg_info=egg_info)) + + def finalize_options(self): + # Note: we need to capture the current value returned + # by `self.tagged_version()`, so we can later update + # `self.distribution.metadata.version` without + # repercussions. + self.egg_name = self.name + self.egg_version = self.tagged_version() + parsed_version = parse_version(self.egg_version) + + try: + is_version = isinstance(parsed_version, packaging.version.Version) + spec = ( + "%s==%s" if is_version else "%s===%s" + ) + list( + parse_requirements(spec % (self.egg_name, self.egg_version)) + ) + except ValueError: + raise distutils.errors.DistutilsOptionError( + "Invalid distribution name or version syntax: %s-%s" % + (self.egg_name, self.egg_version) + ) + + if self.egg_base is None: + dirs = self.distribution.package_dir + self.egg_base = (dirs or {}).get('', os.curdir) + + self.ensure_dirname('egg_base') + self.egg_info = to_filename(self.egg_name) + '.egg-info' + if self.egg_base != os.curdir: + self.egg_info = os.path.join(self.egg_base, self.egg_info) + if '-' in self.egg_name: + self.check_broken_egg_info() + + # Set package version for the benefit of dumber commands + # (e.g. sdist, bdist_wininst, etc.) + # + self.distribution.metadata.version = self.egg_version + + # If we bootstrapped around the lack of a PKG-INFO, as might be the + # case in a fresh checkout, make sure that any special tags get added + # to the version info + # + pd = self.distribution._patched_dist + if pd is not None and pd.key == self.egg_name.lower(): + pd._version = self.egg_version + pd._parsed_version = parse_version(self.egg_version) + self.distribution._patched_dist = None + + def write_or_delete_file(self, what, filename, data, force=False): + """Write `data` to `filename` or delete if empty + + If `data` is non-empty, this routine is the same as ``write_file()``. + If `data` is empty but not ``None``, this is the same as calling + ``delete_file(filename)`. If `data` is ``None``, then this is a no-op + unless `filename` exists, in which case a warning is issued about the + orphaned file (if `force` is false), or deleted (if `force` is true). + """ + if data: + self.write_file(what, filename, data) + elif os.path.exists(filename): + if data is None and not force: + log.warn( + "%s not set in setup(), but %s exists", what, filename + ) + return + else: + self.delete_file(filename) + + def write_file(self, what, filename, data): + """Write `data` to `filename` (if not a dry run) after announcing it + + `what` is used in a log message to identify what is being written + to the file. + """ + log.info("writing %s to %s", what, filename) + if six.PY3: + data = data.encode("utf-8") + if not self.dry_run: + f = open(filename, 'wb') + f.write(data) + f.close() + + def delete_file(self, filename): + """Delete `filename` (if not a dry run) after announcing it""" + log.info("deleting %s", filename) + if not self.dry_run: + os.unlink(filename) + + def run(self): + self.mkpath(self.egg_info) + os.utime(self.egg_info, None) + installer = self.distribution.fetch_build_egg + for ep in iter_entry_points('egg_info.writers'): + ep.require(installer=installer) + writer = ep.resolve() + writer(self, ep.name, os.path.join(self.egg_info, ep.name)) + + # Get rid of native_libs.txt if it was put there by older bdist_egg + nl = os.path.join(self.egg_info, "native_libs.txt") + if os.path.exists(nl): + self.delete_file(nl) + + self.find_sources() + + def find_sources(self): + """Generate SOURCES.txt manifest file""" + manifest_filename = os.path.join(self.egg_info, "SOURCES.txt") + mm = manifest_maker(self.distribution) + mm.manifest = manifest_filename + mm.run() + self.filelist = mm.filelist + + def check_broken_egg_info(self): + bei = self.egg_name + '.egg-info' + if self.egg_base != os.curdir: + bei = os.path.join(self.egg_base, bei) + if os.path.exists(bei): + log.warn( + "-" * 78 + '\n' + "Note: Your current .egg-info directory has a '-' in its name;" + '\nthis will not work correctly with "setup.py develop".\n\n' + 'Please rename %s to %s to correct this problem.\n' + '-' * 78, + bei, self.egg_info + ) + self.broken_egg_info = self.egg_info + self.egg_info = bei # make it work for now + + +class FileList(_FileList): + # Implementations of the various MANIFEST.in commands + + def process_template_line(self, line): + # Parse the line: split it up, make sure the right number of words + # is there, and return the relevant words. 'action' is always + # defined: it's the first word of the line. Which of the other + # three are defined depends on the action; it'll be either + # patterns, (dir and patterns), or (dir_pattern). + (action, patterns, dir, dir_pattern) = self._parse_template_line(line) + + # OK, now we know that the action is valid and we have the + # right number of words on the line for that action -- so we + # can proceed with minimal error-checking. + if action == 'include': + self.debug_print("include " + ' '.join(patterns)) + for pattern in patterns: + if not self.include(pattern): + log.warn("warning: no files found matching '%s'", pattern) + + elif action == 'exclude': + self.debug_print("exclude " + ' '.join(patterns)) + for pattern in patterns: + if not self.exclude(pattern): + log.warn(("warning: no previously-included files " + "found matching '%s'"), pattern) + + elif action == 'global-include': + self.debug_print("global-include " + ' '.join(patterns)) + for pattern in patterns: + if not self.global_include(pattern): + log.warn(("warning: no files found matching '%s' " + "anywhere in distribution"), pattern) + + elif action == 'global-exclude': + self.debug_print("global-exclude " + ' '.join(patterns)) + for pattern in patterns: + if not self.global_exclude(pattern): + log.warn(("warning: no previously-included files matching " + "'%s' found anywhere in distribution"), + pattern) + + elif action == 'recursive-include': + self.debug_print("recursive-include %s %s" % + (dir, ' '.join(patterns))) + for pattern in patterns: + if not self.recursive_include(dir, pattern): + log.warn(("warning: no files found matching '%s' " + "under directory '%s'"), + pattern, dir) + + elif action == 'recursive-exclude': + self.debug_print("recursive-exclude %s %s" % + (dir, ' '.join(patterns))) + for pattern in patterns: + if not self.recursive_exclude(dir, pattern): + log.warn(("warning: no previously-included files matching " + "'%s' found under directory '%s'"), + pattern, dir) + + elif action == 'graft': + self.debug_print("graft " + dir_pattern) + if not self.graft(dir_pattern): + log.warn("warning: no directories found matching '%s'", + dir_pattern) + + elif action == 'prune': + self.debug_print("prune " + dir_pattern) + if not self.prune(dir_pattern): + log.warn(("no previously-included directories found " + "matching '%s'"), dir_pattern) + + else: + raise DistutilsInternalError( + "this cannot happen: invalid action '%s'" % action) + + def _remove_files(self, predicate): + """ + Remove all files from the file list that match the predicate. + Return True if any matching files were removed + """ + found = False + for i in range(len(self.files) - 1, -1, -1): + if predicate(self.files[i]): + self.debug_print(" removing " + self.files[i]) + del self.files[i] + found = True + return found + + def include(self, pattern): + """Include files that match 'pattern'.""" + found = [f for f in glob(pattern) if not os.path.isdir(f)] + self.extend(found) + return bool(found) + + def exclude(self, pattern): + """Exclude files that match 'pattern'.""" + match = translate_pattern(pattern) + return self._remove_files(match.match) + + def recursive_include(self, dir, pattern): + """ + Include all files anywhere in 'dir/' that match the pattern. + """ + full_pattern = os.path.join(dir, '**', pattern) + found = [f for f in glob(full_pattern, recursive=True) + if not os.path.isdir(f)] + self.extend(found) + return bool(found) + + def recursive_exclude(self, dir, pattern): + """ + Exclude any file anywhere in 'dir/' that match the pattern. + """ + match = translate_pattern(os.path.join(dir, '**', pattern)) + return self._remove_files(match.match) + + def graft(self, dir): + """Include all files from 'dir/'.""" + found = [ + item + for match_dir in glob(dir) + for item in distutils.filelist.findall(match_dir) + ] + self.extend(found) + return bool(found) + + def prune(self, dir): + """Filter out files from 'dir/'.""" + match = translate_pattern(os.path.join(dir, '**')) + return self._remove_files(match.match) + + def global_include(self, pattern): + """ + Include all files anywhere in the current directory that match the + pattern. This is very inefficient on large file trees. + """ + if self.allfiles is None: + self.findall() + match = translate_pattern(os.path.join('**', pattern)) + found = [f for f in self.allfiles if match.match(f)] + self.extend(found) + return bool(found) + + def global_exclude(self, pattern): + """ + Exclude all files anywhere that match the pattern. + """ + match = translate_pattern(os.path.join('**', pattern)) + return self._remove_files(match.match) + + def append(self, item): + if item.endswith('\r'): # Fix older sdists built on Windows + item = item[:-1] + path = convert_path(item) + + if self._safe_path(path): + self.files.append(path) + + def extend(self, paths): + self.files.extend(filter(self._safe_path, paths)) + + def _repair(self): + """ + Replace self.files with only safe paths + + Because some owners of FileList manipulate the underlying + ``files`` attribute directly, this method must be called to + repair those paths. + """ + self.files = list(filter(self._safe_path, self.files)) + + def _safe_path(self, path): + enc_warn = "'%s' not %s encodable -- skipping" + + # To avoid accidental trans-codings errors, first to unicode + u_path = unicode_utils.filesys_decode(path) + if u_path is None: + log.warn("'%s' in unexpected encoding -- skipping" % path) + return False + + # Must ensure utf-8 encodability + utf8_path = unicode_utils.try_encode(u_path, "utf-8") + if utf8_path is None: + log.warn(enc_warn, path, 'utf-8') + return False + + try: + # accept is either way checks out + if os.path.exists(u_path) or os.path.exists(utf8_path): + return True + # this will catch any encode errors decoding u_path + except UnicodeEncodeError: + log.warn(enc_warn, path, sys.getfilesystemencoding()) + + +class manifest_maker(sdist): + template = "MANIFEST.in" + + def initialize_options(self): + self.use_defaults = 1 + self.prune = 1 + self.manifest_only = 1 + self.force_manifest = 1 + + def finalize_options(self): + pass + + def run(self): + self.filelist = FileList() + if not os.path.exists(self.manifest): + self.write_manifest() # it must exist so it'll get in the list + self.add_defaults() + if os.path.exists(self.template): + self.read_template() + self.prune_file_list() + self.filelist.sort() + self.filelist.remove_duplicates() + self.write_manifest() + + def _manifest_normalize(self, path): + path = unicode_utils.filesys_decode(path) + return path.replace(os.sep, '/') + + def write_manifest(self): + """ + Write the file list in 'self.filelist' to the manifest file + named by 'self.manifest'. + """ + self.filelist._repair() + + # Now _repairs should encodability, but not unicode + files = [self._manifest_normalize(f) for f in self.filelist.files] + msg = "writing manifest file '%s'" % self.manifest + self.execute(write_file, (self.manifest, files), msg) + + def warn(self, msg): + if not self._should_suppress_warning(msg): + sdist.warn(self, msg) + + @staticmethod + def _should_suppress_warning(msg): + """ + suppress missing-file warnings from sdist + """ + return re.match(r"standard file .*not found", msg) + + def add_defaults(self): + sdist.add_defaults(self) + self.check_license() + self.filelist.append(self.template) + self.filelist.append(self.manifest) + rcfiles = list(walk_revctrl()) + if rcfiles: + self.filelist.extend(rcfiles) + elif os.path.exists(self.manifest): + self.read_manifest() + + if os.path.exists("setup.py"): + # setup.py should be included by default, even if it's not + # the script called to create the sdist + self.filelist.append("setup.py") + + ei_cmd = self.get_finalized_command('egg_info') + self.filelist.graft(ei_cmd.egg_info) + + def prune_file_list(self): + build = self.get_finalized_command('build') + base_dir = self.distribution.get_fullname() + self.filelist.prune(build.build_base) + self.filelist.prune(base_dir) + sep = re.escape(os.sep) + self.filelist.exclude_pattern(r'(^|' + sep + r')(RCS|CVS|\.svn)' + sep, + is_regex=1) + + +def write_file(filename, contents): + """Create a file with the specified name and write 'contents' (a + sequence of strings without line terminators) to it. + """ + contents = "\n".join(contents) + + # assuming the contents has been vetted for utf-8 encoding + contents = contents.encode("utf-8") + + with open(filename, "wb") as f: # always write POSIX-style manifest + f.write(contents) + + +def write_pkg_info(cmd, basename, filename): + log.info("writing %s", filename) + if not cmd.dry_run: + metadata = cmd.distribution.metadata + metadata.version, oldver = cmd.egg_version, metadata.version + metadata.name, oldname = cmd.egg_name, metadata.name + + try: + # write unescaped data to PKG-INFO, so older pkg_resources + # can still parse it + metadata.write_pkg_info(cmd.egg_info) + finally: + metadata.name, metadata.version = oldname, oldver + + safe = getattr(cmd.distribution, 'zip_safe', None) + + bdist_egg.write_safety_flag(cmd.egg_info, safe) + + +def warn_depends_obsolete(cmd, basename, filename): + if os.path.exists(filename): + log.warn( + "WARNING: 'depends.txt' is not used by setuptools 0.6!\n" + "Use the install_requires/extras_require setup() args instead." + ) + + +def _write_requirements(stream, reqs): + lines = yield_lines(reqs or ()) + append_cr = lambda line: line + '\n' + lines = map(append_cr, lines) + stream.writelines(lines) + + +def write_requirements(cmd, basename, filename): + dist = cmd.distribution + data = six.StringIO() + _write_requirements(data, dist.install_requires) + extras_require = dist.extras_require or {} + for extra in sorted(extras_require): + data.write('\n[{extra}]\n'.format(**vars())) + _write_requirements(data, extras_require[extra]) + cmd.write_or_delete_file("requirements", filename, data.getvalue()) + + +def write_setup_requirements(cmd, basename, filename): + data = io.StringIO() + _write_requirements(data, cmd.distribution.setup_requires) + cmd.write_or_delete_file("setup-requirements", filename, data.getvalue()) + + +def write_toplevel_names(cmd, basename, filename): + pkgs = dict.fromkeys( + [ + k.split('.', 1)[0] + for k in cmd.distribution.iter_distribution_names() + ] + ) + cmd.write_file("top-level names", filename, '\n'.join(sorted(pkgs)) + '\n') + + +def overwrite_arg(cmd, basename, filename): + write_arg(cmd, basename, filename, True) + + +def write_arg(cmd, basename, filename, force=False): + argname = os.path.splitext(basename)[0] + value = getattr(cmd.distribution, argname, None) + if value is not None: + value = '\n'.join(value) + '\n' + cmd.write_or_delete_file(argname, filename, value, force) + + +def write_entries(cmd, basename, filename): + ep = cmd.distribution.entry_points + + if isinstance(ep, six.string_types) or ep is None: + data = ep + elif ep is not None: + data = [] + for section, contents in sorted(ep.items()): + if not isinstance(contents, six.string_types): + contents = EntryPoint.parse_group(section, contents) + contents = '\n'.join(sorted(map(str, contents.values()))) + data.append('[%s]\n%s\n\n' % (section, contents)) + data = ''.join(data) + + cmd.write_or_delete_file('entry points', filename, data, True) + + +def get_pkg_info_revision(): + """ + Get a -r### off of PKG-INFO Version in case this is an sdist of + a subversion revision. + """ + warnings.warn("get_pkg_info_revision is deprecated.", EggInfoDeprecationWarning) + if os.path.exists('PKG-INFO'): + with io.open('PKG-INFO') as f: + for line in f: + match = re.match(r"Version:.*-r(\d+)\s*$", line) + if match: + return int(match.group(1)) + return 0 + + +class EggInfoDeprecationWarning(SetuptoolsDeprecationWarning): + """Class for warning about deprecations in eggInfo in setupTools. Not ignored by default, unlike DeprecationWarning.""" diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/install.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/install.py new file mode 100644 index 00000000..31a5ddb5 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/install.py @@ -0,0 +1,125 @@ +from distutils.errors import DistutilsArgError +import inspect +import glob +import warnings +import platform +import distutils.command.install as orig + +import setuptools + +# Prior to numpy 1.9, NumPy relies on the '_install' name, so provide it for +# now. See https://github.com/pypa/setuptools/issues/199/ +_install = orig.install + + +class install(orig.install): + """Use easy_install to install the package, w/dependencies""" + + user_options = orig.install.user_options + [ + ('old-and-unmanageable', None, "Try not to use this!"), + ('single-version-externally-managed', None, + "used by system package builders to create 'flat' eggs"), + ] + boolean_options = orig.install.boolean_options + [ + 'old-and-unmanageable', 'single-version-externally-managed', + ] + new_commands = [ + ('install_egg_info', lambda self: True), + ('install_scripts', lambda self: True), + ] + _nc = dict(new_commands) + + def initialize_options(self): + orig.install.initialize_options(self) + self.old_and_unmanageable = None + self.single_version_externally_managed = None + + def finalize_options(self): + orig.install.finalize_options(self) + if self.root: + self.single_version_externally_managed = True + elif self.single_version_externally_managed: + if not self.root and not self.record: + raise DistutilsArgError( + "You must specify --record or --root when building system" + " packages" + ) + + def handle_extra_path(self): + if self.root or self.single_version_externally_managed: + # explicit backward-compatibility mode, allow extra_path to work + return orig.install.handle_extra_path(self) + + # Ignore extra_path when installing an egg (or being run by another + # command without --root or --single-version-externally-managed + self.path_file = None + self.extra_dirs = '' + + def run(self): + # Explicit request for old-style install? Just do it + if self.old_and_unmanageable or self.single_version_externally_managed: + return orig.install.run(self) + + if not self._called_from_setup(inspect.currentframe()): + # Run in backward-compatibility mode to support bdist_* commands. + orig.install.run(self) + else: + self.do_egg_install() + + @staticmethod + def _called_from_setup(run_frame): + """ + Attempt to detect whether run() was called from setup() or by another + command. If called by setup(), the parent caller will be the + 'run_command' method in 'distutils.dist', and *its* caller will be + the 'run_commands' method. If called any other way, the + immediate caller *might* be 'run_command', but it won't have been + called by 'run_commands'. Return True in that case or if a call stack + is unavailable. Return False otherwise. + """ + if run_frame is None: + msg = "Call stack not available. bdist_* commands may fail." + warnings.warn(msg) + if platform.python_implementation() == 'IronPython': + msg = "For best results, pass -X:Frames to enable call stack." + warnings.warn(msg) + return True + res = inspect.getouterframes(run_frame)[2] + caller, = res[:1] + info = inspect.getframeinfo(caller) + caller_module = caller.f_globals.get('__name__', '') + return ( + caller_module == 'distutils.dist' + and info.function == 'run_commands' + ) + + def do_egg_install(self): + + easy_install = self.distribution.get_command_class('easy_install') + + cmd = easy_install( + self.distribution, args="x", root=self.root, record=self.record, + ) + cmd.ensure_finalized() # finalize before bdist_egg munges install cmd + cmd.always_copy_from = '.' # make sure local-dir eggs get installed + + # pick up setup-dir .egg files only: no .egg-info + cmd.package_index.scan(glob.glob('*.egg')) + + self.run_command('bdist_egg') + args = [self.distribution.get_command_obj('bdist_egg').egg_output] + + if setuptools.bootstrap_install_from: + # Bootstrap self-installation of setuptools + args.insert(0, setuptools.bootstrap_install_from) + + cmd.args = args + cmd.run() + setuptools.bootstrap_install_from = None + + +# XXX Python 3.1 doesn't see _nc if this is inside the class +install.sub_commands = ( + [cmd for cmd in orig.install.sub_commands if cmd[0] not in install._nc] + + install.new_commands +) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/install_egg_info.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/install_egg_info.py new file mode 100644 index 00000000..edc4718b --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/install_egg_info.py @@ -0,0 +1,62 @@ +from distutils import log, dir_util +import os + +from setuptools import Command +from setuptools import namespaces +from setuptools.archive_util import unpack_archive +import pkg_resources + + +class install_egg_info(namespaces.Installer, Command): + """Install an .egg-info directory for the package""" + + description = "Install an .egg-info directory for the package" + + user_options = [ + ('install-dir=', 'd', "directory to install to"), + ] + + def initialize_options(self): + self.install_dir = None + + def finalize_options(self): + self.set_undefined_options('install_lib', + ('install_dir', 'install_dir')) + ei_cmd = self.get_finalized_command("egg_info") + basename = pkg_resources.Distribution( + None, None, ei_cmd.egg_name, ei_cmd.egg_version + ).egg_name() + '.egg-info' + self.source = ei_cmd.egg_info + self.target = os.path.join(self.install_dir, basename) + self.outputs = [] + + def run(self): + self.run_command('egg_info') + if os.path.isdir(self.target) and not os.path.islink(self.target): + dir_util.remove_tree(self.target, dry_run=self.dry_run) + elif os.path.exists(self.target): + self.execute(os.unlink, (self.target,), "Removing " + self.target) + if not self.dry_run: + pkg_resources.ensure_directory(self.target) + self.execute( + self.copytree, (), "Copying %s to %s" % (self.source, self.target) + ) + self.install_namespaces() + + def get_outputs(self): + return self.outputs + + def copytree(self): + # Copy the .egg-info tree to site-packages + def skimmer(src, dst): + # filter out source-control directories; note that 'src' is always + # a '/'-separated path, regardless of platform. 'dst' is a + # platform-specific path. + for skip in '.svn/', 'CVS/': + if src.startswith(skip) or '/' + skip in src: + return None + self.outputs.append(dst) + log.debug("Copying %s to %s", src, dst) + return dst + + unpack_archive(self.source, self.target, skimmer) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/install_lib.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/install_lib.py new file mode 100644 index 00000000..2b31c3e3 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/install_lib.py @@ -0,0 +1,121 @@ +import os +import imp +from itertools import product, starmap +import distutils.command.install_lib as orig + + +class install_lib(orig.install_lib): + """Don't add compiled flags to filenames of non-Python files""" + + def run(self): + self.build() + outfiles = self.install() + if outfiles is not None: + # always compile, in case we have any extension stubs to deal with + self.byte_compile(outfiles) + + def get_exclusions(self): + """ + Return a collections.Sized collections.Container of paths to be + excluded for single_version_externally_managed installations. + """ + all_packages = ( + pkg + for ns_pkg in self._get_SVEM_NSPs() + for pkg in self._all_packages(ns_pkg) + ) + + excl_specs = product(all_packages, self._gen_exclusion_paths()) + return set(starmap(self._exclude_pkg_path, excl_specs)) + + def _exclude_pkg_path(self, pkg, exclusion_path): + """ + Given a package name and exclusion path within that package, + compute the full exclusion path. + """ + parts = pkg.split('.') + [exclusion_path] + return os.path.join(self.install_dir, *parts) + + @staticmethod + def _all_packages(pkg_name): + """ + >>> list(install_lib._all_packages('foo.bar.baz')) + ['foo.bar.baz', 'foo.bar', 'foo'] + """ + while pkg_name: + yield pkg_name + pkg_name, sep, child = pkg_name.rpartition('.') + + def _get_SVEM_NSPs(self): + """ + Get namespace packages (list) but only for + single_version_externally_managed installations and empty otherwise. + """ + # TODO: is it necessary to short-circuit here? i.e. what's the cost + # if get_finalized_command is called even when namespace_packages is + # False? + if not self.distribution.namespace_packages: + return [] + + install_cmd = self.get_finalized_command('install') + svem = install_cmd.single_version_externally_managed + + return self.distribution.namespace_packages if svem else [] + + @staticmethod + def _gen_exclusion_paths(): + """ + Generate file paths to be excluded for namespace packages (bytecode + cache files). + """ + # always exclude the package module itself + yield '__init__.py' + + yield '__init__.pyc' + yield '__init__.pyo' + + if not hasattr(imp, 'get_tag'): + return + + base = os.path.join('__pycache__', '__init__.' + imp.get_tag()) + yield base + '.pyc' + yield base + '.pyo' + yield base + '.opt-1.pyc' + yield base + '.opt-2.pyc' + + def copy_tree( + self, infile, outfile, + preserve_mode=1, preserve_times=1, preserve_symlinks=0, level=1 + ): + assert preserve_mode and preserve_times and not preserve_symlinks + exclude = self.get_exclusions() + + if not exclude: + return orig.install_lib.copy_tree(self, infile, outfile) + + # Exclude namespace package __init__.py* files from the output + + from setuptools.archive_util import unpack_directory + from distutils import log + + outfiles = [] + + def pf(src, dst): + if dst in exclude: + log.warn("Skipping installation of %s (namespace package)", + dst) + return False + + log.info("copying %s -> %s", src, os.path.dirname(dst)) + outfiles.append(dst) + return dst + + unpack_directory(infile, outfile, pf) + return outfiles + + def get_outputs(self): + outputs = orig.install_lib.get_outputs(self) + exclude = self.get_exclusions() + if exclude: + return [f for f in outputs if f not in exclude] + return outputs diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/install_scripts.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/install_scripts.py new file mode 100644 index 00000000..16234273 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/install_scripts.py @@ -0,0 +1,65 @@ +from distutils import log +import distutils.command.install_scripts as orig +import os +import sys + +from pkg_resources import Distribution, PathMetadata, ensure_directory + + +class install_scripts(orig.install_scripts): + """Do normal script install, plus any egg_info wrapper scripts""" + + def initialize_options(self): + orig.install_scripts.initialize_options(self) + self.no_ep = False + + def run(self): + import setuptools.command.easy_install as ei + + self.run_command("egg_info") + if self.distribution.scripts: + orig.install_scripts.run(self) # run first to set up self.outfiles + else: + self.outfiles = [] + if self.no_ep: + # don't install entry point scripts into .egg file! + return + + ei_cmd = self.get_finalized_command("egg_info") + dist = Distribution( + ei_cmd.egg_base, PathMetadata(ei_cmd.egg_base, ei_cmd.egg_info), + ei_cmd.egg_name, ei_cmd.egg_version, + ) + bs_cmd = self.get_finalized_command('build_scripts') + exec_param = getattr(bs_cmd, 'executable', None) + bw_cmd = self.get_finalized_command("bdist_wininst") + is_wininst = getattr(bw_cmd, '_is_running', False) + writer = ei.ScriptWriter + if is_wininst: + exec_param = "python.exe" + writer = ei.WindowsScriptWriter + if exec_param == sys.executable: + # In case the path to the Python executable contains a space, wrap + # it so it's not split up. + exec_param = [exec_param] + # resolve the writer to the environment + writer = writer.best() + cmd = writer.command_spec_class.best().from_param(exec_param) + for args in writer.get_args(dist, cmd.as_header()): + self.write_script(*args) + + def write_script(self, script_name, contents, mode="t", *ignored): + """Write an executable file to the scripts directory""" + from setuptools.command.easy_install import chmod, current_umask + + log.info("Installing %s script to %s", script_name, self.install_dir) + target = os.path.join(self.install_dir, script_name) + self.outfiles.append(target) + + mask = current_umask() + if not self.dry_run: + ensure_directory(target) + f = open(target, "w" + mode) + f.write(contents) + f.close() + chmod(target, 0o777 - mask) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/launcher manifest.xml b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/launcher manifest.xml new file mode 100644 index 00000000..5972a96d --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/launcher manifest.xml @@ -0,0 +1,15 @@ +<?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="%(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> diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/py36compat.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/py36compat.py new file mode 100644 index 00000000..61063e75 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/py36compat.py @@ -0,0 +1,136 @@ +import os +from glob import glob +from distutils.util import convert_path +from distutils.command import sdist + +from setuptools.extern.six.moves import filter + + +class sdist_add_defaults: + """ + Mix-in providing forward-compatibility for functionality as found in + distutils on Python 3.7. + + Do not edit the code in this class except to update functionality + as implemented in distutils. Instead, override in the subclass. + """ + + def add_defaults(self): + """Add all the default files to self.filelist: + - README or README.txt + - setup.py + - test/test*.py + - all pure Python modules mentioned in setup script + - all files pointed by package_data (build_py) + - all files defined in data_files. + - all files defined as scripts. + - all C sources listed as part of extensions or C libraries + in the setup script (doesn't catch C headers!) + Warns if (README or README.txt) or setup.py are missing; everything + else is optional. + """ + self._add_defaults_standards() + self._add_defaults_optional() + self._add_defaults_python() + self._add_defaults_data_files() + self._add_defaults_ext() + self._add_defaults_c_libs() + self._add_defaults_scripts() + + @staticmethod + def _cs_path_exists(fspath): + """ + Case-sensitive path existence check + + >>> sdist_add_defaults._cs_path_exists(__file__) + True + >>> sdist_add_defaults._cs_path_exists(__file__.upper()) + False + """ + if not os.path.exists(fspath): + return False + # make absolute so we always have a directory + abspath = os.path.abspath(fspath) + directory, filename = os.path.split(abspath) + return filename in os.listdir(directory) + + def _add_defaults_standards(self): + standards = [self.READMES, self.distribution.script_name] + for fn in standards: + if isinstance(fn, tuple): + alts = fn + got_it = False + for fn in alts: + if self._cs_path_exists(fn): + got_it = True + self.filelist.append(fn) + break + + if not got_it: + self.warn("standard file not found: should have one of " + + ', '.join(alts)) + else: + if self._cs_path_exists(fn): + self.filelist.append(fn) + else: + self.warn("standard file '%s' not found" % fn) + + def _add_defaults_optional(self): + optional = ['test/test*.py', 'setup.cfg'] + for pattern in optional: + files = filter(os.path.isfile, glob(pattern)) + self.filelist.extend(files) + + def _add_defaults_python(self): + # build_py is used to get: + # - python modules + # - files defined in package_data + build_py = self.get_finalized_command('build_py') + + # getting python files + if self.distribution.has_pure_modules(): + self.filelist.extend(build_py.get_source_files()) + + # getting package_data files + # (computed in build_py.data_files by build_py.finalize_options) + for pkg, src_dir, build_dir, filenames in build_py.data_files: + for filename in filenames: + self.filelist.append(os.path.join(src_dir, filename)) + + def _add_defaults_data_files(self): + # getting distribution.data_files + if self.distribution.has_data_files(): + for item in self.distribution.data_files: + if isinstance(item, str): + # plain file + item = convert_path(item) + if os.path.isfile(item): + self.filelist.append(item) + else: + # a (dirname, filenames) tuple + dirname, filenames = item + for f in filenames: + f = convert_path(f) + if os.path.isfile(f): + self.filelist.append(f) + + def _add_defaults_ext(self): + if self.distribution.has_ext_modules(): + build_ext = self.get_finalized_command('build_ext') + self.filelist.extend(build_ext.get_source_files()) + + def _add_defaults_c_libs(self): + if self.distribution.has_c_libraries(): + build_clib = self.get_finalized_command('build_clib') + self.filelist.extend(build_clib.get_source_files()) + + def _add_defaults_scripts(self): + if self.distribution.has_scripts(): + build_scripts = self.get_finalized_command('build_scripts') + self.filelist.extend(build_scripts.get_source_files()) + + +if hasattr(sdist.sdist, '_add_defaults_standards'): + # disable the functionality already available upstream + class sdist_add_defaults: + pass diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/register.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/register.py new file mode 100644 index 00000000..98bc0156 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/register.py @@ -0,0 +1,18 @@ +from distutils import log +import distutils.command.register as orig + + +class register(orig.register): + __doc__ = orig.register.__doc__ + + def run(self): + try: + # Make sure that we are using valid current name/version info + self.run_command('egg_info') + orig.register.run(self) + finally: + self.announce( + "WARNING: Registering is deprecated, use twine to " + "upload instead (https://pypi.org/p/twine/)", + log.WARN + ) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/rotate.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/rotate.py new file mode 100644 index 00000000..b89353f5 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/rotate.py @@ -0,0 +1,66 @@ +from distutils.util import convert_path +from distutils import log +from distutils.errors import DistutilsOptionError +import os +import shutil + +from setuptools.extern import six + +from setuptools import Command + + +class rotate(Command): + """Delete older distributions""" + + description = "delete older distributions, keeping N newest files" + user_options = [ + ('match=', 'm', "patterns to match (required)"), + ('dist-dir=', 'd', "directory where the distributions are"), + ('keep=', 'k', "number of matching distributions to keep"), + ] + + boolean_options = [] + + def initialize_options(self): + self.match = None + self.dist_dir = None + self.keep = None + + def finalize_options(self): + if self.match is None: + raise DistutilsOptionError( + "Must specify one or more (comma-separated) match patterns " + "(e.g. '.zip' or '.egg')" + ) + if self.keep is None: + raise DistutilsOptionError("Must specify number of files to keep") + try: + self.keep = int(self.keep) + except ValueError: + raise DistutilsOptionError("--keep must be an integer") + if isinstance(self.match, six.string_types): + self.match = [ + convert_path(p.strip()) for p in self.match.split(',') + ] + self.set_undefined_options('bdist', ('dist_dir', 'dist_dir')) + + def run(self): + self.run_command("egg_info") + from glob import glob + + for pattern in self.match: + pattern = self.distribution.get_name() + '*' + pattern + files = glob(os.path.join(self.dist_dir, pattern)) + files = [(os.path.getmtime(f), f) for f in files] + files.sort() + files.reverse() + + log.info("%d file(s) matching %s", len(files), pattern) + files = files[self.keep:] + for (t, f) in files: + log.info("Deleting %s", f) + if not self.dry_run: + if os.path.isdir(f): + shutil.rmtree(f) + else: + os.unlink(f) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/saveopts.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/saveopts.py new file mode 100644 index 00000000..611cec55 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/saveopts.py @@ -0,0 +1,22 @@ +from setuptools.command.setopt import edit_config, option_base + + +class saveopts(option_base): + """Save command-line options to a file""" + + description = "save supplied options to setup.cfg or other config file" + + def run(self): + dist = self.distribution + settings = {} + + for cmd in dist.command_options: + + if cmd == 'saveopts': + continue # don't save our own options! + + for opt, (src, val) in dist.get_option_dict(cmd).items(): + if src == "command line": + settings.setdefault(cmd, {})[opt] = val + + edit_config(self.filename, settings, self.dry_run) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/sdist.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/sdist.py new file mode 100644 index 00000000..dc253981 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/sdist.py @@ -0,0 +1,221 @@ +from distutils import log +import distutils.command.sdist as orig +import os +import sys +import io +import contextlib + +from setuptools.extern import six + +from .py36compat import sdist_add_defaults + +import pkg_resources + +_default_revctrl = list + + +def walk_revctrl(dirname=''): + """Find all files under revision control""" + for ep in pkg_resources.iter_entry_points('setuptools.file_finders'): + for item in ep.load()(dirname): + yield item + + +class sdist(sdist_add_defaults, orig.sdist): + """Smart sdist that finds anything supported by revision control""" + + user_options = [ + ('formats=', None, + "formats for source distribution (comma-separated list)"), + ('keep-temp', 'k', + "keep the distribution tree around after creating " + + "archive file(s)"), + ('dist-dir=', 'd', + "directory to put the source distribution archive(s) in " + "[default: dist]"), + ] + + negative_opt = {} + + README_EXTENSIONS = ['', '.rst', '.txt', '.md'] + READMES = tuple('README{0}'.format(ext) for ext in README_EXTENSIONS) + + def run(self): + self.run_command('egg_info') + ei_cmd = self.get_finalized_command('egg_info') + self.filelist = ei_cmd.filelist + self.filelist.append(os.path.join(ei_cmd.egg_info, 'SOURCES.txt')) + self.check_readme() + + # Run sub commands + for cmd_name in self.get_sub_commands(): + self.run_command(cmd_name) + + self.make_distribution() + + dist_files = getattr(self.distribution, 'dist_files', []) + for file in self.archive_files: + data = ('sdist', '', file) + if data not in dist_files: + dist_files.append(data) + + def initialize_options(self): + orig.sdist.initialize_options(self) + + self._default_to_gztar() + + def _default_to_gztar(self): + # only needed on Python prior to 3.6. + if sys.version_info >= (3, 6, 0, 'beta', 1): + return + self.formats = ['gztar'] + + def make_distribution(self): + """ + Workaround for #516 + """ + with self._remove_os_link(): + orig.sdist.make_distribution(self) + + @staticmethod + @contextlib.contextmanager + def _remove_os_link(): + """ + In a context, remove and restore os.link if it exists + """ + + class NoValue: + pass + + orig_val = getattr(os, 'link', NoValue) + try: + del os.link + except Exception: + pass + try: + yield + finally: + if orig_val is not NoValue: + setattr(os, 'link', orig_val) + + def __read_template_hack(self): + # This grody hack closes the template file (MANIFEST.in) if an + # exception occurs during read_template. + # Doing so prevents an error when easy_install attempts to delete the + # file. + try: + orig.sdist.read_template(self) + except Exception: + _, _, tb = sys.exc_info() + tb.tb_next.tb_frame.f_locals['template'].close() + raise + + # Beginning with Python 2.7.2, 3.1.4, and 3.2.1, this leaky file handle + # has been fixed, so only override the method if we're using an earlier + # Python. + has_leaky_handle = ( + sys.version_info < (2, 7, 2) + or (3, 0) <= sys.version_info < (3, 1, 4) + or (3, 2) <= sys.version_info < (3, 2, 1) + ) + if has_leaky_handle: + read_template = __read_template_hack + + def _add_defaults_python(self): + """getting python files""" + if self.distribution.has_pure_modules(): + build_py = self.get_finalized_command('build_py') + self.filelist.extend(build_py.get_source_files()) + # This functionality is incompatible with include_package_data, and + # will in fact create an infinite recursion if include_package_data + # is True. Use of include_package_data will imply that + # distutils-style automatic handling of package_data is disabled + if not self.distribution.include_package_data: + for _, src_dir, _, filenames in build_py.data_files: + self.filelist.extend([os.path.join(src_dir, filename) + for filename in filenames]) + + def _add_defaults_data_files(self): + try: + if six.PY2: + sdist_add_defaults._add_defaults_data_files(self) + else: + super()._add_defaults_data_files() + except TypeError: + log.warn("data_files contains unexpected objects") + + def check_readme(self): + for f in self.READMES: + if os.path.exists(f): + return + else: + self.warn( + "standard file not found: should have one of " + + ', '.join(self.READMES) + ) + + def make_release_tree(self, base_dir, files): + orig.sdist.make_release_tree(self, base_dir, files) + + # Save any egg_info command line options used to create this sdist + dest = os.path.join(base_dir, 'setup.cfg') + if hasattr(os, 'link') and os.path.exists(dest): + # unlink and re-copy, since it might be hard-linked, and + # we don't want to change the source version + os.unlink(dest) + self.copy_file('setup.cfg', dest) + + self.get_finalized_command('egg_info').save_version_info(dest) + + def _manifest_is_not_generated(self): + # check for special comment used in 2.7.1 and higher + if not os.path.isfile(self.manifest): + return False + + with io.open(self.manifest, 'rb') as fp: + first_line = fp.readline() + return (first_line != + '# file GENERATED by distutils, do NOT edit\n'.encode()) + + def read_manifest(self): + """Read the manifest file (named by 'self.manifest') and use it to + fill in 'self.filelist', the list of files to include in the source + distribution. + """ + log.info("reading manifest file '%s'", self.manifest) + manifest = open(self.manifest, 'rb') + for line in manifest: + # The manifest must contain UTF-8. See #303. + if six.PY3: + try: + line = line.decode('UTF-8') + except UnicodeDecodeError: + log.warn("%r not UTF-8 decodable -- skipping" % line) + continue + # ignore comments and blank lines + line = line.strip() + if line.startswith('#') or not line: + continue + self.filelist.append(line) + manifest.close() + + def check_license(self): + """Checks if license_file' is configured and adds it to + 'self.filelist' if the value contains a valid path. + """ + + opts = self.distribution.get_option_dict('metadata') + + # ignore the source of the value + _, license_file = opts.get('license_file', (None, None)) + + if license_file is None: + log.debug("'license_file' option was not specified") + return + + if not os.path.exists(license_file): + log.warn("warning: Failed to find the configured license file '%s'", + license_file) + return + + self.filelist.append(license_file) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/setopt.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/setopt.py new file mode 100644 index 00000000..7e57cc02 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/setopt.py @@ -0,0 +1,149 @@ +from distutils.util import convert_path +from distutils import log +from distutils.errors import DistutilsOptionError +import distutils +import os + +from setuptools.extern.six.moves import configparser + +from setuptools import Command + +__all__ = ['config_file', 'edit_config', 'option_base', 'setopt'] + + +def config_file(kind="local"): + """Get the filename of the distutils, local, global, or per-user config + + `kind` must be one of "local", "global", or "user" + """ + if kind == 'local': + return 'setup.cfg' + if kind == 'global': + return os.path.join( + os.path.dirname(distutils.__file__), 'distutils.cfg' + ) + if kind == 'user': + dot = os.name == 'posix' and '.' or '' + return os.path.expanduser(convert_path("~/%spydistutils.cfg" % dot)) + raise ValueError( + "config_file() type must be 'local', 'global', or 'user'", kind + ) + + +def edit_config(filename, settings, dry_run=False): + """Edit a configuration file to include `settings` + + `settings` is a dictionary of dictionaries or ``None`` values, keyed by + command/section name. A ``None`` value means to delete the entire section, + while a dictionary lists settings to be changed or deleted in that section. + A setting of ``None`` means to delete that setting. + """ + log.debug("Reading configuration from %s", filename) + opts = configparser.RawConfigParser() + opts.read([filename]) + for section, options in settings.items(): + if options is None: + log.info("Deleting section [%s] from %s", section, filename) + opts.remove_section(section) + else: + if not opts.has_section(section): + log.debug("Adding new section [%s] to %s", section, filename) + opts.add_section(section) + for option, value in options.items(): + if value is None: + log.debug( + "Deleting %s.%s from %s", + section, option, filename + ) + opts.remove_option(section, option) + if not opts.options(section): + log.info("Deleting empty [%s] section from %s", + section, filename) + opts.remove_section(section) + else: + log.debug( + "Setting %s.%s to %r in %s", + section, option, value, filename + ) + opts.set(section, option, value) + + log.info("Writing %s", filename) + if not dry_run: + with open(filename, 'w') as f: + opts.write(f) + + +class option_base(Command): + """Abstract base class for commands that mess with config files""" + + user_options = [ + ('global-config', 'g', + "save options to the site-wide distutils.cfg file"), + ('user-config', 'u', + "save options to the current user's pydistutils.cfg file"), + ('filename=', 'f', + "configuration file to use (default=setup.cfg)"), + ] + + boolean_options = [ + 'global-config', 'user-config', + ] + + def initialize_options(self): + self.global_config = None + self.user_config = None + self.filename = None + + def finalize_options(self): + filenames = [] + if self.global_config: + filenames.append(config_file('global')) + if self.user_config: + filenames.append(config_file('user')) + if self.filename is not None: + filenames.append(self.filename) + if not filenames: + filenames.append(config_file('local')) + if len(filenames) > 1: + raise DistutilsOptionError( + "Must specify only one configuration file option", + filenames + ) + self.filename, = filenames + + +class setopt(option_base): + """Save command-line options to a file""" + + description = "set an option in setup.cfg or another config file" + + user_options = [ + ('command=', 'c', 'command to set an option for'), + ('option=', 'o', 'option to set'), + ('set-value=', 's', 'value of the option'), + ('remove', 'r', 'remove (unset) the value'), + ] + option_base.user_options + + boolean_options = option_base.boolean_options + ['remove'] + + def initialize_options(self): + option_base.initialize_options(self) + self.command = None + self.option = None + self.set_value = None + self.remove = None + + def finalize_options(self): + option_base.finalize_options(self) + if self.command is None or self.option is None: + raise DistutilsOptionError("Must specify --command *and* --option") + if self.set_value is None and not self.remove: + raise DistutilsOptionError("Must specify --set-value or --remove") + + def run(self): + edit_config( + self.filename, { + self.command: {self.option.replace('-', '_'): self.set_value} + }, + self.dry_run + ) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/test.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/test.py new file mode 100644 index 00000000..973e4eb2 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/test.py @@ -0,0 +1,271 @@ +import os +import operator +import sys +import contextlib +import itertools +import unittest +from distutils.errors import DistutilsError, DistutilsOptionError +from distutils import log +from unittest import TestLoader + +from setuptools.extern import six +from setuptools.extern.six.moves import map, filter + +from pkg_resources import (resource_listdir, resource_exists, normalize_path, + working_set, _namespace_packages, evaluate_marker, + add_activation_listener, require, EntryPoint) +from setuptools import Command +from .build_py import _unique_everseen + +__metaclass__ = type + + +class ScanningLoader(TestLoader): + + def __init__(self): + TestLoader.__init__(self) + self._visited = set() + + def loadTestsFromModule(self, module, pattern=None): + """Return a suite of all tests cases contained in the given module + + If the module is a package, load tests from all the modules in it. + If the module has an ``additional_tests`` function, call it and add + the return value to the tests. + """ + if module in self._visited: + return None + self._visited.add(module) + + tests = [] + tests.append(TestLoader.loadTestsFromModule(self, module)) + + if hasattr(module, "additional_tests"): + tests.append(module.additional_tests()) + + if hasattr(module, '__path__'): + for file in resource_listdir(module.__name__, ''): + if file.endswith('.py') and file != '__init__.py': + submodule = module.__name__ + '.' + file[:-3] + else: + if resource_exists(module.__name__, file + '/__init__.py'): + submodule = module.__name__ + '.' + file + else: + continue + tests.append(self.loadTestsFromName(submodule)) + + if len(tests) != 1: + return self.suiteClass(tests) + else: + return tests[0] # don't create a nested suite for only one return + + +# adapted from jaraco.classes.properties:NonDataProperty +class NonDataProperty: + def __init__(self, fget): + self.fget = fget + + def __get__(self, obj, objtype=None): + if obj is None: + return self + return self.fget(obj) + + +class test(Command): + """Command to run unit tests after in-place build""" + + description = "run unit tests after in-place build" + + user_options = [ + ('test-module=', 'm', "Run 'test_suite' in specified module"), + ('test-suite=', 's', + "Run single test, case or suite (e.g. 'module.test_suite')"), + ('test-runner=', 'r', "Test runner to use"), + ] + + def initialize_options(self): + self.test_suite = None + self.test_module = None + self.test_loader = None + self.test_runner = None + + def finalize_options(self): + + if self.test_suite and self.test_module: + msg = "You may specify a module or a suite, but not both" + raise DistutilsOptionError(msg) + + if self.test_suite is None: + if self.test_module is None: + self.test_suite = self.distribution.test_suite + else: + self.test_suite = self.test_module + ".test_suite" + + if self.test_loader is None: + self.test_loader = getattr(self.distribution, 'test_loader', None) + if self.test_loader is None: + self.test_loader = "setuptools.command.test:ScanningLoader" + if self.test_runner is None: + self.test_runner = getattr(self.distribution, 'test_runner', None) + + @NonDataProperty + def test_args(self): + return list(self._test_args()) + + def _test_args(self): + if not self.test_suite and sys.version_info >= (2, 7): + yield 'discover' + if self.verbose: + yield '--verbose' + if self.test_suite: + yield self.test_suite + + def with_project_on_sys_path(self, func): + """ + Backward compatibility for project_on_sys_path context. + """ + with self.project_on_sys_path(): + func() + + @contextlib.contextmanager + def project_on_sys_path(self, include_dists=[]): + with_2to3 = six.PY3 and getattr(self.distribution, 'use_2to3', False) + + if with_2to3: + # If we run 2to3 we can not do this inplace: + + # Ensure metadata is up-to-date + self.reinitialize_command('build_py', inplace=0) + self.run_command('build_py') + bpy_cmd = self.get_finalized_command("build_py") + build_path = normalize_path(bpy_cmd.build_lib) + + # Build extensions + self.reinitialize_command('egg_info', egg_base=build_path) + self.run_command('egg_info') + + self.reinitialize_command('build_ext', inplace=0) + self.run_command('build_ext') + else: + # Without 2to3 inplace works fine: + self.run_command('egg_info') + + # Build extensions in-place + self.reinitialize_command('build_ext', inplace=1) + self.run_command('build_ext') + + ei_cmd = self.get_finalized_command("egg_info") + + old_path = sys.path[:] + old_modules = sys.modules.copy() + + try: + project_path = normalize_path(ei_cmd.egg_base) + sys.path.insert(0, project_path) + working_set.__init__() + add_activation_listener(lambda dist: dist.activate()) + require('%s==%s' % (ei_cmd.egg_name, ei_cmd.egg_version)) + with self.paths_on_pythonpath([project_path]): + yield + finally: + sys.path[:] = old_path + sys.modules.clear() + sys.modules.update(old_modules) + working_set.__init__() + + @staticmethod + @contextlib.contextmanager + def paths_on_pythonpath(paths): + """ + Add the indicated paths to the head of the PYTHONPATH environment + variable so that subprocesses will also see the packages at + these paths. + + Do this in a context that restores the value on exit. + """ + nothing = object() + orig_pythonpath = os.environ.get('PYTHONPATH', nothing) + current_pythonpath = os.environ.get('PYTHONPATH', '') + try: + prefix = os.pathsep.join(_unique_everseen(paths)) + to_join = filter(None, [prefix, current_pythonpath]) + new_path = os.pathsep.join(to_join) + if new_path: + os.environ['PYTHONPATH'] = new_path + yield + finally: + if orig_pythonpath is nothing: + os.environ.pop('PYTHONPATH', None) + else: + os.environ['PYTHONPATH'] = orig_pythonpath + + @staticmethod + def install_dists(dist): + """ + Install the requirements indicated by self.distribution and + return an iterable of the dists that were built. + """ + ir_d = dist.fetch_build_eggs(dist.install_requires) + tr_d = dist.fetch_build_eggs(dist.tests_require or []) + er_d = dist.fetch_build_eggs( + v for k, v in dist.extras_require.items() + if k.startswith(':') and evaluate_marker(k[1:]) + ) + return itertools.chain(ir_d, tr_d, er_d) + + def run(self): + installed_dists = self.install_dists(self.distribution) + + cmd = ' '.join(self._argv) + if self.dry_run: + self.announce('skipping "%s" (dry run)' % cmd) + return + + self.announce('running "%s"' % cmd) + + paths = map(operator.attrgetter('location'), installed_dists) + with self.paths_on_pythonpath(paths): + with self.project_on_sys_path(): + self.run_tests() + + def run_tests(self): + # Purge modules under test from sys.modules. The test loader will + # re-import them from the build location. Required when 2to3 is used + # with namespace packages. + if six.PY3 and getattr(self.distribution, 'use_2to3', False): + module = self.test_suite.split('.')[0] + if module in _namespace_packages: + del_modules = [] + if module in sys.modules: + del_modules.append(module) + module += '.' + for name in sys.modules: + if name.startswith(module): + del_modules.append(name) + list(map(sys.modules.__delitem__, del_modules)) + + test = unittest.main( + None, None, self._argv, + testLoader=self._resolve_as_ep(self.test_loader), + testRunner=self._resolve_as_ep(self.test_runner), + exit=False, + ) + if not test.result.wasSuccessful(): + msg = 'Test failed: %s' % test.result + self.announce(msg, log.ERROR) + raise DistutilsError(msg) + + @property + def _argv(self): + return ['unittest'] + self.test_args + + @staticmethod + def _resolve_as_ep(val): + """ + Load the indicated attribute value, called, as a as if it were + specified as an entry point. + """ + if val is None: + return + parsed = EntryPoint.parse("x=" + val) + return parsed.resolve()() diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/upload.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/upload.py new file mode 100644 index 00000000..6db8888b --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/upload.py @@ -0,0 +1,196 @@ +import io +import os +import hashlib +import getpass + +from base64 import standard_b64encode + +from distutils import log +from distutils.command import upload as orig +from distutils.spawn import spawn + +from distutils.errors import DistutilsError + +from setuptools.extern.six.moves.urllib.request import urlopen, Request +from setuptools.extern.six.moves.urllib.error import HTTPError +from setuptools.extern.six.moves.urllib.parse import urlparse + + +class upload(orig.upload): + """ + Override default upload behavior to obtain password + in a variety of different ways. + """ + def run(self): + try: + orig.upload.run(self) + finally: + self.announce( + "WARNING: Uploading via this command is deprecated, use twine " + "to upload instead (https://pypi.org/p/twine/)", + log.WARN + ) + + def finalize_options(self): + orig.upload.finalize_options(self) + self.username = ( + self.username or + getpass.getuser() + ) + # Attempt to obtain password. Short circuit evaluation at the first + # sign of success. + self.password = ( + self.password or + self._load_password_from_keyring() or + self._prompt_for_password() + ) + + def upload_file(self, command, pyversion, filename): + # Makes sure the repository URL is compliant + schema, netloc, url, params, query, fragments = \ + urlparse(self.repository) + if params or query or fragments: + raise AssertionError("Incompatible url %s" % self.repository) + + if schema not in ('http', 'https'): + raise AssertionError("unsupported schema " + schema) + + # Sign if requested + if self.sign: + gpg_args = ["gpg", "--detach-sign", "-a", filename] + if self.identity: + gpg_args[2:2] = ["--local-user", self.identity] + spawn(gpg_args, + dry_run=self.dry_run) + + # Fill in the data - send all the meta-data in case we need to + # register a new release + with open(filename, 'rb') as f: + content = f.read() + + meta = self.distribution.metadata + + data = { + # action + ':action': 'file_upload', + 'protocol_version': '1', + + # identify release + 'name': meta.get_name(), + 'version': meta.get_version(), + + # file content + 'content': (os.path.basename(filename), content), + 'filetype': command, + 'pyversion': pyversion, + 'md5_digest': hashlib.md5(content).hexdigest(), + + # additional meta-data + 'metadata_version': str(meta.get_metadata_version()), + 'summary': meta.get_description(), + 'home_page': meta.get_url(), + 'author': meta.get_contact(), + 'author_email': meta.get_contact_email(), + 'license': meta.get_licence(), + 'description': meta.get_long_description(), + 'keywords': meta.get_keywords(), + 'platform': meta.get_platforms(), + 'classifiers': meta.get_classifiers(), + 'download_url': meta.get_download_url(), + # PEP 314 + 'provides': meta.get_provides(), + 'requires': meta.get_requires(), + 'obsoletes': meta.get_obsoletes(), + } + + data['comment'] = '' + + if self.sign: + data['gpg_signature'] = (os.path.basename(filename) + ".asc", + open(filename+".asc", "rb").read()) + + # set up the authentication + user_pass = (self.username + ":" + self.password).encode('ascii') + # The exact encoding of the authentication string is debated. + # Anyway PyPI only accepts ascii for both username or password. + auth = "Basic " + standard_b64encode(user_pass).decode('ascii') + + # Build up the MIME payload for the POST data + boundary = '--------------GHSKFJDLGDS7543FJKLFHRE75642756743254' + sep_boundary = b'\r\n--' + boundary.encode('ascii') + end_boundary = sep_boundary + b'--\r\n' + body = io.BytesIO() + for key, value in data.items(): + title = '\r\nContent-Disposition: form-data; name="%s"' % key + # handle multiple entries for the same name + if not isinstance(value, list): + value = [value] + for value in value: + if type(value) is tuple: + title += '; filename="%s"' % value[0] + value = value[1] + else: + value = str(value).encode('utf-8') + body.write(sep_boundary) + body.write(title.encode('utf-8')) + body.write(b"\r\n\r\n") + body.write(value) + body.write(end_boundary) + body = body.getvalue() + + msg = "Submitting %s to %s" % (filename, self.repository) + self.announce(msg, log.INFO) + + # build the Request + headers = { + 'Content-type': 'multipart/form-data; boundary=%s' % boundary, + 'Content-length': str(len(body)), + 'Authorization': auth, + } + + request = Request(self.repository, data=body, + headers=headers) + # send the data + try: + result = urlopen(request) + status = result.getcode() + reason = result.msg + except HTTPError as e: + status = e.code + reason = e.msg + except OSError as e: + self.announce(str(e), log.ERROR) + raise + + if status == 200: + self.announce('Server response (%s): %s' % (status, reason), + log.INFO) + if self.show_response: + text = getattr(self, '_read_pypi_response', + lambda x: None)(result) + if text is not None: + msg = '\n'.join(('-' * 75, text, '-' * 75)) + self.announce(msg, log.INFO) + else: + msg = 'Upload failed (%s): %s' % (status, reason) + self.announce(msg, log.ERROR) + raise DistutilsError(msg) + + def _load_password_from_keyring(self): + """ + Attempt to load password from keyring. Suppress Exceptions. + """ + try: + keyring = __import__('keyring') + return keyring.get_password(self.repository, self.username) + except Exception: + pass + + def _prompt_for_password(self): + """ + Prompt for a password on the tty. Suppress Exceptions. + """ + try: + return getpass.getpass() + except (Exception, KeyboardInterrupt): + pass diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/upload_docs.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/upload_docs.py new file mode 100644 index 00000000..07aa564a --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/command/upload_docs.py @@ -0,0 +1,206 @@ +# -*- coding: utf-8 -*- +"""upload_docs + +Implements a Distutils 'upload_docs' subcommand (upload documentation to +PyPI's pythonhosted.org). +""" + +from base64 import standard_b64encode +from distutils import log +from distutils.errors import DistutilsOptionError +import os +import socket +import zipfile +import tempfile +import shutil +import itertools +import functools + +from setuptools.extern import six +from setuptools.extern.six.moves import http_client, urllib + +from pkg_resources import iter_entry_points +from .upload import upload + + +def _encode(s): + errors = 'surrogateescape' if six.PY3 else 'strict' + return s.encode('utf-8', errors) + + +class upload_docs(upload): + # override the default repository as upload_docs isn't + # supported by Warehouse (and won't be). + DEFAULT_REPOSITORY = 'https://pypi.python.org/pypi/' + + description = 'Upload documentation to PyPI' + + user_options = [ + ('repository=', 'r', + "url of repository [default: %s]" % upload.DEFAULT_REPOSITORY), + ('show-response', None, + 'display full response text from server'), + ('upload-dir=', None, 'directory to upload'), + ] + boolean_options = upload.boolean_options + + def has_sphinx(self): + if self.upload_dir is None: + for ep in iter_entry_points('distutils.commands', 'build_sphinx'): + return True + + sub_commands = [('build_sphinx', has_sphinx)] + + def initialize_options(self): + upload.initialize_options(self) + self.upload_dir = None + self.target_dir = None + + def finalize_options(self): + upload.finalize_options(self) + if self.upload_dir is None: + if self.has_sphinx(): + build_sphinx = self.get_finalized_command('build_sphinx') + self.target_dir = build_sphinx.builder_target_dir + else: + build = self.get_finalized_command('build') + self.target_dir = os.path.join(build.build_base, 'docs') + else: + self.ensure_dirname('upload_dir') + self.target_dir = self.upload_dir + if 'pypi.python.org' in self.repository: + log.warn("Upload_docs command is deprecated. Use RTD instead.") + self.announce('Using upload directory %s' % self.target_dir) + + def create_zipfile(self, filename): + zip_file = zipfile.ZipFile(filename, "w") + try: + self.mkpath(self.target_dir) # just in case + for root, dirs, files in os.walk(self.target_dir): + if root == self.target_dir and not files: + tmpl = "no files found in upload directory '%s'" + raise DistutilsOptionError(tmpl % self.target_dir) + for name in files: + full = os.path.join(root, name) + relative = root[len(self.target_dir):].lstrip(os.path.sep) + dest = os.path.join(relative, name) + zip_file.write(full, dest) + finally: + zip_file.close() + + def run(self): + # Run sub commands + for cmd_name in self.get_sub_commands(): + self.run_command(cmd_name) + + tmp_dir = tempfile.mkdtemp() + name = self.distribution.metadata.get_name() + zip_file = os.path.join(tmp_dir, "%s.zip" % name) + try: + self.create_zipfile(zip_file) + self.upload_file(zip_file) + finally: + shutil.rmtree(tmp_dir) + + @staticmethod + def _build_part(item, sep_boundary): + key, values = item + title = '\nContent-Disposition: form-data; name="%s"' % key + # handle multiple entries for the same name + if not isinstance(values, list): + values = [values] + for value in values: + if isinstance(value, tuple): + title += '; filename="%s"' % value[0] + value = value[1] + else: + value = _encode(value) + yield sep_boundary + yield _encode(title) + yield b"\n\n" + yield value + if value and value[-1:] == b'\r': + yield b'\n' # write an extra newline (lurve Macs) + + @classmethod + def _build_multipart(cls, data): + """ + Build up the MIME payload for the POST data + """ + boundary = b'--------------GHSKFJDLGDS7543FJKLFHRE75642756743254' + sep_boundary = b'\n--' + boundary + end_boundary = sep_boundary + b'--' + end_items = end_boundary, b"\n", + builder = functools.partial( + cls._build_part, + sep_boundary=sep_boundary, + ) + part_groups = map(builder, data.items()) + parts = itertools.chain.from_iterable(part_groups) + body_items = itertools.chain(parts, end_items) + content_type = 'multipart/form-data; boundary=%s' % boundary.decode('ascii') + return b''.join(body_items), content_type + + def upload_file(self, filename): + with open(filename, 'rb') as f: + content = f.read() + meta = self.distribution.metadata + data = { + ':action': 'doc_upload', + 'name': meta.get_name(), + 'content': (os.path.basename(filename), content), + } + # set up the authentication + credentials = _encode(self.username + ':' + self.password) + credentials = standard_b64encode(credentials) + if six.PY3: + credentials = credentials.decode('ascii') + auth = "Basic " + credentials + + body, ct = self._build_multipart(data) + + msg = "Submitting documentation to %s" % (self.repository) + self.announce(msg, log.INFO) + + # build the Request + # We can't use urllib2 since we need to send the Basic + # auth right with the first request + schema, netloc, url, params, query, fragments = \ + urllib.parse.urlparse(self.repository) + assert not params and not query and not fragments + if schema == 'http': + conn = http_client.HTTPConnection(netloc) + elif schema == 'https': + conn = http_client.HTTPSConnection(netloc) + else: + raise AssertionError("unsupported schema " + schema) + + data = '' + try: + conn.connect() + conn.putrequest("POST", url) + content_type = ct + conn.putheader('Content-type', content_type) + conn.putheader('Content-length', str(len(body))) + conn.putheader('Authorization', auth) + conn.endheaders() + conn.send(body) + except socket.error as e: + self.announce(str(e), log.ERROR) + return + + r = conn.getresponse() + if r.status == 200: + msg = 'Server response (%s): %s' % (r.status, r.reason) + self.announce(msg, log.INFO) + elif r.status == 301: + location = r.getheader('Location') + if location is None: + location = 'https://pythonhosted.org/%s/' % meta.get_name() + msg = 'Upload successful. Visit %s' % location + self.announce(msg, log.INFO) + else: + msg = 'Upload failed (%s): %s' % (r.status, r.reason) + self.announce(msg, log.ERROR) + if self.show_response: + print('-' * 75, r.read(), '-' * 75) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/config.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/config.py new file mode 100644 index 00000000..b6626043 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/config.py @@ -0,0 +1,656 @@ +from __future__ import absolute_import, unicode_literals +import io +import os +import sys + +import warnings +import functools +from collections import defaultdict +from functools import partial +from functools import wraps +from importlib import import_module + +from distutils.errors import DistutilsOptionError, DistutilsFileError +from setuptools.extern.packaging.version import LegacyVersion, parse +from setuptools.extern.six import string_types, PY3 + + +__metaclass__ = type + + +def read_configuration( + filepath, find_others=False, ignore_option_errors=False): + """Read given configuration file and returns options from it as a dict. + + :param str|unicode filepath: Path to configuration file + to get options from. + + :param bool find_others: Whether to search for other configuration files + which could be on in various places. + + :param bool ignore_option_errors: Whether to silently ignore + options, values of which could not be resolved (e.g. due to exceptions + in directives such as file:, attr:, etc.). + If False exceptions are propagated as expected. + + :rtype: dict + """ + from setuptools.dist import Distribution, _Distribution + + filepath = os.path.abspath(filepath) + + if not os.path.isfile(filepath): + raise DistutilsFileError( + 'Configuration file %s does not exist.' % filepath) + + current_directory = os.getcwd() + os.chdir(os.path.dirname(filepath)) + + try: + dist = Distribution() + + filenames = dist.find_config_files() if find_others else [] + if filepath not in filenames: + filenames.append(filepath) + + _Distribution.parse_config_files(dist, filenames=filenames) + + handlers = parse_configuration( + dist, dist.command_options, + ignore_option_errors=ignore_option_errors) + + finally: + os.chdir(current_directory) + + return configuration_to_dict(handlers) + + +def _get_option(target_obj, key): + """ + Given a target object and option key, get that option from + the target object, either through a get_{key} method or + from an attribute directly. + """ + getter_name = 'get_{key}'.format(**locals()) + by_attribute = functools.partial(getattr, target_obj, key) + getter = getattr(target_obj, getter_name, by_attribute) + return getter() + + +def configuration_to_dict(handlers): + """Returns configuration data gathered by given handlers as a dict. + + :param list[ConfigHandler] handlers: Handlers list, + usually from parse_configuration() + + :rtype: dict + """ + config_dict = defaultdict(dict) + + for handler in handlers: + for option in handler.set_options: + value = _get_option(handler.target_obj, option) + config_dict[handler.section_prefix][option] = value + + return config_dict + + +def parse_configuration( + distribution, command_options, ignore_option_errors=False): + """Performs additional parsing of configuration options + for a distribution. + + Returns a list of used option handlers. + + :param Distribution distribution: + :param dict command_options: + :param bool ignore_option_errors: Whether to silently ignore + options, values of which could not be resolved (e.g. due to exceptions + in directives such as file:, attr:, etc.). + If False exceptions are propagated as expected. + :rtype: list + """ + options = ConfigOptionsHandler( + distribution, command_options, ignore_option_errors) + options.parse() + + meta = ConfigMetadataHandler( + distribution.metadata, command_options, ignore_option_errors, + distribution.package_dir) + meta.parse() + + return meta, options + + +class ConfigHandler: + """Handles metadata supplied in configuration files.""" + + section_prefix = None + """Prefix for config sections handled by this handler. + Must be provided by class heirs. + + """ + + aliases = {} + """Options aliases. + For compatibility with various packages. E.g.: d2to1 and pbr. + Note: `-` in keys is replaced with `_` by config parser. + + """ + + def __init__(self, target_obj, options, ignore_option_errors=False): + sections = {} + + section_prefix = self.section_prefix + for section_name, section_options in options.items(): + if not section_name.startswith(section_prefix): + continue + + section_name = section_name.replace(section_prefix, '').strip('.') + sections[section_name] = section_options + + self.ignore_option_errors = ignore_option_errors + self.target_obj = target_obj + self.sections = sections + self.set_options = [] + + @property + def parsers(self): + """Metadata item name to parser function mapping.""" + raise NotImplementedError( + '%s must provide .parsers property' % self.__class__.__name__) + + def __setitem__(self, option_name, value): + unknown = tuple() + target_obj = self.target_obj + + # Translate alias into real name. + option_name = self.aliases.get(option_name, option_name) + + current_value = getattr(target_obj, option_name, unknown) + + if current_value is unknown: + raise KeyError(option_name) + + if current_value: + # Already inhabited. Skipping. + return + + skip_option = False + parser = self.parsers.get(option_name) + if parser: + try: + value = parser(value) + + except Exception: + skip_option = True + if not self.ignore_option_errors: + raise + + if skip_option: + return + + setter = getattr(target_obj, 'set_%s' % option_name, None) + if setter is None: + setattr(target_obj, option_name, value) + else: + setter(value) + + self.set_options.append(option_name) + + @classmethod + def _parse_list(cls, value, separator=','): + """Represents value as a list. + + Value is split either by separator (defaults to comma) or by lines. + + :param value: + :param separator: List items separator character. + :rtype: list + """ + if isinstance(value, list): # _get_parser_compound case + return value + + if '\n' in value: + value = value.splitlines() + else: + value = value.split(separator) + + return [chunk.strip() for chunk in value if chunk.strip()] + + @classmethod + def _parse_dict(cls, value): + """Represents value as a dict. + + :param value: + :rtype: dict + """ + separator = '=' + result = {} + for line in cls._parse_list(value): + key, sep, val = line.partition(separator) + if sep != separator: + raise DistutilsOptionError( + 'Unable to parse option value to dict: %s' % value) + result[key.strip()] = val.strip() + + return result + + @classmethod + def _parse_bool(cls, value): + """Represents value as boolean. + + :param value: + :rtype: bool + """ + value = value.lower() + return value in ('1', 'true', 'yes') + + @classmethod + def _exclude_files_parser(cls, key): + """Returns a parser function to make sure field inputs + are not files. + + Parses a value after getting the key so error messages are + more informative. + + :param key: + :rtype: callable + """ + def parser(value): + exclude_directive = 'file:' + if value.startswith(exclude_directive): + raise ValueError( + 'Only strings are accepted for the {0} field, ' + 'files are not accepted'.format(key)) + return value + return parser + + @classmethod + def _parse_file(cls, value): + """Represents value as a string, allowing including text + from nearest files using `file:` directive. + + Directive is sandboxed and won't reach anything outside + directory with setup.py. + + Examples: + file: README.rst, CHANGELOG.md, src/file.txt + + :param str value: + :rtype: str + """ + include_directive = 'file:' + + if not isinstance(value, string_types): + return value + + if not value.startswith(include_directive): + return value + + spec = value[len(include_directive):] + filepaths = (os.path.abspath(path.strip()) for path in spec.split(',')) + return '\n'.join( + cls._read_file(path) + for path in filepaths + if (cls._assert_local(path) or True) + and os.path.isfile(path) + ) + + @staticmethod + def _assert_local(filepath): + if not filepath.startswith(os.getcwd()): + raise DistutilsOptionError( + '`file:` directive can not access %s' % filepath) + + @staticmethod + def _read_file(filepath): + with io.open(filepath, encoding='utf-8') as f: + return f.read() + + @classmethod + def _parse_attr(cls, value, package_dir=None): + """Represents value as a module attribute. + + Examples: + attr: package.attr + attr: package.module.attr + + :param str value: + :rtype: str + """ + attr_directive = 'attr:' + if not value.startswith(attr_directive): + return value + + attrs_path = value.replace(attr_directive, '').strip().split('.') + attr_name = attrs_path.pop() + + module_name = '.'.join(attrs_path) + module_name = module_name or '__init__' + + parent_path = os.getcwd() + if package_dir: + if attrs_path[0] in package_dir: + # A custom path was specified for the module we want to import + custom_path = package_dir[attrs_path[0]] + parts = custom_path.rsplit('/', 1) + if len(parts) > 1: + parent_path = os.path.join(os.getcwd(), parts[0]) + module_name = parts[1] + else: + module_name = custom_path + elif '' in package_dir: + # A custom parent directory was specified for all root modules + parent_path = os.path.join(os.getcwd(), package_dir['']) + sys.path.insert(0, parent_path) + try: + module = import_module(module_name) + value = getattr(module, attr_name) + + finally: + sys.path = sys.path[1:] + + return value + + @classmethod + def _get_parser_compound(cls, *parse_methods): + """Returns parser function to represents value as a list. + + Parses a value applying given methods one after another. + + :param parse_methods: + :rtype: callable + """ + def parse(value): + parsed = value + + for method in parse_methods: + parsed = method(parsed) + + return parsed + + return parse + + @classmethod + def _parse_section_to_dict(cls, section_options, values_parser=None): + """Parses section options into a dictionary. + + Optionally applies a given parser to values. + + :param dict section_options: + :param callable values_parser: + :rtype: dict + """ + value = {} + values_parser = values_parser or (lambda val: val) + for key, (_, val) in section_options.items(): + value[key] = values_parser(val) + return value + + def parse_section(self, section_options): + """Parses configuration file section. + + :param dict section_options: + """ + for (name, (_, value)) in section_options.items(): + try: + self[name] = value + + except KeyError: + pass # Keep silent for a new option may appear anytime. + + def parse(self): + """Parses configuration file items from one + or more related sections. + + """ + for section_name, section_options in self.sections.items(): + + method_postfix = '' + if section_name: # [section.option] variant + method_postfix = '_%s' % section_name + + section_parser_method = getattr( + self, + # Dots in section names are translated into dunderscores. + ('parse_section%s' % method_postfix).replace('.', '__'), + None) + + if section_parser_method is None: + raise DistutilsOptionError( + 'Unsupported distribution option section: [%s.%s]' % ( + self.section_prefix, section_name)) + + section_parser_method(section_options) + + def _deprecated_config_handler(self, func, msg, warning_class): + """ this function will wrap around parameters that are deprecated + + :param msg: deprecation message + :param warning_class: class of warning exception to be raised + :param func: function to be wrapped around + """ + @wraps(func) + def config_handler(*args, **kwargs): + warnings.warn(msg, warning_class) + return func(*args, **kwargs) + + return config_handler + + +class ConfigMetadataHandler(ConfigHandler): + + section_prefix = 'metadata' + + aliases = { + 'home_page': 'url', + 'summary': 'description', + 'classifier': 'classifiers', + 'platform': 'platforms', + } + + strict_mode = False + """We need to keep it loose, to be partially compatible with + `pbr` and `d2to1` packages which also uses `metadata` section. + + """ + + def __init__(self, target_obj, options, ignore_option_errors=False, + package_dir=None): + super(ConfigMetadataHandler, self).__init__(target_obj, options, + ignore_option_errors) + self.package_dir = package_dir + + @property + def parsers(self): + """Metadata item name to parser function mapping.""" + parse_list = self._parse_list + parse_file = self._parse_file + parse_dict = self._parse_dict + exclude_files_parser = self._exclude_files_parser + + return { + 'platforms': parse_list, + 'keywords': parse_list, + 'provides': parse_list, + 'requires': self._deprecated_config_handler( + parse_list, + "The requires parameter is deprecated, please use " + "install_requires for runtime dependencies.", + DeprecationWarning), + 'obsoletes': parse_list, + 'classifiers': self._get_parser_compound(parse_file, parse_list), + 'license': exclude_files_parser('license'), + 'description': parse_file, + 'long_description': parse_file, + 'version': self._parse_version, + 'project_urls': parse_dict, + } + + def _parse_version(self, value): + """Parses `version` option value. + + :param value: + :rtype: str + + """ + version = self._parse_file(value) + + if version != value: + version = version.strip() + # Be strict about versions loaded from file because it's easy to + # accidentally include newlines and other unintended content + if isinstance(parse(version), LegacyVersion): + tmpl = ( + 'Version loaded from {value} does not ' + 'comply with PEP 440: {version}' + ) + raise DistutilsOptionError(tmpl.format(**locals())) + + return version + + version = self._parse_attr(value, self.package_dir) + + if callable(version): + version = version() + + if not isinstance(version, string_types): + if hasattr(version, '__iter__'): + version = '.'.join(map(str, version)) + else: + version = '%s' % version + + return version + + +class ConfigOptionsHandler(ConfigHandler): + + section_prefix = 'options' + + @property + def parsers(self): + """Metadata item name to parser function mapping.""" + parse_list = self._parse_list + parse_list_semicolon = partial(self._parse_list, separator=';') + parse_bool = self._parse_bool + parse_dict = self._parse_dict + + return { + 'zip_safe': parse_bool, + 'use_2to3': parse_bool, + 'include_package_data': parse_bool, + 'package_dir': parse_dict, + 'use_2to3_fixers': parse_list, + 'use_2to3_exclude_fixers': parse_list, + 'convert_2to3_doctests': parse_list, + 'scripts': parse_list, + 'eager_resources': parse_list, + 'dependency_links': parse_list, + 'namespace_packages': parse_list, + 'install_requires': parse_list_semicolon, + 'setup_requires': parse_list_semicolon, + 'tests_require': parse_list_semicolon, + 'packages': self._parse_packages, + 'entry_points': self._parse_file, + 'py_modules': parse_list, + } + + def _parse_packages(self, value): + """Parses `packages` option value. + + :param value: + :rtype: list + """ + find_directives = ['find:', 'find_namespace:'] + trimmed_value = value.strip() + + if trimmed_value not in find_directives: + return self._parse_list(value) + + findns = trimmed_value == find_directives[1] + if findns and not PY3: + raise DistutilsOptionError( + 'find_namespace: directive is unsupported on Python < 3.3') + + # Read function arguments from a dedicated section. + find_kwargs = self.parse_section_packages__find( + self.sections.get('packages.find', {})) + + if findns: + from setuptools import find_namespace_packages as find_packages + else: + from setuptools import find_packages + + return find_packages(**find_kwargs) + + def parse_section_packages__find(self, section_options): + """Parses `packages.find` configuration file section. + + To be used in conjunction with _parse_packages(). + + :param dict section_options: + """ + section_data = self._parse_section_to_dict( + section_options, self._parse_list) + + valid_keys = ['where', 'include', 'exclude'] + + find_kwargs = dict( + [(k, v) for k, v in section_data.items() if k in valid_keys and v]) + + where = find_kwargs.get('where') + if where is not None: + find_kwargs['where'] = where[0] # cast list to single val + + return find_kwargs + + def parse_section_entry_points(self, section_options): + """Parses `entry_points` configuration file section. + + :param dict section_options: + """ + parsed = self._parse_section_to_dict(section_options, self._parse_list) + self['entry_points'] = parsed + + def _parse_package_data(self, section_options): + parsed = self._parse_section_to_dict(section_options, self._parse_list) + + root = parsed.get('*') + if root: + parsed[''] = root + del parsed['*'] + + return parsed + + def parse_section_package_data(self, section_options): + """Parses `package_data` configuration file section. + + :param dict section_options: + """ + self['package_data'] = self._parse_package_data(section_options) + + def parse_section_exclude_package_data(self, section_options): + """Parses `exclude_package_data` configuration file section. + + :param dict section_options: + """ + self['exclude_package_data'] = self._parse_package_data( + section_options) + + def parse_section_extras_require(self, section_options): + """Parses `extras_require` configuration file section. + + :param dict section_options: + """ + parse_list = partial(self._parse_list, separator=';') + self['extras_require'] = self._parse_section_to_dict( + section_options, parse_list) + + def parse_section_data_files(self, section_options): + """Parses `data_files` configuration file section. + + :param dict section_options: + """ + parsed = self._parse_section_to_dict(section_options, self._parse_list) + self['data_files'] = [(k, v) for k, v in parsed.items()] diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/dep_util.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/dep_util.py new file mode 100644 index 00000000..2931c13e --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/dep_util.py @@ -0,0 +1,23 @@ +from distutils.dep_util import newer_group + +# yes, this is was almost entirely copy-pasted from +# 'newer_pairwise()', this is just another convenience +# function. +def newer_pairwise_group(sources_groups, targets): + """Walk both arguments in parallel, testing if each source group is newer + than its corresponding target. Returns a pair of lists (sources_groups, + targets) where sources is newer than target, according to the semantics + of 'newer_group()'. + """ + if len(sources_groups) != len(targets): + raise ValueError("'sources_group' and 'targets' must be the same length") + + # build a pair of lists (sources_groups, targets) where source is newer + n_sources = [] + n_targets = [] + for i in range(len(sources_groups)): + if newer_group(sources_groups[i], targets[i]): + n_sources.append(sources_groups[i]) + n_targets.append(targets[i]) + + return n_sources, n_targets diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/depends.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/depends.py new file mode 100644 index 00000000..45e7052d --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/depends.py @@ -0,0 +1,186 @@ +import sys +import imp +import marshal +from distutils.version import StrictVersion +from imp import PKG_DIRECTORY, PY_COMPILED, PY_SOURCE, PY_FROZEN + +from .py33compat import Bytecode + + +__all__ = [ + 'Require', 'find_module', 'get_module_constant', 'extract_constant' +] + + +class Require: + """A prerequisite to building or installing a distribution""" + + def __init__(self, name, requested_version, module, homepage='', + attribute=None, format=None): + + if format is None and requested_version is not None: + format = StrictVersion + + if format is not None: + requested_version = format(requested_version) + if attribute is None: + attribute = '__version__' + + self.__dict__.update(locals()) + del self.self + + def full_name(self): + """Return full package/distribution name, w/version""" + if self.requested_version is not None: + return '%s-%s' % (self.name, self.requested_version) + return self.name + + def version_ok(self, version): + """Is 'version' sufficiently up-to-date?""" + return self.attribute is None or self.format is None or \ + str(version) != "unknown" and version >= self.requested_version + + def get_version(self, paths=None, default="unknown"): + """Get version number of installed module, 'None', or 'default' + + Search 'paths' for module. If not found, return 'None'. If found, + return the extracted version attribute, or 'default' if no version + attribute was specified, or the value cannot be determined without + importing the module. The version is formatted according to the + requirement's version format (if any), unless it is 'None' or the + supplied 'default'. + """ + + if self.attribute is None: + try: + f, p, i = find_module(self.module, paths) + if f: + f.close() + return default + except ImportError: + return None + + v = get_module_constant(self.module, self.attribute, default, paths) + + if v is not None and v is not default and self.format is not None: + return self.format(v) + + return v + + def is_present(self, paths=None): + """Return true if dependency is present on 'paths'""" + return self.get_version(paths) is not None + + def is_current(self, paths=None): + """Return true if dependency is present and up-to-date on 'paths'""" + version = self.get_version(paths) + if version is None: + return False + return self.version_ok(version) + + +def find_module(module, paths=None): + """Just like 'imp.find_module()', but with package support""" + + parts = module.split('.') + + while parts: + part = parts.pop(0) + f, path, (suffix, mode, kind) = info = imp.find_module(part, paths) + + if kind == PKG_DIRECTORY: + parts = parts or ['__init__'] + paths = [path] + + elif parts: + raise ImportError("Can't find %r in %s" % (parts, module)) + + return info + + +def get_module_constant(module, symbol, default=-1, paths=None): + """Find 'module' by searching 'paths', and extract 'symbol' + + Return 'None' if 'module' does not exist on 'paths', or it does not define + 'symbol'. If the module defines 'symbol' as a constant, return the + constant. Otherwise, return 'default'.""" + + try: + f, path, (suffix, mode, kind) = find_module(module, paths) + except ImportError: + # Module doesn't exist + return None + + try: + if kind == PY_COMPILED: + f.read(8) # skip magic & date + code = marshal.load(f) + elif kind == PY_FROZEN: + code = imp.get_frozen_object(module) + elif kind == PY_SOURCE: + code = compile(f.read(), path, 'exec') + else: + # Not something we can parse; we'll have to import it. :( + if module not in sys.modules: + imp.load_module(module, f, path, (suffix, mode, kind)) + return getattr(sys.modules[module], symbol, None) + + finally: + if f: + f.close() + + return extract_constant(code, symbol, default) + + +def extract_constant(code, symbol, default=-1): + """Extract the constant value of 'symbol' from 'code' + + If the name 'symbol' is bound to a constant value by the Python code + object 'code', return that value. If 'symbol' is bound to an expression, + return 'default'. Otherwise, return 'None'. + + Return value is based on the first assignment to 'symbol'. 'symbol' must + be a global, or at least a non-"fast" local in the code block. That is, + only 'STORE_NAME' and 'STORE_GLOBAL' opcodes are checked, and 'symbol' + must be present in 'code.co_names'. + """ + if symbol not in code.co_names: + # name's not there, can't possibly be an assignment + return None + + name_idx = list(code.co_names).index(symbol) + + STORE_NAME = 90 + STORE_GLOBAL = 97 + LOAD_CONST = 100 + + const = default + + for byte_code in Bytecode(code): + op = byte_code.opcode + arg = byte_code.arg + + if op == LOAD_CONST: + const = code.co_consts[arg] + elif arg == name_idx and (op == STORE_NAME or op == STORE_GLOBAL): + return const + else: + const = default + + +def _update_globals(): + """ + Patch the globals to remove the objects not available on some platforms. + + XXX it'd be better to test assertions about bytecode instead. + """ + + if not sys.platform.startswith('java') and sys.platform != 'cli': + return + incompatible = 'extract_constant', 'get_module_constant' + for name in incompatible: + del globals()[name] + __all__.remove(name) + + +_update_globals() diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/dist.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/dist.py new file mode 100644 index 00000000..9a165de0 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/dist.py @@ -0,0 +1,1278 @@ +# -*- coding: utf-8 -*- +__all__ = ['Distribution'] + +import io +import sys +import re +import os +import warnings +import numbers +import distutils.log +import distutils.core +import distutils.cmd +import distutils.dist +from distutils.util import strtobool +from distutils.debug import DEBUG +from distutils.fancy_getopt import translate_longopt +import itertools + +from collections import defaultdict +from email import message_from_file + +from distutils.errors import ( + DistutilsOptionError, DistutilsPlatformError, DistutilsSetupError, +) +from distutils.util import rfc822_escape +from distutils.version import StrictVersion + +from setuptools.extern import six +from setuptools.extern import packaging +from setuptools.extern.six.moves import map, filter, filterfalse + +from . import SetuptoolsDeprecationWarning + +from setuptools.depends import Require +from setuptools import windows_support +from setuptools.monkey import get_unpatched +from setuptools.config import parse_configuration +import pkg_resources + +__import__('setuptools.extern.packaging.specifiers') +__import__('setuptools.extern.packaging.version') + + +def _get_unpatched(cls): + warnings.warn("Do not call this function", DistDeprecationWarning) + return get_unpatched(cls) + + +def get_metadata_version(self): + mv = getattr(self, 'metadata_version', None) + + if mv is None: + if self.long_description_content_type or self.provides_extras: + mv = StrictVersion('2.1') + elif (self.maintainer is not None or + self.maintainer_email is not None or + getattr(self, 'python_requires', None) is not None): + mv = StrictVersion('1.2') + elif (self.provides or self.requires or self.obsoletes or + self.classifiers or self.download_url): + mv = StrictVersion('1.1') + else: + mv = StrictVersion('1.0') + + self.metadata_version = mv + + return mv + + +def read_pkg_file(self, file): + """Reads the metadata values from a file object.""" + msg = message_from_file(file) + + def _read_field(name): + value = msg[name] + if value == 'UNKNOWN': + return None + return value + + def _read_list(name): + values = msg.get_all(name, None) + if values == []: + return None + return values + + self.metadata_version = StrictVersion(msg['metadata-version']) + self.name = _read_field('name') + self.version = _read_field('version') + self.description = _read_field('summary') + # we are filling author only. + self.author = _read_field('author') + self.maintainer = None + self.author_email = _read_field('author-email') + self.maintainer_email = None + self.url = _read_field('home-page') + self.license = _read_field('license') + + if 'download-url' in msg: + self.download_url = _read_field('download-url') + else: + self.download_url = None + + self.long_description = _read_field('description') + self.description = _read_field('summary') + + if 'keywords' in msg: + self.keywords = _read_field('keywords').split(',') + + self.platforms = _read_list('platform') + self.classifiers = _read_list('classifier') + + # PEP 314 - these fields only exist in 1.1 + if self.metadata_version == StrictVersion('1.1'): + self.requires = _read_list('requires') + self.provides = _read_list('provides') + self.obsoletes = _read_list('obsoletes') + else: + self.requires = None + self.provides = None + self.obsoletes = None + + +# Based on Python 3.5 version +def write_pkg_file(self, file): + """Write the PKG-INFO format data to a file object. + """ + version = self.get_metadata_version() + + if six.PY2: + def write_field(key, value): + file.write("%s: %s\n" % (key, self._encode_field(value))) + else: + def write_field(key, value): + file.write("%s: %s\n" % (key, value)) + + write_field('Metadata-Version', str(version)) + write_field('Name', self.get_name()) + write_field('Version', self.get_version()) + write_field('Summary', self.get_description()) + write_field('Home-page', self.get_url()) + + if version < StrictVersion('1.2'): + write_field('Author', self.get_contact()) + write_field('Author-email', self.get_contact_email()) + else: + optional_fields = ( + ('Author', 'author'), + ('Author-email', 'author_email'), + ('Maintainer', 'maintainer'), + ('Maintainer-email', 'maintainer_email'), + ) + + for field, attr in optional_fields: + attr_val = getattr(self, attr) + + if attr_val is not None: + write_field(field, attr_val) + + write_field('License', self.get_license()) + if self.download_url: + write_field('Download-URL', self.download_url) + for project_url in self.project_urls.items(): + write_field('Project-URL', '%s, %s' % project_url) + + long_desc = rfc822_escape(self.get_long_description()) + write_field('Description', long_desc) + + keywords = ','.join(self.get_keywords()) + if keywords: + write_field('Keywords', keywords) + + if version >= StrictVersion('1.2'): + for platform in self.get_platforms(): + write_field('Platform', platform) + else: + self._write_list(file, 'Platform', self.get_platforms()) + + self._write_list(file, 'Classifier', self.get_classifiers()) + + # PEP 314 + self._write_list(file, 'Requires', self.get_requires()) + self._write_list(file, 'Provides', self.get_provides()) + self._write_list(file, 'Obsoletes', self.get_obsoletes()) + + # Setuptools specific for PEP 345 + if hasattr(self, 'python_requires'): + write_field('Requires-Python', self.python_requires) + + # PEP 566 + if self.long_description_content_type: + write_field( + 'Description-Content-Type', + self.long_description_content_type + ) + if self.provides_extras: + for extra in self.provides_extras: + write_field('Provides-Extra', extra) + + +sequence = tuple, list + + +def check_importable(dist, attr, value): + try: + ep = pkg_resources.EntryPoint.parse('x=' + value) + assert not ep.extras + except (TypeError, ValueError, AttributeError, AssertionError): + raise DistutilsSetupError( + "%r must be importable 'module:attrs' string (got %r)" + % (attr, value) + ) + + +def assert_string_list(dist, attr, value): + """Verify that value is a string list or None""" + try: + assert ''.join(value) != value + except (TypeError, ValueError, AttributeError, AssertionError): + raise DistutilsSetupError( + "%r must be a list of strings (got %r)" % (attr, value) + ) + + +def check_nsp(dist, attr, value): + """Verify that namespace packages are valid""" + ns_packages = value + assert_string_list(dist, attr, ns_packages) + for nsp in ns_packages: + if not dist.has_contents_for(nsp): + raise DistutilsSetupError( + "Distribution contains no modules or packages for " + + "namespace package %r" % nsp + ) + parent, sep, child = nsp.rpartition('.') + if parent and parent not in ns_packages: + distutils.log.warn( + "WARNING: %r is declared as a package namespace, but %r" + " is not: please correct this in setup.py", nsp, parent + ) + + +def check_extras(dist, attr, value): + """Verify that extras_require mapping is valid""" + try: + list(itertools.starmap(_check_extra, value.items())) + except (TypeError, ValueError, AttributeError): + raise DistutilsSetupError( + "'extras_require' must be a dictionary whose values are " + "strings or lists of strings containing valid project/version " + "requirement specifiers." + ) + + +def _check_extra(extra, reqs): + name, sep, marker = extra.partition(':') + if marker and pkg_resources.invalid_marker(marker): + raise DistutilsSetupError("Invalid environment marker: " + marker) + list(pkg_resources.parse_requirements(reqs)) + + +def assert_bool(dist, attr, value): + """Verify that value is True, False, 0, or 1""" + if bool(value) != value: + tmpl = "{attr!r} must be a boolean value (got {value!r})" + raise DistutilsSetupError(tmpl.format(attr=attr, value=value)) + + +def check_requirements(dist, attr, value): + """Verify that install_requires is a valid requirements list""" + try: + list(pkg_resources.parse_requirements(value)) + if isinstance(value, (dict, set)): + raise TypeError("Unordered types are not allowed") + except (TypeError, ValueError) as error: + tmpl = ( + "{attr!r} must be a string or list of strings " + "containing valid project/version requirement specifiers; {error}" + ) + raise DistutilsSetupError(tmpl.format(attr=attr, error=error)) + + +def check_specifier(dist, attr, value): + """Verify that value is a valid version specifier""" + try: + packaging.specifiers.SpecifierSet(value) + except packaging.specifiers.InvalidSpecifier as error: + tmpl = ( + "{attr!r} must be a string " + "containing valid version specifiers; {error}" + ) + raise DistutilsSetupError(tmpl.format(attr=attr, error=error)) + + +def check_entry_points(dist, attr, value): + """Verify that entry_points map is parseable""" + try: + pkg_resources.EntryPoint.parse_map(value) + except ValueError as e: + raise DistutilsSetupError(e) + + +def check_test_suite(dist, attr, value): + if not isinstance(value, six.string_types): + raise DistutilsSetupError("test_suite must be a string") + + +def check_package_data(dist, attr, value): + """Verify that value is a dictionary of package names to glob lists""" + if isinstance(value, dict): + for k, v in value.items(): + if not isinstance(k, str): + break + try: + iter(v) + except TypeError: + break + else: + return + raise DistutilsSetupError( + attr + " must be a dictionary mapping package names to lists of " + "wildcard patterns" + ) + + +def check_packages(dist, attr, value): + for pkgname in value: + if not re.match(r'\w+(\.\w+)*', pkgname): + distutils.log.warn( + "WARNING: %r not a valid package name; please use only " + ".-separated package names in setup.py", pkgname + ) + + +_Distribution = get_unpatched(distutils.core.Distribution) + + +class Distribution(_Distribution): + """Distribution with support for features, tests, and package data + + This is an enhanced version of 'distutils.dist.Distribution' that + effectively adds the following new optional keyword arguments to 'setup()': + + 'install_requires' -- a string or sequence of strings specifying project + versions that the distribution requires when installed, in the format + used by 'pkg_resources.require()'. They will be installed + automatically when the package is installed. If you wish to use + packages that are not available in PyPI, or want to give your users an + alternate download location, you can add a 'find_links' option to the + '[easy_install]' section of your project's 'setup.cfg' file, and then + setuptools will scan the listed web pages for links that satisfy the + requirements. + + 'extras_require' -- a dictionary mapping names of optional "extras" to the + additional requirement(s) that using those extras incurs. For example, + this:: + + extras_require = dict(reST = ["docutils>=0.3", "reSTedit"]) + + indicates that the distribution can optionally provide an extra + capability called "reST", but it can only be used if docutils and + reSTedit are installed. If the user installs your package using + EasyInstall and requests one of your extras, the corresponding + additional requirements will be installed if needed. + + 'features' **deprecated** -- a dictionary mapping option names to + 'setuptools.Feature' + objects. Features are a portion of the distribution that can be + included or excluded based on user options, inter-feature dependencies, + and availability on the current system. Excluded features are omitted + from all setup commands, including source and binary distributions, so + you can create multiple distributions from the same source tree. + Feature names should be valid Python identifiers, except that they may + contain the '-' (minus) sign. Features can be included or excluded + via the command line options '--with-X' and '--without-X', where 'X' is + the name of the feature. Whether a feature is included by default, and + whether you are allowed to control this from the command line, is + determined by the Feature object. See the 'Feature' class for more + information. + + 'test_suite' -- the name of a test suite to run for the 'test' command. + If the user runs 'python setup.py test', the package will be installed, + and the named test suite will be run. The format is the same as + would be used on a 'unittest.py' command line. That is, it is the + dotted name of an object to import and call to generate a test suite. + + 'package_data' -- a dictionary mapping package names to lists of filenames + or globs to use to find data files contained in the named packages. + If the dictionary has filenames or globs listed under '""' (the empty + string), those names will be searched for in every package, in addition + to any names for the specific package. Data files found using these + names/globs will be installed along with the package, in the same + location as the package. Note that globs are allowed to reference + the contents of non-package subdirectories, as long as you use '/' as + a path separator. (Globs are automatically converted to + platform-specific paths at runtime.) + + In addition to these new keywords, this class also has several new methods + for manipulating the distribution's contents. For example, the 'include()' + and 'exclude()' methods can be thought of as in-place add and subtract + commands that add or remove packages, modules, extensions, and so on from + the distribution. They are used by the feature subsystem to configure the + distribution for the included and excluded features. + """ + + _DISTUTILS_UNSUPPORTED_METADATA = { + 'long_description_content_type': None, + 'project_urls': dict, + 'provides_extras': set, + } + + _patched_dist = None + + def patch_missing_pkg_info(self, attrs): + # Fake up a replacement for the data that would normally come from + # PKG-INFO, but which might not yet be built if this is a fresh + # checkout. + # + if not attrs or 'name' not in attrs or 'version' not in attrs: + return + key = pkg_resources.safe_name(str(attrs['name'])).lower() + dist = pkg_resources.working_set.by_key.get(key) + if dist is not None and not dist.has_metadata('PKG-INFO'): + dist._version = pkg_resources.safe_version(str(attrs['version'])) + self._patched_dist = dist + + def __init__(self, attrs=None): + have_package_data = hasattr(self, "package_data") + if not have_package_data: + self.package_data = {} + attrs = attrs or {} + if 'features' in attrs or 'require_features' in attrs: + Feature.warn_deprecated() + self.require_features = [] + self.features = {} + self.dist_files = [] + # Filter-out setuptools' specific options. + self.src_root = attrs.pop("src_root", None) + self.patch_missing_pkg_info(attrs) + self.dependency_links = attrs.pop('dependency_links', []) + self.setup_requires = attrs.pop('setup_requires', []) + for ep in pkg_resources.iter_entry_points('distutils.setup_keywords'): + vars(self).setdefault(ep.name, None) + _Distribution.__init__(self, { + k: v for k, v in attrs.items() + if k not in self._DISTUTILS_UNSUPPORTED_METADATA + }) + + # Fill-in missing metadata fields not supported by distutils. + # Note some fields may have been set by other tools (e.g. pbr) + # above; they are taken preferrentially to setup() arguments + for option, default in self._DISTUTILS_UNSUPPORTED_METADATA.items(): + for source in self.metadata.__dict__, attrs: + if option in source: + value = source[option] + break + else: + value = default() if default else None + setattr(self.metadata, option, value) + + if isinstance(self.metadata.version, numbers.Number): + # Some people apparently take "version number" too literally :) + self.metadata.version = str(self.metadata.version) + + if self.metadata.version is not None: + try: + ver = packaging.version.Version(self.metadata.version) + normalized_version = str(ver) + if self.metadata.version != normalized_version: + warnings.warn( + "Normalizing '%s' to '%s'" % ( + self.metadata.version, + normalized_version, + ) + ) + self.metadata.version = normalized_version + except (packaging.version.InvalidVersion, TypeError): + warnings.warn( + "The version specified (%r) is an invalid version, this " + "may not work as expected with newer versions of " + "setuptools, pip, and PyPI. Please see PEP 440 for more " + "details." % self.metadata.version + ) + self._finalize_requires() + + def _finalize_requires(self): + """ + Set `metadata.python_requires` and fix environment markers + in `install_requires` and `extras_require`. + """ + if getattr(self, 'python_requires', None): + self.metadata.python_requires = self.python_requires + + if getattr(self, 'extras_require', None): + for extra in self.extras_require.keys(): + # Since this gets called multiple times at points where the + # keys have become 'converted' extras, ensure that we are only + # truly adding extras we haven't seen before here. + extra = extra.split(':')[0] + if extra: + self.metadata.provides_extras.add(extra) + + self._convert_extras_requirements() + self._move_install_requirements_markers() + + def _convert_extras_requirements(self): + """ + Convert requirements in `extras_require` of the form + `"extra": ["barbazquux; {marker}"]` to + `"extra:{marker}": ["barbazquux"]`. + """ + spec_ext_reqs = getattr(self, 'extras_require', None) or {} + self._tmp_extras_require = defaultdict(list) + for section, v in spec_ext_reqs.items(): + # Do not strip empty sections. + self._tmp_extras_require[section] + for r in pkg_resources.parse_requirements(v): + suffix = self._suffix_for(r) + self._tmp_extras_require[section + suffix].append(r) + + @staticmethod + def _suffix_for(req): + """ + For a requirement, return the 'extras_require' suffix for + that requirement. + """ + return ':' + str(req.marker) if req.marker else '' + + def _move_install_requirements_markers(self): + """ + Move requirements in `install_requires` that are using environment + markers `extras_require`. + """ + + # divide the install_requires into two sets, simple ones still + # handled by install_requires and more complex ones handled + # by extras_require. + + def is_simple_req(req): + return not req.marker + + spec_inst_reqs = getattr(self, 'install_requires', None) or () + inst_reqs = list(pkg_resources.parse_requirements(spec_inst_reqs)) + simple_reqs = filter(is_simple_req, inst_reqs) + complex_reqs = filterfalse(is_simple_req, inst_reqs) + self.install_requires = list(map(str, simple_reqs)) + + for r in complex_reqs: + self._tmp_extras_require[':' + str(r.marker)].append(r) + self.extras_require = dict( + (k, [str(r) for r in map(self._clean_req, v)]) + for k, v in self._tmp_extras_require.items() + ) + + def _clean_req(self, req): + """ + Given a Requirement, remove environment markers and return it. + """ + req.marker = None + return req + + def _parse_config_files(self, filenames=None): + """ + Adapted from distutils.dist.Distribution.parse_config_files, + this method provides the same functionality in subtly-improved + ways. + """ + from setuptools.extern.six.moves.configparser import ConfigParser + + # Ignore install directory options if we have a venv + if six.PY3 and sys.prefix != sys.base_prefix: + ignore_options = [ + 'install-base', 'install-platbase', 'install-lib', + 'install-platlib', 'install-purelib', 'install-headers', + 'install-scripts', 'install-data', 'prefix', 'exec-prefix', + 'home', 'user', 'root'] + else: + ignore_options = [] + + ignore_options = frozenset(ignore_options) + + if filenames is None: + filenames = self.find_config_files() + + if DEBUG: + self.announce("Distribution.parse_config_files():") + + parser = ConfigParser() + for filename in filenames: + with io.open(filename, encoding='utf-8') as reader: + if DEBUG: + self.announce(" reading {filename}".format(**locals())) + (parser.read_file if six.PY3 else parser.readfp)(reader) + for section in parser.sections(): + options = parser.options(section) + opt_dict = self.get_option_dict(section) + + for opt in options: + if opt != '__name__' and opt not in ignore_options: + val = self._try_str(parser.get(section, opt)) + opt = opt.replace('-', '_') + opt_dict[opt] = (filename, val) + + # Make the ConfigParser forget everything (so we retain + # the original filenames that options come from) + parser.__init__() + + # If there was a "global" section in the config file, use it + # to set Distribution options. + + if 'global' in self.command_options: + for (opt, (src, val)) in self.command_options['global'].items(): + alias = self.negative_opt.get(opt) + try: + if alias: + setattr(self, alias, not strtobool(val)) + elif opt in ('verbose', 'dry_run'): # ugh! + setattr(self, opt, strtobool(val)) + else: + setattr(self, opt, val) + except ValueError as msg: + raise DistutilsOptionError(msg) + + @staticmethod + def _try_str(val): + """ + On Python 2, much of distutils relies on string values being of + type 'str' (bytes) and not unicode text. If the value can be safely + encoded to bytes using the default encoding, prefer that. + + Why the default encoding? Because that value can be implicitly + decoded back to text if needed. + + Ref #1653 + """ + if six.PY3: + return val + try: + return val.encode() + except UnicodeEncodeError: + pass + return val + + def _set_command_options(self, command_obj, option_dict=None): + """ + Set the options for 'command_obj' from 'option_dict'. Basically + this means copying elements of a dictionary ('option_dict') to + attributes of an instance ('command'). + + 'command_obj' must be a Command instance. If 'option_dict' is not + supplied, uses the standard option dictionary for this command + (from 'self.command_options'). + + (Adopted from distutils.dist.Distribution._set_command_options) + """ + command_name = command_obj.get_command_name() + if option_dict is None: + option_dict = self.get_option_dict(command_name) + + if DEBUG: + self.announce(" setting options for '%s' command:" % command_name) + for (option, (source, value)) in option_dict.items(): + if DEBUG: + self.announce(" %s = %s (from %s)" % (option, value, + source)) + try: + bool_opts = [translate_longopt(o) + for o in command_obj.boolean_options] + except AttributeError: + bool_opts = [] + try: + neg_opt = command_obj.negative_opt + except AttributeError: + neg_opt = {} + + try: + is_string = isinstance(value, six.string_types) + if option in neg_opt and is_string: + setattr(command_obj, neg_opt[option], not strtobool(value)) + elif option in bool_opts and is_string: + setattr(command_obj, option, strtobool(value)) + elif hasattr(command_obj, option): + setattr(command_obj, option, value) + else: + raise DistutilsOptionError( + "error in %s: command '%s' has no such option '%s'" + % (source, command_name, option)) + except ValueError as msg: + raise DistutilsOptionError(msg) + + def parse_config_files(self, filenames=None, ignore_option_errors=False): + """Parses configuration files from various levels + and loads configuration. + + """ + self._parse_config_files(filenames=filenames) + + parse_configuration(self, self.command_options, + ignore_option_errors=ignore_option_errors) + self._finalize_requires() + + def parse_command_line(self): + """Process features after parsing command line options""" + result = _Distribution.parse_command_line(self) + if self.features: + self._finalize_features() + return result + + def _feature_attrname(self, name): + """Convert feature name to corresponding option attribute name""" + return 'with_' + name.replace('-', '_') + + def fetch_build_eggs(self, requires): + """Resolve pre-setup requirements""" + resolved_dists = pkg_resources.working_set.resolve( + pkg_resources.parse_requirements(requires), + installer=self.fetch_build_egg, + replace_conflicting=True, + ) + for dist in resolved_dists: + pkg_resources.working_set.add(dist, replace=True) + return resolved_dists + + def finalize_options(self): + _Distribution.finalize_options(self) + if self.features: + self._set_global_opts_from_features() + + for ep in pkg_resources.iter_entry_points('distutils.setup_keywords'): + value = getattr(self, ep.name, None) + if value is not None: + ep.require(installer=self.fetch_build_egg) + ep.load()(self, ep.name, value) + if getattr(self, 'convert_2to3_doctests', None): + # XXX may convert to set here when we can rely on set being builtin + self.convert_2to3_doctests = [ + os.path.abspath(p) + for p in self.convert_2to3_doctests + ] + else: + self.convert_2to3_doctests = [] + + def get_egg_cache_dir(self): + egg_cache_dir = os.path.join(os.curdir, '.eggs') + if not os.path.exists(egg_cache_dir): + os.mkdir(egg_cache_dir) + windows_support.hide_file(egg_cache_dir) + readme_txt_filename = os.path.join(egg_cache_dir, 'README.txt') + with open(readme_txt_filename, 'w') as f: + f.write('This directory contains eggs that were downloaded ' + 'by setuptools to build, test, and run plug-ins.\n\n') + f.write('This directory caches those eggs to prevent ' + 'repeated downloads.\n\n') + f.write('However, it is safe to delete this directory.\n\n') + + return egg_cache_dir + + def fetch_build_egg(self, req): + """Fetch an egg needed for building""" + from setuptools.command.easy_install import easy_install + dist = self.__class__({'script_args': ['easy_install']}) + opts = dist.get_option_dict('easy_install') + opts.clear() + opts.update( + (k, v) + for k, v in self.get_option_dict('easy_install').items() + if k in ( + # don't use any other settings + 'find_links', 'site_dirs', 'index_url', + 'optimize', 'site_dirs', 'allow_hosts', + )) + if self.dependency_links: + links = self.dependency_links[:] + if 'find_links' in opts: + links = opts['find_links'][1] + links + opts['find_links'] = ('setup', links) + install_dir = self.get_egg_cache_dir() + cmd = easy_install( + dist, args=["x"], install_dir=install_dir, + exclude_scripts=True, + always_copy=False, build_directory=None, editable=False, + upgrade=False, multi_version=True, no_report=True, user=False + ) + cmd.ensure_finalized() + return cmd.easy_install(req) + + def _set_global_opts_from_features(self): + """Add --with-X/--without-X options based on optional features""" + + go = [] + no = self.negative_opt.copy() + + for name, feature in self.features.items(): + self._set_feature(name, None) + feature.validate(self) + + if feature.optional: + descr = feature.description + incdef = ' (default)' + excdef = '' + if not feature.include_by_default(): + excdef, incdef = incdef, excdef + + new = ( + ('with-' + name, None, 'include ' + descr + incdef), + ('without-' + name, None, 'exclude ' + descr + excdef), + ) + go.extend(new) + no['without-' + name] = 'with-' + name + + self.global_options = self.feature_options = go + self.global_options + self.negative_opt = self.feature_negopt = no + + def _finalize_features(self): + """Add/remove features and resolve dependencies between them""" + + # First, flag all the enabled items (and thus their dependencies) + for name, feature in self.features.items(): + enabled = self.feature_is_included(name) + if enabled or (enabled is None and feature.include_by_default()): + feature.include_in(self) + self._set_feature(name, 1) + + # Then disable the rest, so that off-by-default features don't + # get flagged as errors when they're required by an enabled feature + for name, feature in self.features.items(): + if not self.feature_is_included(name): + feature.exclude_from(self) + self._set_feature(name, 0) + + def get_command_class(self, command): + """Pluggable version of get_command_class()""" + if command in self.cmdclass: + return self.cmdclass[command] + + eps = pkg_resources.iter_entry_points('distutils.commands', command) + for ep in eps: + ep.require(installer=self.fetch_build_egg) + self.cmdclass[command] = cmdclass = ep.load() + return cmdclass + else: + return _Distribution.get_command_class(self, command) + + def print_commands(self): + for ep in pkg_resources.iter_entry_points('distutils.commands'): + if ep.name not in self.cmdclass: + # don't require extras as the commands won't be invoked + cmdclass = ep.resolve() + self.cmdclass[ep.name] = cmdclass + return _Distribution.print_commands(self) + + def get_command_list(self): + for ep in pkg_resources.iter_entry_points('distutils.commands'): + if ep.name not in self.cmdclass: + # don't require extras as the commands won't be invoked + cmdclass = ep.resolve() + self.cmdclass[ep.name] = cmdclass + return _Distribution.get_command_list(self) + + def _set_feature(self, name, status): + """Set feature's inclusion status""" + setattr(self, self._feature_attrname(name), status) + + def feature_is_included(self, name): + """Return 1 if feature is included, 0 if excluded, 'None' if unknown""" + return getattr(self, self._feature_attrname(name)) + + def include_feature(self, name): + """Request inclusion of feature named 'name'""" + + if self.feature_is_included(name) == 0: + descr = self.features[name].description + raise DistutilsOptionError( + descr + " is required, but was excluded or is not available" + ) + self.features[name].include_in(self) + self._set_feature(name, 1) + + def include(self, **attrs): + """Add items to distribution that are named in keyword arguments + + For example, 'dist.include(py_modules=["x"])' would add 'x' to + the distribution's 'py_modules' attribute, if it was not already + there. + + Currently, this method only supports inclusion for attributes that are + lists or tuples. If you need to add support for adding to other + attributes in this or a subclass, you can add an '_include_X' method, + where 'X' is the name of the attribute. The method will be called with + the value passed to 'include()'. So, 'dist.include(foo={"bar":"baz"})' + will try to call 'dist._include_foo({"bar":"baz"})', which can then + handle whatever special inclusion logic is needed. + """ + for k, v in attrs.items(): + include = getattr(self, '_include_' + k, None) + if include: + include(v) + else: + self._include_misc(k, v) + + def exclude_package(self, package): + """Remove packages, modules, and extensions in named package""" + + pfx = package + '.' + if self.packages: + self.packages = [ + p for p in self.packages + if p != package and not p.startswith(pfx) + ] + + if self.py_modules: + self.py_modules = [ + p for p in self.py_modules + if p != package and not p.startswith(pfx) + ] + + if self.ext_modules: + self.ext_modules = [ + p for p in self.ext_modules + if p.name != package and not p.name.startswith(pfx) + ] + + def has_contents_for(self, package): + """Return true if 'exclude_package(package)' would do something""" + + pfx = package + '.' + + for p in self.iter_distribution_names(): + if p == package or p.startswith(pfx): + return True + + def _exclude_misc(self, name, value): + """Handle 'exclude()' for list/tuple attrs without a special handler""" + if not isinstance(value, sequence): + raise DistutilsSetupError( + "%s: setting must be a list or tuple (%r)" % (name, value) + ) + try: + old = getattr(self, name) + except AttributeError: + raise DistutilsSetupError( + "%s: No such distribution setting" % name + ) + if old is not None and not isinstance(old, sequence): + raise DistutilsSetupError( + name + ": this setting cannot be changed via include/exclude" + ) + elif old: + setattr(self, name, [item for item in old if item not in value]) + + def _include_misc(self, name, value): + """Handle 'include()' for list/tuple attrs without a special handler""" + + if not isinstance(value, sequence): + raise DistutilsSetupError( + "%s: setting must be a list (%r)" % (name, value) + ) + try: + old = getattr(self, name) + except AttributeError: + raise DistutilsSetupError( + "%s: No such distribution setting" % name + ) + if old is None: + setattr(self, name, value) + elif not isinstance(old, sequence): + raise DistutilsSetupError( + name + ": this setting cannot be changed via include/exclude" + ) + else: + new = [item for item in value if item not in old] + setattr(self, name, old + new) + + def exclude(self, **attrs): + """Remove items from distribution that are named in keyword arguments + + For example, 'dist.exclude(py_modules=["x"])' would remove 'x' from + the distribution's 'py_modules' attribute. Excluding packages uses + the 'exclude_package()' method, so all of the package's contained + packages, modules, and extensions are also excluded. + + Currently, this method only supports exclusion from attributes that are + lists or tuples. If you need to add support for excluding from other + attributes in this or a subclass, you can add an '_exclude_X' method, + where 'X' is the name of the attribute. The method will be called with + the value passed to 'exclude()'. So, 'dist.exclude(foo={"bar":"baz"})' + will try to call 'dist._exclude_foo({"bar":"baz"})', which can then + handle whatever special exclusion logic is needed. + """ + for k, v in attrs.items(): + exclude = getattr(self, '_exclude_' + k, None) + if exclude: + exclude(v) + else: + self._exclude_misc(k, v) + + def _exclude_packages(self, packages): + if not isinstance(packages, sequence): + raise DistutilsSetupError( + "packages: setting must be a list or tuple (%r)" % (packages,) + ) + list(map(self.exclude_package, packages)) + + def _parse_command_opts(self, parser, args): + # Remove --with-X/--without-X options when processing command args + self.global_options = self.__class__.global_options + self.negative_opt = self.__class__.negative_opt + + # First, expand any aliases + command = args[0] + aliases = self.get_option_dict('aliases') + while command in aliases: + src, alias = aliases[command] + del aliases[command] # ensure each alias can expand only once! + import shlex + args[:1] = shlex.split(alias, True) + command = args[0] + + nargs = _Distribution._parse_command_opts(self, parser, args) + + # Handle commands that want to consume all remaining arguments + cmd_class = self.get_command_class(command) + if getattr(cmd_class, 'command_consumes_arguments', None): + self.get_option_dict(command)['args'] = ("command line", nargs) + if nargs is not None: + return [] + + return nargs + + def get_cmdline_options(self): + """Return a '{cmd: {opt:val}}' map of all command-line options + + Option names are all long, but do not include the leading '--', and + contain dashes rather than underscores. If the option doesn't take + an argument (e.g. '--quiet'), the 'val' is 'None'. + + Note that options provided by config files are intentionally excluded. + """ + + d = {} + + for cmd, opts in self.command_options.items(): + + for opt, (src, val) in opts.items(): + + if src != "command line": + continue + + opt = opt.replace('_', '-') + + if val == 0: + cmdobj = self.get_command_obj(cmd) + neg_opt = self.negative_opt.copy() + neg_opt.update(getattr(cmdobj, 'negative_opt', {})) + for neg, pos in neg_opt.items(): + if pos == opt: + opt = neg + val = None + break + else: + raise AssertionError("Shouldn't be able to get here") + + elif val == 1: + val = None + + d.setdefault(cmd, {})[opt] = val + + return d + + def iter_distribution_names(self): + """Yield all packages, modules, and extension names in distribution""" + + for pkg in self.packages or (): + yield pkg + + for module in self.py_modules or (): + yield module + + for ext in self.ext_modules or (): + if isinstance(ext, tuple): + name, buildinfo = ext + else: + name = ext.name + if name.endswith('module'): + name = name[:-6] + yield name + + def handle_display_options(self, option_order): + """If there were any non-global "display-only" options + (--help-commands or the metadata display options) on the command + line, display the requested info and return true; else return + false. + """ + import sys + + if six.PY2 or self.help_commands: + return _Distribution.handle_display_options(self, option_order) + + # Stdout may be StringIO (e.g. in tests) + if not isinstance(sys.stdout, io.TextIOWrapper): + return _Distribution.handle_display_options(self, option_order) + + # Don't wrap stdout if utf-8 is already the encoding. Provides + # workaround for #334. + if sys.stdout.encoding.lower() in ('utf-8', 'utf8'): + return _Distribution.handle_display_options(self, option_order) + + # Print metadata in UTF-8 no matter the platform + encoding = sys.stdout.encoding + errors = sys.stdout.errors + newline = sys.platform != 'win32' and '\n' or None + line_buffering = sys.stdout.line_buffering + + sys.stdout = io.TextIOWrapper( + sys.stdout.detach(), 'utf-8', errors, newline, line_buffering) + try: + return _Distribution.handle_display_options(self, option_order) + finally: + sys.stdout = io.TextIOWrapper( + sys.stdout.detach(), encoding, errors, newline, line_buffering) + + +class Feature: + """ + **deprecated** -- The `Feature` facility was never completely implemented + or supported, `has reported issues + <https://github.com/pypa/setuptools/issues/58>`_ and will be removed in + a future version. + + A subset of the distribution that can be excluded if unneeded/wanted + + Features are created using these keyword arguments: + + 'description' -- a short, human readable description of the feature, to + be used in error messages, and option help messages. + + 'standard' -- if true, the feature is included by default if it is + available on the current system. Otherwise, the feature is only + included if requested via a command line '--with-X' option, or if + another included feature requires it. The default setting is 'False'. + + 'available' -- if true, the feature is available for installation on the + current system. The default setting is 'True'. + + 'optional' -- if true, the feature's inclusion can be controlled from the + command line, using the '--with-X' or '--without-X' options. If + false, the feature's inclusion status is determined automatically, + based on 'availabile', 'standard', and whether any other feature + requires it. The default setting is 'True'. + + 'require_features' -- a string or sequence of strings naming features + that should also be included if this feature is included. Defaults to + empty list. May also contain 'Require' objects that should be + added/removed from the distribution. + + 'remove' -- a string or list of strings naming packages to be removed + from the distribution if this feature is *not* included. If the + feature *is* included, this argument is ignored. This argument exists + to support removing features that "crosscut" a distribution, such as + defining a 'tests' feature that removes all the 'tests' subpackages + provided by other features. The default for this argument is an empty + list. (Note: the named package(s) or modules must exist in the base + distribution when the 'setup()' function is initially called.) + + other keywords -- any other keyword arguments are saved, and passed to + the distribution's 'include()' and 'exclude()' methods when the + feature is included or excluded, respectively. So, for example, you + could pass 'packages=["a","b"]' to cause packages 'a' and 'b' to be + added or removed from the distribution as appropriate. + + A feature must include at least one 'requires', 'remove', or other + keyword argument. Otherwise, it can't affect the distribution in any way. + Note also that you can subclass 'Feature' to create your own specialized + feature types that modify the distribution in other ways when included or + excluded. See the docstrings for the various methods here for more detail. + Aside from the methods, the only feature attributes that distributions look + at are 'description' and 'optional'. + """ + + @staticmethod + def warn_deprecated(): + msg = ( + "Features are deprecated and will be removed in a future " + "version. See https://github.com/pypa/setuptools/issues/65." + ) + warnings.warn(msg, DistDeprecationWarning, stacklevel=3) + + def __init__( + self, description, standard=False, available=True, + optional=True, require_features=(), remove=(), **extras): + self.warn_deprecated() + + self.description = description + self.standard = standard + self.available = available + self.optional = optional + if isinstance(require_features, (str, Require)): + require_features = require_features, + + self.require_features = [ + r for r in require_features if isinstance(r, str) + ] + er = [r for r in require_features if not isinstance(r, str)] + if er: + extras['require_features'] = er + + if isinstance(remove, str): + remove = remove, + self.remove = remove + self.extras = extras + + if not remove and not require_features and not extras: + raise DistutilsSetupError( + "Feature %s: must define 'require_features', 'remove', or " + "at least one of 'packages', 'py_modules', etc." + ) + + def include_by_default(self): + """Should this feature be included by default?""" + return self.available and self.standard + + def include_in(self, dist): + """Ensure feature and its requirements are included in distribution + + You may override this in a subclass to perform additional operations on + the distribution. Note that this method may be called more than once + per feature, and so should be idempotent. + + """ + + if not self.available: + raise DistutilsPlatformError( + self.description + " is required, " + "but is not available on this platform" + ) + + dist.include(**self.extras) + + for f in self.require_features: + dist.include_feature(f) + + def exclude_from(self, dist): + """Ensure feature is excluded from distribution + + You may override this in a subclass to perform additional operations on + the distribution. This method will be called at most once per + feature, and only after all included features have been asked to + include themselves. + """ + + dist.exclude(**self.extras) + + if self.remove: + for item in self.remove: + dist.exclude_package(item) + + def validate(self, dist): + """Verify that feature makes sense in context of distribution + + This method is called by the distribution just before it parses its + command line. It checks to ensure that the 'remove' attribute, if any, + contains only valid package/module names that are present in the base + distribution when 'setup()' is called. You may override it in a + subclass to perform any other required validation of the feature + against a target distribution. + """ + + for item in self.remove: + if not dist.has_contents_for(item): + raise DistutilsSetupError( + "%s wants to be able to remove %s, but the distribution" + " doesn't contain any packages or modules under %s" + % (self.description, item, item) + ) + + +class DistDeprecationWarning(SetuptoolsDeprecationWarning): + """Class for warning about deprecations in dist in + setuptools. Not ignored by default, unlike DeprecationWarning.""" diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/extension.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/extension.py new file mode 100644 index 00000000..29468894 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/extension.py @@ -0,0 +1,57 @@ +import re +import functools +import distutils.core +import distutils.errors +import distutils.extension + +from setuptools.extern.six.moves import map + +from .monkey import get_unpatched + + +def _have_cython(): + """ + Return True if Cython can be imported. + """ + cython_impl = 'Cython.Distutils.build_ext' + try: + # from (cython_impl) import build_ext + __import__(cython_impl, fromlist=['build_ext']).build_ext + return True + except Exception: + pass + return False + + +# for compatibility +have_pyrex = _have_cython + +_Extension = get_unpatched(distutils.core.Extension) + + +class Extension(_Extension): + """Extension that uses '.c' files in place of '.pyx' files""" + + def __init__(self, name, sources, *args, **kw): + # The *args is needed for compatibility as calls may use positional + # arguments. py_limited_api may be set only via keyword. + self.py_limited_api = kw.pop("py_limited_api", False) + _Extension.__init__(self, name, sources, *args, **kw) + + def _convert_pyx_sources_to_lang(self): + """ + Replace sources with .pyx extensions to sources with the target + language extension. This mechanism allows language authors to supply + pre-converted sources but to prefer the .pyx sources. + """ + if _have_cython(): + # the build has Cython, so allow it to compile the .pyx files + return + lang = self.language or '' + target_ext = '.cpp' if lang.lower() == 'c++' else '.c' + sub = functools.partial(re.sub, '.pyx$', target_ext) + self.sources = list(map(sub, self.sources)) + + +class Library(Extension): + """Just like a regular Extension, but built as a library instead""" diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/extern/__init__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/extern/__init__.py new file mode 100644 index 00000000..cb2fa329 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/extern/__init__.py @@ -0,0 +1,73 @@ +import sys + + +class VendorImporter: + """ + A PEP 302 meta path importer for finding optionally-vendored + or otherwise naturally-installed packages from root_name. + """ + + def __init__(self, root_name, vendored_names=(), vendor_pkg=None): + self.root_name = root_name + self.vendored_names = set(vendored_names) + self.vendor_pkg = vendor_pkg or root_name.replace('extern', '_vendor') + + @property + def search_path(self): + """ + Search first the vendor package then as a natural package. + """ + yield self.vendor_pkg + '.' + yield '' + + def find_module(self, fullname, path=None): + """ + Return self when fullname starts with root_name and the + target module is one vendored through this importer. + """ + root, base, target = fullname.partition(self.root_name + '.') + if root: + return + if not any(map(target.startswith, self.vendored_names)): + return + return self + + def load_module(self, fullname): + """ + Iterate over the search path to locate and load fullname. + """ + root, base, target = fullname.partition(self.root_name + '.') + for prefix in self.search_path: + try: + extant = prefix + target + __import__(extant) + mod = sys.modules[extant] + sys.modules[fullname] = mod + # mysterious hack: + # Remove the reference to the extant package/module + # on later Python versions to cause relative imports + # in the vendor package to resolve the same modules + # as those going through this importer. + if sys.version_info >= (3, ): + del sys.modules[extant] + return mod + except ImportError: + pass + else: + raise ImportError( + "The '{target}' package is required; " + "normally this is bundled with this package so if you get " + "this warning, consult the packager of your " + "distribution.".format(**locals()) + ) + + def install(self): + """ + Install this importer into sys.meta_path if not already present. + """ + if self not in sys.meta_path: + sys.meta_path.append(self) + + +names = 'six', 'packaging', 'pyparsing', +VendorImporter(__name__, names, 'setuptools._vendor').install() diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/extern/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/extern/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..48b4bf381462254f90f86e8603b96bf0ba4f9c2a GIT binary patch literal 2382 zcmZ`)-EJH;6t?GYXD6ElDv{8lMwXDM7ST;;xj;}*5Uo%JT2*b;!m8D1vi2sE%#J6v zx9KjE8#dw!amPb&!%OfMzU8W~z!m3svPs&gUisKNwvUg`_xbbf)z#$L-~H$Rv<dl_ zTqptbx1s7j7*04X$dG(bxX1ky!u^Feq&yyaf(l=FytVN6g9V{5?-A*>U%?tO7@=Jj zA3EDm^<6N6z-lt|I34<9@HqyrJUF4lK!iNx(Fs}5VZ>K?i^uS_#oIhNA;Xxj@D8+X z?!hiy+kGNRF4g@>C6y6sev&XK-?9hy9<bY6x7b9Oj8&Q0WBKV6HkOKw^OEP~E|ZnX zWtkPl?B)ySNO0!>rbx3V)KRVlD>E}yZcbim10BJ^<>(;W6`GBeoG>M&Ny}^^`fl}L zgsH=VEgt(jsQP0tHLXcX46VHd_PpA!Hfp->bIQGi2VVkC;9&m1M&czLsI;xLiL4je z_Srtx*TUHDGG@28wk;*9A{z;tGy`dMu-gl4phYoOA?&VNXaHyO7f~zF{I|VnCe>z@ zS2uU2dBJaP9q#SOty_E({7)+*WuY&2o0vA!G%s_Lru}MW<K>?O{OJe`p%G2!eErF5 z(Daw{Mil2j!PbL{B++YNYO)XPStn1BMV_-hBqNyr=+cVFJ`$N4?E!vD8wLom=A=tJ z@Keb$&9WtG%aH~dbYW@Vl0lEUJV1kSyJR$`1Apy`cKf8roOduh2WZ%#^J{OM>cYek zB8>%;fD0VzUqA;C#=}uO+=4#ykNxA|IIMlOfiyOr@#}CufEnQec%eVXueIaB{I|2C zKLkWn$q-C-gvT6Divmf<fRxH;c9a9n&nUvOl4Cl~*2AP-Vc10SX(3pynJky-145fU zC8xW4(89>_uAC=Lb>SF;US!)9?3LrKag4HlR?e(H$ts&PVPF)FXT8X!*2c>?ZGh>t z0fuOUolFZGH9=iUKi<!@iF6${)(8p-*JuF0D^M@NaACm+IfW&LiVGbKzeDE|3?2gU zvVz2Wcggd|$KmYDI;?|ravT99(SlN9g8i_Lu9D+c-Ew_;2fsx;JP6gW8U32ntw(^k zX&of0qQG8CekO+-KS6y8U%9^@kBMn7$RBh;f2BMCR!8$6&Y-yuH$5|g$rnN)W&pCI zxf3oUSs_O_jEEL8<7ddffzK->;QY_W;NZqDO=gd8EH3~euEgOqSAu`VN~tC&X{UH= zwlgg`3Y#O5Bf+V}F)dj>W-~cuNFO(Jl&KQr^HVmGrJfeeO+1|s%IRh+#&c~{zB5I# z^zp)d2;ub-^&T{h9K8!Yn}9GlZBA2=wHe4*1H85!NQZ{Spf+P^R~nJOr<7DS0u`TR z#zvT$Ligh48o!UOkumB6G*{7oR4FmeUphg}N&{q-{1V|Xt*3<h2o~uLFeF%`9qQ2- zehE#Y1loXhY2tY_@-I>Ff{RNM=O}m$T-L;Z4ji=98n*kO_((GMWP0<5=Y(h;n%8e5 z%S+$_WT=m?n$spkrj&+dg%TN`F*vFgr8(!tpy#XWu&-^Ot+7#7RUpl8k-paHBexB! z8rcg#%-7zKz0*lOI_M?%1fUK9et=~I9`rkDdN|FTLczaQnsPZxQ?-iG#FdhjP-do( z0tz#u@Oe}{H25-IFnEU*UTV}-Ck1g3c-^oQC!P4Z8v)_~!k|s~Dg!g2I|HH8(4Aj7 xf6DsHx71gg=yVIsXJC4v%TnVj#KUOy2@bw39vk0j4*CtgV(!_C{qEg>{tp0Hb6x-d literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/glibc.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/glibc.py new file mode 100644 index 00000000..a134591c --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/glibc.py @@ -0,0 +1,86 @@ +# This file originally from pip: +# https://github.com/pypa/pip/blob/8f4f15a5a95d7d5b511ceaee9ed261176c181970/src/pip/_internal/utils/glibc.py +from __future__ import absolute_import + +import ctypes +import re +import warnings + + +def glibc_version_string(): + "Returns glibc version string, or None if not using glibc." + + # 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. + process_namespace = ctypes.CDLL(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 = gnu_get_libc_version() + # py2 / py3 compatibility: + if not isinstance(version_str, str): + version_str = version_str.decode("ascii") + + return version_str + + +# Separated out from have_compatible_glibc for easier unit testing +def check_glibc_version(version_str, required_major, minimum_minor): + # Parse string and check against requested 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("Expected glibc version with 2 components major.minor," + " got: %s" % version_str, RuntimeWarning) + return False + return (int(m.group("major")) == required_major and + int(m.group("minor")) >= minimum_minor) + + +def have_compatible_glibc(required_major, minimum_minor): + version_str = glibc_version_string() + if version_str is None: + return False + return check_glibc_version(version_str, required_major, minimum_minor) + + +# 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(): + """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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/glob.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/glob.py new file mode 100644 index 00000000..9d7cbc5d --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/glob.py @@ -0,0 +1,174 @@ +""" +Filename globbing utility. Mostly a copy of `glob` from Python 3.5. + +Changes include: + * `yield from` and PEP3102 `*` removed. + * Hidden files are not ignored. +""" + +import os +import re +import fnmatch + +__all__ = ["glob", "iglob", "escape"] + + +def glob(pathname, recursive=False): + """Return a list of 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. + + If recursive is true, the pattern '**' will match any files and + zero or more directories and subdirectories. + """ + return list(iglob(pathname, recursive=recursive)) + + +def iglob(pathname, recursive=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. + + If recursive is true, the pattern '**' will match any files and + zero or more directories and subdirectories. + """ + it = _iglob(pathname, recursive) + if recursive and _isrecursive(pathname): + s = next(it) # skip empty string + assert not s + return it + + +def _iglob(pathname, recursive): + dirname, basename = os.path.split(pathname) + if not has_magic(pathname): + if basename: + if os.path.lexists(pathname): + yield pathname + else: + # Patterns ending with a slash should match only directories + if os.path.isdir(dirname): + yield pathname + return + if not dirname: + if recursive and _isrecursive(basename): + for x in glob2(dirname, basename): + yield x + else: + for x in glob1(dirname, basename): + yield x + 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, recursive) + 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(dirname, basename): + 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): + if not dirname: + if isinstance(pattern, bytes): + dirname = os.curdir.encode('ASCII') + else: + dirname = os.curdir + try: + names = os.listdir(dirname) + except OSError: + return [] + return fnmatch.filter(names, pattern) + + +def glob0(dirname, basename): + if not basename: + # `os.path.split()` returns an empty basename for paths ending with a + # directory separator. 'q*x/' should match only directories. + if os.path.isdir(dirname): + return [basename] + else: + if os.path.lexists(os.path.join(dirname, basename)): + return [basename] + return [] + + +# This helper function recursively yields relative pathnames inside a literal +# directory. + + +def glob2(dirname, pattern): + assert _isrecursive(pattern) + yield pattern[:0] + for x in _rlistdir(dirname): + yield x + + +# Recursively yields relative pathnames inside a literal directory. +def _rlistdir(dirname): + if not dirname: + if isinstance(dirname, bytes): + dirname = os.curdir.encode('ASCII') + else: + dirname = os.curdir + try: + names = os.listdir(dirname) + except os.error: + return + for x in names: + yield x + path = os.path.join(dirname, x) if dirname else x + for y in _rlistdir(path): + yield os.path.join(x, y) + + +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 _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 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/gui-32.exe b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/gui-32.exe new file mode 100644 index 0000000000000000000000000000000000000000..f8d3509653ba8f80ca7f3aa7f95616142ba83a94 GIT binary patch literal 65536 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/gui-64.exe b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/gui-64.exe new file mode 100644 index 0000000000000000000000000000000000000000..330c51a5dde15a0bb610a48cd0ca11770c914dae GIT binary patch literal 75264 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/gui.exe b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/gui.exe new file mode 100644 index 0000000000000000000000000000000000000000..f8d3509653ba8f80ca7f3aa7f95616142ba83a94 GIT binary patch literal 65536 zcmeFae|%KMxj%k3yGc&SCTD>S1PQP}R5YmQ5=~qJi^+zl1UE)DtPsG8blp-*!#RLg z0>QIub24npZS_`f<yJ2Gx%RfbwfBl*uV6xG0{-MjRTOJur8;p@W1&fqnDc!<b2dM) z?S0+v>-)#|`^OhvIcH|hGc(UT^E}VYJoC(K^_@E<yCg{t{F$aC?Zcb?`Ni{pesFxw zo%Wkt>DjE;rth;Yer@_4k$X3I);E0Tn+<n;+jI9__ucm$)$@&eJPq1?o_p`}RNPkU z`Sy3#+;eqK&X~ef(Wh%$Pd;(of3Tsy@11*-?Gf=`u?u)lX)Iw+;(cKCl`JOSKK7sD zeHA+<-V4}nyl=nv?g*9f_b?6yBx$kDF4=y~YKCCCB)cu!mL*9qBV~z|I{q@eUHI#w zxZet=Nm4pR@o(rY`E3@_kcQ7q0+8}iX7L_=QKB^Wyd=#Mq5o%(=5t@`n=ZtG%HR8U zwR+EH6(2u6f(PM6ZKcj0_0J<otFLZYbC-ITBt;MrZJ&Yn>-Zb>&yT9Ew!oxAMfl)C z#Z+d`C?Ev=lGJ)}%Ksnx|0)G)SVf_n2-;d?f9!~MzIJJ-=wKb=iHfW2QCpC29wSNm zA=ztsPZ<@3t`2ENV!bW?>DIbrM&c*bCbqaRzr~R~Z-r)Gl=RG-p<NO;x4P=0D?)s` z$m_KCdCiWD6_v>}ugUHp=<&@N<(0nQZ)pc;t^f@UfdU)Xs*a2q9hEj|W&QGS`}Q+V zaO>`-aSJ8yAtP2OBNk%M7Utt!$6gfgmQ40WtW_PKSW_r1oOg}p=vZj3XtBjwwJ#E} zLMNCsnAlP1f|%AM?kIHMo~S5v2kZEcbEs|ZrY(iCq{N>@V-R$%P-2fEhzyjmCh@Sy zXyr*PE_By~_)26%86IRFp<L0yrY(-_6^RN*wl=1!sbqzkNBE#Zr|)1xR)-`}qV{=I zsuT5#vQT;fwD0ZwJO~iAMI5M-JD`zRj|c<(+4vp|@n?~!ADWe%G6eO$3}GdB)>9Ya zkBHB1hGv2=t60ZM@2flwcy2#L^lN{0=%0Q@MjzL)ErkWFb2Ro*N07ImOt!9YmgwvP zqh2yflmnST)@Q6JEa3kv=;e&Js^gRcx7ile@Me+Xh_`B=wJ3|47Z(=9j;P;M4jj9k ze|zYYnyGIobV=&smWsjxVw3XZ39!ke-gcWd&f8i_T!k-^@^CA0*s%-oQ>v?$_-7%o z(GNN8XT7J;F$I$PlNQv_oLiavAq4>E7I2dQhlE)vSn!y;BSSI+5(`L`#@q*i(+$dj ziMR82oKzstr3NgrEei6^p%m@2rUhVv>rK-H3%XZ<_rUh;c(a2dG)%uOg$_v@w_EZo zlu%GsR0^7TQkP%ahpqsf^)t)7t<j1g+Tx`4;LnY}eDrxiuoH=ZlK9$8(KPhsobi4M z$psZiHuGF42=%W3b2x}s^KXwz;=hfa!6-nS00F@ZB2Rzdm-tMKM|!J2$OpkDB&e<W zp=IqLfdhi+jGDI_IfSX1CsWBNHQ^`>)|hz?tCY-06G}<$V~#?~heoED!!4L2akG@t z3k(cUbnpdgqwk%>`n0WAC7vv#rU2V~=4eiAwpse1#pRD3*UlGpF7&;UP%~^>-Uq9> zqqY#gDuX1JM-HRLrTl?x<n8>L1RW6Nzt8%&-UwXtnfuqbCmh#A4k1U7-%L3c7Zx(d zuhG+B-K2d4zoLVczO#ufnYJw*t5&k#)-NC8`0Z!%(?;tLH)1SS=)o%@p*m1Hza}bC zH<@{EP=$nZv|K=--J~^q2RFJ=UsK7|s*{A7<k#1>>2riBOI3;<EmbyBr2Q;!)*t;6 z%bAU*;bM7n=w0Oq89^D~`RGjkug?ON9(0;MXlio>B9VN6@g>xk)TvhhOKNMSeI?sb zNT@@qXG7GtAEH*Z*I7+?xX^=^+#cd{e*xu~c+oK%QC`k~8T1Fj`XSd4etuu)23Ly= znHbY_evF#lbUsH*M$@PjpbB6kZlDn4%Pfry7Wc9o2a;HxjOT7A9>$Ks0zkIpxF}-P z4%J+UwB{X!v+x4J<l9l;41|Nc`2wVB4jNck69S=U@yowNLO-xFpm5`+mK}<8p^v+1 z@>vU3b1r4SD4dNJCLBe`P~a!!^eLzUU1z9JMV04G)5v%Ur4xPh4u|g#Tc-(r0PB00 z<2OM*Q-Cajywm3kTRsx?bLZ%s;?w6_FF__SF*1GDPvs6}`fAHZ`iq5gfrnJz3GS7o z<!S&dC^NOtiE-fBC#iZl6nPcM^GAV==(P<NR;%_=#!(%&0YabZIMPv&92tc<Zx7b+ zhXzbD$Xkg{J4C}ln^mO37mVbwG|+Ar#F^zd@x=IC!wbGLO_1QAONu%pJ?DT&$271> zuc4jxwz7KJ_rCH-tFJ@z@NXc!Q<?yrLiCS+GL^7*>xa$m*N_NRtT_d&`a7duuH`>P zd%}h`&|B{GYny6$%@oA-ep8*S_YbNQ*wMBx)7fGDgK2FaWZ0dLJaOehDVhGlqZp`r z7Zz^Qt{~7!1nOpo+s>!!UDMjSGVG3o1-MTD`U{)X0)7~njK(aO!mRqVS*o4ZX4diz z7)@AzBH#*!OwC!#-^rCEBXGL5j{ilBGX<T2fkEhQ4%vX(Kg~1H*mhHs`C@8C`##CF zP-@@Z>RTv<qVAQ@pPBn4bWbwF*U^~CI`+^PVzL7sfQR?ISVY=gn;M0{7SlKW)I}fC zqn9jO+3r350+pLg-%ap_Gfi*v=m#C!&(myW%O}ynm4I*oqK+MG>rZEnIJKR9see4J z?c)sQ$RrZUz7CZ}&@|&(WWQ<q`Sr-K<@HtG)|Ku2_)JVn%I2W6B{iM@WID!(VycU$ zAsB9F=2CVh#57s7&)3s1WBcH0)V=8v_Ii;ZdYh|;kGm9nx5OzmAxm<M-r)(EdHG#_ z%&)8hSU}eM-Hj9UR#%Y!30j>6oZG7`cz^_)daDP69Az2FAzJQhYnWChD$L)$+G%bx z&7w9mR1|a&sE6y@t-J-J@>a|Gc{fUJ9G}Xg6OuprJK#0?Jp<5bfq@`8o;q|BAqcJM zjQ48!rGWu;JZ~<LXe=JXw;{l)2MihWpCi@?07-K~${g|I>b>4p%t2&K3ny&<l5~GV zu3pxR9szB;9|4i-*m?a+N5i#!@8}=cRcFz$=1jfQrgz)4Ua)YNY;U8N3$K^;Kib>6 z)6|T!KS#l1EVxey4i&6w$J3D-fJnmY;zyL&4<!g*Eqe#L!`;_mM+^g_OUp(vN<5Be z^757py~8$Cr&@$5?KKvp_9ylZ;IzB+5AEvs5img9peJqGr>M}ieC4Y4zD_DwoiJ30 z5_=SJD^>f%DnzwDB3tkBl@`9nM7`62cB()9jX5~Dm1WqE>OH3SAe#W)`7_C8+pfMB zJFd=-^{P|*4uT0K)k$y3)D9UFllj~KNTvgXauGr@LJse7Q7R@RDA(z2H9$+ML+eE& zl=voVrX{czY;0=zrsg&^7y3DBQcnlbCHkTK6wlSv)Ot^a>WupS(t25KWYtdJD_Ul0 zy-WLUG9529T3YX>gnVr^CFHB&()t2Q@MyPDf=8_?tuNH(m)6hH=0j$@t^Sg!YDQJ1 zuYFT*)BGE?V&5z3C3>UFt~~e`G$NV?B%)>wUwRqg;i@z=IXRJXAM6bDgMFlKS|1}* zTJt0-&ot@>P~uYMKt_<u$P@-s+AEV2S~BKcqvp(8p=QmyT9cttF;Z={RhCTEe&@TO zUJAU`$*i*|AeRR6H#UONQ7ve}-xCCI8I5u>iv`@icGQ&50s{!#;tR+P0W?sZB=UJS z28Qw#@F%T&Xsr_aIZ!Op21>PA8)rgy4p7O3{6Pz%JAtoM$hIO)F4a7n)<P~(I+1mw zsEaBknp&{}E9S9cg;s19#kgY<l_YBuq7zou(m!JkZ_XDZ4C_c<Sz6z({V6&l4AE>$ z761{^!~%XE(hS<N02PLEysfKNE<cjeOV#;(?@T_jk3@Cm;TkXqt9DZgBCHyGl8OLl ze024loZPB+*+B-OCpyKzSXkfg%OQ2FrJZf>ewuU#=}f4+5c{H|(n(tWZhp^o;Mq!< zRjo5}SyjYX;$XSHob{6zO6oY4v*QvB236~|OfFpmxC~b5@TKpZgpU&#G7W#1xq3O3 z<3MV!e|?(f)~nX1p%Pni43kl^-$5TcR@NVMSZL^H&<bawx`(eNaR~J2`!Iu(Y+J`C z0zJW~Oj7XExkMpn(#4t%;~T4%mFFE*dY9bPI3TH+th!&nYyDR#lIdl<5c*6ThX%5o z)o1{K7XrAx9cu@a7Dqi{sAWL~{fq}PRa)=Vrtpf1n0nDaYar&YVxnNp4wBU<488MS z$Ov#F&_$zgEukIg3U&rgqrh#QfipJ&H-3{?*0{{-)2wH6CJS^m=O+bRE#HY|gu`h3 zQ11%GUd!rT@l#r+x3&A9Q9zx3!O@^49vFz58}EaJqv95q-s;fX98f>E-&ixCRksAc zLU`VdHD75rv;+qczU;=DL2Y_V&_vjEBUm9@4-7a;8wVN=CKo8r`Ay}yo6Te;LW2km zCg&ma6+&MnuR~}6p@HNqtG1-l;zB9z8^>xc|3Wh`P+C9Ga0W~Xtd-{^<+-e)w&b4$ z@#<dU(6x1DULnRdkk-ueAh5lYQn#C{Kar$Ow9<TkRf^br*Y%_?W&Q~$VHP)oC;9HH zFyAJHX&yxvrvM`re?)<zG~~~V%taK#?<|y#csf;eGzCh<9i|=?_0I;xt5KQHpov;L z0t+x44o?z#lG!W+1*D-aOo%nPp=W3UKr;w$Yf^zMxL9ud2w;v07-z$oAsD^vS<E{m zby9@hJWyh(w=tq-N(%FBH=s4EKk!SDDm?gZ!D=Y;rpVJ_#J@uO_xbUq(@|JK0CxjG zFWX1OhSkXt3h+-+2B}Ra*1Ku6+@(}+E7&(b;`$3RaW^!x%;!_nXlmd+RbD!!1QR4B z_FE9rm@*gPmVoPDY0{)OI<ctVMFcMX1r<MMHnOpPqw!?iR5zQ&PgCM#k=SEs?-`A! z4XsQ6%z?14uc40j6+x?IsGlNoi+Mf&0#Vk_Kfue#FyBrUdP=0G3VR(9^kr$|X)V1p z(52>5nT;nQH;igvjVF^ojjTuW_pKostir4{9NA29mEyNid}uN|4TxhrlC)WdXd>FZ z?h-VBx_toZ4Q;2-s*De{^r4;Sf;^URlfi%h+fm{Ob0O76slOabjS9;G-(|(y5k&(3 zek#h$5I=h*8r>7(VIL+i{Pd0V+%%S+M@0Bp@q8Q%5#q(@z7U^EjPS`!G$(+(`k}%- z#O*6nN~f#>J!8|-`3^7o1-QI(ZAuFG<!BUXr|7cC9O~=~<E*93KqBxcL|`r$JUY0_ zXdKvAeWxU?Elnp|vsSWu9$wq`QH0F=+T|}~+vqdKAAFvq?^E&4-RSZjDSd_`s65hU zRG&`TX^nKMyq3SQ0JH<6%FzP8jJTHXf?$dS7hfb2>L9cj-g!Tk8}ZggIXanNhBaH* z%$w8Ym-akCd{i@ElJ?9)<M@uU6qL**g5q}2PGrmCpJS01uI2wm>6rRw2KnzPg>MHL zWA%sB4CVRi!%2H|Ot>Z(icp)l{Aa9616{Nh!pveS`i2Ma03DLWEO3U&EX$~V4~xO) zi_s8B{5_ln-a`((@w7x)Y?Ng>9x2X(W=@XB{D&Y@N&83*@i)+~?fi2zq<b^Kg`y+v z5aP88t>nK&lp^`u!hZ&&FuC{jXb#dH{4o*tBfc6Xo9PY^qOa0PMpSJ{ZCzqsyow}p zf%M<BWuSR#dCqtgW@LiS;}ezcXc|UfBV(CSnU7I2nZp(sTV-Ruu`=IS>A><O4X8m8 z`<KIx+&Zk48f8hn92h!L6_u+_3i0uI(7<b*=4U`~ZN8*mCh2QsDU3Y53!Q#7L%$!H z3eB4xo3q*2<}}l$JlC3ZDhFC?g1j3YAEs5VX3xrKH#01r4Y8i&cuYB30<u}{<a<eR z%{NgJ^vkx7hmh%A<n-49l)a-~r*D%bZ8pX)TSl^|#co#1><!+CeC5cfjpuKIoO;QX zn!?_AW&vMA1)?e2-dwpnrP{Zj*_<|HxB9IS7{EyBwDfcxYouv%BJm`o#n}5SJ@>yy z&-gy^>=Dmb#gmKYQSodQ&%=1~zFyPB`l*;#0}pG&_qGP<A3uSmH3t5s{m%eUQpd3P zFA&gIum6fH1&3i4>aB!9U}cE=Aq(N(&^msURe%fvtfy@-U04P7ip72!ds&zS{&BQP zfb0S1(?^*E(%8XXe_@jn|0by6J>q*uiPa<2GTum>1O`T;OFUo1v-y$F@r)f;V$*<6 zxxSwOBxBbhyp$c;NNYJb+cR(3rm@O_gUW%XWq<TbdY9tu#j>Q=+o~LhwQWXHG_$SW z5jNrvBb%>H`Q9&KJunO7*<L^=h;ktBPP~l0f^>TYN%sn3?(GrjM9l7u$cB1!?on^i zxm~?p=dyZfRh62Dm=dqUXFWmia`&ynVMq6Z;jpdSi|}><(*!Z>E*$=p)}4=V)0bCj zv$1@#`k8GT@C_RK2^%GGo{Z!or=xEdC3Sy{6c(r8w_3+22VPE8$VUwk?|v1ZjJ?#d z?luIe*vr0NEPYiH|0;?VH0b^(Q6Pm!7br@3K$LQ`y0q!bh+5I~<vKOL>B~(@{BERM z?U4}bzJtJg>$C~wsYFPs)mz=A_+;Vl>b`0??CGA4aEpE3_1cuC2W)e-iRD9CL7-ID zLCiMic?H0A0^lhkGFc%~0KX@IHA?JFdf%(WUZeMSFj1hlro{Hsd$SVTOYdb$?3Z{O zdx;woaT2be^4!6ovG*{7T!u=A;%kW$=Y`c7EJ1>o*h`$ppM(Z)v6oxb##)uwlhE!L zK|BbE?rM}zjMBeG`2mMsRATo-#`XSM<p+O8w<|HUP15;7)dl8RhCjKgN{Rmvqg>NL zPiK55szNTw;(m*0{!-DMiCyRLQJA!hU8fN=;!ohIB&twBXPo+q?3dk7A=(!wGR*;f zmH4Ab9Mw+-q9dQRF(aRtkO%#|sinU_GzQmLfG(6X%$CM}s#}Tu+JSZPpq9P+VJHV9 zPKiuBJL5!5YDD)oz~~%Qe-}8Rt@jtTDY45@HnsU*=;L2kq0UjBUo;Smkm)WFrzQsz zaZ(FGek(>;EF>{BP3w%4xKbs_@hyu6ngw8|fTKh!qlHy>F)CtYnXuY`0oli@9KP4p zxmNRteU+CaBSCFY-H#O=Jk~#|5j}R|7;01ZpAg)=bGW@hevqcf-LE5A?_aO{-~#Ga zVjtqE_ur%Jcu}N(Q~CZ}jI(<Gz3O-M{`=HfdjEHn_!IcnD|)HPLK{d(>RqYcK--f` z*$u-u^BYl7987l&tm;-akLp~@;>4P3jf|vh1&xdm!gT*1BCt>!eya-TOo@qvzBZ|e zQ2iNDWtptbp?AvNZz7_NZTj+?+C3IKAuc7urGmA#W*FkVeLpeU9(>ulfC;|b-cb+0 z5TB6^X%<Qw>XtM(`pIQ=fw7l3m7PqEu?nW_-d^ex*@!pOr$qxsd<Oz4p)`d~h8&rq z3ajISrYI&Ma?}RR;$;Pxhb{D=3(TWzKXJT%s9^iYO(<RUSVE)ar%J3fi`NkNI14-+ zZrV>${!Og_Ogsu`H35A(O_T{B-&NY!RG*-ckbdHk+HO0|vjjb;+l<6Mq$Ue>zCnpS z2ekn9jv3VFG&VekjGbcGz8tU@^*K}|I^kYGwg>=6O-KB9C~8h~{7t+%<45rXFG$@q z7euEagA%`$O73*@wt3Wii!!}!nDQtuEgDEVNO&H@L}t+dCE6duOzQXu&}83R+a_*t z_&PR>?K`O-m-^lvX<SMec7h|`W&K*3_mnRBT55ETVuwp~p@I8^9=ez{SZ8*-mN8u* zozTuQK_62nm3Zs64En5I#e|GLc6$(Z{nJ=O=xuZK^QFcv!65zY-K`mRLCxmeCCUAX zz}cdX$`oRtgCQ~-dxfCh1^&upuQ!#>QA4JXT_&C#wmJUf{F~PzJ;U$!y{?@r5_;)a ze{z;kSR(>#DXe7X%}ph+4-@QPELf`|eLpD~P<#ctkO^UZ+OJ**V<{Lc%j&ADlKD^D zh9X7D?5ESzvDO!l)qQ}Km>9K-c6Fh+qFvOf78^LViKdv`C4?Z?Mm>D}Ux<sHrkH}T z{bB$T9}@}U489THt;{kO)K<u$jjOAT&an#NS6e0M`$=U1ZK_mV8*knE4JHVe8aAHK zFcU=dU^F8UI0qg3C?b`?O8zG-Foc%XW|fLW)no3Zk5>7K>T~>yb3k%G<(9(Q-eiF; zW^X3gPV@i@BfZ3523R;XaoaM4t4g?fQV<VPLD<~ePx?Yq$D4a8z-364{**`yGcn_9 zu{VoRIR+OHmUtLIOw5N{j&^^5_Wq5TtfdgKQ-D3T*Ov2llcss3edmNCzcld*zqAN{ zPvP$i{0-pmrYrr@dVGuC5m`p7(tDsgVeD<hs`T;Hsx-BTiu$7-OpNcxSQ`%eI+Yl0 z+3uk^uu;4d&qOngC&@V-eut#XW`{q0jImkn@E1xQ{!7Pn_%B1Wq{Ba#_7PbQ<=fsy zIk3<2>e|xA*Ok~9;<mt1D%&LHDM>8Dmc9>rVFv`@;FdHt*cs>|&PpyPe0UP`2eD=g zvFfgbQ|!MPHa(pX@+5W&jIJDok-l1%npPJ!4WXp3E&+NLPGjwF!I|Z_iN$Cc<=?U^ znZZOzzo$!rJI}YV`NpupW2zzj{GeLXVuu9W`n0TN!|A}^<;Os!&SP2^>!5w2kEXSK zlwqH1ZHplztSactN=M`gEK3rV&LEFnX(6w~j-W+mrHrb}^}uPE_qw+H$a{*Nr4ow8 zzFGz?FS2RJF{5dTqbb?YQR&zY>tcGecNr|O?N!1;-1-;v**su^4QMcbISfGyV8u(} zHrJScDG^rhPt&Lre=<w&w`&dr<q@ntyCOx>8-P)A48e6~K=WdCcfqdgpaqO6I^4`F zK}}d6kG*)cjinU7J8j5RgJojK+lx)wDSSUVPHfMn%&-B(Q)XB@^Sg$Yn#i#yh~@O~ zVsRFx43?7=Ef)2sPGY2yYNLx2@%IoSZ-cY2)IzclGvc!#BZ>GNJRx94d^Q3p^_h5& z!jF)M8oNlT7}k16tTxu}c%&amYj-5hh}SOCB5QZV4~f@Pt>X1d63xedAT%NiI1<&4 zPEnH$n$emj7>RQLVK)z0v#L&k)I^8W+9{AF*2UBSh?;rJK)tBMPMUdlAe0b@qx*u0 zz--_|=gQGEUJdhoI6@_ud5iH05LI|VzDc?VJ|^iFrVO)~h{mtX2Rs<jUT=0GdoE?K z@BUA8pnw8#vHWzrb`q00b^Jp8{8bHKB&t5u&yU@d8_ih;nmb;558vwB(<^{vG&k%! zJh^pdo8AgDJAVQjA;2wTpWlrwXQZ|B#86U&mE=rW6*#udOc?ZQ44FTOV3_sr7x6ac zpr5hbACXG@(i#&w7m{89U!rw|t_1#yx@tppqPMRN40wMVH16RhJWc`wDK%sSuvOl( zhGtSQ23Gg1ffEq^g;!y3h5f0%X2>^&JPJgM^)vaFePM&_EvDU)I+oE9Fs07GIqHqX z11^%P9Ja(^f5Yo6;XnHbcrS5cpTmkjM)3ePJsfM5_ylButt7FO8?^&$xs!Gcs?X>b z2Gv#YpGi2Dv&9d&6BQ4+j6e@0KF|+?vzxumV=x1vQd_)ri+|f97U*XuQLFZPQzNv0 zA%k>}M&Ys)3L$~QjeLSY;hfdNb|6kIP96bux0l|%;oDvCM=09?jfL4?gx*}APLf3? zdW9{Oqqf`4JW7W@2etzE<v<4eN~O!3>bQtSkrV7NztT#^ri)SK{5ncM`jbVKA(V8A zqm5NETDO0WB>jd|L}{&4iQSGss@PZfoA}gSfE3HzR_E;{tLUXvReu=XF_)L7-vPGW zI1T&ug(L<K(H?`(O0+|jU^^TJtCv|P+|^R7g+j>uD|W&H7y!uIhCFTlmu0not*lf@ z%PpJ;soA9gr~1Dvt?jQ$qirwINSJ_!P(z8X|80r;trDZo$YvUmPe56~N*V7}HN7l` zUbJiFQ3s!dfm&=5g!m1pD2!1O-JKPJcN0a2?d;iL6=5p90XQYcAZI!V9BvPRgvII= z<UY6B(l`@%0aevw=B*$-!(YX+-pB~^A0xFr>WVx{*aQ%P2W9=~sEz*<6$Ha^)DE+C zm#>U`NgC@|U)x7%!fC|bQJSw-Fsaw?)Kw+OUnVmHjbnB*a9TIrTV@F`=E$%dDJoE{ zNHOPT@UOs6VaxZVAY)PTUsB>f>;z*ISlRduY1A6QU9eATGOKj5!%ZL9;a7P+P4oXu zhQz9+kmfozzo;Lh`0P4(oZbabsc?{gTtRZ;^mW2kS?P?m-mmCgUm2CoWTw8v>Cs;? zS0SUm)`78mC2JotUs5$NFlJ#(0K^R^uL<!j;BeBq>EPJpG_u$FQLQ_~`{8sI<jY~X z5BHr6Pi{>ac%$yfJ|br?mbEn9!Zyl#plAg(29qyxaq993=Nu)WqY^=ggyWgg5_M&Y zpdmD4((h4i*n9jYW9dMOmd~&%XK$OXUQ@bM*2V_;Erb~neJY5aoK)H<Ywq5*H0qCQ zQlDTBhDE(`fMYf$RVHI_W!Ab<9q|m-x1tiL9m@*|+ZJFb*@nrGYKJMFZ$cZex59sk z57?Ts@o7{px+DZaeQ6n_Tc7ur#TXrI+SG*OFI5N`C1So|&e1#bc_WmSn8P_M^})g| z$1$5&wX$6=6p%E(_=1_WYzlEl=m6zLPhw&-Uf=4lsX2A#i8_81%m7n(SnrUx4@UAZ zcY9Ajt`fU~Sp=zJ^Zdlf_m5UCx0nX1-JJVdD%Q-iJb55^UDP*sf=9gOB6JS+k*AQT zX!-nE40q9~JPo6)*xcm752*{l5sA41;nJz9gLNkFi{|qz2oN^pd>1r@w}B5jB_~LP z2GvBz@Gwye!c#g`n=Ob@$5oF-2yJ2=AEdmT4d;TyC9{qB$;>+bA$=O^jVu&HK4E_b zWIKwTm7;yh4<KPRO`k7m<AZz#eH2?iV|fL}=dgMGu(uRi4MCOo8We<q#cTTB*m!lc zYnk_W-xt1sb8@R+o5nBn4Yi_<{&5{~%;2!Y{U-2GeuZ7_FW^by>(lJs-b$e-^uex8 z_YNtpTlEe_{|I}9wEOK#Uk`1z=?18z#e^6*kkn=swo*x(4YhC;wXpuQ?+@x&e6FkI z8K=b5&i4oHt`OV^Qc7$M*n^!!;^NY>CiIo+4e=k6IRn<Ccmv930T-<-f(Tk2(H%gL zc-;vM$cPedNA?^6r)F3%teroKHnxMD`WXi>WQ{b0wsmK&RX%S`$|=X#ookhCNZGc? zMGp@>=Fr1Wk03o((_?+&r6#oIX6-0LNq?%hiiHo%0Lbwe>-T<H1phgOUKoYuVWPo~ z>3`g2EIsFYSshpOGWKvb0B0J;;R3Pr9Ne=4_JFJCASN1ch-~a<)#uLsJH92a?)!t@ ziGq7585s9aau52IEp^!s7afJ`bq(Jt%A&4Fp#vW95D%=z4hro*uT^HX!3zQ!R7%dI z%{YlkWf*Ybj#f5>UUqM5dusBp-*XyMDxo5XAHRVjECJKc!11LP6L%wU4tUl+zKk7) z-t<VpU60>cbWELAvkSWx|4Lu$xv}(&QQafl&5^VedHR?41qOhCL(SzYfG{apR7rXi zehd6DB<&$TH((+Lff_Licu&>&&Z=;Xa&GeQ02a#831Q&@0{)cwt77%-W*x#g6dew3 zZ&xR^NH?~t<D+S-N*kTZL%UFEb4F!H#*LM5&0%fuh4Pn7Qs*V@M6IPxD24&wmmBVH zaWzk<^q1so9GjG9{ICT=o53f_1)nJAB449(Lr9zu5!nLysAyc$N}t~%!{MK@_OJlC zA6?!e-}s6;z3KebYQD%>(2;R<WeOUO%|p=iZR1$<8+?-@XiIcP_f*iKdFp5nBjJA| zlmE>}5E$jTfD_!&veX^B!!|{mD)!dLfiakI7!4&)nwbF?Q56J6xBCB<2Ts%>w%swm z5p;*KBsC>VeZc1WcEMA_>6oUa+}=pE|FnRHTlYl^yFJg$z<7}J3wq`~P0uM$(zEyp zdX_zo=h_{4hs7)BMe&;QsCcD6EMAxH6tAmx;Pv<q(p&Mu*@!*Qinn9WKD-lHQ68dr zybA+GXS#&24gYu3$34$ZUnq5^KaFP=t<%zffe^90ScDj20k=CQY~QrpwAO8V`T>NY z?pKA-Fd&Lp!bN`fM?ZqJfYZweK*9>n#u>pxsO*bYa7Ws&dJ+>Tb%xFz>O`IAsLm=O zQ2QL1+O_W+C!P+B$?f~bQkVu*9G$TNH?NtfET{|e3vWV$wJOgaW^Kk+2kj|ub+&!r z%5F<+b^ZM3KYxLSLd<UfT=e=&l(EHaYj*i>)A|w*O+oYkHMGSoBW;P+hf!CE(DpM0 z5b}`~H#WHA9D{t&+~_d#B52-Al#k5v7eFU(YjZ4}1Rw7A4d+_op8>QZP6-}Zt*%b& z`Wy+$bBC4Z?7qXBCKR>#gNcW8=zG+2J1;>KfMPkenBcs6613dtOvDF}1+@iHGXVyL z<Hr4%MR`xvA|0vF*LB06>yW9I-&s!VRgnTfUyT5WT@?XTEPx7$YC8f{O>dh`&23to zF~!xgBb|y(j-~lg9wm7w2?aIp$RKhh<&KyLNYvB=$&f|G&iHAR^HX5#J#vKzvqvZ; z5zD1q_M?eAJ^F=7o19IHb5YANY<MLV{mV(4P;D;iIM(!ur`eUXcSzDg-y01F$#zGJ z`)Ma>aSx^JC#C#K4-ABlVk?97?-pKri`J`C^lj@Tbt2mo!F*JPJ?y@BF^sVe{vm+d zqdEL61~0Kn00=xne8s}G?|LjIF2RCpJ-QOp0mYg#shJ`Ey|aMdO+dz?2ouoA2GDf? z9U76r98&W8OgoJV_Ce35rr%IF@VKibjibJerNfk0;jX6-4r)_7(<um2Ksq*~ppyCl zoHekV`;znY!LPJ&qd`=FBv0vs1LW%01JA;dkI6%n7v6XMv}w;eh8*tT?Kg^FQ|<(H z!uJ5fYA?J@VFAy@X#PBU6VsJlKt`M*DBbrc8mq+qk&wfxq;*bN4}uLJZ#Vf@v`MiZ zklW2}5nh9^@_Z*uFk1xWu+~LNBEW+%vXNYnNO+MXgfvlJK&!FisPOnrU~%IChq1v~ zx|Ayq^`nZW#?Mgv8we$|&s%b1aHBqmi1J(|gyl&0|3P?EF=J5-t3HilzI9{{76*x6 zKTVyaolaiaQfY&n%~GD5Pre=?SyxNb!}usy_@<yV+ah28#!oN{sH|+lH1HVu4R%J% zg!RTQ_=25o=w_Wjt+Sj~N)rDjW|z?nquiM&cO{I+QO=!f*|iJT8gmx<{kLFu<1Bw0 zAl=VHESnbFr#Sq+wvD|gdn;`i%!Lpn%BQ|Ch@zTg*?+Tko|QZJIOIT)My(9TB-mjr zm1SwF2S`&TpDryX9#P`UP%bU|hwRsvKtDhT+>zBJ1RbB^Yju~&e}L^~@^yQUlTv1@ zBA9`54bp31Vp;A`Vs+FFo;0-R!Oux1PR36uu}UPq&<xxl4(!6&r}UW;ygg;Uk7j?E zbav5Xk!BlAd(Ye$8J3W-tTIwY%9LE1?uKlIjg^sFRz^}`zTI279&YZRAX{%bNv2JS z{~i%Yhl;`362EfCp7+o`Rxa=95^v|8(|E&m98A}r-soD(7MHu$8qUB`B>R(Gd?_QH z-I&v|IKQB|xp^Xe=(awPG&MqF<&%bKZr+(s-#&t279BQ>_IM%5!-)So5yF^4AhqV( zL(&Wq!D<g=Km9X4w<j+pdy8lL1*^HWT%}yxc7~?S6A0Ep=5TNs--@($z3dtIhrug1 z`V|kM@4}twlmM)Tr)1W;{Gk^q3G=dc^*d!%Q$WiId*~UYAz@`{zIG>jXrC3Eh!|EY z7vSS$K1aFuPf!CESr0vX5x~160L22pe2&WF2S?JMN02hMS{W-)vY$P42(hb(MT7jG z0Kgu46=5+oFX{|(T_hbv62&x8SSw;YiXi4Zi37hwjAfQJW6M;XSo$borC~ii8Pgl{ z23`)Za5%9Q4#YA!CT!o<zY|=cj%Ar>YBo>+6HO(c(p3ZS!CvGTNzSBX%-rEqrFFu3 z0Co?<?3bD`fsn<-a`2Lp>&&;<_o%rvUkg%%s5cxToQ5N<Bay_aVYD8w(8^-=6rlb9 zoUX?}UWelC0uK~T4Nj*bQPBuGghm`55oDks)Mz;Qe+?~Ie>>rh48y<;K;Ii;b9{a3 ztU9BFw-Hxj#G4%AwBo~BI7~y{qtquD^1>whtP>}mT4}6p>h;5OwHsqC9ZqIF)>vD) z9`m%V7;6i79wo0|ml|-tf?lQpw*fhjoj*v*f!0om%5|)ayzKeCsC3kNR>)f$KpTZ# z(oS2Gu8>(A12ijc0u{}-(1z)|n~*@Jn~B)-r;p}a=23i*SyMmcD|z_=^+VW1hTN%f z(vZ(5bO4ecS%Xg)sAi!w$^tEC9))hiq5*bPOw_*ztWpE_|GlaQ{!Z2H$A+rj`9D={ z=EZ=LI3$p&*UY0PvmQ`%vRUl96ePQckb_@ts@ZwX1kkaveV8H>K#_cc^bsVyzH^9H z=5C@AQ7jit-+@eej-XrjZy-qM+$X4WAH<%?*C+=za1i?FCX6GUl`D33`!UI0WNdYV zc!d@**%TtCdBS*zs2`zLnixwFCz2Rj*LOTbOR4gXhi*l@yt6VwDin(KJ|WcL2{ELQ z01xS2_@d%yBd;a^VFhp+mFvhrvzs^vVRPd;PL|GLdruy6@N~4G9q0j96kkkAf_QJX z2+%UYGU1xVL=^aR|05&-o+3oyB@x=T#j51j9Ez_8cDG*jM$lQ1uh>l_<s=Y-(QuMC z#D7cT17F~WiJVIuFbOAN`CJKp4|{u2(@vz*nS5HG@NK9_)FVe-{DU_DLtmnD<S<cQ zrhN>uohmV!0kO(LP#4N@EEUEoXInA56`O0t{sKJlZJrhT*oyhB*gICN!iv3O#j32> zek-=3jJlF4`2{6_TwNHotTB0O1lr;fG+}riY+8d}9p6U4L%mdI_0qplMx>#0CAM`P z^3JT|XEDzY`-GsY?(L>fDo!{8YcSNAFr^I_G8MT({BkOn2e5fU5+J&7BR1$EhzL7* z)C!{q|C&MXejRWO7HlQ95-6}@;>JkpheGE@o~8F5C;HEPEAq66kR&1Ugosejns4c4 z1cAIHP<u##)CqbS0ZM9)UPeHYIIvl`n`Ckiec4TN)R|5hAHL0xg*icqyp|~MNy(fN zqfyinU<?y975;A|@JEh<CyFUMACGCE1t2ixb`cll39%<)T5`RI68VRSW55-a@n3)~ z(6#qOnrk3<R)J+G0Ia%aNKsY|arX&OIK|y_FXrwsRu+^rnYjC7ieALsWL(PRKSVlN zQ!M2S8y4n?u0%EGkG+hN>*Ykbt&Ao)n-mt{*6AhKP?jY%94~Hblx12JK-Y@>_8|Ya z@ic!yo#WtT9ZhQv^f%X^?+AQJXI8yOn(O;J0_UZLC<zA`*1OI14muNBlL+(&Q4U>I zvK2;A{g4N$!BrACM+=}HS^&Y8>{gx+49pBTn;Or7&0)~d?^^%W(6Xq8yvIX)Ll=!e z*wS={pMFrA$mhcL+bNOhSZs5^_4yh!1ui~0e3JMy1D}!~Vl@W`hY4^|f7+$QzK1ln zMAo|oja+PzpfJ7bbNw(p+ns=bCHrT>9ey@n*N$Ez=Xur1SBo$?&gYQTNOpk^Xaw}_ zR6l~)D4|tHof2!J(sAHyexk~T(_~BXi~4W&UBF?rtyAjg)El2yL=?b=>p-$vKkPxR zwAFGyjIrd9F_|1PCa^X*UbAC3yDeO=Q^&Sbr?DL#6@K`&wKcp2YIo*AFcyszm!j5| zYPnfXPJl+OgQ-YV_ZoaNtm<&qO3g~q3GRleK3%mOhj1-}V-2>KW!mcyelxy;ubQEC z)hx0P>gL3T&+t(6O=xD+&fle0>-{z*HrGlxLJ6P<q;CgoO!zPvAGTkhMTinxh;U>* z6xe^eG3%&($pfjV<2y?PZeXVz>$Lmt-X}S6iyKo8lmZ5udmZUzmo0=mihCbW!DW$U zC?|3ujnvSR;S!V~*Z7@Q8ITD0$oqlgyp1Ix{w_Jpf9A7yMC~ukowZPk+<`)h4#N-~ zx`B|O;c=|D*FvM(Dgs8t-bfH|@N`=*_|`ds>J=6Y_VcmpvIB$y(5+twa-`bh^4O%v zER<BoOVDTNkK}dHb14s(lfL)WLj8iNPK#m*4oR8&6_tmROqT-baL~NI*35epx(gFl zEFkTCC8p;@do>S{8j64{(^7QTCPawj{E9(rUYit}h7g@Mp(B+rD%YhBM7<1yhjko^ zmY)OsH;9v_@%1SW(nOfOU-XAWxkK-FG;FHl#i#~n`^z0+U;l=xeZq~Ye?uDUw0FXS zq=3~1_=XRtBH%J1u?Slf4StbYpGsA)ZM%?$#y!g4gc&=$hmLyDlC={t181roA^xKH zK*znnonf-!iY8+`hF#XfJ0bma#_17&frO%jJp_&EKzcMEXZ^8tMkn$yLF%Dl`Yw>4 z?>r1>nzNv;ej>%FDeTauQzHP|`F8+mk%?fR2YJXB3A>$Dv}_6O>pJI`4$z|xdtn_L z6oykV;-p@u!#CLQh0w8~eVm}^@jpS;!SMOKAImQEat9glJ8{GzLpNtNa1>+tdtj3z zb%M&K;`9!1SUAt#w!K80p86b@7Gy)H)|OV~D-R!J2Zb++b^AohUj#H{RrBnJmFE|_ zYeUNO-_7tI$E`+ke!O?%WY*}!{;KbMLl#>m+u!kBXc%*o-a5<oRs$C7Vr4W`*0BFc zbTH!TgX9T+m)+nHDM<Ge4LiB?!^vgXqXphBm|+l51X2iZ9#GSA<X8&4uA($}h|`y# z_#%UpKISiM<J0<%>Rq<flx4JEjBty=O$T(8%H};T_HRVfM;(yDF3~7Y8Y>4TZF7J( zuYC{P;2|#eZ$@ns1XCPM;#jMHR0+Iqo+R;gfNhVIEl0M?$&$E-bVmD-o(%ETU_qK5 zT9z0VTCrP2XVN;7y<A&bs^+qj-#X>g+nn}yeXlfp_N`W@{h;sg2D!9UbKq>XwL38e zq{ncRI$BE>X#GOE<|NlX;M7fa82thi>H7$<C992UY>PRKC9C24uAi5c_&!R{iJ)Q_ zaOio=e%|+XW8t@sIN8<}`Wl?tU}fU-6#9IV{SQFMcVf#QS^WTZz_zX_`#$!*w5-m` zH6-xKm1R4J;@c^{qzuMH>wApi^UHoT6pvH<>axU8{6UIOE&IVx{2_|xmi>_8nJB*n zadYDu>~fw68(Y`FEdh<JF;Bq$88#|cV+35jYG@n+f9xp%x%bSYho2r5c%)1R#ML=O z>`-aY0k5DhzSZlrYqH+z^mR0xLDTKk@=9OZhIIN2I@h<G#Z(4=_Y3r6d(;yN5;Ii7 zzMS$`IEhhDzmUCcv6{!)qiNxyHgyL6Wc;luYSSwC25>;?I4VwyW0G+f1n&T$xSJly z)#j!Z>;$g|Bg4t3LuMJtJ6XHV6?LA@Gt{CgEVf(T88SN!jZ-e9VBAUm#{oibH$9RQ z4p5tS(<3?N0JVBIJyKhjK|TR(Falj++}F_91<p7LvX%zAv`h>H2Y(B<CAczRh0p;- z2^jJ*ydbM%&^Y*WTySWU*=^vW-x-TmBOUgm+twJ>M>`j-*@0px<!XzYa7>Zq2!_fd z?y<jITK!(*Bv$<%F;?9Qqhc%^Jl{*6;#*-Oz<~v8vy{_{j!KzkZdy}oF6{~@CxNm! zOG{omIQ}Z}JN`gjAiiCU7`6b1u*!hrtg&c~x0Q438dwrX9I+U57-4}u%Px+t5K;K{ ztf$Vs7db7JPyS10-V<Gz?!#&1n$*@WNa#IMHWAFJJlw|GNcy)oc2OLQ7r@g>@N3(^ z%P&G^^+@ezF-7<mvVlOWC{*E53eo0nJ!~-}NHb}BiSTl}Qs3;dYlY13F7u@SXp)*& zHl1F%Wi#lNStj`(qocRwV(L!!5JV2F!csx(&57+{Ow!C!VXq`GthHD%9d4y@@W3}d z^h>zQ!m|l?sHj(CaaV|o+_Jn!u--yr&%?AH<Sz2{0FJiGO5F42*_2t?l7UUDzli1U zkRddkcYk7<Fo)4;SyYJ9^NIVPKtInbQ*DbvJcb>VFkK)fvVRhFEUM$v!Pjt!3mawm z$cOr0u}Y{--h>0H$iPmPH_a~#tJg+twfrpT3RoIRmxOAAyzy!<5uD&a$ss{`>32d< zFhttVlHvaaQ((lOBmugVkdySwv9Nm*6o6ntcZQ)%Aof&0-zuOeDA7Fov^5QaM?$T) zHDqM6KVt{HldRJaBw5WOT@a8R#&`%%)BG8l3pXwW2L5XXF21XzDf>J#6V3{9OGa}V ze3hInQ<dl1;d1{HO>%(rcr%lZo5J{5?QF>~1I}h!B`QF5u~Rs2ipwChpEX_Z;6|?t zS=vuglB44$6TCJcp=C;}8)#79sg8MBT1I8^?2_b%;sY6R>Fg;G#63WSpv$!3ShV*@ zGOco9)BF|cdBXNG>;YmXNOw+PuhiC5G6Ta+Pcp~b3eTUw0Nvgf7&z7qU(Rtii^|hh z+=K=l(Y~OzfCbd00!JAr+&V8yU4-lV%5dg32;iCgT~aG(WKK&4nrAi6#7b?brO6!r zd<w)~X=dWnQfFm%2x<}8Gdt2Gq8Mdxb?1_<gavOoinHq;$+QjKjd8|_)mo^obP5^Y z!QJqhHLdkP1acOtZJx3YPBGSMU^g+nQ9KKs3(IpR+6ET{92kdJ1Kj@mgSEAZ#&diO zCVjNecF0+VS{H1%1?~e_YHhfQ^|yVTmT)L=+`m4^3*Q1*PZ-`7SERDr2kSyqz!BJy ztOBa`(3M_Bu?tTuS;?(4HABVRdiQ!DrUQS7%(KuSb>36tj-g!*n>Ku>RA*;8K@h7Y zXIh3Wy??VdCYrWv4}HK5RiXqes^Z%LMDA8rR&n*l%Sd9KYfGo8xqkmz7~juZuRpWm zXHXlQLW(+TkM;Y5b-30gaL#-SE+?SMHSnB!6a5C_AU3@g%m04N%g+IdY#Zd^Il#kc zJNa;7VgM`BFHjt7Pp*J_y$X}Q_Mn;fG$r-;&ML76&=B|Mj3IB23-stM>hK3q7yl4) z3c&~3PMC6^L=NGYg!)2t{NIa&T&F&eW9ZP*o&*eo19&q+r=wu++=r}t$W0CCrI8Bt z?;&^5lp@9Mtk@yd@97tUQ(O1al8^lV4HFH{2Y0GD@pd(<@8}+KbV#noom6OT-m8SZ zHsICz&Ah`1dwVQ1AiWQXI3})uYbChAId7oH+XLUP%mcTf<YadItcL5yaH&*wk0Cs- z``$8&se+ZOhFU>l2|s9s?}qu+GD(o?7bga`z(b7AVKfwQ9bd&7(*ohyh+`4}Ub+Og zv~|&8Yi1q(z`|cSP+@cEU4GcPtrj1);c|rZ&7h1mZVgY->F%t)Hmt1SgWY1&+h`wk ziIt#zPP^Pv%D*f1Vm5JwRO$jLT-;(^AH~_i0pz?cc3Lg`8R!Yedb}i4O-sI(SZGo$ zMQ!bgg@ePPuZBYdsgTgG=p#sh=EN=;YjpX}YHr_!jV{m#ESP4%jjCI$Fh$&sGdARG zV{Y3xncoc?+o-#V&cN^r^5AYFTt<{n8}c7wSq7U?=`yzxe;l~sE+qF0w9H+L-P`LS zyb5Z{uB#34r~ixcI=Kr)c1o~<NIV@uCN}MdZsZYch+NnCE^M03|AgwIGlp+Qy3eW| z8}&E?3<Oh~_1)h_xEb>lY7N}$NT3DGrK4abA)Kgo*3{O8qP9e}yQbEtcfuZK=8>=> zqZ=+=N_-_{sg~iAwcoHMUl`H~|DeR_&;rTZH|c#rd1w{h)U0FwDVo)N8{&f2<jFM3 zHE9d99Y{7JEU-Bd;r{(O;X6exbR(Wpmr6~vfB)B46j7lve*tySO&_m@aInFh-Kxz( zC%X`Kk~1YciI9wU4{PsRgY?6!gWmRI$wdgSKnh*!2AE^r$4(vl<k-pVBigyXv#bYD zxNZ<%Tzwzek2U1_0JlkQP<(*hn6;z`A134OMeiwuWQ3f3@8YoIyApeuoxt5}sAnav zQq(VPf>4QDbFm0TU4)q%80Ig<ZH+aNXYL(7mtnb79KtP?@*3k(^cS7fn1kgPpl5q0 zvGq>4cVPW_N8w!k%Rwl;KX1G`F?VBP#ecb2HVzT!58yi4SA`b?HokcpJnUbfZl{PF zk>oRLejvmQH=%*0+DR7r7CLCtbRWUtdQMc0GX~zneB53WmY7JsxgPxBf|Zod2bsaC z^#TUXFw*vsD8s3eZn3<={BD8y-F)-Avv^(#5HmvD4qVGVp>f@NoD6p6G0b_;>7TGK zSQ~alR?VS_5WXJ4chmd`;}eKP*Ud!gqJH>H{<sD=5YvY2Qrsmh-(G`xqMJV}n8#Uv zP^OD2chX#X%4<OGp3_jDvaeY9xz2!>=^E&IvG)+-cV%M^_&01SS0H0MKv$grs5Or# ze{;CeD&O0U=GE4*vNezey^K^nxg<}=whvsAzk~U#Wx3i9o(+e0lk$hTOUuO;4{qj4 zl2>04XBKhf3p<6i#H3_&!u-@$Y5C=joC$cF{3W!jqt2D3>B5^fj~M$Vm|SQkqX41q z2T%b2<P|Js=I{^2YZYANlkj<;Okn&Cqz!pI)0U$v@(dBi@hSwcUPkG;WY(QbXmr1d z-iF=-DsbbnLw|(3pGQ*4ZCHu_2obUD6l7>Y3>2D36oLt^mS3MHXxT;nz5fClr6_(g z&5ZNmC;~14*6HL!T?_*!%vVHtjCz-|@_{NWfYVq9UHf&K-&hC=^N&yg7CXr8M9E-I zy78zABU=W%n&G@W?8Qu0LFxuGkGjMv)ARK*Kbna$O|6T+L`^#69$NTe%8totm!w@g zstZths1|A@RqXFjEbE6;4?L#pWi+}9BOlnJ@if*Y@t06S%G-H%h(Gyfd?E*y<6uV~ z#6AVi5o+s34s={NLIlf5uA;m&lJFu6NR3z>mHe*2<gXEcH*zS&2y;W+XH}$5LvL(+ zEyRl`&i{bYhx(h}je^_xt4QkJf*wZx3H$(JBgou`7*3bKRsOip$CwXe2J3re<E&_x z_xLh$I(Ka-;0C~i<E~XSAB#9>h>?FG+|6B3U|-OciP^-Shp#}#vXgWHA5YNa6U!+q zq};yuH@J$<g1PN~sO5)$A+&~=N)4?sb0QFx-Rto9))BY;aB?gTO%(;5xJVOItA;GS z6_+75B!}0e7^caSdZCNP>N+-9bU!#^pzU+qcXRI%2RJ6N!&X5ogfS!cW}_M>(lIwZ zfe*Ebf@|4$_;a(+fU&e6F5DR2dJoz(we3sCE&7)WHrk^L?qs(*e7DNlO|*U1q<`tz zFp0f<BAHm6=IA>yeZ{_t!7Obi5STtGS&+D;Yxv9K`^c{aAF<4kr-vQzf@8HZTke1_ zmA(3$ai@cpRCwMl!x0N;(N4*zTI>7u4{b*MIVBEz6z)~*XZ8JU7aY+A;K^H8`rhA| z#@@HXm?m-|yYDTeyybfrCsN?||6PagyRzmxAaK6m*)Wm4a^kbTx2CJWcd^}}O(&$T zO<t0?wM(QwYhg>D1is$|nkYqPH#_KxLQx{SSvHo)AToTevB1O*7qscSN~{T$U_eed zkFhYIW!is2{v~+Ic>0#e+UgdNtGQYkY->h<h<IsJqawiv@MS^P6G`BcHA#d8bu0E& zWaTHX5I`=Fbre+Cf%tEzVJALG#01`1n3W9}8Ain%xbF9uuqvL#_uX5>?AtOhv79Yn zC|3L;L^vY(C8_NL#a`w7Z<;&Q)?kGqzKblWva^D+h~g})^-+JanYz>}7pa3)<rYAd ztLgr7Nz2k#I|fCHz8M}K_mJYi@c5QU!YDbSM^*y~SgDB32}iIw%Oid-I-FQM_DoHp z%8f0ZPqEmb2{}&T3s7G=!ESWu-<I7%I`*j4B3P9u-6*5>3H#&j%?M%nM&-lef!)5j zxF+{ot!{W}P%Xn+lGGUvThXOjoAq?c<+5_^5yIE&whQ>kp@q=!7ai>|DzP=9c19f$ z$s>&8F1nuZB+A21Ac`DkZgdS-L#<8zL|-DCxMORp!%Qc{SfvY7W`--&hwRbd0Jad8 zc=lZv7M)4Ey|o<on4M?s_qGZtj?Ez{2LA{8?=<|f;dkJ~>n+;3sDoV)i>|hh75n`- zH-jEcA%g)`CS%Vo^jhM_(t0R?r8p(9shquB^hR5^6FWQ$^{ReTZ$6`7g^<`efS2LI z`*Ubd|3D8#gO1K7jsQi{X>oV6_6pY4m`A6R=Sku=CoWqz7RrfR5Ri?94t>qPR0wyK z7ypI$rKPgG<?vuztQB3=yrdk*yEZ!ni$Nqm={r6>C^KCCKePnH(pwNhEInLUcsSYH zMK#c96Wcyf*vntjXy@2%131BRv+s+<meK(>&8T)^0jzv~DG<Z29w_ku0@xTitNg%+ z5L8dwc?Wc0zkYtf#*FBKFqz|5Iee>Rt=!UY=RF%PA!+PSEVc;+x04jyWuz`9C8z0a zP;et3AKyt09HrxKlTn%hWp|r{ZIg}rF;RCFy>6=>AcKtZ{igs;$2D+d$8_A5SbQzE zWQCGl#p=%`3N9G+E+|OKU+*%)vT>_}G|H_qp1!cG)wL|ngccc3S|rn<o1P5?O^xG8 zi@Y&PKTJwg?5tpKBt7DrD{<S`lt)Y;jpQLYcM03pK%(M0T<2^ow&BiPq`>lI+%#ZR zT-V<{52V9tuLLh8L3{Ji<yXM}V2RDRbs(|AJHRwo+n{3!Mh_(DgQ7_*d*Pd+#G9ze z+5mkX`T*kiZW|s@25CTf9m9s2F+}g&kpX3i7*NEQzalmU6wrH<P_~<7luG(mgH3k8 zu<#kKu=-rW`31Y5NJ(zbpzp1C%BhhJWX%{-&KV9J2!X6ZIloR*nx+$<lX5N<WPP2; zif?Fq*Qk&8I}$0fE*VAEfXlEO75M|0>5gV__imv8s%5AodpfBay=|iYK@SFKaA)n! z`gu>Nt}$DG-8}J`UfpjdbHH}`%ci&Y#3wXN=Lo&`4(0{54(6M=w14Jc_S@PRz1<CO z58ufK?mMY%V^gT$zXS6QVBXP|C$S{L-FYK9dyw<mRL-o6zP;1XgB*GM3HZRUlc*=P z-<6d{Gt?Vl;|{Z1U51U7yYv!M{gW|8AX)BWE~p&+OU!%N4#9YA%g&0K)r9jKI4BOA zDYN*os)CgcwIvtV!Lomhf%vd$BtIr?^VgEUcxQ#zocTJu@~whVXw<U`dh^Jl_z~#M z>T~Rl^A0wq2=ksVQv3&T--<cSN^FnE$Xv{BarkbLwH1&hAwi9ou{TJ-2NGLKz>P-z znVBn^D-8S%Dw>y7pTWRCJv%uY(qn<`5JRE`J$=%kf*e{lfB-uER!3^0(2sg#_74u@ zeg`UK|3HdCiDBCf3TcQlZ;=fE)DVDCBd73MX>n%uU>mry8C=>pv#Bv#(y|5XL25qF z^05&n9mv|!TtSltfaHuYXx0NX=SsY2p}M3?Oo~o?mUROZ8H~u;#u#JqSQ2{ZLaoPs zjN}?g*Fmh$vE0P{He)`F%a{13&^QZnW3DA83tFarDJ79wHRQxiju9p&yOE5s7iX5S zPAT9u2VnQ0f2q4R-q|na&DrhAn{dUUuHF#hhY!*=#Yui>7P*An_97irPU5O2oo*Uy zOh-vz=E?#LyJLd<zBXDrY%Rb6BQbbjLFbGdr3IZAHR<>@1MDHwJ>lqR{3b&uuKRc$ zRa&(RM0m(TfwmKzbj_mbq{47k@OqTc9^%<gP!){>A+hT{dTmTLg5;Yh9^SeHWDVf^ zPG5p0ObJX>BS$}QtpRL@Mtm;(zl^;l;yDM;Qq3i-!QHSe;4YHOc?FQc!u3kLQijC| zsD%F~sDR}K4dDj>ip4gzraN(+OJc5dkxPd4`v&&TmSu%$r;c7Q_Rd1_&ATqgv*|(_ z?NHdXIT(ccj?t#VW&9LM1V(fCO9+gvYLQh{cRA|8<q{rsEL{q0S&;6=DPwd4Eo9!r zW)iLHV!I&tETgv~)6t~Fb|S(Vncn^DVBD;7C*lRb0QSuw%P{9=8VL`gW?mO&LX>$m z-~lI6RXK*E5J9AvdGFyn+a;(a3c&7Xd>(S*x&q~)n?QFXUV&&!oZ5%W|Ki_-47X%6 z(Q0oier1I=N8(f&F4phVH{(93yq4hH=B4MFtN%i`>qOJ&mZjva%7L~Zf16w=u@t|N zC8*A#SM1f;Df0UcD-S(|f&m-%BOMFxd0<LRMB$-j-MCk73Ph5VvHN8KVQD`KCgGqF zGZ>7f<DRA(*bWm^Pz|n5Bf6w=TUJEN0bvC)z;Q^lHVAw7xgd*ES279YvmA$ra903~ ziK<zG7|GsNx|axK#EH3-9eMb!@2B=lxPuWaG+ZWd7*%LT;9Sl{1s{d2O5aaK*_0h` zAY#U;d{dMw?7Z{fzcMdPo31?X^&VNP4}#Qf<>k6SCe7GO?X$W$1$etD()gv9Vi~;F zCn%}JBUFzlG%bavdIc_e2^!)%?=Kt;>=SrU%PeegG`3XKr#yK6E3D-&$9I<7GTy?n z`3_|+%QY&LlI~o5@E#!+04sw(UjlbAOA19tfaBt{6O-buYH*haS#ZIU;3SqHLg-Hs zuSrFMHxltGM10k*4W;Z6`f7@<Y8kh%>B}+rAq7FL4k^cPF$PXBT7m8RsSpzmmpDjw z(ki70#|jhi*+>t9d8k}VN=CZ*CV?+O*aWS7?aGcDMH*FIBw7N4g!15Gl-=#Y7fUc8 z@=E*|8dge8sz&-qlL!y}Da!v>O{!#%h_6;(D$kEwxNxnGW=+sVv(lnD%hwwDe!ni- zoR)g6HC%rGcEK}))V{s{`}Tc<hF(E|k@npw(g=@H?OQ<Y^W%$X&=vwo{8d9pPOHwF z=1S_Gc~)D{2-{wQw7)Kzg4=|s4fYP3kQeKT7T7zi7Ca5L*YJ|JHx!C2&B3B3(F6Ns zO(H?%7PX1HD1)pGw?xy?yOiLb#1H<&ew-3A(VeWls3Vw&6;tNFCBUlFzLx-f?{9l0 z>9qC<EY3&D3QMr9)>{HC`gjazkX!(kNl;e$`2}+?sVj5N5W~RbMG#Yeilh*{Kq7N- z`TBlJleBgEegUIi6-{4RDkK!Ye(|3$(WdsYeuJPfC%GUcy$8s6o4ht97ee3rVQ>{3 z*i>?fSUVT;29du2q~QO6pzaa7^iC!aDH2SyYB^>J-q%+0le@$TI#;BJhU*x>X_1dz zx5<3Im6y*H#lbF0#fZf#2J+6~4Y=t%4*)nya{)$p3vFvi*Ad5XiK~d{2YC_&;{G)_ z^N738ShjLt@wE>91DpC%ke8C8!RXHHy%lqCamNHAt94P%)%{coTzgL^C-6sytKd%{ zXq3?0V#s7l7}AWv0d&MKAn8;p*_K`XXxr1skZRj_e%o+C)TVz&PM8<lhud@szj_!z z7#R6;&svQ+YBgrw#f?$Wm|W4Ajv!w*lNy7K-^|{M3^e9i8mYTxAQ8Kvr@Ls()v{CE zhE~~Oc`mI#txn>vp$=Ak8g~#pgOEkaztzB*z)dvpU#TW*zC*i%^otfUrgsg<oidAx zdCQmoC2)sbB}zs~Y#m<0mwXN8Eei%e7lYqNAQKEO>xN5v5AXO1A$2ZMX_kg%wV(<c z%bUh1&$)Ul#!PYGZUX$=5<0QyizTeXI(=)M+#R+c(40lwc(fEUf{q;CM01l*0;X;B z<2AIM>7t+Gz<}TVG4u+y55@fqQ~6UsY}D@M)fS$(ouQTV5b`>jrzVexEzt|w)aI#N zy*R^HVsFpgJqzGszw-<~`_IG)*zc4z>|D6(fMAI483X=4<m#rM&C+qtIIY4vG^Isp zmi>!x@xnA5Z%tk@9F=du4^mXSwa*9zdvm_ucS4CD1|OA7qubHlHmx|ZnXXEN7wgnS z;0*lz@p~IMQ+O2fS>f%E3)S)CGy@y{NI!rx@H7_Z?IdD!#rd6>sbX_x<Bf?e8G}Zn z8)Zzl%5aM^c8n^+U8=cJ1|0a`D5}QgJ(w3XPfI$QS7ewa_5E}h;2a$Whz6I5-@E~V zYC(}vJF@TnT5!i`VC)C2VTX%e*UzVIsZMN8p^$2Zg+kU}qkv|(aU`Iic^dCQne1@% z%4LR)%AH8wAvk%E%pG0JuqQJ1(IA+Z`HjQ<;oD1okMpr~3NjyTKJtSt?vZ(XZHV^3 zzbKs&qZLp|Z7uocN7j5ord0GEJiB{@l&P{&Mj*+&p*>)DhIFP=QW{8&p4&QuZtn=V zZZ64JWj}sasaHP&)^HcKRrvz$Mw{OVxOWpg+%}ZhFHktf{@9bmBIHp*J5%CknLM~! zDg$THjev(0pF!ntz^E@IzYsSTJS0hu-vSnn7@Eg&KT%>oK*H8?Yd@n8<u}}rs91o@ zwlQbiG@gGSqRkFrPrIN~dKG79l4G&ogo_NrNXqJzh(@qC!Y76F$GK7%=410wAb9zl zwRKIuc7eKRn))GXX2nF4+FA=hxbVHj4r2lCd&N3h-WPCE)#?@aRU{?$46^vD3zQ%H z8v>?Q0LdAhvwJ6fe`RYRwH-s~!y=QFLVp5(V+N``2PuwrW)S-D;7ncuuNm@@yQl^5 zq{4{+04@|hEdqVZ!7$Z_Giqz;*Q^}1waE+%5ds8dJ=VAn`)kNLqK&-#SD1*x6dLXh zi>|>AN)PEo(K~LOaHQYF8ty96%N`FY>%bYTCBzzVI`a7f9wl}PErhQVybREN)Ngz~ zK(XBinxh53W5rw$6x7C7i=e;-u05IF-tOm-duy5A-?ga(-DGv@1pdNwP-OsaOTX{T z6jbRHRG||$U!zJtr~(%S^;t9)hal$sQ0PuX&<juy=;P5f;%@)sr63L*bI?(^Zve#6 z&hW%EREPVNdVqD``;&WTB0EnEpt9s8L!?Ausgc&qqXse1>ztZJw0smo9EP4mYn}Lg zE^>m6i=>XkJzX#^h#3U`@gu{ROkxZINommdM<klsEClhJTLK&6Ad4}9I-dn3aAN6i zc}djNj0pPfW{938?dL(*8_Dqqo2(%r>u`JO2f|PrvQbQc$+@G%oE*SJV!9|q$nP8I z6q4UgyoLO71cdzNgDEnF{N|6yuZQH<CFIvRBER`V^80h@;(6Om`0H-lG<US@9w)kg zO?HFi#CI|0V-sDyH{n=-AGfXLOLmGLuA?eJA(CFygvQ}sD>rRF!-bZb3l^*8N6734 zE>CLSUJ?$0JlMN{egkf}CFo+la0=L)c$<dwMLzW6RAOounA#ac75rWR(2ok{Lj>Q$ zUfysYQH_xMymQ19{rHMwSr7e+IHEIg&za%wfAmLxqx*k|M0C99esJQ&eLrE4S_+%) zUwg>Vbb$Q-w?hbVkqe)I`pk_o&lPVc&k%1HAN&tWck^EH&gY-e`+EMdh<f-R#JiBc zE#9;E8{$2icZxTRE#f_wKQG<|{8!>#!v9UY=kcH7tsnB68~yxYkyOEVh<6o_iT7f@ zMZAMt74JLvI`Lk{*NFEDzCyfL^E<?Q4PPwY5ndtQ>-aqJUeD)>x5{UW_hw!w-dlJ9 z-h{$)P2e(~OR3MrC}<bKW(xNIl2XafoPR2Uq?Gv|Metz?zAb`}Qt(v~B<C*PCW22; z@Hr8Dl7c@M!KW$s1cLgZ+2r{$^edZi5-DaGzI1Uj1N1;6KydCBzXrFM?rK2Fw?xWD z__G8>3XE}-^0h*?;$R@I?@Z;n!79b&OJ9~sxztK=`_fmWQpQ^;`M&hksT7-)Qs7Hp zlS=s<yY|4w<NLqbI~TyH$}92TWF}+?ff*Du$iqP%Vo{9pkPv7SlR!`c1A&CB28d)Z zi6M!TdwH}35(aFNF%?^D)!J5kl|I(mt;I)cOMoVTu0rvFO50#rz3H$TD?+G|`Tx#$ zXOc+->u&r1?|-{HaPr;z-S7Q8-#O<yC$1#y^E>6UW^C%za^;g}z92r4(tvF!fmr5a zJS;8b)P|e0exUHohGYxhZ`mP@AX0KDZ5H&@jzzaO0|%#HqT8=uV2JGLdyRwY6Rw{P zZfILze29pq3yoW+h-X>*`ylx9UblY0a`M9B*I1homJT+iV-t39e{gq<^GEivs4|2< zxIctH(uR%w)Tfph=Ogy9)$eh8aj!dan?uoa!GU_A&X^QuR$}#!sT!$NiInD|WsypK z@cl@oUX5VR2hjPJdRQURhZNc?IBx<t@AcGc6!i)Y>wa}Ch{Aa>SxA)w3SZ@#Yhsy4 zP|l_8>ll<EneUNRq#ZVgWjMl({z6ar_DQIo@-6HxUvi|;htcSVlw|m9^sjX{^f0q2 zDud=;4IP%?MDR>Zfjds`wlS(vm=`-E#+XE-j-OE!V~k5Uu8(XsT{F^SjbV5Wo>62o zT<|wAW1Dc?K<tD|0o#V}I@IRh6|?8`ZdN2sPil;%uSn)yI*3R|Pw$Qu|3_B^_#o-O zgl~(a{~OYO-rpP>td9tk(*OB#{DS-|bmL}j7PX|FWyW+mHw#8tcSev`A9oJxVHI)r zIzJC}fBtuzsb`lhHyq2B7q(vsO*?GTbSPF)F~!QACEpi5d@MBfo5$}?)3ya#pOeb^ z+wDFs;M#2aFzVB}Ee+c~O(*3$?mBTD{FwqQ1;$A8#-k^weojo|>{!yRpA+kEvH4q7 z>MwSu&baIjt3t*2TVnmKu~LS|yF+cW!eGx;N{A6zzSehtC5^Ypb04q^cm{Y9*a18Q z+y?|QzjnMK^RDB#Ca#Hl0`~-N2W|)MN!*jTow%L2@I~+HYO)IpN3(U<I>XHo2uY>8 z0LRzUv=IOkf7x;r-b;<6pRL-5ePmunw+PJ<3EQM!11~D2E8GcVdpcp@Cm%l6MZUG) zAeYeTH)!c(9!V?GCugianJ9g-g|ZMr0&lyA=VyR6pmDZs%%S=@HvfC7_1;&l_b*XN zOWDF<div_USpWN~7wV%zZi@;>4X9zb&)&27-<O_sZq8$>M#UiQDHLcXkO|BK76Uf} z#lTvCwjM!SkHAgBO~M_5i$(9Rxo{B{{aPX}0;*qg;5u;axG3t6?i;I(wvpa_zz*P- zl6ItTX4`0isJ>9|)HbRgs2gD{zg~S8nQXY9Z@mqK)Iy6ygSF6p0HGslrCqpCm`1G2 z;9Z;(^RWclWeyq46nhzTuGJW9#yt`t)dX4tuLo}cfojU>0>2U&dF`0O*a&!`g`0xV z_4k;kA7(QOzN}0Egl%J6RIw(gU$yQ}!0lkN%H_SXAtlK|yb2Nn4zyTm#DsuFp&Ma7 zD86p=D&kt?qCiXFwf2KdgFYlWA0Z&oE$t3yk?7jCs|_Kz@3TpCaH_7c61cce0^hR| zfE^y#9lXh7R=MOj)kDYw_3Jrdm_JacpQ{0d!b{qMmzevB9VT=h;!((XN0kPz2uUxI znxI8Eu%ykLM9zxn_0N)pg_>Bl_LQ`Z`7HfVfMfuoFEsK%|J+1JYkHCh$OH%TVsA<x z!Y90B#YVEnUxec3m?&x#7b;>A&K4fHf7Uk66I`ltZsj&7R0VDxhlW0=Fkw-#@dXy@ zu!@b7A95+hI%W^S*JI9mhC12D9vA;dB$?1_9`icO^Puv)C+vBd<@uEIyf5rI5YK`~ z9^#E!3@LfgO5S6Bgp7W{BM;)gUH*W%EJztC!Sp#EGnYuAsq%&%{n?U&=mI&VUx|R@ z1a*oS)|At^uneK~6R^KLq1Q>g-zjw58~y8YXd<^3OxZ5wBHd(<X_F)fGETGtb@4D_ zyOfWQ7kbQhq$K!pJm^y2(JRJB^QEvq#}_%lsPh8><X$d#N%$%f9VFK`UfM7U+R{d} zGuVtF+cVu9-X<ugVW4^$Za(q7-VD)cyj#3iOI+9^v*J}e;Vc&lXZa5i&a#eYG-tW% zyOEf|+=!~-=?Key^f>iksOFkOUX!ORB!u+=f$A>*d;LXqo()}ik#PvqOcQxo7xa^` z@U5Mxjg)?i`Azae-;PKbp!Cpg?s<&Vxbtd;>g7S<K6NK1urK!<Y){2)122uq;|6Df zc^Ecxf%(I|FtKRWvWv_g^H^X7f$C&&#>8Gt!{6CPg@Gm!dqdbrnApUK0RyqD<OR~Y z%HRTuNg>O0h8WWLVO``+2=Y<3G|DjLB=$9ia`_xPL_ArhHO^tYf=jil8$%&$eMWkI zi4vc`?|vp2)R?@>G_6q1mZ(4el)V47>MBBZ*W`WXWm}cJzboLGuqfaeyGU%~LYr}X zO59&AF>v!?iHD2!50OdOri9fKdp%8<tGBF05Nd+lU65M~A$^8_!`Le^bD64-y>iV} z+*$}E{;UCe_Hu1u!_T<4aItl7A@gSrbFQo>^01tT;L}p<V$19Vr)uiLU8~{%Oe`?G z^>!%(riK?L1{NizEOZ!g>MFyY+=aimhXD~B5Pl#LWVaj*8TN+T5|=FWEG;N3xQQDI zp@R`>{}80hh1PPy9JfV?0WL60S@XFHgl;qAN^|vty=6Q;f{xDws;%i1O)wTw7-IVo z7Oj+;A$lT+eC&q({2jXq%NZwf8%HrWFxKvW_Qw=GX5+;|faYRmnZsj>B|O3~3NX%n z_ddS!0S!0TV{e-=9M^d1oM3D1$5$Es{5eUnLBt*=8a6zktU`~x^G5O%`pcH<)x%il zT`4@k75PH#$H`DPvxY#6hn&+GKXV<{<CiKghj@+V8_N|Jx&56k<3fTPgH$N{%%z5X zj%4vuDUPg%DAqg;`E}<D&ZiUSpK7-24(G34@V6%ihjWRG{Pb%YU#M*_sy#Cd|Ft%M zyW8KqKQ(7a^)L$U;AW@qa>Jf_V9jV=?aCN2TCS58VA02|^dqCPIZ-x?;7#1{bN-}o zi0uuSK2r4nwDHiU9o!Ay5o65qx5euH>!5ZZySBDJwVVjmf6aLFMYs^BvXWw2H3q!~ z(;%lS6m;T)pvO`cGg}L5FC9yR#x_hBf8BPvu&Y-G!c+(*MZzTa`h*7T?%V$yJG&R< zlsGYzZp4?Y8_s}3d(e-V;|z>mx-JBb`a7IgHZbhZcV4;YyWqYN+&KEYvg11nH-1#U zgCkE6_Zj?-0}fug&mf<5UXj$nXS>6m`@EvcaNhGuIE?^Ftplon5?}?e6z~Aq066a7 z;k+W51wvBk9|O+-FN#kDC;q>7UP*pP@>S=Rw(p(yyfTGPa-t#dwoIN&fNenJjB(EM ziiG}r=M|N1B&}|&{<F?2;k1uah7-U^pbM~*Wg;*HxE!Ew{to9A$t(~`<8L;w6et&; zNZ<S|=ap^>TYjGTJnR>t)#{$@V%5uk7VPX)tx)}9i~;_$vBro~X_@fGK`p*c(6Shm z_ccfy4kG%9JhMigIdnL{Oju?TtP=+pgkUA)nQwrAeEPsq(87sB6bdBfn??76cEAp| zFgA55t4gq}O8mn|j^XANy!bhC48jd_s9~TBmfYvWp%H)+$2)KWtZ>$eqk?x<o6jQ@ zFjndlb(Y{tn8SR5BZNr*1)XM~JLz*V$<OjtoflNI^pG;4K<@DCqjos-ON6xiv-?6J zOlF@(WELF<T-v}C_iTHFPzXn(2WbOwO_}<n&=VJMziw2zc9yI3Z?jcxmlwrAV&7qN zs>*}%En;RExS~IXSp9J;Iv|J~YrNURrg*tQC773oWE%2dA{FNFz}RpRg_uvaG0X<4 z)KO#ha9-1rjzt~`h)KCbm8#yvWnIKul`Kc%2BF2HVwY^#;84=0h8L9xUmS)sI5efu zrMsq&67AV?*ESC6u?BQ53x=+at{vtpUy=Tn>%hjPRv@fb>>NZei@|TH*Pe_fyaRH> z+qn}v>wgrKRZayp#0=C6%HTf}vvC}PLL1zZe+v)J`OV#n=)i?}W&PEaUEz{$-9>27 zp&VDLisExmUlyYe57bJ0b^X`NPKqF`ALem;0ng^WuokSF$I*omA&wcc<->L*C)w^$ z#@105(>pikRtXe*PBn`NCWH?v<}230wAUWEut~0FW8dub!7=*+d&g-odQ$iK5(3Qy z_h7xtK6cMla=P5A1>046G*w<cCcFx)i|N%1)tOq!yEKKxMVy%I^Uq`)PYo*;6We2$ zTQD^YA7k^_xG=ZuWYCdY_EFH5TXqWbD|B)ozF|Z^c5}pE?uQK+J}++<j-Xp4a=J}l zakf&I<nr=2+>|;{F2`5r2AUC14SawNdSxguK5Tff1wp(ReX7WYCr5Ogjhy&`?wYGR z=ANe%{=|N?Z*Zu2VNWTB^VlE?Ocdog(hMR#lw^kPwpNPcxZNv7<o5n$;YK>g4Sid) z6wVlH{)&i*#y*M@7L64NAM;8{S4rUpV*{F;2Dw!$>r^WrA`-cQ)8U#<Q56p>`$0fv znZuaInX8j&uMF()eo2pcLnnx>(zYf-IaoN1od1%^SY&iYDsf*+$~R27Y08`qCv9kw zOjU%BzDgnXV4bl>PIk|Hi{z}OM`r1#lo2###z@=|#HAWZB~MB<G^wA6Od~yVv}}Oc zD2cG1tE)pIs)t{SDt=8@1B!q`Y0f6O5)zp5y!5f~&z_^WLMO5-pE#vhuEXgU;kZ+? zY1^Cq8@XtZLJ2!0ade)5xhlUAJ#C?g0Fp6RV~+-Hw1!~2<^&S)*Bs>t)U+%SQ46WK zB&rYRMQY-2Nega9LlI`8$l&K}0|k3jgm<t?8RH)mnrIcY`7Fk7o7>`SaHx-?&M0K8 zpVK~(`KfGoUd_k~D_z%%ni5q-x@~s`2G{LYmD*i>aUc7g{$0pyv;}|H{B9h!nN)WL zUiKfmwE0-SaEG;II_xp|W(#Pq)Xsjc&7=7)dXaWM%_h<<V3pXj6<F3`OYF>lRvOXO z85-I}-KDi;2ThPg+FW5{1GBi~x37s}lTPVLNDgi}h!h;*XoQB5g8>Z+<530+()tZK zFJd{Zq2?7VEIGF<moA=KLMA90Wm|bIFw$B=^=1AVGsajdN=1e4B242Ol~)#u>RYp3 zk*$D3t&n7nnB$*kl5`ZzPCdQxrn<9=cb(gmIV~)raJ6}nWV089VtQEa<f?oQnn#H$ zENN7Yp|Rw&!I`%G5XpMXb<MO8!J}nTM5e9gIM<@}BTe>cB93s}thilfElNyKiX5FB zh20b=d=UdqBPF8|xe|g0#4%;}<MWD!!ZyxWBjq)v<`v|%_;rU;<<V!N5W?)D)6|fm zI1>rNMjB4)Fa%gu-8S<#aM?jA+JXZZks&=UkaMtsY8^M%zQqUB);D>DSY`Fu^Sbnz z9EH?R_5+6qyE$#m!}kwpE@*%Aj0mNMed8m(d-3J$gc?6^mj*7%!t#ONljFiJRIp#u zw`n$PCsp<X=3^16GSAJQWnvLZj6^NKYg0a6o0j8Mxhjo66(0VqS;3!;ReZP=zfG0+ zZCZ=prcG5%ic1_ZAN5FpJfXlwEJ%%Ls5wb7L?DqXT6^wC)dOZe4@^8jO~mPKS}Jge z%S$)FeG9zgKenkM$4vb|zi{FQa#{Xz<|bVzD_M@oO_jA=i-V16J3R3amYHlvCUXAm z2pA^<H5~-_@KFK=b5mb7rk;Mo-|TA0L3_5<636+L<FMgD>?OyU0~523dloHJmcFbU zP~8$~Hm(%6$A0)&fb!Z@qM~U}s(4aSiKMN|60DmM&JR=xyNS9Y5{cTQLKM`#N~?$Q zo0C4SFd!5($($SLEhu>i$`o5mG-d%t7uwW*Kd}{0RewR9?YS|sW`dc}C;Hbv9UcDh ziZCuU5_E%s?J)f;3)E6_$qeH*!BiRx(LTW&J?5NP%1SGDICsWdK2z~QIB`xW$E7>K z;_T?p{nv?5AA`?EQ&$y+s*d;QL_}$vSwe}zd#92F?PyRHRFw)|o?;~GN9$@_QpL50 zmld|RlMRz5f)(wwup+itb$P<(DYKQ(5NRdz6g_+d$jKvuobFKwFjsu#<RJ$b5g=A} z2ewyPm~oF!L}&6W(JUs{f<=p%l1^EfkA8vSDO25e=(%PKt;BMAgB1c|cAC=FHA7mk zhzdaA4qlF?S$RxtT{A4uuXg72S;k;#Vs0c^ZOroFL<_1I`ZEqoOEEP1v17*sPa+n4 zM7G<zX_B&d^IcgPxQc^9BOxdwOU^~57MgIJe7|UU!*tb-<`WQg86vE2?VD+fhRN`U zQd@-T2JWe(g?Kwa8=6CCRz+2A(U*G6C!S{A?VMA_&NHf9jnW1i>0fOAh6Kav3!dXq z?80KUg~bXBPJ0m=Vx*8_SeLKkt19<Mp3~VmBPdEl`nezF-9v?D%4!&)7ADEE3iaPK zPgjyhp+nhrLiNF7W@?1OH$-+2(H}P+3byz|-WwRG6MC9xuSS8WG-sghMe*2aPilXJ zhp=X8OXGB4Py2)Tp{m;dj72rP=A0U@e=eOSr-g{d>#q93Pg=6hqVamD`4n}uFnm#d z-PMxyNw@NAd()E6GTWks!eGk_RjC4-b#F+Uj1@sg>J}2h;?As2y}xs3&Y9*m$AIQu z%CF^|W3A_kzLm?mJYc_`1BZ|K{dD@z{%NOMXcprWjyJ~Zm&45;17{F6_KbIZ{bu}e zZEWm2Gg^7t!&A$QHqPbkF~*_E`)9Q2{lOhWAz$q2Hv-K!375J1@D*NnHdIKnx<rqK zabfft!)E#mn$231ett*qHE9;_=UkKORg^^iU-Q(Gl={+|OU!kBB5PLU;Floyinuep zIFV-*=8VbhaamJ>(>RWaAK)m75saoPQO<SdcQ}8;3PteF6<t~u9jAZSS<CAj!rqb9 zLu|B?et0onh?Zn50t9Bs^cHP$@r-J(wX4g_Dhqk?@-UZx1Z9i9ShSj7CF~O>P!}E< ze1oA{77AS_p%^*SP=cQ4F^^FR8A&yRA*$-stIIql@yG$)hLVY~J-k8+UUo_X?2-UM z<Oom%gzBXM`-IwV^yl4v`WQNpa!(%%t6?f0JH%!wWIAR$d=sCn6HbmJ7(cg`%WVD9 zxQY4ET-I&`hP!v2E2Ggnv;>371>VH8VBt}wcFL?3AnC^RvY2N?V43;m0q+?)mX(uQ zq0UY|3&z$*Xj!~joxy-y8^^P}1W>JPEimlCNvW@I9L4Elk$Dq-frAANOOk>YK&1}V zyv^VeAr<cYZa5hjD9ONib8b099;q)ow|s!hQ9gB_@fwGTlo}Bx93*Nsaz>C9o6YOa ztq(}POI+yjj9uDpkXY(L=UuCDxd^z?US<onTev6Ef`Xq?k47ox6(FIpzBVys)s*#~ z{(7S)X3KB&gN*}baKm86fi*u(OQR7DGx&T;P145c5?ZW3rL|u`(vev2Td_>;MKty& zqGQGZ=N%wsAuIB+;7gXkrXY{5TxbhO8@?u2qF;d{xFy6G{I!TRZ+&ZHnkB3Jp~xyD zt~uP1+KQa@_)|34UWyzgXZ`3-1_)l!IBlC{*+^9KIJfK|Swu41)K-aUUX`gVK<MV> zj-MbS2)iEdE)9a7U)gwlRQ}V#`Cnu{{t@|iL4f<GULwJxKUD;ajz_?2M21@>AIVq0 zSiD|Q1yX!hHJmt9<eT3+NL2*$y_bhT){%ntpHsxiSZNkpzdd5ns^2XMc3Acfv;T(# z?<nBdz-f|`QmQdRM^2S%Pgx=ieU#}q!n{fX9f8Xw*0b&*locR}09b`1K%xXdNn{c# ze$d@C2d-T~`)vf2xgaM#sfN{v)}n;98YTjFFyGP#<(d~0KHnTHv9J`<<lWbenqO8L zb(~_sQ9{Qf@I>k~u!L34tz=Iv!Bbg~%oQ*tDag5`PK7=eUZUS9p}<RIi9Y<PC0eA0 zttI*b_@L4EYaXaQ&k`+CnA~dVUZP)PiGG#9(UA+S$iW+haF*?2Zx|}8FSIhXN?*(P zkX8Cip(@NqbcnZ*(bPf>s(3~%va&`GH@`wk7UTQ#F4tl7D>yozE_0YEh!wNxgDVXT z^lP-oqmXtastbojFsL^IEfeDeUu*7+J$*!Qsh)S%Q^CX+qM#iF>Sf01?38#!8=LKE z{uIqPotIW-_m~Bn)v%J~8DuZ1tiSmtofaH~-8AOB(pWEA+eHby5gd&=z^<r`l#3cd z;NrRi)g5Wxxv6(U4&j}RQkMA&3_RtN2bgkh*{nSCVz5D_KDXusa+_(`ewsOX*YxEv zN_T7LcBxWo+z9>}3FcG=(Id)dkFi2JZ*0m)g_4diCv&o6S-8O*OjcG)lN*C_|DKe> zPUqJ9SW6KAxSHWn5Kcn>eM6EJ-?)%Z7=huFBnRnrPXof{k`og8l=P{IV&b^VyoD|m z-KGT_7GW-We$$j+A=;cs!xfMT>ZV1t5G~P=q!3VqaOJgQPSccUuom4x2BMF(tjvz2 zf+TKk!b_0IJ^GU1d{xf38J4LZ*TkOwL(`mC)S}%vjX1L;p3^S`7*Cl!95*8p*SX~a zK8Oz2#Ag}?i^>ipZHB2zN*k?1rwGJWr9UgJAPqSn#-g-1&3$uTp7|uwx8k2~e(-8| zjOha{LEEVit?4$=cF;Pp#g=t~yHuy&7{34Xp)vawvNKLlJEP(B=bXgCWlaP(%s0=F zg*1uI$-c`BN`@FXpiQ$*wwKU`;wzKQ@?{&$m4=l;${>=7EF$sgij8i%C|{sscAoiz zCwZ{SeHl{%nV_`31>ORATngM8mTc+X_hl7PSLVJ^ta6nbg~kN)I2DYZ@a0y8qvt3E z(GfB`Dbz_0IEfzfF1o0o05xVi51q=qcBEauB(2dk<FNik=hOS0JAd1J%rO8B;)%w9 z?BGb}(}z-)B<cep3+#08eHCj+E3SO!!c~`Czfu%*xqj7SAJd}ws|M-5qjxRM##m8w z@TTiSH|>e2I4vFvme2^slp8n#QjKhFSgw`}{Rtuy`-1-Rmi_v|u&`}#z>)mGp5{Ng z@&+6UB>Xyb_UuLkUQbVc0qM*${trU_j?m<nC$}JLTX#&0iK#P2j1xycEKZE!sC$R{ z*BX1#1uMF_ukS+kcN$C4`!oKiUydf#cSUk{k3JNyqj>eh>y_ZW%a&VZz8-;Dihlhk zmctry)1J_{gP<lB{<cKX$q%!JWYd??eRJ^3s&8ctaU<#d2UG*0M)XJ^hS~F5?ufmV zyKs?tA)1$Hq=?-;|A`T786qQCc6KQ@i5iw1N5|E0GbCxbHS;)bH~qW49)wk>^dEB9 zbgEKdd%5{4AsUj*U*LobqX^v@l7L#!+7}W_G4Jv}Magf>wu>%_A?96HDh7^~U9ha~ zFZAc8wI1j)Tu<EMAQi0FI=6<vh-BJc*O)docGtnq`mD1kq|Pq07jVH7{YAS^ALJt6 zF#p?U8<wEUjLWwt+w15N>w_`c9Ao9xU*#o~1#2$fy<U|#I3=+Akcsjq6yw<%ve<uJ z<|T}Jka=0UN12BR7e4d8p&lJ1L8G^qP%uuQa^1z;@EWto*^oJCf=H|Ebu}y=bY;M4 zd+AiVJzLis=f<I5LN6C~)~)r9fHMu+NNZLHOR(0GIVdh+df{1pe!$r{Z_qdim>~hb z7ztQga~5kD9qc(0cw7QlgM=I}A%{uGA(4=TV)Kwt;}f_zV{%Gzc>?jFDg8o2uT)Eu zbIVs`dx28+g7eNQ9=Z4K{OYaZ7axNjI_?0U(rTSsL~kVdf_q;?z6`5@+={GCNigDS z9jK<Mb$^W3DOPgZ9`sH%aP8`d(|?exIWjiJ%)G?8<q2M9VhFn4mXS{5syldu&&CGE z#ZBobCQmRD(&bBwEdf(g80=mh%0kVXb*yj7;tqUtxg!i>w%ROkZ%zM_bzwPMM@T4? zpg-GU8yJXh%n70CCN4NGweY0TPknd@d&?n?V)W6GSER#T%G*x(49X+gK{n4};01>U z;;q`JNga^`YK)=m+{({7DIGu^om-`bf;kJ7;l{=RTlTN(m(hL)FB}B0bjwk*)4u6K zGWQL-(YbR#TJ5uKkd!ptY`oC9^MLbL4f4t<Y@oSeZDel<emR}<jNNu5nASaD#%6%` z*Ds9Q(7*A*fU|z_pmBKEjL6&gjEP5r7o0wFe_6~Tg$tcMtZK%gYGUEZLyEG_s61Jw zg;fp+?VSqHc;Q=T9&<DWDDdZ;V8=NL$zE>7EMbB`R_1o$S?AUO1Az8v_gik@;>r8D zjrPrE+b$Ann0HZfu!T`Eh*7c1|JlO=CNn9yoKHJe`Oh#iUgw>sfx2^5!+?y8G*}?6 z_NOEe7QdR$V!2~fQ+BLMb)bJ2w^Uta35sVg!)OcP{8=ufj?_RwBTMIb2g*%qpe%_D zlnJZ+HJu6izo0T?RfA0iOQ#GLc{szvxIlbMX20<X!7s?*iMIl8Rig)Xgu{H`x2laT ze~cAMA{pI7Xt)faq=2(YA7nq(PlnK-*q~!oKvSXU6;`!&WxR0c&2$C|6cjzpFe2-p zS;J#Pa(k)Z$epX5TMKwVBUJm%xDW-zNEcMVPN4z@2nwQLDL%;J#m~z9h3=$eZ4y0A zh_1GDD+w5Fj!+qxvEAV;8et>nQx@(%G7g<#wxK9KNU<x$2hYm#%yKb&e>w~JOGJa; z`4o<YTn3-?n3u|pS)rGp8DTnHwu@MQ!bgLRXC#}jW`vC@mfAPuc-)YDF1FU6_@ZPY zN+s0@fhw8(=v0=g7E#F#crEpXXIrxlCQ@4t(R%-e!XqtNAy+V=HA`d#wfe$PQ&yYD zbRyd&hvYCCR{>F7p>eKfv|6V0K4b9dW-TpVGvZRR+H`wuPN-Hau-PW=d5%<e{hB|u z`kZWiQno(cJX}qYli&@SJ9&z_?*AoTNw!^xRVZ5v4m;KC&>f_#k@9=3S)C-4ChR7p z^M{nV#Lmohz!!j#fXi>D8QW88Iu)kh5gZj>&Vxh4tA8+&2dS1^qwZi%Jx9XWe|uJl z2C2=;l>MeuJ(>OgO4v%5&JrRFhh1XK(pci1Thr*n)~pkFYr(5|Af6T+&jVkz;K*50 za@{#gL!*hlB6YWOtJ8`gnUY^CYavftTQN{K&;h;<-kX!eG8oSn34`Ii3+i%C@?@{e zp}H}eKc@rT@(}8DTmPDqJKT})jv(5DPmrA!e0+yXkGEpE%twyVxcx*v<r1@uZn7FW zho@F8iO^~#VDJZK2}NI4IZOXKSBRUk4ze0{Kzoxh_d4_|NoF<p<TFIvHD({{>_o;+ zj6SZ;+bN@2q7#d_=ZH8ZFzwSKNY<T)vzAbd$9xM$VS)J*{sy#moz@f*!O%2jIH*JB zUrj)4ncXKzsA$5F;O^d&=5oARHIc#%KEg)8PL>l&3-*^SK!zr=?8iA}P5C{!_6uMu z>r%`F28JjbfdyC%C}10`-5(>`Vn6kr&rO-JV{6^D^*Nu^dOyjo&q0H7Em@svX50TM zBZC%-)o(A0<<dw#**pTeqb9BiUvilFS`{Kl)BQxybNJf+21<7R!V)FYKwVg>g9vVZ z{UbHk*={a@gmH<%S=hXvoobr-5Ce<E7@T{+o2Hqwt;Bi%*{Q4$1xTg<zm}Q!td_<= zt8p1z*J~ToYQ*)=aRqJt;Xr4(#<Zq3>zT7;c<EPQD+lK?-eRpc9C@=NIm|c2pGQKh zj|p<Fa6J=aW4_2Z=#O7)(8ls{I*Y*>&ouct1DHajH58i8tvh((V#~ACbJv(=lGD<h zTjZX+Jl5)KQ=6Szx2P~D*cR_t&m%pxW)KL#nq;h?JGZXF%lWIUvy(&F&Mo74$#!mC zgwvX3hR%wkW?}m!c!@1X8e{s4(rm5)yY*HuR6H)nBVygrx#erp$~Hy3oMv8qQZ+FH z+_}Zz1DWf$F+iMK|Cs{T)tK-9;@6r{AT@74iVxemlvCK?1a;nV3&WqXI=|}SA)Nm+ zFNE`VZppycD#Ig|C&eJEt#=c@J&ye7(QzU^HtQ^ZjA0b^53kEqcoepQx+96slVYki zOX>=vyeyU=ORe5lh28~WP4z*#s_HE3Q}BM8M~WU^k|;Ko%bPN1fzwP=H$50VDt;~T zZJjAKCpNvsAQzoIVY3-B9b}NljBRvWn{&4I*rsHm9G)|TV5@MtUAvCO*S@_e;Xpk? zW1kqKnE?(2yNJ}+AP33XYaQ-DjkTl%URHx?gIZM9bWh^&vQmaIb7&mz%1Q&t6CnXv zvM7BI7WVDcY7U<}ANN`6{PLSLYx{j46K-1IrKoBu#Y7GEL16{B+`URV18z`Bin5yu zcd$*kd?H~6t})W=&lhW}wl@B|%cZ*&3ChQw%~oBOW^LB8Wi}xm)W9N12xL4We7g%| zDAgQIJ*&?&pCx|7^dO3_Qj9hoIq{=N9AzCB5w4u$y@XgWIcTq?Hi#~K=PjzUhhXLa zieqi+3l|D27#8qI(@UDFbXGylf4{A}j5i1a`1fF9g7T@gM&TCb2DU({2Atd@YU!sY z(EiOO>@84LxMNf!ya%JxG;pD+VmqRn-8Dq1MTAU;>YI<zn(=Ss7e3W07WC@w{M(N) zno*a7xQkGyUJVFQ>}5{bFXWZooNo>R1u454oWxAviCN5S+ge9!p*~nCs4tt5Z_aw3 zUK9hH9~#y9=G+J5jk~Kti~4sN2x6f~mBhJ4W^suQ=Nh8UZF{8LqW3?HzWf9-Bvq!K zd_B_K=j+|p*QT|xNOA-dAlBJaThMRb!B!k9o0Mmkh`k2EhOT6wazPNGP<eH3Jwc`s zjIGODA<K$jY#r@~)rT(g-uta0$4QZA$Vij#qDDl?dp&OjgVXiQ?mmU;f>y1H++{A5 zL^^FXodxC^4ranbMx##W#M8D8u!s|vieB!Mp=7G&>zm3>D;0{}X%>P$s#-Yxt54eN zYEHHhvu1B_l<6i_s==KPhI0eEWv40heyc9>RxXWQ<0wcGd$`gBH{l`5L!iBM4-L4` zsL~Ff??Jbq<eK-kFyymLwI(A)B4e&VEuNeYzRb74zA*>rdokmiu0%py6FY|g#aZ7% z!)!tn!g<FpdHRK*L%CvRZVKxGB6XI<1+K2aVP8q_g{cioc?@WZVyhH$%PB+*MhKq~ z<JlV$HrZ1@^w}}gBt{>ohXnZXk5o;iXw&YO+}HKnba?BjwJ)QdmAXri*(wdfLrIGi zVFf75<hRsW*8EUfd3u~Nz<iA-3lUM*IZp<kPyKk)?HkCp`ZhYjWi1!xrr$*GQ<=2B zWb<uEA|m0POeHNds@eB5n8xhJXn-t&SD0(NlQ%c<7_q1TiP-2EW1Lj{oKuWKvZ5<Z zNpwiBtlr=wv{G>tu}tV%dFEx3vE<+~hpHUppdnPU9AUdD@*%~N+pf$wDXN9d35AqN z0X;L0SW32h`1ugPPsHd#n3gJHv68V0+cd<IU5yQ2kxfi)OowWf@7%fG4%Mpe-CD|W zsI%^4L2q;qE*|>zxPr`#7Z?0xl(=9nvufwsYXb==`ySgkxc2S3+5<85gM*j%_T5~2 zAU0^$7TGri2ljla9bLOssQpH~I^q=WkuDgg?GiogWF0O$h%{@j+8+M2s`t|C<DD5> zcG1#cLSSGqtXL&^-AzC)AueaJeC7qGEEdC|2s7xejTeE1Yy?-e8;KmnVnEmE^x$;! zJERBQ(2o<n!Va*qku&QPj7w!y48z&ehv{)Gnmf>peX(F(S>`hIn%;+4*DG^L#ken^ zsFBQQR=0^<f<{d2VAS6D_NC2l_nUt6U<@+M&t|o4W9r=rnyA&Cy>>EanSTn;ftK5L z#X(?L)sS_-`SdQ~;@>JA&+K}U)q9JJFsUClBnPryY|6GbZAiv4c<06xx$Ydsxxq7R zc7=8~dhDlm!*i}5%yJeVjH@5!=j4>tnGS;}#pv8{fJCMjhV&~*Y4UI75aB;-tFZ^p z25n`w<(O<uB!(k&eLCd{A|-PYyjU~KywYS%Sx4FL?h~~-Ecqv`6^XeFK9R_*jm(;m z@gi3&?v@%*<No>Pmxx^uT#6tPCx~40(S=MBCG;fhgpooLJIeJ7QjoiH>cuX}6`ly9 z63$^a;>GVZQA2%Hn6<C5&I~g5!Y#0tCweS;xlD_aBf#PXV<RvBSL@ionrb>8du-KX zSRGa3Bn>%jXfb=VEVdzQU!arL$}xq%T6m(NaPP99%VS>q4aQxoU2IAQ;!#3moM5wQ zFkUndFj5fHrGNV2I|dAt;WVYYJmyUGC=Dlr>1vxs#X4xY6AYVQf<?(_!RnU3^CIJR zH3H3B!Gam$!CRCB$+KT4{mwaa5V<^<Qg}i*H7CqR@w8!~w&oxPN{POpjE$5<SxQ>Z zH@J;W8{%UE{ZvV}i!DkDmtmf`3&vddZ7QV>O_ST==AWew6nqq{pLTC7gHUP_sM&`? zr)h#Rd_eJMw=ZGnA=3?ZF`*I3y4o|d^h@*1B=SQ-_c+!CVpL8|Q?Pw<ym8Qs7mTC$ zH{=`%PMp3pM!%|dUF;0w^4fK_S;lBal*jzt-74x4@YlG&Kq(gtcUyDq^jZ2#Fxn?( zA@2B!4J+Wgf|shs_%RV^yADCSF9wrhS7U9=p}O$xerKyWD6(PG8DXkNpeHxLb#QLI zR@VM$rcCOBhEe9dG;nw``>wP#P0%W$&{}&bHEhk=%U><{ln2%<%(NFhdFH0)R7dsT zI(t^AJ_=oD4x>miDi|EWX&z360WA`1Zr@l<-Ld|-jSlP}PD?-cY<RWw4(O*@zYM)E zf#j6JS1et}A_7h$yo^D3t9@+y7Ur3!NOxk*aYl~qbfD&y;Iu&2F6tV(j*Md{?V)G; zly+!$zPFLDGK?xKz@<h@O5tAP)<DfcX;ZFGeXDQGx0b7VmaO<ASMl@AScJ~Vwx=C_ zVSSf@If{WvkUt=#*DJ_<RuJ217DZ;DnVO8Q$5FHEM}>!_4vqJACP_iVNErc=6xh!R zvrzm*aX}7R947zkP3G;{-2w|?%zUi*duj%~Z!b<Xf<Dixu<Q~`P|A0P?l%srEp<Bk zt8Bs-MQ9~IA!vc==Wl=u^gCR}Ww32Voytm#)sxIkc()4m37hTeQBgk*!S?IkaE1uR zG5IZS5hERJ9))NRTNm!(1oLWQMDHn2TMf}$ePi%;Ht7ywS`K6FTxgat`w9vqOnyY+ z<NW-_!Ooq#ojW^EWnKpxb98#+VAz;Lojd;`vU#m3S&7Iyq=N!>1qY@SqV`^VY#0zq zpK;jOvphOOkp_q$lb_~TDs07nLbQs)z)`yV9$+pg!HyHACUvt^ev0%|7|UvXMfEqC zIJc}OaJbaU7PTmMhkGqrNRbr2l=?@v$M=`1u@zlBh8L2;<47hCMywNdl;YJMnsX{M zb|mstU3y02#Z-#x6kWlkaBvCr+f@VDDEF@ld@zRqt5U06zC`|Bu(sbSTh)-@G@dW= zCG$6F?HBO5BskXjwD90#Po<A^=>tijVI&!nM9}7Z`hcVXCmyaPU;1NA)+#}F0kROd zZoD8;hWwr~SV2`0vQ-hXRS~jP5wcYgvQ-hXKUWc?DlZwMS21h)(;3dKLD0$Qwqg*< zxnTG%E=Om}2PDQV4WaLLGo&M(G={jWmA&p}i3F#}Z_-DY?cN{y^Ajj!Ld^XAn8vKc zPk3vMnI5kTgFiOV+J!78v!L(q!M|`%9C!&h4x9o8fh3LvW&(?W5}*p$3~U1)2A%?1 zfY*TIKo{WZA|8+iECYPNX5eeU1Hj|JuYlKpHsAzs7D)U=(~^MkKr)a9<N>z;KHvf1 zDd0um9iR)i2=dQZ;96iFa5LZo?gZ`w9tU;;Ex-}r1keRs09olWU<xoBSPGN@Yk)1l zJ-`ov=YRvi5#Uci7cdr7IvGd<76E;KCz8^%x6@ItaATTwc4?ZXtpLKm8~-^?`_8bQ z_lW<hqSA72v0JZn-|E%f-gTwAdu3&@*S*SDx!PUjt6b@=uAam}x+mO9pSMW&Mt^gU ztJe6hWmFpF#qNqqNyocVeDN!)5RX-*6~%7PdcCBwLVYy!qFc(n1Q8trV@6l0FO!HS z<r*`(J6>g#w?c)ws(Pibv`U{;wSF!6__8Rd$10tst=6iwm0G3d)4cqfq!nxB{L{1v zT7_n)=PM*xZ9;`nUT!@KBcPu&p-Z#%)B44_>{(e^aq^p*ta(&m_jJ$Fc!zdfa&o>0 zQjFUz`@7~?QL=)crmd@5$In3sh^!6=j)Q;ls_ht^PA3EWVq$IfxPI}D{s{vT2M%(& z248UDkf9e{oHXo`;Uh+ly3{@TvN2=FjlX=t6<?Tm<yDiePQK>a$y26IyKZ{QjMSO4 zzWAlI^y@P+vu4l9o_oWM^K#}d@GM-EyBG_ZOAG$#rke|wEniV|%gSQ!s#{A+%Wf-Q zT~S$eyRTX|)~sE({>xw4P_uE9BI{;VNSAslODlA*k22k;Wifu{^LL&$S-X}N%j9XE zDsQH@ci7qG)w6wGuZElJ)$@wV4fQ-H>N&l<ymF;P_8Ap=>1war>+@Cm+?qC!&Rslj zL2j<)Bd=QS-1&2&UbV~xIq7rf_xLQDmOOdNz=ZS)cTrVUdFjd`y_6wSQdI3;UBs{~ z!e7_DtE+SwvgMUU4BZm1JHs8xyS(%kUy*OUyOcWneBPCM`T9u-o^o$dwU>cip%<+r zCNZK?zr5OAZB$iN`uO54TJ2s%;a6AsyrjY7YE^<ss_>Lw$~Spn!d33{o?;lJos&Cv zUewIdOG>NVMb*{b)wh(dcNZJJ(u!N%6(qGria|w6D@yg!qVm!&tK<_FOL*ppRM<;Q z_btY)yt~&|8oubVPIAxH-2`1-S*^RvOK<a%x>U#Ktv1SacjYSg%A)de$&8kgGF`Q@ za&?uO;uEf3S?;^Sy~?OqsoGS{@S>hVRaEOfW2H{z`L8}^mY3%gl~$;_OTDj^daLPO zQEA*-;;ybLTFFX5a0WmT(>bcaqTB15KJC?AcdylXixyk$t(Q>f%8HfVNuR$xBp)eT zvgDCLN>aX_42r|wubnR6jS98uFmifAxJ$f6RaR+9=i2K&qmFA!qavz)>xnn*yz#2_ z;?IaTRpM0{jJ7qUKHVrP@97}vNtJ<=i#c(gwqIUZA<OpF3>;a#)xz3cu4_^xUQfN% zddfVguB5w)y=zKWdV9i#+sM1Fih0APAT84~GgUiZquR$H$8ea{47*ajggv2HM!{`; z!=Jxh!jX!L^dgEd(CYH2X{jc?&wIP!t(L;bC|?v_VCX<rvel(bC<dMMw+wfq!l;%8 zTwC;aobt4NvTDO~j(cwfy;fPV+FPMh2MMd%@SI_be771Buv#^^gjMrt6^ocI6Shj$ z=kAqAl91)it46S<<&>`URaRH7(%pHbs+JiOCw8~TJZsTodD0S?50fTM(q^)E-|AyE zt0-bcHY#qbs9am|Mfxz@gjupik4{Kn6O~{y+!C1|CzV~0(baDx&%#KT-@Q@KO+2g3 z5Px(|bU!05+5NmN>KW!*w?DG^-Ot~MdhS<Sdq-_uEgQ1!j@mmm*A9t`V@KY)bt?r* zPOkOT)@u%J!sXLF`L*n~Y|0)_J=wb_)YjJ$OJiFuDJgL{;@4GGt*xr+wIB2OfBes_ z_5C*i{K)#(_shB7v%!=;>)#gb)Bk#huhV+|#b}@JUvvtawVr>m5R*U8zes%d|M>pb zKGpwjG%Ef-9sx0R-Tx3U{#?IE4~n}vrsrR5%;)<TiGQv!{U7uDYcoJ{8p6Lwj`G&? z>=Kdc|G=+r_|I3{o=`5W=h=FSiIGWATesQ2W$PVZt#4=y+}ZTCySCl^^>5ts&3nIf z-~A7K`@!#g_j?a*fB2C{AA9`!JAUxPAN}~BpZLj>KmC`VJ@xaQPe1eQbHDiI^S}D_ zuIAl)_Wq`&b>IF2FTD7#FTH&5&~FdF^6G1^A9>@=w~qeq_kU<R_Vyo-|Jyt7n(coI zp7{6o-tYL}&mW%r=+x=XGk^KGi_3_A^MUC62cFM$Ao{Pa|9^G<e{=i)wFBw-zpDf3 ze|7z{vuCVcJ)>Gk6IwC9E8RK#-14xVpO%wzb#d|4Jn-}6Xj(eJnV55&Iy!6fE7x>C zFW|H!-nrf?j-*zAbmLZ|TGzB2jB=I64dBX>R(h4MRA>@8MZT3KxU;>t_zVuJ^6iGA z3iU`nlD<Z|lBPylk`7Qoy!DcX#Fw}dN6RhJ4PP-IBt2iLdRkm!_^QKx`QG9RZ}?>~ zXta3eR92|3xklJ6(j~4&JdN-g;UtX4ca1}Sn8uRN(X?`HuC5L};=iQY>sxS38Rvw# zJ%?nWc<^mrQMI1V8FLLJhbp5=`C0E)GFlEarJ`HC*H^Af*OugFEt-7oq|AAcAIOue zDFFqcJQRx>TJ1xXsW}ZmJJ1}o3XMY>(NwgUG#tN-1@jjySv*#o#F<y#BlM(6x2R<B zUtO&HZziwxoGMl?s;ra@_+?wpf9h}T1?k#BID$5bJzdkDEY-A!?mu@@kWr!JX&N+d z<wo9*Lc5b+<b7YC@4p<=`+I%V_rHvT-Y0<HF5Fkb&ywDqQQ=CaqB9SWUnHNt<+w1l z_xFQQ@g?4|KHp#L^ZmA2R(uJ29na^>r{jxOxbuA<lXm{^Iq7LyDImY|#V?%G`+MJV zPJ~7(zw^ca_WaNO{yR@k-A+V3AL-K`-&@oZ?nhD2ecRnz&^y2AbOzj%rd<liFH+v< z?}dCT>hpb9pK?62tatqAe$8H<rY#5L7fHWw`JOH7{XIIq#5+*l`+MK`FRkzWy>I;A z*M0W)UvKXHy>EX$_08Vj`=+0B-)Db6zP<PNzU9B^@!sG2&d<?1tnV7X!teL=dEasz zeWG_deZP0^?)|-QJ->Y*O}qIFnS_5Aagx&7B5%Fj|K+XxZM>C5F>|~XULQoJ42xox zq5I0S)<DC7ufsQ8xDXjaT90rdD(v}1rTXkjUoI4#a<8>RYTwi{6wf3ajBWBKHi+p_ ziDnm76qkcZd?cynR2CcM-q{ds=R><8^qX3iQ0_B)kc=S;=CbQT6xXzqvGcq|YrLQG z|4UCQR>Jw3HqoA2?ggi~ES4OkAnC=$5RJiu;$otiDOD0TqjL3XN;I#ug6wBX47Pr# zlU1_Wr)wQjdMjmEKGGUrw89iyo^Y)s6{*4E^;KTv-ZQ=BURtqF1+KF%j!^NsTkwY} ze*@BeMFjcKvh7PMN>mFKXRTWavPJDlTro2)wNsY!ets=>Zgr*?TKcVCpNHy7*S#w_ z2#%siU~uYUv!Qb;CWrR0dbSuEH>;9(q{`ZFV&_T^2!YdEJhuWCm{9UGtvT8sEF|Ke zD{<2^JeoE{T4q63jy$(f8aODW#cIre0cl^fFD|bpfW=ptDQ{tJ%9rH1o8vM|-c%7! zO4~=3{)wpeTCB*hbHQ=GWzVOr)fm!F#m<9{7$y-inx3P~VctXE9!ak#&aEn~usZd| z7|AfJhr*ew3m2n0UE3vje)@wp?>sT`wJrAi(qeB$Ns(`HWsXpcuV1fwwcY1Vhtc|| z>IZAqXj+jy&!Ua17AUYSG`zm`9<NVvXJ8ko@-lnMq^%d1uDmTgDt{E!HsJwA<K(Kb zs?fj1aI4a*)i~uzd%(6xFJDrz7GziZfhxfwuhkvPA|(j-&K8w&cu}Bd?~QtA`hxLa zA2Yk$s4kJTuQyh$^7@!*@5Ii_$SJC_+L4~P)Yjb=iz_1yq?ys7Xp1y!Zb{qAY$9Gp zZy&<6OaAi|6ULgN+PgANB=>H%-;Y#{a!bEV=`yv9^2%y&c)H$cjh66wl&(DxRhtEd zUS;SqdhhKODqrg-GcQ-~p7ZO&tDIzty+F9MtE-B9-tOAw_4c9EN2H8V<0!AlS1Jse zbnV8hMf0=faV{t>=g?GPTLgPS($%zAtvJOCR$1@kr7gmpEAtpkL`ts;p)+7_G2o}s zX8-&9|FZ>li2^!);#w4{a5-IJH_Ab<NwA&s{^YyB|Nj2B1wL;J%zr2C7e5{L>&!om zNmFB|{B7`Sfa6oBRs<IQlRp`!7XgtmX$wEwapk&a954_-4n^w^!~=<dBkYQwyh{<} zoABf!-y~g$D=u0vR30*2#BVTgK^P?O(SZ0*1>`+F{GJhhXJJ=y7KQzD!!FCSO1}VC z@@5%U>8!?e11z-K2*3wOS*0FQo?1Z4To-mX<H~nGAm6tDQXaW*cLng>@cVXLDc_@j z<oA6*!aWU0on8Xu`|E&wPohzzeIjkfWB1w+BQH_E$a}<%e2TpHb^Ctr`~KI$pYMAl zoqs&nb>5#<SNC~;{}^p?ex`&~zw;Bt|1s(>wK(q(2=C<Q9RluuoHn2)|ILR&$x!gH zSi9p<Hmnt!*KZyj?wrT}U_ESq%yR3#Cla)pmbS50xjP8o{K%V+xUJ8h`df$WtNhZ! z?$1AG`1El2orHh+;o}cqqW#;$=EFBxiADYGPJiQe6+?72Eqrs?n{I9Sn`Lia8x_)e ztUG+<_ifP8uGwhCEdO_lW|t8T8Ck<W74dKM*mg;JuN3~)cPVGzvWk7^$gd=rrgglJ z-J}oFwE7Y0+I{3N;l-7{7Cc9OvbT1cX$r@95m)x?hj3*tci_q-KKgE&+KYdTD>z0y z?uEEF;|fkQ7IzqK*E?z2CAfQWhvVLfE4V^2?kL<$+)HuW{w+;&<L<y6jr-*BH0?56 z7w$S-4R<|G#~;(QFXOi1%3wQ+8^V1NcNuiu&jSn}g-1!cQm62uq)Gdf(f9X#n5NwW zYy<8D>VYjlEwB!#0!o0J0S}N3%mk(bQ-EaPN?-yo7H|V2fFxiD-~ti>JJ9)O`UEfm z3Ezf$1ULxn1%3%U2|Nls1Uv|A12zCvK!1BrpG%)kqCT1Q`JGq%b=VaC$ry<tp2QV5 z@{@LQ$9+S(@ti*yC(*y!Dl2}+2Nplele;+j^MCl+lliyBKS;e?D5H`w9mzcUS@;_Q z@{_Tc3j7lw<KkO@C}w>H_z)OO!z2Uq0lAnGi8F(51;AS1Uf?O<Fz{zUE>~U+<N)Qs ffA`;C6IqGv^RtD2k$RV(<URs$Gq4!wJAVETV*lf- literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/launch.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/launch.py new file mode 100644 index 00000000..308283ea --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/launch.py @@ -0,0 +1,35 @@ +""" +Launch the Python script on the command line after +setuptools is bootstrapped via import. +""" + +# Note that setuptools gets imported implicitly by the +# invocation of this script using python -m setuptools.launch + +import tokenize +import sys + + +def run(): + """ + Run the script in sys.argv[1] as if it had + been invoked naturally. + """ + __builtins__ + script_name = sys.argv[1] + namespace = dict( + __file__=script_name, + __name__='__main__', + __doc__=None, + ) + sys.argv[:] = sys.argv[1:] + + open_ = getattr(tokenize, 'open', open) + script = open_(script_name).read() + norm_script = script.replace('\\r\\n', '\\n') + code = compile(norm_script, script_name, 'exec') + exec(code, namespace) + + +if __name__ == '__main__': + run() diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/lib2to3_ex.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/lib2to3_ex.py new file mode 100644 index 00000000..4b1a73fe --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/lib2to3_ex.py @@ -0,0 +1,62 @@ +""" +Customized Mixin2to3 support: + + - adds support for converting doctests + + +This module raises an ImportError on Python 2. +""" + +from distutils.util import Mixin2to3 as _Mixin2to3 +from distutils import log +from lib2to3.refactor import RefactoringTool, get_fixers_from_package + +import setuptools + + +class DistutilsRefactoringTool(RefactoringTool): + def log_error(self, msg, *args, **kw): + log.error(msg, *args) + + def log_message(self, msg, *args): + log.info(msg, *args) + + def log_debug(self, msg, *args): + log.debug(msg, *args) + + +class Mixin2to3(_Mixin2to3): + def run_2to3(self, files, doctests=False): + # See of the distribution option has been set, otherwise check the + # setuptools default. + if self.distribution.use_2to3 is not True: + return + if not files: + return + log.info("Fixing " + " ".join(files)) + self.__build_fixer_names() + self.__exclude_fixers() + if doctests: + if setuptools.run_2to3_on_doctests: + r = DistutilsRefactoringTool(self.fixer_names) + r.refactor(files, write=True, doctests_only=True) + else: + _Mixin2to3.run_2to3(self, files) + + def __build_fixer_names(self): + if self.fixer_names: + return + self.fixer_names = [] + for p in setuptools.lib2to3_fixer_packages: + self.fixer_names.extend(get_fixers_from_package(p)) + if self.distribution.use_2to3_fixers is not None: + for p in self.distribution.use_2to3_fixers: + self.fixer_names.extend(get_fixers_from_package(p)) + + def __exclude_fixers(self): + excluded_fixers = getattr(self, 'exclude_fixers', []) + if self.distribution.use_2to3_exclude_fixers is not None: + excluded_fixers.extend(self.distribution.use_2to3_exclude_fixers) + for fixer_name in excluded_fixers: + if fixer_name in self.fixer_names: + self.fixer_names.remove(fixer_name) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/monkey.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/monkey.py new file mode 100644 index 00000000..3c77f8cf --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/monkey.py @@ -0,0 +1,179 @@ +""" +Monkey patching of distutils. +""" + +import sys +import distutils.filelist +import platform +import types +import functools +from importlib import import_module +import inspect + +from setuptools.extern import six + +import setuptools + +__all__ = [] +""" +Everything is private. Contact the project team +if you think you need this functionality. +""" + + +def _get_mro(cls): + """ + Returns the bases classes for cls sorted by the MRO. + + Works around an issue on Jython where inspect.getmro will not return all + base classes if multiple classes share the same name. Instead, this + function will return a tuple containing the class itself, and the contents + of cls.__bases__. See https://github.com/pypa/setuptools/issues/1024. + """ + if platform.python_implementation() == "Jython": + return (cls,) + cls.__bases__ + return inspect.getmro(cls) + + +def get_unpatched(item): + lookup = ( + get_unpatched_class if isinstance(item, six.class_types) else + get_unpatched_function if isinstance(item, types.FunctionType) else + lambda item: None + ) + return lookup(item) + + +def get_unpatched_class(cls): + """Protect against re-patching the distutils if reloaded + + Also ensures that no other distutils extension monkeypatched the distutils + first. + """ + external_bases = ( + cls + for cls in _get_mro(cls) + if not cls.__module__.startswith('setuptools') + ) + base = next(external_bases) + if not base.__module__.startswith('distutils'): + msg = "distutils has already been patched by %r" % cls + raise AssertionError(msg) + return base + + +def patch_all(): + # we can't patch distutils.cmd, alas + distutils.core.Command = setuptools.Command + + has_issue_12885 = sys.version_info <= (3, 5, 3) + + if has_issue_12885: + # fix findall bug in distutils (http://bugs.python.org/issue12885) + distutils.filelist.findall = setuptools.findall + + needs_warehouse = ( + sys.version_info < (2, 7, 13) + or + (3, 4) < sys.version_info < (3, 4, 6) + or + (3, 5) < sys.version_info <= (3, 5, 3) + ) + + if needs_warehouse: + warehouse = 'https://upload.pypi.org/legacy/' + distutils.config.PyPIRCCommand.DEFAULT_REPOSITORY = warehouse + + _patch_distribution_metadata() + + # Install Distribution throughout the distutils + for module in distutils.dist, distutils.core, distutils.cmd: + module.Distribution = setuptools.dist.Distribution + + # Install the patched Extension + distutils.core.Extension = setuptools.extension.Extension + distutils.extension.Extension = setuptools.extension.Extension + if 'distutils.command.build_ext' in sys.modules: + sys.modules['distutils.command.build_ext'].Extension = ( + setuptools.extension.Extension + ) + + patch_for_msvc_specialized_compiler() + + +def _patch_distribution_metadata(): + """Patch write_pkg_file and read_pkg_file for higher metadata standards""" + for attr in ('write_pkg_file', 'read_pkg_file', 'get_metadata_version'): + new_val = getattr(setuptools.dist, attr) + setattr(distutils.dist.DistributionMetadata, attr, new_val) + + +def patch_func(replacement, target_mod, func_name): + """ + Patch func_name in target_mod with replacement + + Important - original must be resolved by name to avoid + patching an already patched function. + """ + original = getattr(target_mod, func_name) + + # set the 'unpatched' attribute on the replacement to + # point to the original. + vars(replacement).setdefault('unpatched', original) + + # replace the function in the original module + setattr(target_mod, func_name, replacement) + + +def get_unpatched_function(candidate): + return getattr(candidate, 'unpatched') + + +def patch_for_msvc_specialized_compiler(): + """ + Patch functions in distutils to use standalone Microsoft Visual C++ + compilers. + """ + # import late to avoid circular imports on Python < 3.5 + msvc = import_module('setuptools.msvc') + + if platform.system() != 'Windows': + # Compilers only availables on Microsoft Windows + return + + def patch_params(mod_name, func_name): + """ + Prepare the parameters for patch_func to patch indicated function. + """ + repl_prefix = 'msvc9_' if 'msvc9' in mod_name else 'msvc14_' + repl_name = repl_prefix + func_name.lstrip('_') + repl = getattr(msvc, repl_name) + mod = import_module(mod_name) + if not hasattr(mod, func_name): + raise ImportError(func_name) + return repl, mod, func_name + + # Python 2.7 to 3.4 + msvc9 = functools.partial(patch_params, 'distutils.msvc9compiler') + + # Python 3.5+ + msvc14 = functools.partial(patch_params, 'distutils._msvccompiler') + + try: + # Patch distutils.msvc9compiler + patch_func(*msvc9('find_vcvarsall')) + patch_func(*msvc9('query_vcvarsall')) + except ImportError: + pass + + try: + # Patch distutils._msvccompiler._get_vc_env + patch_func(*msvc14('_get_vc_env')) + except ImportError: + pass + + try: + # Patch distutils._msvccompiler.gen_lib_options for Numpy + patch_func(*msvc14('gen_lib_options')) + except ImportError: + pass diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/msvc.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/msvc.py new file mode 100644 index 00000000..b9c472f1 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/msvc.py @@ -0,0 +1,1301 @@ +""" +Improved support for Microsoft Visual C++ compilers. + +Known supported compilers: +-------------------------- +Microsoft Visual C++ 9.0: + Microsoft Visual C++ Compiler for Python 2.7 (x86, amd64) + Microsoft Windows SDK 6.1 (x86, x64, ia64) + Microsoft Windows SDK 7.0 (x86, x64, ia64) + +Microsoft Visual C++ 10.0: + Microsoft Windows SDK 7.1 (x86, x64, ia64) + +Microsoft Visual C++ 14.0: + Microsoft Visual C++ Build Tools 2015 (x86, x64, arm) + Microsoft Visual Studio 2017 (x86, x64, arm, arm64) + Microsoft Visual Studio Build Tools 2017 (x86, x64, arm, arm64) +""" + +import os +import sys +import platform +import itertools +import distutils.errors +from setuptools.extern.packaging.version import LegacyVersion + +from setuptools.extern.six.moves import filterfalse + +from .monkey import get_unpatched + +if platform.system() == 'Windows': + from setuptools.extern.six.moves import winreg + safe_env = os.environ +else: + """ + Mock winreg and environ so the module can be imported + on this platform. + """ + + class winreg: + HKEY_USERS = None + HKEY_CURRENT_USER = None + HKEY_LOCAL_MACHINE = None + HKEY_CLASSES_ROOT = None + + safe_env = dict() + +_msvc9_suppress_errors = ( + # msvc9compiler isn't available on some platforms + ImportError, + + # msvc9compiler raises DistutilsPlatformError in some + # environments. See #1118. + distutils.errors.DistutilsPlatformError, +) + +try: + from distutils.msvc9compiler import Reg +except _msvc9_suppress_errors: + pass + + +def msvc9_find_vcvarsall(version): + """ + Patched "distutils.msvc9compiler.find_vcvarsall" to use the standalone + compiler build for Python (VCForPython). Fall back to original behavior + when the standalone compiler is not available. + + Redirect the path of "vcvarsall.bat". + + Known supported compilers + ------------------------- + Microsoft Visual C++ 9.0: + Microsoft Visual C++ Compiler for Python 2.7 (x86, amd64) + + Parameters + ---------- + version: float + Required Microsoft Visual C++ version. + + Return + ------ + vcvarsall.bat path: str + """ + VC_BASE = r'Software\%sMicrosoft\DevDiv\VCForPython\%0.1f' + key = VC_BASE % ('', version) + try: + # Per-user installs register the compiler path here + productdir = Reg.get_value(key, "installdir") + except KeyError: + try: + # All-user installs on a 64-bit system register here + key = VC_BASE % ('Wow6432Node\\', version) + productdir = Reg.get_value(key, "installdir") + except KeyError: + productdir = None + + if productdir: + vcvarsall = os.path.os.path.join(productdir, "vcvarsall.bat") + if os.path.isfile(vcvarsall): + return vcvarsall + + return get_unpatched(msvc9_find_vcvarsall)(version) + + +def msvc9_query_vcvarsall(ver, arch='x86', *args, **kwargs): + """ + Patched "distutils.msvc9compiler.query_vcvarsall" for support extra + compilers. + + Set environment without use of "vcvarsall.bat". + + Known supported compilers + ------------------------- + Microsoft Visual C++ 9.0: + Microsoft Visual C++ Compiler for Python 2.7 (x86, amd64) + Microsoft Windows SDK 6.1 (x86, x64, ia64) + Microsoft Windows SDK 7.0 (x86, x64, ia64) + + Microsoft Visual C++ 10.0: + Microsoft Windows SDK 7.1 (x86, x64, ia64) + + Parameters + ---------- + ver: float + Required Microsoft Visual C++ version. + arch: str + Target architecture. + + Return + ------ + environment: dict + """ + # Try to get environement from vcvarsall.bat (Classical way) + try: + orig = get_unpatched(msvc9_query_vcvarsall) + return orig(ver, arch, *args, **kwargs) + except distutils.errors.DistutilsPlatformError: + # Pass error if Vcvarsall.bat is missing + pass + except ValueError: + # Pass error if environment not set after executing vcvarsall.bat + pass + + # If error, try to set environment directly + try: + return EnvironmentInfo(arch, ver).return_env() + except distutils.errors.DistutilsPlatformError as exc: + _augment_exception(exc, ver, arch) + raise + + +def msvc14_get_vc_env(plat_spec): + """ + Patched "distutils._msvccompiler._get_vc_env" for support extra + compilers. + + Set environment without use of "vcvarsall.bat". + + Known supported compilers + ------------------------- + Microsoft Visual C++ 14.0: + Microsoft Visual C++ Build Tools 2015 (x86, x64, arm) + Microsoft Visual Studio 2017 (x86, x64, arm, arm64) + Microsoft Visual Studio Build Tools 2017 (x86, x64, arm, arm64) + + Parameters + ---------- + plat_spec: str + Target architecture. + + Return + ------ + environment: dict + """ + # Try to get environment from vcvarsall.bat (Classical way) + try: + return get_unpatched(msvc14_get_vc_env)(plat_spec) + except distutils.errors.DistutilsPlatformError: + # Pass error Vcvarsall.bat is missing + pass + + # If error, try to set environment directly + try: + return EnvironmentInfo(plat_spec, vc_min_ver=14.0).return_env() + except distutils.errors.DistutilsPlatformError as exc: + _augment_exception(exc, 14.0) + raise + + +def msvc14_gen_lib_options(*args, **kwargs): + """ + Patched "distutils._msvccompiler.gen_lib_options" for fix + compatibility between "numpy.distutils" and "distutils._msvccompiler" + (for Numpy < 1.11.2) + """ + if "numpy.distutils" in sys.modules: + import numpy as np + if LegacyVersion(np.__version__) < LegacyVersion('1.11.2'): + return np.distutils.ccompiler.gen_lib_options(*args, **kwargs) + return get_unpatched(msvc14_gen_lib_options)(*args, **kwargs) + + +def _augment_exception(exc, version, arch=''): + """ + Add details to the exception message to help guide the user + as to what action will resolve it. + """ + # Error if MSVC++ directory not found or environment not set + message = exc.args[0] + + if "vcvarsall" in message.lower() or "visual c" in message.lower(): + # Special error message if MSVC++ not installed + tmpl = 'Microsoft Visual C++ {version:0.1f} is required.' + message = tmpl.format(**locals()) + msdownload = 'www.microsoft.com/download/details.aspx?id=%d' + if version == 9.0: + if arch.lower().find('ia64') > -1: + # For VC++ 9.0, if IA64 support is needed, redirect user + # to Windows SDK 7.0 + message += ' Get it with "Microsoft Windows SDK 7.0": ' + message += msdownload % 3138 + else: + # For VC++ 9.0 redirect user to Vc++ for Python 2.7 : + # This redirection link is maintained by Microsoft. + # Contact vspython@microsoft.com if it needs updating. + message += ' Get it from http://aka.ms/vcpython27' + elif version == 10.0: + # For VC++ 10.0 Redirect user to Windows SDK 7.1 + message += ' Get it with "Microsoft Windows SDK 7.1": ' + message += msdownload % 8279 + elif version >= 14.0: + # For VC++ 14.0 Redirect user to Visual C++ Build Tools + message += (' Get it with "Microsoft Visual C++ Build Tools": ' + r'https://visualstudio.microsoft.com/downloads/') + + exc.args = (message, ) + + +class PlatformInfo: + """ + Current and Target Architectures informations. + + Parameters + ---------- + arch: str + Target architecture. + """ + current_cpu = safe_env.get('processor_architecture', '').lower() + + def __init__(self, arch): + self.arch = arch.lower().replace('x64', 'amd64') + + @property + def target_cpu(self): + return self.arch[self.arch.find('_') + 1:] + + def target_is_x86(self): + return self.target_cpu == 'x86' + + def current_is_x86(self): + return self.current_cpu == 'x86' + + def current_dir(self, hidex86=False, x64=False): + """ + Current platform specific subfolder. + + Parameters + ---------- + hidex86: bool + return '' and not '\x86' if architecture is x86. + x64: bool + return '\x64' and not '\amd64' if architecture is amd64. + + Return + ------ + subfolder: str + '\target', or '' (see hidex86 parameter) + """ + return ( + '' if (self.current_cpu == 'x86' and hidex86) else + r'\x64' if (self.current_cpu == 'amd64' and x64) else + r'\%s' % self.current_cpu + ) + + def target_dir(self, hidex86=False, x64=False): + r""" + Target platform specific subfolder. + + Parameters + ---------- + hidex86: bool + return '' and not '\x86' if architecture is x86. + x64: bool + return '\x64' and not '\amd64' if architecture is amd64. + + Return + ------ + subfolder: str + '\current', or '' (see hidex86 parameter) + """ + return ( + '' if (self.target_cpu == 'x86' and hidex86) else + r'\x64' if (self.target_cpu == 'amd64' and x64) else + r'\%s' % self.target_cpu + ) + + def cross_dir(self, forcex86=False): + r""" + Cross platform specific subfolder. + + Parameters + ---------- + forcex86: bool + Use 'x86' as current architecture even if current acritecture is + not x86. + + Return + ------ + subfolder: str + '' if target architecture is current architecture, + '\current_target' if not. + """ + current = 'x86' if forcex86 else self.current_cpu + return ( + '' if self.target_cpu == current else + self.target_dir().replace('\\', '\\%s_' % current) + ) + + +class RegistryInfo: + """ + Microsoft Visual Studio related registry informations. + + Parameters + ---------- + platform_info: PlatformInfo + "PlatformInfo" instance. + """ + HKEYS = (winreg.HKEY_USERS, + winreg.HKEY_CURRENT_USER, + winreg.HKEY_LOCAL_MACHINE, + winreg.HKEY_CLASSES_ROOT) + + def __init__(self, platform_info): + self.pi = platform_info + + @property + def visualstudio(self): + """ + Microsoft Visual Studio root registry key. + """ + return 'VisualStudio' + + @property + def sxs(self): + """ + Microsoft Visual Studio SxS registry key. + """ + return os.path.join(self.visualstudio, 'SxS') + + @property + def vc(self): + """ + Microsoft Visual C++ VC7 registry key. + """ + return os.path.join(self.sxs, 'VC7') + + @property + def vs(self): + """ + Microsoft Visual Studio VS7 registry key. + """ + return os.path.join(self.sxs, 'VS7') + + @property + def vc_for_python(self): + """ + Microsoft Visual C++ for Python registry key. + """ + return r'DevDiv\VCForPython' + + @property + def microsoft_sdk(self): + """ + Microsoft SDK registry key. + """ + return 'Microsoft SDKs' + + @property + def windows_sdk(self): + """ + Microsoft Windows/Platform SDK registry key. + """ + return os.path.join(self.microsoft_sdk, 'Windows') + + @property + def netfx_sdk(self): + """ + Microsoft .NET Framework SDK registry key. + """ + return os.path.join(self.microsoft_sdk, 'NETFXSDK') + + @property + def windows_kits_roots(self): + """ + Microsoft Windows Kits Roots registry key. + """ + return r'Windows Kits\Installed Roots' + + def microsoft(self, key, x86=False): + """ + Return key in Microsoft software registry. + + Parameters + ---------- + key: str + Registry key path where look. + x86: str + Force x86 software registry. + + Return + ------ + str: value + """ + node64 = '' if self.pi.current_is_x86() or x86 else 'Wow6432Node' + return os.path.join('Software', node64, 'Microsoft', key) + + def lookup(self, key, name): + """ + Look for values in registry in Microsoft software registry. + + Parameters + ---------- + key: str + Registry key path where look. + name: str + Value name to find. + + Return + ------ + str: value + """ + KEY_READ = winreg.KEY_READ + openkey = winreg.OpenKey + ms = self.microsoft + for hkey in self.HKEYS: + try: + bkey = openkey(hkey, ms(key), 0, KEY_READ) + except (OSError, IOError): + if not self.pi.current_is_x86(): + try: + bkey = openkey(hkey, ms(key, True), 0, KEY_READ) + except (OSError, IOError): + continue + else: + continue + try: + return winreg.QueryValueEx(bkey, name)[0] + except (OSError, IOError): + pass + + +class SystemInfo: + """ + Microsoft Windows and Visual Studio related system inormations. + + Parameters + ---------- + registry_info: RegistryInfo + "RegistryInfo" instance. + vc_ver: float + Required Microsoft Visual C++ version. + """ + + # Variables and properties in this class use originals CamelCase variables + # names from Microsoft source files for more easy comparaison. + WinDir = safe_env.get('WinDir', '') + ProgramFiles = safe_env.get('ProgramFiles', '') + ProgramFilesx86 = safe_env.get('ProgramFiles(x86)', ProgramFiles) + + def __init__(self, registry_info, vc_ver=None): + self.ri = registry_info + self.pi = self.ri.pi + self.vc_ver = vc_ver or self._find_latest_available_vc_ver() + + def _find_latest_available_vc_ver(self): + try: + return self.find_available_vc_vers()[-1] + except IndexError: + err = 'No Microsoft Visual C++ version found' + raise distutils.errors.DistutilsPlatformError(err) + + def find_available_vc_vers(self): + """ + Find all available Microsoft Visual C++ versions. + """ + ms = self.ri.microsoft + vckeys = (self.ri.vc, self.ri.vc_for_python, self.ri.vs) + vc_vers = [] + for hkey in self.ri.HKEYS: + for key in vckeys: + try: + bkey = winreg.OpenKey(hkey, ms(key), 0, winreg.KEY_READ) + except (OSError, IOError): + continue + subkeys, values, _ = winreg.QueryInfoKey(bkey) + for i in range(values): + try: + ver = float(winreg.EnumValue(bkey, i)[0]) + if ver not in vc_vers: + vc_vers.append(ver) + except ValueError: + pass + for i in range(subkeys): + try: + ver = float(winreg.EnumKey(bkey, i)) + if ver not in vc_vers: + vc_vers.append(ver) + except ValueError: + pass + return sorted(vc_vers) + + @property + def VSInstallDir(self): + """ + Microsoft Visual Studio directory. + """ + # Default path + name = 'Microsoft Visual Studio %0.1f' % self.vc_ver + default = os.path.join(self.ProgramFilesx86, name) + + # Try to get path from registry, if fail use default path + return self.ri.lookup(self.ri.vs, '%0.1f' % self.vc_ver) or default + + @property + def VCInstallDir(self): + """ + Microsoft Visual C++ directory. + """ + self.VSInstallDir + + guess_vc = self._guess_vc() or self._guess_vc_legacy() + + # Try to get "VC++ for Python" path from registry as default path + reg_path = os.path.join(self.ri.vc_for_python, '%0.1f' % self.vc_ver) + python_vc = self.ri.lookup(reg_path, 'installdir') + default_vc = os.path.join(python_vc, 'VC') if python_vc else guess_vc + + # Try to get path from registry, if fail use default path + path = self.ri.lookup(self.ri.vc, '%0.1f' % self.vc_ver) or default_vc + + if not os.path.isdir(path): + msg = 'Microsoft Visual C++ directory not found' + raise distutils.errors.DistutilsPlatformError(msg) + + return path + + def _guess_vc(self): + """ + Locate Visual C for 2017 + """ + if self.vc_ver <= 14.0: + return + + default = r'VC\Tools\MSVC' + guess_vc = os.path.join(self.VSInstallDir, default) + # Subdir with VC exact version as name + try: + vc_exact_ver = os.listdir(guess_vc)[-1] + return os.path.join(guess_vc, vc_exact_ver) + except (OSError, IOError, IndexError): + pass + + def _guess_vc_legacy(self): + """ + Locate Visual C for versions prior to 2017 + """ + default = r'Microsoft Visual Studio %0.1f\VC' % self.vc_ver + return os.path.join(self.ProgramFilesx86, default) + + @property + def WindowsSdkVersion(self): + """ + Microsoft Windows SDK versions for specified MSVC++ version. + """ + if self.vc_ver <= 9.0: + return ('7.0', '6.1', '6.0a') + elif self.vc_ver == 10.0: + return ('7.1', '7.0a') + elif self.vc_ver == 11.0: + return ('8.0', '8.0a') + elif self.vc_ver == 12.0: + return ('8.1', '8.1a') + elif self.vc_ver >= 14.0: + return ('10.0', '8.1') + + @property + def WindowsSdkLastVersion(self): + """ + Microsoft Windows SDK last version + """ + return self._use_last_dir_name(os.path.join( + self.WindowsSdkDir, 'lib')) + + @property + def WindowsSdkDir(self): + """ + Microsoft Windows SDK directory. + """ + sdkdir = '' + for ver in self.WindowsSdkVersion: + # Try to get it from registry + loc = os.path.join(self.ri.windows_sdk, 'v%s' % ver) + sdkdir = self.ri.lookup(loc, 'installationfolder') + if sdkdir: + break + if not sdkdir or not os.path.isdir(sdkdir): + # Try to get "VC++ for Python" version from registry + path = os.path.join(self.ri.vc_for_python, '%0.1f' % self.vc_ver) + install_base = self.ri.lookup(path, 'installdir') + if install_base: + sdkdir = os.path.join(install_base, 'WinSDK') + if not sdkdir or not os.path.isdir(sdkdir): + # If fail, use default new path + for ver in self.WindowsSdkVersion: + intver = ver[:ver.rfind('.')] + path = r'Microsoft SDKs\Windows Kits\%s' % (intver) + d = os.path.join(self.ProgramFiles, path) + if os.path.isdir(d): + sdkdir = d + if not sdkdir or not os.path.isdir(sdkdir): + # If fail, use default old path + for ver in self.WindowsSdkVersion: + path = r'Microsoft SDKs\Windows\v%s' % ver + d = os.path.join(self.ProgramFiles, path) + if os.path.isdir(d): + sdkdir = d + if not sdkdir: + # If fail, use Platform SDK + sdkdir = os.path.join(self.VCInstallDir, 'PlatformSDK') + return sdkdir + + @property + def WindowsSDKExecutablePath(self): + """ + Microsoft Windows SDK executable directory. + """ + # Find WinSDK NetFx Tools registry dir name + if self.vc_ver <= 11.0: + netfxver = 35 + arch = '' + else: + netfxver = 40 + hidex86 = True if self.vc_ver <= 12.0 else False + arch = self.pi.current_dir(x64=True, hidex86=hidex86) + fx = 'WinSDK-NetFx%dTools%s' % (netfxver, arch.replace('\\', '-')) + + # liste all possibles registry paths + regpaths = [] + if self.vc_ver >= 14.0: + for ver in self.NetFxSdkVersion: + regpaths += [os.path.join(self.ri.netfx_sdk, ver, fx)] + + for ver in self.WindowsSdkVersion: + regpaths += [os.path.join(self.ri.windows_sdk, 'v%sA' % ver, fx)] + + # Return installation folder from the more recent path + for path in regpaths: + execpath = self.ri.lookup(path, 'installationfolder') + if execpath: + break + return execpath + + @property + def FSharpInstallDir(self): + """ + Microsoft Visual F# directory. + """ + path = r'%0.1f\Setup\F#' % self.vc_ver + path = os.path.join(self.ri.visualstudio, path) + return self.ri.lookup(path, 'productdir') or '' + + @property + def UniversalCRTSdkDir(self): + """ + Microsoft Universal CRT SDK directory. + """ + # Set Kit Roots versions for specified MSVC++ version + if self.vc_ver >= 14.0: + vers = ('10', '81') + else: + vers = () + + # Find path of the more recent Kit + for ver in vers: + sdkdir = self.ri.lookup(self.ri.windows_kits_roots, + 'kitsroot%s' % ver) + if sdkdir: + break + return sdkdir or '' + + @property + def UniversalCRTSdkLastVersion(self): + """ + Microsoft Universal C Runtime SDK last version + """ + return self._use_last_dir_name(os.path.join( + self.UniversalCRTSdkDir, 'lib')) + + @property + def NetFxSdkVersion(self): + """ + Microsoft .NET Framework SDK versions. + """ + # Set FxSdk versions for specified MSVC++ version + if self.vc_ver >= 14.0: + return ('4.6.1', '4.6') + else: + return () + + @property + def NetFxSdkDir(self): + """ + Microsoft .NET Framework SDK directory. + """ + for ver in self.NetFxSdkVersion: + loc = os.path.join(self.ri.netfx_sdk, ver) + sdkdir = self.ri.lookup(loc, 'kitsinstallationfolder') + if sdkdir: + break + return sdkdir or '' + + @property + def FrameworkDir32(self): + """ + Microsoft .NET Framework 32bit directory. + """ + # Default path + guess_fw = os.path.join(self.WinDir, r'Microsoft.NET\Framework') + + # Try to get path from registry, if fail use default path + return self.ri.lookup(self.ri.vc, 'frameworkdir32') or guess_fw + + @property + def FrameworkDir64(self): + """ + Microsoft .NET Framework 64bit directory. + """ + # Default path + guess_fw = os.path.join(self.WinDir, r'Microsoft.NET\Framework64') + + # Try to get path from registry, if fail use default path + return self.ri.lookup(self.ri.vc, 'frameworkdir64') or guess_fw + + @property + def FrameworkVersion32(self): + """ + Microsoft .NET Framework 32bit versions. + """ + return self._find_dot_net_versions(32) + + @property + def FrameworkVersion64(self): + """ + Microsoft .NET Framework 64bit versions. + """ + return self._find_dot_net_versions(64) + + def _find_dot_net_versions(self, bits): + """ + Find Microsoft .NET Framework versions. + + Parameters + ---------- + bits: int + Platform number of bits: 32 or 64. + """ + # Find actual .NET version in registry + reg_ver = self.ri.lookup(self.ri.vc, 'frameworkver%d' % bits) + dot_net_dir = getattr(self, 'FrameworkDir%d' % bits) + ver = reg_ver or self._use_last_dir_name(dot_net_dir, 'v') or '' + + # Set .NET versions for specified MSVC++ version + if self.vc_ver >= 12.0: + frameworkver = (ver, 'v4.0') + elif self.vc_ver >= 10.0: + frameworkver = ('v4.0.30319' if ver.lower()[:2] != 'v4' else ver, + 'v3.5') + elif self.vc_ver == 9.0: + frameworkver = ('v3.5', 'v2.0.50727') + if self.vc_ver == 8.0: + frameworkver = ('v3.0', 'v2.0.50727') + return frameworkver + + def _use_last_dir_name(self, path, prefix=''): + """ + Return name of the last dir in path or '' if no dir found. + + Parameters + ---------- + path: str + Use dirs in this path + prefix: str + Use only dirs startings by this prefix + """ + matching_dirs = ( + dir_name + for dir_name in reversed(os.listdir(path)) + if os.path.isdir(os.path.join(path, dir_name)) and + dir_name.startswith(prefix) + ) + return next(matching_dirs, None) or '' + + +class EnvironmentInfo: + """ + Return environment variables for specified Microsoft Visual C++ version + and platform : Lib, Include, Path and libpath. + + This function is compatible with Microsoft Visual C++ 9.0 to 14.0. + + Script created by analysing Microsoft environment configuration files like + "vcvars[...].bat", "SetEnv.Cmd", "vcbuildtools.bat", ... + + Parameters + ---------- + arch: str + Target architecture. + vc_ver: float + Required Microsoft Visual C++ version. If not set, autodetect the last + version. + vc_min_ver: float + Minimum Microsoft Visual C++ version. + """ + + # Variables and properties in this class use originals CamelCase variables + # names from Microsoft source files for more easy comparaison. + + def __init__(self, arch, vc_ver=None, vc_min_ver=0): + self.pi = PlatformInfo(arch) + self.ri = RegistryInfo(self.pi) + self.si = SystemInfo(self.ri, vc_ver) + + if self.vc_ver < vc_min_ver: + err = 'No suitable Microsoft Visual C++ version found' + raise distutils.errors.DistutilsPlatformError(err) + + @property + def vc_ver(self): + """ + Microsoft Visual C++ version. + """ + return self.si.vc_ver + + @property + def VSTools(self): + """ + Microsoft Visual Studio Tools + """ + paths = [r'Common7\IDE', r'Common7\Tools'] + + if self.vc_ver >= 14.0: + arch_subdir = self.pi.current_dir(hidex86=True, x64=True) + paths += [r'Common7\IDE\CommonExtensions\Microsoft\TestWindow'] + paths += [r'Team Tools\Performance Tools'] + paths += [r'Team Tools\Performance Tools%s' % arch_subdir] + + return [os.path.join(self.si.VSInstallDir, path) for path in paths] + + @property + def VCIncludes(self): + """ + Microsoft Visual C++ & Microsoft Foundation Class Includes + """ + return [os.path.join(self.si.VCInstallDir, 'Include'), + os.path.join(self.si.VCInstallDir, r'ATLMFC\Include')] + + @property + def VCLibraries(self): + """ + Microsoft Visual C++ & Microsoft Foundation Class Libraries + """ + if self.vc_ver >= 15.0: + arch_subdir = self.pi.target_dir(x64=True) + else: + arch_subdir = self.pi.target_dir(hidex86=True) + paths = ['Lib%s' % arch_subdir, r'ATLMFC\Lib%s' % arch_subdir] + + if self.vc_ver >= 14.0: + paths += [r'Lib\store%s' % arch_subdir] + + return [os.path.join(self.si.VCInstallDir, path) for path in paths] + + @property + def VCStoreRefs(self): + """ + Microsoft Visual C++ store references Libraries + """ + if self.vc_ver < 14.0: + return [] + return [os.path.join(self.si.VCInstallDir, r'Lib\store\references')] + + @property + def VCTools(self): + """ + Microsoft Visual C++ Tools + """ + si = self.si + tools = [os.path.join(si.VCInstallDir, 'VCPackages')] + + forcex86 = True if self.vc_ver <= 10.0 else False + arch_subdir = self.pi.cross_dir(forcex86) + if arch_subdir: + tools += [os.path.join(si.VCInstallDir, 'Bin%s' % arch_subdir)] + + if self.vc_ver == 14.0: + path = 'Bin%s' % self.pi.current_dir(hidex86=True) + tools += [os.path.join(si.VCInstallDir, path)] + + elif self.vc_ver >= 15.0: + host_dir = (r'bin\HostX86%s' if self.pi.current_is_x86() else + r'bin\HostX64%s') + tools += [os.path.join( + si.VCInstallDir, host_dir % self.pi.target_dir(x64=True))] + + if self.pi.current_cpu != self.pi.target_cpu: + tools += [os.path.join( + si.VCInstallDir, host_dir % self.pi.current_dir(x64=True))] + + else: + tools += [os.path.join(si.VCInstallDir, 'Bin')] + + return tools + + @property + def OSLibraries(self): + """ + Microsoft Windows SDK Libraries + """ + if self.vc_ver <= 10.0: + arch_subdir = self.pi.target_dir(hidex86=True, x64=True) + return [os.path.join(self.si.WindowsSdkDir, 'Lib%s' % arch_subdir)] + + else: + arch_subdir = self.pi.target_dir(x64=True) + lib = os.path.join(self.si.WindowsSdkDir, 'lib') + libver = self._sdk_subdir + return [os.path.join(lib, '%sum%s' % (libver , arch_subdir))] + + @property + def OSIncludes(self): + """ + Microsoft Windows SDK Include + """ + include = os.path.join(self.si.WindowsSdkDir, 'include') + + if self.vc_ver <= 10.0: + return [include, os.path.join(include, 'gl')] + + else: + if self.vc_ver >= 14.0: + sdkver = self._sdk_subdir + else: + sdkver = '' + return [os.path.join(include, '%sshared' % sdkver), + os.path.join(include, '%sum' % sdkver), + os.path.join(include, '%swinrt' % sdkver)] + + @property + def OSLibpath(self): + """ + Microsoft Windows SDK Libraries Paths + """ + ref = os.path.join(self.si.WindowsSdkDir, 'References') + libpath = [] + + if self.vc_ver <= 9.0: + libpath += self.OSLibraries + + if self.vc_ver >= 11.0: + libpath += [os.path.join(ref, r'CommonConfiguration\Neutral')] + + if self.vc_ver >= 14.0: + libpath += [ + ref, + os.path.join(self.si.WindowsSdkDir, 'UnionMetadata'), + os.path.join( + ref, + 'Windows.Foundation.UniversalApiContract', + '1.0.0.0', + ), + os.path.join( + ref, + 'Windows.Foundation.FoundationContract', + '1.0.0.0', + ), + os.path.join( + ref, + 'Windows.Networking.Connectivity.WwanContract', + '1.0.0.0', + ), + os.path.join( + self.si.WindowsSdkDir, + 'ExtensionSDKs', + 'Microsoft.VCLibs', + '%0.1f' % self.vc_ver, + 'References', + 'CommonConfiguration', + 'neutral', + ), + ] + return libpath + + @property + def SdkTools(self): + """ + Microsoft Windows SDK Tools + """ + return list(self._sdk_tools()) + + def _sdk_tools(self): + """ + Microsoft Windows SDK Tools paths generator + """ + if self.vc_ver < 15.0: + bin_dir = 'Bin' if self.vc_ver <= 11.0 else r'Bin\x86' + yield os.path.join(self.si.WindowsSdkDir, bin_dir) + + if not self.pi.current_is_x86(): + arch_subdir = self.pi.current_dir(x64=True) + path = 'Bin%s' % arch_subdir + yield os.path.join(self.si.WindowsSdkDir, path) + + if self.vc_ver == 10.0 or self.vc_ver == 11.0: + if self.pi.target_is_x86(): + arch_subdir = '' + else: + arch_subdir = self.pi.current_dir(hidex86=True, x64=True) + path = r'Bin\NETFX 4.0 Tools%s' % arch_subdir + yield os.path.join(self.si.WindowsSdkDir, path) + + elif self.vc_ver >= 15.0: + path = os.path.join(self.si.WindowsSdkDir, 'Bin') + arch_subdir = self.pi.current_dir(x64=True) + sdkver = self.si.WindowsSdkLastVersion + yield os.path.join(path, '%s%s' % (sdkver, arch_subdir)) + + if self.si.WindowsSDKExecutablePath: + yield self.si.WindowsSDKExecutablePath + + @property + def _sdk_subdir(self): + """ + Microsoft Windows SDK version subdir + """ + ucrtver = self.si.WindowsSdkLastVersion + return ('%s\\' % ucrtver) if ucrtver else '' + + @property + def SdkSetup(self): + """ + Microsoft Windows SDK Setup + """ + if self.vc_ver > 9.0: + return [] + + return [os.path.join(self.si.WindowsSdkDir, 'Setup')] + + @property + def FxTools(self): + """ + Microsoft .NET Framework Tools + """ + pi = self.pi + si = self.si + + if self.vc_ver <= 10.0: + include32 = True + include64 = not pi.target_is_x86() and not pi.current_is_x86() + else: + include32 = pi.target_is_x86() or pi.current_is_x86() + include64 = pi.current_cpu == 'amd64' or pi.target_cpu == 'amd64' + + tools = [] + if include32: + tools += [os.path.join(si.FrameworkDir32, ver) + for ver in si.FrameworkVersion32] + if include64: + tools += [os.path.join(si.FrameworkDir64, ver) + for ver in si.FrameworkVersion64] + return tools + + @property + def NetFxSDKLibraries(self): + """ + Microsoft .Net Framework SDK Libraries + """ + if self.vc_ver < 14.0 or not self.si.NetFxSdkDir: + return [] + + arch_subdir = self.pi.target_dir(x64=True) + return [os.path.join(self.si.NetFxSdkDir, r'lib\um%s' % arch_subdir)] + + @property + def NetFxSDKIncludes(self): + """ + Microsoft .Net Framework SDK Includes + """ + if self.vc_ver < 14.0 or not self.si.NetFxSdkDir: + return [] + + return [os.path.join(self.si.NetFxSdkDir, r'include\um')] + + @property + def VsTDb(self): + """ + Microsoft Visual Studio Team System Database + """ + return [os.path.join(self.si.VSInstallDir, r'VSTSDB\Deploy')] + + @property + def MSBuild(self): + """ + Microsoft Build Engine + """ + if self.vc_ver < 12.0: + return [] + elif self.vc_ver < 15.0: + base_path = self.si.ProgramFilesx86 + arch_subdir = self.pi.current_dir(hidex86=True) + else: + base_path = self.si.VSInstallDir + arch_subdir = '' + + path = r'MSBuild\%0.1f\bin%s' % (self.vc_ver, arch_subdir) + build = [os.path.join(base_path, path)] + + if self.vc_ver >= 15.0: + # Add Roslyn C# & Visual Basic Compiler + build += [os.path.join(base_path, path, 'Roslyn')] + + return build + + @property + def HTMLHelpWorkshop(self): + """ + Microsoft HTML Help Workshop + """ + if self.vc_ver < 11.0: + return [] + + return [os.path.join(self.si.ProgramFilesx86, 'HTML Help Workshop')] + + @property + def UCRTLibraries(self): + """ + Microsoft Universal C Runtime SDK Libraries + """ + if self.vc_ver < 14.0: + return [] + + arch_subdir = self.pi.target_dir(x64=True) + lib = os.path.join(self.si.UniversalCRTSdkDir, 'lib') + ucrtver = self._ucrt_subdir + return [os.path.join(lib, '%sucrt%s' % (ucrtver, arch_subdir))] + + @property + def UCRTIncludes(self): + """ + Microsoft Universal C Runtime SDK Include + """ + if self.vc_ver < 14.0: + return [] + + include = os.path.join(self.si.UniversalCRTSdkDir, 'include') + return [os.path.join(include, '%sucrt' % self._ucrt_subdir)] + + @property + def _ucrt_subdir(self): + """ + Microsoft Universal C Runtime SDK version subdir + """ + ucrtver = self.si.UniversalCRTSdkLastVersion + return ('%s\\' % ucrtver) if ucrtver else '' + + @property + def FSharp(self): + """ + Microsoft Visual F# + """ + if self.vc_ver < 11.0 and self.vc_ver > 12.0: + return [] + + return self.si.FSharpInstallDir + + @property + def VCRuntimeRedist(self): + """ + Microsoft Visual C++ runtime redistribuable dll + """ + arch_subdir = self.pi.target_dir(x64=True) + if self.vc_ver < 15: + redist_path = self.si.VCInstallDir + vcruntime = 'redist%s\\Microsoft.VC%d0.CRT\\vcruntime%d0.dll' + else: + redist_path = self.si.VCInstallDir.replace('\\Tools', '\\Redist') + vcruntime = 'onecore%s\\Microsoft.VC%d0.CRT\\vcruntime%d0.dll' + + # Visual Studio 2017 is still Visual C++ 14.0 + dll_ver = 14.0 if self.vc_ver == 15 else self.vc_ver + + vcruntime = vcruntime % (arch_subdir, self.vc_ver, dll_ver) + return os.path.join(redist_path, vcruntime) + + def return_env(self, exists=True): + """ + Return environment dict. + + Parameters + ---------- + exists: bool + It True, only return existing paths. + """ + env = dict( + include=self._build_paths('include', + [self.VCIncludes, + self.OSIncludes, + self.UCRTIncludes, + self.NetFxSDKIncludes], + exists), + lib=self._build_paths('lib', + [self.VCLibraries, + self.OSLibraries, + self.FxTools, + self.UCRTLibraries, + self.NetFxSDKLibraries], + exists), + libpath=self._build_paths('libpath', + [self.VCLibraries, + self.FxTools, + self.VCStoreRefs, + self.OSLibpath], + exists), + path=self._build_paths('path', + [self.VCTools, + self.VSTools, + self.VsTDb, + self.SdkTools, + self.SdkSetup, + self.FxTools, + self.MSBuild, + self.HTMLHelpWorkshop, + self.FSharp], + exists), + ) + if self.vc_ver >= 14 and os.path.isfile(self.VCRuntimeRedist): + env['py_vcruntime_redist'] = self.VCRuntimeRedist + return env + + def _build_paths(self, name, spec_path_lists, exists): + """ + Given an environment variable name and specified paths, + return a pathsep-separated string of paths containing + unique, extant, directories from those paths and from + the environment variable. Raise an error if no paths + are resolved. + """ + # flatten spec_path_lists + spec_paths = itertools.chain.from_iterable(spec_path_lists) + env_paths = safe_env.get(name, '').split(os.pathsep) + paths = itertools.chain(spec_paths, env_paths) + extant_paths = list(filter(os.path.isdir, paths)) if exists else paths + if not extant_paths: + msg = "%s environment variable is empty" % name.upper() + raise distutils.errors.DistutilsPlatformError(msg) + unique_paths = self._unique_everseen(extant_paths) + return os.pathsep.join(unique_paths) + + # from Python docs + def _unique_everseen(self, 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 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/namespaces.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/namespaces.py new file mode 100644 index 00000000..dc16106d --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/namespaces.py @@ -0,0 +1,107 @@ +import os +from distutils import log +import itertools + +from setuptools.extern.six.moves import map + + +flatten = itertools.chain.from_iterable + + +class Installer: + + nspkg_ext = '-nspkg.pth' + + def install_namespaces(self): + nsp = self._get_all_ns_packages() + if not nsp: + return + filename, ext = os.path.splitext(self._get_target()) + filename += self.nspkg_ext + self.outputs.append(filename) + log.info("Installing %s", filename) + lines = map(self._gen_nspkg_line, nsp) + + if self.dry_run: + # always generate the lines, even in dry run + list(lines) + return + + with open(filename, 'wt') as f: + f.writelines(lines) + + def uninstall_namespaces(self): + filename, ext = os.path.splitext(self._get_target()) + filename += self.nspkg_ext + if not os.path.exists(filename): + return + log.info("Removing %s", filename) + os.remove(filename) + + def _get_target(self): + return self.target + + _nspkg_tmpl = ( + "import sys, types, os", + "has_mfs = sys.version_info > (3, 5)", + "p = os.path.join(%(root)s, *%(pth)r)", + "importlib = has_mfs and __import__('importlib.util')", + "has_mfs and __import__('importlib.machinery')", + "m = has_mfs and " + "sys.modules.setdefault(%(pkg)r, " + "importlib.util.module_from_spec(" + "importlib.machinery.PathFinder.find_spec(%(pkg)r, " + "[os.path.dirname(p)])))", + "m = m or " + "sys.modules.setdefault(%(pkg)r, types.ModuleType(%(pkg)r))", + "mp = (m or []) and m.__dict__.setdefault('__path__',[])", + "(p not in mp) and mp.append(p)", + ) + "lines for the namespace installer" + + _nspkg_tmpl_multi = ( + 'm and setattr(sys.modules[%(parent)r], %(child)r, m)', + ) + "additional line(s) when a parent package is indicated" + + def _get_root(self): + return "sys._getframe(1).f_locals['sitedir']" + + def _gen_nspkg_line(self, pkg): + # ensure pkg is not a unicode string under Python 2.7 + pkg = str(pkg) + pth = tuple(pkg.split('.')) + root = self._get_root() + tmpl_lines = self._nspkg_tmpl + parent, sep, child = pkg.rpartition('.') + if parent: + tmpl_lines += self._nspkg_tmpl_multi + return ';'.join(tmpl_lines) % locals() + '\n' + + def _get_all_ns_packages(self): + """Return sorted list of all package namespaces""" + pkgs = self.distribution.namespace_packages or [] + return sorted(flatten(map(self._pkg_names, pkgs))) + + @staticmethod + def _pkg_names(pkg): + """ + Given a namespace package, yield the components of that + package. + + >>> names = Installer._pkg_names('a.b.c') + >>> set(names) == set(['a', 'a.b', 'a.b.c']) + True + """ + parts = pkg.split('.') + while parts: + yield '.'.join(parts) + parts.pop() + + +class DevelopInstaller(Installer): + def _get_root(self): + return repr(str(self.egg_path)) + + def _get_target(self): + return self.egg_link diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/package_index.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/package_index.py new file mode 100644 index 00000000..6b06f2ca --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/package_index.py @@ -0,0 +1,1136 @@ +"""PyPI and direct package downloading""" +import sys +import os +import re +import shutil +import socket +import base64 +import hashlib +import itertools +import warnings +from functools import wraps + +from setuptools.extern import six +from setuptools.extern.six.moves import urllib, http_client, configparser, map + +import setuptools +from pkg_resources import ( + CHECKOUT_DIST, Distribution, BINARY_DIST, normalize_path, SOURCE_DIST, + Environment, find_distributions, safe_name, safe_version, + to_filename, Requirement, DEVELOP_DIST, EGG_DIST, +) +from setuptools import ssl_support +from distutils import log +from distutils.errors import DistutilsError +from fnmatch import translate +from setuptools.py27compat import get_all_headers +from setuptools.py33compat import unescape +from setuptools.wheel import Wheel + +__metaclass__ = type + +EGG_FRAGMENT = re.compile(r'^egg=([-A-Za-z0-9_.+!]+)$') +HREF = re.compile(r"""href\s*=\s*['"]?([^'"> ]+)""", re.I) +PYPI_MD5 = re.compile( + r'<a href="([^"#]+)">([^<]+)</a>\n\s+\(<a (?:title="MD5 hash"\n\s+)' + r'href="[^?]+\?:action=show_md5&digest=([0-9a-f]{32})">md5</a>\)' +) +URL_SCHEME = re.compile('([-+.a-z0-9]{2,}):', re.I).match +EXTENSIONS = ".tar.gz .tar.bz2 .tar .zip .tgz".split() + +__all__ = [ + 'PackageIndex', 'distros_for_url', 'parse_bdist_wininst', + 'interpret_distro_name', +] + +_SOCKET_TIMEOUT = 15 + +_tmpl = "setuptools/{setuptools.__version__} Python-urllib/{py_major}" +user_agent = _tmpl.format(py_major=sys.version[:3], setuptools=setuptools) + + +def parse_requirement_arg(spec): + try: + return Requirement.parse(spec) + except ValueError: + raise DistutilsError( + "Not a URL, existing file, or requirement spec: %r" % (spec,) + ) + + +def parse_bdist_wininst(name): + """Return (base,pyversion) or (None,None) for possible .exe name""" + + lower = name.lower() + base, py_ver, plat = None, None, None + + if lower.endswith('.exe'): + if lower.endswith('.win32.exe'): + base = name[:-10] + plat = 'win32' + elif lower.startswith('.win32-py', -16): + py_ver = name[-7:-4] + base = name[:-16] + plat = 'win32' + elif lower.endswith('.win-amd64.exe'): + base = name[:-14] + plat = 'win-amd64' + elif lower.startswith('.win-amd64-py', -20): + py_ver = name[-7:-4] + base = name[:-20] + plat = 'win-amd64' + return base, py_ver, plat + + +def egg_info_for_url(url): + parts = urllib.parse.urlparse(url) + scheme, server, path, parameters, query, fragment = parts + base = urllib.parse.unquote(path.split('/')[-1]) + if server == 'sourceforge.net' and base == 'download': # XXX Yuck + base = urllib.parse.unquote(path.split('/')[-2]) + if '#' in base: + base, fragment = base.split('#', 1) + return base, fragment + + +def distros_for_url(url, metadata=None): + """Yield egg or source distribution objects that might be found at a URL""" + base, fragment = egg_info_for_url(url) + for dist in distros_for_location(url, base, metadata): + yield dist + if fragment: + match = EGG_FRAGMENT.match(fragment) + if match: + for dist in interpret_distro_name( + url, match.group(1), metadata, precedence=CHECKOUT_DIST + ): + yield dist + + +def distros_for_location(location, basename, metadata=None): + """Yield egg or source distribution objects based on basename""" + if basename.endswith('.egg.zip'): + basename = basename[:-4] # strip the .zip + if basename.endswith('.egg') and '-' in basename: + # only one, unambiguous interpretation + return [Distribution.from_location(location, basename, metadata)] + if basename.endswith('.whl') and '-' in basename: + wheel = Wheel(basename) + if not wheel.is_compatible(): + return [] + return [Distribution( + location=location, + project_name=wheel.project_name, + version=wheel.version, + # Increase priority over eggs. + precedence=EGG_DIST + 1, + )] + if basename.endswith('.exe'): + win_base, py_ver, platform = parse_bdist_wininst(basename) + if win_base is not None: + return interpret_distro_name( + location, win_base, metadata, py_ver, BINARY_DIST, platform + ) + # Try source distro extensions (.zip, .tgz, etc.) + # + for ext in EXTENSIONS: + if basename.endswith(ext): + basename = basename[:-len(ext)] + return interpret_distro_name(location, basename, metadata) + return [] # no extension matched + + +def distros_for_filename(filename, metadata=None): + """Yield possible egg or source distribution objects based on a filename""" + return distros_for_location( + normalize_path(filename), os.path.basename(filename), metadata + ) + + +def interpret_distro_name( + location, basename, metadata, py_version=None, precedence=SOURCE_DIST, + platform=None +): + """Generate alternative interpretations of a source distro name + + Note: if `location` is a filesystem filename, you should call + ``pkg_resources.normalize_path()`` on it before passing it to this + routine! + """ + # Generate alternative interpretations of a source distro name + # Because some packages are ambiguous as to name/versions split + # e.g. "adns-python-1.1.0", "egenix-mx-commercial", etc. + # So, we generate each possible interepretation (e.g. "adns, python-1.1.0" + # "adns-python, 1.1.0", and "adns-python-1.1.0, no version"). In practice, + # the spurious interpretations should be ignored, because in the event + # there's also an "adns" package, the spurious "python-1.1.0" version will + # compare lower than any numeric version number, and is therefore unlikely + # to match a request for it. It's still a potential problem, though, and + # in the long run PyPI and the distutils should go for "safe" names and + # versions in distribution archive names (sdist and bdist). + + parts = basename.split('-') + if not py_version and any(re.match(r'py\d\.\d$', p) for p in parts[2:]): + # it is a bdist_dumb, not an sdist -- bail out + return + + for p in range(1, len(parts) + 1): + yield Distribution( + location, metadata, '-'.join(parts[:p]), '-'.join(parts[p:]), + py_version=py_version, precedence=precedence, + platform=platform + ) + + +# From Python 2.7 docs +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 six.moves.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 + + +def unique_values(func): + """ + Wrap a function returning an iterable such that the resulting iterable + only ever yields unique items. + """ + + @wraps(func) + def wrapper(*args, **kwargs): + return unique_everseen(func(*args, **kwargs)) + + return wrapper + + +REL = re.compile(r"""<([^>]*\srel\s*=\s*['"]?([^'">]+)[^>]*)>""", re.I) +# this line is here to fix emacs' cruddy broken syntax highlighting + + +@unique_values +def find_external_links(url, page): + """Find rel="homepage" and rel="download" links in `page`, yielding URLs""" + + for match in REL.finditer(page): + tag, rel = match.groups() + rels = set(map(str.strip, rel.lower().split(','))) + if 'homepage' in rels or 'download' in rels: + for match in HREF.finditer(tag): + yield urllib.parse.urljoin(url, htmldecode(match.group(1))) + + for tag in ("<th>Home Page", "<th>Download URL"): + pos = page.find(tag) + if pos != -1: + match = HREF.search(page, pos) + if match: + yield urllib.parse.urljoin(url, htmldecode(match.group(1))) + + +class ContentChecker: + """ + A null content checker that defines the interface for checking content + """ + + def feed(self, block): + """ + Feed a block of data to the hash. + """ + return + + def is_valid(self): + """ + Check the hash. Return False if validation fails. + """ + return True + + def report(self, reporter, template): + """ + Call reporter with information about the checker (hash name) + substituted into the template. + """ + return + + +class HashChecker(ContentChecker): + pattern = re.compile( + r'(?P<hash_name>sha1|sha224|sha384|sha256|sha512|md5)=' + r'(?P<expected>[a-f0-9]+)' + ) + + def __init__(self, hash_name, expected): + self.hash_name = hash_name + self.hash = hashlib.new(hash_name) + self.expected = expected + + @classmethod + def from_url(cls, url): + "Construct a (possibly null) ContentChecker from a URL" + fragment = urllib.parse.urlparse(url)[-1] + if not fragment: + return ContentChecker() + match = cls.pattern.search(fragment) + if not match: + return ContentChecker() + return cls(**match.groupdict()) + + def feed(self, block): + self.hash.update(block) + + def is_valid(self): + return self.hash.hexdigest() == self.expected + + def report(self, reporter, template): + msg = template % self.hash_name + return reporter(msg) + + +class PackageIndex(Environment): + """A distribution index that scans web pages for download URLs""" + + def __init__( + self, index_url="https://pypi.org/simple/", hosts=('*',), + ca_bundle=None, verify_ssl=True, *args, **kw + ): + Environment.__init__(self, *args, **kw) + self.index_url = index_url + "/" [:not index_url.endswith('/')] + self.scanned_urls = {} + self.fetched_urls = {} + self.package_pages = {} + self.allows = re.compile('|'.join(map(translate, hosts))).match + self.to_scan = [] + use_ssl = ( + verify_ssl + and ssl_support.is_available + and (ca_bundle or ssl_support.find_ca_bundle()) + ) + if use_ssl: + self.opener = ssl_support.opener_for(ca_bundle) + else: + self.opener = urllib.request.urlopen + + def process_url(self, url, retrieve=False): + """Evaluate a URL as a possible download, and maybe retrieve it""" + if url in self.scanned_urls and not retrieve: + return + self.scanned_urls[url] = True + if not URL_SCHEME(url): + self.process_filename(url) + return + else: + dists = list(distros_for_url(url)) + if dists: + if not self.url_ok(url): + return + self.debug("Found link: %s", url) + + if dists or not retrieve or url in self.fetched_urls: + list(map(self.add, dists)) + return # don't need the actual page + + if not self.url_ok(url): + self.fetched_urls[url] = True + return + + self.info("Reading %s", url) + self.fetched_urls[url] = True # prevent multiple fetch attempts + tmpl = "Download error on %s: %%s -- Some packages may not be found!" + f = self.open_url(url, tmpl % url) + if f is None: + return + self.fetched_urls[f.url] = True + if 'html' not in f.headers.get('content-type', '').lower(): + f.close() # not html, we can't process it + return + + base = f.url # handle redirects + page = f.read() + if not isinstance(page, str): + # In Python 3 and got bytes but want str. + if isinstance(f, urllib.error.HTTPError): + # Errors have no charset, assume latin1: + charset = 'latin-1' + else: + charset = f.headers.get_param('charset') or 'latin-1' + page = page.decode(charset, "ignore") + f.close() + for match in HREF.finditer(page): + link = urllib.parse.urljoin(base, htmldecode(match.group(1))) + self.process_url(link) + if url.startswith(self.index_url) and getattr(f, 'code', None) != 404: + page = self.process_index(url, page) + + def process_filename(self, fn, nested=False): + # process filenames or directories + if not os.path.exists(fn): + self.warn("Not found: %s", fn) + return + + if os.path.isdir(fn) and not nested: + path = os.path.realpath(fn) + for item in os.listdir(path): + self.process_filename(os.path.join(path, item), True) + + dists = distros_for_filename(fn) + if dists: + self.debug("Found: %s", fn) + list(map(self.add, dists)) + + def url_ok(self, url, fatal=False): + s = URL_SCHEME(url) + is_file = s and s.group(1).lower() == 'file' + if is_file or self.allows(urllib.parse.urlparse(url)[1]): + return True + msg = ( + "\nNote: Bypassing %s (disallowed host; see " + "http://bit.ly/2hrImnY for details).\n") + if fatal: + raise DistutilsError(msg % url) + else: + self.warn(msg, url) + + def scan_egg_links(self, search_path): + dirs = filter(os.path.isdir, search_path) + egg_links = ( + (path, entry) + for path in dirs + for entry in os.listdir(path) + if entry.endswith('.egg-link') + ) + list(itertools.starmap(self.scan_egg_link, egg_links)) + + def scan_egg_link(self, path, entry): + with open(os.path.join(path, entry)) as raw_lines: + # filter non-empty lines + lines = list(filter(None, map(str.strip, raw_lines))) + + if len(lines) != 2: + # format is not recognized; punt + return + + egg_path, setup_path = lines + + for dist in find_distributions(os.path.join(path, egg_path)): + dist.location = os.path.join(path, *lines) + dist.precedence = SOURCE_DIST + self.add(dist) + + def process_index(self, url, page): + """Process the contents of a PyPI page""" + + def scan(link): + # Process a URL to see if it's for a package page + if link.startswith(self.index_url): + parts = list(map( + urllib.parse.unquote, link[len(self.index_url):].split('/') + )) + if len(parts) == 2 and '#' not in parts[1]: + # it's a package page, sanitize and index it + pkg = safe_name(parts[0]) + ver = safe_version(parts[1]) + self.package_pages.setdefault(pkg.lower(), {})[link] = True + return to_filename(pkg), to_filename(ver) + return None, None + + # process an index page into the package-page index + for match in HREF.finditer(page): + try: + scan(urllib.parse.urljoin(url, htmldecode(match.group(1)))) + except ValueError: + pass + + pkg, ver = scan(url) # ensure this page is in the page index + if pkg: + # process individual package page + for new_url in find_external_links(url, page): + # Process the found URL + base, frag = egg_info_for_url(new_url) + if base.endswith('.py') and not frag: + if ver: + new_url += '#egg=%s-%s' % (pkg, ver) + else: + self.need_version_info(url) + self.scan_url(new_url) + + return PYPI_MD5.sub( + lambda m: '<a href="%s#md5=%s">%s</a>' % m.group(1, 3, 2), page + ) + else: + return "" # no sense double-scanning non-package pages + + def need_version_info(self, url): + self.scan_all( + "Page at %s links to .py file(s) without version info; an index " + "scan is required.", url + ) + + def scan_all(self, msg=None, *args): + if self.index_url not in self.fetched_urls: + if msg: + self.warn(msg, *args) + self.info( + "Scanning index of all packages (this may take a while)" + ) + self.scan_url(self.index_url) + + def find_packages(self, requirement): + self.scan_url(self.index_url + requirement.unsafe_name + '/') + + if not self.package_pages.get(requirement.key): + # Fall back to safe version of the name + self.scan_url(self.index_url + requirement.project_name + '/') + + if not self.package_pages.get(requirement.key): + # We couldn't find the target package, so search the index page too + self.not_found_in_index(requirement) + + for url in list(self.package_pages.get(requirement.key, ())): + # scan each page that might be related to the desired package + self.scan_url(url) + + def obtain(self, requirement, installer=None): + self.prescan() + self.find_packages(requirement) + for dist in self[requirement.key]: + if dist in requirement: + return dist + self.debug("%s does not match %s", requirement, dist) + return super(PackageIndex, self).obtain(requirement, installer) + + def check_hash(self, checker, filename, tfp): + """ + checker is a ContentChecker + """ + checker.report( + self.debug, + "Validating %%s checksum for %s" % filename) + if not checker.is_valid(): + tfp.close() + os.unlink(filename) + raise DistutilsError( + "%s validation failed for %s; " + "possible download problem?" + % (checker.hash.name, os.path.basename(filename)) + ) + + def add_find_links(self, urls): + """Add `urls` to the list that will be prescanned for searches""" + for url in urls: + if ( + self.to_scan is None # if we have already "gone online" + or not URL_SCHEME(url) # or it's a local file/directory + or url.startswith('file:') + or list(distros_for_url(url)) # or a direct package link + ): + # then go ahead and process it now + self.scan_url(url) + else: + # otherwise, defer retrieval till later + self.to_scan.append(url) + + def prescan(self): + """Scan urls scheduled for prescanning (e.g. --find-links)""" + if self.to_scan: + list(map(self.scan_url, self.to_scan)) + self.to_scan = None # from now on, go ahead and process immediately + + def not_found_in_index(self, requirement): + if self[requirement.key]: # we've seen at least one distro + meth, msg = self.info, "Couldn't retrieve index page for %r" + else: # no distros seen for this name, might be misspelled + meth, msg = ( + self.warn, + "Couldn't find index page for %r (maybe misspelled?)") + meth(msg, requirement.unsafe_name) + self.scan_all() + + def download(self, spec, tmpdir): + """Locate and/or download `spec` to `tmpdir`, returning a local path + + `spec` may be a ``Requirement`` object, or a string containing a URL, + an existing local filename, or a project/version requirement spec + (i.e. the string form of a ``Requirement`` object). If it is the URL + of a .py file with an unambiguous ``#egg=name-version`` tag (i.e., one + that escapes ``-`` as ``_`` throughout), a trivial ``setup.py`` is + automatically created alongside the downloaded file. + + If `spec` is a ``Requirement`` object or a string containing a + project/version requirement spec, this method returns the location of + a matching distribution (possibly after downloading it to `tmpdir`). + If `spec` is a locally existing file or directory name, it is simply + returned unchanged. If `spec` is a URL, it is downloaded to a subpath + of `tmpdir`, and the local filename is returned. Various errors may be + raised if a problem occurs during downloading. + """ + if not isinstance(spec, Requirement): + scheme = URL_SCHEME(spec) + if scheme: + # It's a url, download it to tmpdir + found = self._download_url(scheme.group(1), spec, tmpdir) + base, fragment = egg_info_for_url(spec) + if base.endswith('.py'): + found = self.gen_setup(found, fragment, tmpdir) + return found + elif os.path.exists(spec): + # Existing file or directory, just return it + return spec + else: + spec = parse_requirement_arg(spec) + return getattr(self.fetch_distribution(spec, tmpdir), 'location', None) + + def fetch_distribution( + self, requirement, tmpdir, force_scan=False, source=False, + develop_ok=False, local_index=None): + """Obtain a distribution suitable for fulfilling `requirement` + + `requirement` must be a ``pkg_resources.Requirement`` instance. + If necessary, or if the `force_scan` flag is set, the requirement is + searched for in the (online) package index as well as the locally + installed packages. If a distribution matching `requirement` is found, + the returned distribution's ``location`` is the value you would have + gotten from calling the ``download()`` method with the matching + distribution's URL or filename. If no matching distribution is found, + ``None`` is returned. + + If the `source` flag is set, only source distributions and source + checkout links will be considered. Unless the `develop_ok` flag is + set, development and system eggs (i.e., those using the ``.egg-info`` + format) will be ignored. + """ + # process a Requirement + self.info("Searching for %s", requirement) + skipped = {} + dist = None + + def find(req, env=None): + if env is None: + env = self + # Find a matching distribution; may be called more than once + + for dist in env[req.key]: + + if dist.precedence == DEVELOP_DIST and not develop_ok: + if dist not in skipped: + self.warn( + "Skipping development or system egg: %s", dist, + ) + skipped[dist] = 1 + continue + + test = ( + dist in req + and (dist.precedence <= SOURCE_DIST or not source) + ) + if test: + loc = self.download(dist.location, tmpdir) + dist.download_location = loc + if os.path.exists(dist.download_location): + return dist + + if force_scan: + self.prescan() + self.find_packages(requirement) + dist = find(requirement) + + if not dist and local_index is not None: + dist = find(requirement, local_index) + + if dist is None: + if self.to_scan is not None: + self.prescan() + dist = find(requirement) + + if dist is None and not force_scan: + self.find_packages(requirement) + dist = find(requirement) + + if dist is None: + self.warn( + "No local packages or working download links found for %s%s", + (source and "a source distribution of " or ""), + requirement, + ) + else: + self.info("Best match: %s", dist) + return dist.clone(location=dist.download_location) + + def fetch(self, requirement, tmpdir, force_scan=False, source=False): + """Obtain a file suitable for fulfilling `requirement` + + DEPRECATED; use the ``fetch_distribution()`` method now instead. For + backward compatibility, this routine is identical but returns the + ``location`` of the downloaded distribution instead of a distribution + object. + """ + dist = self.fetch_distribution(requirement, tmpdir, force_scan, source) + if dist is not None: + return dist.location + return None + + def gen_setup(self, filename, fragment, tmpdir): + match = EGG_FRAGMENT.match(fragment) + dists = match and [ + d for d in + interpret_distro_name(filename, match.group(1), None) if d.version + ] or [] + + if len(dists) == 1: # unambiguous ``#egg`` fragment + basename = os.path.basename(filename) + + # Make sure the file has been downloaded to the temp dir. + if os.path.dirname(filename) != tmpdir: + dst = os.path.join(tmpdir, basename) + from setuptools.command.easy_install import samefile + if not samefile(filename, dst): + shutil.copy2(filename, dst) + filename = dst + + with open(os.path.join(tmpdir, 'setup.py'), 'w') as file: + file.write( + "from setuptools import setup\n" + "setup(name=%r, version=%r, py_modules=[%r])\n" + % ( + dists[0].project_name, dists[0].version, + os.path.splitext(basename)[0] + ) + ) + return filename + + elif match: + raise DistutilsError( + "Can't unambiguously interpret project/version identifier %r; " + "any dashes in the name or version should be escaped using " + "underscores. %r" % (fragment, dists) + ) + else: + raise DistutilsError( + "Can't process plain .py files without an '#egg=name-version'" + " suffix to enable automatic setup script generation." + ) + + dl_blocksize = 8192 + + def _download_to(self, url, filename): + self.info("Downloading %s", url) + # Download the file + fp = None + try: + checker = HashChecker.from_url(url) + fp = self.open_url(url) + if isinstance(fp, urllib.error.HTTPError): + raise DistutilsError( + "Can't download %s: %s %s" % (url, fp.code, fp.msg) + ) + headers = fp.info() + blocknum = 0 + bs = self.dl_blocksize + size = -1 + if "content-length" in headers: + # Some servers return multiple Content-Length headers :( + sizes = get_all_headers(headers, 'Content-Length') + size = max(map(int, sizes)) + self.reporthook(url, filename, blocknum, bs, size) + with open(filename, 'wb') as tfp: + while True: + block = fp.read(bs) + if block: + checker.feed(block) + tfp.write(block) + blocknum += 1 + self.reporthook(url, filename, blocknum, bs, size) + else: + break + self.check_hash(checker, filename, tfp) + return headers + finally: + if fp: + fp.close() + + def reporthook(self, url, filename, blocknum, blksize, size): + pass # no-op + + def open_url(self, url, warning=None): + if url.startswith('file:'): + return local_open(url) + try: + return open_with_auth(url, self.opener) + except (ValueError, http_client.InvalidURL) as v: + msg = ' '.join([str(arg) for arg in v.args]) + if warning: + self.warn(warning, msg) + else: + raise DistutilsError('%s %s' % (url, msg)) + except urllib.error.HTTPError as v: + return v + except urllib.error.URLError as v: + if warning: + self.warn(warning, v.reason) + else: + raise DistutilsError("Download error for %s: %s" + % (url, v.reason)) + except http_client.BadStatusLine as v: + if warning: + self.warn(warning, v.line) + else: + raise DistutilsError( + '%s returned a bad status line. The server might be ' + 'down, %s' % + (url, v.line) + ) + except (http_client.HTTPException, socket.error) as v: + if warning: + self.warn(warning, v) + else: + raise DistutilsError("Download error for %s: %s" + % (url, v)) + + def _download_url(self, scheme, url, tmpdir): + # Determine download filename + # + name, fragment = egg_info_for_url(url) + if name: + while '..' in name: + name = name.replace('..', '.').replace('\\', '_') + else: + name = "__downloaded__" # default if URL has no path contents + + if name.endswith('.egg.zip'): + name = name[:-4] # strip the extra .zip before download + + filename = os.path.join(tmpdir, name) + + # Download the file + # + if scheme == 'svn' or scheme.startswith('svn+'): + return self._download_svn(url, filename) + elif scheme == 'git' or scheme.startswith('git+'): + return self._download_git(url, filename) + elif scheme.startswith('hg+'): + return self._download_hg(url, filename) + elif scheme == 'file': + return urllib.request.url2pathname(urllib.parse.urlparse(url)[2]) + else: + self.url_ok(url, True) # raises error if not allowed + return self._attempt_download(url, filename) + + def scan_url(self, url): + self.process_url(url, True) + + def _attempt_download(self, url, filename): + headers = self._download_to(url, filename) + if 'html' in headers.get('content-type', '').lower(): + return self._download_html(url, headers, filename) + else: + return filename + + def _download_html(self, url, headers, filename): + file = open(filename) + for line in file: + if line.strip(): + # Check for a subversion index page + if re.search(r'<title>([^- ]+ - )?Revision \d+:', line): + # it's a subversion index page: + file.close() + os.unlink(filename) + return self._download_svn(url, filename) + break # not an index page + file.close() + os.unlink(filename) + raise DistutilsError("Unexpected HTML page found at " + url) + + def _download_svn(self, url, filename): + warnings.warn("SVN download support is deprecated", UserWarning) + url = url.split('#', 1)[0] # remove any fragment for svn's sake + creds = '' + if url.lower().startswith('svn:') and '@' in url: + scheme, netloc, path, p, q, f = urllib.parse.urlparse(url) + if not netloc and path.startswith('//') and '/' in path[2:]: + netloc, path = path[2:].split('/', 1) + auth, host = _splituser(netloc) + if auth: + if ':' in auth: + user, pw = auth.split(':', 1) + creds = " --username=%s --password=%s" % (user, pw) + else: + creds = " --username=" + auth + netloc = host + parts = scheme, netloc, url, p, q, f + url = urllib.parse.urlunparse(parts) + self.info("Doing subversion checkout from %s to %s", url, filename) + os.system("svn checkout%s -q %s %s" % (creds, url, filename)) + return filename + + @staticmethod + def _vcs_split_rev_from_url(url, pop_prefix=False): + scheme, netloc, path, query, frag = urllib.parse.urlsplit(url) + + scheme = scheme.split('+', 1)[-1] + + # Some fragment identification fails + path = path.split('#', 1)[0] + + rev = None + if '@' in path: + path, rev = path.rsplit('@', 1) + + # Also, discard fragment + url = urllib.parse.urlunsplit((scheme, netloc, path, query, '')) + + return url, rev + + def _download_git(self, url, filename): + filename = filename.split('#', 1)[0] + url, rev = self._vcs_split_rev_from_url(url, pop_prefix=True) + + self.info("Doing git clone from %s to %s", url, filename) + os.system("git clone --quiet %s %s" % (url, filename)) + + if rev is not None: + self.info("Checking out %s", rev) + os.system("git -C %s checkout --quiet %s" % ( + filename, + rev, + )) + + return filename + + def _download_hg(self, url, filename): + filename = filename.split('#', 1)[0] + url, rev = self._vcs_split_rev_from_url(url, pop_prefix=True) + + self.info("Doing hg clone from %s to %s", url, filename) + os.system("hg clone --quiet %s %s" % (url, filename)) + + if rev is not None: + self.info("Updating to %s", rev) + os.system("hg --cwd %s up -C -r %s -q" % ( + filename, + rev, + )) + + return filename + + def debug(self, msg, *args): + log.debug(msg, *args) + + def info(self, msg, *args): + log.info(msg, *args) + + def warn(self, msg, *args): + log.warn(msg, *args) + + +# This pattern matches a character entity reference (a decimal numeric +# references, a hexadecimal numeric reference, or a named reference). +entity_sub = re.compile(r'&(#(\d+|x[\da-fA-F]+)|[\w.:-]+);?').sub + + +def decode_entity(match): + what = match.group(0) + return unescape(what) + + +def htmldecode(text): + """ + Decode HTML entities in the given text. + + >>> htmldecode( + ... 'https://../package_name-0.1.2.tar.gz' + ... '?tokena=A&tokenb=B">package_name-0.1.2.tar.gz') + 'https://../package_name-0.1.2.tar.gz?tokena=A&tokenb=B">package_name-0.1.2.tar.gz' + """ + return entity_sub(decode_entity, text) + + +def socket_timeout(timeout=15): + def _socket_timeout(func): + def _socket_timeout(*args, **kwargs): + old_timeout = socket.getdefaulttimeout() + socket.setdefaulttimeout(timeout) + try: + return func(*args, **kwargs) + finally: + socket.setdefaulttimeout(old_timeout) + + return _socket_timeout + + return _socket_timeout + + +def _encode_auth(auth): + """ + A function compatible with Python 2.3-3.3 that will encode + auth from a URL suitable for an HTTP header. + >>> str(_encode_auth('username%3Apassword')) + 'dXNlcm5hbWU6cGFzc3dvcmQ=' + + Long auth strings should not cause a newline to be inserted. + >>> long_auth = 'username:' + 'password'*10 + >>> chr(10) in str(_encode_auth(long_auth)) + False + """ + auth_s = urllib.parse.unquote(auth) + # convert to bytes + auth_bytes = auth_s.encode() + encoded_bytes = base64.b64encode(auth_bytes) + # convert back to a string + encoded = encoded_bytes.decode() + # strip the trailing carriage return + return encoded.replace('\n', '') + + +class Credential: + """ + A username/password pair. Use like a namedtuple. + """ + + def __init__(self, username, password): + self.username = username + self.password = password + + def __iter__(self): + yield self.username + yield self.password + + def __str__(self): + return '%(username)s:%(password)s' % vars(self) + + +class PyPIConfig(configparser.RawConfigParser): + def __init__(self): + """ + Load from ~/.pypirc + """ + defaults = dict.fromkeys(['username', 'password', 'repository'], '') + configparser.RawConfigParser.__init__(self, defaults) + + rc = os.path.join(os.path.expanduser('~'), '.pypirc') + if os.path.exists(rc): + self.read(rc) + + @property + def creds_by_repository(self): + sections_with_repositories = [ + section for section in self.sections() + if self.get(section, 'repository').strip() + ] + + return dict(map(self._get_repo_cred, sections_with_repositories)) + + def _get_repo_cred(self, section): + repo = self.get(section, 'repository').strip() + return repo, Credential( + self.get(section, 'username').strip(), + self.get(section, 'password').strip(), + ) + + def find_credential(self, url): + """ + If the URL indicated appears to be a repository defined in this + config, return the credential for that repository. + """ + for repository, cred in self.creds_by_repository.items(): + if url.startswith(repository): + return cred + + +def open_with_auth(url, opener=urllib.request.urlopen): + """Open a urllib2 request, handling HTTP authentication""" + + parsed = urllib.parse.urlparse(url) + scheme, netloc, path, params, query, frag = parsed + + # Double scheme does not raise on Mac OS X as revealed by a + # failing test. We would expect "nonnumeric port". Refs #20. + if netloc.endswith(':'): + raise http_client.InvalidURL("nonnumeric port: ''") + + if scheme in ('http', 'https'): + auth, address = _splituser(netloc) + else: + auth = None + + if not auth: + cred = PyPIConfig().find_credential(url) + if cred: + auth = str(cred) + info = cred.username, url + log.info('Authenticating as %s for %s (from .pypirc)', *info) + + if auth: + auth = "Basic " + _encode_auth(auth) + parts = scheme, address, path, params, query, frag + new_url = urllib.parse.urlunparse(parts) + request = urllib.request.Request(new_url) + request.add_header("Authorization", auth) + else: + request = urllib.request.Request(url) + + request.add_header('User-Agent', user_agent) + fp = opener(request) + + if auth: + # Put authentication info back into request URL if same host, + # so that links found on the page will work + s2, h2, path2, param2, query2, frag2 = urllib.parse.urlparse(fp.url) + if s2 == scheme and h2 == address: + parts = s2, netloc, path2, param2, query2, frag2 + fp.url = urllib.parse.urlunparse(parts) + + return fp + + +# copy of urllib.parse._splituser from Python 3.8 +def _splituser(host): + """splituser('user[:passwd]@host[:port]') --> 'user[:passwd]', 'host[:port]'.""" + user, delim, host = host.rpartition('@') + return (user if delim else None), host + + +# adding a timeout to avoid freezing package_index +open_with_auth = socket_timeout(_SOCKET_TIMEOUT)(open_with_auth) + + +def fix_sf_url(url): + return url # backward compatibility + + +def local_open(url): + """Read a local path, with special support for directories""" + scheme, server, path, param, query, frag = urllib.parse.urlparse(url) + filename = urllib.request.url2pathname(path) + if os.path.isfile(filename): + return urllib.request.urlopen(url) + elif path.endswith('/') and os.path.isdir(filename): + files = [] + for f in os.listdir(filename): + filepath = os.path.join(filename, f) + if f == 'index.html': + with open(filepath, 'r') as fp: + body = fp.read() + break + elif os.path.isdir(filepath): + f += '/' + files.append('<a href="{name}">{name}</a>'.format(name=f)) + else: + tmpl = ( + "<html><head><title>{url}" + "{files}") + body = tmpl.format(url=url, files='\n'.join(files)) + status, message = 200, "OK" + else: + status, message, body = 404, "Path not found", "Not found" + + headers = {'content-type': 'text/html'} + body_stream = six.StringIO(body) + return urllib.error.HTTPError(url, status, message, headers, body_stream) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/pep425tags.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/pep425tags.py new file mode 100644 index 00000000..48745a29 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/pep425tags.py @@ -0,0 +1,319 @@ +# This file originally from pip: +# https://github.com/pypa/pip/blob/8f4f15a5a95d7d5b511ceaee9ed261176c181970/src/pip/_internal/pep425tags.py +"""Generate and work with PEP 425 Compatibility Tags.""" +from __future__ import absolute_import + +import distutils.util +from distutils import log +import platform +import re +import sys +import sysconfig +import warnings +from collections import OrderedDict + +from .extern import six + +from . import glibc + +_osx_arch_pat = re.compile(r'(.+)_(\d+)_(\d+)_(.+)') + + +def get_config_var(var): + try: + return sysconfig.get_config_var(var) + except IOError as e: # Issue #1074 + warnings.warn("{}".format(e), RuntimeWarning) + return None + + +def get_abbr_impl(): + """Return abbreviated implementation name.""" + if hasattr(sys, 'pypy_version_info'): + pyimpl = 'pp' + elif sys.platform.startswith('java'): + pyimpl = 'jy' + elif sys.platform == 'cli': + pyimpl = 'ip' + else: + pyimpl = 'cp' + return pyimpl + + +def get_impl_ver(): + """Return implementation version.""" + impl_ver = get_config_var("py_version_nodot") + if not impl_ver or get_abbr_impl() == 'pp': + impl_ver = ''.join(map(str, get_impl_version_info())) + return impl_ver + + +def get_impl_version_info(): + """Return sys.version_info-like tuple for use in decrementing the minor + version.""" + if get_abbr_impl() == 'pp': + # as per https://github.com/pypa/pip/issues/2882 + return (sys.version_info[0], sys.pypy_version_info.major, + sys.pypy_version_info.minor) + else: + return sys.version_info[0], sys.version_info[1] + + +def get_impl_tag(): + """ + Returns the Tag for this specific implementation. + """ + return "{}{}".format(get_abbr_impl(), get_impl_ver()) + + +def get_flag(var, fallback, expected=True, warn=True): + """Use a fallback method for determining SOABI flags if the needed config + var is unset or unavailable.""" + val = get_config_var(var) + if val is None: + if warn: + log.debug("Config variable '%s' is unset, Python ABI tag may " + "be incorrect", var) + return fallback() + return val == expected + + +def get_abi_tag(): + """Return the ABI tag based on SOABI (if available) or emulate SOABI + (CPython 2, PyPy).""" + soabi = get_config_var('SOABI') + impl = get_abbr_impl() + if not soabi and impl in {'cp', 'pp'} and hasattr(sys, 'maxunicode'): + d = '' + m = '' + u = '' + if get_flag('Py_DEBUG', + lambda: hasattr(sys, 'gettotalrefcount'), + warn=(impl == 'cp')): + d = 'd' + if get_flag('WITH_PYMALLOC', + lambda: impl == 'cp', + warn=(impl == 'cp')): + m = 'm' + if get_flag('Py_UNICODE_SIZE', + lambda: sys.maxunicode == 0x10ffff, + expected=4, + warn=(impl == 'cp' and + six.PY2)) \ + and six.PY2: + u = 'u' + abi = '%s%s%s%s%s' % (impl, get_impl_ver(), d, m, u) + elif soabi and soabi.startswith('cpython-'): + abi = 'cp' + soabi.split('-')[1] + elif soabi: + abi = soabi.replace('.', '_').replace('-', '_') + else: + abi = None + return abi + + +def _is_running_32bit(): + return sys.maxsize == 2147483647 + + +def get_platform(): + """Return our platform name 'win32', 'linux_x86_64'""" + if sys.platform == 'darwin': + # distutils.util.get_platform() returns the release based on the value + # of MACOSX_DEPLOYMENT_TARGET on which Python was built, which may + # be significantly older than the user's current machine. + release, _, machine = platform.mac_ver() + split_ver = release.split('.') + + if machine == "x86_64" and _is_running_32bit(): + machine = "i386" + elif machine == "ppc64" and _is_running_32bit(): + machine = "ppc" + + return 'macosx_{}_{}_{}'.format(split_ver[0], split_ver[1], machine) + + # XXX remove distutils dependency + result = distutils.util.get_platform().replace('.', '_').replace('-', '_') + if result == "linux_x86_64" and _is_running_32bit(): + # 32 bit Python program (running on a 64 bit Linux): pip should only + # install and run 32 bit compiled extensions in that case. + result = "linux_i686" + + return result + + +def is_manylinux1_compatible(): + # Only Linux, and only x86-64 / i686 + if get_platform() not in {"linux_x86_64", "linux_i686"}: + return False + + # Check for presence of _manylinux module + try: + import _manylinux + return bool(_manylinux.manylinux1_compatible) + except (ImportError, AttributeError): + # Fall through to heuristic check below + pass + + # Check glibc version. CentOS 5 uses glibc 2.5. + return glibc.have_compatible_glibc(2, 5) + + +def get_darwin_arches(major, minor, machine): + """Return a list of supported arches (including group arches) for + the given major, minor and machine architecture of a macOS machine. + """ + arches = [] + + def _supports_arch(major, minor, arch): + # Looking at the application support for macOS versions in the chart + # provided by https://en.wikipedia.org/wiki/OS_X#Versions it appears + # our timeline looks roughly like: + # + # 10.0 - Introduces ppc support. + # 10.4 - Introduces ppc64, i386, and x86_64 support, however the ppc64 + # and x86_64 support is CLI only, and cannot be used for GUI + # applications. + # 10.5 - Extends ppc64 and x86_64 support to cover GUI applications. + # 10.6 - Drops support for ppc64 + # 10.7 - Drops support for ppc + # + # Given that we do not know if we're installing a CLI or a GUI + # application, we must be conservative and assume it might be a GUI + # application and behave as if ppc64 and x86_64 support did not occur + # until 10.5. + # + # Note: The above information is taken from the "Application support" + # column in the chart not the "Processor support" since I believe + # that we care about what instruction sets an application can use + # not which processors the OS supports. + if arch == 'ppc': + return (major, minor) <= (10, 5) + if arch == 'ppc64': + return (major, minor) == (10, 5) + if arch == 'i386': + return (major, minor) >= (10, 4) + if arch == 'x86_64': + return (major, minor) >= (10, 5) + if arch in groups: + for garch in groups[arch]: + if _supports_arch(major, minor, garch): + return True + return False + + groups = OrderedDict([ + ("fat", ("i386", "ppc")), + ("intel", ("x86_64", "i386")), + ("fat64", ("x86_64", "ppc64")), + ("fat32", ("x86_64", "i386", "ppc")), + ]) + + if _supports_arch(major, minor, machine): + arches.append(machine) + + for garch in groups: + if machine in groups[garch] and _supports_arch(major, minor, garch): + arches.append(garch) + + arches.append('universal') + + return arches + + +def get_supported(versions=None, noarch=False, platform=None, + impl=None, abi=None): + """Return a list of supported tags for each version specified in + `versions`. + + :param versions: a list of string versions, of the form ["33", "32"], + or None. The first version will be assumed to support our ABI. + :param platform: specify the exact platform 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 abi: specify the exact abi you want valid + tags for, or None. If None, use the local interpreter abi. + """ + supported = [] + + # Versions must be given with respect to the preference + if versions is None: + versions = [] + version_info = get_impl_version_info() + major = version_info[:-1] + # Support all previous minor Python versions. + for minor in range(version_info[-1], -1, -1): + versions.append(''.join(map(str, major + (minor,)))) + + impl = impl or get_abbr_impl() + + abis = [] + + abi = abi or get_abi_tag() + if abi: + abis[0:0] = [abi] + + abi3s = set() + import imp + for suffix in imp.get_suffixes(): + if suffix[0].startswith('.abi'): + abi3s.add(suffix[0].split('.', 2)[1]) + + abis.extend(sorted(list(abi3s))) + + abis.append('none') + + if not noarch: + arch = platform or get_platform() + if arch.startswith('macosx'): + # support macosx-10.6-intel on macosx-10.9-x86_64 + match = _osx_arch_pat.match(arch) + if match: + name, major, minor, actual_arch = match.groups() + tpl = '{}_{}_%i_%s'.format(name, major) + arches = [] + for m in reversed(range(int(minor) + 1)): + for a in get_darwin_arches(int(major), m, actual_arch): + arches.append(tpl % (m, a)) + else: + # arch pattern didn't match (?!) + arches = [arch] + elif platform is None and is_manylinux1_compatible(): + arches = [arch.replace('linux', 'manylinux1'), arch] + else: + arches = [arch] + + # Current version, current API (built specifically for our Python): + for abi in abis: + for arch in arches: + supported.append(('%s%s' % (impl, versions[0]), abi, arch)) + + # abi3 modules compatible with older version of Python + for version in versions[1:]: + # abi3 was introduced in Python 3.2 + if version in {'31', '30'}: + break + for abi in abi3s: # empty set if not Python 3 + for arch in arches: + supported.append(("%s%s" % (impl, version), abi, arch)) + + # Has binaries, does not use the Python API: + for arch in arches: + supported.append(('py%s' % (versions[0][0]), 'none', arch)) + + # No abi / arch, but requires our implementation: + supported.append(('%s%s' % (impl, versions[0]), 'none', 'any')) + # Tagged specifically as being cross-version compatible + # (with just the major version specified) + supported.append(('%s%s' % (impl, versions[0][0]), 'none', 'any')) + + # No abi / arch, generic Python + for i, version in enumerate(versions): + supported.append(('py%s' % (version,), 'none', 'any')) + if i == 0: + supported.append(('py%s' % (version[0]), 'none', 'any')) + + return supported + + +implementation_tag = get_impl_tag() diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/py27compat.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/py27compat.py new file mode 100644 index 00000000..2985011b --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/py27compat.py @@ -0,0 +1,28 @@ +""" +Compatibility Support for Python 2.7 and earlier +""" + +import platform + +from setuptools.extern import six + + +def get_all_headers(message, key): + """ + Given an HTTPMessage, return all headers matching a given key. + """ + return message.get_all(key) + + +if six.PY2: + def get_all_headers(message, key): + return message.getheaders(key) + + +linux_py2_ascii = ( + platform.system() == 'Linux' and + six.PY2 +) + +rmtree_safe = str if linux_py2_ascii else lambda x: x +"""Workaround for http://bugs.python.org/issue24672""" diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/py31compat.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/py31compat.py new file mode 100644 index 00000000..e1da7ee2 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/py31compat.py @@ -0,0 +1,32 @@ +__all__ = [] + +__metaclass__ = type + + +try: + # Python >=3.2 + from tempfile import TemporaryDirectory +except ImportError: + import shutil + import tempfile + + class TemporaryDirectory: + """ + Very simple temporary directory context manager. + Will try to delete afterward, but will also ignore OS and similar + errors on deletion. + """ + + def __init__(self, **kwargs): + self.name = None # Handle mkdtemp raising an exception + self.name = tempfile.mkdtemp(**kwargs) + + def __enter__(self): + return self.name + + def __exit__(self, exctype, excvalue, exctrace): + try: + shutil.rmtree(self.name, True) + except OSError: # removal errors are not the only possible + pass + self.name = None diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/py33compat.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/py33compat.py new file mode 100644 index 00000000..87cf5398 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/py33compat.py @@ -0,0 +1,55 @@ +import dis +import array +import collections + +try: + import html +except ImportError: + html = None + +from setuptools.extern import six +from setuptools.extern.six.moves import html_parser + +__metaclass__ = type + +OpArg = collections.namedtuple('OpArg', 'opcode arg') + + +class Bytecode_compat: + def __init__(self, code): + self.code = code + + def __iter__(self): + """Yield '(op,arg)' pair for each operation in code object 'code'""" + + bytes = array.array('b', self.code.co_code) + eof = len(self.code.co_code) + + ptr = 0 + extended_arg = 0 + + while ptr < eof: + + op = bytes[ptr] + + if op >= dis.HAVE_ARGUMENT: + + arg = bytes[ptr + 1] + bytes[ptr + 2] * 256 + extended_arg + ptr += 3 + + if op == dis.EXTENDED_ARG: + long_type = six.integer_types[-1] + extended_arg = arg * long_type(65536) + continue + + else: + arg = None + ptr += 1 + + yield OpArg(op, arg) + + +Bytecode = getattr(dis, 'Bytecode', Bytecode_compat) + + +unescape = getattr(html, 'unescape', html_parser.HTMLParser().unescape) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/sandbox.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/sandbox.py new file mode 100644 index 00000000..685f3f72 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/sandbox.py @@ -0,0 +1,491 @@ +import os +import sys +import tempfile +import operator +import functools +import itertools +import re +import contextlib +import pickle +import textwrap + +from setuptools.extern import six +from setuptools.extern.six.moves import builtins, map + +import pkg_resources.py31compat + +if sys.platform.startswith('java'): + import org.python.modules.posix.PosixModule as _os +else: + _os = sys.modules[os.name] +try: + _file = file +except NameError: + _file = None +_open = open +from distutils.errors import DistutilsError +from pkg_resources import working_set + + +__all__ = [ + "AbstractSandbox", "DirectorySandbox", "SandboxViolation", "run_setup", +] + + +def _execfile(filename, globals, locals=None): + """ + Python 3 implementation of execfile. + """ + mode = 'rb' + with open(filename, mode) as stream: + script = stream.read() + if locals is None: + locals = globals + code = compile(script, filename, 'exec') + exec(code, globals, locals) + + +@contextlib.contextmanager +def save_argv(repl=None): + saved = sys.argv[:] + if repl is not None: + sys.argv[:] = repl + try: + yield saved + finally: + sys.argv[:] = saved + + +@contextlib.contextmanager +def save_path(): + saved = sys.path[:] + try: + yield saved + finally: + sys.path[:] = saved + + +@contextlib.contextmanager +def override_temp(replacement): + """ + Monkey-patch tempfile.tempdir with replacement, ensuring it exists + """ + pkg_resources.py31compat.makedirs(replacement, exist_ok=True) + + saved = tempfile.tempdir + + tempfile.tempdir = replacement + + try: + yield + finally: + tempfile.tempdir = saved + + +@contextlib.contextmanager +def pushd(target): + saved = os.getcwd() + os.chdir(target) + try: + yield saved + finally: + os.chdir(saved) + + +class UnpickleableException(Exception): + """ + An exception representing another Exception that could not be pickled. + """ + + @staticmethod + def dump(type, exc): + """ + Always return a dumped (pickled) type and exc. If exc can't be pickled, + wrap it in UnpickleableException first. + """ + try: + return pickle.dumps(type), pickle.dumps(exc) + except Exception: + # get UnpickleableException inside the sandbox + from setuptools.sandbox import UnpickleableException as cls + return cls.dump(cls, cls(repr(exc))) + + +class ExceptionSaver: + """ + A Context Manager that will save an exception, serialized, and restore it + later. + """ + + def __enter__(self): + return self + + def __exit__(self, type, exc, tb): + if not exc: + return + + # dump the exception + self._saved = UnpickleableException.dump(type, exc) + self._tb = tb + + # suppress the exception + return True + + def resume(self): + "restore and re-raise any exception" + + if '_saved' not in vars(self): + return + + type, exc = map(pickle.loads, self._saved) + six.reraise(type, exc, self._tb) + + +@contextlib.contextmanager +def save_modules(): + """ + Context in which imported modules are saved. + + Translates exceptions internal to the context into the equivalent exception + outside the context. + """ + saved = sys.modules.copy() + with ExceptionSaver() as saved_exc: + yield saved + + sys.modules.update(saved) + # remove any modules imported since + del_modules = ( + mod_name for mod_name in sys.modules + if mod_name not in saved + # exclude any encodings modules. See #285 + and not mod_name.startswith('encodings.') + ) + _clear_modules(del_modules) + + saved_exc.resume() + + +def _clear_modules(module_names): + for mod_name in list(module_names): + del sys.modules[mod_name] + + +@contextlib.contextmanager +def save_pkg_resources_state(): + saved = pkg_resources.__getstate__() + try: + yield saved + finally: + pkg_resources.__setstate__(saved) + + +@contextlib.contextmanager +def setup_context(setup_dir): + temp_dir = os.path.join(setup_dir, 'temp') + with save_pkg_resources_state(): + with save_modules(): + hide_setuptools() + with save_path(): + with save_argv(): + with override_temp(temp_dir): + with pushd(setup_dir): + # ensure setuptools commands are available + __import__('setuptools') + yield + + +def _needs_hiding(mod_name): + """ + >>> _needs_hiding('setuptools') + True + >>> _needs_hiding('pkg_resources') + True + >>> _needs_hiding('setuptools_plugin') + False + >>> _needs_hiding('setuptools.__init__') + True + >>> _needs_hiding('distutils') + True + >>> _needs_hiding('os') + False + >>> _needs_hiding('Cython') + True + """ + pattern = re.compile(r'(setuptools|pkg_resources|distutils|Cython)(\.|$)') + return bool(pattern.match(mod_name)) + + +def hide_setuptools(): + """ + Remove references to setuptools' modules from sys.modules to allow the + invocation to import the most appropriate setuptools. This technique is + necessary to avoid issues such as #315 where setuptools upgrading itself + would fail to find a function declared in the metadata. + """ + modules = filter(_needs_hiding, sys.modules) + _clear_modules(modules) + + +def run_setup(setup_script, args): + """Run a distutils setup script, sandboxed in its directory""" + setup_dir = os.path.abspath(os.path.dirname(setup_script)) + with setup_context(setup_dir): + try: + sys.argv[:] = [setup_script] + list(args) + sys.path.insert(0, setup_dir) + # reset to include setup dir, w/clean callback list + working_set.__init__() + working_set.callbacks.append(lambda dist: dist.activate()) + + # __file__ should be a byte string on Python 2 (#712) + dunder_file = ( + setup_script + if isinstance(setup_script, str) else + setup_script.encode(sys.getfilesystemencoding()) + ) + + with DirectorySandbox(setup_dir): + ns = dict(__file__=dunder_file, __name__='__main__') + _execfile(setup_script, ns) + except SystemExit as v: + if v.args and v.args[0]: + raise + # Normal exit, just return + + +class AbstractSandbox: + """Wrap 'os' module and 'open()' builtin for virtualizing setup scripts""" + + _active = False + + def __init__(self): + self._attrs = [ + name for name in dir(_os) + if not name.startswith('_') and hasattr(self, name) + ] + + def _copy(self, source): + for name in self._attrs: + setattr(os, name, getattr(source, name)) + + def __enter__(self): + self._copy(self) + if _file: + builtins.file = self._file + builtins.open = self._open + self._active = True + + def __exit__(self, exc_type, exc_value, traceback): + self._active = False + if _file: + builtins.file = _file + builtins.open = _open + self._copy(_os) + + def run(self, func): + """Run 'func' under os sandboxing""" + with self: + return func() + + def _mk_dual_path_wrapper(name): + original = getattr(_os, name) + + def wrap(self, src, dst, *args, **kw): + if self._active: + src, dst = self._remap_pair(name, src, dst, *args, **kw) + return original(src, dst, *args, **kw) + + return wrap + + for name in ["rename", "link", "symlink"]: + if hasattr(_os, name): + locals()[name] = _mk_dual_path_wrapper(name) + + def _mk_single_path_wrapper(name, original=None): + original = original or getattr(_os, name) + + def wrap(self, path, *args, **kw): + if self._active: + path = self._remap_input(name, path, *args, **kw) + return original(path, *args, **kw) + + return wrap + + if _file: + _file = _mk_single_path_wrapper('file', _file) + _open = _mk_single_path_wrapper('open', _open) + for name in [ + "stat", "listdir", "chdir", "open", "chmod", "chown", "mkdir", + "remove", "unlink", "rmdir", "utime", "lchown", "chroot", "lstat", + "startfile", "mkfifo", "mknod", "pathconf", "access" + ]: + if hasattr(_os, name): + locals()[name] = _mk_single_path_wrapper(name) + + def _mk_single_with_return(name): + original = getattr(_os, name) + + def wrap(self, path, *args, **kw): + if self._active: + path = self._remap_input(name, path, *args, **kw) + return self._remap_output(name, original(path, *args, **kw)) + return original(path, *args, **kw) + + return wrap + + for name in ['readlink', 'tempnam']: + if hasattr(_os, name): + locals()[name] = _mk_single_with_return(name) + + def _mk_query(name): + original = getattr(_os, name) + + def wrap(self, *args, **kw): + retval = original(*args, **kw) + if self._active: + return self._remap_output(name, retval) + return retval + + return wrap + + for name in ['getcwd', 'tmpnam']: + if hasattr(_os, name): + locals()[name] = _mk_query(name) + + def _validate_path(self, path): + """Called to remap or validate any path, whether input or output""" + return path + + def _remap_input(self, operation, path, *args, **kw): + """Called for path inputs""" + return self._validate_path(path) + + def _remap_output(self, operation, path): + """Called for path outputs""" + return self._validate_path(path) + + def _remap_pair(self, operation, src, dst, *args, **kw): + """Called for path pairs like rename, link, and symlink operations""" + return ( + self._remap_input(operation + '-from', src, *args, **kw), + self._remap_input(operation + '-to', dst, *args, **kw) + ) + + +if hasattr(os, 'devnull'): + _EXCEPTIONS = [os.devnull,] +else: + _EXCEPTIONS = [] + + +class DirectorySandbox(AbstractSandbox): + """Restrict operations to a single subdirectory - pseudo-chroot""" + + write_ops = dict.fromkeys([ + "open", "chmod", "chown", "mkdir", "remove", "unlink", "rmdir", + "utime", "lchown", "chroot", "mkfifo", "mknod", "tempnam", + ]) + + _exception_patterns = [ + # Allow lib2to3 to attempt to save a pickled grammar object (#121) + r'.*lib2to3.*\.pickle$', + ] + "exempt writing to paths that match the pattern" + + def __init__(self, sandbox, exceptions=_EXCEPTIONS): + self._sandbox = os.path.normcase(os.path.realpath(sandbox)) + self._prefix = os.path.join(self._sandbox, '') + self._exceptions = [ + os.path.normcase(os.path.realpath(path)) + for path in exceptions + ] + AbstractSandbox.__init__(self) + + def _violation(self, operation, *args, **kw): + from setuptools.sandbox import SandboxViolation + raise SandboxViolation(operation, args, kw) + + if _file: + + def _file(self, path, mode='r', *args, **kw): + if mode not in ('r', 'rt', 'rb', 'rU', 'U') and not self._ok(path): + self._violation("file", path, mode, *args, **kw) + return _file(path, mode, *args, **kw) + + def _open(self, path, mode='r', *args, **kw): + if mode not in ('r', 'rt', 'rb', 'rU', 'U') and not self._ok(path): + self._violation("open", path, mode, *args, **kw) + return _open(path, mode, *args, **kw) + + def tmpnam(self): + self._violation("tmpnam") + + def _ok(self, path): + active = self._active + try: + self._active = False + realpath = os.path.normcase(os.path.realpath(path)) + return ( + self._exempted(realpath) + or realpath == self._sandbox + or realpath.startswith(self._prefix) + ) + finally: + self._active = active + + def _exempted(self, filepath): + start_matches = ( + filepath.startswith(exception) + for exception in self._exceptions + ) + pattern_matches = ( + re.match(pattern, filepath) + for pattern in self._exception_patterns + ) + candidates = itertools.chain(start_matches, pattern_matches) + return any(candidates) + + def _remap_input(self, operation, path, *args, **kw): + """Called for path inputs""" + if operation in self.write_ops and not self._ok(path): + self._violation(operation, os.path.realpath(path), *args, **kw) + return path + + def _remap_pair(self, operation, src, dst, *args, **kw): + """Called for path pairs like rename, link, and symlink operations""" + if not self._ok(src) or not self._ok(dst): + self._violation(operation, src, dst, *args, **kw) + return (src, dst) + + def open(self, file, flags, mode=0o777, *args, **kw): + """Called for low-level os.open()""" + if flags & WRITE_FLAGS and not self._ok(file): + self._violation("os.open", file, flags, mode, *args, **kw) + return _os.open(file, flags, mode, *args, **kw) + + +WRITE_FLAGS = functools.reduce( + operator.or_, [getattr(_os, a, 0) for a in + "O_WRONLY O_RDWR O_APPEND O_CREAT O_TRUNC O_TEMPORARY".split()] +) + + +class SandboxViolation(DistutilsError): + """A setup script attempted to modify the filesystem outside the sandbox""" + + tmpl = textwrap.dedent(""" + SandboxViolation: {cmd}{args!r} {kwargs} + + The package setup script has attempted to modify files on your system + that are not within the EasyInstall build area, and has been aborted. + + This package cannot be safely installed by EasyInstall, and may not + support alternate installation locations even if you run its setup + script by hand. Please inform the package's author and the EasyInstall + maintainers to find out if a fix or workaround is available. + """).lstrip() + + def __str__(self): + cmd, args, kwargs = self.args + return self.tmpl.format(**locals()) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/script (dev).tmpl b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/script (dev).tmpl new file mode 100644 index 00000000..39a24b04 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/script (dev).tmpl @@ -0,0 +1,6 @@ +# EASY-INSTALL-DEV-SCRIPT: %(spec)r,%(script_name)r +__requires__ = %(spec)r +__import__('pkg_resources').require(%(spec)r) +__file__ = %(dev_path)r +with open(__file__) as f: + exec(compile(f.read(), __file__, 'exec')) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/script.tmpl b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/script.tmpl new file mode 100644 index 00000000..ff5efbca --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/script.tmpl @@ -0,0 +1,3 @@ +# EASY-INSTALL-SCRIPT: %(spec)r,%(script_name)r +__requires__ = %(spec)r +__import__('pkg_resources').run_script(%(spec)r, %(script_name)r) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/site-patch.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/site-patch.py new file mode 100644 index 00000000..40b00de0 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/site-patch.py @@ -0,0 +1,74 @@ +def __boot(): + import sys + import os + PYTHONPATH = os.environ.get('PYTHONPATH') + if PYTHONPATH is None or (sys.platform == 'win32' and not PYTHONPATH): + PYTHONPATH = [] + else: + PYTHONPATH = PYTHONPATH.split(os.pathsep) + + pic = getattr(sys, 'path_importer_cache', {}) + stdpath = sys.path[len(PYTHONPATH):] + mydir = os.path.dirname(__file__) + + for item in stdpath: + if item == mydir or not item: + continue # skip if current dir. on Windows, or my own directory + importer = pic.get(item) + if importer is not None: + loader = importer.find_module('site') + if loader is not None: + # This should actually reload the current module + loader.load_module('site') + break + else: + try: + import imp # Avoid import loop in Python 3 + stream, path, descr = imp.find_module('site', [item]) + except ImportError: + continue + if stream is None: + continue + try: + # This should actually reload the current module + imp.load_module('site', stream, path, descr) + finally: + stream.close() + break + else: + raise ImportError("Couldn't find the real 'site' module") + + known_paths = dict([(makepath(item)[1], 1) for item in sys.path]) # 2.2 comp + + oldpos = getattr(sys, '__egginsert', 0) # save old insertion position + sys.__egginsert = 0 # and reset the current one + + for item in PYTHONPATH: + addsitedir(item) + + sys.__egginsert += oldpos # restore effective old position + + d, nd = makepath(stdpath[0]) + insert_at = None + new_path = [] + + for item in sys.path: + p, np = makepath(item) + + if np == nd and insert_at is None: + # We've hit the first 'system' path entry, so added entries go here + insert_at = len(new_path) + + if np in known_paths or insert_at is None: + new_path.append(item) + else: + # new path after the insert point, back-insert it + new_path.insert(insert_at, item) + insert_at += 1 + + sys.path[:] = new_path + + +if __name__ == 'site': + __boot() + del __boot diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/ssl_support.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/ssl_support.py new file mode 100644 index 00000000..226db694 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/ssl_support.py @@ -0,0 +1,260 @@ +import os +import socket +import atexit +import re +import functools + +from setuptools.extern.six.moves import urllib, http_client, map, filter + +from pkg_resources import ResolutionError, ExtractionError + +try: + import ssl +except ImportError: + ssl = None + +__all__ = [ + 'VerifyingHTTPSHandler', 'find_ca_bundle', 'is_available', 'cert_paths', + 'opener_for' +] + +cert_paths = """ +/etc/pki/tls/certs/ca-bundle.crt +/etc/ssl/certs/ca-certificates.crt +/usr/share/ssl/certs/ca-bundle.crt +/usr/local/share/certs/ca-root.crt +/etc/ssl/cert.pem +/System/Library/OpenSSL/certs/cert.pem +/usr/local/share/certs/ca-root-nss.crt +/etc/ssl/ca-bundle.pem +""".strip().split() + +try: + HTTPSHandler = urllib.request.HTTPSHandler + HTTPSConnection = http_client.HTTPSConnection +except AttributeError: + HTTPSHandler = HTTPSConnection = object + +is_available = ssl is not None and object not in (HTTPSHandler, HTTPSConnection) + + +try: + from ssl import CertificateError, match_hostname +except ImportError: + try: + from backports.ssl_match_hostname import CertificateError + from backports.ssl_match_hostname import match_hostname + except ImportError: + CertificateError = None + match_hostname = None + +if not CertificateError: + + class CertificateError(ValueError): + pass + + +if not match_hostname: + + def _dnsname_match(dn, hostname, max_wildcards=1): + """Matching according to RFC 6125, section 6.4.3 + + https://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 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") + 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") + + +class VerifyingHTTPSHandler(HTTPSHandler): + """Simple verifying handler: no auth, subclasses, timeouts, etc.""" + + def __init__(self, ca_bundle): + self.ca_bundle = ca_bundle + HTTPSHandler.__init__(self) + + def https_open(self, req): + return self.do_open( + lambda host, **kw: VerifyingHTTPSConn(host, self.ca_bundle, **kw), req + ) + + +class VerifyingHTTPSConn(HTTPSConnection): + """Simple verifying connection: no auth, subclasses, timeouts, etc.""" + + def __init__(self, host, ca_bundle, **kw): + HTTPSConnection.__init__(self, host, **kw) + self.ca_bundle = ca_bundle + + def connect(self): + sock = socket.create_connection( + (self.host, self.port), getattr(self, 'source_address', None) + ) + + # Handle the socket if a (proxy) tunnel is present + if hasattr(self, '_tunnel') and getattr(self, '_tunnel_host', None): + self.sock = sock + self._tunnel() + # http://bugs.python.org/issue7776: Python>=3.4.1 and >=2.7.7 + # change self.host to mean the proxy server host when tunneling is + # being used. Adapt, since we are interested in the destination + # host for the match_hostname() comparison. + actual_host = self._tunnel_host + else: + actual_host = self.host + + if hasattr(ssl, 'create_default_context'): + ctx = ssl.create_default_context(cafile=self.ca_bundle) + self.sock = ctx.wrap_socket(sock, server_hostname=actual_host) + else: + # This is for python < 2.7.9 and < 3.4? + self.sock = ssl.wrap_socket( + sock, cert_reqs=ssl.CERT_REQUIRED, ca_certs=self.ca_bundle + ) + try: + match_hostname(self.sock.getpeercert(), actual_host) + except CertificateError: + self.sock.shutdown(socket.SHUT_RDWR) + self.sock.close() + raise + + +def opener_for(ca_bundle=None): + """Get a urlopen() replacement that uses ca_bundle for verification""" + return urllib.request.build_opener( + VerifyingHTTPSHandler(ca_bundle or find_ca_bundle()) + ).open + + +# from jaraco.functools +def once(func): + @functools.wraps(func) + def wrapper(*args, **kwargs): + if not hasattr(func, 'always_returns'): + func.always_returns = func(*args, **kwargs) + return func.always_returns + return wrapper + + +@once +def get_win_certfile(): + try: + import wincertstore + except ImportError: + return None + + class CertFile(wincertstore.CertFile): + def __init__(self): + super(CertFile, self).__init__() + atexit.register(self.close) + + def close(self): + try: + super(CertFile, self).close() + except OSError: + pass + + _wincerts = CertFile() + _wincerts.addstore('CA') + _wincerts.addstore('ROOT') + return _wincerts.name + + +def find_ca_bundle(): + """Return an existing CA bundle path, or None""" + extant_cert_paths = filter(os.path.isfile, cert_paths) + return ( + get_win_certfile() + or next(extant_cert_paths, None) + or _certifi_where() + ) + + +def _certifi_where(): + try: + return __import__('certifi').where() + except (ImportError, ResolutionError, ExtractionError): + pass diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/unicode_utils.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/unicode_utils.py new file mode 100644 index 00000000..7c63efd2 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/unicode_utils.py @@ -0,0 +1,44 @@ +import unicodedata +import sys + +from setuptools.extern import six + + +# HFS Plus uses decomposed UTF-8 +def decompose(path): + if isinstance(path, six.text_type): + return unicodedata.normalize('NFD', path) + try: + path = path.decode('utf-8') + path = unicodedata.normalize('NFD', path) + path = path.encode('utf-8') + except UnicodeError: + pass # Not UTF-8 + return path + + +def filesys_decode(path): + """ + Ensure that the given path is decoded, + NONE when no expected encoding works + """ + + if isinstance(path, six.text_type): + return path + + fs_enc = sys.getfilesystemencoding() or 'utf-8' + candidates = fs_enc, 'utf-8' + + for enc in candidates: + try: + return path.decode(enc) + except UnicodeDecodeError: + continue + + +def try_encode(string, enc): + "turn unicode encoding into a functional routine" + try: + return string.encode(enc) + except UnicodeEncodeError: + return None diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/version.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/version.py new file mode 100644 index 00000000..95e18696 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/version.py @@ -0,0 +1,6 @@ +import pkg_resources + +try: + __version__ = pkg_resources.get_distribution('setuptools').version +except Exception: + __version__ = 'unknown' diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/wheel.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/wheel.py new file mode 100644 index 00000000..e11f0a1d --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/wheel.py @@ -0,0 +1,211 @@ +"""Wheels support.""" + +from distutils.util import get_platform +import email +import itertools +import os +import posixpath +import re +import zipfile + +import pkg_resources +import setuptools +from pkg_resources import parse_version +from setuptools.extern.packaging.utils import canonicalize_name +from setuptools.extern.six import PY3 +from setuptools import pep425tags +from setuptools.command.egg_info import write_requirements + + +__metaclass__ = type + + +WHEEL_NAME = re.compile( + r"""^(?P.+?)-(?P\d.*?) + ((-(?P\d.*?))?-(?P.+?)-(?P.+?)-(?P.+?) + )\.whl$""", + re.VERBOSE).match + +NAMESPACE_PACKAGE_INIT = '''\ +try: + __import__('pkg_resources').declare_namespace(__name__) +except ImportError: + __path__ = __import__('pkgutil').extend_path(__path__, __name__) +''' + + +def unpack(src_dir, dst_dir): + '''Move everything under `src_dir` to `dst_dir`, and delete the former.''' + for dirpath, dirnames, filenames in os.walk(src_dir): + subdir = os.path.relpath(dirpath, src_dir) + for f in filenames: + src = os.path.join(dirpath, f) + dst = os.path.join(dst_dir, subdir, f) + os.renames(src, dst) + for n, d in reversed(list(enumerate(dirnames))): + src = os.path.join(dirpath, d) + dst = os.path.join(dst_dir, subdir, d) + if not os.path.exists(dst): + # Directory does not exist in destination, + # rename it and prune it from os.walk list. + os.renames(src, dst) + del dirnames[n] + # Cleanup. + for dirpath, dirnames, filenames in os.walk(src_dir, topdown=True): + assert not filenames + os.rmdir(dirpath) + + +class Wheel: + + def __init__(self, filename): + match = WHEEL_NAME(os.path.basename(filename)) + if match is None: + raise ValueError('invalid wheel name: %r' % filename) + self.filename = filename + for k, v in match.groupdict().items(): + setattr(self, k, v) + + def tags(self): + '''List tags (py_version, abi, platform) supported by this wheel.''' + return itertools.product( + self.py_version.split('.'), + self.abi.split('.'), + self.platform.split('.'), + ) + + def is_compatible(self): + '''Is the wheel is compatible with the current platform?''' + supported_tags = pep425tags.get_supported() + return next((True for t in self.tags() if t in supported_tags), False) + + def egg_name(self): + return pkg_resources.Distribution( + project_name=self.project_name, version=self.version, + platform=(None if self.platform == 'any' else get_platform()), + ).egg_name() + '.egg' + + def get_dist_info(self, zf): + # find the correct name of the .dist-info dir in the wheel file + for member in zf.namelist(): + dirname = posixpath.dirname(member) + if (dirname.endswith('.dist-info') and + canonicalize_name(dirname).startswith( + canonicalize_name(self.project_name))): + return dirname + raise ValueError("unsupported wheel format. .dist-info not found") + + def install_as_egg(self, destination_eggdir): + '''Install wheel as an egg directory.''' + with zipfile.ZipFile(self.filename) as zf: + self._install_as_egg(destination_eggdir, zf) + + def _install_as_egg(self, destination_eggdir, zf): + dist_basename = '%s-%s' % (self.project_name, self.version) + dist_info = self.get_dist_info(zf) + dist_data = '%s.data' % dist_basename + egg_info = os.path.join(destination_eggdir, 'EGG-INFO') + + self._convert_metadata(zf, destination_eggdir, dist_info, egg_info) + self._move_data_entries(destination_eggdir, dist_data) + self._fix_namespace_packages(egg_info, destination_eggdir) + + @staticmethod + def _convert_metadata(zf, destination_eggdir, dist_info, egg_info): + def get_metadata(name): + with zf.open(posixpath.join(dist_info, name)) as fp: + value = fp.read().decode('utf-8') if PY3 else fp.read() + return email.parser.Parser().parsestr(value) + + wheel_metadata = get_metadata('WHEEL') + # Check wheel format version is supported. + wheel_version = parse_version(wheel_metadata.get('Wheel-Version')) + wheel_v1 = ( + parse_version('1.0') <= wheel_version < parse_version('2.0dev0') + ) + if not wheel_v1: + raise ValueError( + 'unsupported wheel format version: %s' % wheel_version) + # Extract to target directory. + os.mkdir(destination_eggdir) + zf.extractall(destination_eggdir) + # Convert metadata. + dist_info = os.path.join(destination_eggdir, dist_info) + dist = pkg_resources.Distribution.from_location( + destination_eggdir, dist_info, + metadata=pkg_resources.PathMetadata(destination_eggdir, dist_info), + ) + + # Note: Evaluate and strip markers now, + # as it's difficult to convert back from the syntax: + # foobar; "linux" in sys_platform and extra == 'test' + def raw_req(req): + req.marker = None + return str(req) + install_requires = list(sorted(map(raw_req, dist.requires()))) + extras_require = { + extra: sorted( + req + for req in map(raw_req, dist.requires((extra,))) + if req not in install_requires + ) + for extra in dist.extras + } + os.rename(dist_info, egg_info) + os.rename( + os.path.join(egg_info, 'METADATA'), + os.path.join(egg_info, 'PKG-INFO'), + ) + setup_dist = setuptools.Distribution( + attrs=dict( + install_requires=install_requires, + extras_require=extras_require, + ), + ) + write_requirements( + setup_dist.get_command_obj('egg_info'), + None, + os.path.join(egg_info, 'requires.txt'), + ) + + @staticmethod + def _move_data_entries(destination_eggdir, dist_data): + """Move data entries to their correct location.""" + dist_data = os.path.join(destination_eggdir, dist_data) + dist_data_scripts = os.path.join(dist_data, 'scripts') + if os.path.exists(dist_data_scripts): + egg_info_scripts = os.path.join( + destination_eggdir, 'EGG-INFO', 'scripts') + os.mkdir(egg_info_scripts) + for entry in os.listdir(dist_data_scripts): + # Remove bytecode, as it's not properly handled + # during easy_install scripts install phase. + if entry.endswith('.pyc'): + os.unlink(os.path.join(dist_data_scripts, entry)) + else: + os.rename( + os.path.join(dist_data_scripts, entry), + os.path.join(egg_info_scripts, entry), + ) + os.rmdir(dist_data_scripts) + for subdir in filter(os.path.exists, ( + os.path.join(dist_data, d) + for d in ('data', 'headers', 'purelib', 'platlib') + )): + unpack(subdir, destination_eggdir) + if os.path.exists(dist_data): + os.rmdir(dist_data) + + @staticmethod + def _fix_namespace_packages(egg_info, destination_eggdir): + namespace_packages = os.path.join( + egg_info, 'namespace_packages.txt') + if os.path.exists(namespace_packages): + with open(namespace_packages) as fp: + namespace_packages = fp.read().split() + for mod in namespace_packages: + mod_dir = os.path.join(destination_eggdir, *mod.split('.')) + mod_init = os.path.join(mod_dir, '__init__.py') + if os.path.exists(mod_dir) and not os.path.exists(mod_init): + with open(mod_init, 'w') as fp: + fp.write(NAMESPACE_PACKAGE_INIT) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/windows_support.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/windows_support.py new file mode 100644 index 00000000..cb977cff --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/setuptools/windows_support.py @@ -0,0 +1,29 @@ +import platform +import ctypes + + +def windows_only(func): + if platform.system() != 'Windows': + return lambda *args, **kwargs: None + return func + + +@windows_only +def hide_file(path): + """ + Set the hidden attribute on a file or directory. + + From http://stackoverflow.com/questions/19622133/ + + `path` must be text. + """ + __import__('ctypes.wintypes') + SetFileAttributes = ctypes.windll.kernel32.SetFileAttributesW + SetFileAttributes.argtypes = ctypes.wintypes.LPWSTR, ctypes.wintypes.DWORD + SetFileAttributes.restype = ctypes.wintypes.BOOL + + FILE_ATTRIBUTE_HIDDEN = 0x02 + + ret = SetFileAttributes(path, FILE_ATTRIBUTE_HIDDEN) + if not ret: + raise ctypes.WinError() diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel-0.33.4.dist-info/INSTALLER b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel-0.33.4.dist-info/INSTALLER new file mode 100644 index 00000000..a1b589e3 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel-0.33.4.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel-0.33.4.dist-info/LICENSE.txt b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel-0.33.4.dist-info/LICENSE.txt new file mode 100644 index 00000000..c3441e6c --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel-0.33.4.dist-info/LICENSE.txt @@ -0,0 +1,22 @@ +"wheel" copyright (c) 2012-2014 Daniel Holth and +contributors. + +The MIT License + +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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel-0.33.4.dist-info/METADATA b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel-0.33.4.dist-info/METADATA new file mode 100644 index 00000000..3685e113 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel-0.33.4.dist-info/METADATA @@ -0,0 +1,60 @@ +Metadata-Version: 2.1 +Name: wheel +Version: 0.33.4 +Summary: A built-package format for Python. +Home-page: https://github.com/pypa/wheel +Author: Daniel Holth +Author-email: dholth@fastmail.fm +Maintainer: Alex Grönholm +Maintainer-email: alex.gronholm@nextday.fi +License: MIT +Project-URL: Documentation, https://wheel.readthedocs.io/ +Project-URL: Changelog, https://wheel.readthedocs.io/en/stable/news.html +Project-URL: Issue Tracker, https://github.com/pypa/wheel/issues +Keywords: wheel,packaging +Platform: UNKNOWN +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: Topic :: System :: Archiving :: Packaging +Classifier: License :: OSI Approved :: MIT License +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 2 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.4 +Classifier: Programming Language :: Python :: 3.5 +Classifier: Programming Language :: Python :: 3.6 +Classifier: Programming Language :: Python :: 3.7 +Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.* +Provides-Extra: test +Requires-Dist: pytest (>=3.0.0) ; extra == 'test' +Requires-Dist: pytest-cov ; extra == 'test' + +wheel +===== + +This library is the reference implementation of the Python wheel packaging +standard, as defined in `PEP 427`_. + +It has two different roles: + +#. A setuptools_ extension for building wheels that provides the + ``bdist_wheel`` setuptools command +#. A command line tool for working with wheel files + +It should be noted that wheel is **not** intended to be used as a library, and +as such there is no stable, public API. + +.. _PEP 427: https://www.python.org/dev/peps/pep-0427/ +.. _setuptools: https://pypi.org/project/setuptools/ + + +Code of Conduct +--------------- + +Everyone interacting in the wheel project's codebases, issue trackers, chat +rooms, and mailing lists is expected to follow the `PyPA Code of Conduct`_. + +.. _PyPA Code of Conduct: https://www.pypa.io/en/latest/code-of-conduct/ + + diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel-0.33.4.dist-info/RECORD b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel-0.33.4.dist-info/RECORD new file mode 100644 index 00000000..c53aa845 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel-0.33.4.dist-info/RECORD @@ -0,0 +1,32 @@ +wheel/__init__.py,sha256=gdfDa6ufU3P8afREFDBD26jo-ncuKtumgvlnZIGSmKc,96 +wheel/__main__.py,sha256=lF-YLO4hdQmoWuh4eWZd8YL1U95RSdm76sNLBXa0vjE,417 +wheel/bdist_wheel.py,sha256=U3ljAOGgc8UGMKqxOf5YEKE1W-nt99X6RemMi-poBB8,14757 +wheel/metadata.py,sha256=uBv2aOz4U2sERF834C8DeNo235drcsp3ypTzT7MTWEA,4699 +wheel/pep425tags.py,sha256=Jdjbnq17kqwPRKJCMb2E1VccNgnC3H6iQL7VGaxkPao,5908 +wheel/pkginfo.py,sha256=GR76kupQzn1x9sKDaXuE6B6FsZ4OkfRtG7pndlXPvQ4,1257 +wheel/util.py,sha256=zwVIk-9qWVQLRMgkgQTMp4TRE4HY03-tCUxLrtCpsfU,924 +wheel/wheelfile.py,sha256=Mtt6mUaea-wABqtN5SW3Rn6bVvw-bdcSKaR2SjWZLG4,7222 +wheel/cli/__init__.py,sha256=GWSoGUpRabTf8bk3FsNTPrc5Fsr8YOv2dX55iY2W7eY,2572 +wheel/cli/convert.py,sha256=me0l6G4gSw-EBVhzjSr7yWYWBp9spMz7mnXlyJTiXso,9497 +wheel/cli/pack.py,sha256=vkvZc4-rRZyWiwc6sHjpqIjzwDRMEF5u3JUNU9NY_jA,2263 +wheel/cli/unpack.py,sha256=0VWzT7U_xyenTPwEVavxqvdee93GPvAFHnR3Uu91aRc,673 +wheel-0.33.4.dist-info/LICENSE.txt,sha256=zKniDGrx_Pv2lAjzd3aShsvuvN7TNhAMm0o_NfvmNeQ,1125 +wheel-0.33.4.dist-info/METADATA,sha256=wyJg2oitG9m-Uh5ia99JynhzPDzo2cJmrCSsqYpRMtc,2082 +wheel-0.33.4.dist-info/WHEEL,sha256=h_aVn5OB2IERUjMbi2pucmR_zzWJtk303YXvhh60NJ8,110 +wheel-0.33.4.dist-info/entry_points.txt,sha256=N8HbYFST3yrNQYeB2wXWBEPUhFsEtKNRPaCFGJPyqyc,108 +wheel-0.33.4.dist-info/top_level.txt,sha256=HxSBIbgEstMPe4eFawhA66Mq-QYHMopXVoAncfjb_1c,6 +wheel-0.33.4.dist-info/RECORD,, +../../../bin/wheel,sha256=OnbTYm3tVeHlrdascffnV0CjiY3T7kRQcGaakOtKBpY,279 +wheel-0.33.4.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +wheel/__pycache__/__main__.cpython-36.pyc,, +wheel/__pycache__/util.cpython-36.pyc,, +wheel/__pycache__/metadata.cpython-36.pyc,, +wheel/__pycache__/bdist_wheel.cpython-36.pyc,, +wheel/__pycache__/pep425tags.cpython-36.pyc,, +wheel/__pycache__/pkginfo.cpython-36.pyc,, +wheel/__pycache__/wheelfile.cpython-36.pyc,, +wheel/__pycache__/__init__.cpython-36.pyc,, +wheel/cli/__pycache__/unpack.cpython-36.pyc,, +wheel/cli/__pycache__/convert.cpython-36.pyc,, +wheel/cli/__pycache__/pack.cpython-36.pyc,, +wheel/cli/__pycache__/__init__.cpython-36.pyc,, diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel-0.33.4.dist-info/WHEEL b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel-0.33.4.dist-info/WHEEL new file mode 100644 index 00000000..78e6f69d --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel-0.33.4.dist-info/WHEEL @@ -0,0 +1,6 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.33.4) +Root-Is-Purelib: true +Tag: py2-none-any +Tag: py3-none-any + diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel-0.33.4.dist-info/entry_points.txt b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel-0.33.4.dist-info/entry_points.txt new file mode 100644 index 00000000..b27acadd --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel-0.33.4.dist-info/entry_points.txt @@ -0,0 +1,6 @@ +[console_scripts] +wheel = wheel.cli:main + +[distutils.commands] +bdist_wheel = wheel.bdist_wheel:bdist_wheel + diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel-0.33.4.dist-info/top_level.txt b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel-0.33.4.dist-info/top_level.txt new file mode 100644 index 00000000..2309722a --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel-0.33.4.dist-info/top_level.txt @@ -0,0 +1 @@ +wheel diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/__init__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/__init__.py new file mode 100644 index 00000000..0f8ca70c --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/__init__.py @@ -0,0 +1,2 @@ +# __variables__ with double-quoted values will be available in setup.py: +__version__ = "0.33.4" diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/__main__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/__main__.py new file mode 100644 index 00000000..b3773a20 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/__main__.py @@ -0,0 +1,19 @@ +""" +Wheel command line tool (enable python -m wheel syntax) +""" + +import sys + + +def main(): # needed for console script + if __package__ == '': + # To be able to run 'python wheel-0.9.whl/wheel': + import os.path + path = os.path.dirname(os.path.dirname(__file__)) + sys.path[0:0] = [path] + import wheel.cli + sys.exit(wheel.cli.main()) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..352b923a33d2ca41bd5425a9b9fd284ea4021643 GIT binary patch literal 152 zcmXr!<>iW5rx%;Rz`*brh~a<{$Z`PUVh$jY!Vtxf!Whh;$yCK=pl58XXX2;Hc#Ate zzAUw3%2a^e>_F-|Mgk=~PM=8fmsuaAzhi@W*dPXzc4kAl(pJ;A*sQm_PtiWyv@;wt$L zOQyL>ui0>{u}L)B!yXY7JBQ-n+uQ8ZT5FS6wr$H!<)-d*?yWWXvF^&1(Rsh|Yun|s zHvc**-KO*9ZIS(2D;RC^aB=Tf~mcCI;fx#VYp*jsw*C82sqUxb5 zTOEXypKB8p+-=-)I{KeirVfd|t$pC*u`TPa;DK2;q;z>mN7*kJo>KOAvG8rb=<9yA zx~YwtoqSoZ?8z&&7*!7}WxPbndA}JBX-W{>6Cyyt1irxMC~)jVPxsm)4HGGqt)v{H k{(n1Kr`j~uqJ>BFjM5-ZTdQu2eiwh-#nFTbE;51t0GW`6jQ{`u literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/__pycache__/bdist_wheel.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/__pycache__/bdist_wheel.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..824daedfb29697bb18d11521434b79165a56f91f GIT binary patch literal 10347 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 JhHe_B@qgU51aklY literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/__pycache__/metadata.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/__pycache__/metadata.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..299e922dd7be44889ce58b9a2f8f8c9412147895 GIT binary patch literal 3728 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 To8j}OZQHYGQ%=cVvYr0{ro(qi literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/__pycache__/pkginfo.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/__pycache__/pkginfo.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f81c3de60e2344a1e5ca8a9a2a4312182210e26c GIT binary patch literal 1523 zcmb_cO^+Kz5bf@n@r-9}FG-XTB7sH-MY6lqs%6&I>UWoSpQv$C>h`{zF#Y^qCHx$M7L%^i%%Sf6Pkph-u$^hyM!l zP7zK+-07(BCpL{#q`J6vRjhV!jm!5is)tcK(;bZJZ=(j=sNFV7z40v@Uion{sjA#0 z#}y=?rOL`hB1@I5A+uy3eeq!L^YP(V$$s+X{mH>+2a|(jo!MozvdLTmhQxA4FLtRD zUCt{yVe}GfWJBI`jwBcjhZD5B4|J(P+6v~Jw(+4=;P@1W>EUGA8GFVz?2IEeJ{}67 z?Ix<}7-IpC31=sk%wHLFaPN=NzAftgI;;0)t1MT0cfMcFsyiR3{q<7od^^|A7g>2+ zjp~!;8daI1BPCDjPTQsYl!jq8(mhN9^e zvRvdkJ%*}C>FtLWYOc$n2QdZ#C2YduTw3d#lpF@+j0$a~l2%?WXF!6|7kz&dgAHC0 zR}Wmr6{#J3Le&0UCX|k1U48GMv0=~L^-9JeVVASOXWC~yp8@XCj(^VpGEUN2DNl-N$~$e zI>8u7aX=k{n>gVmc#G^?WN!%|=7GK_=y1*dSD+-6cX1dZj`0o`JVpWipV|@Y*|~V& z3MK&(>p9XJ|#c_HAhm5Y&B_K`oQBkQ?u0N(O8`7IEdO~oY UM|{9z;q#t|yeNo$T!Se56ITX1djJ3c literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/__pycache__/util.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/__pycache__/util.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7aef90ec5e47713b485eb922f63868f64543ee5f GIT binary patch literal 1268 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 E1H*A(&j0`b literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/bdist_wheel.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/bdist_wheel.py new file mode 100644 index 00000000..c79307b5 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/bdist_wheel.py @@ -0,0 +1,372 @@ +""" +Create a wheel (.whl) distribution. + +A wheel is a built archive format. +""" + +import os +import shutil +import sys +import re +from email.generator import Generator +from distutils.core import Command +from distutils.sysconfig import get_python_version +from distutils import log as logger +from glob import iglob +from shutil import rmtree +from warnings import warn + +import pkg_resources + +from .pep425tags import get_abbr_impl, get_impl_ver, get_abi_tag, get_platform +from .pkginfo import write_pkg_info +from .metadata import pkginfo_to_metadata +from .wheelfile import WheelFile +from . import pep425tags +from . import __version__ as wheel_version + + +safe_name = pkg_resources.safe_name +safe_version = pkg_resources.safe_version + +PY_LIMITED_API_PATTERN = r'cp3\d' + + +def safer_name(name): + return safe_name(name).replace('-', '_') + + +def safer_version(version): + return safe_version(version).replace('-', '_') + + +class bdist_wheel(Command): + + description = 'create a wheel distribution' + + user_options = [('bdist-dir=', 'b', + "temporary directory for creating the distribution"), + ('plat-name=', 'p', + "platform name to embed in generated filenames " + "(default: %s)" % get_platform()), + ('keep-temp', 'k', + "keep the pseudo-installation tree around after " + + "creating the distribution archive"), + ('dist-dir=', 'd', + "directory to put final built distributions in"), + ('skip-build', None, + "skip rebuilding everything (for testing/debugging)"), + ('relative', None, + "build the archive using relative paths " + "(default: false)"), + ('owner=', 'u', + "Owner name used when creating a tar file" + " [default: current user]"), + ('group=', 'g', + "Group name used when creating a tar file" + " [default: current group]"), + ('universal', None, + "make a universal wheel" + " (default: false)"), + ('python-tag=', None, + "Python implementation compatibility tag" + " (default: py%s)" % get_impl_ver()[0]), + ('build-number=', None, + "Build number for this particular version. " + "As specified in PEP-0427, this must start with a digit. " + "[default: None]"), + ('py-limited-api=', None, + "Python tag (cp32|cp33|cpNN) for abi3 wheel tag" + " (default: false)"), + ] + + boolean_options = ['keep-temp', 'skip-build', 'relative', 'universal'] + + def initialize_options(self): + self.bdist_dir = None + self.data_dir = None + self.plat_name = None + self.plat_tag = None + self.format = 'zip' + self.keep_temp = False + self.dist_dir = None + self.egginfo_dir = None + self.root_is_pure = None + self.skip_build = None + self.relative = False + self.owner = None + self.group = None + self.universal = False + self.python_tag = 'py' + get_impl_ver()[0] + self.build_number = None + self.py_limited_api = False + self.plat_name_supplied = False + + def finalize_options(self): + if self.bdist_dir is None: + bdist_base = self.get_finalized_command('bdist').bdist_base + self.bdist_dir = os.path.join(bdist_base, 'wheel') + + self.data_dir = self.wheel_dist_name + '.data' + self.plat_name_supplied = self.plat_name is not None + + need_options = ('dist_dir', 'plat_name', 'skip_build') + + self.set_undefined_options('bdist', + *zip(need_options, need_options)) + + self.root_is_pure = not (self.distribution.has_ext_modules() + or self.distribution.has_c_libraries()) + + if self.py_limited_api and not re.match(PY_LIMITED_API_PATTERN, self.py_limited_api): + raise ValueError("py-limited-api must match '%s'" % PY_LIMITED_API_PATTERN) + + # Support legacy [wheel] section for setting universal + wheel = self.distribution.get_option_dict('wheel') + if 'universal' in wheel: + # please don't define this in your global configs + logger.warn('The [wheel] section is deprecated. Use [bdist_wheel] instead.') + val = wheel['universal'][1].strip() + if val.lower() in ('1', 'true', 'yes'): + self.universal = True + + if self.build_number is not None and not self.build_number[:1].isdigit(): + raise ValueError("Build tag (build-number) must start with a digit.") + + @property + def wheel_dist_name(self): + """Return distribution full name with - replaced with _""" + components = (safer_name(self.distribution.get_name()), + safer_version(self.distribution.get_version())) + if self.build_number: + components += (self.build_number,) + return '-'.join(components) + + def get_tag(self): + # bdist sets self.plat_name if unset, we should only use it for purepy + # wheels if the user supplied it. + if self.plat_name_supplied: + plat_name = self.plat_name + elif self.root_is_pure: + plat_name = 'any' + else: + plat_name = self.plat_name or get_platform() + if plat_name in ('linux-x86_64', 'linux_x86_64') and sys.maxsize == 2147483647: + plat_name = 'linux_i686' + plat_name = plat_name.replace('-', '_').replace('.', '_') + + if self.root_is_pure: + if self.universal: + impl = 'py2.py3' + else: + impl = self.python_tag + tag = (impl, 'none', plat_name) + else: + impl_name = get_abbr_impl() + impl_ver = get_impl_ver() + impl = impl_name + impl_ver + # We don't work on CPython 3.1, 3.0. + if self.py_limited_api and (impl_name + impl_ver).startswith('cp3'): + impl = self.py_limited_api + abi_tag = 'abi3' + else: + abi_tag = str(get_abi_tag()).lower() + tag = (impl, abi_tag, plat_name) + supported_tags = pep425tags.get_supported( + supplied_platform=plat_name if self.plat_name_supplied else None) + # XXX switch to this alternate implementation for non-pure: + if not self.py_limited_api: + assert tag == supported_tags[0], "%s != %s" % (tag, supported_tags[0]) + assert tag in supported_tags, "would build wheel with unsupported tag {}".format(tag) + return tag + + def run(self): + build_scripts = self.reinitialize_command('build_scripts') + build_scripts.executable = 'python' + build_scripts.force = True + + build_ext = self.reinitialize_command('build_ext') + build_ext.inplace = False + + if not self.skip_build: + self.run_command('build') + + install = self.reinitialize_command('install', + reinit_subcommands=True) + install.root = self.bdist_dir + install.compile = False + install.skip_build = self.skip_build + install.warn_dir = False + + # A wheel without setuptools scripts is more cross-platform. + # Use the (undocumented) `no_ep` option to setuptools' + # install_scripts command to avoid creating entry point scripts. + install_scripts = self.reinitialize_command('install_scripts') + install_scripts.no_ep = True + + # Use a custom scheme for the archive, because we have to decide + # at installation time which scheme to use. + for key in ('headers', 'scripts', 'data', 'purelib', 'platlib'): + setattr(install, + 'install_' + key, + os.path.join(self.data_dir, key)) + + basedir_observed = '' + + if os.name == 'nt': + # win32 barfs if any of these are ''; could be '.'? + # (distutils.command.install:change_roots bug) + basedir_observed = os.path.normpath(os.path.join(self.data_dir, '..')) + self.install_libbase = self.install_lib = basedir_observed + + setattr(install, + 'install_purelib' if self.root_is_pure else 'install_platlib', + basedir_observed) + + logger.info("installing to %s", self.bdist_dir) + + self.run_command('install') + + impl_tag, abi_tag, plat_tag = self.get_tag() + archive_basename = "{}-{}-{}-{}".format(self.wheel_dist_name, impl_tag, abi_tag, plat_tag) + if not self.relative: + archive_root = self.bdist_dir + else: + archive_root = os.path.join( + self.bdist_dir, + self._ensure_relative(install.install_base)) + + self.set_undefined_options('install_egg_info', ('target', 'egginfo_dir')) + distinfo_dirname = '{}-{}.dist-info'.format( + safer_name(self.distribution.get_name()), + safer_version(self.distribution.get_version())) + distinfo_dir = os.path.join(self.bdist_dir, distinfo_dirname) + self.egg2dist(self.egginfo_dir, distinfo_dir) + + self.write_wheelfile(distinfo_dir) + + # Make the archive + if not os.path.exists(self.dist_dir): + os.makedirs(self.dist_dir) + + wheel_path = os.path.join(self.dist_dir, archive_basename + '.whl') + with WheelFile(wheel_path, 'w') as wf: + wf.write_files(archive_root) + + # Add to 'Distribution.dist_files' so that the "upload" command works + getattr(self.distribution, 'dist_files', []).append( + ('bdist_wheel', get_python_version(), wheel_path)) + + if not self.keep_temp: + logger.info('removing %s', self.bdist_dir) + if not self.dry_run: + rmtree(self.bdist_dir) + + def write_wheelfile(self, wheelfile_base, generator='bdist_wheel (' + wheel_version + ')'): + from email.message import Message + msg = Message() + msg['Wheel-Version'] = '1.0' # of the spec + msg['Generator'] = generator + msg['Root-Is-Purelib'] = str(self.root_is_pure).lower() + if self.build_number is not None: + msg['Build'] = self.build_number + + # Doesn't work for bdist_wininst + impl_tag, abi_tag, plat_tag = self.get_tag() + for impl in impl_tag.split('.'): + for abi in abi_tag.split('.'): + for plat in plat_tag.split('.'): + msg['Tag'] = '-'.join((impl, abi, plat)) + + wheelfile_path = os.path.join(wheelfile_base, 'WHEEL') + logger.info('creating %s', wheelfile_path) + with open(wheelfile_path, 'w') as f: + Generator(f, maxheaderlen=0).flatten(msg) + + def _ensure_relative(self, path): + # copied from dir_util, deleted + drive, path = os.path.splitdrive(path) + if path[0:1] == os.sep: + path = drive + path[1:] + return path + + @property + def license_paths(self): + metadata = self.distribution.get_option_dict('metadata') + files = set() + patterns = sorted({ + option for option in metadata.get('license_files', ('', ''))[1].split() + }) + + if 'license_file' in metadata: + warn('The "license_file" option is deprecated. Use "license_files" instead.', + DeprecationWarning) + files.add(metadata['license_file'][1]) + + if 'license_file' not in metadata and 'license_files' not in metadata: + patterns = ('LICEN[CS]E*', 'COPYING*', 'NOTICE*', 'AUTHORS*') + + for pattern in patterns: + for path in iglob(pattern): + if path not in files and os.path.isfile(path): + logger.info('adding license file "%s" (matched pattern "%s")', path, pattern) + files.add(path) + + return files + + def egg2dist(self, egginfo_path, distinfo_path): + """Convert an .egg-info directory into a .dist-info directory""" + def adios(p): + """Appropriately delete directory, file or link.""" + if os.path.exists(p) and not os.path.islink(p) and os.path.isdir(p): + shutil.rmtree(p) + elif os.path.exists(p): + os.unlink(p) + + adios(distinfo_path) + + if not os.path.exists(egginfo_path): + # There is no egg-info. This is probably because the egg-info + # file/directory is not named matching the distribution name used + # to name the archive file. Check for this case and report + # accordingly. + import glob + pat = os.path.join(os.path.dirname(egginfo_path), '*.egg-info') + possible = glob.glob(pat) + err = "Egg metadata expected at %s but not found" % (egginfo_path,) + if possible: + alt = os.path.basename(possible[0]) + err += " (%s found - possible misnamed archive file?)" % (alt,) + + raise ValueError(err) + + if os.path.isfile(egginfo_path): + # .egg-info is a single file + pkginfo_path = egginfo_path + pkg_info = pkginfo_to_metadata(egginfo_path, egginfo_path) + os.mkdir(distinfo_path) + else: + # .egg-info is a directory + pkginfo_path = os.path.join(egginfo_path, 'PKG-INFO') + pkg_info = pkginfo_to_metadata(egginfo_path, pkginfo_path) + + # ignore common egg metadata that is useless to wheel + shutil.copytree(egginfo_path, distinfo_path, + ignore=lambda x, y: {'PKG-INFO', 'requires.txt', 'SOURCES.txt', + 'not-zip-safe'} + ) + + # delete dependency_links if it is only whitespace + dependency_links_path = os.path.join(distinfo_path, 'dependency_links.txt') + with open(dependency_links_path, 'r') as dependency_links_file: + dependency_links = dependency_links_file.read().strip() + if not dependency_links: + adios(dependency_links_path) + + write_pkg_info(os.path.join(distinfo_path, 'METADATA'), pkg_info) + + for license_path in self.license_paths: + filename = os.path.basename(license_path) + shutil.copy(license_path, os.path.join(distinfo_path, filename)) + + adios(egginfo_path) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/cli/__init__.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/cli/__init__.py new file mode 100644 index 00000000..95740bfb --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/cli/__init__.py @@ -0,0 +1,88 @@ +""" +Wheel command-line utility. +""" + +from __future__ import print_function + +import argparse +import os +import sys + + +def require_pkgresources(name): + try: + import pkg_resources # noqa: F401 + except ImportError: + raise RuntimeError("'{0}' needs pkg_resources (part of setuptools).".format(name)) + + +class WheelError(Exception): + pass + + +def unpack_f(args): + from .unpack import unpack + unpack(args.wheelfile, args.dest) + + +def pack_f(args): + from .pack import pack + pack(args.directory, args.dest_dir, args.build_number) + + +def convert_f(args): + from .convert import convert + convert(args.files, args.dest_dir, args.verbose) + + +def version_f(args): + from .. import __version__ + print("wheel %s" % __version__) + + +def parser(): + p = argparse.ArgumentParser() + s = p.add_subparsers(help="commands") + + unpack_parser = s.add_parser('unpack', help='Unpack wheel') + unpack_parser.add_argument('--dest', '-d', help='Destination directory', + default='.') + unpack_parser.add_argument('wheelfile', help='Wheel file') + unpack_parser.set_defaults(func=unpack_f) + + repack_parser = s.add_parser('pack', help='Repack wheel') + repack_parser.add_argument('directory', help='Root directory of the unpacked wheel') + repack_parser.add_argument('--dest-dir', '-d', default=os.path.curdir, + help="Directory to store the wheel (default %(default)s)") + repack_parser.add_argument('--build-number', help="Build tag to use in the wheel name") + repack_parser.set_defaults(func=pack_f) + + convert_parser = s.add_parser('convert', help='Convert egg or wininst to wheel') + convert_parser.add_argument('files', nargs='*', help='Files to convert') + convert_parser.add_argument('--dest-dir', '-d', default=os.path.curdir, + help="Directory to store wheels (default %(default)s)") + convert_parser.add_argument('--verbose', '-v', action='store_true') + convert_parser.set_defaults(func=convert_f) + + version_parser = s.add_parser('version', help='Print version and exit') + version_parser.set_defaults(func=version_f) + + help_parser = s.add_parser('help', help='Show this help') + help_parser.set_defaults(func=lambda args: p.print_help()) + + return p + + +def main(): + p = parser() + args = p.parse_args() + if not hasattr(args, 'func'): + p.print_help() + else: + try: + args.func(args) + return 0 + except WheelError as e: + print(e, file=sys.stderr) + + return 1 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/cli/__pycache__/__init__.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/cli/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..790855c485d3a30cc66b1be7514629c0c5041384 GIT binary patch literal 2994 zcmb_eTW=Fb6rP#gwb#zt2_=L(EGZC7Wha8F4;6}_K&whsgg_O=YPH>X*2#wTu9=wy zvUU1UBb7enhxDaCXkPooU+7cMnO)~r9&2mvXJ)@Sm+#EoR;&5rU%j8aCLw>5BR?DZ z_n}Ay6(@bdDQ5{Cu|A{Nw-T#wnbz*xrgi!bx4H9<^lRS`UgPz5gx90`)atw329U*M;pZSha|X=vNrdPX{n#pUMn?I=q8K{gtNDeoq68u_`3 zlUVKcnjZid=}_Gsi#S!mFi!_6&eDwm#Rd2=D05IALXn?Cwd(;;l8`<6oTSS(QS@a~ z^eDl%)0uL-!SAJRBTk+E<;?f_#+zLb_vs?@!>E9ZM zLiyRymyycHD$5et>2++~Iwq#)z8#G-p&kp73GF@2Qx%V*a#R~;Vic+l({>t;B4NQ7 z|0KeN=AXN(YBXLQ$K&p19w)rJ_G)`GTf4(o-=K1;dXU7cK@g|03WDBvS1*d_RUV5d z00;*_JvdI{nS?Ux(KZ!ebuz$-*$=OJABsfTi1a~Uea0#1f$7p32JlA5(ryqS)*#T$ zAQ)vlPq6O=!K*w>$`x~gBUJ+q6=;&v_zAR+OU?M0&G7QZW>=sC7Gnt+fz2qH&q0+1Y5(Sg5f1tKZJT7M*kDk`XEbRM?!UMaRJdfs6;7HHM$N9o0*Je_)y>^ zzDBh_7+!R32`0-g==i= z-;m&qL|g?4?HDqc!NaNlz?mU1{c z#cQg*+<5vBk09xhy?B*MhESIC9i`Gbe%`TFi(^?1*4+M z3+R~m1*CoxDuwqn!ssZ!AeK<}`qL~^hi4*9t8GXl21>*$FwGK77rtHGc{B@8UuC|8 zIE~Df(%WuTNc>TC}?rQ^KSTYe_|H^AqqRJhB0TU-PwO>Y+qUt>t({47?Pc2YxcsI6l4BR4Q7K(6{2{G!qA zR*?bDk}#A<>cBd=I`f*IGZ0?CKe>_=~7Ro(vCcJ>CY7fT;4e-QCV z(^w4kV-kW;B2#o2x&a?)mRTIPbf_Uen55$}dNFTk_g)f?HhH-I4U8ldQk;XtDvB2|cJ3 zCQUlfER#s)YFpO^xd3+&NWB8dO(2DIYMRP^t4b*4sr{BPZdrY#-<~mKwcMUjQZ=4K zEmXor0icl{e!%Df_#ZF*8BEAEs0ekb$J(?BZQJzP(9Ze`roUk3QEHKiFJaFC(;>rQ z!h8rt4xv(D6vJ)6cY9Q^3FUOk)W9W zl@g+hTg*OuMF>nV+LF6c*QDZ+5Rmp{S?LHV{B<|>DmR3I=12~@fG0;_eb@CBtCkKYcWF_M>g%@|KP;TPso m=JX?=Fbqngy7$T#)Vj$y=V0Du9&-VoYq|9W+jXk{wSNIwhROH< literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/cli/__pycache__/convert.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/cli/__pycache__/convert.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7746ff67167d10e3d68a253cbfad6339eb1dc20a GIT binary patch literal 6168 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/cli/__pycache__/pack.cpython-36.pyc b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/cli/__pycache__/pack.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f850cb9f070df6ba87408b9a404e0123aafdf177 GIT binary patch literal 2452 zcmbtWTW=dh6rS0OFB{uU)6yh7tq`D?l1;b>q!6VDnhFG@kW?yKwOAX^INt4gcRMp~ z6nFiCE72EJ!EfM&7yb^?yzp^~Jlg}3cel@Zx+_F3U{yD(TXD)qpZv6T z$pPdJr=xoqust2uvn_~IP2wacWsmfUkln2G+awY3HgQe zD5K1JQd1<5ncSlP@;9Ne4GpJ}#K+VU3A+&QhZS!I=s9pxsK z(wWet%BpaSTUsJ3T~;ftW%4N*y9%Y$6YnW09af)!glF%LE6fA=q^uap)v_x8fZG=m z2X8`&cL{6!K=#RxL@lr;YXNT+c|k%AD3>l!>Ofh%K=D`&0&qF;${JXNV|_My6M6(X zj2EU_m6R=kRJUB1SQBg9P>r&|u1u_F?~j|R$*#g)15UoduKj9JqFTwNWN|_$DVxb< z^bRHGG;OkFq_75rdL{Y-T)oeWsQbW={6g?YaXyski9gJc#+iSN0ry!fcvt1(#0Ny= zz?$*n*;Wt2A9$V*-<>}9=fT~$`_=C5w?6LsgP~M@H_ucQXMUb>KNtQW7u;9Tk@RKm ztA3=QLxMQs%3L=UZO$XG{BD%_humjeaWRN9&Sqk_ibzC*xsF>#kylw@u0A`$rRsof zTmDU$#aV!EW%{v_>+wsNVRB2s8Cym@&YP|9CulXD|OBYyvM1tFwx7O4qe(@N~h|sNVrJxdxqawLhjMO`sG` zoti)mfy}U0Nn%aN)WvOknbJ=rmCItOyDb~E4^GmjtUPJVgV`ck;sRIcJcyv zsz|OIMwtu6nLspa*F3t~mM2nI;L3ccwA)LEvL7xSi&*gv7DU-@34Ahjjm=7!ZkQbJ zWW&KB7hwzE*bct2Sl?vWys!=%h_nto$`T5mrakQ-Y(qC56sZiW(P4~xx?ZG_LNkB{ z444AiGsUBWJgPvMIA z4IH`fgZ9d)e*tk|#)(i@n(=yezL{?x_qVr$cfX?dKNumu$))4K{V|As07?)+3o@rM zrFdrri=FQ4#;$OLTX=In_TjBBe9`+#*OTgbpi|~MG@BHtZvQE;EJmIHEDGCA( zr=!Qysx-1R{4^^Hek^&@xk|xJ#TP?}pzG$N;vN$P6mg3N|=g-2S za$zL#6`-i4m`q`Kh_>E|s+!ueN?R9+TQ{$=(t6$Ktv{{QJTcbMXWIJOh^jHxn--0p z*+70VDoIUJ6rrbv5Z$_1Qp`@L%Ex3|_`9j?Cs8-S_Gf=&=Jlw~>fPfeE5z>Jr`d6} zcTbGE{%mwwWTW-CqWaAG>+1mEdIuC41awGu=rtP98%*5>OGp*2U)Z<71oqW5N=_yU zH`Dei9bsV#cT-&j6%V>x*n+MpU4)L^C3Oq2{fF~PG=+Rb;ZOHL4OyS|+0gk1?1uRM literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/cli/convert.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/cli/convert.py new file mode 100644 index 00000000..f1a793a6 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/cli/convert.py @@ -0,0 +1,269 @@ +import os.path +import re +import shutil +import sys +import tempfile +import zipfile +from distutils import dist +from glob import iglob + +from ..bdist_wheel import bdist_wheel +from ..wheelfile import WheelFile +from . import WheelError, require_pkgresources + +egg_info_re = re.compile(r''' + (?P.+?)-(?P.+?) + (-(?Ppy\d\.\d) + (-(?P.+?))? + )?.egg$''', re.VERBOSE) + + +class _bdist_wheel_tag(bdist_wheel): + # allow the client to override the default generated wheel tag + # The default bdist_wheel implementation uses python and abi tags + # of the running python process. This is not suitable for + # generating/repackaging prebuild binaries. + + full_tag_supplied = False + full_tag = None # None or a (pytag, soabitag, plattag) triple + + def get_tag(self): + if self.full_tag_supplied and self.full_tag is not None: + return self.full_tag + else: + return bdist_wheel.get_tag(self) + + +def egg2wheel(egg_path, dest_dir): + filename = os.path.basename(egg_path) + match = egg_info_re.match(filename) + if not match: + raise WheelError('Invalid egg file name: {}'.format(filename)) + + egg_info = match.groupdict() + dir = tempfile.mkdtemp(suffix="_e2w") + if os.path.isfile(egg_path): + # assume we have a bdist_egg otherwise + with zipfile.ZipFile(egg_path) as egg: + egg.extractall(dir) + else: + # support buildout-style installed eggs directories + for pth in os.listdir(egg_path): + src = os.path.join(egg_path, pth) + if os.path.isfile(src): + shutil.copy2(src, dir) + else: + shutil.copytree(src, os.path.join(dir, pth)) + + pyver = egg_info['pyver'] + if pyver: + pyver = egg_info['pyver'] = pyver.replace('.', '') + + arch = (egg_info['arch'] or 'any').replace('.', '_').replace('-', '_') + + # assume all binary eggs are for CPython + abi = 'cp' + pyver[2:] if arch != 'any' else 'none' + + root_is_purelib = egg_info['arch'] is None + if root_is_purelib: + bw = bdist_wheel(dist.Distribution()) + else: + bw = _bdist_wheel_tag(dist.Distribution()) + + bw.root_is_pure = root_is_purelib + bw.python_tag = pyver + bw.plat_name_supplied = True + bw.plat_name = egg_info['arch'] or 'any' + if not root_is_purelib: + bw.full_tag_supplied = True + bw.full_tag = (pyver, abi, arch) + + dist_info_dir = os.path.join(dir, '{name}-{ver}.dist-info'.format(**egg_info)) + bw.egg2dist(os.path.join(dir, 'EGG-INFO'), dist_info_dir) + bw.write_wheelfile(dist_info_dir, generator='egg2wheel') + wheel_name = '{name}-{ver}-{pyver}-{}-{}.whl'.format(abi, arch, **egg_info) + with WheelFile(os.path.join(dest_dir, wheel_name), 'w') as wf: + wf.write_files(dir) + + shutil.rmtree(dir) + + +def parse_wininst_info(wininfo_name, egginfo_name): + """Extract metadata from filenames. + + Extracts the 4 metadataitems needed (name, version, pyversion, arch) from + the installer filename and the name of the egg-info directory embedded in + the zipfile (if any). + + The egginfo filename has the format:: + + name-ver(-pyver)(-arch).egg-info + + The installer filename has the format:: + + name-ver.arch(-pyver).exe + + Some things to note: + + 1. The installer filename is not definitive. An installer can be renamed + and work perfectly well as an installer. So more reliable data should + be used whenever possible. + 2. The egg-info data should be preferred for the name and version, because + these come straight from the distutils metadata, and are mandatory. + 3. The pyver from the egg-info data should be ignored, as it is + constructed from the version of Python used to build the installer, + which is irrelevant - the installer filename is correct here (even to + the point that when it's not there, any version is implied). + 4. The architecture must be taken from the installer filename, as it is + not included in the egg-info data. + 5. Architecture-neutral installers still have an architecture because the + installer format itself (being executable) is architecture-specific. We + should therefore ignore the architecture if the content is pure-python. + """ + + egginfo = None + if egginfo_name: + egginfo = egg_info_re.search(egginfo_name) + if not egginfo: + raise ValueError("Egg info filename %s is not valid" % (egginfo_name,)) + + # Parse the wininst filename + # 1. Distribution name (up to the first '-') + w_name, sep, rest = wininfo_name.partition('-') + if not sep: + raise ValueError("Installer filename %s is not valid" % (wininfo_name,)) + + # Strip '.exe' + rest = rest[:-4] + # 2. Python version (from the last '-', must start with 'py') + rest2, sep, w_pyver = rest.rpartition('-') + if sep and w_pyver.startswith('py'): + rest = rest2 + w_pyver = w_pyver.replace('.', '') + else: + # Not version specific - use py2.py3. While it is possible that + # pure-Python code is not compatible with both Python 2 and 3, there + # is no way of knowing from the wininst format, so we assume the best + # here (the user can always manually rename the wheel to be more + # restrictive if needed). + w_pyver = 'py2.py3' + # 3. Version and architecture + w_ver, sep, w_arch = rest.rpartition('.') + if not sep: + raise ValueError("Installer filename %s is not valid" % (wininfo_name,)) + + if egginfo: + w_name = egginfo.group('name') + w_ver = egginfo.group('ver') + + return {'name': w_name, 'ver': w_ver, 'arch': w_arch, 'pyver': w_pyver} + + +def wininst2wheel(path, dest_dir): + with zipfile.ZipFile(path) as bdw: + # Search for egg-info in the archive + egginfo_name = None + for filename in bdw.namelist(): + if '.egg-info' in filename: + egginfo_name = filename + break + + info = parse_wininst_info(os.path.basename(path), egginfo_name) + + root_is_purelib = True + for zipinfo in bdw.infolist(): + if zipinfo.filename.startswith('PLATLIB'): + root_is_purelib = False + break + if root_is_purelib: + paths = {'purelib': ''} + else: + paths = {'platlib': ''} + + dist_info = "%(name)s-%(ver)s" % info + datadir = "%s.data/" % dist_info + + # rewrite paths to trick ZipFile into extracting an egg + # XXX grab wininst .ini - between .exe, padding, and first zip file. + members = [] + egginfo_name = '' + for zipinfo in bdw.infolist(): + key, basename = zipinfo.filename.split('/', 1) + key = key.lower() + basepath = paths.get(key, None) + if basepath is None: + basepath = datadir + key.lower() + '/' + oldname = zipinfo.filename + newname = basepath + basename + zipinfo.filename = newname + del bdw.NameToInfo[oldname] + bdw.NameToInfo[newname] = zipinfo + # Collect member names, but omit '' (from an entry like "PLATLIB/" + if newname: + members.append(newname) + # Remember egg-info name for the egg2dist call below + if not egginfo_name: + if newname.endswith('.egg-info'): + egginfo_name = newname + elif '.egg-info/' in newname: + egginfo_name, sep, _ = newname.rpartition('/') + dir = tempfile.mkdtemp(suffix="_b2w") + bdw.extractall(dir, members) + + # egg2wheel + abi = 'none' + pyver = info['pyver'] + arch = (info['arch'] or 'any').replace('.', '_').replace('-', '_') + # Wininst installers always have arch even if they are not + # architecture-specific (because the format itself is). + # So, assume the content is architecture-neutral if root is purelib. + if root_is_purelib: + arch = 'any' + # If the installer is architecture-specific, it's almost certainly also + # CPython-specific. + if arch != 'any': + pyver = pyver.replace('py', 'cp') + wheel_name = '-'.join((dist_info, pyver, abi, arch)) + if root_is_purelib: + bw = bdist_wheel(dist.Distribution()) + else: + bw = _bdist_wheel_tag(dist.Distribution()) + + bw.root_is_pure = root_is_purelib + bw.python_tag = pyver + bw.plat_name_supplied = True + bw.plat_name = info['arch'] or 'any' + + if not root_is_purelib: + bw.full_tag_supplied = True + bw.full_tag = (pyver, abi, arch) + + dist_info_dir = os.path.join(dir, '%s.dist-info' % dist_info) + bw.egg2dist(os.path.join(dir, egginfo_name), dist_info_dir) + bw.write_wheelfile(dist_info_dir, generator='wininst2wheel') + + wheel_path = os.path.join(dest_dir, wheel_name) + with WheelFile(wheel_path, 'w') as wf: + wf.write_files(dir) + + shutil.rmtree(dir) + + +def convert(files, dest_dir, verbose): + # Only support wheel convert if pkg_resources is present + require_pkgresources('wheel convert') + + for pat in files: + for installer in iglob(pat): + if os.path.splitext(installer)[1] == '.egg': + conv = egg2wheel + else: + conv = wininst2wheel + + if verbose: + print("{}... ".format(installer)) + sys.stdout.flush() + + conv(installer, dest_dir) + if verbose: + print("OK") diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/cli/pack.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/cli/pack.py new file mode 100644 index 00000000..af6e81c4 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/cli/pack.py @@ -0,0 +1,58 @@ +from __future__ import print_function + +import os.path +import re +import sys + +from wheel.cli import WheelError +from wheel.wheelfile import WheelFile + +DIST_INFO_RE = re.compile(r"^(?P(?P.+?)-(?P\d.*?))\.dist-info$") + + +def pack(directory, dest_dir, build_number): + """Repack a previously unpacked wheel directory into a new wheel file. + + The .dist-info/WHEEL file must contain one or more tags so that the target + wheel file name can be determined. + + :param directory: The unpacked wheel directory + :param dest_dir: Destination directory (defaults to the current directory) + """ + # Find the .dist-info directory + dist_info_dirs = [fn for fn in os.listdir(directory) + if os.path.isdir(os.path.join(directory, fn)) and DIST_INFO_RE.match(fn)] + if len(dist_info_dirs) > 1: + raise WheelError('Multiple .dist-info directories found in {}'.format(directory)) + elif not dist_info_dirs: + raise WheelError('No .dist-info directories found in {}'.format(directory)) + + # Determine the target wheel filename + dist_info_dir = dist_info_dirs[0] + name_version = DIST_INFO_RE.match(dist_info_dir).group('namever') + + # Add the build number if specific + if build_number: + name_version += '-' + build_number + + # Read the tags from .dist-info/WHEEL + with open(os.path.join(directory, dist_info_dir, 'WHEEL')) as f: + tags = [line.split(' ')[1].rstrip() for line in f if line.startswith('Tag: ')] + if not tags: + raise WheelError('No tags present in {}/WHEEL; cannot determine target wheel filename' + .format(dist_info_dir)) + + # Reassemble the tags for the wheel file + impls = sorted({tag.split('-')[0] for tag in tags}) + abivers = sorted({tag.split('-')[1] for tag in tags}) + platforms = sorted({tag.split('-')[2] for tag in tags}) + tagline = '-'.join(['.'.join(impls), '.'.join(abivers), '.'.join(platforms)]) + + # Repack the wheel + wheel_path = os.path.join(dest_dir, '{}-{}.whl'.format(name_version, tagline)) + with WheelFile(wheel_path, 'w') as wf: + print("Repacking wheel as {}...".format(wheel_path), end='') + sys.stdout.flush() + wf.write_files(directory) + + print('OK') diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/cli/unpack.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/cli/unpack.py new file mode 100644 index 00000000..2e9857a3 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/cli/unpack.py @@ -0,0 +1,25 @@ +from __future__ import print_function + +import os.path +import sys + +from ..wheelfile import WheelFile + + +def unpack(path, dest='.'): + """Unpack a wheel. + + Wheel content will be unpacked to {dest}/{name}-{ver}, where {name} + is the package name and {ver} its version. + + :param path: The path to the wheel. + :param dest: Destination directory (default to current directory). + """ + with WheelFile(path) as wf: + namever = wf.parsed_filename.group('namever') + destination = os.path.join(dest, namever) + print("Unpacking to: {}...".format(destination), end='') + sys.stdout.flush() + wf.extractall(destination) + + print('OK') diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/metadata.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/metadata.py new file mode 100644 index 00000000..ab0c07e5 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/metadata.py @@ -0,0 +1,141 @@ +""" +Tools for converting old- to new-style metadata. +""" + +import os.path +import re +import textwrap + +import pkg_resources + +from .pkginfo import read_pkg_info + +# Wheel itself is probably the only program that uses non-extras markers +# in METADATA/PKG-INFO. Support its syntax with the extra at the end only. +EXTRA_RE = re.compile( + r"""^(?P.*?)(;\s*(?P.*?)(extra == '(?P.*?)')?)$""") + + +def requires_to_requires_dist(requirement): + """Return the version specifier for a requirement in PEP 345/566 fashion.""" + if getattr(requirement, 'url', None): + return " @ " + requirement.url + + requires_dist = [] + for op, ver in requirement.specs: + requires_dist.append(op + ver) + if not requires_dist: + return '' + return " (%s)" % ','.join(sorted(requires_dist)) + + +def convert_requirements(requirements): + """Yield Requires-Dist: strings for parsed requirements strings.""" + for req in requirements: + parsed_requirement = pkg_resources.Requirement.parse(req) + spec = requires_to_requires_dist(parsed_requirement) + extras = ",".join(sorted(parsed_requirement.extras)) + if extras: + extras = "[%s]" % extras + yield (parsed_requirement.project_name + extras + spec) + + +def generate_requirements(extras_require): + """ + Convert requirements from a setup()-style dictionary to ('Requires-Dist', 'requirement') + and ('Provides-Extra', 'extra') tuples. + + extras_require is a dictionary of {extra: [requirements]} as passed to setup(), + using the empty extra {'': [requirements]} to hold install_requires. + """ + for extra, depends in extras_require.items(): + condition = '' + extra = extra or '' + if ':' in extra: # setuptools extra:condition syntax + extra, condition = extra.split(':', 1) + + extra = pkg_resources.safe_extra(extra) + if extra: + yield 'Provides-Extra', extra + if condition: + condition = "(" + condition + ") and " + condition += "extra == '%s'" % extra + + if condition: + condition = ' ; ' + condition + + for new_req in convert_requirements(depends): + yield 'Requires-Dist', new_req + condition + + +def pkginfo_to_metadata(egg_info_path, pkginfo_path): + """ + Convert .egg-info directory with PKG-INFO to the Metadata 2.1 format + """ + pkg_info = read_pkg_info(pkginfo_path) + pkg_info.replace_header('Metadata-Version', '2.1') + # Those will be regenerated from `requires.txt`. + del pkg_info['Provides-Extra'] + del pkg_info['Requires-Dist'] + requires_path = os.path.join(egg_info_path, 'requires.txt') + if os.path.exists(requires_path): + with open(requires_path) as requires_file: + requires = requires_file.read() + + parsed_requirements = sorted(pkg_resources.split_sections(requires), + key=lambda x: x[0] or '') + for extra, reqs in parsed_requirements: + for key, value in generate_requirements({extra: reqs}): + if (key, value) not in pkg_info.items(): + pkg_info[key] = value + + description = pkg_info['Description'] + if description: + pkg_info.set_payload(dedent_description(pkg_info)) + del pkg_info['Description'] + + return pkg_info + + +def pkginfo_unicode(pkg_info, field): + """Hack to coax Unicode out of an email Message() - Python 3.3+""" + text = pkg_info[field] + field = field.lower() + if not isinstance(text, str): + if not hasattr(pkg_info, 'raw_items'): # Python 3.2 + return str(text) + for item in pkg_info.raw_items(): + if item[0].lower() == field: + text = item[1].encode('ascii', 'surrogateescape') \ + .decode('utf-8') + break + + return text + + +def dedent_description(pkg_info): + """ + Dedent and convert pkg_info['Description'] to Unicode. + """ + description = pkg_info['Description'] + + # Python 3 Unicode handling, sorta. + surrogates = False + if not isinstance(description, str): + surrogates = True + description = pkginfo_unicode(pkg_info, 'Description') + + description_lines = description.splitlines() + description_dedent = '\n'.join( + # if the first line of long_description is blank, + # the first line here will be indented. + (description_lines[0].lstrip(), + textwrap.dedent('\n'.join(description_lines[1:])), + '\n')) + + if surrogates: + description_dedent = description_dedent \ + .encode("utf8") \ + .decode("ascii", "surrogateescape") + + return description_dedent diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/pep425tags.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/pep425tags.py new file mode 100644 index 00000000..13b50731 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/pep425tags.py @@ -0,0 +1,185 @@ +"""Generate and work with PEP 425 Compatibility Tags.""" + +import distutils.util +import platform +import sys +import sysconfig +import warnings + +try: + from importlib.machinery import get_all_suffixes +except ImportError: + from imp import get_suffixes as get_all_suffixes + + +def get_config_var(var): + try: + return sysconfig.get_config_var(var) + except IOError as e: # pip Issue #1074 + warnings.warn("{0}".format(e), RuntimeWarning) + return None + + +def get_abbr_impl(): + """Return abbreviated implementation name.""" + impl = platform.python_implementation() + if impl == 'PyPy': + return 'pp' + elif impl == 'Jython': + return 'jy' + elif impl == 'IronPython': + return 'ip' + elif impl == 'CPython': + return 'cp' + + raise LookupError('Unknown Python implementation: ' + impl) + + +def get_impl_ver(): + """Return implementation version.""" + impl_ver = get_config_var("py_version_nodot") + if not impl_ver or get_abbr_impl() == 'pp': + impl_ver = ''.join(map(str, get_impl_version_info())) + return impl_ver + + +def get_impl_version_info(): + """Return sys.version_info-like tuple for use in decrementing the minor + version.""" + if get_abbr_impl() == 'pp': + # as per https://github.com/pypa/pip/issues/2882 + return (sys.version_info[0], sys.pypy_version_info.major, + sys.pypy_version_info.minor) + else: + return sys.version_info[0], sys.version_info[1] + + +def get_flag(var, fallback, expected=True, warn=True): + """Use a fallback method for determining SOABI flags if the needed config + var is unset or unavailable.""" + val = get_config_var(var) + if val is None: + if warn: + warnings.warn("Config variable '{0}' is unset, Python ABI tag may " + "be incorrect".format(var), RuntimeWarning, 2) + return fallback() + return val == expected + + +def get_abi_tag(): + """Return the ABI tag based on SOABI (if available) or emulate SOABI + (CPython 2, PyPy).""" + soabi = get_config_var('SOABI') + impl = get_abbr_impl() + if not soabi and impl in ('cp', 'pp') and hasattr(sys, 'maxunicode'): + d = '' + m = '' + u = '' + if get_flag('Py_DEBUG', + lambda: hasattr(sys, 'gettotalrefcount'), + warn=(impl == 'cp')): + d = 'd' + if get_flag('WITH_PYMALLOC', + lambda: impl == 'cp', + warn=(impl == 'cp')): + m = 'm' + if get_flag('Py_UNICODE_SIZE', + lambda: sys.maxunicode == 0x10ffff, + expected=4, + warn=(impl == 'cp' and + sys.version_info < (3, 3))) \ + and sys.version_info < (3, 3): + u = 'u' + abi = '%s%s%s%s%s' % (impl, get_impl_ver(), d, m, u) + elif soabi and soabi.startswith('cpython-'): + abi = 'cp' + soabi.split('-')[1] + elif soabi: + abi = soabi.replace('.', '_').replace('-', '_') + else: + abi = None + return abi + + +def get_platform(): + """Return our platform name 'win32', 'linux_x86_64'""" + # XXX remove distutils dependency + result = distutils.util.get_platform().replace('.', '_').replace('-', '_') + if result == "linux_x86_64" and sys.maxsize == 2147483647: + # pip pull request #3497 + result = "linux_i686" + return result + + +def get_supported(versions=None, supplied_platform=None): + """Return a list of supported tags for each version specified in + `versions`. + + :param versions: a list of string versions, of the form ["33", "32"], + or None. The first version will be assumed to support our ABI. + """ + supported = [] + + # Versions must be given with respect to the preference + if versions is None: + versions = [] + version_info = get_impl_version_info() + major = version_info[:-1] + # Support all previous minor Python versions. + for minor in range(version_info[-1], -1, -1): + versions.append(''.join(map(str, major + (minor,)))) + + impl = get_abbr_impl() + + abis = [] + + abi = get_abi_tag() + if abi: + abis[0:0] = [abi] + + abi3s = set() + for suffix in get_all_suffixes(): + if suffix[0].startswith('.abi'): + abi3s.add(suffix[0].split('.', 2)[1]) + + abis.extend(sorted(list(abi3s))) + + abis.append('none') + + platforms = [] + if supplied_platform: + platforms.append(supplied_platform) + platforms.append(get_platform()) + + # Current version, current API (built specifically for our Python): + for abi in abis: + for arch in platforms: + supported.append(('%s%s' % (impl, versions[0]), abi, arch)) + + # abi3 modules compatible with older version of Python + for version in versions[1:]: + # abi3 was introduced in Python 3.2 + if version in ('31', '30'): + break + for abi in abi3s: # empty set if not Python 3 + for arch in platforms: + supported.append(("%s%s" % (impl, version), abi, arch)) + + # No abi / arch, but requires our implementation: + for i, version in enumerate(versions): + supported.append(('%s%s' % (impl, version), 'none', 'any')) + if i == 0: + # Tagged specifically as being cross-version compatible + # (with just the major version specified) + supported.append(('%s%s' % (impl, versions[0][0]), 'none', 'any')) + + # Major Python version + platform; e.g. binaries not using the Python API + for arch in platforms: + supported.append(('py%s' % (versions[0][0]), 'none', arch)) + + # No abi / arch, generic Python + for i, version in enumerate(versions): + supported.append(('py%s' % (version,), 'none', 'any')) + if i == 0: + supported.append(('py%s' % (version[0]), 'none', 'any')) + + return supported diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/pkginfo.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/pkginfo.py new file mode 100644 index 00000000..115be45b --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/pkginfo.py @@ -0,0 +1,43 @@ +"""Tools for reading and writing PKG-INFO / METADATA without caring +about the encoding.""" + +from email.parser import Parser + +try: + unicode + _PY3 = False +except NameError: + _PY3 = True + +if not _PY3: + from email.generator import Generator + + def read_pkg_info_bytes(bytestr): + return Parser().parsestr(bytestr) + + def read_pkg_info(path): + with open(path, "r") as headers: + message = Parser().parse(headers) + return message + + def write_pkg_info(path, message): + with open(path, 'w') as metadata: + Generator(metadata, mangle_from_=False, maxheaderlen=0).flatten(message) +else: + from email.generator import BytesGenerator + + def read_pkg_info_bytes(bytestr): + headers = bytestr.decode(encoding="ascii", errors="surrogateescape") + message = Parser().parsestr(headers) + return message + + def read_pkg_info(path): + with open(path, "r", + encoding="ascii", + errors="surrogateescape") as headers: + message = Parser().parse(headers) + return message + + def write_pkg_info(path, message): + with open(path, "wb") as out: + BytesGenerator(out, mangle_from_=False, maxheaderlen=0).flatten(message) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/util.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/util.py new file mode 100644 index 00000000..0afb54a4 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/util.py @@ -0,0 +1,46 @@ +import base64 +import io +import sys + + +if sys.version_info[0] < 3: + text_type = unicode # noqa: F821 + + StringIO = io.BytesIO + + def native(s, encoding='utf-8'): + if isinstance(s, unicode): + return s.encode(encoding) + return s +else: + text_type = str + + StringIO = io.StringIO + + def native(s, encoding='utf-8'): + if isinstance(s, bytes): + return s.decode(encoding) + return s + + +def urlsafe_b64encode(data): + """urlsafe_b64encode without padding""" + return base64.urlsafe_b64encode(data).rstrip(b'=') + + +def urlsafe_b64decode(data): + """urlsafe_b64decode without padding""" + pad = b'=' * (4 - (len(data) & 3)) + return base64.urlsafe_b64decode(data + pad) + + +def as_unicode(s): + if isinstance(s, bytes): + return s.decode('utf-8') + return s + + +def as_bytes(s): + if isinstance(s, text_type): + return s.encode('utf-8') + return s diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/wheelfile.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/wheelfile.py new file mode 100644 index 00000000..ddf8509d --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site-packages/wheel/wheelfile.py @@ -0,0 +1,169 @@ +from __future__ import print_function + +import csv +import hashlib +import os.path +import re +import stat +import time +from collections import OrderedDict +from distutils import log as logger +from zipfile import ZIP_DEFLATED, ZipInfo, ZipFile + +from wheel.cli import WheelError +from wheel.util import urlsafe_b64decode, as_unicode, native, urlsafe_b64encode, as_bytes, StringIO + +# Non-greedy matching of an optional build number may be too clever (more +# invalid wheel filenames will match). Separate regex for .dist-info? +WHEEL_INFO_RE = re.compile( + r"""^(?P(?P.+?)-(?P.+?))(-(?P\d[^-]*))? + -(?P.+?)-(?P.+?)-(?P.+?)\.whl$""", + re.VERBOSE) + + +def get_zipinfo_datetime(timestamp=None): + # Some applications need reproducible .whl files, but they can't do this without forcing + # the timestamp of the individual ZipInfo objects. See issue #143. + timestamp = int(os.environ.get('SOURCE_DATE_EPOCH', timestamp or time.time())) + return time.gmtime(timestamp)[0:6] + + +class WheelFile(ZipFile): + """A ZipFile derivative class that also reads SHA-256 hashes from + .dist-info/RECORD and checks any read files against those. + """ + + _default_algorithm = hashlib.sha256 + + def __init__(self, file, mode='r'): + basename = os.path.basename(file) + self.parsed_filename = WHEEL_INFO_RE.match(basename) + if not basename.endswith('.whl') or self.parsed_filename is None: + raise WheelError("Bad wheel filename {!r}".format(basename)) + + ZipFile.__init__(self, file, mode, compression=ZIP_DEFLATED, allowZip64=True) + + self.dist_info_path = '{}.dist-info'.format(self.parsed_filename.group('namever')) + self.record_path = self.dist_info_path + '/RECORD' + self._file_hashes = OrderedDict() + self._file_sizes = {} + if mode == 'r': + # Ignore RECORD and any embedded wheel signatures + self._file_hashes[self.record_path] = None, None + self._file_hashes[self.record_path + '.jws'] = None, None + self._file_hashes[self.record_path + '.p7s'] = None, None + + # Fill in the expected hashes by reading them from RECORD + try: + record = self.open(self.record_path) + except KeyError: + raise WheelError('Missing {} file'.format(self.record_path)) + + with record: + for line in record: + line = line.decode('utf-8') + path, hash_sum, size = line.rsplit(u',', 2) + if hash_sum: + algorithm, hash_sum = hash_sum.split(u'=') + try: + hashlib.new(algorithm) + except ValueError: + raise WheelError('Unsupported hash algorithm: {}'.format(algorithm)) + + if algorithm.lower() in {'md5', 'sha1'}: + raise WheelError( + 'Weak hash algorithm ({}) is not permitted by PEP 427' + .format(algorithm)) + + self._file_hashes[path] = ( + algorithm, urlsafe_b64decode(hash_sum.encode('ascii'))) + + def open(self, name_or_info, mode="r", pwd=None): + def _update_crc(newdata, eof=None): + if eof is None: + eof = ef._eof + update_crc_orig(newdata) + else: # Python 2 + update_crc_orig(newdata, eof) + + running_hash.update(newdata) + if eof and running_hash.digest() != expected_hash: + raise WheelError("Hash mismatch for file '{}'".format(native(ef_name))) + + ef = ZipFile.open(self, name_or_info, mode, pwd) + ef_name = as_unicode(name_or_info.filename if isinstance(name_or_info, ZipInfo) + else name_or_info) + if mode == 'r' and not ef_name.endswith('/'): + if ef_name not in self._file_hashes: + raise WheelError("No hash found for file '{}'".format(native(ef_name))) + + algorithm, expected_hash = self._file_hashes[ef_name] + if expected_hash is not None: + # Monkey patch the _update_crc method to also check for the hash from RECORD + running_hash = hashlib.new(algorithm) + update_crc_orig, ef._update_crc = ef._update_crc, _update_crc + + return ef + + def write_files(self, base_dir): + logger.info("creating '%s' and adding '%s' to it", self.filename, base_dir) + deferred = [] + for root, dirnames, filenames in os.walk(base_dir): + # Sort the directory names so that `os.walk` will walk them in a + # defined order on the next iteration. + dirnames.sort() + for name in sorted(filenames): + path = os.path.normpath(os.path.join(root, name)) + if os.path.isfile(path): + arcname = os.path.relpath(path, base_dir) + if arcname == self.record_path: + pass + elif root.endswith('.dist-info'): + deferred.append((path, arcname)) + else: + self.write(path, arcname) + + deferred.sort() + for path, arcname in deferred: + self.write(path, arcname) + + def write(self, filename, arcname=None, compress_type=None): + with open(filename, 'rb') as f: + st = os.fstat(f.fileno()) + data = f.read() + + zinfo = ZipInfo(arcname or filename, date_time=get_zipinfo_datetime(st.st_mtime)) + zinfo.external_attr = (stat.S_IMODE(st.st_mode) | stat.S_IFMT(st.st_mode)) << 16 + zinfo.compress_type = ZIP_DEFLATED + self.writestr(zinfo, data, compress_type) + + def writestr(self, zinfo_or_arcname, bytes, compress_type=None): + ZipFile.writestr(self, zinfo_or_arcname, bytes, compress_type) + fname = (zinfo_or_arcname.filename if isinstance(zinfo_or_arcname, ZipInfo) + else zinfo_or_arcname) + logger.info("adding '%s'", fname) + if fname != self.record_path: + hash_ = self._default_algorithm(bytes) + self._file_hashes[fname] = hash_.name, native(urlsafe_b64encode(hash_.digest())) + self._file_sizes[fname] = len(bytes) + + def close(self): + # Write RECORD + if self.fp is not None and self.mode == 'w' and self._file_hashes: + data = StringIO() + writer = csv.writer(data, delimiter=',', quotechar='"', lineterminator='\n') + writer.writerows(( + ( + fname, + algorithm + "=" + hash_, + self._file_sizes[fname] + ) + for fname, (algorithm, hash_) in self._file_hashes.items() + )) + writer.writerow((format(self.record_path), "", "")) + zinfo = ZipInfo(native(self.record_path), date_time=get_zipinfo_datetime()) + zinfo.compress_type = ZIP_DEFLATED + zinfo.external_attr = 0o664 << 16 + self.writestr(zinfo, as_bytes(data.getvalue())) + + ZipFile.close(self) diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site.py new file mode 100644 index 00000000..7969769c --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/site.py @@ -0,0 +1,758 @@ +"""Append module search paths for third-party packages to sys.path. + +**************************************************************** +* This module is automatically imported during initialization. * +**************************************************************** + +In earlier versions of Python (up to 1.5a3), scripts or modules that +needed to use site-specific modules would place ``import site'' +somewhere near the top of their code. Because of the automatic +import, this is no longer necessary (but code that does it still +works). + +This will append site-specific paths to the module search path. On +Unix, it starts with sys.prefix and sys.exec_prefix (if different) and +appends lib/python/site-packages as well as lib/site-python. +It also supports the Debian convention of +lib/python/dist-packages. On other platforms (mainly Mac and +Windows), it uses just sys.prefix (and sys.exec_prefix, if different, +but this is unlikely). The resulting directories, if they exist, are +appended to sys.path, and also inspected for path configuration files. + +FOR DEBIAN, this sys.path is augmented with directories in /usr/local. +Local addons go into /usr/local/lib/python/site-packages +(resp. /usr/local/lib/site-python), Debian addons install into +/usr/{lib,share}/python/dist-packages. + +A path configuration file is a file whose name has the form +.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.X/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.X/site-packages/bar + /usr/local/lib/python2.X/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. + +After these path manipulations, 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 +try: + import __builtin__ as builtins +except ImportError: + import builtins +try: + set +except NameError: + from sets import Set as set + +# 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 +USER_SITE = None +USER_BASE = None + +_is_64bit = (getattr(sys, 'maxsize', None) or getattr(sys, 'maxint')) > 2**32 +_is_pypy = hasattr(sys, 'pypy_version_info') +_is_jython = sys.platform[:4] == 'java' +if _is_jython: + ModuleType = type(os) + +def makepath(*paths): + dir = os.path.join(*paths) + if _is_jython and (dir == '__classpath__' or + dir.startswith('__pyclasspath__')): + return dir, dir + dir = os.path.abspath(dir) + return dir, os.path.normcase(dir) + +def abs__file__(): + """Set all module' __file__ attribute to an absolute path""" + for m in sys.modules.values(): + if ((_is_jython and not isinstance(m, ModuleType)) or + hasattr(m, '__loader__')): + # only modules need the abspath in Jython. and don't mess + # with a PEP 302-supplied __file__ + continue + f = getattr(m, '__file__', None) + if f is None: + continue + m.__file__ = os.path.abspath(f) + +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 not dircase in known_paths: + L.append(dir) + known_paths.add(dircase) + sys.path[:] = L + return known_paths + +# XXX This should not be part of site.py, since it is needed even when +# using the -S option for Python. See http://www.python.org/sf/586680 +def addbuilddir(): + """Append ./build/lib. in case we're running in the build dir + (especially for Guido :-)""" + from distutils.util import get_platform + s = "build/lib.%s-%.3s" % (get_platform(), sys.version) + if hasattr(sys, 'gettotalrefcount'): + s += '-pydebug' + s = os.path.join(os.path.dirname(sys.path[-1]), s) + sys.path.append(s) + +def _init_pathinfo(): + """Return a set containing all existing directory entries from sys.path""" + d = set() + for dir in sys.path: + try: + if os.path.isdir(dir): + dir, dircase = makepath(dir) + d.add(dircase) + except TypeError: + continue + return d + +def addpackage(sitedir, name, known_paths): + """Add a new path to known_paths by combining sitedir and 'name' or execute + sitedir if it starts with 'import'""" + if known_paths is None: + _init_pathinfo() + reset = 1 + else: + reset = 0 + fullname = os.path.join(sitedir, name) + try: + f = open(fullname, "rU") + except IOError: + return + try: + for line in f: + if line.startswith("#"): + continue + if line.startswith("import"): + exec(line) + continue + line = line.rstrip() + dir, dircase = makepath(sitedir, line) + if not dircase in known_paths and os.path.exists(dir): + sys.path.append(dir) + known_paths.add(dircase) + finally: + f.close() + 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'""" + if known_paths is None: + known_paths = _init_pathinfo() + reset = 1 + else: + reset = 0 + sitedir, sitedircase = makepath(sitedir) + if not sitedircase in known_paths: + sys.path.append(sitedir) # Add path component + try: + names = os.listdir(sitedir) + except os.error: + return + names.sort() + for name in names: + if name.endswith(os.extsep + "pth"): + addpackage(sitedir, name, known_paths) + if reset: + known_paths = None + return known_paths + +def addsitepackages(known_paths, sys_prefix=sys.prefix, exec_prefix=sys.exec_prefix): + """Add site-packages (and possibly site-python) to sys.path""" + prefixes = [os.path.join(sys_prefix, "local"), sys_prefix] + if exec_prefix != sys_prefix: + prefixes.append(os.path.join(exec_prefix, "local")) + + for prefix in prefixes: + if prefix: + if sys.platform in ('os2emx', 'riscos') or _is_jython: + sitedirs = [os.path.join(prefix, "Lib", "site-packages")] + elif _is_pypy: + sitedirs = [os.path.join(prefix, 'site-packages')] + elif sys.platform == 'darwin' and prefix == sys_prefix: + + if prefix.startswith("/System/Library/Frameworks/"): # Apple's Python + + sitedirs = [os.path.join("/Library/Python", sys.version[:3], "site-packages"), + os.path.join(prefix, "Extras", "lib", "python")] + + else: # any other Python distros on OSX work this way + sitedirs = [os.path.join(prefix, "lib", + "python" + sys.version[:3], "site-packages")] + + elif os.sep == '/': + sitedirs = [os.path.join(prefix, + "lib", + "python" + sys.version[:3], + "site-packages"), + os.path.join(prefix, "lib", "site-python"), + os.path.join(prefix, "python" + sys.version[:3], "lib-dynload")] + lib64_dir = os.path.join(prefix, "lib64", "python" + sys.version[:3], "site-packages") + if (os.path.exists(lib64_dir) and + os.path.realpath(lib64_dir) not in [os.path.realpath(p) for p in sitedirs]): + if _is_64bit: + sitedirs.insert(0, lib64_dir) + else: + sitedirs.append(lib64_dir) + try: + # sys.getobjects only available in --with-pydebug build + sys.getobjects + sitedirs.insert(0, os.path.join(sitedirs[0], 'debug')) + except AttributeError: + pass + # Debian-specific dist-packages directories: + sitedirs.append(os.path.join(prefix, "local/lib", + "python" + sys.version[:3], + "dist-packages")) + if sys.version[0] == '2': + sitedirs.append(os.path.join(prefix, "lib", + "python" + sys.version[:3], + "dist-packages")) + else: + sitedirs.append(os.path.join(prefix, "lib", + "python" + sys.version[0], + "dist-packages")) + sitedirs.append(os.path.join(prefix, "lib", "dist-python")) + else: + sitedirs = [prefix, os.path.join(prefix, "lib", "site-packages")] + if sys.platform == 'darwin': + # for framework builds *only* we add the standard Apple + # locations. Currently only per-user, but /Library and + # /Network/Library could be added too + if 'Python.framework' in prefix: + home = os.environ.get('HOME') + if home: + sitedirs.append( + os.path.join(home, + 'Library', + 'Python', + sys.version[:3], + 'site-packages')) + for sitedir in sitedirs: + if os.path.isdir(sitedir): + addsitedir(sitedir, known_paths) + return None + +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 hasattr(sys, 'flags') and getattr(sys.flags, 'no_user_site', False): + 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 + +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. + + USER_BASE is the root directory for all Python versions + + USER_SITE is the user specific site-packages directory + + USER_SITE/.. can be used for data. + """ + global USER_BASE, USER_SITE, ENABLE_USER_SITE + env_base = os.environ.get("PYTHONUSERBASE", None) + + def joinuser(*args): + return os.path.expanduser(os.path.join(*args)) + + #if sys.platform in ('os2emx', 'riscos'): + # # Don't know what to put here + # USER_BASE = '' + # USER_SITE = '' + if os.name == "nt": + base = os.environ.get("APPDATA") or "~" + if env_base: + USER_BASE = env_base + else: + USER_BASE = joinuser(base, "Python") + USER_SITE = os.path.join(USER_BASE, + "Python" + sys.version[0] + sys.version[2], + "site-packages") + else: + if env_base: + USER_BASE = env_base + else: + USER_BASE = joinuser("~", ".local") + USER_SITE = os.path.join(USER_BASE, "lib", + "python" + sys.version[:3], + "site-packages") + + if ENABLE_USER_SITE and os.path.isdir(USER_SITE): + addsitedir(USER_SITE, known_paths) + if ENABLE_USER_SITE: + for dist_libdir in ("lib", "local/lib"): + user_site = os.path.join(USER_BASE, dist_libdir, + "python" + sys.version[:3], + "dist-packages") + if os.path.isdir(user_site): + addsitedir(user_site, known_paths) + return known_paths + + + +def setBEGINLIBPATH(): + """The OS/2 EMX port has optional extension modules that do double duty + as DLLs (and must use the .DLL file extension) for other extensions. + The library search path needs to be amended so these will be found + during module import. Use BEGINLIBPATH so that these are at the start + of the library search path. + + """ + dllpath = os.path.join(sys.prefix, "Lib", "lib-dynload") + libpath = os.environ['BEGINLIBPATH'].split(';') + if libpath[-1]: + libpath.append(dllpath) + else: + libpath[-1] = dllpath + os.environ['BEGINLIBPATH'] = ';'.join(libpath) + + +def setquit(): + """Define new built-ins 'quit' and 'exit'. + These are simply strings that display a hint on how to exit. + + """ + if os.sep == ':': + eof = 'Cmd-Q' + elif os.sep == '\\': + eof = 'Ctrl-Z plus Return' + else: + eof = 'Ctrl-D (i.e. EOF)' + + class Quitter(object): + def __init__(self, name): + self.name = name + def __repr__(self): + return 'Use %s() or %s to exit' % (self.name, 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) + builtins.quit = Quitter('quit') + builtins.exit = Quitter('exit') + + +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=()): + self.__name = name + self.__data = data + self.__files = files + self.__dirs = dirs + self.__lines = None + + def __setup(self): + if self.__lines: + return + data = None + for dir in self.__dirs: + for filename in self.__files: + filename = os.path.join(dir, filename) + try: + fp = open(filename, "rU") + data = fp.read() + fp.close() + break + except IOError: + pass + if data: + break + 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): + self.__setup() + prompt = 'Hit Return for more, or q (and Return) to quit: ' + lineno = 0 + while 1: + try: + for i in range(lineno, lineno + self.MAXLINES): + print(self.__lines[i]) + except IndexError: + break + else: + lineno += self.MAXLINES + key = None + while key is None: + try: + key = raw_input(prompt) + except NameError: + key = input(prompt) + if key not in ('', 'q'): + key = None + if key == 'q': + break + +def setcopyright(): + """Set 'copyright' and 'credits' in __builtin__""" + builtins.copyright = _Printer("copyright", sys.copyright) + if _is_jython: + builtins.credits = _Printer( + "credits", + "Jython is maintained by the Jython developers (www.jython.org).") + elif _is_pypy: + builtins.credits = _Printer( + "credits", + "PyPy is maintained by the PyPy developers: http://pypy.org/") + else: + builtins.credits = _Printer("credits", """\ + Thanks to CWI, CNRI, BeOpen.com, Zope Corporation and a cast of thousands + for supporting Python development. See www.python.org for more information.""") + here = os.path.dirname(os.__file__) + builtins.license = _Printer( + "license", "See http://www.python.org/%.3s/license.html" % sys.version, + ["LICENSE.txt", "LICENSE"], + [os.path.join(here, os.pardir), here, os.curdir]) + + +class _Helper(object): + """Define the built-in 'help'. + This is a wrapper around pydoc.help (with a twist). + + """ + + 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) + +def sethelper(): + builtins.help = _Helper() + +def aliasmbcs(): + """On Windows, some default encodings are not provided by Python, + while they are always available as "mbcs" in each locale. Make + them usable by aliasing to "mbcs" in such a case.""" + if sys.platform == 'win32': + import locale, codecs + enc = locale.getdefaultlocale()[1] + if enc.startswith('cp'): # "cp***" ? + try: + codecs.lookup(enc) + except LookupError: + import encodings + encodings._cache[enc] = encodings._unknown + encodings.aliases.aliases[enc] = 'mbcs' + +def setencoding(): + """Set the string encoding used by the Unicode implementation. The + default is 'ascii', but if you're willing to experiment, you can + change this.""" + encoding = "ascii" # Default value set by _PyUnicode_Init() + if 0: + # Enable to support locale aware default string encodings. + import locale + loc = locale.getdefaultlocale() + if loc[1]: + encoding = loc[1] + if 0: + # Enable to switch off string to Unicode coercion and implicit + # Unicode to string conversion. + encoding = "undefined" + if encoding != "ascii": + # On Non-Unicode builds this will raise an AttributeError... + sys.setdefaultencoding(encoding) # Needs Python Unicode build ! + + +def execsitecustomize(): + """Run custom site specific code, if available.""" + try: + import sitecustomize + except ImportError: + pass + +def virtual_install_main_packages(): + f = open(os.path.join(os.path.dirname(__file__), 'orig-prefix.txt')) + sys.real_prefix = f.read().strip() + f.close() + pos = 2 + hardcoded_relative_dirs = [] + if sys.path[0] == '': + pos += 1 + if _is_jython: + paths = [os.path.join(sys.real_prefix, 'Lib')] + elif _is_pypy: + if sys.version_info > (3, 2): + cpyver = '%d' % sys.version_info[0] + elif sys.pypy_version_info >= (1, 5): + cpyver = '%d.%d' % sys.version_info[:2] + else: + cpyver = '%d.%d.%d' % sys.version_info[:3] + paths = [os.path.join(sys.real_prefix, 'lib_pypy'), + os.path.join(sys.real_prefix, 'lib-python', cpyver)] + if sys.pypy_version_info < (1, 9): + paths.insert(1, os.path.join(sys.real_prefix, + 'lib-python', 'modified-%s' % cpyver)) + hardcoded_relative_dirs = paths[:] # for the special 'darwin' case below + # + # This is hardcoded in the Python executable, but relative to sys.prefix: + for path in paths[:]: + plat_path = os.path.join(path, 'plat-%s' % sys.platform) + if os.path.exists(plat_path): + paths.append(plat_path) + elif sys.platform == 'win32': + paths = [os.path.join(sys.real_prefix, 'Lib'), os.path.join(sys.real_prefix, 'DLLs')] + else: + paths = [os.path.join(sys.real_prefix, 'lib', 'python'+sys.version[:3])] + hardcoded_relative_dirs = paths[:] # for the special 'darwin' case below + lib64_path = os.path.join(sys.real_prefix, 'lib64', 'python'+sys.version[:3]) + if os.path.exists(lib64_path): + if _is_64bit: + paths.insert(0, lib64_path) + else: + paths.append(lib64_path) + # This is hardcoded in the Python executable, but relative to + # sys.prefix. Debian change: we need to add the multiarch triplet + # here, which is where the real stuff lives. As per PEP 421, in + # Python 3.3+, this lives in sys.implementation, while in Python 2.7 + # it lives in sys. + try: + arch = getattr(sys, 'implementation', sys)._multiarch + except AttributeError: + # This is a non-multiarch aware Python. Fallback to the old way. + arch = sys.platform + plat_path = os.path.join(sys.real_prefix, 'lib', + 'python'+sys.version[:3], + 'plat-%s' % arch) + if os.path.exists(plat_path): + paths.append(plat_path) + # This is hardcoded in the Python executable, but + # relative to sys.prefix, so we have to fix up: + for path in list(paths): + tk_dir = os.path.join(path, 'lib-tk') + if os.path.exists(tk_dir): + paths.append(tk_dir) + + # These are hardcoded in the Apple's Python executable, + # but relative to sys.prefix, so we have to fix them up: + if sys.platform == 'darwin': + hardcoded_paths = [os.path.join(relative_dir, module) + for relative_dir in hardcoded_relative_dirs + for module in ('plat-darwin', 'plat-mac', 'plat-mac/lib-scriptpackages')] + + for path in hardcoded_paths: + if os.path.exists(path): + paths.append(path) + + sys.path.extend(paths) + +def force_global_eggs_after_local_site_packages(): + """ + Force easy_installed eggs in the global environment to get placed + in sys.path after all packages inside the virtualenv. This + maintains the "least surprise" result that packages in the + virtualenv always mask global packages, never the other way + around. + + """ + egginsert = getattr(sys, '__egginsert', 0) + for i, path in enumerate(sys.path): + if i > egginsert and path.startswith(sys.prefix): + egginsert = i + sys.__egginsert = egginsert + 1 + +def virtual_addsitepackages(known_paths): + force_global_eggs_after_local_site_packages() + return addsitepackages(known_paths, sys_prefix=sys.real_prefix) + +def fixclasspath(): + """Adjust the special classpath sys.path entries for Jython. These + entries should follow the base virtualenv lib directories. + """ + paths = [] + classpaths = [] + for path in sys.path: + if path == '__classpath__' or path.startswith('__pyclasspath__'): + classpaths.append(path) + else: + paths.append(path) + sys.path = paths + sys.path.extend(classpaths) + +def execusercustomize(): + """Run custom user specific code, if available.""" + try: + import usercustomize + except ImportError: + pass + + +def main(): + global ENABLE_USER_SITE + virtual_install_main_packages() + abs__file__() + paths_in_sys = removeduppaths() + if (os.name == "posix" and sys.path and + os.path.basename(sys.path[-1]) == "Modules"): + addbuilddir() + if _is_jython: + fixclasspath() + GLOBAL_SITE_PACKAGES = not os.path.exists(os.path.join(os.path.dirname(__file__), 'no-global-site-packages.txt')) + if not GLOBAL_SITE_PACKAGES: + ENABLE_USER_SITE = False + if ENABLE_USER_SITE is None: + ENABLE_USER_SITE = check_enableusersite() + paths_in_sys = addsitepackages(paths_in_sys) + paths_in_sys = addusersitepackages(paths_in_sys) + if GLOBAL_SITE_PACKAGES: + paths_in_sys = virtual_addsitepackages(paths_in_sys) + if sys.platform == 'os2emx': + setBEGINLIBPATH() + setquit() + setcopyright() + sethelper() + aliasmbcs() + setencoding() + execsitecustomize() + if ENABLE_USER_SITE: + execusercustomize() + # Remove sys.setdefaultencoding() so that users cannot change the + # encoding after initialization. The test for presence is needed when + # this module is run as a script, because this code is executed twice. + if hasattr(sys, "setdefaultencoding"): + del sys.setdefaultencoding + +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 - uses site directory is disabled by super user + or for security reasons + >2 - unknown error + """ + args = sys.argv[1:] + if not args: + print("sys.path = [") + for dir in sys.path: + print(" %r," % (dir,)) + print("]") + def exists(path): + if os.path.isdir(path): + return "exists" + else: + return "doesn't exist" + print("USER_BASE: %r (%s)" % (USER_BASE, exists(USER_BASE))) + print("USER_SITE: %r (%s)" % (USER_SITE, exists(USER_BASE))) + print("ENABLE_USER_SITE: %r" % ENABLE_USER_SITE) + 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/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/sre_compile.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/sre_compile.py new file mode 120000 index 00000000..91631c6e --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/sre_compile.py @@ -0,0 +1 @@ +/usr/lib/python3.6/sre_compile.py \ No newline at end of file diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/sre_constants.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/sre_constants.py new file mode 120000 index 00000000..1cce1625 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/sre_constants.py @@ -0,0 +1 @@ +/usr/lib/python3.6/sre_constants.py \ No newline at end of file diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/sre_parse.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/sre_parse.py new file mode 120000 index 00000000..e947fb28 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/sre_parse.py @@ -0,0 +1 @@ +/usr/lib/python3.6/sre_parse.py \ No newline at end of file diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/stat.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/stat.py new file mode 120000 index 00000000..233b0775 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/stat.py @@ -0,0 +1 @@ +/usr/lib/python3.6/stat.py \ No newline at end of file diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/struct.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/struct.py new file mode 120000 index 00000000..1f8a0f94 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/struct.py @@ -0,0 +1 @@ +/usr/lib/python3.6/struct.py \ No newline at end of file diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/tarfile.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/tarfile.py new file mode 120000 index 00000000..f4a69763 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/tarfile.py @@ -0,0 +1 @@ +/usr/lib/python3.6/tarfile.py \ No newline at end of file diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/tempfile.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/tempfile.py new file mode 120000 index 00000000..09a444bd --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/tempfile.py @@ -0,0 +1 @@ +/usr/lib/python3.6/tempfile.py \ No newline at end of file diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/token.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/token.py new file mode 120000 index 00000000..59e8a752 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/token.py @@ -0,0 +1 @@ +/usr/lib/python3.6/token.py \ No newline at end of file diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/tokenize.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/tokenize.py new file mode 120000 index 00000000..dc97bfd1 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/tokenize.py @@ -0,0 +1 @@ +/usr/lib/python3.6/tokenize.py \ No newline at end of file diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/types.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/types.py new file mode 120000 index 00000000..3388fdce --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/types.py @@ -0,0 +1 @@ +/usr/lib/python3.6/types.py \ No newline at end of file diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/warnings.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/warnings.py new file mode 120000 index 00000000..28ff3000 --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/warnings.py @@ -0,0 +1 @@ +/usr/lib/python3.6/warnings.py \ No newline at end of file diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/weakref.py b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/weakref.py new file mode 120000 index 00000000..1c730ccf --- /dev/null +++ b/week-0/day-3/my_todo_app/yournewvirtualenv/lib/python3.6/weakref.py @@ -0,0 +1 @@ +/usr/lib/python3.6/weakref.py \ No newline at end of file diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/share/python-wheels/CacheControl-0.11.7-py2.py3-none-any.whl b/week-0/day-3/my_todo_app/yournewvirtualenv/share/python-wheels/CacheControl-0.11.7-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..36659e5fb7b65436e89d778eda8f3909bed7d4b9 GIT binary patch literal 18720 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 Obo!mrh;t=jUHt)|Z35N+ literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/share/python-wheels/appdirs-1.4.3-py2.py3-none-any.whl b/week-0/day-3/my_todo_app/yournewvirtualenv/share/python-wheels/appdirs-1.4.3-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..4c1abd7ef53f59c2f974ecf2d09b84e31b55f523 GIT binary patch literal 12139 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 Zf<}2MaEO22efzUx{z=z)=>EC;{{Xs7sp9|u literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/share/python-wheels/certifi-2018.1.18-py2.py3-none-any.whl b/week-0/day-3/my_todo_app/yournewvirtualenv/share/python-wheels/certifi-2018.1.18-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..144996e06cc8ba53f4bdea554705883e120be146 GIT binary patch literal 150807 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

;>YUS{A#%)2 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

-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

lOB^utP3PxpPV>|tv2!@#E881e`TlFli&8;1g z_pj~dl;bI+m6D@Y+Gng%>vzmSJD~kOQ_s%neKD$&to)F}#9oAd*8_^{r{Wf!PWtYQ zl5&}Gnee`8`a0sGL-WLkd>qf8Iv3d=1akHOE@av#@R4#m>75CzZ2NGLDO}fuW6X^A zhdy_m4x4m6Xh!R;asPVY3|tV0tH-S!`8fNfChddIPX@({nw;cJ4;q~q-pNr*hWY*Y zl}R68gRnH{I-A!x1yv z8%Frv_9Rwv1S18~zQb^~KP3i)Pxhg%Qr>DBZ7sD7wW)2isdf0gJF7jeB968b5vst81~8zv)kyS`CMOC^e~mhapM&h&~7-tjge_S3diW zj-2ea#aAhm`SVcwj#lZYU)GgZb{s>au6PVv<*OqwqdB)-@4Wzzd3^#|EB{J7|1|Ig?C52tM6Y+~g6!zM?oN!uN;BXwV> z%iz(HHnBedJrfItHE)c7Y}nMvB1T!~&7zo~#!CbgUE&CRd6`K_HYajw;91AB{4+hy zgmifx@UWYDQ>t*vXP>>=)T%UR&lLSm5_3gpw$iNWyMr_kq5)nPtc>>8Vh7>AUdCvx z=na>{6{p@^7RD(HMlD8FB~>Y>DOY2U^!bZ!j?{Od;U(`fA7uP{ z?^#G0RIQS{y*_lb^g*N3%9fszAzo9gaIi7k+9Lc|&_lN~HyolW; z`MHzEgwMZArQlabD#f?#D z!abTP$bIZM`_B!{8w*SkO|@W{R!a}USZYO*B)QH>p%dNXvMqdJGEpvg_8T+6m~wX% zO{@zCDCIGdiYPSIJ3P-`Gtz5Ky5CRM4{(<_PU?m>=iAC+w5(cggONwL z0lH&+BrbMkMEU_kwpp|vp_!(TUFa@5{#6FJ&P?b%|2{D@W%7#5(3?NEl|56+K9KrN zObV;9Kv?^qqX#%WF#v_YV6YCcf`j=8pY>7-6r>uba0?QH2bHK-X%nQ`BDCr-6mnTH z=D;89_{sYne67$=m;wM^lUw(<$AUY8+8o2sbn`ap(U3P9`-ejFo)7GR=jHv5-M{8l zoO>h)dG^<%mCmOttv#h#DDPJ$u5Nya z^Ga>18XswT06bUo+r7M-*aF@lfx14u*g2Zlc#FD%;kz+k{KFMMf{ZP`Ory8!Lznvc zoe#tgfFb5ABeNJ1zyweoI<-al$Ry?01z62Fd;H^htJgKsyE4OJKUI5yN4_O2>lq_h zP{NS&VC92WLm7dY=zmJ?-UB)!$#o|cx3#B;m|~W*xXw(TIw05q!jd^^N%FO`J@wlG zWxQ%I(Oc=?>=IfwWYTeDQY$1F@Zi15a@L<6J#d2tuvadEG_NgcLt>iY$S6x_@B~4A z#d_CuU(B21Y_iGPpfKhRUfPQ-%V=G1(o4pk6!p9&uBmT*%)l;*o(pjSq_H-| zSa~2;IALffcT3g#Ge12aju!SoTdN0|h6l1wytp^>CqgU3W(ioo9L(>BFMb3}8vE|{ zrCzAr_E;_q^ac~j55=4msfb&Az)c!)&m3%-ANb>8w6I3cEvmcwYcIc}A=7f*Sa0LT z3i8l>rH{A?qw~QbQS{?N5AnY|jh(TDt(lXvfwPH?fswg| zt;v5LrPXijHrSCquY2}qy~7*ZwKffVGYEUL7A>O5beTNygM&+oIi)@ws*F5ye9%~`7D3UnGZXg9jY7) z&n3&H6&1^TlO&_Wvnxj$MBy}9F{H}%KcF&boN?jKQ?-F&-QF}d)~B(^XsR7DW5}Iv z?pLN;p>_kMT{lr()f?<_=8rKGUh9$l8OdO9SejIPI1gSY5com}54uKnNh%0X5cz91nEGk?q{|J+ zE0tgV3{G2=!$ykAg`!$WyCdyM9FEnl6Y?)a$fRzo972!ZY4WhAS9AT_^vlC-9!>f& z;D=b+#6%@C0^1o)bDAKfo$8vJUY61Q_#LWB>|6~@u*ye~!ujIHu&SYP>a$p5SBa!u z1kV=o@K%`VMBpA+lv*?kuPiPGNu{Bl5jP2X3AcGb0Q5V528$$v5j|x=xXB+#?|mKD zr_BpXvGiL)k0(f|RKSxrj3I59>Rp|9%({luUojcEO`F&OXwwx^T@Pul?Q-i;ESCS{ zV!Lby58>?HRuHfK22QN2GAwi2|C#{e#cja$H>+_C)w3}^v4^Mw%&1JzSa5dScuKKA zK^F#eMX;%1pSjZ{3aTgw4YS@?Ek1R&yhs<6CaR|#bFoeb1|RN!UZ<~IFexv-ni(G* z77KRP?NQ#`LNMTved&}1^=PVPqv)Glwx61VRu^8bp3gd-!xq@*29Q!x`4_MJ-X)Q_ zELmr%dg!I(^MMz{NZ7aw!yiBzb+fl3-N~Ksx#3g`=facg0MIC}klHTWi-|p)uB(z& zq+K2lF;p{4lddOm4uYz)8vIlNiCQT1i3d$o-iF$0=v% zJ^y?lsXi?HCHO1WnHSC5YVUW&X8_wuY1ePSkAR1cQaqI zVQw7{j<84@euwaxP0pd^hXLz3(ze2(1k|3iXZ$Sb7#+2ml{P2*WjieOYyqYH4p)u0 zw_gv_ZX!0vY}Z%Rcq1uh4WWN`oAp}hPqLRfs2`M%y=%45ET(JFBm3ufgK+}A5{Cu@B;sK46jmo zb>a41*UP>2=;(VMvs!2X?}~4{85qAgTQc$R61qwbGEh(RzA1Tv3JlW^Qvu)aySY}l zFekM<})Ghe&Kfx>Bp+_c? zKLHK4KLacBe-Ep6HueVp8B%}Z8SK^t{}a!UGZ-R4AM(2^=~zEpvI<3Tm2w}g`pTi} zydlbUrReJg?*W;ZEPlOf_2F*2JALiURe&E${N?UfqdUq}BGkc};XP{Zp(~HB%%5j9 z(bc?IZ$1o>02pY${pw)yt{3{_K@I|XMq<+rmpQDO`E^w+WKIw> zKUx^%;DMT_wn!M`DPRtp5K;=FG@KGl01h9BWK4_O%^3IdZo2^Qj;kS@KCNee%RAj< z4LG3w6hf-5ou%R10G2)(Bko;LI~^}om5B)Roj6%otPC%?2_`MT=?<+FG0G*=9L3EI>*h;Wx}#9NzDN#Sob-oW5J zWliQM6>KBWKhY01=SHKeeNXnBugsm;Z~-p;IWq_aZ(9QNDlH3plGqn}I4cH))_(7$ zZV$9B7Pp{XnLwc1YyetXj+ItXODpbl4r{p(M{yq1n4CA=`o@u5{}s`nt(Z!Y#RY=z zOI%;$mJ`7+toM}newRbvu5&tFNK;KV|;s}PrJ7D>KItn9fTiL25`$)QvP zB>#In`Dl>#s%z?6PAb})STYkTn)TGmeFs^JkDyX5`#lW`35$J!d+35a)Qo zcaJWjNjMGVA`EIo$)cW;D9dn#yt)Jak+_926~LFy-*+bYFcPM8$ENNaSCWM^V!q=K zJ8)`uZ<1h04Mcsh$rP+g0~@NCq&cFaK=wIfiSPJB5ez5Z-4B@w;4qjCkmk?vmc(Hg zbp8^rl*C#vL}xf2V2Ra{tt!N*)2I&Hf~IX6_xlWunugWsNQ13eg)b)k5F znw|()5!c$!Da|()n+(CfRaFLbEzoqAh5)*TaWXd2&0XQX!yTsQ6%YTL`3zPy*89^F ze17z&NdHxvCblj%PCqT7I!V@UpAjka<_*0tXC0RMZ?c*M4Vz#dJ&_P;)uJ-v7|zi0>7)z{6f!YpcBukzjSNH4?9;E!*b-gnNL3<)pc4nPZn? zalQCFJOeXp-N6})p3#IudnYTdsvPl?X>hVZGfAy!Wub(MAp zbg*c@aJ7DI_Kv^L-9}=h+_)MdiUGIeU_`w!mGu#o4DIu#e1XDtj!F}=r@vc|b_$^{ z+*~}b+44F;(wZ9VzCXE+*b1~Ox2)GTX;(%Mq@O@E-A_>qVUd20)F-dIwCnUdFW`6g zgcc#%Z}S(FO;s%v-fcjiTnWw<`Dm4y(68t%Qt{k}=DLpbMs@j41}ZN68nDNQL&4za zLJoFd=Cb<(Ezi+5$UywpPhb1v9~^7smZtal?iy_tTQKd9mgUc_dIYnmfS*{rUDEhh zyfSO(Qtz%S#%=GWdNBmqT^8r9nC+ymJNzT>?b_-?F3z>7CdVo3 zpVhwI;rj6|c+)6WCuSPs)v9I z5zm4p{j<$2ym2&l$=ICJ)ySvA@Er24*_M9U&xF-c{)}l|-Km4>jQ(#Qs#deH+yBuYOxI$ODS@M$2v{w5HAKi+sA@*> zg{n@`Z|NpD_H;M;_Hm|lY&Ly?OiuIiJWR3#F)(Bjv^wp0C}VkvxZ$+gbL7Aa^keT# zER)eLL$M60>(rrzGK=lvu-~)DD<4ZV1%_M8RXRU`ab)q{+(9e1iGni&FZc_6DYJ4L zYLhOQHlp$xhDzt3m99%Ae-i4aNhfcRgiPwgP5AsIWS}c!SapyjAUxLA`VobT zxj{l$z;r(??G}nX1v>!76krNp9nFd?FQ&B{fMn9%VUKxrsk#F=1hH`#QI5SDQwqv* z%Ou~Fn3`H>$zYKG%1pA5xq^DN1%*Q^U^!(Epdv%0h5IE%?sG67k8NkT5|=nyFGDPe zrT*&9KC(81c&+qZL8WUqi`y%$oR3&_Os3 zS5ju!982B>@J`aCt{i9qXZ0Mscnrlw1%nkm>iR9qCsV9p@}wm3|55f%QMN=&w{F?C zZQHhO+qSjJw#`+>D%-Yg+s3KgZaeqhf1juGH1lb;k&!tvBO{`JUGx<879^NO*F!D4 zQTUwujIKcC>nib-xD1;AWh^41N6AW1V2?N#;gKRm$#qZ8%2=2D*LG9)>7$GNE6>X} zAS{691ka)DrB;V1ty-<{5G>nbDp~BGs*~iB^2;Rz>=;IVhWYS(0+?V`BcZRYM&mIM z{PvopfjrrpBw~<}xU-T+OoqnQDwH@6X^2~2P@18N1z!3WRgr5kyQ#~^*Nq_qB>6vY zcNrM4f0f%yOAcOE9}KlNv=$yvJ#pWCwF_2Fg~^t%HL+GDE!I62CmI1!QBjx7*p-=o zaxi4)+v_gST^fgB^#C@I+Enz&6qU%uLeIfaK#M#xXISnfDgiT&&$gjdYe0S`Qz?Ot zu`~LgGF5=Eezp}`yQDQ`&4I+$lg&kyl0TjX4|ikmo_LmmJ{P#=%85IZ$Dr(6k|o+uE-OGXt2iN^U+V z5d578vCKXPx-{?AO&a`#&tuiio3|FpHUdtmK7=6*bgnF4Q&V6NcSJjOF zCiqdN#EhcE88fN6Ofd6F08ejLD}?+SH#T+kcOhAp_rCd=Xt%YS|6!)Y zi3x>RESjB*eY!VG`;^@)jn^OZ_JZ~?Gl_H4(O~!WYB*yWZEuhl+p}ts=6f*dd#|TI zxdq}h^7yhle$C>Up$ooi2z?)GSzySQk4II{@Xl(L@5&W;e{TFQ0X*_MR|VDyFaP_0 zeQ5SU85E-YCKPa#|CLlY8#~+nCKXp1w#xew2qQZWl*r3sKT}Z7{mmhC4FT8j4z0+|2KF^1Sr4YBuxl1fr z4*M6ZmH1unWUgP>t&sfMOEWc&g$FTYGd%JQ{f48+vhs_8kv1D@TeA*#-P}WzPkbzU z3KS1C5E{3POszv%6*d-s&L)4=3j2O)5D8DbiUpOUuaOAIu4Tw-Av+hPSIV|FQdLL`p8ZUO>zwY*X+PW(j zTYXoU??$C_kryq|Ci11RF@cV1QmuVB;IV*QvR#fLk?)?BTUeX(r}SEX>=qby3(JIY z-(7uYtu`AkxE}2v{bnr80AVPLP?VY4NPeX1LkP+7%$!Jo4Y|La&RbeL`QT?f3*e`I`-7!l;6qQf12c_))EGdrW zBwP7$bbx@5(3?XF=y7J0EjeC319Z4u7mpi#_|nGEoje1ufwdF$W-tBL?vXg9N@$K` z38=R)uT6DWxwvo*V{O&30PPA@&d)z|i)?%I91_RNoa@;E;HbmM>C`2UIJ8r2(5xqt z=Yndg@@41p($ZD|@>;^Byim~swB)P^eNX|%V|4EqNaYebLrf}(Iiy7B( zL|>G#Si{^N%Zy}Zwr?*e#?}hGbDmsfrV?h5wSzHvK-!#q1(h!MwqCHjSQTAR{7IXO zGO}SGAEcpED;PD8rF)XH+EbL$>2oS9LHUq4FUst@U|Az>9OO^@TIFlh5v#28b%6A} z!`m#0pb`>`nuaY5^INfVyNTytm*o=n;2!qte^_d}cjmJu}G5iN{VM-Ock&o??Z`OIv0cb6pEn+f@mr&!G@P{|!&|Nvy50*W~iqrMIW~ zd&H@&@_+xkQPE!uXX;dNQt?jrWD$p*LiyMc-yfK@O7ydVVC;>eiT0%))gc|3dlEcA zxUpT?0ft#ZK6<*_VKat$!=V_WQ|cgq=l{l1=v}NZg@U)`J_EeYRbIW7G}enooDEAS z)!U*~Xq>&jY=3^Z8ka$5*&TsM)Gurpnw%l#j(pcl+*SLPBS~MOP%G+%8u|z&GwCZ? zi{qr1LfWO({wV0xV}oD(l3E-VcF!;4We@7_9lvewbND!(?T#Sk1N0#@%LQP~C+Pn1 zq~@ncmbj&t_5@dtt&jc;CtL)*>WzOow(UBk1J*|1Mt&nu#7Izb@u^9m8?@RikU4WD zRvZ=Cz?@(=>FG`MwZ0Q8(Gywj5nR0Tp2hD&Q?;fBj~|82sDH9&OlkJv@%kEAd;>3e zr_ha?=;t%x0nlh9;4(9LH4z%-zux-O5(bSIgBw-dEuzCMI+NJj@NFv%l(j>{2MHAA z+{p}KBjfCi(7N0L9B3^sxrYQ+{0;g)J5dDegR@k>iF(OzC+h!SGBR~Fw)+1@g{#&4 z?bjs`zVhT5tyEB5f}yMB+R4t(AmW2l_4~zCRYaGK&{iwgL_01T9~XACH!y7SSI(_O zp|*V=%#NontLW+E_+2)-ZeYuItlh)(((FEpp24~Pbp6$d@7ZUWH=-no`dfXR9bC}# zPF5JsnyjZ3-XvxUekExL8jt%uN!+xTxfpZ_3AY=znHg`(k-B`L5gD&pP~2C!O_9?X zkUlI`c2RIVdCxi340%vbU5dM62CYslz2p{?X}|Lg8JTno)>Ify24`*254$qslWR7w zHgClkRXwk&+%XI_7jQPif;OiV#j1-$)M$bl)8bZQlFDBkF(|{_UB?;O=!R%x$xbhb(PpmfQgWw5pob2=Mma@xwGW5B z-Xr$4ktM4x`0)UyNgk#5Zxufa3TLCV>jA)f93w17WQ1c4b+^> zZCMD>VzrR@)$(4okg?>-4HMUH5ZrU@NL~)|kUG)b0VP|5lAdfbA!e{Vi6^fR^jgSK zKTj$i$3wfIFybUkJ(pQwP`1h3hm7gXVk1E(jxV1@p`GHo>?peSHPqVU%Hp$~KZ+w0 zknxLC1cEv*Bbf}GIkK#nD~z;yjqcS~Vgun7v(%-F+;sqI=)Tk0Fx}0rOvv|Ue6C~!lHAL=0W$>M*ZugfacmkHI-9}%P&a*;BTIcW1-L2y z@oyp}xMwia1pwP7z=-DB@+(n-BsP<2&n{Ks%^@sB2u0Ac6BHz1mv;V!SUmZP!LfGm+22zcxPql$(g-(}#!;XBs?z9`3MsA9=k)}$WVgYL! zGWvbr+!iTaPWE6+&5i9?2-L0FUNc!w3N*0NdoOPeYt2KycKh)AImQwhIbr@g(tLQa z86YY2sF!!?d*caQVO*hwC%6kNz?SNt(!g<<71L33UId)vZB@eG@oAmb+{`x{!)}vo z4^gAq`6S6r^u>XRm3R4RwdfR4G4)2Hr>5V<65L~BRpl_|P)!I&mrXL1cC7jpe*7w_%t7J8`;dZKBUk9g zm8lalfVhGY`)M%C+mODO^}8!l#D7RdXI=zc#iACrZ^RZ1$xq*U2768pz6-O^JjN6LM$+7~erWMVm+0-*sQ&lU^-&Pm)9`n;`JCmy${?=B)=vN1l{nKn4plrcwCAN( zB7$DbDt-KKm2^!LH6WP0HA5Y&#o<>F7DsxK<$GNjw)e01=p7H}vy@q}E=k&lim8~` z@KKEPakci&xB4~z=iQ~Gr_b~5UeXEt#Mg*C{%7@PQhke@T?+b*`_Y->&&2onegh9j z=T^#>>)YAw&d0<=)aTdUKw0HiR#etNeP`R|O^w}n7LN1F;l<*=%C9Lt^Y6M3S9j0X zR_@e+4yOm$OwRAI>*M#Sp^>d0q7Hr?-IJMvk%2jU$yOe2oR$~+*p8^It&RKle<(kl zi$jQ7`1~hIH}>Q1@OEkIADJZGoS$}W?w*>{nBKb6?kgP!wH+-Ra(Fm3cCjBTc}`h7 zx;x)#KFZ_r=p+8g<{uOKu^;e9a*}ZN<5LAZA3hJ?4o{{(lob|Rs{As)1azI6w05)Z?KrS7k; zkB$62yKKKsRBl|EJl>i+dtP1Bto;6Ml!>N9xg^Bp{rqy}cyzw@{hY_~fqqYXC#7;= z%JS{1RenSA;v>l|X&nEZSGLIC`K3{Y6wro1mZyw=y+?XJjt)NTz_QK1wcGGi z{>AAUp$X3YoMTZ*k8g(k=ThJE^)T#*`0pl{Wd97kg4*@@*4=G^PN!G`<7e{omp=Ou zaA)ru*^p)Am@z>Jc{q2N#__Bs{oAb%exP$xI z8+Ym3#SPw@cg5YujjLHd!qr98wzl!~>@vUJQw`nB_BGu&yuK}Z4~KaEkv_ZBg2uN} zccpvxXKT()+MS)iHP6}E&DqK)rHpT(V=2(xtG=1v#kUO8h3`FPW@Mcm{7(M>y z)#p-FUS1Aw>&xpBy!niNcHWl%+y3QQlKRQZy}zVoH}@ys_4d~Yygo1gM_kw&pE`8# z)9%+0Vv?lu+f14G-O>KjQBAgAMzUNIb6&TX%lGY$J}>Xj-kzu2_jPeHSMIUDFrN`e zwQ-)jwDyIiuGNfqH??t9nJM18Wdv4dWtk~vDh~VM%4uxWg3|KQBMBwVXXyFtJjcje z<8tPW5yso>eJv;X%*CL-q!*SNpA3%~9+HNkSxP?itpwXc!o*5y9Hy99DU31_j`?Wx zSoq^cX0bGfu?Z<;<3iHBHXZ2Auk#Bdt@sOIH`-3$K>AH8DLbNU1$BokWOTT-CgS|C zqI^)(@l9?Ay|tg*JVVQIZ$q8gv|7WnZr~~DA2|6 zlM*6tG+l(HeyJ#~dtIdL#Zw?(T9d%X{mtoAbs2Tu;h4RalF(Xlt#!R`wp2k zu$#(RBqUW;_wf`_y4WSYV#p)*XTz&&^Ud(2;ZbW`daD#(zbdg<-*`ZY_NAq3`L6N|oMfvLuk~6-r^*t!wAe>wX8t!D?|YuP*;1&^nvh zs!Wjdffj|c4?fs=+HBzo;QRwdVl*JqHjy zJgjw2(E`(6ov%HhC|=ANj6)RIxZZHah)$R9Jm&-$?L$7Ws)2j~2AIlg#3qvO!odcg zI|#ICZ5gn|HAa?SNTc=&@J=QR1PM>At#?=8dLQU2UkCYZG=|9~U=(16ief%e4?!^R zxq@&Vj(q!O9l!ES3NgA<5eAI#$!}LylHm{rYdy0U)sBno4lI zW`vaLR>Rx5lj*PQmhii4T*t0Wy>Zhq5v&xjtDISgX?R;O2CjLSs6hageYq6!k&>i= z&~JIk1#pGg{`_yZa3xT{fK58_aM7|M1E8ZJ41Bt9t7XM)Pc=wZITHs+mP48xM7lbk zah8GmcZl$W!>h&Z5XUkJt3=yA=HMou9V4hc>i%s;WCwtE1_okEx;fig_=m1y2pgE6 ziXccV#OkZQ9cD5Ty4Aa_CcBskGA#lOmlnX`1AQY*HD4y~8*2IPLr(BNqyy@^W+WdZ z8P;Jir#*zNS|tM}xVbD1@Sk)mdkNDeUNv9L7BT|Rg4%-QSSl_BJ3niyCF}|_Jy6WD zbA!QXeiwp&S@>>1{^0oB`K#oxXsVTX_XEeJIwnlc4q$~Nkz9u60DGaBwBoOruJ!*6 z8R~YK3u)|@1;XvxSDVOfkSkE5FCmZ+CfkaM2th1~0BlCmJ}%`yvGXw{XNg$MncYpM zqUfD0IBsHm`SJ5u#`0X7O-4qL5HYIlT~cV`;f23#neO%DavrpoYt zthsQd22CmSMa)zXC1U0P&n;qSN3CgGBZEc;hcaLYiViG8A<_X9a-J~Ydy@#JnCMW& z0S#@0Q-fmUBNn$2kc7~X?fzrs0>mc9#0eG6Wgy_n`dCiUHg_v=rs|pq$qV&E2Qt$u zd7q$2pBKX)lSLv;_FQ_z$;BV9WaGcrIqHBIFT@lcI$36DtCD9KM(~{7FgBB34ouCX zVhg7gUVtHueZVw*2z*JFDBi1xnmA@lmEZ^s3AU&RwRm?rXC@+}W@=OMu3ABZLz8`q zWO6RJo~i8?C^C)#-fr+MOI^}Bzl7X&ZYZE{ZxUY)C+J1A3XA4f88xza*W;E+iLlC~U znp>_?MPRC^t6{s2Y}6tIN{vOQb(Nu^y-MCoa}vUv@jhT!pNKW7S2t@_A%Ic6Wu=aS zZkrueg_?P8U)bY+hblitzMrjtjS|?+APoMQ*DL`sh>1whCSQrg zzMd8&6*CB+%2Z|nq8FL4-R_8-pf<<4XPKG0{i<%(uz;F5@l;I4a?D)i!Zf~>h%>(! zY3%`+C})$xstK;2h+0GOs)=K&$_Hx0*8|F`gfIi1NqOZDJu*lYJ%50}Ru38;9k^v( zO)0t9Qkr9ok3c08R|0hfXVGIIRR@t_Q0T=R@0ch}D2tdGfJt(nBmzm19Arh3(SmC| z8DS~LMW%-Z;T6#;PPq^QPZ1T?5Cc*%)O*1y9IrnPfo-;C2Dw~OF6AWD7u2$4YLp_x ziZNY@#<)W&xZ%Lu^~lpBiqY+<6W^}cVWs6lv+3>ZdwMai#V**H6dytO33{)c4o&PT zv0zJKZord}(1uxA#2rhDjWodkj`0X)#45^A>C|i1P$cDQ6|dsCJRMBdlo)28KMSe} z=lZnZuuhK54Kq10=LH>4$+{TmWyNl@hG!kJLrhF+sbf0VOcBV~r3C&+AAL9!OeGZ3 zYlWS?@v1ulNM1$d3=PfUAzBgvA$U0SzJSVHD2vKBy!CDQT4g}$NSA{P4ES^sWXp;hD9zoWvn#b=2fC_ko2mnef;LI>g z88X3rpmgh8#1+RZb0slZ(Rh`!#GschgF3bESY?)2X$vn~?7GElO?c%L1L92LwM;;y zH@x5ut7V_!k6IOPjY+6L{{kk1uZaZ19Mt0o9RjaF2MH6Bl6|L4k;w?qP(T6}n#wH8 zFUPP!tigF$@CQCr;TT~oEj`@}bwks{j4nL{3W`FGoI?atm-+@k+!Y2am@=1Wmc+Bu zvN>#ZnnC><{n|hT38FPw;gTs#iK0O?DCPjY(QAvw8LGtbXIdC^q)|q7;glj2TPT?& zgud8RgRq0qeq~i9k=zx>BZAyfH6IfgV4*20)P>EfG{soQxDgLz1^|DC?J}_XX0SvK z3kPpj`H3mE=U$ocM*BqWGg80{rKHsL_WDp}j>0qjS+X3powE?C#^s3vQ@AzY6dkj; zhcbw6><`$%dVZ5sk+>TNt2>q*I7XatD)U7Z z=k6F1xvfLMJd+1I&Nju{SAJIWFx~$nh=8L1X*m|KhH;@miVq!^0)9Kxoh0h93k<=Y zXcDuW2r4f!ImE0L)di#yK406p4vDCa!uR9q$7_i$qh&X_6 zya1$6F;*nVP6|LPa3;(WV5CMTyLZ1&Sf0po( zMW#Ez7HEY-@gk!u+RXTPVem+CEk4ZC%8X3PoNFoy{-0^_Uy{&_A^;-jkYDc+vn>t% zIz$nMc&bEZu~;*c)KoWu5D>5ZDXc-hw^9_K#1{DVW*+^D91;Kb0QG4Htrz+UZ8XAc zhh6ldlu}HZyXM(TnFAAZf`h-_iM!EJeK9H`&ezSHNu=x2uCwHU;_{v1@aVV6t30BX zL@@Hb?8u9RYLvZ+Zgdx;b=1%{=17uiz8T#k5O}e8_8q9Kz(9tOj8sw8a1Aq;Ft0#) ztwV^LY!Vd~ngDw!d>o1}vAO+;QQabYLLv^YxXpZ=Khkr5--hvWhUGz+9BBzTP~hS+ z`klJ4UA`v~xWT$j!=BpElC(aH5ft&9q8HRl4qkbp8e?mKdwpPXCeUb9Bhr zjG!stk=K!wVSW_o@m3%FE$Hqk4wxH!v!)q=>9945pG&>!@t&3DbF2Hy6keF53m5py&u9jzmgr!BGJ*M=|{Tmn8bY-&>bI zfaz846`q{vZNhTA+>C6pkw!pO7qbIqUFt4`uS`UQvWrWrZJ&uz4$!xL znVUi`DczTMDHBLx4OFCS(NRBPKs>68(D;{jU^8@|y+6A=l}n<6pV;#TVL2XRsp6SXhS9~)>f{(x;85`;Jlj|&_LIiZWS<8BoOE6Fu!e#RMQsNj(w2w{`%ao%Cm{~Y7NG+T#+H#APNY1H1g~Tnmfp!k z9PjU=3Y?!zJu}Gw0dU*sPX^i)f@aRk&^Vt0a!ww@vwxZ$#un7epWolBbK!i>_cm=* zE@pVp@ObSDf-!l#-B^!W;I_7nT{OP;SxXHwAeVwvc-7wv(%9wT1f5?3j|PZi!z8;X z5v`!H@r<$zVJl!tf#5-rOE+@L1<3(YaqLH5P@DVri+wQ9HV4!x8V5-Zc9ym#?nyPO^tX4Gsz-lkEGXiRFX zlD=wdFeBc33{9duGNF{&6C@te1=vn#`zj8>ADx!_#C9|%4oY~y(5SKe>^Vf!TskVNL6*l1-$h|bvT9q zjmyhtmzGYLwtSRiWl&<;Fi6g5HRk{%-zz2(h~LI~fgg%U2#E!miS_aCz-PPwzm2-f5QLIhA$at z+AGJeMqu%GZ0NrlzSd6v?`&p@%7)#qM!@&wS0jK9?$GFn4sF9uQP*HpCg$_Uq-Zor zK$Gt!{$ck}k}A8m4Tk+vhL82bQcQPbAoaiNMz#jaMmk{gql4 z8g^+$igkHN;pm~vyrQL_M2U#OWhT>V&@!V-aY2X zrka*nzjP6<-_`Q!7JPuE-Q{+!CR(nu))M#NPAyV%-}-W^)j>J(meS3`Ne`eSvh_PiJSVbx!;)rYYbxmu5}Mmt;CaO^hJPN$B2`mW z=USv>m@$^o-xIhByi{5!W6_W;-4YgtkQ+Sx!+`cyGG?mCUMh7$QD%6xmU{hnZ^1>< z*v;VoVc>c;DKQD(YnWBxCOI_P+Soa(S*;>S!iiW|0Q4xo1Zwo}Y<`U|_X*_%ZQnHm z8>K~;#NNXCyEt!LT%NJOzswfoJct*dVzNYKEDDGK=}?}%te+v>8MmdgAC5M z%0b%@yfeX72kPfqdO3l>&ZNa0}$#NN1 zG~^Ob!je6NGS3r@USz=uXPilY@J53PA_DoKxGy#-O_WDM2cU^Xk@4?W6XSbEZ&3>@ zn6e<&$+VtbKPZyWi@dh{QyDgX`c$J=oDJ$rpc&8BEp4x61Vc=fX6_ES#lu}yxT^}0c~8dm3l~fh<;>##I94u=Cp*~LZ!=%&kj1(N z+6JysP{@*|%4NFYRPGzt$5z()aoyy%H%39oLAIP|aKKR&8@wC|ZRO~<`HlM0i&AAK z`U`x}uN=L4v<+E3GF(^v6uJ}KTqq}m<(6tCf7UBZbT?$$Ijn3s`#8f2L3Y&)zFWOB z<7LgVSLglDy*9Zaxx~x`01)E+f3*Kx-2Zp`FJ~*3Y^bSp=7LH|sHnaK$o$h(Wc`4a z6{Axd8+d`GfrtF>8J*0SEP6*fqfw3D@`DHo-q`j$47jMeZ$?4_;>C;ZP2^42%lDK2 zMi~Cj-I@7DnLPjd>pyz_ZNAUPhq!O!5BeJ4o8zvlH+T1qleicEF8_!9r{}qW%8sk= ztLL(?AK#z%r>NJjj~jm<=b!tbj03m1_B&&7O`p?jMJjmyQ*9 z{!Lyx_#L~O@1bs?QWmDfvq3b%U_Ia%iYBRJbc_Y60p5K56^T@k58xf-Szd- z^VCf2>r9;2-KYltCr;e^_11G`oL^VT0}kV0Pv_^KtFeof4dxo(4&DxL@0Zt?4)q6F zJ}-}l>$~qP`~z11r{|TPm>!#rJUyOo+mHS4C;eZ<`_A@`QRq#xJNyPZf6vGD-jvsm zM#aj@4o|noXNKy>^WC+b_s8v3N1l;U&xW7htE2bZ{?xO_%lY>e4jU*s;FzHQ!iS4@VTf2X(e3x@r}P~1*uw?8Jk zzt_+G_0&ek)zHQj`1kX3hkw-~xy-L2O~O@D7{>O}*Or?*e%`}n&kk?*@4DaqxbWJ> zcytWu{hSYRALDnt0keN|k$pWpbGaSdwLkpvZv*-9_=Tf>VTXOuE%SXN0uM)hqZl>$ zI=6hiK3{L(>+cLhI9@%Ul+FBnJ=Esf%kzCqJfD!yD%S`eA{?8_}(3^ zJ(S`5KAk0*Z=mb*e(XQc^M4y`ba!@iq^1vjsz-fJAo*hp`~4tLznx!iMSZN;pH%*k zHow@)+&)!ab)ftAMA`azy5l1?bwQxM?VbG8^7?$;9@lo;Z{Ej&{zl{H>iKwY>*{&o zz;{$mVu%0AF8V(1s|&Wk|E=$8SxM({e`-f>1kDGt#oy`27Upa0A}nlV<7yzR<)-yf zUVeX@x2&-zZ#=j8s*?VI{%6U5VYvPbkS}C$GQb&q5UY4=;=Y#aPrx`Zv1c67UV0`}gbd z(bq-mt-sI9^%i`O?@ifnw05tT;_y2^&RU4Sjz3xt?%02Z|0&~bJb!=uG+*H_X2+rU zk6*QZFTPuRmY4W^m9M;&HJ-G8vrIElv0uAZ@#l2K>@V~Cy1p2F43M77Tw`AJe0^hG zu=hya)cSvWefWM06g|?IVbp%kymUoi8?*JisaAS>@qa&E?A+iNcgezjyoE6&*ZwRW z==uEdI(*)VXFY!O^7cS}|9HmLdj5)|@7d^vwk|V;u#s)sDbt>@ zRXw-H$j`hoGW~Gbc}sfx%zEpzoNPE1w{p1MvBmMy$@#PoJwImJOVQK%Q6DuQVhs$X zj@0tv)h~HrBkAqyQ`+$!7;?sVWg+F^U3JnP?5@4F(z?b)#c3_~+HR7Np{Wm=l7f|g zAj((Yo#Oo2wj(8LZespMTj-EI>8su_7-s!m8n&G(tL-oA{0sboC5^Z;yu-}DUz7N5 z%Z23rTLihMZQS|{y%wXJnK6^&ZMtu)8kly{o-wryun#N%p;J$6DYZmA|m z{Ny3k{1>2Lbu`E19H}iH7c~G>=W*APoD;`v?Yvu$&wfYt#dbq0X2qR_^zv(h(codU zznp|F!C0mNpq|x5GtIFzOwCkI%*U&P2R8jy`f%Nr%UI9MM(XFX&Fl7IVj8#piU{p- zNq1yWv~OSHqDGCUcmggplNhNuEKB3~nL4pMhnm5S7?TcCoAb>4Z-X%jPbtM}>rLDA z(IZa_la7s#?bak|rBbN>oO+v z8A@BpA&e1O8hUNaiwy7RTq&AyH;S6kyRpk>=1}V@w@W=62}AX{VYH2OFQXXeeb9TH z*Ubl6sA_SE1E`SB;p+NzIHaf`j1XL7k`f-g`jo)py3TOzs{ZgW+`DnwTFgAl&0rd| zRCH)X?(-c_KC6V)-?t*eEd-_fxEY_P5e(9Ps0PspC3jcJym`dbgqEUZRMschd4y*LzNgSsTNsow(4~zAtow$*b5f`A z6C6U@)@x}v$o?ZGj>2(M@E?DIa7N9eQQ(b@Ac(1=uOdFUTZV~+KoHUftHGa90tGPQ{^$<1<4AO$Cq1w_L`-oTMcyI( zuCD$!#5SvK@mC&$29!Q*H{IM2%b@1XVF!Kw#0Z`8H`cpe!LAclbQSAs!|5WO%Aa1h zRI!{?iAXb$o(2;_E6VVakerWGo6dNt_gJr^?2L?}7%>7FR-HyRHv&{}dLh=VCBRdC zoi}tPX3o|$cv?t$lz5I+fgjL$hU10HNY=X7|fe=7(; z^N@)e=~L(oH8hQ1x{M)>i?HH`>4GgTJg}YB+vYmcb>|kcJN&91DhnO&>&`M2q8v&! zC}1I#66(0HrSX^*TlP)2GN!wq`UV(M3Fm1dr@M?gjLdv#${{8YLvweK{E9;Dh6)E^ z#nW3E!t|nEOjVVZ%9MBPQ}_+Ynr1&6vJY z0+9h^0p6wp25wuQ2wr-*NxJbVQwWT(JVFRFHO6jsqupQmSk-WUTFzMXE=WRE+FOG^ ztTj{^V9>;36m2=zH?uN>a7b$L(FjO&NU`%E7NxpWxRC2a5DR*Qe z!WHPLMkS+9mHz&a6Uu4+=ls*!ctvOp8H9+9c*7Yh1>NGdB0tvHacuBc^K@&=o=|jw3@>6>(0-q;b0H+JpzNk#|KA3Fc>j?atWD3#!?ZjRb17(jX6_Q z4k0vhBNk(bN_>EA3BKoQa|L}0@k%F;J8y-}y>$H-HIKkooN~`tBn<>p&v+z$2##USM z1jVP&8W#+>8bt2~%8-;^ORJ&9FXwh6a9ARuROkZ*KpJJyOp8X*D-4QL+$eq4yMh(7+2qZU zJOK&}!O;%kl+BTfcIVV+X+!3e$Y5m%B;pQD$jk@D<4li7CJ%BbG&E*5x!(aLBs%;D z5%uB{P?Drph>@!v<gst(Ebs8sCEJx^e1@$kl@?1Jv+cXkJ?3pgFBOe)Oyexc< zUDVZsr#4|;88$Fx`G$+>FvkXvCgi;s9rlIc&T+}WbSxVX$65F(Pgv^c9bSrZ3tbjT}IFm*hsn$wy>B zx$s=kh~63;l;V1z43CxmHq{Z~qZC}<>5BZky2L1HU-ejh44B|O-OO+y?e)_XIBK0d$L zC%@F2(PfUzusW&@F5yR`<_y4a>{3x_0{hK^HNKacuqGyiO=wj%s9jp{dqLM{MfQkn zmRrroC!h`oD@~|aPR>llwk~uirel*BOmMs7ID?W%2=oRu(g15xNLO%Aus4VrA^~u` zVl^@;{qHNi8|v8v&9^0hStAzzeK|g@)Jz0~b<2uU@SMRzc=_mcu!&q33*p7~teKG9 zz<`lKDYlS=%pYV1Wey_pfCCXO{3eHKuLDrK9@bfa`hGcTV8p*v+RC?bA z1#)l626r7XilE7Gwo11|kN75g5?BeT;=Oh@WzAWHq7x&E(~E>V&zv;~fi=cutT5=V zUptQB$f3AFczuA`KNdzCpZRrKms#b=0rYmLp8yZ%y@MY;G@>9hy80-4-Z1V|`01m; zK>;8cNfDfOWrml5l&Zu`_z&l2oI;8i3 z_@Jm+z~X}#cZ|!yuRMV}Hj<~{aZ>A=pt5V9R}6E9i3z^VEg8>yg29^W>z%)U3AQ=a zeq?B(8Sf&5bRSSH$DcVz=wM|G>ib|fDE5rkf?9aVq9_ISd)sF0>j_@{AEM?IK>(BjkY6NH+75L3@c&=4LILI~<|y(^TnD zP&ffgFlm=4EC$#R8)EHdn}4Y$M^$>me1)Uok~;z?g5n32D15>HJ?K}R^tDGA?v_`@ zM60Sobg0=g;W6M*2vw;N)}Se`Uj3^?JM7YgLG|xSQci$~w_7nnOAmfdn_!b6NdS%zne1PB2IaB~o&|pwm98XfDW=;k4!fwIa8J4!Y(8Xm9WQ4eZk>iF%sh~1fS|+7*)$cjvHcPOPXmKMvM+yv!N*=Ab!Sq zC9a=kM7Ag3=#x$=TVl#_B(HMk6KufAM(piYb6Cn>jxUw!EX3Q_bzEo1?9$)c!9ZHqz6=2|fupFx}{ir!3C@~lo4Y{&@Z~~z@YLqjNhO%13_*cG3(lhx_VTYo)MKiiPa1pcR zxp-)h{g2U--g0kpaK%yLK+ge_!YpJt38J-)sIw`k(ki=AnKQj%n;B)dEsJIs;PQqsYc1PR7%L)OXz5%2SV~y z1Rd*vEr}dN1u9(_ga+&EDHUe*HCxf9Q@nvLl#olsNty9b(h0sqM}MOia3yx)nRaV! z|C0yufjn-~h7$M6OPE%XQwbnWXuS}iShw5%lV!QVaRO1%Fm53oxvSMMF5Hro#{lE0 z0bhpgOrCTToi9%V3J~lmlZF z*-0&)A^ZT!3PL4Yq({M=_tb0=>J8G4qm;7hZ9;^1v*aohZ1#3x3P0AB9wzWw6!t;T z7Yc%xHHDLr{438Xb~|QRI>X9atp+`24$4v0uj$)MZK{cSd0t@32bo5Hfo8crC6@9x zVBKWT*Xa#bbxke}z1OV8XL6cBqS?wN+z5F+h}rbv;Ol;#)tb#ylx1fVh)NhWjD`%h zn5DYFQ)CBLBmdkIu0Eu{JxM+@bh!y7C7=Y~4r;IYINlW~Lt4cXO3!T|+r`Q#!^nn= zBU~p$6Gdhca=6Cg(0UkzW{oFKu7;J@w|0!_`S8DR`W}d&bSi^wSWh5Dl-74>dQh1 zEu8MEEq1fdj!z73=$0P7Rw?SLqpITyo9N1ZienE{W&ur;Ho`Y#ds&%uscg@%KZ{9N zbA_6GlYN-XvE$h1D~EAd>ol-T&PJXS_pO*|;S5n{qB2JCujbs%5*d7>eL1(BKMe2w z-7JJZx->zHt4hny+8OgOkmuSKVXw1d`5z@r%&mJk`2+5L1fT0gr7}o|5I*Yu(kTmt zeIeUe8jE@=oKO@MlI_(!Vc3cFpf3R`4#&J;PcXAxINx*5jOe@itDvjhEFM69p_b$G z%l$!Gh2vpqs4YqVwy=h)1IDFTgsAQ3JEnG;w3M4itr`Q;@@Bwem!uo}p-)TcE@l9> z^fJJICa*&AB4Ie>ZeaHn#uXLaT1R>7X5^_KT>5*3YjhPdLKHdA3x{71Q#a|E!VNQhHMYEq*$NkW3J-k`;{n)eRctx8*%jL`d?p zvMxLUM2z+-D$RwMxo(3^JXChrk7~M&S%eIF7eL&>02D zvZJGjR1@UtNsSkQW@%s_bqT&vov zmNGXIS*paFBE!>cM!{ey;0L)4|23$GTW|o?D=2dkb!6X3ega?EdNmz4m-#Nr_kSyX2n)v&hb;i5yslS@@ab@ zk$qQ1(PAB5wq2ab8Y@98169!ud*j5i$J<(#22$NTtBFN&l1rCJrxtFnK7Mo4 zl^HR!X+G{POr-|Hn2ugvPL^UWe>n<&0yrw;)+N$506XOhgVT&5&8Iw59EuzvqJY(m zrqYl2)JmF>7|nD^zYVcfI&ccyst*y>SjXOZG^p=onvF?p_G-GDsyC=`<3i5M>YhRmiRzxzL3Fee7Pr zSzz3fPl0A4zkm>iHjy3XE1#&?Z*tbMW1ENkX|RPZgWQjzh}p@g4|eLgS+)bNqmCF& ze=~%sE1jwaaiF}#kIDGm(>lg#aL)~3O1c~GisY{rCkXmpsi-kiLi9^yytHF7EwjY_ z$hmr9=T?#YU}#NBG60GJX@Ri{>Xby6hWAbZtLj$uVde{wcj&HVJ#I_dGMS@@&7JYh zYxw~WCmhNTIT7&~YH$IOqX%KpA~uo(R-zHdb7Ci)T0*umYy#7rWmQtdHpvlTYeH=c za0-RzY@k$O51nEN@Q3gGPFqe{vVi(`ODf5a&@dN6XfSWv&qkF44rr5~)9|gs&zaYg@uZDn(Ms8- z08tftgJN0xNgV74Wie9#8=U~^m^H~zjkut2 zMSDe^X$X*Om*Gk4+C~UVRel4XmtVEU(!nd+goL5CFl6~>8-o}r0*=wBULLAj?Z9Ho z?rg-~)XY*)K7vxCXp-ewA_W^LDuxi7KWo={n0YuO9uTl<+~zO@uu!Q*ku0 z%vQ}(M2Ih%U55vURTLdhQN5MrNiDx--nI;Lm#2*#UvY#Kr0Yk8&I6aF^|T5R;P@f& ztKTw2`<_lF3ZKWbu*Y7qjbiB?!&t(NHp;VxQ>>(bg6F(43XCrP$n%%V2P*uSJj(tf zmN&Od`+8gpbzO+>Odbt6!QN>w{R2Iv)Su3@@0=(sYI56I7pw!zlvpW_9-|_#hU0|^ z@sNY5^G7kqSHWG4`&I5q)6_7kG6qCU^(mPdXgOv23)Wz@ZYzx;V6u2R+3}rbXtsbZ zCSYR))_A?gUBEn*{>sKz9Nnm4BdrmLzTGZPaN6H)xH4_y4GRg^nA%7iA!b&tOaBwI zXLju?!fk7ufj;FT_Us@3B#Dvt4FrQW;)*@nMT_9PEvS?!lwnKZs+rY9pHZ`sX?Ix+ zAp$fIT8a{3}fm52&c@CqS z{GsTLGCEgQfho3qodkrfRvoC|+62ZKni^ z$^{lNGP^?y_DJoABw+W{ER$TY4x2C)hm?L50~QKQJ!A7{zUdR~yaYZ5pZ!ech@*sx z@WxsNDM5QAWyy47<(fL7(r!qlDo_eAoTk9bwA)1O(xu}}nKL=sDRIT92k1I9RxX-1 zZHx>s$Y{j6?AMnu{0Mf}Uu1w3HQJ3Fy1Px9$m>W~BXUL`UN$|=ecUQz8{3F+2r2O~k9b+t0M!vVKwE#LMGn zT{=GB!`$`z6T8A0HqVdhbSzQ(k=|097qyOVW`?moSoZmKb*l&1JZClSz6@3iQo@Zb z-&O|la#`%ata&2xca2tcrRxQ~rWNS?I z@j!N94$I;?Y+axbecJ6hA}u&@I%b@^(baR^)3~t-0@^4`lSws`m3;~;N0F;x|E5G< z4%Yl!rvO!}RzKJzt78x5aYZJd$Yo60+%d2wZ}rQ-ddI!q((kUHh1e%KzL}uK<~Mb= z@sMwPzoQm_McgN=k@Iceky@PKe1rm{{;aAI{O?A$v2aHyKx~hYMsuZNvYm)P-Y?hI z*cGt$!`3f%8g@BU1$6|;v`5eLrNUvmX>&Ae_O5Y?aS`ZzYj!5JU-}5{UKKJu@NRRg zPf_{02Q}pqf>We!5drO{QoeR%W$ToQf9@c~#y<{<^VvYfu$-Cpv{7aHWS6rFa+w6) ze1xCSGBnM?h7POJjl~#b;FiV6zGr9-^SYO>iVJnqL6bNZT#RUa07fc1O$YH_g44qZjoYKX}v>66|Kfvgq!?eb9x ztrRZdVxFEp4$~=`LP3X&H`ra#nyD{JJ_*jyQo6JyUYSR-ovjV0^IrgSJ}kMBYg7k( z=NLG~v1Py}UKc$!LJXpo->rQ83j#9jn$t!49xxcqMtI-yc#?{edNrOEwXk)~BfXQ$ z)sWjQdDxkC)xb`%*#u8Q(r7Q?S+Pni2J#Y~^;#=M2t9u?Y>R{Qe>u0@~_2ZN8jO3@_e z!=u+eStgX5Q+;Yl2#NdgnbS1kckDmL)I>V#&`B(?35MVArk1z~yBDMdXTMK4S~DEp zImd+0(~u1}xPG_9Sa4V^BybH_f)(R+wxt2yN|ebd!zFSKtj>6WvVnLf6BeG;nE?|}=Yv69*y`joB72GpUi)-ii zI)h``3utI@k=dCvBU#QJ`^f5xXYB{cDqnA_KiU`DEGYmlWybWb=q(cXyYtJo*m9P% zK9fYjAjkok(W(*0fP6orNTLM?GLl5zSBNT4A#k`XJjW=C9MPe+T}ocZ1@xl7oUFjvMpJGT8~q_1E~9G$$k8aMP4YwqWl{h|Oa85P9lqN0ZjWV;Q;TTWbt)wiu~a2{g9@eXkDN_;_OYx(6r*%`};RlK!8 zKtqK!F7j$px=~5daeX!&-dJ&+zk9X<>NTQsT11<4jB)LDAkGS5;;X75=gdZLPZ~W8 z5L>NU+^eyjIwL&no}O*g8J4gZ!F(09?9QKcZg0O5 z7JWRVPv0u*&nX)1o;6q3X=lLo2?|{l zkdn7qFtEw8gbOq*OAJ5X374q7>ZVLZiIN=e<6MyNkqXk`@42zcY=>FkIFLv~H*ILF z&d98WJPq&nN8(3dw>cJi>puOB-8a0ZHuPW{84kdkKGUp4iQ2I_S@$b zV?;Z@L5vs5P2T zQPV_nyt=Ox7c=`Q;XNNacrOz79Gl>o7lXWAR5WLbW&Hv7f+6`DU=BI+P1MW)JJ0xe z3;M5A1`gNW322j?^C5RMQ-yaEn1TZmbd#i+V)r-@#|y^o*j)8~{W9aZ)E6@DJeR}O zmZobBXLlqBcpiRyKlTQwPqgY#@M(q@A1UcW1irq zgP(cQf+(Zt*vX5w{*P{y$OD>zAz2_0jEd>?0{(NG`(XaZ zKh|#l6)e60{qVS5Q%x1)wwS%j!O_w{`)K$&({;)aF_jnsH9}2yW_7G(n?e`D>8G}@ zV-OI!`~i?~0k|23(KBALFgR37RCHW~vn{N^Qs%<1tYab>b*`O3oeHx;gH}F^DFwge z+EE1lCBsuR479kAhf?@`&vV>l;Pb?vqHg@U(MUw9cOJ<_iyBb#($1HPk;r<>ApkBH{sqxIM)o=>elZLDZ@5V#7R2GnC;uAs#Q zZcU<4QNBA^!E0?eU_9>&Q=mnsvht%d>9_U}Q}w`4!5zBHx?uO*%eYi!&LdK%0yf1+gl@R0=NnnuINEAbV(YP7j^PoK-!%oT z*w}m>28rvwwvL;}PLiL5Q25dKa5i*L^AfPT@q+T~%S0WEXc=HL^>GVwIqCD)uc?CFn7a|I-F z3z>C6b+wA<1y9wuMlcUTBM+I*axJZv0J5`+VXs7OyM(2ztX5m@m`7`(DYDs%KhCFy zlAX|3gJ!k%kNHV~TGQe))mH1x`cKgzZC*c;ZqlYu#{r$`j6bAnzkLTg&1mU)P3r3Z zLY@;AJT>yFUE1nf~Cy0;XHp?z!2h`AJ!)6asztsUby)Nhq`SF;W`m#AKz1Uf3@a~aa zn1pZOnCFJ*%M2Si>KvV~*rt_<2gIS_RIr~hS zh?&-y1_)CAuaMZLPti0BM5|tz`0HLX-YsCW-molAm8>Ypw!=heBS0V(%&*0_LJG2c z69&e2_I3$VAeMlyD+5~~*w}wHa;qY0O%Q+f6ERzDP=aDmxedW+sZ@PnmTT@Az()Z8 zBzDuJtOFlSLkOo7E&|;qCh^w7_HRm4X_N;1I=Rf!JDQI!3POO=tul0wvMhqrU|U9- zhhO7cVdVINhXau=rl=_IcQ3$_q|?pI1BO|hcEl3E=iUJ2Rj@_Q6s*TrH2OnksXV0| zZtipEq6sln+pD9fwkcnu02$VFSx`p#yKu1HI^!90T(5ZN4AAN@D_nHoSpyTyOnFXV z`DhP})tzx?kmpC)bZRqY_|W>sp-WwVmw4x8MzF&?kuL%hL`=iIN|Mh{u;~t;G}3b} zaTJXaOE)^V7FExXe})T}EGua0WW`p0xTBTCuq4#-#qp~J4VMU-38)di$?r(RP$G88C`?jN(rY) zj)k@ZLfq>MeS?f5fIY5?8!1$S1-b!u5e38%RP!OK0IOXMHm_@ZkCb?5|+xY-UyJihTkMa zJZVT{M0biT7F?p|j6wQJ)EwX6Z?M;iP{zv3iXev3b*T^;1gl11CPi$$TgC=-R4|>k z)kqg8&kMv5F@;x#%%Y4_C!0le;~T3EifW^Wa6CHH$9*&UlDPlu+xp#J>AI`;z*6Dg z)8cu#oB%t+@bt3MUlut;T~-=pstY>-&t3N@yN!roZuUV2DxWwD;uHxQh0H#eCfDBN=( zQ^6eeCrECtL_@-61&Z5gv(wr&yPzmZmjfcvY|R&}QBT?Sf|@HZ=AAmiQMGnOc+|>` zPwQMTA6bXRiYlQC`0WP2sx!yf;go$-S()Zi7@K5>xp^Q>^DgJ6i%cJdid*TcZ%vc|WqN21L8)aGJ80p1GYOUthE)lGBFVN`X|BLq( zvr~;uyES#{hkU4_jeJe5;|yk7Qb!=-Z^ARS%7IsmUekIUlR3_RBWfF5ap`*x(<@tI z=)9xLi@zFB<(l$KDmdowbA>27gS-`VqZ6q-*Uf!IT(QjtJq0A;BTG#)f1_vNYH zR~Fdz4v27d)`gAp zxTYRHS#pQI_n|QQV>80kjcmgQX#LSz`jGHnLF^(DFvcf`Fc(FAAd3Mk&#F$}qj?dR(x`T{`qP`x=FjOW1H)G@i7R*5 z#~}2W$l?dkWjzaqO1{4h$5qC5&~(=r><=tRSC>w=vZ0;ht7X`h_#2O7Ko%=Ys;wpd zlEWhoR4P(-4X&xN&JtZGi%8w+-$;WH8cvHXZ?YYqdVc`j_ge0I68FV&Ixdz0Z8Ezi zIPSIq53{m|MwX3ScV)IFig-cMoeuT0p-5jD5;EsY)tF)~)Ujg*VQ|(_#mhN(pZsTj zHTn$Z7tuOzkHw)yv+nY0S0xRVaxHd;JJYn;qt;MhfJpm!m8E*1+bDkeeUkjvbwkbE zlHR!&0M*DPL6v@+0Fy}{M>X3% zj3`yrsXw|~5PkJ3qiqR)+9v1q9E^j|E+W0Yh+=;#A51U@nI1 zA4uHRR2Y;ROPcYvTF(J5q`G6^nPV+SZK-s~k003^+~f^wk#Nch1I8L-n4C{dy{unr zuv2H0GD`wb(*@IZJCjG6hZsukzcQOPd9oO^0kAQD5QQ6a)v_Xb9`r@&YA!`J#F+aK zFL)XBs*dc$A0BY@iJ`MAi{j z%d*a^lQ~ASd*4w0YfZLU`anlMRyt_e2QGZRG}rE#$Wz65|LyUtg&Big%f6Oswgpu00!=JhJ_)Yujqasgn18e82sjq z`U4H})Z^JadARF5i9kY&4{BnuN25RUXjen5e1Jd{3dX%ebiEIKifTtHA)`E_UoG!Q zxffTt^62afH+VsBxU+3F(AIfOBccMnIBiP~pdY ztvmbLEahsPjolaBIw`AtLFxH!nS|OJ1>5W{ZNAU;8H%)(UF4td8n5`t^MmwXlNSy$ zi>%Q75am9dkw($SnNqCl2duoElE{2oz0>b0Whw7&w%PPh*|= zLdj&nY3?}^?nV=Bo-XHU5AsG?1UV}#r@#QW`=I|rwNoS-kMrL`_u~J*(CzN^zZSX; zoxYeL{ExMN4k9E+F<+dPZN_Tp?TcU&ej#|P7R(#BoBZ6zwX@6{e>-oOw&FrqU{sz5 zX{sB7+`9r^#XklXt>yMrIkH9}&JwMD_qmt1fo#>AEpl`_lJ#g}6h0Eb*4_V6SE=MK-!oVE4|-(eE?BJG`u7r_UZdIDiY23)5TIF8ai?K{CsfW@fAdqM6b_VdYyQ<5LC~;9n2^bt~}u`{zsPOI>3pvlPbby zjhyY5^+3mBT-o+-$6dkRVAS|tlX&YH4c=M$Whe;SQ=c^dTt*D|O6CUwChT1fA0H9M zJSpt^P49 z|BkG=Jy8)%c49`y>2CA8iT@biLQ--4NYgjlKSOW%U^Q?ZM(E9^Y31!P;oc=D|F&CJ z#cf~wg*vc5ftbkqd28s~g5DK&`DW2+%sbZ}Tdo|&^sy|SJpTtv3Kc>qjkgLoiL+VW z>(Wb`AKt$mboO|4?HjcH9F@UJwkpJtCGx%peZejbYpvwBdhzfzb1XG+zuzSh z<)*=(SCT4l98*}WeQVB{Er>i?r&S&9_IC2!__*280D%CZR!XTReRxKU`mSmr) zJL=aycPcQs{wK|gS!qUq1t(~yuIu3S2rmNNS3P=0)0^zzzkTk1|3}wwB^OrBr~!a; z6#xM1f6-c5nX<97vi-k}?mP!43r)|uzBg?KI72uJ@$1LtKaTXt@HBko^CH#ol3UE< z8re+r6$AX-c@#89Gstz)#PphJ07lGyHT=tF3<0d&Kg#EkF;00o2p!~zP-MJ{+%H@ zU2lJmJRXtvIh+tr%_JUPg7z(5H$N2ZsaKx8Dsxo>`TtDeeAFm2P3hfN)U^Ne%q90u zP7HFnH;eq-d%C*%Z1(qkz8Tm5_fAo0s8=^N*2>(P=45oh{0|g#c&c6a4@LAaEEe&- zQdz%&ar5aW%IN)#IV54zEAQ?6?rdiHW0~Im^!5z6d43x5ijOe8_xW-Dw%XUL#dLq# zRXCaZZ|$j${U%3sYK-`wnXb^fa^M}XTP2fgyU)4pnR%(;+Xh>LkrB^!U!%Pbsrc-- zGwP|kbA*{w0lxqw_jlVF?@70|U+-awH31((z{mY(;lQ-MC*J5|mn((mYvC8JYm>7e z8set_LkODJOLAb%xlq6x$oWnpBIZxMnZ3YYpx50C;s`ryl&zbeyQ`~wUNME zkh1P1H~>$>0!vUAX7W@ZzEw#O~5J9p6?Ehv8O?#g?0 zZqT3lGwRBl;m}cQCA2W>FePl(cX8fi?jOj9(kQ7~5TZocz6EYaLT z`ZAMpv7^=p#mu5!UaHRSh!eSBU260XTlR&?pXTPAbV6yZ%>>3p1NOljpVsYWBJE8! zg$8oJCe}c~6$P8Qu(yl|Lc8x4Ip5YB?5C_@a(}Z8rr=%)zI7iAF(MpCkl#yls(+lN;>Q z838l6jM+Dn#mCv-bT4waEth_?kT6&tC{CLkrnOJ8;`C{+z=04-?D8($&ErnWT0x%O%QNoSdSG1W~Q1f>5NbEwIqMsl`v=9 zBlg{SQ;lt**n?v<>`&jVteNDIlP}?X|D)vvfEbiJCe=V`utZr!ROgc>9G^J8OYUre zkjGBCpS{C-%9S=uAfSMm?y$f&1&^QeM_-$vDyHg_b;dO;wk6tZ~k<8RT|mO8U`3+VQkYI|T8eykh8^ZgzrZGi@} z>1_FCn(JfWz#};m9DhH-WHL-Gzn*7+%`$r-IS>V-d>8B$IQe?tn{L9k5+lsOTGY%d zuE3U*#Cu`?wdlph#%oG*$5v_Dy z0zJz>S3GV;1p#uD?cGp$4MDsVD*IhH&3ggYw!Ams*#gnZ0xUR<2yIdGIWIHd%kHtvtC3xHCHM+&& zHio^j;t%W&JLyh>yIy*eDHF+i8eitPNgaAaM}AX=Jkpt%*h@s_F;`;6j}L}ADcvLm zjP_z9Texr8gY~cH#Gfp$=Y-v_xrLeyOtnE6)#uH%nM?a3v(qd`=dM9M>HC;m8@n1* zL7W-p+C>Y7luXu-c|sQ&u8{g$&|Wb`X|!IkCo&JebXyHTh~N*-W+$e_ToTZaj&n8U zg||T?BLcYQ@TI>*D;1yg$MXZb=pkM{f#E2vXFIrKHuX;W!kql-UWm*xBIbb*7Nmt7 z%ue1p92@;cg3eFSXF5SZbww-#A-lE;RqZDBJ-DU_x)<@1X2)!OpLh8lD8e}?>%=p> z>jP1f4%`Wf=Zt69(u-zVMs4gkuzc^Ag}w*Zg4h|pTKt&AH`Ik_f(wmCr_VweMB|;s z@l1aZF=HFTdeVezjpjv?6@&P1*!>`Zx$%H1gyxVc(;ZR!c))#!ie3^R!R@D{0(_0Ya&p(?PQZ$E`0d3Jxm` zbKW{9_lb_auc2~sftx|c;W8RyR3b8;2Tv*;fMC~<%xMV=?RB`jnoj{Q5W`K}Cnv?M zrfVh<1O_(&#(Qu!rXymQ)NJ4?jAl?OqEXA-+)^juT3c<+t1$l54Wr0S<(wHw`)jg1 zIsgR92akNB3p+#iQMuG0<70n@ped<4^_4XBVSApzK`lzMFA&yn-7zK$i$Q7$KeJob zcK?hB#|@mHDL2KjgM7@L-;q5rR}5?H(}%)0w74klVZ3Kl?#XbVR_CvWR0Bw1$CjFLaYvw~LF}uA-^U|qI=0nVM|ER9ao`IxDPo^uw z2HY3)Bmh)YPL^B{fRx0f*VwCKr0T^LLJS{HbT@uiF8s3E54@ErMt#1M8@y-tU@e$R zY)!VJ4ONIGb=U$C1s+3syQbWobgPRK9Wn)(_TSZfk-B1%`jr9W<4ifR`p@s8hb?dp>D+_Y1`oNW(V~x&EOa*~L>Y+y z|BPpOaoKkKP3>!&#I8`<(vtoRjQ4AEt|U8!l3@`oDt;)TWBA8IQYmE_L1BH7x;GgE z->&9`>Qi1CFZ%n5Mm0+jnsP>PZpcJ&%ngnhTXvnN zT9f^arKSk~p z_p&n+0J9F(9mb7fp0VKW`;evS$)SmswP(_3g3`2c#Z}0bnxFtVx<9W{R-0h= zz{WX3z7Ki$+O-{yq_1*JN^~mYK6nFz!GvsNhMDwR%UCYsEj(|Wh>8AIo=KjHKU@MI zs`cZz-&96mKXCXk{$4j1Uly6V8?}%QlX!CV+YsEYXVRdRV3`tvy#+b(7$M9`0KiC} z5)T6%b|sxK3dBx1zQ7}3><-&6eNJx7Eu?iQiM7%ZX2M^ec_XudBrBQ-ht7RRmZ9)d z*jy7UYkse5MMP$MZEH~?{B<8HsXEpbZz0D|hNFJLavD>sJe^4jl0wA2|B5TMFkVhU z;)o8IO;!JmMUB)v$3NV|O65^7xHdO2RnHX3a0RZuZaDUy!;OlbY7B%jNMqkxN`~d5 z1M%H6c`BcLHLM^3f<~C%F^*xRg7P~+$T#v~Km>*Se zO=p%OMlpGZypTE&24rxgh zE%Vhvnm_eH<0JpuM#X3>7@GP96Uda75V;8l86f9;ukKDvRP09|~%xoi6@l1e&JtH$vz^LUfy6zF^0$;?x}AJ6lIBMZEm>;w@9d z!i1=mITI`jks{zK%LQclJP070wrBq!UAuzNG#^_=D}e8m5R#q^lna#!0iN=@D`D9; z&i|;(KKDQb^CRpe!WC@ekZHol)e((vPytDS_dZ#g#y8jeDL@Z}5IB$>Cu)4H-&Taj zGlH(I(SYnS0-O)QrOwn1mk^p{lW@-0(!cZG1P1fdX-iq}19tj#6tyM(*59=AEwit) zq|owdk4M=7 zDrDZ;r5bXSb4x)P^QIwdPN|wrnBu6f-Jj9z+FRd1(bzQ3S7h;7U{`@3MnlTANWvpm zDv!kk0|rfyBY?sD6e!<#?dHgtVhjE>9^`@ROI8?9!j4?4)X?3Nay*jSqW%Wlh>_sp z+)4J!G$$s9tZk;n8&8wPri0HWtJg~m{uXo!2RPR?s<$dDl1G6=x)bX2D@6tX{FFP3 zsLrn2UA`##>2=YPfHab~=yBwkIhvO%kxu3dcJsDkFfLDl--6qGiq0W&;_VrZZ8afc z?Ha|j`h>QIk)0tX`g^L9;9kw%LmV>7H|yTy6&ordV)G15Cf-sf;v-=}s7hS-nBEG~ zb4IsmV4N4$93JXL;L_vY;pXFcLA-WXp zGUP>^NDQE#yy%U{i|nD{0u`?mQ;u{?v+;taY3vFbP7$Ma5x}Wf=YtcW>l} z_>hCrF9ylnc`8`N%z^4UHu347M3F{EzI%UQcmzqzASaP4@llTwW`9#QAPrq*Kk7lj zH2;_iuoJc;F%N$bMIZua4s)xjG-kfiPqA69^BsyiZ`)N0n$n@fy+QaoDc-}y$2*|XFWR{?61Z3mMqz5PILvM(ZEP=hznCpc_ zg>kHpE)6RRD+bP>^;-mVFlPuWs0PpHMIps)_6`0)W*%TYADZh0?!Ub z=yNzX95lz;xC8kfT*xsW}PRv_a369VSAUjCU*K( zGFO9Y{Yh%T{Y#y-xa>VkAVFf43$XTqmOmscgfgUUW7fdrC+n!*!`K z5TeSbxKJtT-H8JVwI?k=D0W`5&4pzfA@Li#sL^B(ub`Ts?82J|CPhb3Ohzp(p^*9> z{K`!cfRX-*IMT8YrU_%#?j7>MWr&j8P~)JVR7_sxcsI2C9f}~wpSNJ*IE@{70$^o6 zQf(XOX`hstVsY_~bjTTOdkt|B>lrqQjS_hptSbF&^3J^XrrpxfTuM3W)U#vV!3x<_ zg-o?wF_x)DE@AU|;(#x{DRuor7t;Bv#utT%QU?qO?*=XX$xL-0h9E7A5!?*t$twxv!BTS6T&a<& zqUg04{hqh1C+yv(HA|v&<4F9bQ@rZ3!bi)8@zKo@-X$0ev5%+)cP?&C0e&J#)3%jc zlxRCm05WhkBWu%M61`3F{)^{y2-)ISac#`$#;u6lD%YdI+cSxo`sqFZ+Wrl|Vjoka zr^<8a+i8gTEhj$_G#tX2^2lAyTvK4(qS|U3Zw@h0ZG3(bs?l;6Ma+oZn4_oy$w-)< z7)33S;yFzv5sk1Gj%jH)m-AbN7urEa3!Y7>RQBFfM}Y#>%3p)^O%_$rxOWJh2C|HX zgj5lmqt8RZN5OFMljVLPTZ;uvd7x}@GDMb7P?bxXDC0=!-hLWgtg36R+Di{&ol-DO zn1)q@Z3PT?A@0Vame2LNCTkZkm4kWXy0Khk5wdo_6>P57;`qa8BMwiMt1H$%W&j=Y z;b1bi&cqo7FQ|H%9|7-7sZvlCrrt~Et)--IlbU3ogtlmdYkFH196GXnBhvI$Lo2GJ z0!M~fpYuOvYebN1T?x7^e8{g{TOzI3%hfVw3MZl!%FBOPh1M=rSMaRiPdIC_NbaL* z;&Fn!xuY^=;FFgj>Ksfb6_})FLi9oxt)G?u!`3^;XSOVD!?A5njEQaAwrx9^V3JI1 z+qP}nwrx-RX7=9aJm;M6`_(^n_o{VOqq?)!N_Ag0{x>kGT_TE)wIwZzQ-xH5$!1LO zthHqV5xMvjO7O<=ItGX=_8BU+s1{ECD^eV5e%Tn+IN1CU6^2dVlW-#j$S5V_xuX?W zMIL_ovVrEp{$`A0xr(q1PS-%{BL$vw~NO+y^ z(Jxo|N)d^MhuS2X31JLc48RE$coQ;Ye+ZMCWuUd9AHc4#%p^PGJrcvUHOS(?U5bh@ z$ym1i_%H#NW@KzSrln-^@=vOGbU-Lmo#B(+DXyRnVVQ-2W{Un5=%&&J`9a#WLRC5< zK%kU=n2#k+C)E;ehXd8_KpxcE$5fllgc&qqF1Q7mSEN$F0S8wR*D$g`-hQ4~Y-JxL zG37$zUu10VVzcaGdE9tx8^!ozxk2njCKwO4omzssZ$D`l=-Dmrv%ofyVI^S!D}TWQ zn(645oJ52N#)IGP9=#fnTh3H*+FI2jEMPm>(l*GCrWABde$#ex7r7KRHRvMic7<^B zum-Ro6=oxnx{ja3(Nu-_@n~M|8&o2Kt3y`GJyHec3oIySh`%7i*&+jck)nrhgT!I^ ztBaRIB&H=iN!>$PW;}_E20Os%h`H}>0Z~HAtBOe#uc#+j7~wi7CRFiiCz_WR#Ekn7~}7hVxBZ85V3=hL&Y}A<){Yh@d)g zZjh%Sb74}&0-`r*L%7aAzA2g>Ndq|_2DecUsYZ59FyR-~Ld{B}dbBahDP06nSrBdj z)qJ5=T*ZJ2E2B!Wldmpw=?3sa$;tssSb|`|FCLKycxdTb&Ryiqs9XiT3G@lz##C300g;a$V{AzqvkYJd`N@>F zpO##AMyX0mgXfTyE)S}l^zG*W>;4rJ$qYYqU>)%rIoM+mO01_xbgUQgwa==1JunDo zIw?wSOX;8sQR7c7W=xuDBXA|Y&pRdnfM3LyH&(IehEC)7sX9<>01{Xkfrde0AN~xv zVu{8JJs2Nc3|>&^dZ)v}`cZM6z3ZmOB4}*b&=~BtDur`?*q}S!$UDGigz#d`Qq(_h zPC!-H-h0}-77thMufV*@t9^-zPETZjnA1hR3&ySr0^?=VgxSd6n{Hm0sx@|iA z`rub5E+&-z*E?X8IAIsJI<3`NKlicFB|JDeVcWAn@@j-2*^=qxlO@bBw65rXA*Nd+ z)gdpx3J4Bl%^uLG6Snh}LLWpmPQGoGp*IR5t`qyT@#G0E!r;p`1A%!fFD{M$Agu5O*QY6LCWTTzUtm=ruJw+HEqELFg z?o-a-7oCy(H^vI4lR$LfTb<%s>P4-PQ@EJMwOGam;O}$?@Uad;+HL@?Cv@FFBsxaZ zxM>`As&d`45LysQ0i9#L#>1Vab3r>W-) z`-74e@3|NlS?@07tVn)9$ZOsD`oPJ^7(M@yvW$EeKK%@?WoYAtf1NH&w2i|z9Wv7GFhOMZSf6nF?bMYvdS0tE=n7?|-EZ}i;dQRTZ zW3srn0u!!_*iF)R#z}4LpWjYSyD*XuYIg%~Elh7sr6a#DLQqysBz9=&KF4&Md_d#K zeQy2;xdsN74geP93LT{VR97}i3btSg+!3ZAR#OpiT?S^Uye@(AdP+?^-jo-r&Cl%QD;}iWR6!%|AGSV%nx#7%W!&wDS%Fh_r^_7N# z(s@OVEx~hT2s%U6oP0!l9>BhGB^=oEi|T?wZtAi34q*kn^-(6uGq3JJ5k@+3>(-Kh z1jMEaD!<~DGiM%%*2)h!hx6Dz2%;gM<@nunmY0YTSt_n2njDcwEr?gz`;FB_a7a}0 zGK=kE&LZ@m51Ei=CwhazW(k7ki{YLw)fVkLNKMliQXod{Sx0h+)wjavq?SEGXWuI+ zHrg4hdSR``(9avT4!*53Y!pyIP3wp%QU!U*M{|}_v(Ep{QTxnHD)Hbocd85!okeRnebvK$3LbDU?xYmAcpu2zF z2|=+;Ris=Jj75ZCp?7omMCFg2ih@w>NHay{5^Dzl!GCc*yGeYpiGVL=uUYyNx?)w^ z@(!ynAOm&5KdKj z-b%_SP=_@zU>tW^@om(%4}0;>5)ML8Ws)@jtN6l#6Y(T_Hdx~KNdtEkrOko|l{h+Os(Sw62@}|4r4VW*xO+?$N;Ku@n%Lh1T^z-$ zObuHHG*gN|O1D8lxVnOSI)TRy+9td$bfY&blUrAMYF3`eJ{0_N;sC9iZSFp3k1mv7 zh2w>D(^?Zhi>BQPVl#S8G9PfjTm$>GST{53^cZ8%m_^!1ZKnnSjQTL6+XqQnro&`1Q%W z>VyPDg(NO*Qsk?&QPqO~q28GnY$EJ5Zo+j(*0xTkOkw^wm-Brf=|FXWE3+s)kwfpT zZWC~7nWP@fit|a2>HH-Jr&SHQ!Bg;d+0=%r^T&@6hN>lHp~PorR13vwa@xUUBbq^a zPNd>%Ig8bHtVWNb#Qn0#++W(MiH_%fHBezctJhx6CT!I%a))|3tXCR~9O}3SU1T&O zVxFJ_Ml8fvPsgq+O_L%Q^b+PvRIakIq5vdN^eUNsRkufy>Bm1*s&3V&d|}hLptcn)1j{zs5qEW7oiTKD zuQfSkGQxh>ugP2RgbAjdrF`>{hYcfkKL@EaxF@;6Ict9zd23lz>fcw#!QR9GuhN<~ z@#%7><9A*5x&(#3YNn`EIwkC0l8~^z3rS%rs8{IVYF{ZFfSYdGsW`Afl$a#%IPAf{ zN=6^5S5=TaHaN!N&sY@)41zjVq0-CTWRbHpM{=r(GCP;{GwFyCLfN%!{Hf}=6QEy; zNe|04;hILHR@GCrOp9F=+PX(qFo?IEXa>`}MOqwVex>QwTy?T8(eLf%k|%GYeYwx$=d| zotv3;{!+=+T_r_G?z=48GvUmju&Lyc`GNgz2&z$+U_YEl7?QU;>>2%SFZ@g!_EJIG z!1UoakFK;emB)Hj%^;K>(}%=`*<{A{hJ%XnKHFQieWFbOM&;iAj#p#$X$xUikY&J~ zB^kT>VZZ^KM1fjvXNOSwyEcb*amYbh7N@UcH{cknz$U_qEdt_+WR)o%)g$s&@hiF~ zU@bX8YwlRO>PBd9w&ULu6L;RhOHG0@>RAMU8U)3?buNk~4QboufdbioB;IyLToy;D zHOU9AbRSF*iau{Yp6qkrQ4H_eK7*+&%1R|f3rR|YKl|0gT&zfxeaI1#*# zRKvegV2?MWOBL3NXSG?Pb8kt|lnx+MHq@(68)7b`>)#)^4;iJ!ooQw17>|CBr|73n zjNzR=egiYaf{Wc`yO4Kf6YreCZkP~>JH##w`HR!2|8Gtsi2@;`FHWQW+`$^B?1H4? z_9L=?aT7mhoEZ`e)mJa~kmqF5~{2)2Jv2@eijFJ=*Wt{n}!|;#u}p$WrdLSzK;U3|g~c zIEfQqW=$u?3KamQPQdrc4Nij)Pq){QuMAk5yvdse zV8gWVg2Zcn-oh5xZp+|Gaeb`E;BXoZyGtgr64!ccw0cqc!&(gyaP_i!zCzTPyqGQ|@$N%+Gn%cna7?GVB}>h>uS>|N<_#_{}L zKJ<7l3%);)F@~CBO&$6h(TAHdX^$7i)uSU8jEjc(rzA=7sB8VKWwK*1rOkJEUBsi; z0r#aSif}UsXEzLqAoT4TZv4^Y~7$U7dckHaKf4 zpT^@PM|=+-fSCXD$r$jolVPy2#4;VeAP-|XZB6FrQ2XdzI>;=B@OClCWAF9TO(-=& zDSa1fMz5BY_hoPJeM4omHq>==$oe)}Z8^WnF)c z=~B7Bw-0#TLtN&58vLC8%7M)a>Y-^Me|E0=lLM=Lf!F2{_BW%Ev>Vckljp*3(Epxl zu;1ruQ;+}v;8^~9s+k!ZI2iw5wt0uk(m-MF9aA*P{{EME4~OR)Zn-pr zMW%6Uj1Pyqr}yX&{j2^Rz|Ku{r=?9g>uhQ3Ap(+ogXdQR@b~4hmu?!lVJ=ajAgmK z$Fuzwt@=Q1@y_~u)(wCM!X+L>qNf8lH26x(l=%X`fp5Aql76c z2t}q*I`o!Ft!{El;vBTG1z5$X%?ieqm8=JZQ|Zlea;Z|#+E!w!b-ftIcj_%*hP)-x zIwfMJrF8ZN0bKhu36s0L2cVC%cWf!v$MOjS2tmy>(lzxu##f|x^8q#6N*#E8sCrJ%=LpRZ5FBGo<`;@6FOHYi!$YZ+@kCy2 z>UuRR=8cd&*gH8grmlOvKw9RQw+FocQmEA`fP@e%6)-&j3-|9nSeZEaagNb}sT+R9 zgZOl`*EX_pQNhvGDo^Ch-P(ek<=u?2QG5o^x}@4DDZ*iAqm3+98elU)+9#9z(k@Z5;Y_h!O#JxhR2CXi!sO`(cnx&IkothbEtGtd+NB z@7iN~7(14|jg?Cc|2DOxgdfyCT zSuDp+=%&imL_M8lsAOELu}hSbLK;m-M5E@Imw;1yGy#gKQVp!9Xdj$Sg7P7y!7o3- zM#b6{ye%DA@3)(SEim3oqJ=lgn&`=nqNOw9u)7A_^me!BSTwEuJ7S9pGYFW$4a!cq zL=G&f-?kbzcT<{S*T2-gaXX$0iPzZ*q%eYkP4eY`X|N@TIFrKZck|5lSq8j^urd--d5v6XKe3R_B*9vkk(fLq=r0(H&M5JeX%#F-pmAH5*wZ z_fsS%gWoWV84c5^KoEtQC$>BMveM@K7K--7}#>ug8Wmy2(=z? z^!{T&_noImS?-KPJzj-AgVC^jM+cYrH}PbW8!+o#X($YoLJNz6(eO~aQ#76|Qho+V z4RxsOC~S(ku7Q)!S%QXu1SNw6^XF&_8Liw_36q+{iIs;SN!BdkO$2cj6T0QESQXnr z+aVj!klZGVZ1wGFYP+}B{55xB`?gu@@~%7$faA(V8xz+k7l?P-G^vCXqY&*2Mcy= zN`>KY3p^RPb&40n!JPspxePt)8ODx42DygC@ACKi?LW`8&eV!nR9~Ye!^|9mdX~+f zv{Sujms~cix_H3z^B|(wZykcd-7%ko8Skf+#cm|qfF5NEA+us^-7Uo-dn*+>?CXD< znP~H|p+&>&)1D7BT+ITK6VX?6dkbaUVI#ayTR4}*dAssQY_a7vDv%At$|SKTXlz44 zhbV~14MSHuA8P!Hjm2)}rfq&uQ`{D~MzWkBGG@7E7a=5y7v+4-XX)RV^$@e{z|lMe zWEMNOI%1oUpHD2+u>WuB=T@XLwz0AC*>IhCZ@!7eeoD>@e80$;Gi3ws2{g+MV8T{7d*AL71e)@>Fo z)L`7KtVEEFx}JaaPLGLkcR{g803MDw$-z0DWZm4x5Rb$6mai@tP}B}#Ajb98u4;)^ z3*mcNKH=z)0C*cdDQ#nEE402v0YYk|r622Zswn{Yd?)BJr1fMfbc}LWE)Z*e5G+T~ z20(5!P&yu>3MDx{UukVSwlZ9IHE7k!eU6^sLt`l??rkLBtjf9;XlsSSU~CjXrXR0` z3rB2L$8U<6@^@#q00Pt+)l_VF-7w~Z6Fdmm+2NNmM0ZAADv)^)4m^Tl>#lG30m!yn zsO}9&rFSv;I1`ACZU_Nekpgy%U*l{pEk zo|>nz3da(<6x6)Z3>f@vxhI3FvQhjY&55n7 zI>I`dbuXNs+&;v}5lFreb4!|~wQU~phN+OUEL88?swi_HH8DU72;?)fYt59HSfY@0NK z)S|()fTCSfwRmXWP+H?MY{taAugO+ElA#FK+Gh10?Da;7Yz6F`k;c>`>cKGI%*?}x z#(Jvd7#%2UhnX>0`=Y&RQRUU8D|GwzEJp--+1b?jmATLea@i0&J5$Cjzz%+)bWOG(XD%Jp zjoe0NknofdMV1%#sw;AI+Q9K)!Ni-cwV@R#Thuc5hQt5M5@N|OcxVWXIJ9G z!3meBlQmL@*PHOMljR@a+C+4p^7h-fnZ@lRiMuF95YA< zW!(zu+f&J1`mp!-QY7SLVrBS(7O`L6=xAS?_JvU=tqx^lKd}t0~?US)QZ^ zZYxt&YqJL{&xZD5C}<9PT1snI5ZdVL>o;S~qpS7)>G9^JNzis9wJSCYG{wSB)3J3$ zuFbYoCt3>63Q}@h*{Vd3hxJ`${cmksQm_jC?k2vb10(Qb;TvhI#M$G2CfTZK-m=1`9~hv^MM{$T zYZH>s0eb9iEAUB=0RTp(Qz3`)FFi}a@^QQ3(nu?oEm#i*Q&!+e(vtDu_7G?Lbm!vb|SbxwDSE?eN5GK5O* zaZgS*#N;k_=MynJ|GB7dkt?i|dMo#EYy;eJ7n9WiVWfg(Rz`J;s_&Iv98E8$Ixlx+h;D(*L`)}1D3@NZSj zzmAhzEdA39L6X(?fEyP;;hU5$?B^SHn%{+|-01xMcEM!W(0xW(aZPd%UpzDTz@=e@ z%s{P*LIQ0(MqFWnmYz?mtKepYP7h9_;knz(3&oh>^{J3@g(-#Wgrid&*Th2YTuml0 zmpolzI%n|rErDKuNU#+Y<5JWWTCMc4Qvm0h+(GM0M;rK$th6oEb2FfV#bpVc`j5zE z-!x{ldB5BImWpToIUXPe+?E+u24>&Tq@4w7&&){ba>KL{fA}qP6{<{S-0ZEhCgdKL zW&uVkOe61J?=IjBJ58kKo8W@3TyxBT;)VfV#U-}aQu9G<9hbDRi?|LIR3sXy2c13n z%vbD-i%lnC;Iu#_B9j?rwUgZFnjNDh-)aBAi2gmJv}>?seF3wokkP-7TalK!io2Sx zF=3d54?f^4NEn>g*~&E5nX06| z1&V&Ow7w?Ks#4H-H)V$T;OMj>z#p%M zV7l6oxB9DEBW>0-g$`qz4Y^rdL~{^}XDkn|Qy&)KJlAvfDEaOY&>4A+yl&);Q%)4B z`!j3bm&iuA7+RMkJ3g$~1|G8O1-q1f`%&!E;lk7G<@Q%)qf? zVEl^v?iD$tjmcoIwrMaWUI9ks6k6w#%TyB>^kt^`&Ua@zX^r7FRg4z*0eQ)m7xUr~ zh?ig+MYnLVO7;WVvCxRu#W=TtJMc4}8F5y@hi3<;3kmSo38~T0f~uzZv!#lv7CEa+ zxon+=)411dGt2f|^LQ6E!{~!(7=bO67{SBvw%Bs0^-yoEgmbo9{b_V2J#7;uCl}ef ziyz)erYD7}NgXCcnBPm6ZQs@!@ewjMyAEZt-%A_O8zwwo&-pjI1#5g%6YH|DbFC0J zFIYdW`{^B&z=|;ApR+GJ%(5@Ct8ic#!8amY$H<1C>-)=HDsQ+NIY0@#=O^;z4zrJQ z-n_rHy9ra#x$5%3%jg6kJ{>SBy-I9yi(g=So#W}2#Z7h`Lt9XVi?{cyvUnBxzp-^Rjt_&TYnRcE2h`2?%@s zK8AeoSopv%^_rx|YH(F}iLf}cxWoqJNNi=^Hlh_PK3bMh1*LH{alA*mf2aetir=L) zszFhAA^Q|3g${P!XIcO@2v&@;NNrJ3#q#{&;_BkTn%RyF_xT;NeSJQ83pW4CT&jZ` zpF=Lm`{fexozk_WO|i-w&ZQ;B@W@OVELeel1Kgc7Z*(&Wky!e|zjcVoin&7i#wZy+ zlhswN#3J|8PALnctMjy!p*_dYV#U3COSi1&ic{a!1M6jZd1)AzB(Zqa^K4~2+n=3= z0HZV8f@$1VxUZvip9svBG9 zbx&mP{?AUq!uNaq6wiARyvGC4cqpfY*{q7h4X^&k4pKM5q2JgC7jL`6xDu4^zvo>B ztBg^cI~9M!7+$ZOuE@F0uq`6~;bj>t(CPKC=pD%r|LZ zUe{wuyFStX`)gJ&7P~$w9RNU$5dgr~M=bzDGkpgmV<%b*bH{)0<<^bD9f~>FdQ~LG zr_$@8mKGNJ&^AQRHX0SIqB0kU0=^2HCe&0h)YwSBEbK^^<-Orl*P_*ftu6~v+8Rq! zS56@#l1UFPm*shW_#8!_`n=vvyL||w&GNZBb${MHv+a7rJK%l3AVbfJU*gqGvcq+ja60l3I1T>Yd80XqI+D|^V_cB61pp^ zEbGeM(~?g|XNQmLyWFJ@g=`mt$;U_9SQ&`umA>ue)wjF7zP49zuVLRY*C+Vb zS628XRoNxmu_!#IU0$8jQ{S3RuVKmeHzn`8gQ9`ORQCR=kGH$q^T)>a{idjcgNMC` zKHaLVOS0$NkIR#t!=b0=sRQg13{?9o;ck)+QhK=H~)Wm0P&1(K)Z@%f7j( zC)cC9Bc+Yax8HUT*S_knCp#~#T$`Ww_f73JTM6(_S7T{qZMSyskB9c~S;#j^m6w|z zbMJzWp9dco6S8=}Pv1AzJaH~xPF{ABhN2vQ2ibPg>gw_yW+d`zZE5rF&v`z546UWH zt~{Tmu`anrEghWJwC}YIWqtA}>e>@kO=5r7-8i~V-PlSvOM7#z{MyYOH1t;Z`{?n; z;wU(YWa;IrQ`dbe4>>u!Q(510)(t7Lk%vhJ;0TIQ;GkJgXy*!6ghw~$m0 zhR$w3ZeEI>nv&QBJ{sS~!j?YYE}p8!>TEx>J`PsKlBPP{-;cHqY#j^lbRFLx#aO%A zB_TSgpOxTMU1jlZ2OWR%a{D|V@R~-M>bC!W893v0eA4Z3d!M*dtr}I`>ZF<)b)C}r z+QEJBq|5t5z4P_sz;&zB}OJO5aikY&GDZF+iwPdW&D9U}97DKcGo zva8!;4C|A4{!sS5%X(MM^tpTe6wSLG5r%s^4ILOQdO6woNOE`}f<76_LfZO#EqMcq zcCh6k71>D~9!p|$?=g|>)@^gO()JAGZR$0778rp3FfuDA23Eo;XIe$qYqrrW`zcfrfH zsTSQk^-(Y(E#hdosyve-z`47@H4W~ru+ z-3#Wy5E7fl;J zoO?}mK8d>CrM}h|WnCZFG!qw9+Mf(rcU=IB=v_YU_AzmfeP_HrPrGBLx}Vpt=v6vh zo;L$eRl1(96Y#WI2cHhZzu)v)JKvs9eOqLxKGvGx8Fb18Th@uVUU$!qc-uX0x-w0p zu)HpP9n(7Bb{?8|Js)nLKi_uNlDd387(Sm_(F^AH7+@=B?#B$~>dcuKKYLW$obFz8h+Iws$eNvy$TE?|D?lyOa%PO7C z_qHF2e2#b=ua(V7;T6npWgz}dPYCrHbTXVlv$^s7m=%oF^i$MrsAAaUG6= z&otjP4_7syWE33{EX63MF9#6-o><6;gAfvca`ZT zciwm=dWOp|Hb;5Rre+Uk9eVskoVpmSkddqYjXTBcUOD0@o%waxujS!-)umXMfirqk z;?ig!sP?_q9~mFc9m*A@G4ngirpMaadubnr?_o_SoN-F!XEZ+^VM?80q*q|B#M}tC z5n;_si{Q4YV6U9nIKFgpZ6!;u%PE?hJAq8+*Jru6^8n%Y`^FD%*VoLwG~t)YKb37d z&3KG?U;ejfmCfe;CBPV%*GB6zj_V>*B2!w$S`4kM|0y)fCyOV8gS9eII#11%OA#3v zu-u$~2{`v3>8bZM#}?49lsD{hcDWyCA9r78yED|;NAc}xmrQeK1evptEvb>GQyN^9Qr8{>G6Y~4sc<@SP zbp(e2&t%HhJ8DDyoX9#S02LZ0Q)KT6cQ2I@W4ThR@qE(Em)asRjlA2eQo9ex`gOaH z_V$SZpM6y?JkkrpUGo{&b!3uJ`e~Mr`3Ra(6KS%?D4*R<3Jz_$N&AVN7U(tlkgfs< zyEb0Luy(y=O>$BX&i5jIZrFJkZ>)f+v+ON^+gR%`%ziFOOE2Kg64vGgnkfA@bq$k^ zUVTf70J0WBvdd)!+lIqueo!>g8XGh(O*InC$da^=y=cJ9zL%dSwSzAf!>2_g9tfrt zSzkM9b&{-8B(^zOnhkSONA(c$6|8AIH_^3bD(ha#LWgB3Q&K8SWdfr?@-tH74fX^r z6dL8{Jd8uxBu1h5AznRp;vn-IeVecPgk}!*8pxV?tv%VdZGdNj9~><6H946qOljFA zOc8-8i^OA~aDx-DiEY0ycWCGp0w~SaQ_c>X&DC>z9d?hP3#-B>wN+q8r0Nngo=1H~ zAPwxw-Ffg`D=|~BO&|0&t}S|y3_a#r=|v`udqtrG$iS^I2K!ram>FXkalw}<{l(9; z=o+)8hJIdEKT?585iVunO?Lp&vk18C7CP$gBOmB805{$YbD1SJpDeO|n*}`L3Z~Hy z>AhD1ipk8pYJSfxF<9EBaQNz8FJJ%BwV5u1sZ)0N5y@MLb$R4&=G07{FS3nNJ!>53 zw8pX`uhlkvztuMktCu|U9q@@kL1~>>yx&+;$8I7+x@RYZxt!l-Zh|94 zow#!M5I359%C3=y7&$WKg{E%8>8h=cAq8-!AehGjp?4A0$E-Ne_WpqpVz;vFR<1ZvRw& zB{exq_P)CBzTt>mdUfx*MhdrNx$g&T`v&{RcnHw2s5XbpX5Kz8at9!9W!iAo@Y4AU z%*@`O&qPo*JxOq>x)s(V1(ut+j189DnFzyddU_CvY3Z$ULK3T;n2z0d1d@nqj9PT?3o_VqDTb zxQB{|U&7B4Pz*>qBt7D8v7a#jM1Ued;d=A6Ip7!}ol6yDwC2gfUqhe*6pQws79beD zcdW~veJiGdQ8h~ytc$Sa2v?}um8!xHEn_AhOrHvIIKj>kEOm7l{BH4ZV2X)P@rNi# zh-;b7ZX*U|71K-W<0$F}D##HHmY}`{00RJ_fGEIU_3SS;?jx$WU}c0Fc?FFHBnB4i z#ro>nXc!iA&`?xzm25R%LM^&9kvVg)iAGK$cX97*vgmR?q`_2JZeODTlkIPHIb?F> zT+#>p6msQ!H9!NWX;I$P{fp9*0I5jh|A1~+$PM}9smPSD3pIJGd~Q7 zzhdehBol3+dmjkDEf0N)4+e+uRY%V+v~polPmtg0Qv_kX1jhNt_t2w z9P|rJAm>j5%K2&y8o%I@D?(RF?Jl51C@@O&^8I2srkvBtvDHfSKn1d3xqHMwiBQ9p z=oJ1aaxaVBV!%YO;Y@V1GMzkMBNjBsnqe|6h2`Ogs1y~5G=qOD-6`c=;2Q%bf`wtO zm!Hw@@n>G#gHXbjGmWbN6HU*24c_0^{upJ`e6=FHe)){$ui^Jg08_y-Df{>Be-wPR zKPF!uyTvSjY?$1}zVXRc&vr}nSuy`9`%@i+3ZuS;KPp0z)iI!m#?~3j4#}6p|1tXu z1DI$S=O4hy-v+&sSZd~a0r(Wy9)4fG^zOc5_-|i-aDzF9SDyB?Slz_IDRIl4s%LA+ zaKp31n2+rQk1WLar2XJ5BosYm+!j%yLX7#fF0Ib$d&IzraKjOv zjsH~ckLvWNEULo>T4%OL;xEW^@qd?t6RExbsXYhAiC(@xVm(y^H0_CAfqw#=3ddu< ze+-;RcFUjI{RIL}1mXFo759ohYS*z}7HVInhO&R(`(^sSiuWM;KTbhNVC`wXT8n6I zSF9N^-Hyo3O1MR;u=00h?-{>o{0k2hlL0%=KK0Mvg2FkNRB=IgI)?7yWqW-Qm=>F3 z>#w?$!<>%*5CMn7{JHSIN@HZOTjri$0-y?*8s>5wpa>WSrk>Hym_G_X_xOa^UvL0K zd5hdM?M6TUu|vL(UGKRE`TqgU!~3D-HUdBiTnk(tm6 zQ>qN3*<&kayOCc4qzb88%5of}2q{L2o{?Y7-wFu9S6BZ0`f+$jg1LRvN`PuAC|k`? zLspDwE`Rbr#(&-QWoU98`xly?v4Jcp2EpKDVCMfJ{tG%SDY-|IRE=L?JTUYB+#=q$ zSv8~mM-BdER$xXR`X@NLeZE$k|G54)@FCY%OBs4bK`4>SrOrn{i2mJ53v2Q{EH^0JP{q|o-e_2mBZfui4m;cp}-pv24 z|9%G6_oBelHH7Zi#PqYoc4A(PEjH;t&;5TE@cbN8gM8!$V?p@5pqako8ut)mw#+>& z?ubkg*`hzs(%9vs{mmh9Z=-(;e)MW+q#kjCt|hG0Fwxc&e2T&;fcB`qoiqW{Ry zAxYwnTcqa6%JKh5vr3+5(ckiAWIh>*(==E2k2p^MBX$-1QU8(&NvggZ9M@UL{}uZR z;i!L!bLE=B1{yaycMlYUk?7H>nFcO<8Ih@Ttr>1aU7YZl(F{kblW6|A(M)SbJMrFr zm<(Y>oS0)`Z%PxCEHx)ysE}l^Y2iBXDeEB#0uDz>lgw!aK6i4)2lbb2==ol>aF9QU zN`4$SB#y3cBiN}v0SlcST6HbHm`kG(J{P-(QbUGoZFn3llubW9kIcA6G;Dfv59Bs9 zJ<`o3Ng5+>v0UmcjpI6>y`%9k zbcuUCt7)3q`aTI*6oZyY^cEA9E1$W)SVMOoEW_795uoUJb{l@TYQMpQh}aa8GoEcM z_wDU;L>OxMI>VC-a!)#OFh9B~AN@8_CFB!Pf;&jAJX zS#W;kDY@M0_NbH{`$q~{ndJm>!xr2JOG2BE2oS5%wP3L-6#<|)z>op4)~9#NpaKo{ zdSSp#R3`^M&}pS1QaG)Nk-CzVc%E&$vroBqv$Gz&VW11o#JuAMW45RgdANk@b?-sZ z2N{BCM{4U-P$soLZ1u0TLx5yYMn}TgoZI_Hax^pTy7!5q<3#a8;68Nl8E0${WYYv7 zbT5X~?Q88n+=Hw;9c-mO+7oF)E|apair7R`069VRaigQvQx$LzSLJ%J^~czAy5k7g zsJfs|OxlSA<}nG($%t&sM4Zb#21^Q#Q6g4QLZW-5!r92Q#U;1eG4w|=Gw=5bpzIQd z!#a-*i=>$>B-nAr`_Eh|XGV66$`Bskx851Ki|*SGd&QE~m1=-1jSH?6w!_ajLChdp<1wX{TMRsbXlvYOf8K#`p34ZorFcS$ zQybR6+V>&0_zyYnMn}sVZs4e>oH`PG`z~ZA^KDk_ zl><!$SN>BdHCEY#1{<4(Zg@}Y@E*IB8ye{66RWNkU8}PRG7~Eivyu9 z9fL;RH4oC*=pL#Elgf4kmPuTK9~OCbRz82?$(a-zF*oo$MB-5lWG}PDg)qLMD6qG| zhCCr~-@<{|tQ>6Zq4Dh1ft$kFe;J%mj){Z}&r*z}vt=|VV$AQGoUhg+gu7j+^?p2L zCeCwfcE0&n^ojgDG5XB4tt?U3J_oZ7c>`~bc$k=9<`py|s$yWH6$gcG7D{|cSP zM?`s)i|xnVK@nErXE=c;>-;Vz0(y0%t-m$ts`%Y&XSMDYw$w#oCLO0*jZC91CKdjz zu%s5c8vFb7^@Mrz2}K^(AH)!0;Jgb6;6dhy^cZA!4v8q`g-exmFi@}jvy65fRbf<+ zM*I=?dq?lMq~Fg!U?T7b8Ic9B=pFfwSdEIdq2LIh>!%4RB-smyA9S=w{>xl*A%rdi%HC2H~g~E{A<00gm*d>`Q*Y5@QI4vn2Gz`m@Y~ zAggBI_soQqg;452o;8vK@GWAB18*5wpVj|D9C7W&tnrR!V{QCJIV#jiF4QgZ(OaVB zI4TWeoo}XPpxhUaW&tz0{#Ez`*2Pv{hzxIpIfFwGIzhwY$!~%5PMhAC>Ko)}?fiCA zP-)R2yUmacT!Ke!R1w!i4^u5OY-guG3>DS!DJO%UK#eIh3Aj=|hSx+>m))rjv_{o; zDFND=n!Ge9@!s}nIWWCm6m{03-aPykg=hfqKGt1nCDg&MDB@Dm8Q7!f%zo+9MvN+q z*`{hls^+8K1ZUgXh$s~xL)8*O8C*=zcCN}#$1&Ykx^Rm#1ENia+JK{Pi$o;Gz~{<= zDss`rQ{Y?iD^ZhHO8r`CTW>ELaVntu4$q@uKm$6L`VmeoWvOUMXk%-ge zr=A%3PwJAxBo6omBZ$b=$VDGeqIHsEAabppu)1zg%E~e@$k}Ou^$2rRTLtB6v3!5= zz=TrAM@;tSMfpi^rI2OOITg0eT0A#^gs9z@3GpSWI zNl^%du2!00Dj3WZ3bPoRfq_HBSmFeUGSL%aEP_jAGth_eSV6e4 z!iuhnqSRQ-({@{fvp39AQ!#Do)@j$E%9X((Dlt(1`om>DodR+<|lx(J~_3c7~dv@*YVT zRdP~{2AU#-w@_@pe){a9P``j%6Lq4*!_P>Y2*qjV z9$GVct?g2_Q?Ds{4Wi0)}~?SgF#JPA=XhWa;(4kP+h8X}4MXE^67 znF@~_nI$C?K9x)fxXh^UX$liUeJBW$r-pto&Wosfmb1$ZXE;sB;AWCa!_;6^r+Ufa z6ljh^=6uiO8jQ-8OJ0{!d!gOEJ^K?po3^(|{_-GmiX|+}D6~ZH3WZjIeoEy$#3QM# zwj06JBglkIC=_TC8}5olmkWh&X;N9I?atfdH6AFvhKGV=ZEPm`l0gf8arg}G)rO#R zk`hyscO1@DBq-&5uf;<6Es=NoMa`hS-_lCKv_qq?`(d+(t$^uUOh=73WVqy>ER?>E z&8SlzC~B1)4krXciUJ){Ozg){-KIFBdd51caI|2^))ehW)saK-Cj=roY9y{w!3|g; zV6~^32W;CL1=mYR&oIrArj2zmt2%!!xLims#^O8{{3KaS0uTyO%T7vWsk}s=HD1j* zuN6QsS}ylXf(lp&PixPYE8cY^({@4<=npUp5G{M{25r=XG$`&1>SyonG@5820ojdU zJk{}nG$2S20Dsw@R#ZnjCTS8DE}2`F`zG${t}4V4#cZa4Dk1y{;&HOEOhZmddhvT-vVgYcxoQ;|yBu`w)^AtFovWeGV)y%A{}*iVxAa-HIG&P_&ti3?w|AkXXsfiUM3 zT8PS6G0IY!K`962o*%rtF=c{8)lfb5bo^otIWzA;IERR$h>>F| zmU32k5=iVx`fa2LSx4~xC`y+o;>7mJ8vHB6!_lP|-P0pe zY@=d_b@FwDca@_8QSFOPSp15w*}8;tPbl& zRkX4Ey38ozYyvrz_>B$~X9`7(MY%<&#JC(zIYnz;`QxvDLcU3I%FNksoUyJh0lX^4 zJoG>)&P-BEvuV+c8kHnM<=H$rw(W}H=QF1P*D`9zpD)l2kY;F~iF>LYbflml-DXHC z@nSf^q`Rk5=exzp?^MH8s+Wl}R>CWBfd?Tn zDtzdsrY1zKuI`k|e!uLJYrE&*miCAtF_MqWi3;#yJt2cvx8xEy|KI{QGjjhK1Nl&` z^o))NE#`*^Wn6sLj0O+z5gz~8uThdSUeg^X+n>aFrO_MwUsIzo*Fo_ib&15qgQDf>hlr?k5GnXmkd ztJ<1nms<>z>R?d~c}ChT{Kmp!A^W`3qD)#-!%XQ7GR|LErjodRON63mwXHL8YvPoI z@g{n*{+41UxhOjUq5>7%0DqNV_|_#cU5`?nl7&^HY6@aPFsVM4Zr&cj=Ys1)m%L`@ zREUcmIVkQ-vLNg;X;&iU8DWY=KwD_u*j(0`%JyizC8wC3_wt-g3q+=4Wbwg^>{CW? z;o>nNd%`xB&S-d~jiKE$I8^XV45?I&RjBexN2&vn7#|86Csq;Sa^|k;naGb zVTG`4`zPEt7`-7Oc0_cixcxO%T0z6%GdQD|VSG@%*C6o(j^Ka(5-G_pKB#UCYPt)NE&1z&%W^fwQ<*-pz0h6zAOPe&JLS7j)tUGr)?LR#=%D&ygp*b z*Wm@-tU=3LdHeWP`aIRyg+3B0>9b{v(1_61$s>d4d8X9GIQvfc3bLQm6S_!_{HNPB z2Z`=PB>j<-Q+GErCIrgj1ddl(XZ+51S@=S430_#C2TrYhw*CYA&ZhPN;KABmLsK1p zX^Uewv2&zcwkvFOhDT?}232RdrXREz%pq<)Vpsb{$<+YtQw3(D*Zq?bk<5EM&u|P*q0Z z4wMasCgBiDUvL&vnLBS)cNg~&zp3|R^d#US2Qq%8_!)o{oaeUedGOgOzF?cu=yer) z5))||#_=44B`l91M$o193rettev;x$Df>c^kGSI^F88A2c2`^cQF0|K0xpsT)wrz# znW&m1Bpn$_uA_E436LbZd(LXxiyo3O>oB02z4u+R99d>unE~bYZ>2*h1h}jDOv3yT zxmJHNm0SIr1M!HA3=lhG8R}PFnN0CR0@qML2BL4GwwQPy`Y?rAo6|ZYBhOA(e9>Na z5bteJVo`O{_p_za$3kPTV-^I%DlE|Gq+Fyf(ooJ0)5q)cQvI3XA6YRqDFI4o)%w;2 z+?>aOE_rVywlsioVm?@BJUbi$<$pbC<@O|sG$2_Q8JzI$;e5w*dLG()MwbVaMvt6W|Tv}0y(mGz< z&|{Agjq$p0UcmN^2?#lcy*JLvLX?OuW_vU#lnPFN07|mFHCvi=A7b0%HAM^enoh<0 z*$;Ycy;_H8B!h-`7FBF^FiB>}XxMcP>{l#gXO_@FN^G)UBBhjzH5m{6nQRkjD5=%T z?7J#TI-*@=TR_QhhEsT`i&g~408j<(w zr}QbcA`rDx6R9zX~e zPPA3W0e!ANt?GnD2IrlRA=Fg7$nzdoJe*QGA!*hC2$D08h)-%Mm36WobLW%&3Bi(T z6C85z+lf?a)xZLcl|a=@<=Fz!yj<#K9KRO1L*B{Y>mL1|pe|cgRVGix@ixKgTwaf& z8ptamDC(p>I59Q%3pO0P7I5_qI$&fLT)8E47@M(?$x6KVMbKrt}y z*yiRJuGF8)X@jee+$shoPhUx@l*a;4Mo)NiFoff%wowbHogC_%jP8i=D+(9bVxIZR z(Pb}OEvCjSq$M-jNp!@l2S03q=oZB>T~Yl~jDn+Who5wp>YGm{G*Oma zZ*vf3a&8GEJhrTpx{%aTE5Z@mSwwr7(5Eu*g;|xK@(u!2_8DzYa9)skY?Z(vXLdh6 z2B&IBy;#C1ZU&xdnq29m5N8M<T?KQvY-~`-<9e zgB9|6pQ<@YClih-Mi*ePRWgbg;~Ye#+rEU5j@PTQ^Rz+M0GO8vGH>e0f;EBG%O1hH z)1~oolyT&J#CK>GY2(Y@@e&PFwJI1j7Te+^C0|t0h<{m47l2KwW;T5l(V+FreT1eL zykJfJo<;oS ztxzOO?JI67Ae6>B9C2NhGxefEI+!Yzu8jF<(uOeUVkxYM3xXL}SIo$1q~5Ww@!zw`vr5M6`Jg-=mO5M$Xa9Of|oXS{qLbHGXK7K`r-8$Thg8DxkJQ zY6Wna&!Ql1Ww2?0MlQ+y2N)@`p}Pv}r9w3CcSPKyTdC6BnFw)%HE;oa#f073C`)>d z!=e;bPLn5fAI8cInMXCdmz_2Fah(Pnw8d0$bEF~y5*mP4L0!%(C--v@qyx8G-+;=I z7+GBpvAtl^W%-hNC-2ZsMJ-^At>bT8_eGtLS#Imf@oqEbzq&_CabbMbtnRqqRP3i! zdBlCERrg>O-gl>d-&$-d=@qupetDLRZC`)Rz-)ob%T?3$)6`|e;r`W9YLvomXGm4n zoO~6fpThNb|23RwlqL?%tzs{UW|z(uf>eE?Jf~${&Vn{;GY&X!x*(u-t1oOpySZTU zGAbo=bB3pDp+*%7ci*YHEx@+J`w=W&qel^Y_WRE-Ce!YyN=Jo}sSj&Oj*TN%VK?nA zxkZM~tU6@8mVr=u8nasceX{p+!#cxUFiSPx{8xCi@IpkH69Uz<-?p_HC+Cl2Hj4zc zTn}Vvt#eNMWH}E`!g6~MBw^CnU_iIS*l?5jp8dJpgGxy;uz$En$VlActk*_0dT-EV z3?TnjPkpHI$cQC7m5tx=^P?tJ(IVXCiTYQ7Xj~fbOt$5;U&ZadNKZIiAWyA59^Z*^VU}>fAfMP{h3O-IfAHVj; z4)9JKF%DJyNr!Vmj`XsCnUPw~By8%BGwS^0Ec}xW-?aP5tCfRfeW$mx(b3WW?Z5cT zi_BUc1qi5H76=IGzi%RNG_iN}q<8dM(X~_AmQ4CLS6_kW&)I=eBhBFR(A3-r`zsp@ z2XcVv#F3L*v^{IJBT-YzF6`q;$3ej?tz_(ZR(2$I3vNfb*VK&v%~V|)u+ecP7|U!~@XU`qRiU2Px#_HoYU8p+E34*u?tD75>SLUL?Cg}) z9gFR?828mpbz!)y92-LDDO^<5tInSsjXUpbr`KAh73E{9vWjmn=PipI6YX3<0`1Nc-MSLu&q>KbW8XM`#sFASw~DBLjW9m(bK!^ zDCno_Yz5L_x|52_uD8z3i_?1tOxYeYey-j14HEd=@zXfJOthR-GRN z+|^|j{j6kTw~LDFU0G>=$j`QrT|Y#`(w|i#2I%T28$fD?zl+ zgjHLy+)G{S`73}|gb7e*MF?^?%8? zs%5ELq<&pWuI%&%{S~fIYZcoOpdMTSs*h)g*RR447s%=3?)9rK72xXS=jrQ0rZ`Cl zDC*+s>*wS5dbxR0(eLW&=NRA-Ksu?VDK@GfrzG`8rCU#Qi(5G>J&UzoUoP!YKe$T| zJPFrC#g{Ta^wgjhi5BV}{=18|?XW-BY1Ur}MSah$NGq~`m*j0p9f}j)o9MDeZE`3P z6cC6IrB^F1`q!XN-l4psP*sZkZo0#2N9t$UrO)B(Tk$>?nR3@BYeF@WP2*;|CE)b? z`IANJXk!jOq3~aQRa*z$xiIO+gW6(L-RD|a&51SJ=&W|2Tz$pv_73G2rPZ`?AM%58 zUPfb^7`AR+;bi+YvvPGKuvbo&VM7i?N3VN8BS#Bw+7|%-^K{ z?4L8k=7wC6tnc#8^7q_~Oup1?yQ*(n{^iYbPV#k6jPnE3&2~&mR&nGT>FoUScgnHk zSe&W6R#&>OR;BH{EX=#k2X<@MWb9Z0gC$&-NcZ*y$R6{H z4)&K0(PdpRB()0I@Q`^a|BmD1NAo5%03X=v&7k&|sJyBe+~t7CnxKd#rVi8!Cf zu%SyPOb-&y93uEm1Vq_dG1761d++bXOxP&mQrV4bipB{k8EjJZM&0^nu7Rl+`3<0F zJH&F>j~n@sAGq1i?!RUjdc}>R!7gtV<9_}oT{#fW@%h# zak}+a_iB4f41QfEWH1TiQ!HB3U*W9DcJ{WS}$)<7G0N>x%3Q=7ypeN6f%X;CG-c6lGB zP_^qh5=Y=cB9Ga3PWA>$z({ygjUsMvLgtL_i(6{iDy7M#(gozzt746nxVzNvdVPL` zMCJTY$}THhgprlP?M#*i6e1Y2bG#{!Ii8aS$f+?LVv#>UMCLFg-u0K@WQVwvMB|Bs zA=suYaS{4im?ZBUA-$%^`yJ^pB?8o6{W`TEOfklIB`l>X3$_F=|8{{+e{*=d5XJ~f ztsshG)>}PHJ{ORLKcU!inetAmzFT37%Lq6;&A@!OZ>-W<-K4^%bG%4Gg7>aVWJ+k5 zBzIQ>bfOvf#k$!gN^w$?y!e&BT7W?yq6Vvo;+3alw~`9iOlXYlgadA|$#(W*XCk|` zhWN+($P~fs%>LoLyTrq*z>RoM&P_%DkcBCupO#31T(BB4z4Q{%7h$?^%ht9ps1!qR z_yCaWgb4hB>rF)QNe1`17W*JY8%>V5joao6J@{g!E!HX;hie`$0)D1U$ zDPwtv+ag#|9;_w|=U`+%hZx1~TKSvnsn*L>x@T=%x7f&DRCR7g#`}A86UAKmP{L>o z8s-+x0QvWEix>$~JdmfA=F&cImJdD|zZ@n8p)`^Jq50z5w%Et=_lR;t#@~HYwUmj! zY)PK38JxkMC=@x5{Z6#of~54m;_pFH5ekV$qq6=ji#SUtX;7}^A~7Ii3y2FM-EyLS zoQO-P0ENElBG>qISJRMzz+I|hwi(!!jSYx5O0)f8&fM2xqGQP5lFoG#8S$+JsaoWE z>|Gbicv5^kX5C9-WlZ>?+*DV`fC=|4K3C4Uk`|5x`Sw5ci&)fxx5NVtK!epbzo*B4 z4AMe6hDbUdRYxu~CA~UW?&!Ekr@|5=S4FT(!PLb~eq8UP%B{c>_MTc zV}2=7C4xpZybFP|l}nEj5&|%ouw54a*!M z(!hg(x0=p`ODUqdR163WK!KOSk&eCt?>}Js;af5gKxTQ-xeyltgsv0hKc|qSb!Co1_D_^9;f9;v*AxA46Yo65(a7ginP-Y=i9f@z_(P{zi@wZpl{hDP{eBt; z+1*Z%r5-~quzH5svdj71;N(d4`^guGS0=Rdlr@p1Jm|zR_qm3iUeP1c8E2(ycrD{h z&{M*E0ZX`uyz{qA#QZ9jw~4W*Ryk(Fki4~GWdsrxih)B&-Hb%eRGZO(ZJa;}fni6a z*hUF_i{hHzri$Ewk8#MH&^cH-@C<1v$SeYQNv4xv17p00N{<$2hL-Q!KKj?iVOJrx z)|%)LS&(+Fxl~Vt1KyN$YG~D(YMe$ zjD~WlwsqlPI!An7C#REIzR4ADt)X9>|Fs3(V^VC)9KP5;+NEPsvEUI9_?25pMqE+d zsgTEKhC!Tg#@`d0SbD<)Q*TcRhC9L%|L!oH5r;Q2{0JMBn_8a81Q|N1Ls^xm1jK~I zR!MDNn33`^dKz;qJ788P8Di-w&SA`441fCeL=Smzahr!@r}y_?j-JR%6vO63TE88# zLxKLv%)E`HR`CoBHwXxkQ7)p?B7o-_@x}pHYBk4Bttn)ynoTLOVBOYDc$@p7o|&Ce zs3}(|kg&XKx@iHj!_!ik8sWKAaB}lFUtz;?@enR-iQc)c&TemWhoZOk5o-1 zO+^oT*@+@IlLl}69La~M)y2Regq5*d#+)F7nK{vgh~u7ODIsvY zMSR$W{K+ZHAqD*+wj1-|rLeX0i%RFiA;yf0!hOi6V1{i_KZP-$StB`E`(uV3DF1f* z;r}^^$YH42H=&51K3iv%SAB@cOXvc*c;W8M~3Axyk%egd+EgHnvVnM}`s z11HNmv6ak@Ar%%vmpo2{dQZ4y39`zFO3~h47MokC;!huG zsgoq3nx977b;8bx&TjesBYedu|6T(ia zqJvZc`td&KtH2v`XRMBCBS^)#{Ynjyif4HurJKMkxA>)Kh^y~TVT^N`*?EWA{M1*g&LLSo!wA?EME4T6+8e%MHse%IGtu#`~+A|fFq?-Gj>|wKc`5Zc*Ki9>nZCiPgkrQT3`&4u^2ubQ>43E zTy*Ej${}GmghEKCoKGhm^0JAIn{AgdSEKOg5E`Gh`qmV_ym%Ti!ruU8{UEUTBJZL4 zC{iRn$3rZjMMPwA%j|2XF*jjlxQwB@E6rkeL)ASYiO)LmI2@xjsI7l*y98@x zi1cq)S5_l7%}%Hv?s2zJPM#-7^#p+|RA)e2_g#?oUd2&P*B9QX7iUp^mubT{y1A}kw<0(KMUEG|S|bF5g1;s36);?fDkd)KBmZ3F-vt8q>7~t- zEP;>TVmn{2%0of#87EIGo#6(iuv0pPbQ2cxkY2g}q86M`*xSV)!|J-1=_I?3{TrCl z7NCHE?*%W*oAu_jvHd4VUPG>Iu5?heWij;mui(~l0=z0xv(hUKmW9GL*(v|r9hrES z06_`?#7u&C4w+5$Kf z3ti(wu6pnc_OIQ!x!-!Oxvz~K4ChTWJ1+L&ZjFAIRrc+jZ>2deK6}@YPdAsd7aMPr zm#4SyucL2AI(NOV*dyRI%D{cYi9x`^ujaO3jrqn{4NHd*zpxVCur8q(_R%(kyeS=%C)tIn^>wQW%h zC!asHK=|0<(@x{Non#vo=0!OM;ya6=5bieSrd*PSMUvpJ@Qu&me<(@R(V*4r8d@Vy4 z?1#C7ujIVjel%XS;VQ06etNdVZ`iGi(e9l%RifQ>;jSY7ex`q<_+DuFMcDjHT!|rt z?EKB!BrjDT4G-s{jMk=gY7|{E7xki!^p$qy9@d+JH)sd2(jt8&<&{FND8sB7~@`md|A z_E=ost;UW&4bW$sE?3RU#ee`Q0PUmTnd0!$P=%_e3b+XwLbMypBqmv~tu43?>!tI# z@ai78>ptI-{!EwLy#fDPX}s~hxt&qY{Ty%enoMp}5+-}Dd`Rn4VMSu4OZADPP%paL zg!f7WzjC1em! zcHiE;dn9vve$V~$7U&(YD`V`B#6feIo$A`yt}~A=Vh9sjUD{=5lPhJhwG34s{X1=4 zi08=3{FNGHz#g}SkIG|BO}+XM`_Bg>$eV`!a#ZAx-zlwIh5*bUpF=kl#h)@NXNXnH zh_6O7z{}72x#7-FLlZ+6@b?hL<;15`M*dj21_lx{v-EWRFHdi_8L9TeD*FZ>JDE8gk z=tr|}`)~mkEBI>JAV8C{YVr3jlrt0Ghku7-9pz)2!Q1L|l^cJl`lT1A-#qwwtpAsG zRKNc`PPM~b{a(&xrobKYw>Pdrt^gNy0yYfrWWt0;CuP^m+IQ@t0=$6D<5e1O*DJYP zpEt<5EaT)K;&P*0CY`B8r1BI0*bo|NxF6%*JZCK|`K3zMBK?>Yx;=kkG^w19+d{QE zjCqNst_)}b{J>?;J-2afdj+o>ymxujT@ukZzN|*N(_f6yy29=gzfb z_;9{WtrqVVV&%#z$NN@n>|qw~Z@0WD`Ec{O{-FO;!Q<9)a*7ZJ2#A6i2ng@Lk#Dv} z_7=u&wiZUtRz~)A4yIww}U)B)acQJ*Aw@%1%E6lc%LG$HNFSENE$ENIY)PTIpUF=6X@C_p|3e#H1bK1^9Tslta%b-$BW7=txjp^o-^rM`h0?oob&hI zzw<6CmVYQXO{>eSDCect-yxMB$~`=u42QPtp;5a>JjMc2BjB}kBcb%J|Ku2~72um% zW)8B^wts8%>Yw!i9(Z^pADkW^k6+x#VxMOol08a{Ym|qlrvpweg)gHYzM`uSf*B}2FaV#^qi-8W`*Dcr+Bi{> zGyF+7Q4WRoM4-tqdg4yX%XR)@o-jbN=m7rrGNj|qxI`sl;YeD7e6(RwnHy?`@g*R=rqoHbj94F)T?k( zIl73^a(w6S#mFk2MFXVskorJDq1^g($27grc1XSJt??m+q!dyX)e@CgcSIvlsgHef zq}kH))hG49Y^kierskYg8CBmbfff==9U1iawg(0bC`go5YZ8R^ib(Z6ccBQ&4=#Z5 z01kj$2#~L9r~QZIY*EXU{@p&Ba+<|R-Q9f|;2joyu(zGn zw^Dl^PBOd)AE@xMWO-$T4|p7S}Rlgfxi6IU^ZWgd*^FDCu4xsyvKiIA9R2HE86H z>OzuE5{?#185BvHM~tJ7202{XksLKrG0!juIv5u_aT7Z>EDH+m4;(g)yx>EGa|FN8 zS42+1O@W_mCrPy}hnu*yJ?KsEiQToWzk8`b_Y#6fse8IrJBE~~Uo$QMH$gPLI6HAA$94NGcn9H;o}E0)HX$%in3K zoT3=-`82t6ZjBJAg9eO#I47K~7^G?byFdl1l zneun|aQ2*swsS?3tyt8X(Nn6=!@0vQAn7+a7Zd|s0s{k$c? z*loWA<4lkCNrV)k+G2HJ~p{$U}1Y zp9Q=+jtg_ZACq^sYB0Y4>~kT0#p=2+`2Imcb*T*&UGV! zwpk5&Vzs4}VXwwkZA1U%UWTD&!h;=k6ruxDpAIpY<W%^U z(qR60UO4jWV?^PBJl9*h>@}yTLUOI`2Z5-;u3d}zadRAS2ic0vs|mF@3=~3q|Jg)f z5-m|0K5|9Ej|lGfZ{N+nCNqxla0~{C6?gq1!4&@?3wQI>pcq}Y<>T4th>(c~We>;z zKhzx`Y&Ngvx6h?(H=@U*+dPE%T4Q<100&R=tY~nx`IJf@*Mv^hW#KM#XMUP&Il=m7 zv%XB(HunSQm*D}`>_1<`Iu-*apDRj7-6>nUw#;=CFo7A@=?z{lqG{Uf(5d#rUw+*b zROVC7?p#{e#9K431bQ~ec6h)1257bKZT*i?t6Q-Ym~46?;Na&XvazNd4HXKHP0P63 zULzjuY&B6)n>R4R-DT{G{yHNzk+R`ZhE2-Vut99&Bj71)_I*>ZdKvmOaeZ}kr$E(K zHwi7wih6XueMm76{uuq@Jf=oFr|G=HLtL#^W`XZWPM{N?q?lttt~2LB6b8o}1#Sie zY`Let5IROWe+&xZcf2_ug7szlU!`qMfvUjRw;w1D!-F&jH}L+|+pvG)g~k)!Q+?DNA`{<|B zn6$}Rf_>;2tAX3-I8ra2)QbN&G56iOzBC`g2A+Rs&;6Qhr9jZ_+P=Lj&!cp0{@p!Y zamT60dwjh_SG+)BNOdK$a6aW`XzSyEvQ{guz;!p zcH~j)e(CgGmwRJ_*unj~c2P`E-+IT=IL#TplOHLR3-Nq;p}aEt z0p~R^o$gSLt0q9B{}a8Q@M9H~# zCMrWeucL1Fe*E3gg1zvCxk|0yrnhJH46k>@FZZ-*nJW!fOsdc~xOw5o4V%wW_S5yZ z*Rv5f-aLPdf7LO{x~`Z9>q{F5@`=*>>dU_aul`njE1#urirwq4{#yb}jExrnC@`L3 zK!Gak=l>GNo48ZY27v_v!WI8H{ui`1@p87ZwY4(&|HxX`PGOrH{a>DekzR{6O=-VsY(Rwwb9TscQ}x%)M-FM+)yOcTSsi^9p|e!Z!NJ3Q&iEYT z*;v>|xbON`hyMutvxj^9ocl(2@IkJEZQx~C`{0~|v3m~1niTfzx;%TVmU6@JrNE>u z`u_X#Grb(SQs$8@vkaic6lKEJ+xpZmD+NmYAHILQ#Rl)3miwr5xcmgcs2Nk_abqF- zA45c}Rmi~*vJty@6Rd-K4>vQ=JvS#ZaSLGn{>3s-`yz>M@lfRQ|4MT^r5zI5oOtoa%2(Hg(UXXuqTj4ke>uad$S@HMKer z5N4C1f1vCyuh2Vknu)rs`UD={ZT`57lPgL&x?`oXeu5O8EOLFHryYOYvdz-nQCZXD z4&^a*!#ZgXjoKeCp1&ldH>CQ&EO&x;kiVw4m;?((NRrAyXNrbqFYg10OIXLla@oKd z`Cu(;Ec(s^z+SAbZ=CcC!YAbl&23oUVLScsQcVS#xXJ?^3?KQjiEuixJI`PPpIxVt zT9kc)*AKv;_fHW9qV&ct>mur}&G}gc(|k7sz7Jj>xVHG;r}}L3^Xv(7{e2O%M6o>* zf8ez<4+K~_tp1Ub_U^DFCFeHZ&KoF6o4_T(WxhYz#mn=2y!-sz`tBXomN~^%`N;=Q zK0=$q#^lML9Ok`L&Q~ZulX>lRO_snzzgIO$hY@WIC`!gVL^f27abZ>?5rJ2 z*)eS2XA({IX10m;Wh1d&BgU6sWWI=?&FArhM9OS97@#ozQQTf0 zAnWamp*J4#Mwdjhr1A5U*_#}of6M_<f0*naI@g7122Ysd5952YH4(EDQ_7L_5*|90tc|3-kn9L11`FsB0;wsWTjg$vh$p zT7d(=76CIi6X_Dil#+Af7bRe;Ac$KKs9T2Z82{B^93gWa2F(;iMiS_v$rkh)@m^rw zvYthhgFT$YG%}7zAo3elW-P-C_Q`~k3;!d@g*7lt(FOKo04`jczhXJ&FDe1RIpmiU z@P8Xjg26cfKO^L4q@-psElWnoM94$|kC28*!X~=L5dnvRVIm8<0c`*^0jokJz=Wk{ zL0W@EKp^e~y`qmK{*FA9AvGX=L!L~R>=V5wOJexXDH__uESV6^Byrs#$zL!T1v-rA zRgE!4@t+c_hHSyZF^RBTB0mx^Y$z3hH?j$oWbvv1-33P0ktiZ^SSDb=A|cL#gEE2| z+-I30Xb00hl04%;{2FXnbhgPBZ9Q1(x-I z^2RcL04<<0+)^O{T(1cRyN?u~%$THzB#DF*<-JURCRH-2mKFw|6E(ma;*;YH(=LC{6u15Bbt(P?CFN;%5( zSpYX~C|zy_rvEcF8#CyW8tqysvR-+Ar3;5$65?dJRg6~RNlaFP42eBI5phc?7wJH0 zGGSlUU$q5J&68Y%vZ}(mdgwr1EK%>gBFb%m2Ko-&Nm6YV?WY2FQi{|_r`cWLpG7VpjrBWM33pcZ6%?cS5ZFg*p>hAvsO5 zTICsxnFAS__6v~Gu#c3L_!^qg_s&|;A4%kg1*`v`xAv?2noeH3HZTNzq{UBSUnly~ zlm3FU4o=m=n$<-5{-BqqaJqxX0(=X8t0iHO4G_)x9PA$(4utkGbZj$&ADSb^jJXQL zJ8ku-ecj3hdMt`+2P-5jdhd zp}RJk+64~>ZZi>Ns{wq}�+DqSWGMREKi0 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�)j`)>% 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 V2Wep1Kj0q+(0{<={^#@6{{!4Pbz=Yk literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/share/python-wheels/colorama-0.3.7-py2.py3-none-any.whl b/week-0/day-3/my_todo_app/yournewvirtualenv/share/python-wheels/colorama-0.3.7-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..75345fcb6c5bc0991ede4e3455948968fe022294 GIT binary patch literal 19915 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/share/python-wheels/distlib-0.2.6-py2.py3-none-any.whl b/week-0/day-3/my_todo_app/yournewvirtualenv/share/python-wheels/distlib-0.2.6-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..161b4c21bb114ba04a707b1da0b0d9d69aba56c8 GIT binary patch literal 141707 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 GjQ$U&0@_vp literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/share/python-wheels/html5lib-0.999999999-py2.py3-none-any.whl b/week-0/day-3/my_todo_app/yournewvirtualenv/share/python-wheels/html5lib-0.999999999-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..d9fda41f3a6a2142d85b014814c1b67937204256 GIT binary patch literal 112620 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 E4>c1E*#H0l literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/share/python-wheels/idna-2.6-py2.py3-none-any.whl b/week-0/day-3/my_todo_app/yournewvirtualenv/share/python-wheels/idna-2.6-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..ab09a80bbe43144c1ef9137bfcba5bfe33f9cf77 GIT binary patch literal 56485 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 Icat|sf;SJ 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/share/python-wheels/ipaddress-0.0.0-py2.py3-none-any.whl b/week-0/day-3/my_todo_app/yournewvirtualenv/share/python-wheels/ipaddress-0.0.0-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..aa2a948b7174e381ffdb27805917503a08356df4 GIT binary patch literal 17503 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 Spa=s4I}oY?16bJ!!~+1B^%lzj literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/share/python-wheels/lockfile-0.12.2-py2.py3-none-any.whl b/week-0/day-3/my_todo_app/yournewvirtualenv/share/python-wheels/lockfile-0.12.2-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..c91f5425d5af3f889f74599ab46418b6554dade9 GIT binary patch literal 13506 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�y_7OKmjU)V&Z4k|4`-=aTgNCF#&7N`iKf2U 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 N-uZiS4E}TX{{SU*_^1E? literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/share/python-wheels/pip-9.0.1-py2.py3-none-any.whl b/week-0/day-3/my_todo_app/yournewvirtualenv/share/python-wheels/pip-9.0.1-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..0e229b5d71d7597bb2b9500800069958de10499c GIT binary patch literal 159152 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

&L9{^2IpaR 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

  • *Ure!7cwK@-=01WnqpzeIY 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�IjIR;4`a+OD`XE=BC_$vI~ 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 jdwB2^$PeuSl}rR literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/share/python-wheels/progress-1.2-py2.py3-none-any.whl b/week-0/day-3/my_todo_app/yournewvirtualenv/share/python-wheels/progress-1.2-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..df711803849fccd7438961472d741fadc954bd8e GIT binary patch literal 9606 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 lm#Y64K=AoU!~aeHuNh^})v4-E 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

    *T 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%0ACv3zp0Ry$ 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 p=U&hb}yZ--KX*!QnQ;zgLh`9G~)k{twov%YFa= literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/share/python-wheels/six-1.11.0-py2.py3-none-any.whl b/week-0/day-3/my_todo_app/yournewvirtualenv/share/python-wheels/six-1.11.0-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..40c26d83dbc95c3fe3738298a2b67eb07343ac02 GIT binary patch literal 10720 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 WWuX4!?gL={oZx>dGD`iQr~d=Z!Mh6p literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/share/python-wheels/urllib3-1.22-py2.py3-none-any.whl b/week-0/day-3/my_todo_app/yournewvirtualenv/share/python-wheels/urllib3-1.22-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..62fca28e15e00b19c91293eec7edc1324f0102fe GIT binary patch literal 124700 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⚩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

    SF3*%0+D3jiw!Rd8_ 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 E0FJf?DgXcg literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/share/python-wheels/webencodings-0.5-py2.py3-none-any.whl b/week-0/day-3/my_todo_app/yournewvirtualenv/share/python-wheels/webencodings-0.5-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..9bbaed0c4f2e61af4b2bd830b59b96d98a2557b1 GIT binary patch literal 11646 zcma)?bx>Sgm+l*P_YQ&J8XSVVySr-|m&V;8Sa5fD3l=Ou(BST_!5xAP-%QQC^YY#M z-g{2%>QnoVU++3+?X}l>>QR(|g2n~_0Puhf=|Fj0u%DP1BmjU04FJ%-&bpczo7tM! znSyLBoIWx!urru~oWLJJw&r$>qGBo{%2JA|QVQ}6j!s}3l@<9VChU$|m5f6nObEzY zTUkhsMrm0QON``*LqbfX{%Gsa@z(Y}eLID^F@~Bl`Z8>u>-*=?^P1?)`re;(jYI5< zjY1ji-a(o!+~_`WwvGq~K1|E?Q7o3$D}24tr5z709c>TN23Zr-qM&yN@6Kx@98%O~ zkQ4}D)pw=`IU5QuZLUk7wGhvvtIW31OC2n|g0m-_u0PBKT5~0csK+8T^=be#nT z!G;U%53PyyFDP8vQFHhrc)7VA#NgvqOiip9Qi1(xe3TU7=LS0$y3IXEv&%8-JEqE* zodkizNdpWJTM1t+6ivx8K0~A-lE;4NqC%=diK<%O1j#nsv6)4)(knsoJUqGBiqeS(_Ux+hWDg*kd6>CAWY1@83!9Oy8fr2K&Jip5{$4l>RZ^cjd zQxV@gY$+cC&(+kdd1>{rvw!OT0@&)wH_aJT*(J?wD$AVCWEz`3|3s^>S@WmG5en&2 z$(rJk-iMTaFKAJln`V`U+5jmLJy7fx=IrNfjE?cCH?qk4^ax7$GIr|ZTxei

    MD% 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 literal 0 HcmV?d00001 diff --git a/week-0/day-3/my_todo_app/yournewvirtualenv/share/python-wheels/wheel-0.30.0-py2.py3-none-any.whl b/week-0/day-3/my_todo_app/yournewvirtualenv/share/python-wheels/wheel-0.30.0-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..527fefd066e5a5ba17e4efa50cea2b5f911bda37 GIT binary patch literal 48886 zcmaI7V~i+4w}v~mZQHhO+qUhQJ+^Jz_8!}|Z5wxg=O#D#PI7K1E8XcI-EVc(db{dL zEd^;{5EK9a00@A6sUSHqW~%WfL;wI*N&o<|e|Oz2OigWQ8R(c9=osisES+6wE$z(g z=|x19g_R@~R3zo)=$xEgT(z#9w%QxMXUhbp)kHI?5W0V)ui*1;#@ctrKCa_s;}D6C&cH*yKFV@A#w%dj6ki&Rp0%6=1%glM`N ztro>j+MH^Jq_S#k&fy)m+pu-bpQd8<5KB;%zIK;gFYpt|c9Y$ut|r`q>}`r3l+;vj zW11@wsv4DAwkkzdLM+&&OuA%Amwcy+DFPkZ@Z4b64hp;tY z2kf_u(CZsj3K=^U!Mg5J_fhQ?R#j)s%<`GHS56Z?xECL zd#3lU%=`$15V+U?2KfRdjgwVR;PlG1+%I8Q+~kPFj=ryebK{3)u1-78MG3XXM{MjS zN?ZJbN+i`xX{i;@v-Mk?1xJH*)f!dBnvd1?dH4rF-3!+)*;Cq{PIV)M1t8F+hst~Q zZ_!cCXlX_E+bXX!)h;K%sWrGu%{7Hmc#7?-{c*qP&IjpXvrp1ETWX-5yk~z@fWzSK46+ zp+h>kZB&fU{m&8cc(T3qqqQiDE^r6|6qbzPcw4Ps7$o`Zy%aCi%AY^{6Inj!C3XCW zFy82nXbpfI2rfXF!EJ?#6+r;@N<{mLDFfU{*^tJpT?s#d{d}ryrTMIa%CxdEdoY>o zUXaqYrAU(WBC7Uja^T0M1xAu5V+GlT-zI$y-waf}%$WjJrP|Rzn`xNKg z=NE|bIjwIUA6hVU$In30KL^(D?ZTDWAmU7cl2Vo(p)frFEtsX;&i#qHhiGj? z>bZ#*jo!r-go<;);Y#^ZRO_2QQbLDmlGa7n-H|hx9rG96sh%?gDl&7)mKgsig`;PSwzPT}40m zlNN>Do@;t=(m?NzwXiiWM%<)?U-=Qgu+SQIWKyYad4tCu}{{Nw&oM>FY%UL{pKZaf4ql025xX3yL~Bj2=JzVnp} zF+ah|(TtXc=T?TP=E0fEd+Vf_!a330Nk~ACW`vD&ulDTmWhEVt&jCQFlWLL<8Rq1= z9~)R;zX9r4U2R{}o?m%4;RF1A)O>UKfTxD$ujer#*yxn&v=*^NYdC*L=!}@&Bi4}~ z0$j(!Cw|~a2@)8pv0h6^=iCy-SwN1Qh$>HbVb>*+dP7{Ma0~pG_)yg02`c4MDNATW zC#lHZq#!$<0d%MDz7q;ue5Dc$fzoA8{O3>zFni1|zha8G$(|sFjWpGl@NxRkjhB$K z_s=`wlX6!7!SM({&EK(WrpU5Y8#+?-;^5RZdQpMx#Y-2dBXghRqhKa5z|BC02rUCp zLpB^v9B?@#Ly=a2L67lPY%5-x9(8Rtl+hjID-v#gfH^siWjSU6I1K)G#t{x4b4ziX zX_a+$E2NWrj@LSl6n_rCha&-xI$S2nF9$y-0RZr6hmQlO1HuRW5)B{t#a@ zIHaHDSoE$u3v@RK%BlNgB!d1{uKCwL7XkP44er2?nwx_Y!l1hv{(Ra~>;1g)BQfrQ zAmZ;Rni?*Op!wA-sn7CM_h0uv;rue{rmGb>-|chp;)q8Ex|ojNk>g z=vcaV%~P~76@*kRiEY6091p4v5EUNCso|>XNM}2$U(9r9`=Do#lNZUGml4u2JPTos z#m_EibY#iPr%VX1i+BP=1Q1k68Yn5o6rh_9?nAo$3U*&inM>0&^W^o6emBQ6lSy1eCPgC62;6PPybUyNpYdszG+|dx0JjJAQ~Mou)>9XnC1KII(%oa?xFq1}(qkjvSzw9d z7#dzKA-~qj@OgJc7^{QAJjN`$L@y|`kUkIjbc?OGIG(6v?6_4W z;*HdJqgFd-aL@fN-|w}%p|{25r;Lw+0O#>79)FW~52UPG`70ibw);S?sehqwQlHug z`*ZKB*(?*5sD+(@l#9@(%hr?sHb}jw;IHfu+?@G>h43Q zm7o#@YDhQNreuyqBDny@V*X z)P5hNp!bQOc-(G7a7_sum{L=>tZ^C-;cdt1?^?;n|pTSEj!!8R3eg|$7>I&pd zL$@Le!cq>|b;5+KUP1VpzxN4$_1^zL9GiA z1pf7dL47EVD3i))ef+Ozs;U0pnFAFwA&>f+?|Tnrx`LzL-x+5ioY{^pbA)>-oS8$( zyp1Q3)>w-)DC|O>@Wc?kbe4>u)Gw8^Y9Hw|ncB|z!?>4JJ1&vroCgXPEqAh)^Ed}o z&7 zB=TQU%}dbc2}T|naA`cXqet-IiqNXp1GBnkJQ&=5Tj{gt<97JbCpR$)97dlyPAD4s${Er=>!oVOBxf(U+J-hpQ~ z%0GGqW&z7Q2yn>cf+VpQ2L|A)wqz_B^|%cM$%ThL)zfZw{!aB?cN?S(W``bbxAam) zJ3bHKCIgF;!rEK5Fr%>1M@}r}WB(bY|x93^m z3aykV%U}SGIwynrW6 zsh}(?*86vCym_-%l~=0$_r^nMF{#ZR+n`cy2-2b*KqNgssW*SNbwVYDnLcI={ttQ^9iCPs1=fjHMPTO2o#A;I^Nn*a2<0{`+vJ+XK)-a?AYU=c ziC>Z8&E#JH`<@^|9ObKQ_N*~MJeZmIBE)20Zgao2|k);FUQm7-cq= zfx(iPTanOc%X#Y>zd-OPQJA7+bg4gGWx!`}Wej0N+B7_(Qca~J0^c;L3#spY|7J5r z#U8t?S+%i#W`>)ERA~-Gy^XjX411@c_sT28UiGi^1(|-ZoS=?+%2(3*_V{bKuq-|J z5Q?o$#M1tw5SUAyU9p5Jc72RSM*;6cgvliYbK{1;s8a&3^FL|u1_cXenFUQLC#lo` zd54-v&Sk(m8Vu{QOjme(vSM~N%Nwqeq8)Vm+A3yYS?LNibffyaZ&*Ctyw{qeZnk;J zTCC9;7De;PSb_vp)fzOjJwN0?>6Nm0j^+vNxGnjkQx5a~G7odRzq8wR@}b*$`G+O= zBS%CCvXHnhtLk-r9q(^9+w=p^orZdcZbx;s%J-3UrEMGK5kkrJ_1AsErUWG ze?8EZ@9{VXkc%yNWE=hbG4x;pV{Xr-Ua1Mt2S`>LKioXjInTELV>``KRhbQ@sPMxk8Q>?d%f*zrBs zCAB@EU(+@r`7H#|&l6p5ImcGOAr3Z=)?3fbS=m(!aC4_*trx{o(Sbjyw zKIQ-rBG@GeJutF7QUf0SJ(7|Z?^>5SdJ`)pm!ApK(RXE4=KAFu;0`I#o>m_|1lR#h z)@Jp8h(Ir6>@Bk+(<@}6EL0mabV?x^{{>d~FYH5p=@G?@3;;k*2LOQoe`6n6Q58WE zK^4Iitxcybjzr&6b%QEmu}X-9##*QD7 zGF9QvaMIBp7sUric!I3i_KYB`$c97UD6qPkDABd;Cj_X zl@k+p_YC$bx7=c{9&Oi@t(K_l)^r77vx1vp{Y(CzI-PT)YrIh_+Q$PCiEf$HmJ|11 z)yhw@B;CfbB6iP8sUT6hnO$-E6v@kOt9)ml(n+xt*{|NJyO+V^x-@%!J+Z%)c14#{ z?YK8edn{t1&iO#By>&3E{)4HBD?Kr0(}d zdgb%o&Pqhe8637vIw=)}mU0-;+*p^bLc}|Ic~Og%mCv}PxpyaDm-8qzz17EFF|gt6 zjXJF^7#Q~O``n=m_Mf}le4ZaU%y7N#K2C4j%(1=RBaXp}?w+MGUl+X<#}OJ5i{)Hw z?~Ox>s}mx(OZ=NSe~0Lu7qcN!uJLiNzco{2!W7VgJXsANtSo@K{_DRzxPs{%DDnbtcNfWg~i8Vqr-!4~e;@6KkI2RB|VvVQBzW zkU)B*AD^%_UXUILrRF$bv#)^`Po)6t03_E#lVfV#gSl$D(3m|G6iX&S#Og)ZCe=}Q z8*TyvA{yyg%k)n;l!HvvmU0hZ7nlMfT+v{ta;U2A3PP)1xOEI{s7bDcH|OaX2Tze1 zaWAWqQ|LD^KtGMxGSn4`>P-lta2;2eQJtmNOLH_=iYC>e&OGv})RRZ{_$gWn^RFu! z46Ng@S=qgPN5k}#hKzlQvD%8#nG{}cbQs+!e0||yK49W7B3>EY94TogYT|1si2DnEL z3qzLhJ}efI5`4;vg<=#IR>wLA!gYaFgq4js{e;Nw37MBA4U(iskoVc-LYWFsF>^}G zy$y0QyO=TzOhQm4BV>n~q#p&7o5Y5--yy39I2t-f(a-kwovgdLfeo$C5r}4x*uD~F zMr=)5>+=-YEL#|MS^E?!B)qNcgE*lgB0Q1211b%DJ1yxPmqb6DFLkiz#KFA-Yd8_9 z3=f!26AdR^9*X8*>qZ`ce@_*#flKDhfy|e1+iIHoVt&l_(kD8GP)0u!QVdKT3BixM zHJ3e5_P{-V}4~uP$xnq zZa16z8(FWL20|6U8rJDKZWS8<+n*qW@m{n3r?+(Yg4NJI=C861QDuuBHuSVeqofj` zJZm#I2VC%4bMu_2;7u^8nfmr}g-8DJ6<8&CMEm>3xrS<|du=V;t6%J2+&TZSU%A91_kZ)EM3&n0 zBgW=cz z$3aZ{f*-R%nD-Q_XRZ|MFIT6d8PrnSLZxts^_KMk_$g~Xx&DSFug@}rb3&|4q(ZNO z{OKapuYQl`gp|=E)|L7CgN`-ZRB&=`Yq}9xKXpPk5*#ZcVaAg|vH6Un*cp>9)cg7t z8;-6w?`%@byd=3$oQcvCpV25%IKu!uYR!y;qFIR)D^Uu}?-a)jdMffXnDxMd;0)k!t52qcp%%1Uo zjfW=rf7A!Sa0m`QXid@3WDWLLB6VM6zOi)hqG#{%4?`?jxxme94}*SId&s>P`&7cM zLrG4qgErG~|E9{uq|&cU)XMA(Xj+j@LuEefQyCg4I+91FGSw1JwNJWQFHhrXo>=(L zo!|9sf)?tHVX+()RmW_}jFw5A7wBlEIi!#&>Tt{wcildx{$z<%knboq=Mgqc!9so; zIOn=DQ`sv}6RanP*KL4dya{30g7t)43a z_w2yW#Bn4og&dv`?X|H!XIhv0p7bf`2LxI&qpim4GBv7}H%ce0-<5nIzl_2j*$zF!qmbVbIN3;arA`J} z7loc)_La1B3t9{Ye5s*r7i`w){A-m3h79*T9u6KMPxsd+SAbAGIG#t_JRVZ#0S9%p z^qj`Sgp-miic!3Ml629^@Dt%=q{sJX^LD^xZ{;-f3#=#ao=rHNr;O+P|{Tl}83 zIG=Oj72nA4tU{fUez9=cXSY&?lCdH)%V-Oy*kKE+V+ie(hs(2;q^Iafm*@@k)M68f zAaVF!!?oE)Xj;_kvZ2_Y;MPUXG`o^2QqvX}lV?@b3@2-|JJJ_^d>CwjW`TZS^u3-o zhJpuYlvL9%Hb(Q5CPPaizv{XqI04Ndve=E!;vaK6;teF2YOuzDPvl9$^U|g^;Z)t~ zmk+;X!=vD!svzvw49gVp?vqkV&C*Q{q-Qn6nr^5!1;-67sl0+V>;tLqtD8tJQYcr{ z(dmF}rF$*nj2L2zvazy(<8JuOizZmW&JfyZTf&(&R0tOO?p^Qd@kO+xtrq=cfy~23 zVqaYzB5pq}v>u%4#^-wMa28U#3q>^{YFLa)9k(Syu7gz_C0*@uooVp^lm!OIMul`Z z;B%{3>=gZB&M6m2C^uG3W%IrY@oukNR#1DkTBUMfBTQp5 z=g57EM;SR=8znEayjMg=AIWl%WYp7c%U&a3tEC;~^XUq{heZRde`6>V6OUs- z+Z3A)n)K7g%h}@-L%$%qW0{0Rx^JCnUtZkw*{m+-YS784Plrwp#A3LadS6b4AEk{) zoNEKa&NRr1dKcHYH@Q=D(?|T@_6%_Y+pE3|O zpDyh%hdYq6o$i#&)o=l6LpM8zz$)T^^a~-2iJHxl@+WgL?{0x5P1~`2Rkf5{!y%fC zZb8AWOP?AICbyfF)IbN@_iprjHLL0&Y8WJlWScb=(I(k-ku(wS70Ua?ZJTdPv< zlz;db?bbyl(%8x=|I*#N1;o%`}hSj z$7L*=@K7Go;feK8l6R1HB1g_kZ*pFB{k^?R)%r)>8tWc1c_3Nd6%^%jLcFjI5M*1j zZL_?@nPgQ(i}@gDH>rbEq`IC*@pb0IDzv9uS3vib+A>6qK@QKC-~T~3B^~vuZk*UV zb(H>+H__FS=OD#`2lr$S6+(We9z;`q<6LX#nxD+YT{?l~4y&<;BS{r8g^S~MVlcRX zugy{Gn-;|v-#?kaQjWrF?%APPiwJ0DwVI~hQce3CkkDFKL_0lP-k&$752l9@Rac)Z zHn**gnuhgN#5Vyr6jT+S(%;JKs92+RDE`#~<{rvk5ezWn%Uny=)jhnZDkKYC z%62@nEp`A>jSoOFvqEoJ%)yLRui*%Nk61HXSFtZ2Q3j0n7jw~yAEaT@i0`J__mkw~ zf&mI}!j$uivZFoNjr_H(_NrkhH#^rcO5D5dN>zUx)g1jN&lB4r_4k>T?m#K7cz5cf zL}rV^qzw=H%VVu7QB^(7wS!`4wZoSdNY?;fBZVU94c?im>tw~pvm1XXAQ!QEF-l~9 z7K1)K5N3JNTJoW#$H(UqQ(YRacps2wzq1K2oP@A7d3KH2B25JuwwK|hev9d!&%ZkK z97|g2I&_7|t$)&aV!CN}m4N$@pse;4+BX6_RH%vym-(l3-ADLNrQ^4D447kJxp2Ch zd9QS#3~Sk`O!d8BW4&Q{Jfl184m|K+{xFoYFU2ritran`V`#Z9^%9LV*uieA4S=*w z=+?3N++xW*H787p5e(|E$EqS1{CUuq2&Z9dyu1|e%7jIw$XV{ZkVQ@uss*12@{Jzn z6@LLh+mXFhptQtW@;gA@-g$UtGjE&KZXG?>N4KI}oYC#&#DR+xWV=$dU#l0v$ExmK zI_t8b2>z7DR*!f>T+Cn5$`%M(r*SDtM~~chm-jB)#O>n5ShqPLP+F0uf?1L`qLa;i zfw-+B1`Bsrb>2?xH%BWSkMw~f9iZL>gzov>s{cJY-s4^SB+rxO|4awsq#u9jm~4YT zf&;3YVGX9(&`jv)G6sRQy3!T5r`p`Z@G%LyAM&D57W5#``py#o>x^^L=K~0N&`P`F zvew*n0^4)ui59wQj%6p2QA+~Z{0DCWVq&y5s3<4XI9;F@Z2XZAlZMyto?|Bazposp zxst6nhn6CHhlQ|VJC_)M1P%L5JTKn(0sGQzouarQ$FBQ8b7r5=zr97^x4(avZruLv zUQ<%(eK3%r;#oM|)$8l^csW1*TyL@utaSG38@nIX)*AnZxUF`o5r>vW>zdT*4-He) z)Qh5aUh4zy$v7;AQ8*paJlMwcQet$Hf^5OOV2Guiv)VwBD=vW*&^wg^O78Lo_y-Uf zZP=Aw(aQ~MbPGp2fKyt?BiHQSWTEpK9(s3f`GK0qVua|tT;>YtmsiC1gtmFakvniO z8FXq3PR_p-j+{8Z%A%mQ)@I}G6WzmeQ6P0324A(es(bK@eDFJeAirEG>5W-+2!yJo z(9&z|s6+H0{!|}_fE;pN+q+31PvZ`S6~9$z$8u=Aokteu!spdle|EyRAN&*^)5Ggb z5)Gu-Ksy$&zHSseF(>l+bRW;}q;dG~+j|Km^T&!+Fc;H&Z7(}E&N5+>P-<%m5*SjP z;B|Bi$!>vq2ZbNeOWl1igx9L710Jjiw~wBsZxj>t(qb;We?pX@q}s9Qqr$^_ zSS!#iZ;gw`W{3XpsxdpEqzEE*2)*P~QAGaW|2JEBZ)fZVk8H^w}z5qcm1X7|}Ff?mleA3w2dCl&z>iEk|4Dhq7yuABt zHj&ED{-ekfB5#DXtBjKNaph^*Uy>yd?FUeYn zC0hY|c>=kB@5;3j3%4+|>*z){Dc*xD8c>)W!trfJPCO3BZXZRa_c4lyCjXni|6fb@ z>DZMD+Cr-((LL(Oi)T;O(9oNhT$KAk&%o4=DFjxG@kf~FVNnVjE)JG$>=#K(oKw#) zA^Is7#S~kLqGa`8Q4?-K6wZR=lShp{Gi?JHg1;2WBuoB}l?V#^z$Wu5})j66fk%3Hcb^vr9o^-ue8@-VJ$gYRE3@$0o_LH2^Lv9^x{<$3*1&=6fdgg{Oqe%4C5{+DT zJ0!zNt$N7~D(#>>J{>cS|+woKfTL|45=+nN&Qt zl0E8~Wmxk0b5c$2@<>X;EytMane)-{l4Yyh zo({6qwkf_5jv(`HJVhZ!=vMP3w)QQ{csuZRX=9KY!17}BFlcq7SE=_x>b%^(nd9ql zX)r#^5R~_8Y^iwH1wgGOQC*kabAKQ*dugVW;m+%<;*sQu z_&be#oH^v6-&g<6WaCd~U^%iYE%|2NSutRB@Xg=XLhG-{ zqVv|S(k?x^A}mq|el#+W1^B6of#zYX_RWrk*69j_E5_*``OvkbAL#$KwwLXNUj2WT zX7?{}{%>njmk?>`l9Xvvq9|usn4X-KUY4Dz3XZ@a z7HJ3gZ(#?byVX+v1lj%z^8Z_yshx|Hr@n)|rJaj2or{M{l-$fL^~|hf480uP1Pujc z>@n4UR4dl20xWuwzQ1#-bwp%%>gdc-kY;cWdyT($bVPVk3M@+!^n0lAN*Jk0 z*wE4aFFD6$YSUpr003*C001Qaw;Wqj7ef<67ehKLXM4LC6WJE6)UfqT*Y!{RMx0UH-|C^k*g z7(Fai|G9K2$_*PrN_yIh^b1O(HFIxdu%KZ_ki_Lum39b>$p>4SHIzRi^yI53ZAE|u zvwXU~Uwl2?xq4GfmppOnTF%fRvq9U(AH&6c(zn>`=daY~X@+u9W~rP%Ikzin7tGhUVfyHY{Uc^pL*b*Bfh0qLTfR;EG!jP~uET728Hcus4+J z);J+b9tm|0E$%%SWE5Wrb6$$L3)ze9#~6bi=Ewy z1N6}~`q^7|ElWlFu&1AXe8^Rn?4*@=r@Nrp_?sgohK~d(wwXrn8rJ%5dQ`+*uVJy8OSd74*E8xZl*T>Nh<39q|iRl|4IqQK1Egae@`*^ z7ytI4|G%5h>Gkz3?JQmN_30cuQKO}y0vHg6Uvdu$tfl*N_B1C@z;Q4(Hu5~YFPTV8 z{y66}#;eoK>?e5bN89dswQ0PIklX5nDu$RVkk9jnfuPjVW<1?2t~t;l4W{Fy*Q{4J zJU#*bcY8!J1|@I)y}bzVzg5^8TH5`O3SEURyFmt+t!Gql(|TT!XD#5LC?L#00R@{* zw8}8TDv5{Jlw=Os$?I622ajxLxAX`YF#8%O;%K+vvmQZNxg1!-j^TCgD_S~Jr=E`T zTG&I$$!1-j@Ca>8V`ABQsjklR09>4T31Tw*1-G`3W^3F)JtAQ$Ucm`bSpAEnVv*gV z%Fc!Hmcg*m3O%R0RSW*0RRyGzb-O#GPbaEGyT^?A*!2pTWkovtLiXp5F`cKM0Sxp z823Sj_VECgwrh}9EELT;5tpVk2|(j5#^B$tQ+I_?*Ug_qPUa_5QyI|cQKD`(7dhRi zd(C#VHZ6a;au8@I(I}=&R;>>OHvg@_ZrsiSohVzAuaBM?n zUU>|TZ<@-=YwH%HEDHRkT2=#g-;pxFd|JUb9?r0*WExPbfM9*#bozv*!2m;Ct~bXJ zM2pHKO1{8)NMn0NJxO=#f14Qf@f9l2ogJ#-GFc--h)!*S~D{%w{uz` zeB@?CM*CHfg0WfB|Di@AE|Tc+$KqOE-Iaq z9?wsEpbcCLpCh(SrxgcM_E>DL9Up_~KDN|PuVxq*t$szlG21 zFQ%lqg$?E8^{ei+YI*bv0WLNEx8cJjx*6vXm3W+9joci)%)|4$j(y-BVZ@*(Zckb! zfb3*Og8U1uP*E?IC7GCYB}9k-bfzkXIl4J+h_@ieZ<{$=D@-GWKaKg=60w_OE@ued zug^?HNtqYY*RF4fog9WPK9XC!imr1tCZNrJe{Y)jStVp*`_<^eRw<%C_yoX(UIm7T zJ*yieR$h|-6i_jpe3MJrLtJ{vkYi0&F%~h7nLpzWv^%)ZdoA=$YTsbAx}*SZz*BbG zf>IujphPwekNS61omQ1m z;cz!@Y`xepsj*pjm)|LgiyL4c$ckpUV{DW)kKgzpDcX3%VZKmT@y+nLiyG#m$_dj- zldmCUx zoVan%PNRvwbvGS)5OT3?xalgaJxEG&w`xWJXupYSG`7sTj^v(UbM2DvdOJdK$U*rm zwc}2W;Qqd(L+xtRxU6fL`y1i6-RwFN;^~yvs;X!U9*#?+e_{WN;A$!c2UdPep4Ga; z+$$f&wDSzEIsI&pcqbj_-r_BQck?)rkN zTWc(Dut98D}URa_Eb!7`kKwMqx=)?$dQPA2-bcl`@2@UZ9tD- zw{8=pHx2qD@-HDHG^+*)gP@<~MDyUZ;@Q=4RdY~{c75l*Di8ytT{_6(W+lP$YH+K+ zaZf2S81X!sf%lQQfeWRRUhT`CN;CTj~ zM4>yOq{4%?L*yo9KQdDhwD9|r~5l&hmX6f z>-{mZj8#yz=XV=V0I74YAx9PI72ywhP9DQsbNA(DWJb!d#+K7sNpx60lSVxOBoTOo z7PksNxxza_5=0XdYG93`^f6zk)IK1g;Z(=iM&WreLg3UhL@PDKQLr9>E2}I5!yy+8 z#3vK|25M~=92yAwN46WzE1fNTKn?YPIJ~WF)0MpuR$rqelHACJmvD^hVk?r#D@p^2-)u14CxXL+Ybhgbr~+ zTayS8#{CY&&gpYwxky@S0NyKzFQ|smwmPRYJFfjYr8i@cg3L77)C{x zfg2~5DQmj)L}xSUb52pHF1Ax+udU~D!u!sYato-eb$I19jVeFERGl;`t#@#BFV)<1 z$uV(Oo4ozJC#J*sh#92khu!$x-{ACSui#+mz#$IR2i`lfX^yJbeD>i^iYT~f@@>99 zr6&d**tl1NXCKGYG#SO+la=7~t9)W-_>%LaH1CG>)PNh?ZlWt`^pNZ(3g;}HQXP^tdBDk4@jWjRu=0}sw zl)3H11TJVo?R=m5Z?~*pujk4lKEfwYTEksswo{I#9SM$3x~rt})Z8kafc=hvt?rG@ z-(ukBuw!j!k#|gkaVb_|g&2;iV-)Yw@EEXFbD5Abld9j6hg^Y7b6#<6*2Jkyg z^iO@qMKO5gpx$;Yc`(l|v8Y0T?lq1qKp#=Cl0(X^JYn=GHbWMlH;k;DjxNly(DGCL zi9Rtup(2H*0efYefV;?Ky8ykICg9jeB4QuN z5Amm5Ff-MV8-=%oBq{5 z_8X6 z<*EbltHF+9YN=Tyn}E3b!X={xIwjpHy2fiFA0xRnqE4G}mq{W1R9Rkzwr%&fE6;Af z?L7TEqG(=ol062WUZHSmcdBP*a1R7LEDFi~!+q!^Z8!)m{*$ri-fd*WmMcW%K+5gU#qAzwj0Tqksd_c?t^P zm{p^8d%2iyv+wo(ewl7F_I6K?FOO{7?ZNeE0Gzr#BwM>9VY6lQ*FO=hAdEi5M2^hJ zm|C78Xzhl>325l6q0}2V4HySuNZ#Jb2SNqEfX$juz%7wc93MW%`ou10k^*HTNhhWV zz=-cFl$UZNN)1!45@qC6|D#7Y)Ox8B?*M8| zjQ6L~k23=TB|v_?)ey>~XU?iKsB00>)(=@W$j=D-{tj6ACLayEZjLK+CPWrk?%Em2HkO(2I`Tb`(U%otaF8 zy3f;1$$(lOMd6NS?cBNFugPc@)J%tP+!5rs(XasI^#};K*W2m7@gWHlZCD-x2rIGl z=W@5KvU6Be+!11W1(N$?4g@;xP*JxHU6!WqGgc66nmRh)rPz!lf=z&@OR6|oF-@U3 zVvr^e1pt(i?wKFys6GFoF>!d!eD9;S7*+AGkBO8iuUgR0R{#AVQ8R$25Fv9lReL(V zK&x4>24~F^?-4xrS+|p}<7xe@0EnCjBL_FK{;?rFK+WEgynYPr$1xCfZZVSWF`>OL zd=)A|!;lQ;-C9{;5hR_;6C~taSuyq#+iUAQ&cg^3@Q|{Ws=Q_e&@Z>aJvF7ERJeAT zT~}B5r??H>JJf?EtEB}&`g+m`di-D6iVAfwRQrtAlMqkb+HMus{`77}b;z7K>>99j zXW`;mQX+wz#O(zUe&oE_tlO3TH_em}->Y1k-XuD?!ni*i?A7!1BRD2V^ zwnIxePK0N26lM>NU|6Ip{ea)FO5HZ5yVbEaYzRyQ4pi7hEBm967~4Zt|LR5C6>eZ6Fvay0~E4e>pS&W@cq=hX%-!S=@`NOz2e0K)(_Af4EkFnuep z6~MvwbU6D~FUUOT!5)%B0$8jm9G<}d3FaJVAERhZ+h}<{`c4mpF&){+e2zksO`X%e zCvkMI(ci(Rm1^Dhs49~w`~YD47j5XER#yO9g`%Ghc7w`k^+nne`)j>uv0Pm_t47+> zig;hgf9dJ`WNP{Re-gZk1hDFEB3o;_`%G)AhB0X{_22_m*fG%kvmLwi5cavQ+^D=orsV@sYJ5^&nmLdkrdGdAYFS97*vO?AM z&dcRsi!FkNhj7~%8a3~=?njt2kbBQ}BzN$T?ph8DXWe!MCtsg&xo%G-8gDzUEfXTXyx=N?_i)MmSIboBTN8${P|t}YbJaoJBLK8O&l(& zjE36^#9LQ<14vM-Y8Gs@_Rd z)#q?EnapOQPiHpyYy=Nd7aB?jl3QQ|uU;QBnLXcwP;HsVH%3%&w0vQTVjqwP=Ky$` zN*apVyzbq-9L0L_+e+n%;e+{*;@wWMTd|yDY_@)!K zowlLTXCk=D-PO&6DZ4F?^_^m z!x!8O+3RBo%nN38$|+#K&WfQ&@G}e>EYBb6jIdI1h92GS_QCb0QJqy0MaEOp#mLL? z0ENze>l30Tn`ZqTg*30+xh$~%# z+zdBBh^;&nptt?ah*C5&Uuu%fDNF7<;AKtdU(OPQ_H_7|c|%0S!1l#^3ec;t8}Bct zE7(RQfQsvuI@B-|iuYi=Rm8m3uBRU`JV$B?B`RP;W$YB-_gJKcki!U+l+Dz7k|B!9BUAG z0T$psl^-CDXa*9GB2V#&)uM zQRq9GkV@fTW0-JuA3|e%EpF$Ce@g|Ss_1B+hGx$Ya1G)FlUt40_npFH86ayE}B`hg}jk`={6i=nuNQsXVojtdk_o$p!1 z$+*0ppDUUZznN1J2hMn1YZ`8gninrd3tKDZKLi247#%1Tz&6;PK(}S5&Bn%}^M7Q`9R^FZ-^Ln~^U#WZfyDjQ|1E(K9r2YHC zx{U1YiX%r4l^Uauno-v=cP%SzFSHv73Kh`=z3_xD7fQ0Imwjm_UF=21f`5}5Z7#jpJAjY}xo&Mo1Z=Pi)@`KORqI+cIo!IE5FI=NoFXnY+aC9JKTkPfey_-Ix>j6J`_k% z-47y)g8^kwe?ANS3!6`A2PP`)*R*a=oEi?anNo(AhM9&MeBkw0zHo)Lz&=#e(Wwvl zt)=-3q%|#$-!{cntN}Y^#MT|U+AY}>TtFq;YsAz5WpQ4sVQ+AF^+lgwPtWJ`lggF| zCogA7P%}Cj`KGNRYff{O0X{S$Zu0TBqmpv;)MlqNgr1dl9<{dHyi7(rEYU2aus%7H zhH1_t<5}nQ1J9380NSdH!A(uX-ielORiqOZwUlR}-Q^rtqPGz=rgTm(pVXecCfx4@ zeAg~J#g$*{prIrk`S*vTFPM2fdfr98g^Regre`B%FeP%WOH^{p;WXShIy4!7WEe5Y zh1ndKoY4ESA>-6umqluklG?sRY4xp^tgbi|`ip(JjBA7MB(q;W$dildb@sqf<3}l4 zKlANsJ^mzSg%%l-?SJ*V?ImbG-k4 zOhZgnR#4W~^K4p9nj5g0x4D<2Ej_N;Z5!|}=Clr}jtSweCcgt-4UQO0#wy{PKNIT0 zxuBnv9u9UtIg)B=;SB(i#EJ9m!p4#-{!$oRY$yK`#UjkpJ0yTXdEocWse6AbNIsoN zvS%%*d#}rAYecxwAG;Fg!{ZTFqOCqNsC5ps0RW2^T@xnW=~hNuCl=3I^aDP=Dnd{S z&73@cD?~rwZ!VR4cN$qbzaMQO8^~Syo|_1M(dBDgEi~K_)mC#Vgl%c&xFNCRxbQ(;6qB! zg`@uZHwW=CZlcn7`46XI26EoL-#_x{5cYo`psBez^M6l@OVsq^4q1`>Zp-eTnjHt& z^qRYBplJ4<<)F@8!NVa_sU1;TnbL+5uA9~8d|t8|4q0u4JqQtN_;TN-^=Dt7sy27d zHg#HB3%3()3}}|=O%|zaB&lMqYpUS~Rr9F_xoxZJmx-%oLZ%LH3oOzinzB?5Q1^pekQd zkk}@X8J(;c_Qt)|Csx*YT45j7gSnc#J2k?u*^{otOts?CKFvccx$h_zk{8bQ-!@Y@ z4tSnVh~(^BQ8#QbzQR^zz-IT`qgjO^{V3OikHUeoK z@zP!EqcZ1=h|aGCrwQ3|XmWUF0>f_E*KYDHED73mSf%?M!tB>R5C+8-6is>PdMhOtHbz$kp_xI>LD`hZWBId% z^-|J?V(T#r#ZBn-g=uW*a5_%-2j1}`H#AdkWPA@3C;GT|>;I~hmg)T2<5f@D3)RCwLGu>_D3nbjTa zT*XjcAOME(!l8y2&VQS)8!AOZV83_LQs&*$SC-)k&y{l0QSaUma# zq9_&IUZ$Zc8X389HVCMvW#hZA35Tno;uH{NnUyE4CFb9fOGq9TV~`T&;pZ7cOqFl= z#S9&n&UiVosLvR_%~Jt|8s?Ju5cZ9%U_T8q-KhUI20 zICRXj7y>4w(slxWkwNhs8NQ=&viM;oRgK5Q^b=t*aauC5*=NS)6ITDTB;Hji&QJP0 zOk;BcZ>#sO6f9nhJZXj*b5GjWtde&=)tbt2yv_1Lt9wr2*&R#P2)|AkB91Ae7ENJwHFd>V`bd0&J z11|}B)GDqWM(%+!h}gdz=`xX4bmTHEoS3u;7>tsM#LYELOCh6^jw1&;PXBtptdnt^$*i7S?J|e~ zXsBmZh>II7F4>GadKiD}m^`s#_m$Zcx$9z`D|Jgb|RxbbLO~U~adYqu-U=+uN4@WB>g^0Ob2=GJ#J4_2HtM zQ>`@HBjkO{qu9$4GNpx&+OYb)%S@vLjDdp%#Y@d%OiKLQlmTHX|Kv}RGoF{%AS3u zWYn7IJq!XZAs1@I?)@X!;x|PQ7rUwq9 z2Jn3b0m#%YG6~~N8B`#1uyTmz2&p(gh-k!dzIZ;JHgqaZbqg4C3Xh9>XVW}d%Nnqo zl^_CebGm?yduuH$^z1LK4nJGbNy*`+u1zybrpe37Lsbe%QZxv)IDrWAzs14F*Xxr} zt-FW$@6xm47CAw{=-b}-(t7k|sr%37cW~X7W(MLyc8w5M#!Ox*Da?N}8GA3yax>&T zEm)XidzG7Uan>%Ay9LtRW3&V`a*_`+S%!U8u!g|LV_LY_0Tky*i38Wk0aXyGEe0R9 zoOhaWP4Jxl^Vl(WR9=5-9F4kB07sh8S^+JK_`wAf(kYx0uog`zXT^4C1Z0kS!lK!N zTBNk(@Q8`P?MYf08JaC{tGdC$9z7J~7mz+Yw(I`h&NUZL^k6tP$bZp2426<_i1IqMP3&WT* z>%*!?cjtprIciow#WDUIKb+O6eTgpymjBtF8K9)x3bGFlM}uJXp!Bi}YzvM}tKIP2 z97=e0Q*3k_t)7IL-{~Zh`5?GmHp*AuYFaJ|L*Xcdt`Lu_*wFoz-<=ij@Ck>#(<#s3 z;q@ZKhj#EA8h6jUhr{=p0?n+9^lD?r!cQD)2t3+amD;-J)L$UcAt z&dO4lr1t5l>WApCjNM&+N}$nF(LW$@1gqg=PZI*97KjQeT=)f^fdUIjB^ZlflYGB` z+~^Y7pW|wd)bmHvh3?m^Bd0tK_F9#m79|t7M7_MvW-hphXS@fEaq(6n5z@)%uAmaQ5bl@l> z059V~0>y!1t_3d10kLFvMxK1|kg?9TRynLP6smZKwpZrD(KG54_$vrCYAJ8jU}=Br zFA#T5#_by=VvlR`JLg&A&ug$SD4!`>vRmWEzWMt+p9=vIgfr0Nf4C+P(Mun7q!v9W zR`?9zl8kPpRmq>v1z+>2=I&6)Au|88uaB~KjAEEEbpcyJ%_+GGlJH2Wh+@^>tLMYx zOJiFC3j(-G7{7BHDJ1R1SE*hp8rq(-uK3jLG!VG(g5BRNM*y?Pdrl zUq^wOfN|iT3pnwvnfh!eo`-bp3_}O!tpDi>G{P)U_B%E@${^O}$tc(cU+1iWuZ#D| z;30xJ(D{LhDHYw1Hk(4#mlXjGB1k%q@O8Y(Xe)k%h`}#i1FV1%`Z``w3M;fDs=@=S z{4`_m{L6HjmQxu?PGkRM(j6g*M??MS0E2d1e8n;oA8NEU^d{m*pnbH;jG*y8XFz`> z$3R|54!NWsGuq%<0*|VILi)>t+3@t*L%Z2p7ZJHdMyFFfa5GnGQWv4~$W19Na~uv4 zRb4E?h3+^!KZ8T@G}@{XU-^JNiu_nnUlfev5|3Ef=-TGU;Th~yqf@$zHqL2CRf0H} zVI?VgD5Eu9{Tyb|xtJ3uFbc=p1=Ht`q!c>A$0w_4FQ)|)f=>?hP|Z;h|9b0g@l{HM zo-r+0z1*GXWRumJd7N%W5l*iDV*(S$XBPupbfUw;N!d*pp#st`|2Z2$#Y0rp@AjsS z&{6oQXAoNkxziukb?T}Bw`;zBZYlI>oZwp+jp1InwIJcX30nrncy9S6I@}~J2$YPM zPB9A~-nYa1yqksJxoe}6Fh^i)_s_Difo1i9{XL7Fn+d)F)chOX0`qQR)kZl&KdPf_qAUjcLc!qsE~X89jQVj=Fx~9+d*pNFf_44TE_`1&JF#^ zgAO6nvu(4mfmbAJm3bUNp2j`2WerdMxp1tO z35Gt4C#hY#G@}SPe9<_zS9qHp>I-Y-sL^FjL9#r*%p1pM=D8x@`-XQXz6#q3toK8e zscuFpUUqKa7PjxweW;${{JmU%-Zr$FM1NA7@Y-*fWz$J`kYO?JHB4dW|;o+NTq z&KU_!w_QaQc!1oBF#DnuA~gwu0@@2g2Uq9cSj2>YX%uy1-UtFFrd7kLK}$Z7kf4iZ zLfGSUvLkV`(aF}bkFut1LW32p)K-A$sG{{kiNZAguR%$`grv_rnPm&zoHw!{RJ2Fe zw-Y=s@YcP2Mr+~unf#G!a&dRqx5Nv4Gn*z}$4MVu4c>%GX)Glp*=l8e#spYoNV6)lVsy_KC2}-&$H3wR(oP0Y#G^ zOFuTcZWN~vM=_~SG|n`NtF|7joWL?*Et@P_*Jp3hrSCnWT5%{Z_7maQI~A9fber$| zW2ikItA&9A{!eA8q5s_GD^ep}e*o!b& zgPYLQNcq}qLc}`AP1!+%`yq%s77b^Ltl7Y+Le-U8+mwa%L5BY2)R2d}4w$TB_u#t% zq(?ylkZ1ZUyf7)0_h5w^+?v5eeyuGcv(d8@@hUI_;fyqPO*tlUa>X~el%Zvu6rsy& zIR!G+%o>DCHO$qtKEaKW{e`jGkwOB`w2<)_n{ul#{Y3kCc<;_bH5N^{&T-VYDB}%a z+$qPJ-IIBR#KO1@Do72F_&}FY!_&*>UCr;>6zlaYN_? z*+Bu8qMOKUoF*os*!34I#RTf6mkna4F5Qc10*xGP85*&u{_t4EKRp*f9if_Ns_gql zKb*B(t2rEBIe-$Ahh#xBfU*EyFZ{m6Apc``xV{hWy1HoLDpVV<1gVK-IDfr9+Vv<| zn|0qyf&F(j+u%w#KhOZ?NMC-wE5Ml$o~k@DrV}Cm$+5-`Vypv6!2b6VMyX|J#$lz; zA7LfVv=ajh4iSBpy9x}|YW7<))4qb8Tb;tmwt*8ml)C*6Dx1@Gj(P!=+O87!JTw)} z;nEr>dKSZeZ@~IqHP@y82qy9;Ax#&jVo3D zpM*h52)|XxL9EOMeFej7*|ERBwh1pL(@ox4t_|!lzMT)m!N7u`Zty^ZH(+2_Cb3)( zk#$w5gB~`rpsa*nZUje{xzDKfcU@HEQ$dfASeSfAAL*W66Q+b>PE zURxoJZttm1he^$``^1$=xdSkzpx&D=+m>odkTEay zyW=Wx@ua)hUUi4Z5|m%g`M~1^=sGBZ1v9@trrb!50s>`#?Vd>v=7`C%Fmc8}Z_@ML zISHpP&BBUnF!PLDt}0-ykjNJBo?Zovt8N;s5upvnTLOc05zXT6$;9^%2M^TPC=rT{ zX*ZCj;15`_3K-$T%FrSp)QcxHoJ@d*--`e{4N9emgey^e%z+0rZN>CxZfN#;E|-G5 zXL4hcS_s4Pu;ypW4HvWkB72vPd}F!pc_fCbHFY;a6*PRn4~Y*{n+*2j$SpU*b7A%& zrPp&b-^G;a_axlhf!vDZF#Gm>3(egmguA6lWzBj7wLE;O+$scp`cO4S{0Ks&i@u)%l8v;s$AM8b4+516oFR( zT^_n2Y^S>00dfqC8$JzKk0-a+s3sS;4ba!uEw3zhRb4u}#uU0t74|1Z{amf%vVm9C z@x5N0eW&jN6e7cf}Zx5PcFt~+?!JSOz!uwHavL)LeZ`(8Vwb4vwrLFg>=hW@7|)h1g=2G z;+1%hvX2?s;3}}{@NWGnoY|Yk*(53L^vwjfaL3<7!y7R}6Exe4w=`rW!ot$g2;u>2 zkcK$^81X*;KU-s}KQ+>kq~nt^*6+ocw9qHPh-M~mEh9S$N}Rud;k-3~ywb1i{hjxM z(t>*T3O+ILi%Xx`FNoNqZBUQ(=d`GxE_#xU2G>A^A1}1oPy^tkfPL%{n&=7i-*80_ z$~oj~Lv;p8fhoX(1Yj}E`*(VJv^3$ug3>W25bT%bXmfdoPTZ^~^6>~h)!ufU;DEtU z^Q(0PSIQP8Tu7ZJd84{Y^)qX@(H)S@;I;56l-b`Dp72(v)}wH!(D35ZxJ{33Wh zA=sA!dBlOmKN7Y}Lk9Vmr{B_?hmln0qda6jD4wM&Kc12Znjb8jAr=b?`nDHUiPaZ5 zjoiFB?BJ+t4v^Sf%nt*ww%*mQ4Snt)qF)Krk2l4I8IcGTj-yfE+Aa637GU~p##7|i zq_4W`5XQP)r+J!{*}WOPUVit_S08h3mKw`o%swA69j`9M_5#b!4D`xwn-!o7ihK`F zD`6je!j&wusIdJ1(uS4qrnjW9rtZ2$S595no}=n!&pslZl`G|aE&?hRiGUx7 zu=n%}T2gcyW60W@&nX@<|8rfpOhyglO97+Fi4--%hPI+&p6`?MeK`7HIZ3)`+j3jkXvOcUOGG{i8_~VIp((!Dygyc zDfIkz=4Q{WSVTC0JX{`88;;Fj*P$4>hYDWNasueQAfY48%o6?c$1lqL#}4ZBoE*wp zLRrL`+|ISsfRhIw#QC4V=5u{PMl^axt^>*;Vp!TP;sBRlGwGxJ$hyYk-MhmO3 zKbqvGJhgj;nZfGb2X^-k8GUnXjT^!{E7kWZh*4(I!#vlV{sFu^-J+Yh`R|$CoNjrs zD(>k{_d6KorUUb??ClKZDZl@a*(h`CuptnDfT-yHw~6h4%%t`nDcDwan_>^0zQcj- z{wBhY4*ZK#J`J2U+)GAatTcnO`EnW-5s zGjy>2tBzV}xfK^_H5ZprEkzX^rL;F>WVVX6FJ#P*!~{H4*0R9TCLs3dNL}UDz1pP&>&vm$@S}t%B>_9VDjXo4%G7dz12szQ%r&xP{$?;N|7b9yxG5vRlla)nfcw7 zm4JKd2X8k$M;k+JvG|jRBUQ5tyz}A_0XoG<*(p{^_8=Q=1sr_|Ys|!&K`FA*ZuJ7- z=bVSdl~p7qB#lMabm_o^)YL|_7q@A*-%fv@KS!gIyKb>9{002)_;9}iwlIxo8l=&{ z;wQqW(~cI_*Zu11No`JQAXQUtX7mnkU0D^50L*GQ_P`?=CmgINi7(B?{i^t}e<^t%oUD*W{qfaa1|hQl*<#Vqk+jGa zN1=b-xh89R2;tvKRr44p%%$=WA@3s}3N8-bYW&)pOC!@|s`zNB5@`sM4>1^}uE+Q_ zH08U8BIHicrpwFI(ON7BbEtrsvL}cdxNne78wVHTJSZYI$tqF|j4_9E zDZ^ECZOMa%6uuJh64GIDSvwv;Byb2+;>z~`ZgUO2M>jRV)KmglTeAbMDs~oR0r>#@ zbO3~gU>s4hmyfH<0Rvs06@2fFcAyh_{WAP{)`?F?!<8kU$J{`{Sw~av@%aOEI`KO7 zUgIpcOH@R(q1Rm7O>1z=Tp|lv7RBmouj%8C*=W9@u}=)v`R8_!?5;zH*U~e-Qwp)Z0|2hCObf&K4zy@QL zuONRUorLW|l@-CAB#1U&5W3wQ`G{9F2G!_ymAb!z_OM+A?KYYcHR@9r?aQjS1u{R z35|H`p#vKeW*YeQN{J2!%To${(0}sa7u*m{66}48?;&R?8I$VsB`${tltW_zd01)A z4XQ<#>g<-Z_-2yI`#IrIqv4gn7G^M*pIh>emugPmgLs=ZnH4JZ=Y8D7bVo2M5uCsA zf(_mr*kNkTV+k1epFvbGz*y0i=;6VCWJ zxkYm3>Hn+bE7ITz@g|O+h}Is|$|d|JV}s2P0QiHA1-Vb7If z*yaKK5t9c{6!oz&b@&TR4|y&>m!9u;k@>tOxc7j-4{S*0ghBTv%*xj#WvF*!ch*yF zQH!vGY2eBAAXOP?Y+1AnBUiISG4~64M4apCsFvRG?sv|+UZQ?VGn6o@B;*_cR*}19qPtU!A)lf545$`>bnP(9IJIO{4N0|ST&vAAC8q`0kwY~Y{>M_ z!iryg%2-E>%9JmRA4u_jmm9ju#;JI^|Ew3Fzd+D6ws5AO~r*JcWFITZ<(udUu^k@XRpiPbEo_!q9Syx*0w=qR1-xtWnrUA zwcfGNEgvVFc}?I1gGKMl&YGV{B^+Zt)Dq9AeJndsm)^b!MdDC94MDFLkE*@?1}dI=14K-=!KL$$7SBX1p)#LyhH&f1Z)Ic zLsCb$K|HR-V_A{|eTl3)AzPii;XCmHq&ww>5rp}G%nIz)_v55DVPx{mZ2Xq9zsLh5 z!R?rbgnKNl0%+1)j6Ld3Z8t~U87ugm?2rUScZXr?8}wV zI`)t51V;wGg@)O7EQ+C|XZ95>2ngh{^$ko6*H=Zua#u3GJc*5A)fLV4kT1#WeeoYl zci7m}i@X<4IQHa*BZV;BoO-gC_6;7c61(1?c^XT-qnb=vmhQvfBFZ2rAdlKM1tE5Z z)M8=Xp=6M1aUS4aHYlUP8z9e#?ZYzPsR-wl@ga|>+N{eDietg?F}&6vkGJeh%WQq8 z_THf=c%66#hMguUGd@aUeC>uy$#~=8-L|n3;7&?>4SF1dsrwW5`MC?Sk7-ZhO`|2- z9CUWjg`|_gq`Zv*Y-mS^S!n#x+YqY!^3Y*vuu35T0BxS)}>5k_Bwpt$@8GKj?F!4s5!mtqq}1q&#k*PzAsOKhKFXH2SA z^%+n+aK@kf=gpN+*hl4h0QTq|oEP-pgb*`7g=syi$t0wH$46qZ7($Dm(y+(@e(W zK~Qf+NPpIh72W2IC#86$9LG(r-Z=HMU}<(!ICWW;lf{FoC9w?Hn2g%CKm5KX95le&o2WFi&rJ%AAt{aGQAZ%r|)ASxy}R{g~WV`T`fp6)A>P| ze0WezA>3i9yhMCpq(F>1l?G86+{bI(gp;9wLDf%KoJEBX$oU||CTv>L?LP>iAA?xj z7cV{6$Hpkz$|(KK-uu%5+@p=SPLTQ5!_kwjQAG06^NgyyT}d9mzt+$DeFV*nTC>y* z`-*VtJXn~H`^569J{x_y$8f7NE`ib^lWcgX;gjjms{P1?iZ7C6Ky*wgDQrWPW=wMG zTT=3pAtPykoUTEu&j3kIHyo5E629ANXw2FD8>e`_ZF=s+(ENGyUBx(R;bBfJ`Co3Y zm_iRVOf*ziP^>LzD9lDNyt5djR(Q}0*2yiz=fesMC~1xC9@EEz@O4FSa>e)*EkZi3 zRwO&hZ+G9ExU<^j@`;VCY!^Y(N}(~jyQ)b0dCyy4#z!v!K=5abX<3&yR7kA(#fM? z#ngR7(I%PQU+24b4}5L}SrC~51%8@@y=509mJq+o{bQ(XINXp31cZM6Bi!Raw^il- zAKYs3kI($~cl^ITetSb_fYU$JDMd-vZix}8`$IjtC5*H%7_>FTQ=lFN>Pbkxyi#pv z%>n|Kr;!3ydiiH2`mvzIKcAnp<#XpTi=%1XdI>U5f~O2RC`?c}&9bES31~^PJcj%W zX2G2i%SM_hWHBk z!PV#Vh*I+TTNd|RqfH8z=&xzF(hLG@@i?#mCyF9w(4jpbDX01<3 zNuvJ6?Cw@+M)x-cCnm&Yf)z~p&A#8$nT&X=LGhA|GyVrl06FiC0!P?GBr zdC36WEwP+5ay;?2N^KT4%t8r$uKBtzqI-wZ#L3&}hQGUcecAc5%6a+0d&>p)g!=y{ zzfe3UP!IfzEA;rU>5X$&l-z+A^c~fkX~C?p$XOY3bt6&Ne7QU2;+B-!W1IFR#wo8~#rJQ;*;F zMwVcQ+Tws81~#>81#?T24dAB)KdujjWw}+vsp4CYDW_S#LZMO5-u`7 zoy)|gW=U03x|caOpE{?GBrUf42~<=^YVzbs!FC3d(~T$^{EX;(`kZ+{zR?@1zt4)= zs8Xy`hP_%e4ZoXDLIN&d)TNGL(joXEIsJvu>}y=c_xFxopDc>jG*K7h`aWLn{kqb5 z4axTm!G5PLgh&4aitMz zj?j%X2i^3Gf&z4|rgZ7kzUTx^!`GG$F!vZ-qjG)^Oftaq29jOF{47&%lYE=D%71Dd zJKk?$G`s{)njf!H+F_!jW)5!h_A7HshLSs?ItHCh=$I(F#s+p~#z z`!i1fK5u|!ageVB={<&RHKiF$bB{)>_EOs|IE*~u18sH1$F%Es%3ggx$uOD6G>`#B zg}HCfj6@tBNTJIXl}~|S&uv@lEPwGXNpGZZOAm5`sF0ESngdZ1Fi}u?)G&yrY#7~e znTecCU1IjIO<&j6L8)6oa=KYc=N^lS=uo8FBUe3KRjy!MgGJp*%b}j;|9*ONPsJDj zo~Q3^OnmycJ98%;MtY8@Em_-USq6^OrV%SnJ^-da?cKvkn{r6(RGTQ5BK3wA9Y&WQ zQ0--VRHrGSgTW7uU0u+ed}ueA=p$ai zlk$uuh;S+-Y^jR&0u@>^F9TxJs%Ekz$kf=y&H^bFS&;HzKy^|Rj@5e?r^5x6)bUPJvL%b9Ad%XcBP zR9xvWN)2`zJkhm`9#f2e5uz$9h)4-ACuyIDTIrJ5wNDjgxh7&MSf3Fld%zr5E*C>nGNC~#b)9I+NSVXwnj3$y4#se$8Yz7(bE$KVe`oSC6SMW>7> zhRN@evtl0hjN=#eU7z=U0!(}#rPP1Pjs#c%o3geVm9J(w#~?#4Kk-02!#)*_X|2~E1$;c+eBQo4s*b}h{dB%!xrSJ6 z%Fp@^%aRV^eV=cw+)w_Nj40cBmwbk*K>7t3VD!UzA%8kG$30xFqEA%3RA*qn!5PZ)MLmNlqgU%5-9O~3~f3Jcqg;5;hmRhoe`9}>OB z3C)x`>rtD$HG6aa*3Qj&kJU%mdpwa1yG2sMpV z!%!%La*D8zDkdIAY~940pIn@n zd$0L06Tij1xzQFVdChDj7gdjGb6pp!ix}?ADV7|~MhD@vsb+3IDB13&<1Nlra?#Di z+ixKNZhG>Iut+;`jpCGEB*`x%pY*K|`0K||Y9$SL@`QC8)>vJafIf6ZOho#Go%3Ve z#VzjoE>6U`fy&T-&07vZsP1bBp1=nX?p#zK9YjsqIMytB8GVad`%2i%47(o$H%OM8 zetG*^8hk2&_%`e3;kfSc%Umlr$nW*T_ZXn{^^nimzC#;08lw9Qj3A*mCCeA1A--Aq zT8dc>)ho-Y+&`yP&!>lQf32Bh zDitnLY{T#OIDupr{l}RFFIM8K1V2B@iq>tm6|YKc0JOBRm4Nm@Ld?+P^W$KaeB6uv zKAm^_rVYQXD-I_%SDRkG00L6ThkF7j@cO_ooK?*qCG<{=a?!#!`P zf!S7=z^9d90qmK#=S{D%J$xMb$Xu8UF#LuR9<$Nbw0OLi;^c}x?q54%x1#Hrv`mpa zs=nz2OF(oL*qJk(w=TBU#}8jk@$#W{_T1#rBcyzr5gv)L@Ze+6o@9m#1-SGNBIkWB zCXk~rte0qWgG6A+A1sVo(mTeo1@3R^F+|VPAb)$3|8x*kg}fGZ6aLUl{c-*7 z^;sPKlA!sNNKH;1ln?w#>3seVO{k&UW|Z?^+Gxwa-u{1*Ss9!x%xw*wT^voF{&&)1 zjJmenCOew%Y8|Hn0Vz?-2Kps^KW{!wV4+0o?}OUj2ssG=)%Zm=>+*??CI?4+Am6z& z#G{Y?bq>+6vPda#Z}=P9E03LI6|XXIb~61$6z=@K>P9vdou?`c9lvDGzkXASI1xLR z?hsai)W)iJVuj!+xj{1AMDI4DR$IR2U<|=~Mj!-r)54Cm!&ZXqUV#|ZoT0;uW=@Ps zS_J+QyMfqFP<{k+!7vAf6^??Vu4ipS5l`w0GM;SFfzStV9YIDGE4J+4CD$UU?f!0W6+i@yC6@I2 zm~_*as5v$TUzlERY3!3`(P7ck?H%}N@&`!9mmBlZ%p5x4X3m zZ>ur=8h58NIJ7&DuAxH;Y7EY&72A>*5ae=6N^+R~sx)oO`VBDx4Z*QTrRIL^E*E^I zI(9rg+Rampd8}8b2{tEn1KajFp>H)EhqB(a-D;x4%aCP;>uq&A4RI4EGKN zM9u_{XvdL9ZH?cX%Um{bS>)o99J~t%{sH2?Uki5HbcLRy7u0L z>RbP<@nVL6^NZ5r#&d~Azo7}atry48Xd(0$Q z`D&DOXA3gjZK`zps@90SmX)Edwpj|h4fy>be}=E?mmrj!Wx`tn%Iq*t{qp|F7!g1R zQ-Ag0lP{OE3Xjue9~EiN?#k7M=U2l;&&;-U(BA@y+}f(uYQGS6D3Hb+m2CGX z!_^ND!~}nm#lP?xx6#OD0=B9d(!~*Y%o)8F^7vzP=zL?UAWjmq`U2X?fa&xZ$g}qS zO9sch=nZd{mzN(ggA9l;d4BKFXfg1kdW|F`hJ_-5NsEH`0ymHb*e*&AZ*&~LhQ3Ut zdWOZN+3EH&#nz>1N|FUGjwESRVQ676T?cJDr*0Sg1j9Kwlj?{u-y>|Jd?ex4?(iEGulHK{?hpn6w>x*tvNO9%K|Hg%@0(?h0&1xh z$2Km~FU~(h1ilF-Na#TakVnY;UIIQWYo*rXTqpP$UzE>_-VJ0IYby#0gi}RKuJ(tm zUiBU!hQX0Ezq%jg5(Z_`Y%_sJ>A?JAa*&7DYav#U(S^z_fy?bJe=to$o%#k!X+QyH zc8-HJ%ycozbal`BTvSt{gq!z5r>+gA8O-hpLzfoEdIxJ;p%`5RT5+7WjE!VrzDfb{ z<@-oz^M)(t)Fp3H1}*5+K+jh3VDt5OA(dP$4PqquYnjLR{LdnNW}K?cAF8)nmGFg% z3wkz9%%1f09cB&dyx+-SBZ`ZY4_kyv=8-$v;5sC%B#4Y19s%gZg&b^|q#9LU%D019 zRhiKC5`0P&?s59rNA6%W>s2@oa59y5#W)*k_-rg5qMW!~?MBJQ9tKR7!smu0xo3x- zeSf#B7~)1~XC{i#l*2~^RRk$N<{MD2nel4dpA0s7H>-A5>UfJrH_xbwa^0m9E@Bg}Q@omt@PFIywHbe^N>|N* z%y@f&Zmrtm=P7_Ah_4dI>3mzeF+5tFe($f6ZL+B9EyKdYVa>_^{hL)CeI9WNJ|F|2 zIPR=S>sH=pt;2Ov*7C86n+`gZ6m=HIgJqSlo&=nRiiQNu1LNE9cS{>b@~N;otGh^( zwLxcpmABA?tg|Vbc+?(sQw|eWG{U8&X`4@<|AT$GJxbXG)xjgshg^w8;7 z0kSMcgAob`*veyVSv+2aJRa@SIhpt`&ZK4?;^O1(R75O~T3$Ah!`IYWeO~}S>2gfC zm6=>a%~joq3Vv<+M})80yu0!y2XWNUz_wnd`PCAoT)p}#F^)fFeYQ#c+j}jInAgKK zcQ(#Z7TZ_=vi_ke>!j#Cm8zJtHS>(TzeGo^_6BN9q%!I^%`6LGmOl(7NPf;3z7+M( zLbig!Rk?z4=LOk-2}KkR}bo zgiB|bKhtNoFe}1rmSH027yj_P^`{9vCq*bdSD4o9s0TxCk(xaZx_)7SJ~-a<>mo)7 zA6-<{waiG$V!&7Lol8iWS6$$s9o-MQsn;~mJ{4-U#!!I&$*bO;Xb#3cb9-BE(y2D? zQL$LnYBlQUw45G8>|V2ruUt7B#z;%;McVkFj(zq}+GpzUBD!dLBH?MK5dU>V5uz|2 zG+k)KV93hp&iFK}W$3^a0lt`GhOtzXpGD&m@hpyQnBpZ29Dt5AjZDG^XC;YB=Q_s4 zZb!ci=i4hcpGOBhjqU^JXK%Eh@#UXo2Ll9^k@UN&ip?3B=Q}H+TWD2D)TJPc8S!dN z)}FO#3I2RDSbVyVkb^rF9-56Kv1fyqnzuN1yy`tsA@>LX1C9BeCcBd9PbRD9`#8H& zgq5`;x=!@f%df}pw>f{PI?q;~T_7%t!=0-*WDI|;JWuE>w-Z+cDYQj^xI6dZqqO|Q z-E$tZ{&)h<;F#h4Gx@9E{Q1C{e{kAmT?DfKT9X+LLU3y9sYT&h`>dNGeBE4c-LJ^; zw#cX+%WLEUKG!fI2=B0q7ZAg8I>bTIvb62F;Zg}2X$AzINKZ@GA>7kb%3aDkEkJW+gzWUq)@_$Lv>!(Bc`*o{|>N2 z5!qC7qCeEI84N%uJH->~@20ALb03X{r?S&ctERy$lQ`Katukfq;mNLe0ejM2GQm62 zPG0x06>OS1>?rvf#wan7j33k5wqDByi9-x{nj5I-6IzPGWam zi>9^D)k1rQJ66=(wqjU9^220s1CtT8m3~0Q+pU#``|>Gx!4r*u0y)O6o>s3f@g_Rj z6wf0_@9t}TjK**$TI6f?Op0PJcikwHov%e+-l2r}ARl4UhM&MM~R zS*kWsMDp;(iEG{4_1>F&w)R6HNe6XW?i*&1Xic^ZsV6iV0WzEJ@U;iLy0E|8<_Cx* z21;AT$vL*NklN2e3N>oXzWkJMZ`JFhLhS{d?j!pF>h_EM<|<^W`sb0fFVXtvi^qEh zyM41a)>mvforldSM}1aY_dGHD+2;pUb>;_}$UCNGgEk@klggd8`e8ZCkD=BgSnCU-xr12W`&A4otc4_kahjRzD3IzdnN2aH#@YoD$Et0< z1Y7_e{GIA+cwC~Q+tjaS=|=fb>9Up=lf4}gk}O*JjWHni zkXOvtG)k2Ezh$Aq$pvi@!;XCckXULIKsy5#pRtR+icI1_;MI@&_*t5b`HL$i3Qn{T+bl?goUoUeBlxc_6Q?&)2%GAod{Jj|3wBaD<&9<4~iuJsV} zn?(1kXW4tvJ;5Cl^Lm7}X`j=ZA+DYeM7$p4tVpFGry`X~89zRt*MHR9Z z7jbpm)1Tf^Eu{G??vw=d8>KlLzNagnyV^}yu3mbu-TAuRBGRW>Ss9jL(Bi zjYZdEKH}8je($(=Ehxg;xE*t=FyOaPKvM-B7Y*nU2+E%It^jfW^ak1R++j-VFLxhU zARx^D^uS{YaR0A2g=*3t>SM&tYjv5l0Es|ALhf)+5Q6zuF+xA^4k0TcWN$dGlx197 z@0nDx!9$npw?{%z;?onJu4VT?L$}>}K}0HufC-5;!ZmtC>1v0{!t_4+YC)0+ zym$SbiDJPEK^p}>po}9lAyNaf+M*ASTSY?<`aGd+fUsinX%QUC6u6HKeSpHzt8QlX zYlC4!Q9Znqy#dCW5C`I3IkV+4Lx}$zBjbh7%?oy`VGpN4? z8e)Ely2zUU@mgiwifn`QWkV&sGV3IgA}9Kb6z!FHu`1Dl^0!7PjhY@lN=W~5)P>$I zt5gEfLQ~h&mIq>>C!39T_uET6onA{{ulJ*;m@YnH5oj=38U8(Z7$^9=dLm)4|j zhzH_!sFAglj{^+}d3-v@A(eal(MB!c&9oz8?tSe-E#9%hLLG7i zxX&52QXOOZ7IsHl{C)%IvUr>ZQ{K$SRsB?*+fHFn7pkHyNppVu%7+k30ItX3_f5_= znYUUN=;0=Jb+44X8URdURv+d6E` z!3+LGFM;c-K@p|z`|9bpggp3gDk@uy6#fDs*IKsTY%eX~X z?RObeQD4bT$uB#Nv!idD^;+az!o7Z47nBTfVx`N{MjeLYcF>4^xKUcsOFYbz@) zXMq-wto<1<*B^A2KL>S1uiI!uT6Rm-YJK8US@C0fRD;yma{t1!m;m%p(HxO;H)Vc0 z_(=YaMP2@Ft^quPxyJrFl_-ZjKk=4s)1Ne_>^t3?E#>O_r$iz7`yzKLgpbTG79gMx z-NOHf7MyHtt^U2(-GE~rv&weY<_mV58(V)%k#+;*0^|$nP%j$(b@*GxSuyBGv0EEY zQ%TaC=Zx^(d()FgM5}h_DE}>1f(L)oTah_Sj+}r^DA7vOwyAxTel#Ds+%lrp?Ec6E z`Z~dAb*>hmQ;9>DRDF(9$p)yYuIl>PT07ZLD{oQtm0HtwxwRZ)3>N)?X?oY(LR__` z(rr~T??gtiEIFk}S0J>LN{Z3A3sSTEPPF08c6uvxefq+s;N+>nj2V=ed2iWSB3E}| zMCmeV7=6<_Ap(#E>SimU;sL2ZZL|F@s%YPmQ$uT;f|JKY`F03R*_dxZo*+r5HWq0z zK8|fx#@&KSRr#Pss*VEQrFM1;`UVSM&E^<^<=Ow^3BhMT&-;2WJ~_Ot$V}^wq{4?1 zKC0TOxBUvC$j2T!c znM_^EQ76Dl5);)KP-~eYr zj?URl7*qSZCF@IbC{VfG^GwlN0P;6TcINA9T=h+23Tx-fZhYf9wvGo!*^CpUEN%F1@2LQl<^`*ox+F~p2I~o*8;5Sk_EirUx7olcc!}@I*v?e<*_9O9$ zi;YhWOQ0R}vm4by$r9w~5X4bB^oJ+1ZR$T+gteLS9>%0Bs>zOge+_eljTw6ooX5W= zt%|zG47}C|u~Mql+?pNo5pOCuw!`;?G6V3QUxUp1s2=B4Y1}-l|2nYU=m@3RoYcs8 z>r{?o)@cL71wMJKGgGLfgiosG=R<2O=E?(g{7v>y;3Y4F$hlGx;ys~V$yhsOZ+|kK zoGQ>I9u!b?uPpOetZwy#?d7OxbG+pHn_`OPOrJ_sREILk7BB};F0mw^CVUW^@HZ>D zY)yL{$3vvAaHd$Tk*nkDXDYMJXZv4ckJ!3}F2L%QMMpa6@lQHROpkE{^ToFlRd>L2*)E`PB>pLoiq6CrOrjQ!0G@F7t zSia`jaz>8t6M{YD3~%b>ET4mD_2I*SI|%eCu!? zV=svWQIt}t!p%^x)>R6wp#rlRf#6+~9`G)@JN{&SYT+%*J?`(61pH1kCyX+4I^l0(tw+n+yMh{0f!}4Uk{qoNS~ki z8)*5h4`LYs-^NG?$ILIf%*Xw}S6%$?u+#!rISfEeg6<)YW_LXkXG$VGyU%A~1%c8$ zWVnGuVOfvz<(w3r&3LJ`W^};lhBH0Epb$5iLN3sjk=ednj4h0^++vUrtDgi3h|Zmr zyT&ux`MClj+ETI-C89E9`NU6=oV#y(KJvLROX58-$2BWTtK#0^E7=Ci(!kth-0KY} zpy$<3q`^FTJ56dJTri;qbg3Vay@jjKoVr;yNbgz+Ee2oM^PS!tb;B6$iSYs53Pt48 z4Y%%G;2BOVRnH)K9SRzOx<22;;K2RDqI1ZcL@%gC?2F zdM-SR*kumi1DzoW@WOaSmPeyugOW`Z#qKsaxf6z(tB)y7@V;PCNCX+yn|&mY&H)v+ zb_e!@&M-fRca(MaAySz!hIj#yE2t}4>f4XAu~5)rRhMB;raZd@tZ6u5;~%O+_)!~x zH(*|FBRwM-cM|oO23YjZG*`oWu?jt1^!-ZV@9@5RgRtvt3M!|z=r(6)(n0s~qx-pV zG}`SIM|&E~Jt$C-^Q0Lb^CdK9fgLD}!O5EQkvH+rS{Z8ipX3x#8&=A3m1~GFoAS${)@+S7T zwW@+bpu-Zr180NQ*=Glq5)-t4pK z5!#{DmS%*2DVoxgCCWZ9 z4%PlB_6&S=2Gs!*!H)DdXg@VSpNO?2P<-4?Z_IwhMcOtfax?@pPQ)e2qH6wxJv=D~ zNKct+2uSy=>%L7O{05*VBd1G{nVt+u+lgU9Da;TJMtGj_KIT_dOlrjpwU+7P#zqXd zyxZ=tCaQ>DUT=NPf&PKop&BN$x%%44UcAW|2hd}Pw zDxd+`Y>(PA;nyIfLKr;HX}F$dj7AC>P7BE{40`}8LQ6F*e&2y4tW;^5pN7xR?tf-0 zopKoSPZP+T=_xj(KQtXCPo;KwKl%d75JLGwPKIX^nAG~A0&<Le>3)YxWT07mR=5pgx`U@k#e{o5Tb<{75ESrMzE__X36ESl%9 zb0bHc9UTE`-)hj>q;BfRd=08&M-hPgp5=OP=J4~K6mZ|9v&+yLlbLOmv zWAnn_c3($k@%r#Z2j8P_A(tO;7W23mG}Wdw*G!xrZT9EzYigKSP)2}zVY0!P01tw$ zAI%yBg6`fT=%^rO;lw z?HMiFie&mGS!y8>37_m&h9u3yg-?}wilQMNN^*5m6%1V4#bRH)*~EW0wWnK)TB{`} zZ#YSZ$dr0bS%QBOhbJu5sifp*#Q<3}b8>H5HzIIaZ$a+fto0Xaqxmq(f>up~NBwJ8BxcSzxcuV005yB;0`pK-;x!lSVu@Q(lTQI6ox;6jPfvd zIr#|`<~O8`Gu7oXSsuHjrq?&Up!j#t4)!YNKtkRkv4nbdQMijUwcruB|AI*pYADA%MJ72!I?K`5lJ znX>|+0nL!gqnT$eoD=@s`yG%;zx8R+GlR&+;Q|QTSvZ`-g{_`|$(gUd$Yl^&6e zJ>K2s8SaRdeQ&o0p-lTk4IPOx_Tr!)u7wADIaAZ*pfO9nUoc`uRrVB!6@P6({}64_feONt=|184sq! za@=$Rp>pT6a;+QOpakB$3zmJ$r0o}6>l<+X=8IV&UG#S_#=_G6#Q|NLb0w$XPD~Ndxr3A*XG9rfo_I7v6mZWy9a!jrs z+Ig*R@pS_~rFiD}k_D?I%V2XSMZ^Wg+k@yVoDDmGHT&9Pl*a<;EOzc|k!>$gU1sneq0ZtpoM3#^7S$Sucwla@1{Vqh51MzW;=77C)^ly8S6s? z2Ov9NazrNv+BeFxc@W5qy>tZmwcI16J8Q>w6qJIFowv4+e83>3hlUAtt3RExOx5({ zpUu!mv_x<_KPuKOV z#A%?lFfo{>6LeKGgj$$9qBAgwp8Zah{Y%+RS{0qMXIN6nWGfwF~{_1FO;G4stHAyEn{C2e-sWJIBFiAH_b zgC0=V!9Mq4!S3*n(D6$m*#k+94ib>wg)m_9Lq*f=&CFmuK>m%>*Pu9D0=oAlPw>*8 zxi7&gKq7uf$Fi7>ko4th|IgKTon(P>wxE%`L^B2*+cBmTI~HWh7ILpWsRC_cqS=?T zTizE)ab?T6ZTYWE8U6*zQk28rfKcOoO_iHDIK7x_t)S!unMm+ks>o*tF~T#HB&SHS z%{$>jzqLPbQjyokt}tMckd<1UGdKYPRYkleJti}(s2Q>2GAp{DpqR(}jEb$N4QZz| zi~Rh_Q1M3x;cb#)x0$Q+@-@)jbR=NI&d1wFOtg_op6bF?ZVpg;)SZ6g))*qZG}!_9 z3<83{`Mal0u4+5+j;iI&8iMJfUfWgw(4?eNgQH_oL*1dsP)XI zapLk`L}jo4h+hOr-?`{&AfBK$P7@V%X49OA&pH&DdMFeA1w%(dlT5J?(`iDD-whpy zd&LjndNm1-ez~stjaLv1v9VT1ZjId3p1pT0BXK6%bKS^yBc_`r*%hsKXlVjtU@QMk zR?dJPtFT8s0YCG*v?wuaotqh-<$gqEqXj!U#(_L%NS#8eAd3%iQv)^1us=$K`3aL!U(rlt%^0O_1cwqkSFrq zRMW)nQTdSXy}_mv<7;865mRZAuunMXj;!BFY9Mj1g=uVIV$~|g-RK5two7few|Uwa zPsHOk_j)eNMe&}^>g#Hb6 z)ub{TU-NhLZ~DjSeftjni^Qa~Jl5Xxa@5I#8+>J!uKPRug_}79zcIKe^UWi*ph9HS zA{sW%i3cp5-?g%vJ`sPq9|Of-;TOT4K@G&1BaIlzzy1eD*(+vx`ZZu$aj(m!1XmBz2vhcl*ot4)zEyy6ko$ zW8*C6LxIW_;w|&5%spBufG#k1UCHia3jG26!pmMOAc8Ni3;@1!q2&M{V_>fdkHpHf zpw^DCB#MF8Wo<=cD_)x?QaTAB>+r9mCz#|HEm>SVC}}FG7b5lvuk3@5h5;!Ok<{Ks zj-g?lP+wvgXkY0tpS2T!0&m~42RbeaO}R-5mRC0|q2)L&HC4~y*Vkne=Xe{7-$s_( zt`(?3hmsu&lqxJ)JGtPn`*UY!8bW^SPT=iwQ;9MM#*WnB!L7;N^K!L)5OI8X7jt|+ zy}X!_ai7xED7(1lp0?9=ty^y98@=X_LjIzulj2hdPW+-0SUPVtj?-j)afC@cn+cW&Q zUB!OULk-o1Go#@R>-^%f8BKzRg^O|fg7PI9=7<}WrdX`MT7LdT$T)u~jr)*zxY`II zbEcFSLAJ1OfotWcb>S%McUYiD|GHcP25ctdxZ z(plM*2BEB80cb|Y;vIm-PsMeY`C{jo*AM4S4Uq=(@h-#zf19xD__uV(tzy;uR#%>Z zc7}`Ts}=LvW!n?fR>~qIYWDmgQ<>JcjRx_i#i2^*T}f~8$7uI;q$tjxcJn=sLw>t3 z1q0??oj)zY{+MMc;c-^g7ZcBNRS?Eg4AACi>6^0FM;IjKsxyU zUPgBP$ff@ zh{M+RM=avsH%#xM3JbXlD5jnb64sX8SJOEmUoo=RCY zSuR_xG$31n)m_!DyJ|?P#*-dZb(jU3 zcOJT6^xW=@<#;Cw$pjmbOzC>31U=>)@wmTAvGw)2W@>9~{m~z+`L1C-6JS-YM(Q?E z&DjZHSNm!M7J$Xvm{F{qEZ%jXONRcLq2pLr}7vq%v zuf{ZH%WzLp9Hw8(4kTY|r-K(86co{SWdSKC(rq=9Jw{&=k&DddRfx#+K?WCdbF4NQ(Hi^aPHa44o%uf>e20y$w7BpC{`Y{7~Hv zb`tDJZM9C=xRUAB*PILHAoQ%MRh?Ghl@N_ z*K!mKP}>D@7ewdrTuy@1i9F=hrtrJPc#MmmQLr7B&sEIWQ1kZ?k-qpthUv#QvE(b-xDJ9*pGLc(7(3de z*=y7cftF0!r+e?S)D1B(xJf9sSZ{?{$jQY6q2kR^YClNd77^iqU{rC7o?AwQOo($V zD7PAIb*1z? zvm(E(3f+q97bWq)b>I!1;&2W#SikfPPbl-@QwepC<(?V;Mp{49ZJCS?QZ^Xt1F)rN zW_IXFT@`Z8PsGvued29$K+?-)C)~0P(wEMxD9W`Z7R(M%e3~ zbHO{`22J*+2Um9v#P?WJ^Re`FZs`NMid=YS!kH6|8N3eK{_~X#Uk&bZ2PFsRWv5uK z@2+z#fS+O37R%9IOr>6U{P02`pk%G-Da5i4X6bH%`3nW9UjEIj)4j25-E^Y^XKq=p z;<=~KcuC)m9C|RIVB|>n*u>k1MjOM?qOmD$PT-I8@(1{{&sJ8R=hw*gL(|rO!M{jw zcrDgLNIe|BVdkQvZyCoDhcuks)A_@2eCr?2qoM7lQrB{a`<)Ig9izbY#C6=PtZoLZ zzl6!M%*u0Bq~kXrLd7uGNW3^Y~6H502P| zrD^J3-YeCqYQ0$mlrd%9>Lhm|CFj>LakcJd@mur1fe8 z&bs#eR+mO+Rax4cEv=xe7i48TDM#(9R^9CuN<{_2?BIF)g`oD?@5w74hoRS~*4oM_ z?>cC565jX%!6ppt`yJeTCs7zD@1g<+UJ+wvX8!^U(P*`0_zk(k*Jj)|XtIYaer|OW zF=LSn;hu)|qjFv>ikId33Qg&bVy8*~FrTd|e=1lLm~E`;jaLtqd=i8#xx(GkknP6X z!=F{gY+dvh(5hQ9l8)E}I8b&bIpcTRFnuYT?>@dd0$oUe@o@ojC@VL2{fX=qf$^Ii zb19-yO2-ocL&|ATqD~sTK|njLIWH5WVNt&z(Q$_cRR&N3_itgumkY^e&ZrA`h9J-@ zPkyh5?#6Hoq?avEs7$&*PDm#wmC0C&_8-;r&J&e{yEIn)9EmHlCq=`*W13QoI3(XP z3OZ55SswXHb(FF)xmT1DzDm#K(AQnEA?|Lr+aO>r1f%VUZq#hUknd|7Dp3c;Th3sJ zDgj~B$`zRRQ)Eum)rhnU{%kI)_z59{`Axw7f;8^F&djrrYaQO9i!olMlx}Y-=i<`( z8G4SO<6*T2Vb*za$7RY^C9%`e@6zS1q@ck%ZLsVnxWO~=g!D2BCP>+s!DsPGt~yP= zZ{KRhic3&g|0#9EeKD+9idU9RX&YlZNW8wjF{B4kzlst|!F~D-1H|+~Af$~ih0iQW zxOFHNm{ne3Pe>x?X)}Hf#sK1kpF4>FZL*L~g zZG$C8*7K5TLJqg%@dDWHa)aCOoWp{1>? zl{{UgLfv)YJ3AFK#_Hm*X&przWc%*%wj92_Zql(+)VY#5HiQtB>d2mP?Xjs82m@%g zno`VnYsg-7tz5?|p2>|(dJe+ip^|>%k#BVy1L8=ig#kqe6X`z{jeq}{B%7WsdVYZc zGxLH(Ont)$61Z9LtNJKzpXT|*9Ca=yYyBWPXZC2{i7#7v_GBj0*u7GmW+B*?e`s+3 zfQZ0S%KA~|QegiKBGi_nwb}o7FaDg?eO5;)R+Fl+e`-H@8Fq$4@2EI#itW=%x{Klr z6dZ5>x3y>SS@eD3y(Tvy3|t``BaGsR@&U_cTXbs{jRu+lKkp{5InRNzy?vK;arZ1%Au!$7fs+=w4{={N(K5!hvmQRF(qs z?zz0!bX#cgfc*lO-(D4WrxV#Ft4dAXaK z%^hvPhZgUiF&W~DO5Gx!bZ>w3Ze@j|O36=Dw4p1G925sRmF{OYdXRjc*Y&thbU@nN z+=rTyBaqLa8)D(qnckS}DNRBad{N8i_FHgZUSh_!P&+m9VSq3VawrlmVihgd=ihv? zi$z)D??_8qWkS%N9Efa(X%mVJF5T;n4wj*A?T*=d@)+GW^H6x`+}Pcr)P?) zLdVwR+)}@eVoW<@Tz+zX1(un#;gt<;jlu@Gx4or$WX5;RKU3?I^~;h{Fhp|tb_dxu z;6G#Jms=8FUmEWo+M1B|ye+j&>Pz5@>Th6u$hXicRL2r{IeU?KbYh>C>pX2?sM2v~RdSTn{2Y(oSQ!ny)d*;u; z5+%8-)MXV$iHvjYC|=U3GL4Ranfv*di~<-06%_TOr~?VKEfpXq#!NL*hXe$~N(lt? z_2ajHk3zq{_Wmonjh2CqnSqXh&cxi&iT1A!QF;+kWnm>r1r9z}tLmfAvZJJqrDVsQynXbqP^Xna@l+qMPMXA8_lBjr?z# zkIzEC)&H9bVB_TAu5V{+ZsX)g=j8VP9k%@vwegS-t?1H6D<|pyBDJ9YKd1LE=T8eq zTbs|*#4_FhKz=ZNl=40?GJl+!|KmhB+1lw_0bBr9|7nhl-HNK}A8ZC6+sC>5*C_P! z{+sdN1vsB4B#PN5dG-M+_-H=<-*8a+|C!JS+}hCGMqmG<)c6_hjV644015;o@zHwq zSKspAqtK6#;cvL1gRz;p3*bMXaV<1ETRyJ*LP;Q?zy1LJ9)*6aA1b2%IvVswe_iDI z|F!=g7(RzY{=-1{!TH||{~j6ndH$a>692&)eq2rejsN$=#LxK8p=JNz5#|5J{}W;M z8U5Kh_8;^x;BWN5E~o$h;D0s|`Un2%_&5A-OQFwS{n=yYA1t=Zzp(%AIP;m{bI1BW z1aLn8BKTMT`e*d#2I+s$YrcP@|E+mXU;m>3;PfA_z|W0;|1ik~{RgJM+W3(MUtf%{jWit71me1

    `%Am7 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ໞcf$(9E>UWtqg`Q1b?HJnx@uIBTK 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 Rm#}Y*^zFyP48?;=GQ|i0+8)>a5DF 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

  • Rzi#61e5&a@ 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 it-UkBx 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 xzc@GiW$v^t&tF;p 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 z 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�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%0DE%aueY@5X9WkR@H0AV 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