From e3536e430eb0d02e16cbeb2e63488efa26aa52eb Mon Sep 17 00:00:00 2001 From: Yunchi Wu <1219355865@qq.com> Date: Thu, 22 Jan 2026 12:07:08 +0800 Subject: [PATCH] d2l-0.17.6-arm64 --- d2l-0.17.6/.venv/bin/Activate.ps1 | 247 + d2l-0.17.6/.venv/bin/activate | 63 + d2l-0.17.6/.venv/bin/activate.csh | 26 + d2l-0.17.6/.venv/bin/activate.fish | 69 + d2l-0.17.6/.venv/bin/docutils | 8 + d2l-0.17.6/.venv/bin/keyring | 8 + d2l-0.17.6/.venv/bin/markdown-it | 8 + d2l-0.17.6/.venv/bin/normalizer | 8 + d2l-0.17.6/.venv/bin/pip | 8 + d2l-0.17.6/.venv/bin/pip3 | 8 + d2l-0.17.6/.venv/bin/pip3.11 | 8 + d2l-0.17.6/.venv/bin/pygmentize | 8 + d2l-0.17.6/.venv/bin/python | 1 + d2l-0.17.6/.venv/bin/python3 | 1 + d2l-0.17.6/.venv/bin/python3.11 | 1 + d2l-0.17.6/.venv/bin/rst2html | 8 + d2l-0.17.6/.venv/bin/rst2html4 | 8 + d2l-0.17.6/.venv/bin/rst2html5 | 8 + d2l-0.17.6/.venv/bin/rst2latex | 8 + d2l-0.17.6/.venv/bin/rst2man | 8 + d2l-0.17.6/.venv/bin/rst2odt | 8 + d2l-0.17.6/.venv/bin/rst2pseudoxml | 8 + d2l-0.17.6/.venv/bin/rst2s5 | 8 + d2l-0.17.6/.venv/bin/rst2xetex | 8 + d2l-0.17.6/.venv/bin/rst2xml | 8 + d2l-0.17.6/.venv/bin/twine | 8 + .../site-packages/_distutils_hack/__init__.py | 222 + .../site-packages/_distutils_hack/override.py | 1 + .../INSTALLER | 1 + .../backports.tarfile-1.2.0.dist-info/LICENSE | 17 + .../METADATA | 46 + .../backports.tarfile-1.2.0.dist-info/RECORD | 16 + .../backports.tarfile-1.2.0.dist-info/WHEEL | 5 + .../top_level.txt | 1 + .../site-packages/backports/__init__.py | 1 + .../backports/tarfile/__init__.py | 2937 ++++++ .../backports/tarfile/__main__.py | 5 + .../backports/tarfile/compat/__init__.py | 0 .../backports/tarfile/compat/py38.py | 24 + .../certifi-2026.1.4.dist-info/INSTALLER | 1 + .../certifi-2026.1.4.dist-info/METADATA | 78 + .../certifi-2026.1.4.dist-info/RECORD | 14 + .../certifi-2026.1.4.dist-info/WHEEL | 5 + .../licenses/LICENSE | 20 + .../certifi-2026.1.4.dist-info/top_level.txt | 1 + .../site-packages/certifi/__init__.py | 4 + .../site-packages/certifi/__main__.py | 12 + .../site-packages/certifi/cacert.pem | 4468 +++++++++ .../python3.11/site-packages/certifi/core.py | 83 + .../python3.11/site-packages/certifi/py.typed | 0 .../INSTALLER | 1 + .../METADATA | 764 ++ .../charset_normalizer-3.4.4.dist-info/RECORD | 35 + .../charset_normalizer-3.4.4.dist-info/WHEEL | 6 + .../entry_points.txt | 2 + .../licenses/LICENSE | 21 + .../top_level.txt | 1 + .../charset_normalizer/__init__.py | 48 + .../charset_normalizer/__main__.py | 6 + .../site-packages/charset_normalizer/api.py | 669 ++ .../site-packages/charset_normalizer/cd.py | 395 + .../charset_normalizer/cli/__init__.py | 8 + .../charset_normalizer/cli/__main__.py | 381 + .../charset_normalizer/constant.py | 2015 ++++ .../charset_normalizer/legacy.py | 80 + .../md.cpython-311-darwin.so | Bin 0 -> 66592 bytes .../site-packages/charset_normalizer/md.py | 635 ++ .../md__mypyc.cpython-311-darwin.so | Bin 0 -> 485672 bytes .../charset_normalizer/models.py | 360 + .../site-packages/charset_normalizer/py.typed | 0 .../site-packages/charset_normalizer/utils.py | 414 + .../charset_normalizer/version.py | 8 + .../docutils-0.22.4.dist-info/INSTALLER | 1 + .../docutils-0.22.4.dist-info/METADATA | 495 + .../docutils-0.22.4.dist-info/RECORD | 353 + .../docutils-0.22.4.dist-info/WHEEL | 4 + .../entry_points.txt | 13 + .../licenses/COPYING.rst | 151 + .../licenses/licenses/BSD-0-Clause.rst | 13 + .../licenses/licenses/BSD-2-Clause.rst | 25 + .../licenses/licenses/gpl-3-0.txt | 674 ++ .../site-packages/docutils/__init__.py | 341 + .../site-packages/docutils/__main__.py | 103 + .../python3.11/site-packages/docutils/core.py | 855 ++ .../site-packages/docutils/docutils.conf | 5 + .../site-packages/docutils/examples.py | 123 + .../site-packages/docutils/frontend.py | 1178 +++ .../python3.11/site-packages/docutils/io.py | 716 ++ .../docutils/languages/__init__.py | 117 + .../site-packages/docutils/languages/af.py | 58 + .../site-packages/docutils/languages/ar.py | 60 + .../site-packages/docutils/languages/ca.py | 65 + .../site-packages/docutils/languages/cs.py | 60 + .../site-packages/docutils/languages/da.py | 61 + .../site-packages/docutils/languages/de.py | 58 + .../site-packages/docutils/languages/en.py | 60 + .../site-packages/docutils/languages/eo.py | 61 + .../site-packages/docutils/languages/es.py | 58 + .../site-packages/docutils/languages/fa.py | 60 + .../site-packages/docutils/languages/fi.py | 60 + .../site-packages/docutils/languages/fr.py | 58 + .../site-packages/docutils/languages/gl.py | 62 + .../site-packages/docutils/languages/he.py | 62 + .../site-packages/docutils/languages/it.py | 58 + .../site-packages/docutils/languages/ja.py | 60 + .../site-packages/docutils/languages/ka.py | 58 + .../site-packages/docutils/languages/ko.py | 60 + .../site-packages/docutils/languages/lt.py | 60 + .../site-packages/docutils/languages/lv.py | 59 + .../site-packages/docutils/languages/nl.py | 60 + .../site-packages/docutils/languages/pl.py | 60 + .../site-packages/docutils/languages/pt_br.py | 60 + .../site-packages/docutils/languages/ru.py | 58 + .../site-packages/docutils/languages/sk.py | 58 + .../site-packages/docutils/languages/sv.py | 59 + .../site-packages/docutils/languages/uk.py | 58 + .../site-packages/docutils/languages/zh_cn.py | 62 + .../site-packages/docutils/languages/zh_tw.py | 61 + .../site-packages/docutils/nodes.py | 3341 +++++++ .../docutils/parsers/__init__.py | 115 + .../docutils/parsers/commonmark_wrapper.py | 56 + .../docutils/parsers/docutils_xml.py | 194 + .../site-packages/docutils/parsers/null.py | 24 + .../docutils/parsers/recommonmark_wrapper.py | 174 + .../docutils/parsers/rst/__init__.py | 414 + .../parsers/rst/directives/__init__.py | 480 + .../parsers/rst/directives/admonitions.py | 101 + .../docutils/parsers/rst/directives/body.py | 329 + .../docutils/parsers/rst/directives/html.py | 21 + .../docutils/parsers/rst/directives/images.py | 186 + .../docutils/parsers/rst/directives/misc.py | 690 ++ .../docutils/parsers/rst/directives/parts.py | 129 + .../parsers/rst/directives/references.py | 28 + .../docutils/parsers/rst/directives/tables.py | 523 + .../docutils/parsers/rst/include/README.rst | 17 + .../parsers/rst/include/html-roles.txt | 45 + .../docutils/parsers/rst/include/isoamsa.txt | 162 + .../docutils/parsers/rst/include/isoamsb.txt | 126 + .../docutils/parsers/rst/include/isoamsc.txt | 29 + .../docutils/parsers/rst/include/isoamsn.txt | 96 + .../docutils/parsers/rst/include/isoamso.txt | 62 + .../docutils/parsers/rst/include/isoamsr.txt | 191 + .../docutils/parsers/rst/include/isobox.txt | 46 + .../docutils/parsers/rst/include/isocyr1.txt | 73 + .../docutils/parsers/rst/include/isocyr2.txt | 32 + .../docutils/parsers/rst/include/isodia.txt | 20 + .../docutils/parsers/rst/include/isogrk1.txt | 55 + .../docutils/parsers/rst/include/isogrk2.txt | 26 + .../docutils/parsers/rst/include/isogrk3.txt | 52 + .../parsers/rst/include/isogrk4-wide.txt | 49 + .../docutils/parsers/rst/include/isogrk4.txt | 8 + .../docutils/parsers/rst/include/isolat1.txt | 68 + .../docutils/parsers/rst/include/isolat2.txt | 128 + .../parsers/rst/include/isomfrk-wide.txt | 58 + .../docutils/parsers/rst/include/isomfrk.txt | 11 + .../parsers/rst/include/isomopf-wide.txt | 32 + .../docutils/parsers/rst/include/isomopf.txt | 13 + .../parsers/rst/include/isomscr-wide.txt | 58 + .../docutils/parsers/rst/include/isomscr.txt | 17 + .../docutils/parsers/rst/include/isonum.txt | 82 + .../docutils/parsers/rst/include/isopub.txt | 90 + .../docutils/parsers/rst/include/isotech.txt | 168 + .../docutils/parsers/rst/include/mmlalias.txt | 554 ++ .../parsers/rst/include/mmlextra-wide.txt | 113 + .../docutils/parsers/rst/include/mmlextra.txt | 87 + .../docutils/parsers/rst/include/s5defs.txt | 68 + .../parsers/rst/include/xhtml1-lat1.txt | 102 + .../parsers/rst/include/xhtml1-special.txt | 37 + .../parsers/rst/include/xhtml1-symbol.txt | 130 + .../parsers/rst/languages/__init__.py | 63 + .../docutils/parsers/rst/languages/af.py | 107 + .../docutils/parsers/rst/languages/ar.py | 99 + .../docutils/parsers/rst/languages/ca.py | 130 + .../docutils/parsers/rst/languages/cs.py | 110 + .../docutils/parsers/rst/languages/da.py | 113 + .../docutils/parsers/rst/languages/de.py | 106 + .../docutils/parsers/rst/languages/en.py | 115 + .../docutils/parsers/rst/languages/eo.py | 118 + .../docutils/parsers/rst/languages/es.py | 121 + .../docutils/parsers/rst/languages/fa.py | 102 + .../docutils/parsers/rst/languages/fi.py | 98 + .../docutils/parsers/rst/languages/fr.py | 107 + .../docutils/parsers/rst/languages/gl.py | 106 + .../docutils/parsers/rst/languages/he.py | 110 + .../docutils/parsers/rst/languages/it.py | 98 + .../docutils/parsers/rst/languages/ja.py | 119 + .../docutils/parsers/rst/languages/ka.py | 89 + .../docutils/parsers/rst/languages/ko.py | 111 + .../docutils/parsers/rst/languages/lt.py | 109 + .../docutils/parsers/rst/languages/lv.py | 108 + .../docutils/parsers/rst/languages/nl.py | 113 + .../docutils/parsers/rst/languages/pl.py | 100 + .../docutils/parsers/rst/languages/pt_br.py | 109 + .../docutils/parsers/rst/languages/ru.py | 90 + .../docutils/parsers/rst/languages/sk.py | 96 + .../docutils/parsers/rst/languages/sv.py | 96 + .../docutils/parsers/rst/languages/uk.py | 91 + .../docutils/parsers/rst/languages/zh_cn.py | 104 + .../docutils/parsers/rst/languages/zh_tw.py | 109 + .../docutils/parsers/rst/roles.py | 450 + .../docutils/parsers/rst/states.py | 3266 ++++++ .../docutils/parsers/rst/tableparser.py | 543 + .../docutils/readers/__init__.py | 135 + .../site-packages/docutils/readers/doctree.py | 50 + .../site-packages/docutils/readers/pep.py | 55 + .../docutils/readers/standalone.py | 65 + .../site-packages/docutils/statemachine.py | 1534 +++ .../docutils/transforms/__init__.py | 196 + .../docutils/transforms/components.py | 56 + .../docutils/transforms/frontmatter.py | 548 + .../site-packages/docutils/transforms/misc.py | 143 + .../docutils/transforms/parts.py | 175 + .../site-packages/docutils/transforms/peps.py | 315 + .../docutils/transforms/references.py | 990 ++ .../docutils/transforms/universal.py | 364 + .../docutils/transforms/writer_aux.py | 57 + .../site-packages/docutils/utils/__init__.py | 850 ++ .../docutils/utils/_roman_numerals.py | 264 + .../site-packages/docutils/utils/_typing.py | 39 + .../docutils/utils/code_analyzer.py | 140 + .../docutils/utils/math/__init__.py | 77 + .../docutils/utils/math/latex2mathml.py | 1252 +++ .../docutils/utils/math/math2html.py | 3166 ++++++ .../utils/math/mathalphabet2unichar.py | 892 ++ .../docutils/utils/math/mathml_elements.py | 482 + .../docutils/utils/math/tex2mathml_extern.py | 263 + .../docutils/utils/math/tex2unichar.py | 730 ++ .../docutils/utils/math/unichar2tex.py | 808 ++ .../docutils/utils/punctuation_chars.py | 123 + .../docutils/utils/smartquotes.py | 1006 ++ .../docutils/utils/urischemes.py | 138 + .../docutils/writers/__init__.py | 277 + .../docutils/writers/_html_base.py | 1895 ++++ .../docutils/writers/docutils_xml.py | 191 + .../docutils/writers/html4css1/__init__.py | 964 ++ .../docutils/writers/html4css1/html4css1.css | 350 + .../docutils/writers/html4css1/template.txt | 8 + .../writers/html5_polyglot/__init__.py | 398 + .../html5_polyglot/italic-field-names.css | 26 + .../docutils/writers/html5_polyglot/math.css | 332 + .../writers/html5_polyglot/minimal.css | 298 + .../docutils/writers/html5_polyglot/plain.css | 306 + .../writers/html5_polyglot/responsive.css | 495 + .../writers/html5_polyglot/template.txt | 8 + .../writers/html5_polyglot/tuftig.css | 565 ++ .../docutils/writers/latex2e/__init__.py | 3417 +++++++ .../docutils/writers/latex2e/default.tex | 14 + .../docutils/writers/latex2e/docutils.sty | 273 + .../docutils/writers/latex2e/titlepage.tex | 19 + .../docutils/writers/latex2e/titlingpage.tex | 18 + .../docutils/writers/latex2e/xelatex.tex | 21 + .../site-packages/docutils/writers/manpage.py | 1353 +++ .../site-packages/docutils/writers/null.py | 28 + .../docutils/writers/odf_odt/__init__.py | 3461 +++++++ .../docutils/writers/odf_odt/prepstyles.py | 80 + .../writers/odf_odt/pygmentsformatter.py | 106 + .../docutils/writers/odf_odt/styles.odt | Bin 0 -> 16500 bytes .../docutils/writers/pep_html/__init__.py | 102 + .../docutils/writers/pep_html/pep.css | 344 + .../docutils/writers/pep_html/template.txt | 25 + .../docutils/writers/pseudoxml.py | 41 + .../docutils/writers/s5_html/__init__.py | 354 + .../writers/s5_html/themes/README.rst | 6 + .../writers/s5_html/themes/big-black/__base__ | 2 + .../s5_html/themes/big-black/framing.css | 25 + .../s5_html/themes/big-black/pretty.css | 109 + .../s5_html/themes/big-white/framing.css | 24 + .../s5_html/themes/big-white/pretty.css | 107 + .../s5_html/themes/default/framing.css | 25 + .../writers/s5_html/themes/default/opera.css | 8 + .../s5_html/themes/default/outline.css | 16 + .../writers/s5_html/themes/default/pretty.css | 120 + .../writers/s5_html/themes/default/print.css | 24 + .../s5_html/themes/default/s5-core.css | 11 + .../writers/s5_html/themes/default/slides.css | 10 + .../writers/s5_html/themes/default/slides.js | 558 ++ .../s5_html/themes/medium-black/__base__ | 2 + .../s5_html/themes/medium-black/pretty.css | 115 + .../s5_html/themes/medium-white/framing.css | 24 + .../s5_html/themes/medium-white/pretty.css | 113 + .../s5_html/themes/small-black/__base__ | 2 + .../s5_html/themes/small-black/pretty.css | 116 + .../s5_html/themes/small-white/framing.css | 24 + .../s5_html/themes/small-white/pretty.css | 114 + .../docutils/writers/xetex/__init__.py | 168 + .../id-1.5.0.dist-info/INSTALLER | 1 + .../site-packages/id-1.5.0.dist-info/LICENSE | 202 + .../site-packages/id-1.5.0.dist-info/METADATA | 139 + .../site-packages/id-1.5.0.dist-info/RECORD | 14 + .../site-packages/id-1.5.0.dist-info/WHEEL | 4 + .../id-1.5.0.dist-info/entry_points.txt | 3 + .../python3.11/site-packages/id/__init__.py | 91 + .../python3.11/site-packages/id/__main__.py | 88 + .../id/_internal/oidc/__init__.py | 13 + .../id/_internal/oidc/ambient.py | 328 + .../idna-3.11.dist-info/INSTALLER | 1 + .../idna-3.11.dist-info/METADATA | 209 + .../site-packages/idna-3.11.dist-info/RECORD | 22 + .../site-packages/idna-3.11.dist-info/WHEEL | 4 + .../idna-3.11.dist-info/licenses/LICENSE.md | 31 + .../python3.11/site-packages/idna/__init__.py | 45 + .../python3.11/site-packages/idna/codec.py | 122 + .../python3.11/site-packages/idna/compat.py | 15 + .../lib/python3.11/site-packages/idna/core.py | 437 + .../python3.11/site-packages/idna/idnadata.py | 4309 ++++++++ .../site-packages/idna/intranges.py | 57 + .../site-packages/idna/package_data.py | 1 + .../python3.11/site-packages/idna/py.typed | 0 .../site-packages/idna/uts46data.py | 8841 +++++++++++++++++ .../INSTALLER | 1 + .../METADATA | 133 + .../importlib_metadata-8.7.1.dist-info/RECORD | 33 + .../importlib_metadata-8.7.1.dist-info/WHEEL | 5 + .../licenses/LICENSE | 73 + .../top_level.txt | 1 + .../importlib_metadata/__init__.py | 1191 +++ .../importlib_metadata/_adapters.py | 136 + .../importlib_metadata/_collections.py | 34 + .../importlib_metadata/_compat.py | 56 + .../importlib_metadata/_functools.py | 135 + .../importlib_metadata/_itertools.py | 171 + .../site-packages/importlib_metadata/_meta.py | 71 + .../site-packages/importlib_metadata/_text.py | 99 + .../importlib_metadata/_typing.py | 15 + .../importlib_metadata/compat/__init__.py | 0 .../importlib_metadata/compat/py311.py | 22 + .../importlib_metadata/compat/py39.py | 42 + .../importlib_metadata/diagnose.py | 21 + .../site-packages/importlib_metadata/py.typed | 0 .../jaraco.classes-3.4.0.dist-info/INSTALLER | 1 + .../jaraco.classes-3.4.0.dist-info/LICENSE | 17 + .../jaraco.classes-3.4.0.dist-info/METADATA | 60 + .../jaraco.classes-3.4.0.dist-info/RECORD | 15 + .../jaraco.classes-3.4.0.dist-info/WHEEL | 5 + .../top_level.txt | 1 + .../site-packages/jaraco/classes/__init__.py | 0 .../site-packages/jaraco/classes/ancestry.py | 76 + .../site-packages/jaraco/classes/meta.py | 85 + .../jaraco/classes/properties.py | 241 + .../site-packages/jaraco/classes/py.typed | 0 .../site-packages/jaraco/context/__init__.py | 367 + .../site-packages/jaraco/context/py.typed | 0 .../jaraco/functools/__init__.py | 722 ++ .../jaraco/functools/__init__.pyi | 123 + .../site-packages/jaraco/functools/py.typed | 0 .../jaraco_context-6.1.0.dist-info/INSTALLER | 1 + .../jaraco_context-6.1.0.dist-info/METADATA | 82 + .../jaraco_context-6.1.0.dist-info/RECORD | 9 + .../jaraco_context-6.1.0.dist-info/WHEEL | 5 + .../licenses/LICENSE | 18 + .../top_level.txt | 1 + .../INSTALLER | 1 + .../jaraco_functools-4.4.0.dist-info/METADATA | 69 + .../jaraco_functools-4.4.0.dist-info/RECORD | 10 + .../jaraco_functools-4.4.0.dist-info/WHEEL | 5 + .../licenses/LICENSE | 18 + .../top_level.txt | 1 + .../keyring-25.7.0.dist-info/INSTALLER | 1 + .../keyring-25.7.0.dist-info/METADATA | 554 ++ .../keyring-25.7.0.dist-info/RECORD | 67 + .../keyring-25.7.0.dist-info/WHEEL | 5 + .../keyring-25.7.0.dist-info/entry_points.txt | 13 + .../keyring-25.7.0.dist-info/licenses/LICENSE | 18 + .../keyring-25.7.0.dist-info/top_level.txt | 1 + .../site-packages/keyring/__init__.py | 17 + .../site-packages/keyring/__main__.py | 4 + .../site-packages/keyring/backend.py | 300 + .../keyring/backend_complete.bash | 14 + .../keyring/backend_complete.zsh | 14 + .../keyring/backends/SecretService.py | 120 + .../site-packages/keyring/backends/Windows.py | 168 + .../keyring/backends/__init__.py | 0 .../site-packages/keyring/backends/chainer.py | 71 + .../site-packages/keyring/backends/fail.py | 30 + .../site-packages/keyring/backends/kwallet.py | 164 + .../keyring/backends/libsecret.py | 155 + .../keyring/backends/macOS/__init__.py | 85 + .../keyring/backends/macOS/api.py | 184 + .../site-packages/keyring/backends/null.py | 20 + .../python3.11/site-packages/keyring/cli.py | 220 + .../site-packages/keyring/compat/__init__.py | 7 + .../keyring/compat/properties.py | 169 + .../site-packages/keyring/compat/py312.py | 9 + .../site-packages/keyring/completion.py | 55 + .../python3.11/site-packages/keyring/core.py | 202 + .../site-packages/keyring/credentials.py | 85 + .../site-packages/keyring/devpi_client.py | 29 + .../site-packages/keyring/errors.py | 67 + .../python3.11/site-packages/keyring/http.py | 39 + .../python3.11/site-packages/keyring/py.typed | 0 .../site-packages/keyring/testing/__init__.py | 0 .../site-packages/keyring/testing/backend.py | 200 + .../site-packages/keyring/testing/util.py | 68 + .../site-packages/keyring/util/__init__.py | 11 + .../site-packages/keyring/util/platform_.py | 40 + .../site-packages/markdown_it/__init__.py | 6 + .../site-packages/markdown_it/_compat.py | 1 + .../site-packages/markdown_it/_punycode.py | 67 + .../site-packages/markdown_it/cli/__init__.py | 0 .../site-packages/markdown_it/cli/parse.py | 110 + .../markdown_it/common/__init__.py | 0 .../markdown_it/common/entities.py | 5 + .../markdown_it/common/html_blocks.py | 69 + .../markdown_it/common/html_re.py | 39 + .../markdown_it/common/normalize_url.py | 81 + .../site-packages/markdown_it/common/utils.py | 313 + .../markdown_it/helpers/__init__.py | 6 + .../helpers/parse_link_destination.py | 83 + .../markdown_it/helpers/parse_link_label.py | 44 + .../markdown_it/helpers/parse_link_title.py | 75 + .../site-packages/markdown_it/main.py | 350 + .../site-packages/markdown_it/parser_block.py | 113 + .../site-packages/markdown_it/parser_core.py | 46 + .../markdown_it/parser_inline.py | 148 + .../site-packages/markdown_it/port.yaml | 48 + .../markdown_it/presets/__init__.py | 28 + .../markdown_it/presets/commonmark.py | 75 + .../markdown_it/presets/default.py | 36 + .../site-packages/markdown_it/presets/zero.py | 44 + .../site-packages/markdown_it/py.typed | 1 + .../site-packages/markdown_it/renderer.py | 336 + .../site-packages/markdown_it/ruler.py | 275 + .../markdown_it/rules_block/__init__.py | 27 + .../markdown_it/rules_block/blockquote.py | 299 + .../markdown_it/rules_block/code.py | 36 + .../markdown_it/rules_block/fence.py | 101 + .../markdown_it/rules_block/heading.py | 69 + .../markdown_it/rules_block/hr.py | 56 + .../markdown_it/rules_block/html_block.py | 90 + .../markdown_it/rules_block/lheading.py | 86 + .../markdown_it/rules_block/list.py | 345 + .../markdown_it/rules_block/paragraph.py | 66 + .../markdown_it/rules_block/reference.py | 235 + .../markdown_it/rules_block/state_block.py | 261 + .../markdown_it/rules_block/table.py | 250 + .../markdown_it/rules_core/__init__.py | 19 + .../markdown_it/rules_core/block.py | 13 + .../markdown_it/rules_core/inline.py | 10 + .../markdown_it/rules_core/linkify.py | 149 + .../markdown_it/rules_core/normalize.py | 19 + .../markdown_it/rules_core/replacements.py | 127 + .../markdown_it/rules_core/smartquotes.py | 202 + .../markdown_it/rules_core/state_core.py | 25 + .../markdown_it/rules_core/text_join.py | 35 + .../markdown_it/rules_inline/__init__.py | 31 + .../markdown_it/rules_inline/autolink.py | 77 + .../markdown_it/rules_inline/backticks.py | 72 + .../markdown_it/rules_inline/balance_pairs.py | 138 + .../markdown_it/rules_inline/emphasis.py | 102 + .../markdown_it/rules_inline/entity.py | 53 + .../markdown_it/rules_inline/escape.py | 93 + .../rules_inline/fragments_join.py | 43 + .../markdown_it/rules_inline/html_inline.py | 43 + .../markdown_it/rules_inline/image.py | 148 + .../markdown_it/rules_inline/link.py | 149 + .../markdown_it/rules_inline/linkify.py | 62 + .../markdown_it/rules_inline/newline.py | 44 + .../markdown_it/rules_inline/state_inline.py | 165 + .../markdown_it/rules_inline/strikethrough.py | 127 + .../markdown_it/rules_inline/text.py | 62 + .../site-packages/markdown_it/token.py | 178 + .../site-packages/markdown_it/tree.py | 333 + .../site-packages/markdown_it/utils.py | 186 + .../markdown_it_py-4.0.0.dist-info/INSTALLER | 1 + .../markdown_it_py-4.0.0.dist-info/METADATA | 219 + .../markdown_it_py-4.0.0.dist-info/RECORD | 142 + .../markdown_it_py-4.0.0.dist-info/WHEEL | 4 + .../entry_points.txt | 3 + .../licenses/LICENSE | 21 + .../licenses/LICENSE.markdown-it | 22 + .../mdurl-0.1.2.dist-info/INSTALLER | 1 + .../mdurl-0.1.2.dist-info/LICENSE | 46 + .../mdurl-0.1.2.dist-info/METADATA | 32 + .../mdurl-0.1.2.dist-info/RECORD | 18 + .../site-packages/mdurl-0.1.2.dist-info/WHEEL | 4 + .../site-packages/mdurl/__init__.py | 18 + .../python3.11/site-packages/mdurl/_decode.py | 104 + .../python3.11/site-packages/mdurl/_encode.py | 85 + .../python3.11/site-packages/mdurl/_format.py | 27 + .../python3.11/site-packages/mdurl/_parse.py | 304 + .../python3.11/site-packages/mdurl/_url.py | 14 + .../python3.11/site-packages/mdurl/py.typed | 1 + .../more_itertools-10.8.0.dist-info/INSTALLER | 1 + .../more_itertools-10.8.0.dist-info/METADATA | 283 + .../more_itertools-10.8.0.dist-info/RECORD | 15 + .../more_itertools-10.8.0.dist-info/WHEEL | 4 + .../licenses/LICENSE | 19 + .../site-packages/more_itertools/__init__.py | 6 + .../site-packages/more_itertools/__init__.pyi | 2 + .../site-packages/more_itertools/more.py | 5303 ++++++++++ .../site-packages/more_itertools/more.pyi | 949 ++ .../site-packages/more_itertools/py.typed | 0 .../site-packages/more_itertools/recipes.py | 1471 +++ .../site-packages/more_itertools/recipes.pyi | 205 + .../nh3-0.3.2.dist-info/INSTALLER | 1 + .../nh3-0.3.2.dist-info/METADATA | 62 + .../site-packages/nh3-0.3.2.dist-info/RECORD | 10 + .../site-packages/nh3-0.3.2.dist-info/WHEEL | 4 + .../nh3-0.3.2.dist-info/licenses/LICENSE | 21 + .../python3.11/site-packages/nh3/__init__.py | 5 + .../python3.11/site-packages/nh3/__init__.pyi | 41 + .../python3.11/site-packages/nh3/nh3.abi3.so | Bin 0 -> 3757440 bytes .../lib/python3.11/site-packages/nh3/py.typed | 0 .../packaging-26.0.dist-info/INSTALLER | 1 + .../packaging-26.0.dist-info/METADATA | 107 + .../packaging-26.0.dist-info/RECORD | 42 + .../packaging-26.0.dist-info/WHEEL | 4 + .../packaging-26.0.dist-info/licenses/LICENSE | 3 + .../licenses/LICENSE.APACHE | 177 + .../licenses/LICENSE.BSD | 23 + .../site-packages/packaging/__init__.py | 15 + .../site-packages/packaging/_elffile.py | 108 + .../site-packages/packaging/_manylinux.py | 262 + .../site-packages/packaging/_musllinux.py | 85 + .../site-packages/packaging/_parser.py | 365 + .../site-packages/packaging/_structures.py | 69 + .../site-packages/packaging/_tokenizer.py | 193 + .../packaging/licenses/__init__.py | 147 + .../site-packages/packaging/licenses/_spdx.py | 799 ++ .../site-packages/packaging/markers.py | 388 + .../site-packages/packaging/metadata.py | 978 ++ .../site-packages/packaging/py.typed | 0 .../site-packages/packaging/pylock.py | 635 ++ .../site-packages/packaging/requirements.py | 86 + .../site-packages/packaging/specifiers.py | 1068 ++ .../site-packages/packaging/tags.py | 651 ++ .../site-packages/packaging/utils.py | 158 + .../site-packages/packaging/version.py | 792 ++ .../pip-24.0.dist-info/AUTHORS.txt | 760 ++ .../pip-24.0.dist-info/INSTALLER | 1 + .../pip-24.0.dist-info/LICENSE.txt | 20 + .../site-packages/pip-24.0.dist-info/METADATA | 88 + .../site-packages/pip-24.0.dist-info/RECORD | 1024 ++ .../pip-24.0.dist-info/REQUESTED | 0 .../site-packages/pip-24.0.dist-info/WHEEL | 5 + .../pip-24.0.dist-info/entry_points.txt | 4 + .../pip-24.0.dist-info/top_level.txt | 1 + .../python3.11/site-packages/pip/__init__.py | 13 + .../python3.11/site-packages/pip/__main__.py | 24 + .../site-packages/pip/__pip-runner__.py | 50 + .../site-packages/pip/_internal/__init__.py | 18 + .../site-packages/pip/_internal/build_env.py | 311 + .../site-packages/pip/_internal/cache.py | 290 + .../pip/_internal/cli/__init__.py | 4 + .../pip/_internal/cli/autocompletion.py | 172 + .../pip/_internal/cli/base_command.py | 236 + .../pip/_internal/cli/cmdoptions.py | 1074 ++ .../pip/_internal/cli/command_context.py | 27 + .../site-packages/pip/_internal/cli/main.py | 79 + .../pip/_internal/cli/main_parser.py | 134 + .../site-packages/pip/_internal/cli/parser.py | 294 + .../pip/_internal/cli/progress_bars.py | 68 + .../pip/_internal/cli/req_command.py | 505 + .../pip/_internal/cli/spinners.py | 159 + .../pip/_internal/cli/status_codes.py | 6 + .../pip/_internal/commands/__init__.py | 132 + .../pip/_internal/commands/cache.py | 225 + .../pip/_internal/commands/check.py | 54 + .../pip/_internal/commands/completion.py | 130 + .../pip/_internal/commands/configuration.py | 280 + .../pip/_internal/commands/debug.py | 201 + .../pip/_internal/commands/download.py | 147 + .../pip/_internal/commands/freeze.py | 108 + .../pip/_internal/commands/hash.py | 59 + .../pip/_internal/commands/help.py | 41 + .../pip/_internal/commands/index.py | 139 + .../pip/_internal/commands/inspect.py | 92 + .../pip/_internal/commands/install.py | 774 ++ .../pip/_internal/commands/list.py | 368 + .../pip/_internal/commands/search.py | 174 + .../pip/_internal/commands/show.py | 189 + .../pip/_internal/commands/uninstall.py | 113 + .../pip/_internal/commands/wheel.py | 183 + .../pip/_internal/configuration.py | 383 + .../site-packages/pip/_internal/exceptions.py | 728 ++ .../pip/_internal/index/__init__.py | 2 + .../pip/_internal/index/collector.py | 507 + .../pip/_internal/index/package_finder.py | 1027 ++ .../pip/_internal/index/sources.py | 285 + .../pip/_internal/locations/__init__.py | 467 + .../pip/_internal/locations/_distutils.py | 172 + .../pip/_internal/locations/_sysconfig.py | 213 + .../pip/_internal/locations/base.py | 81 + .../site-packages/pip/_internal/main.py | 12 + .../pip/_internal/metadata/__init__.py | 128 + .../pip/_internal/metadata/_json.py | 84 + .../pip/_internal/metadata/base.py | 702 ++ .../_internal/metadata/importlib/__init__.py | 6 + .../_internal/metadata/importlib/_compat.py | 55 + .../_internal/metadata/importlib/_dists.py | 227 + .../pip/_internal/metadata/importlib/_envs.py | 189 + .../pip/_internal/metadata/pkg_resources.py | 278 + .../pip/_internal/models/__init__.py | 2 + .../pip/_internal/models/candidate.py | 30 + .../pip/_internal/models/direct_url.py | 235 + .../pip/_internal/models/format_control.py | 78 + .../pip/_internal/models/index.py | 28 + .../_internal/models/installation_report.py | 56 + .../pip/_internal/models/link.py | 579 ++ .../pip/_internal/models/scheme.py | 31 + .../pip/_internal/models/search_scope.py | 132 + .../pip/_internal/models/selection_prefs.py | 51 + .../pip/_internal/models/target_python.py | 122 + .../pip/_internal/models/wheel.py | 92 + .../pip/_internal/network/__init__.py | 2 + .../pip/_internal/network/auth.py | 561 ++ .../pip/_internal/network/cache.py | 106 + .../pip/_internal/network/download.py | 186 + .../pip/_internal/network/lazy_wheel.py | 210 + .../pip/_internal/network/session.py | 520 + .../pip/_internal/network/utils.py | 96 + .../pip/_internal/network/xmlrpc.py | 62 + .../pip/_internal/operations/__init__.py | 0 .../_internal/operations/build/__init__.py | 0 .../operations/build/build_tracker.py | 139 + .../_internal/operations/build/metadata.py | 39 + .../operations/build/metadata_editable.py | 41 + .../operations/build/metadata_legacy.py | 74 + .../pip/_internal/operations/build/wheel.py | 37 + .../operations/build/wheel_editable.py | 46 + .../operations/build/wheel_legacy.py | 102 + .../pip/_internal/operations/check.py | 187 + .../pip/_internal/operations/freeze.py | 255 + .../_internal/operations/install/__init__.py | 2 + .../operations/install/editable_legacy.py | 46 + .../pip/_internal/operations/install/wheel.py | 734 ++ .../pip/_internal/operations/prepare.py | 730 ++ .../site-packages/pip/_internal/pyproject.py | 179 + .../pip/_internal/req/__init__.py | 92 + .../pip/_internal/req/constructors.py | 576 ++ .../pip/_internal/req/req_file.py | 554 ++ .../pip/_internal/req/req_install.py | 923 ++ .../pip/_internal/req/req_set.py | 119 + .../pip/_internal/req/req_uninstall.py | 649 ++ .../pip/_internal/resolution/__init__.py | 0 .../pip/_internal/resolution/base.py | 20 + .../_internal/resolution/legacy/__init__.py | 0 .../_internal/resolution/legacy/resolver.py | 598 ++ .../resolution/resolvelib/__init__.py | 0 .../_internal/resolution/resolvelib/base.py | 141 + .../resolution/resolvelib/candidates.py | 597 ++ .../resolution/resolvelib/factory.py | 812 ++ .../resolution/resolvelib/found_candidates.py | 155 + .../resolution/resolvelib/provider.py | 255 + .../resolution/resolvelib/reporter.py | 80 + .../resolution/resolvelib/requirements.py | 166 + .../resolution/resolvelib/resolver.py | 317 + .../pip/_internal/self_outdated_check.py | 248 + .../pip/_internal/utils/__init__.py | 0 .../pip/_internal/utils/_jaraco_text.py | 109 + .../site-packages/pip/_internal/utils/_log.py | 38 + .../pip/_internal/utils/appdirs.py | 52 + .../pip/_internal/utils/compat.py | 63 + .../pip/_internal/utils/compatibility_tags.py | 165 + .../pip/_internal/utils/datetime.py | 11 + .../pip/_internal/utils/deprecation.py | 120 + .../pip/_internal/utils/direct_url_helpers.py | 87 + .../pip/_internal/utils/egg_link.py | 80 + .../pip/_internal/utils/encoding.py | 36 + .../pip/_internal/utils/entrypoints.py | 84 + .../pip/_internal/utils/filesystem.py | 153 + .../pip/_internal/utils/filetypes.py | 27 + .../pip/_internal/utils/glibc.py | 88 + .../pip/_internal/utils/hashes.py | 151 + .../pip/_internal/utils/logging.py | 348 + .../site-packages/pip/_internal/utils/misc.py | 783 ++ .../pip/_internal/utils/models.py | 39 + .../pip/_internal/utils/packaging.py | 57 + .../pip/_internal/utils/setuptools_build.py | 146 + .../pip/_internal/utils/subprocess.py | 260 + .../pip/_internal/utils/temp_dir.py | 296 + .../pip/_internal/utils/unpacking.py | 257 + .../site-packages/pip/_internal/utils/urls.py | 62 + .../pip/_internal/utils/virtualenv.py | 104 + .../pip/_internal/utils/wheel.py | 134 + .../pip/_internal/vcs/__init__.py | 15 + .../site-packages/pip/_internal/vcs/bazaar.py | 112 + .../site-packages/pip/_internal/vcs/git.py | 526 + .../pip/_internal/vcs/mercurial.py | 163 + .../pip/_internal/vcs/subversion.py | 324 + .../pip/_internal/vcs/versioncontrol.py | 705 ++ .../pip/_internal/wheel_builder.py | 354 + .../site-packages/pip/_vendor/__init__.py | 121 + .../pip/_vendor/cachecontrol/__init__.py | 28 + .../pip/_vendor/cachecontrol/_cmd.py | 70 + .../pip/_vendor/cachecontrol/adapter.py | 161 + .../pip/_vendor/cachecontrol/cache.py | 74 + .../_vendor/cachecontrol/caches/__init__.py | 8 + .../_vendor/cachecontrol/caches/file_cache.py | 181 + .../cachecontrol/caches/redis_cache.py | 48 + .../pip/_vendor/cachecontrol/controller.py | 494 + .../pip/_vendor/cachecontrol/filewrapper.py | 119 + .../pip/_vendor/cachecontrol/heuristics.py | 154 + .../pip/_vendor/cachecontrol/py.typed | 0 .../pip/_vendor/cachecontrol/serialize.py | 206 + .../pip/_vendor/cachecontrol/wrapper.py | 43 + .../pip/_vendor/certifi/__init__.py | 4 + .../pip/_vendor/certifi/__main__.py | 12 + .../pip/_vendor/certifi/cacert.pem | 4635 +++++++++ .../site-packages/pip/_vendor/certifi/core.py | 108 + .../pip/_vendor/certifi/py.typed | 0 .../pip/_vendor/chardet/__init__.py | 115 + .../pip/_vendor/chardet/big5freq.py | 386 + .../pip/_vendor/chardet/big5prober.py | 47 + .../pip/_vendor/chardet/chardistribution.py | 261 + .../pip/_vendor/chardet/charsetgroupprober.py | 106 + .../pip/_vendor/chardet/charsetprober.py | 147 + .../pip/_vendor/chardet/cli/__init__.py | 0 .../pip/_vendor/chardet/cli/chardetect.py | 112 + .../pip/_vendor/chardet/codingstatemachine.py | 90 + .../_vendor/chardet/codingstatemachinedict.py | 19 + .../pip/_vendor/chardet/cp949prober.py | 49 + .../pip/_vendor/chardet/enums.py | 85 + .../pip/_vendor/chardet/escprober.py | 102 + .../pip/_vendor/chardet/escsm.py | 261 + .../pip/_vendor/chardet/eucjpprober.py | 102 + .../pip/_vendor/chardet/euckrfreq.py | 196 + .../pip/_vendor/chardet/euckrprober.py | 47 + .../pip/_vendor/chardet/euctwfreq.py | 388 + .../pip/_vendor/chardet/euctwprober.py | 47 + .../pip/_vendor/chardet/gb2312freq.py | 284 + .../pip/_vendor/chardet/gb2312prober.py | 47 + .../pip/_vendor/chardet/hebrewprober.py | 316 + .../pip/_vendor/chardet/jisfreq.py | 325 + .../pip/_vendor/chardet/johabfreq.py | 2382 +++++ .../pip/_vendor/chardet/johabprober.py | 47 + .../pip/_vendor/chardet/jpcntx.py | 238 + .../pip/_vendor/chardet/langbulgarianmodel.py | 4649 +++++++++ .../pip/_vendor/chardet/langgreekmodel.py | 4397 ++++++++ .../pip/_vendor/chardet/langhebrewmodel.py | 4380 ++++++++ .../pip/_vendor/chardet/langhungarianmodel.py | 4649 +++++++++ .../pip/_vendor/chardet/langrussianmodel.py | 5725 +++++++++++ .../pip/_vendor/chardet/langthaimodel.py | 4380 ++++++++ .../pip/_vendor/chardet/langturkishmodel.py | 4380 ++++++++ .../pip/_vendor/chardet/latin1prober.py | 147 + .../pip/_vendor/chardet/macromanprober.py | 162 + .../pip/_vendor/chardet/mbcharsetprober.py | 95 + .../pip/_vendor/chardet/mbcsgroupprober.py | 57 + .../pip/_vendor/chardet/mbcssm.py | 661 ++ .../pip/_vendor/chardet/metadata/__init__.py | 0 .../pip/_vendor/chardet/metadata/languages.py | 352 + .../pip/_vendor/chardet/py.typed | 0 .../pip/_vendor/chardet/resultdict.py | 16 + .../pip/_vendor/chardet/sbcharsetprober.py | 162 + .../pip/_vendor/chardet/sbcsgroupprober.py | 88 + .../pip/_vendor/chardet/sjisprober.py | 105 + .../pip/_vendor/chardet/universaldetector.py | 362 + .../pip/_vendor/chardet/utf1632prober.py | 225 + .../pip/_vendor/chardet/utf8prober.py | 82 + .../pip/_vendor/chardet/version.py | 9 + .../pip/_vendor/colorama/__init__.py | 7 + .../pip/_vendor/colorama/ansi.py | 102 + .../pip/_vendor/colorama/ansitowin32.py | 277 + .../pip/_vendor/colorama/initialise.py | 121 + .../pip/_vendor/colorama/tests/__init__.py | 1 + .../pip/_vendor/colorama/tests/ansi_test.py | 76 + .../colorama/tests/ansitowin32_test.py | 294 + .../_vendor/colorama/tests/initialise_test.py | 189 + .../pip/_vendor/colorama/tests/isatty_test.py | 57 + .../pip/_vendor/colorama/tests/utils.py | 49 + .../_vendor/colorama/tests/winterm_test.py | 131 + .../pip/_vendor/colorama/win32.py | 180 + .../pip/_vendor/colorama/winterm.py | 195 + .../pip/_vendor/idna/__init__.py | 44 + .../site-packages/pip/_vendor/idna/codec.py | 112 + .../site-packages/pip/_vendor/idna/compat.py | 13 + .../site-packages/pip/_vendor/idna/core.py | 400 + .../pip/_vendor/idna/idnadata.py | 2151 ++++ .../pip/_vendor/idna/intranges.py | 54 + .../pip/_vendor/idna/package_data.py | 2 + .../site-packages/pip/_vendor/idna/py.typed | 0 .../pip/_vendor/idna/uts46data.py | 8600 ++++++++++++++++ .../pip/_vendor/msgpack/__init__.py | 57 + .../pip/_vendor/msgpack/exceptions.py | 48 + .../site-packages/pip/_vendor/msgpack/ext.py | 193 + .../pip/_vendor/msgpack/fallback.py | 1010 ++ .../pip/_vendor/packaging/__about__.py | 26 + .../pip/_vendor/packaging/__init__.py | 25 + .../pip/_vendor/packaging/_manylinux.py | 301 + .../pip/_vendor/packaging/_musllinux.py | 136 + .../pip/_vendor/packaging/_structures.py | 61 + .../pip/_vendor/packaging/markers.py | 304 + .../pip/_vendor/packaging/py.typed | 0 .../pip/_vendor/packaging/requirements.py | 146 + .../pip/_vendor/packaging/specifiers.py | 802 ++ .../pip/_vendor/packaging/tags.py | 487 + .../pip/_vendor/packaging/utils.py | 136 + .../pip/_vendor/packaging/version.py | 504 + .../pip/_vendor/pkg_resources/__init__.py | 3361 +++++++ .../pip/_vendor/platformdirs/__init__.py | 566 ++ .../pip/_vendor/platformdirs/__main__.py | 53 + .../pip/_vendor/platformdirs/android.py | 210 + .../pip/_vendor/platformdirs/api.py | 223 + .../pip/_vendor/platformdirs/macos.py | 91 + .../pip/_vendor/platformdirs/py.typed | 0 .../pip/_vendor/platformdirs/unix.py | 223 + .../pip/_vendor/platformdirs/version.py | 4 + .../pip/_vendor/platformdirs/windows.py | 255 + .../pip/_vendor/pygments/__init__.py | 82 + .../pip/_vendor/pygments/__main__.py | 17 + .../pip/_vendor/pygments/cmdline.py | 668 ++ .../pip/_vendor/pygments/console.py | 70 + .../pip/_vendor/pygments/filter.py | 71 + .../pip/_vendor/pygments/filters/__init__.py | 940 ++ .../pip/_vendor/pygments/formatter.py | 124 + .../_vendor/pygments/formatters/__init__.py | 158 + .../_vendor/pygments/formatters/_mapping.py | 23 + .../pip/_vendor/pygments/formatters/bbcode.py | 108 + .../pip/_vendor/pygments/formatters/groff.py | 170 + .../pip/_vendor/pygments/formatters/html.py | 989 ++ .../pip/_vendor/pygments/formatters/img.py | 645 ++ .../pip/_vendor/pygments/formatters/irc.py | 154 + .../pip/_vendor/pygments/formatters/latex.py | 521 + .../pip/_vendor/pygments/formatters/other.py | 161 + .../pygments/formatters/pangomarkup.py | 83 + .../pip/_vendor/pygments/formatters/rtf.py | 146 + .../pip/_vendor/pygments/formatters/svg.py | 188 + .../_vendor/pygments/formatters/terminal.py | 127 + .../pygments/formatters/terminal256.py | 338 + .../pip/_vendor/pygments/lexer.py | 943 ++ .../pip/_vendor/pygments/lexers/__init__.py | 362 + .../pip/_vendor/pygments/lexers/_mapping.py | 559 ++ .../pip/_vendor/pygments/lexers/python.py | 1198 +++ .../pip/_vendor/pygments/modeline.py | 43 + .../pip/_vendor/pygments/plugin.py | 88 + .../pip/_vendor/pygments/regexopt.py | 91 + .../pip/_vendor/pygments/scanner.py | 104 + .../pip/_vendor/pygments/sphinxext.py | 217 + .../pip/_vendor/pygments/style.py | 197 + .../pip/_vendor/pygments/styles/__init__.py | 103 + .../pip/_vendor/pygments/token.py | 213 + .../pip/_vendor/pygments/unistring.py | 153 + .../pip/_vendor/pygments/util.py | 330 + .../pip/_vendor/pyparsing/__init__.py | 322 + .../pip/_vendor/pyparsing/actions.py | 217 + .../pip/_vendor/pyparsing/common.py | 432 + .../pip/_vendor/pyparsing/core.py | 6115 ++++++++++++ .../pip/_vendor/pyparsing/diagram/__init__.py | 656 ++ .../pip/_vendor/pyparsing/exceptions.py | 299 + .../pip/_vendor/pyparsing/helpers.py | 1100 ++ .../pip/_vendor/pyparsing/py.typed | 0 .../pip/_vendor/pyparsing/results.py | 796 ++ .../pip/_vendor/pyparsing/testing.py | 331 + .../pip/_vendor/pyparsing/unicode.py | 361 + .../pip/_vendor/pyparsing/util.py | 284 + .../pip/_vendor/pyproject_hooks/__init__.py | 23 + .../pip/_vendor/pyproject_hooks/_compat.py | 8 + .../pip/_vendor/pyproject_hooks/_impl.py | 330 + .../pyproject_hooks/_in_process/__init__.py | 18 + .../_in_process/_in_process.py | 353 + .../pip/_vendor/requests/__init__.py | 182 + .../pip/_vendor/requests/__version__.py | 14 + .../pip/_vendor/requests/_internal_utils.py | 50 + .../pip/_vendor/requests/adapters.py | 538 + .../site-packages/pip/_vendor/requests/api.py | 157 + .../pip/_vendor/requests/auth.py | 315 + .../pip/_vendor/requests/certs.py | 24 + .../pip/_vendor/requests/compat.py | 67 + .../pip/_vendor/requests/cookies.py | 561 ++ .../pip/_vendor/requests/exceptions.py | 141 + .../pip/_vendor/requests/help.py | 131 + .../pip/_vendor/requests/hooks.py | 33 + .../pip/_vendor/requests/models.py | 1034 ++ .../pip/_vendor/requests/packages.py | 16 + .../pip/_vendor/requests/sessions.py | 833 ++ .../pip/_vendor/requests/status_codes.py | 128 + .../pip/_vendor/requests/structures.py | 99 + .../pip/_vendor/requests/utils.py | 1094 ++ .../pip/_vendor/resolvelib/__init__.py | 26 + .../pip/_vendor/resolvelib/compat/__init__.py | 0 .../resolvelib/compat/collections_abc.py | 6 + .../pip/_vendor/resolvelib/providers.py | 133 + .../pip/_vendor/resolvelib/py.typed | 0 .../pip/_vendor/resolvelib/reporters.py | 43 + .../pip/_vendor/resolvelib/resolvers.py | 547 + .../pip/_vendor/resolvelib/structs.py | 170 + .../pip/_vendor/rich/__init__.py | 177 + .../pip/_vendor/rich/__main__.py | 274 + .../pip/_vendor/rich/_cell_widths.py | 451 + .../pip/_vendor/rich/_emoji_codes.py | 3610 +++++++ .../pip/_vendor/rich/_emoji_replace.py | 32 + .../pip/_vendor/rich/_export_format.py | 76 + .../pip/_vendor/rich/_extension.py | 10 + .../site-packages/pip/_vendor/rich/_fileno.py | 24 + .../pip/_vendor/rich/_inspect.py | 270 + .../pip/_vendor/rich/_log_render.py | 94 + .../site-packages/pip/_vendor/rich/_loop.py | 43 + .../pip/_vendor/rich/_null_file.py | 69 + .../pip/_vendor/rich/_palettes.py | 309 + .../site-packages/pip/_vendor/rich/_pick.py | 17 + .../site-packages/pip/_vendor/rich/_ratio.py | 160 + .../pip/_vendor/rich/_spinners.py | 482 + .../site-packages/pip/_vendor/rich/_stack.py | 16 + .../site-packages/pip/_vendor/rich/_timer.py | 19 + .../pip/_vendor/rich/_win32_console.py | 662 ++ .../pip/_vendor/rich/_windows.py | 72 + .../pip/_vendor/rich/_windows_renderer.py | 56 + .../site-packages/pip/_vendor/rich/_wrap.py | 56 + .../site-packages/pip/_vendor/rich/abc.py | 33 + .../site-packages/pip/_vendor/rich/align.py | 311 + .../site-packages/pip/_vendor/rich/ansi.py | 240 + .../site-packages/pip/_vendor/rich/bar.py | 94 + .../site-packages/pip/_vendor/rich/box.py | 517 + .../site-packages/pip/_vendor/rich/cells.py | 154 + .../site-packages/pip/_vendor/rich/color.py | 622 ++ .../pip/_vendor/rich/color_triplet.py | 38 + .../site-packages/pip/_vendor/rich/columns.py | 187 + .../site-packages/pip/_vendor/rich/console.py | 2633 +++++ .../pip/_vendor/rich/constrain.py | 37 + .../pip/_vendor/rich/containers.py | 167 + .../site-packages/pip/_vendor/rich/control.py | 225 + .../pip/_vendor/rich/default_styles.py | 190 + .../pip/_vendor/rich/diagnose.py | 37 + .../site-packages/pip/_vendor/rich/emoji.py | 96 + .../site-packages/pip/_vendor/rich/errors.py | 34 + .../pip/_vendor/rich/file_proxy.py | 57 + .../pip/_vendor/rich/filesize.py | 89 + .../pip/_vendor/rich/highlighter.py | 232 + .../site-packages/pip/_vendor/rich/json.py | 140 + .../site-packages/pip/_vendor/rich/jupyter.py | 101 + .../site-packages/pip/_vendor/rich/layout.py | 443 + .../site-packages/pip/_vendor/rich/live.py | 375 + .../pip/_vendor/rich/live_render.py | 113 + .../site-packages/pip/_vendor/rich/logging.py | 289 + .../site-packages/pip/_vendor/rich/markup.py | 246 + .../site-packages/pip/_vendor/rich/measure.py | 151 + .../site-packages/pip/_vendor/rich/padding.py | 141 + .../site-packages/pip/_vendor/rich/pager.py | 34 + .../site-packages/pip/_vendor/rich/palette.py | 100 + .../site-packages/pip/_vendor/rich/panel.py | 308 + .../site-packages/pip/_vendor/rich/pretty.py | 994 ++ .../pip/_vendor/rich/progress.py | 1702 ++++ .../pip/_vendor/rich/progress_bar.py | 224 + .../site-packages/pip/_vendor/rich/prompt.py | 376 + .../pip/_vendor/rich/protocol.py | 42 + .../site-packages/pip/_vendor/rich/py.typed | 0 .../site-packages/pip/_vendor/rich/region.py | 10 + .../site-packages/pip/_vendor/rich/repr.py | 149 + .../site-packages/pip/_vendor/rich/rule.py | 130 + .../site-packages/pip/_vendor/rich/scope.py | 86 + .../site-packages/pip/_vendor/rich/screen.py | 54 + .../site-packages/pip/_vendor/rich/segment.py | 739 ++ .../site-packages/pip/_vendor/rich/spinner.py | 137 + .../site-packages/pip/_vendor/rich/status.py | 132 + .../site-packages/pip/_vendor/rich/style.py | 796 ++ .../site-packages/pip/_vendor/rich/styled.py | 42 + .../site-packages/pip/_vendor/rich/syntax.py | 948 ++ .../site-packages/pip/_vendor/rich/table.py | 1002 ++ .../pip/_vendor/rich/terminal_theme.py | 153 + .../site-packages/pip/_vendor/rich/text.py | 1307 +++ .../site-packages/pip/_vendor/rich/theme.py | 115 + .../site-packages/pip/_vendor/rich/themes.py | 5 + .../pip/_vendor/rich/traceback.py | 756 ++ .../site-packages/pip/_vendor/rich/tree.py | 251 + .../site-packages/pip/_vendor/six.py | 998 ++ .../pip/_vendor/tenacity/__init__.py | 608 ++ .../pip/_vendor/tenacity/_asyncio.py | 94 + .../pip/_vendor/tenacity/_utils.py | 76 + .../pip/_vendor/tenacity/after.py | 51 + .../pip/_vendor/tenacity/before.py | 46 + .../pip/_vendor/tenacity/before_sleep.py | 71 + .../site-packages/pip/_vendor/tenacity/nap.py | 43 + .../pip/_vendor/tenacity/py.typed | 0 .../pip/_vendor/tenacity/retry.py | 272 + .../pip/_vendor/tenacity/stop.py | 103 + .../pip/_vendor/tenacity/tornadoweb.py | 59 + .../pip/_vendor/tenacity/wait.py | 228 + .../pip/_vendor/tomli/__init__.py | 11 + .../pip/_vendor/tomli/_parser.py | 691 ++ .../site-packages/pip/_vendor/tomli/_re.py | 107 + .../site-packages/pip/_vendor/tomli/_types.py | 10 + .../site-packages/pip/_vendor/tomli/py.typed | 1 + .../pip/_vendor/truststore/__init__.py | 13 + .../pip/_vendor/truststore/_api.py | 302 + .../pip/_vendor/truststore/_macos.py | 501 + .../pip/_vendor/truststore/_openssl.py | 66 + .../pip/_vendor/truststore/_ssl_constants.py | 31 + .../pip/_vendor/truststore/_windows.py | 554 ++ .../pip/_vendor/truststore/py.typed | 0 .../pip/_vendor/typing_extensions.py | 3072 ++++++ .../pip/_vendor/urllib3/__init__.py | 102 + .../pip/_vendor/urllib3/_collections.py | 337 + .../pip/_vendor/urllib3/_version.py | 2 + .../pip/_vendor/urllib3/connection.py | 572 ++ .../pip/_vendor/urllib3/connectionpool.py | 1132 +++ .../pip/_vendor/urllib3/contrib/__init__.py | 0 .../urllib3/contrib/_appengine_environ.py | 36 + .../contrib/_securetransport/__init__.py | 0 .../contrib/_securetransport/bindings.py | 519 + .../contrib/_securetransport/low_level.py | 397 + .../pip/_vendor/urllib3/contrib/appengine.py | 314 + .../pip/_vendor/urllib3/contrib/ntlmpool.py | 130 + .../pip/_vendor/urllib3/contrib/pyopenssl.py | 518 + .../urllib3/contrib/securetransport.py | 921 ++ .../pip/_vendor/urllib3/contrib/socks.py | 216 + .../pip/_vendor/urllib3/exceptions.py | 323 + .../pip/_vendor/urllib3/fields.py | 274 + .../pip/_vendor/urllib3/filepost.py | 98 + .../pip/_vendor/urllib3/packages/__init__.py | 0 .../urllib3/packages/backports/__init__.py | 0 .../urllib3/packages/backports/makefile.py | 51 + .../packages/backports/weakref_finalize.py | 155 + .../pip/_vendor/urllib3/packages/six.py | 1076 ++ .../pip/_vendor/urllib3/poolmanager.py | 537 + .../pip/_vendor/urllib3/request.py | 191 + .../pip/_vendor/urllib3/response.py | 879 ++ .../pip/_vendor/urllib3/util/__init__.py | 49 + .../pip/_vendor/urllib3/util/connection.py | 149 + .../pip/_vendor/urllib3/util/proxy.py | 57 + .../pip/_vendor/urllib3/util/queue.py | 22 + .../pip/_vendor/urllib3/util/request.py | 137 + .../pip/_vendor/urllib3/util/response.py | 107 + .../pip/_vendor/urllib3/util/retry.py | 620 ++ .../pip/_vendor/urllib3/util/ssl_.py | 495 + .../urllib3/util/ssl_match_hostname.py | 159 + .../pip/_vendor/urllib3/util/ssltransport.py | 221 + .../pip/_vendor/urllib3/util/timeout.py | 271 + .../pip/_vendor/urllib3/util/url.py | 435 + .../pip/_vendor/urllib3/util/wait.py | 152 + .../site-packages/pip/_vendor/vendor.txt | 24 + .../pip/_vendor/webencodings/__init__.py | 342 + .../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 + .../lib/python3.11/site-packages/pip/py.typed | 4 + .../site-packages/pkg_resources/__init__.py | 3296 ++++++ .../pkg_resources/_vendor/__init__.py | 0 .../pkg_resources/_vendor/appdirs.py | 608 ++ .../_vendor/importlib_resources/__init__.py | 36 + .../_vendor/importlib_resources/_adapters.py | 170 + .../_vendor/importlib_resources/_common.py | 104 + .../_vendor/importlib_resources/_compat.py | 98 + .../_vendor/importlib_resources/_itertools.py | 35 + .../_vendor/importlib_resources/_legacy.py | 121 + .../_vendor/importlib_resources/abc.py | 137 + .../_vendor/importlib_resources/readers.py | 122 + .../_vendor/importlib_resources/simple.py | 116 + .../pkg_resources/_vendor/jaraco/__init__.py | 0 .../pkg_resources/_vendor/jaraco/context.py | 213 + .../pkg_resources/_vendor/jaraco/functools.py | 525 + .../_vendor/jaraco/text/__init__.py | 599 ++ .../_vendor/more_itertools/__init__.py | 4 + .../_vendor/more_itertools/more.py | 4316 ++++++++ .../_vendor/more_itertools/recipes.py | 698 ++ .../_vendor/packaging/__about__.py | 26 + .../_vendor/packaging/__init__.py | 25 + .../_vendor/packaging/_manylinux.py | 301 + .../_vendor/packaging/_musllinux.py | 136 + .../_vendor/packaging/_structures.py | 61 + .../_vendor/packaging/markers.py | 304 + .../_vendor/packaging/requirements.py | 146 + .../_vendor/packaging/specifiers.py | 802 ++ .../pkg_resources/_vendor/packaging/tags.py | 487 + .../pkg_resources/_vendor/packaging/utils.py | 136 + .../_vendor/packaging/version.py | 504 + .../_vendor/pyparsing/__init__.py | 331 + .../_vendor/pyparsing/actions.py | 207 + .../pkg_resources/_vendor/pyparsing/common.py | 424 + .../pkg_resources/_vendor/pyparsing/core.py | 5814 +++++++++++ .../_vendor/pyparsing/diagram/__init__.py | 642 ++ .../_vendor/pyparsing/exceptions.py | 267 + .../_vendor/pyparsing/helpers.py | 1088 ++ .../_vendor/pyparsing/results.py | 760 ++ .../_vendor/pyparsing/testing.py | 331 + .../_vendor/pyparsing/unicode.py | 352 + .../pkg_resources/_vendor/pyparsing/util.py | 235 + .../pkg_resources/_vendor/zipp.py | 329 + .../pkg_resources/extern/__init__.py | 76 + .../pygments-2.19.2.dist-info/INSTALLER | 1 + .../pygments-2.19.2.dist-info/METADATA | 58 + .../pygments-2.19.2.dist-info/RECORD | 684 ++ .../pygments-2.19.2.dist-info/WHEEL | 4 + .../entry_points.txt | 2 + .../licenses/AUTHORS | 291 + .../licenses/LICENSE | 25 + .../site-packages/pygments/__init__.py | 82 + .../site-packages/pygments/__main__.py | 17 + .../site-packages/pygments/cmdline.py | 668 ++ .../site-packages/pygments/console.py | 70 + .../site-packages/pygments/filter.py | 70 + .../pygments/filters/__init__.py | 940 ++ .../site-packages/pygments/formatter.py | 129 + .../pygments/formatters/__init__.py | 157 + .../pygments/formatters/_mapping.py | 23 + .../pygments/formatters/bbcode.py | 108 + .../pygments/formatters/groff.py | 170 + .../site-packages/pygments/formatters/html.py | 995 ++ .../site-packages/pygments/formatters/img.py | 686 ++ .../site-packages/pygments/formatters/irc.py | 154 + .../pygments/formatters/latex.py | 518 + .../pygments/formatters/other.py | 160 + .../pygments/formatters/pangomarkup.py | 83 + .../site-packages/pygments/formatters/rtf.py | 349 + .../site-packages/pygments/formatters/svg.py | 185 + .../pygments/formatters/terminal.py | 127 + .../pygments/formatters/terminal256.py | 338 + .../site-packages/pygments/lexer.py | 961 ++ .../site-packages/pygments/lexers/__init__.py | 362 + .../pygments/lexers/_ada_builtins.py | 103 + .../pygments/lexers/_asy_builtins.py | 1644 +++ .../pygments/lexers/_cl_builtins.py | 231 + .../pygments/lexers/_cocoa_builtins.py | 75 + .../pygments/lexers/_csound_builtins.py | 1780 ++++ .../pygments/lexers/_css_builtins.py | 558 ++ .../pygments/lexers/_googlesql_builtins.py | 918 ++ .../pygments/lexers/_julia_builtins.py | 411 + .../pygments/lexers/_lasso_builtins.py | 5326 ++++++++++ .../pygments/lexers/_lilypond_builtins.py | 4932 +++++++++ .../pygments/lexers/_lua_builtins.py | 285 + .../pygments/lexers/_luau_builtins.py | 62 + .../site-packages/pygments/lexers/_mapping.py | 602 ++ .../pygments/lexers/_mql_builtins.py | 1171 +++ .../pygments/lexers/_mysql_builtins.py | 1335 +++ .../pygments/lexers/_openedge_builtins.py | 2600 +++++ .../pygments/lexers/_php_builtins.py | 3325 +++++++ .../pygments/lexers/_postgres_builtins.py | 739 ++ .../pygments/lexers/_qlik_builtins.py | 666 ++ .../pygments/lexers/_scheme_builtins.py | 1609 +++ .../pygments/lexers/_scilab_builtins.py | 3093 ++++++ .../pygments/lexers/_sourcemod_builtins.py | 1151 +++ .../pygments/lexers/_sql_builtins.py | 106 + .../pygments/lexers/_stan_builtins.py | 648 ++ .../pygments/lexers/_stata_builtins.py | 457 + .../pygments/lexers/_tsql_builtins.py | 1003 ++ .../pygments/lexers/_usd_builtins.py | 112 + .../pygments/lexers/_vbscript_builtins.py | 279 + .../pygments/lexers/_vim_builtins.py | 1938 ++++ .../pygments/lexers/actionscript.py | 243 + .../site-packages/pygments/lexers/ada.py | 144 + .../site-packages/pygments/lexers/agile.py | 25 + .../site-packages/pygments/lexers/algebra.py | 299 + .../site-packages/pygments/lexers/ambient.py | 75 + .../site-packages/pygments/lexers/amdgpu.py | 54 + .../site-packages/pygments/lexers/ampl.py | 87 + .../site-packages/pygments/lexers/apdlexer.py | 593 ++ .../site-packages/pygments/lexers/apl.py | 103 + .../pygments/lexers/archetype.py | 315 + .../site-packages/pygments/lexers/arrow.py | 116 + .../site-packages/pygments/lexers/arturo.py | 249 + .../site-packages/pygments/lexers/asc.py | 55 + .../site-packages/pygments/lexers/asm.py | 1051 ++ .../site-packages/pygments/lexers/asn1.py | 178 + .../pygments/lexers/automation.py | 379 + .../site-packages/pygments/lexers/bare.py | 101 + .../site-packages/pygments/lexers/basic.py | 656 ++ .../site-packages/pygments/lexers/bdd.py | 57 + .../site-packages/pygments/lexers/berry.py | 99 + .../site-packages/pygments/lexers/bibtex.py | 159 + .../pygments/lexers/blueprint.py | 173 + .../site-packages/pygments/lexers/boa.py | 97 + .../site-packages/pygments/lexers/bqn.py | 112 + .../site-packages/pygments/lexers/business.py | 625 ++ .../site-packages/pygments/lexers/c_cpp.py | 414 + .../site-packages/pygments/lexers/c_like.py | 738 ++ .../pygments/lexers/capnproto.py | 74 + .../site-packages/pygments/lexers/carbon.py | 95 + .../site-packages/pygments/lexers/cddl.py | 172 + .../site-packages/pygments/lexers/chapel.py | 139 + .../site-packages/pygments/lexers/clean.py | 180 + .../site-packages/pygments/lexers/codeql.py | 80 + .../site-packages/pygments/lexers/comal.py | 81 + .../site-packages/pygments/lexers/compiled.py | 35 + .../site-packages/pygments/lexers/configs.py | 1433 +++ .../site-packages/pygments/lexers/console.py | 114 + .../site-packages/pygments/lexers/cplint.py | 43 + .../site-packages/pygments/lexers/crystal.py | 364 + .../site-packages/pygments/lexers/csound.py | 466 + .../site-packages/pygments/lexers/css.py | 602 ++ .../site-packages/pygments/lexers/d.py | 259 + .../site-packages/pygments/lexers/dalvik.py | 126 + .../site-packages/pygments/lexers/data.py | 763 ++ .../site-packages/pygments/lexers/dax.py | 135 + .../pygments/lexers/devicetree.py | 108 + .../site-packages/pygments/lexers/diff.py | 169 + .../site-packages/pygments/lexers/dns.py | 109 + .../site-packages/pygments/lexers/dotnet.py | 873 ++ .../site-packages/pygments/lexers/dsls.py | 970 ++ .../site-packages/pygments/lexers/dylan.py | 279 + .../site-packages/pygments/lexers/ecl.py | 144 + .../site-packages/pygments/lexers/eiffel.py | 68 + .../site-packages/pygments/lexers/elm.py | 123 + .../site-packages/pygments/lexers/elpi.py | 175 + .../site-packages/pygments/lexers/email.py | 132 + .../site-packages/pygments/lexers/erlang.py | 526 + .../site-packages/pygments/lexers/esoteric.py | 300 + .../site-packages/pygments/lexers/ezhil.py | 76 + .../site-packages/pygments/lexers/factor.py | 363 + .../site-packages/pygments/lexers/fantom.py | 251 + .../site-packages/pygments/lexers/felix.py | 275 + .../site-packages/pygments/lexers/fift.py | 68 + .../pygments/lexers/floscript.py | 81 + .../site-packages/pygments/lexers/forth.py | 178 + .../site-packages/pygments/lexers/fortran.py | 212 + .../site-packages/pygments/lexers/foxpro.py | 427 + .../site-packages/pygments/lexers/freefem.py | 893 ++ .../site-packages/pygments/lexers/func.py | 110 + .../pygments/lexers/functional.py | 21 + .../site-packages/pygments/lexers/futhark.py | 105 + .../pygments/lexers/gcodelexer.py | 35 + .../site-packages/pygments/lexers/gdscript.py | 189 + .../site-packages/pygments/lexers/gleam.py | 74 + .../site-packages/pygments/lexers/go.py | 97 + .../pygments/lexers/grammar_notation.py | 262 + .../site-packages/pygments/lexers/graph.py | 108 + .../site-packages/pygments/lexers/graphics.py | 794 ++ .../site-packages/pygments/lexers/graphql.py | 176 + .../site-packages/pygments/lexers/graphviz.py | 58 + .../site-packages/pygments/lexers/gsql.py | 103 + .../site-packages/pygments/lexers/hare.py | 73 + .../site-packages/pygments/lexers/haskell.py | 866 ++ .../site-packages/pygments/lexers/haxe.py | 935 ++ .../site-packages/pygments/lexers/hdl.py | 466 + .../site-packages/pygments/lexers/hexdump.py | 102 + .../site-packages/pygments/lexers/html.py | 670 ++ .../site-packages/pygments/lexers/idl.py | 284 + .../site-packages/pygments/lexers/igor.py | 435 + .../site-packages/pygments/lexers/inferno.py | 95 + .../pygments/lexers/installers.py | 352 + .../pygments/lexers/int_fiction.py | 1370 +++ .../site-packages/pygments/lexers/iolang.py | 61 + .../site-packages/pygments/lexers/j.py | 151 + .../pygments/lexers/javascript.py | 1591 +++ .../site-packages/pygments/lexers/jmespath.py | 69 + .../site-packages/pygments/lexers/jslt.py | 94 + .../site-packages/pygments/lexers/json5.py | 83 + .../site-packages/pygments/lexers/jsonnet.py | 169 + .../site-packages/pygments/lexers/jsx.py | 100 + .../site-packages/pygments/lexers/julia.py | 294 + .../site-packages/pygments/lexers/jvm.py | 1802 ++++ .../site-packages/pygments/lexers/kuin.py | 332 + .../site-packages/pygments/lexers/kusto.py | 93 + .../site-packages/pygments/lexers/ldap.py | 155 + .../site-packages/pygments/lexers/lean.py | 241 + .../site-packages/pygments/lexers/lilypond.py | 225 + .../site-packages/pygments/lexers/lisp.py | 3146 ++++++ .../pygments/lexers/macaulay2.py | 1814 ++++ .../site-packages/pygments/lexers/make.py | 212 + .../site-packages/pygments/lexers/maple.py | 291 + .../site-packages/pygments/lexers/markup.py | 1654 +++ .../site-packages/pygments/lexers/math.py | 21 + .../site-packages/pygments/lexers/matlab.py | 3307 ++++++ .../site-packages/pygments/lexers/maxima.py | 84 + .../site-packages/pygments/lexers/meson.py | 139 + .../site-packages/pygments/lexers/mime.py | 210 + .../pygments/lexers/minecraft.py | 391 + .../site-packages/pygments/lexers/mips.py | 130 + .../site-packages/pygments/lexers/ml.py | 958 ++ .../site-packages/pygments/lexers/modeling.py | 366 + .../site-packages/pygments/lexers/modula2.py | 1579 +++ .../site-packages/pygments/lexers/mojo.py | 707 ++ .../site-packages/pygments/lexers/monte.py | 203 + .../site-packages/pygments/lexers/mosel.py | 447 + .../site-packages/pygments/lexers/ncl.py | 894 ++ .../site-packages/pygments/lexers/nimrod.py | 199 + .../site-packages/pygments/lexers/nit.py | 63 + .../site-packages/pygments/lexers/nix.py | 144 + .../site-packages/pygments/lexers/numbair.py | 63 + .../site-packages/pygments/lexers/oberon.py | 120 + .../pygments/lexers/objective.py | 513 + .../site-packages/pygments/lexers/ooc.py | 84 + .../site-packages/pygments/lexers/openscad.py | 96 + .../site-packages/pygments/lexers/other.py | 41 + .../site-packages/pygments/lexers/parasail.py | 78 + .../site-packages/pygments/lexers/parsers.py | 798 ++ .../site-packages/pygments/lexers/pascal.py | 644 ++ .../site-packages/pygments/lexers/pawn.py | 202 + .../site-packages/pygments/lexers/pddl.py | 82 + .../site-packages/pygments/lexers/perl.py | 733 ++ .../site-packages/pygments/lexers/phix.py | 363 + .../site-packages/pygments/lexers/php.py | 334 + .../pygments/lexers/pointless.py | 70 + .../site-packages/pygments/lexers/pony.py | 93 + .../site-packages/pygments/lexers/praat.py | 303 + .../site-packages/pygments/lexers/procfile.py | 41 + .../site-packages/pygments/lexers/prolog.py | 318 + .../site-packages/pygments/lexers/promql.py | 176 + .../site-packages/pygments/lexers/prql.py | 251 + .../site-packages/pygments/lexers/ptx.py | 119 + .../site-packages/pygments/lexers/python.py | 1201 +++ .../site-packages/pygments/lexers/q.py | 187 + .../site-packages/pygments/lexers/qlik.py | 117 + .../site-packages/pygments/lexers/qvt.py | 153 + .../site-packages/pygments/lexers/r.py | 196 + .../site-packages/pygments/lexers/rdf.py | 468 + .../site-packages/pygments/lexers/rebol.py | 419 + .../site-packages/pygments/lexers/rego.py | 57 + .../site-packages/pygments/lexers/resource.py | 83 + .../site-packages/pygments/lexers/ride.py | 138 + .../site-packages/pygments/lexers/rita.py | 42 + .../site-packages/pygments/lexers/rnc.py | 66 + .../site-packages/pygments/lexers/roboconf.py | 81 + .../pygments/lexers/robotframework.py | 551 + .../site-packages/pygments/lexers/ruby.py | 518 + .../site-packages/pygments/lexers/rust.py | 222 + .../site-packages/pygments/lexers/sas.py | 227 + .../site-packages/pygments/lexers/savi.py | 171 + .../site-packages/pygments/lexers/scdoc.py | 85 + .../pygments/lexers/scripting.py | 1616 +++ .../site-packages/pygments/lexers/sgf.py | 59 + .../site-packages/pygments/lexers/shell.py | 902 ++ .../site-packages/pygments/lexers/sieve.py | 78 + .../site-packages/pygments/lexers/slash.py | 183 + .../pygments/lexers/smalltalk.py | 194 + .../site-packages/pygments/lexers/smithy.py | 77 + .../site-packages/pygments/lexers/smv.py | 78 + .../site-packages/pygments/lexers/snobol.py | 82 + .../site-packages/pygments/lexers/solidity.py | 87 + .../site-packages/pygments/lexers/soong.py | 78 + .../site-packages/pygments/lexers/sophia.py | 102 + .../site-packages/pygments/lexers/special.py | 122 + .../site-packages/pygments/lexers/spice.py | 70 + .../site-packages/pygments/lexers/sql.py | 1109 +++ .../site-packages/pygments/lexers/srcinfo.py | 62 + .../site-packages/pygments/lexers/stata.py | 170 + .../pygments/lexers/supercollider.py | 94 + .../site-packages/pygments/lexers/tablegen.py | 177 + .../site-packages/pygments/lexers/tact.py | 303 + .../site-packages/pygments/lexers/tal.py | 77 + .../site-packages/pygments/lexers/tcl.py | 148 + .../site-packages/pygments/lexers/teal.py | 88 + .../pygments/lexers/templates.py | 2355 +++++ .../site-packages/pygments/lexers/teraterm.py | 325 + .../site-packages/pygments/lexers/testing.py | 209 + .../site-packages/pygments/lexers/text.py | 27 + .../site-packages/pygments/lexers/textedit.py | 205 + .../site-packages/pygments/lexers/textfmts.py | 436 + .../site-packages/pygments/lexers/theorem.py | 410 + .../site-packages/pygments/lexers/thingsdb.py | 140 + .../site-packages/pygments/lexers/tlb.py | 59 + .../site-packages/pygments/lexers/tls.py | 54 + .../site-packages/pygments/lexers/tnt.py | 270 + .../pygments/lexers/trafficscript.py | 51 + .../pygments/lexers/typoscript.py | 216 + .../site-packages/pygments/lexers/typst.py | 160 + .../site-packages/pygments/lexers/ul4.py | 309 + .../site-packages/pygments/lexers/unicon.py | 413 + .../site-packages/pygments/lexers/urbi.py | 145 + .../site-packages/pygments/lexers/usd.py | 85 + .../site-packages/pygments/lexers/varnish.py | 189 + .../pygments/lexers/verification.py | 113 + .../site-packages/pygments/lexers/verifpal.py | 65 + .../site-packages/pygments/lexers/vip.py | 150 + .../site-packages/pygments/lexers/vyper.py | 140 + .../site-packages/pygments/lexers/web.py | 24 + .../pygments/lexers/webassembly.py | 119 + .../site-packages/pygments/lexers/webidl.py | 298 + .../site-packages/pygments/lexers/webmisc.py | 1006 ++ .../site-packages/pygments/lexers/wgsl.py | 406 + .../site-packages/pygments/lexers/whiley.py | 115 + .../site-packages/pygments/lexers/wowtoc.py | 120 + .../site-packages/pygments/lexers/wren.py | 98 + .../site-packages/pygments/lexers/x10.py | 66 + .../site-packages/pygments/lexers/xorg.py | 38 + .../site-packages/pygments/lexers/yang.py | 103 + .../site-packages/pygments/lexers/yara.py | 69 + .../site-packages/pygments/lexers/zig.py | 125 + .../site-packages/pygments/modeline.py | 43 + .../site-packages/pygments/plugin.py | 72 + .../site-packages/pygments/regexopt.py | 91 + .../site-packages/pygments/scanner.py | 104 + .../site-packages/pygments/sphinxext.py | 247 + .../site-packages/pygments/style.py | 203 + .../site-packages/pygments/styles/__init__.py | 61 + .../site-packages/pygments/styles/_mapping.py | 54 + .../site-packages/pygments/styles/abap.py | 32 + .../site-packages/pygments/styles/algol.py | 65 + .../site-packages/pygments/styles/algol_nu.py | 65 + .../site-packages/pygments/styles/arduino.py | 100 + .../site-packages/pygments/styles/autumn.py | 67 + .../site-packages/pygments/styles/borland.py | 53 + .../site-packages/pygments/styles/bw.py | 52 + .../site-packages/pygments/styles/coffee.py | 80 + .../site-packages/pygments/styles/colorful.py | 83 + .../site-packages/pygments/styles/default.py | 76 + .../site-packages/pygments/styles/dracula.py | 90 + .../site-packages/pygments/styles/emacs.py | 75 + .../site-packages/pygments/styles/friendly.py | 76 + .../pygments/styles/friendly_grayscale.py | 80 + .../site-packages/pygments/styles/fruity.py | 47 + .../site-packages/pygments/styles/gh_dark.py | 113 + .../site-packages/pygments/styles/gruvbox.py | 118 + .../site-packages/pygments/styles/igor.py | 32 + .../site-packages/pygments/styles/inkpot.py | 72 + .../pygments/styles/lightbulb.py | 110 + .../site-packages/pygments/styles/lilypond.py | 62 + .../site-packages/pygments/styles/lovelace.py | 100 + .../site-packages/pygments/styles/manni.py | 79 + .../site-packages/pygments/styles/material.py | 124 + .../site-packages/pygments/styles/monokai.py | 112 + .../site-packages/pygments/styles/murphy.py | 82 + .../site-packages/pygments/styles/native.py | 70 + .../site-packages/pygments/styles/nord.py | 156 + .../site-packages/pygments/styles/onedark.py | 63 + .../pygments/styles/paraiso_dark.py | 124 + .../pygments/styles/paraiso_light.py | 124 + .../site-packages/pygments/styles/pastie.py | 78 + .../site-packages/pygments/styles/perldoc.py | 73 + .../pygments/styles/rainbow_dash.py | 95 + .../site-packages/pygments/styles/rrt.py | 40 + .../site-packages/pygments/styles/sas.py | 46 + .../pygments/styles/solarized.py | 144 + .../pygments/styles/staroffice.py | 31 + .../pygments/styles/stata_dark.py | 42 + .../pygments/styles/stata_light.py | 42 + .../site-packages/pygments/styles/tango.py | 143 + .../site-packages/pygments/styles/trac.py | 66 + .../site-packages/pygments/styles/vim.py | 67 + .../site-packages/pygments/styles/vs.py | 41 + .../site-packages/pygments/styles/xcode.py | 53 + .../site-packages/pygments/styles/zenburn.py | 83 + .../site-packages/pygments/token.py | 214 + .../site-packages/pygments/unistring.py | 153 + .../python3.11/site-packages/pygments/util.py | 324 + .../readme_renderer-44.0.dist-info/INSTALLER | 1 + .../readme_renderer-44.0.dist-info/LICENSE | 174 + .../readme_renderer-44.0.dist-info/METADATA | 70 + .../readme_renderer-44.0.dist-info/RECORD | 19 + .../readme_renderer-44.0.dist-info/WHEEL | 5 + .../top_level.txt | 1 + .../site-packages/readme_renderer/__init__.py | 13 + .../site-packages/readme_renderer/__main__.py | 66 + .../site-packages/readme_renderer/clean.py | 89 + .../site-packages/readme_renderer/markdown.py | 123 + .../site-packages/readme_renderer/py.typed | 0 .../site-packages/readme_renderer/rst.py | 135 + .../site-packages/readme_renderer/txt.py | 24 + .../requests-2.32.5.dist-info/INSTALLER | 1 + .../requests-2.32.5.dist-info/METADATA | 133 + .../requests-2.32.5.dist-info/RECORD | 42 + .../requests-2.32.5.dist-info/WHEEL | 5 + .../licenses/LICENSE | 175 + .../requests-2.32.5.dist-info/top_level.txt | 1 + .../site-packages/requests/__init__.py | 184 + .../site-packages/requests/__version__.py | 14 + .../site-packages/requests/_internal_utils.py | 50 + .../site-packages/requests/adapters.py | 696 ++ .../python3.11/site-packages/requests/api.py | 157 + .../python3.11/site-packages/requests/auth.py | 314 + .../site-packages/requests/certs.py | 17 + .../site-packages/requests/compat.py | 106 + .../site-packages/requests/cookies.py | 561 ++ .../site-packages/requests/exceptions.py | 151 + .../python3.11/site-packages/requests/help.py | 134 + .../site-packages/requests/hooks.py | 33 + .../site-packages/requests/models.py | 1039 ++ .../site-packages/requests/packages.py | 23 + .../site-packages/requests/sessions.py | 831 ++ .../site-packages/requests/status_codes.py | 128 + .../site-packages/requests/structures.py | 99 + .../site-packages/requests/utils.py | 1086 ++ .../AUTHORS.rst | 57 + .../INSTALLER | 1 + .../requests_toolbelt-1.0.0.dist-info/LICENSE | 13 + .../METADATA | 521 + .../requests_toolbelt-1.0.0.dist-info/RECORD | 75 + .../requests_toolbelt-1.0.0.dist-info/WHEEL | 6 + .../top_level.txt | 1 + .../requests_toolbelt/__init__.py | 34 + .../requests_toolbelt/_compat.py | 302 + .../requests_toolbelt/adapters/__init__.py | 15 + .../requests_toolbelt/adapters/appengine.py | 206 + .../requests_toolbelt/adapters/fingerprint.py | 48 + .../adapters/host_header_ssl.py | 43 + .../adapters/socket_options.py | 129 + .../requests_toolbelt/adapters/source.py | 67 + .../requests_toolbelt/adapters/ssl.py | 66 + .../requests_toolbelt/adapters/x509.py | 196 + .../requests_toolbelt/auth/__init__.py | 0 .../auth/_digest_auth_compat.py | 29 + .../requests_toolbelt/auth/guess.py | 146 + .../requests_toolbelt/auth/handler.py | 142 + .../auth/http_proxy_digest.py | 103 + .../requests_toolbelt/cookies/__init__.py | 0 .../requests_toolbelt/cookies/forgetful.py | 7 + .../downloadutils/__init__.py | 0 .../requests_toolbelt/downloadutils/stream.py | 176 + .../requests_toolbelt/downloadutils/tee.py | 123 + .../requests_toolbelt/exceptions.py | 25 + .../requests_toolbelt/multipart/__init__.py | 31 + .../requests_toolbelt/multipart/decoder.py | 156 + .../requests_toolbelt/multipart/encoder.py | 655 ++ .../requests_toolbelt/sessions.py | 89 + .../requests_toolbelt/streaming_iterator.py | 116 + .../requests_toolbelt/threaded/__init__.py | 97 + .../requests_toolbelt/threaded/pool.py | 211 + .../requests_toolbelt/threaded/thread.py | 53 + .../requests_toolbelt/utils/__init__.py | 0 .../requests_toolbelt/utils/deprecated.py | 91 + .../requests_toolbelt/utils/dump.py | 198 + .../requests_toolbelt/utils/formdata.py | 108 + .../requests_toolbelt/utils/user_agent.py | 143 + .../rfc3986-2.0.0.dist-info/INSTALLER | 1 + .../rfc3986-2.0.0.dist-info/LICENSE | 13 + .../rfc3986-2.0.0.dist-info/METADATA | 234 + .../rfc3986-2.0.0.dist-info/RECORD | 32 + .../rfc3986-2.0.0.dist-info/WHEEL | 6 + .../rfc3986-2.0.0.dist-info/top_level.txt | 1 + .../site-packages/rfc3986/__init__.py | 53 + .../site-packages/rfc3986/_mixin.py | 373 + .../site-packages/rfc3986/abnf_regexp.py | 275 + .../python3.11/site-packages/rfc3986/api.py | 104 + .../site-packages/rfc3986/builder.py | 388 + .../site-packages/rfc3986/compat.py | 59 + .../site-packages/rfc3986/exceptions.py | 120 + .../python3.11/site-packages/rfc3986/iri.py | 161 + .../python3.11/site-packages/rfc3986/misc.py | 131 + .../site-packages/rfc3986/normalizers.py | 171 + .../site-packages/rfc3986/parseresult.py | 474 + .../python3.11/site-packages/rfc3986/uri.py | 160 + .../site-packages/rfc3986/validators.py | 440 + .../rich-14.2.0.dist-info/INSTALLER | 1 + .../rich-14.2.0.dist-info/LICENSE | 19 + .../rich-14.2.0.dist-info/METADATA | 473 + .../rich-14.2.0.dist-info/RECORD | 162 + .../site-packages/rich-14.2.0.dist-info/WHEEL | 4 + .../python3.11/site-packages/rich/__init__.py | 177 + .../python3.11/site-packages/rich/__main__.py | 245 + .../site-packages/rich/_cell_widths.py | 454 + .../site-packages/rich/_emoji_codes.py | 3610 +++++++ .../site-packages/rich/_emoji_replace.py | 32 + .../site-packages/rich/_export_format.py | 76 + .../site-packages/rich/_extension.py | 10 + .../python3.11/site-packages/rich/_fileno.py | 24 + .../python3.11/site-packages/rich/_inspect.py | 268 + .../site-packages/rich/_log_render.py | 94 + .../python3.11/site-packages/rich/_loop.py | 43 + .../site-packages/rich/_null_file.py | 69 + .../site-packages/rich/_palettes.py | 309 + .../python3.11/site-packages/rich/_pick.py | 17 + .../python3.11/site-packages/rich/_ratio.py | 153 + .../site-packages/rich/_spinners.py | 482 + .../python3.11/site-packages/rich/_stack.py | 16 + .../python3.11/site-packages/rich/_timer.py | 19 + .../site-packages/rich/_win32_console.py | 661 ++ .../python3.11/site-packages/rich/_windows.py | 71 + .../site-packages/rich/_windows_renderer.py | 56 + .../python3.11/site-packages/rich/_wrap.py | 93 + .../lib/python3.11/site-packages/rich/abc.py | 33 + .../python3.11/site-packages/rich/align.py | 306 + .../lib/python3.11/site-packages/rich/ansi.py | 241 + .../lib/python3.11/site-packages/rich/bar.py | 93 + .../lib/python3.11/site-packages/rich/box.py | 474 + .../python3.11/site-packages/rich/cells.py | 174 + .../python3.11/site-packages/rich/color.py | 621 ++ .../site-packages/rich/color_triplet.py | 38 + .../python3.11/site-packages/rich/columns.py | 187 + .../python3.11/site-packages/rich/console.py | 2680 +++++ .../site-packages/rich/constrain.py | 37 + .../site-packages/rich/containers.py | 167 + .../python3.11/site-packages/rich/control.py | 219 + .../site-packages/rich/default_styles.py | 193 + .../python3.11/site-packages/rich/diagnose.py | 39 + .../python3.11/site-packages/rich/emoji.py | 91 + .../python3.11/site-packages/rich/errors.py | 34 + .../site-packages/rich/file_proxy.py | 57 + .../python3.11/site-packages/rich/filesize.py | 88 + .../site-packages/rich/highlighter.py | 232 + .../lib/python3.11/site-packages/rich/json.py | 139 + .../python3.11/site-packages/rich/jupyter.py | 101 + .../python3.11/site-packages/rich/layout.py | 442 + .../lib/python3.11/site-packages/rich/live.py | 400 + .../site-packages/rich/live_render.py | 106 + .../python3.11/site-packages/rich/logging.py | 297 + .../python3.11/site-packages/rich/markdown.py | 779 ++ .../python3.11/site-packages/rich/markup.py | 251 + .../python3.11/site-packages/rich/measure.py | 151 + .../python3.11/site-packages/rich/padding.py | 141 + .../python3.11/site-packages/rich/pager.py | 34 + .../python3.11/site-packages/rich/palette.py | 100 + .../python3.11/site-packages/rich/panel.py | 317 + .../python3.11/site-packages/rich/pretty.py | 1016 ++ .../python3.11/site-packages/rich/progress.py | 1715 ++++ .../site-packages/rich/progress_bar.py | 223 + .../python3.11/site-packages/rich/prompt.py | 400 + .../python3.11/site-packages/rich/protocol.py | 42 + .../python3.11/site-packages/rich/py.typed | 0 .../python3.11/site-packages/rich/region.py | 10 + .../lib/python3.11/site-packages/rich/repr.py | 149 + .../lib/python3.11/site-packages/rich/rule.py | 130 + .../python3.11/site-packages/rich/scope.py | 86 + .../python3.11/site-packages/rich/screen.py | 54 + .../python3.11/site-packages/rich/segment.py | 752 ++ .../python3.11/site-packages/rich/spinner.py | 132 + .../python3.11/site-packages/rich/status.py | 131 + .../python3.11/site-packages/rich/style.py | 792 ++ .../python3.11/site-packages/rich/styled.py | 42 + .../python3.11/site-packages/rich/syntax.py | 985 ++ .../python3.11/site-packages/rich/table.py | 1006 ++ .../site-packages/rich/terminal_theme.py | 153 + .../lib/python3.11/site-packages/rich/text.py | 1361 +++ .../python3.11/site-packages/rich/theme.py | 115 + .../python3.11/site-packages/rich/themes.py | 5 + .../site-packages/rich/traceback.py | 899 ++ .../lib/python3.11/site-packages/rich/tree.py | 257 + .../setuptools-65.5.0.dist-info/INSTALLER | 1 + .../setuptools-65.5.0.dist-info/LICENSE | 19 + .../setuptools-65.5.0.dist-info/METADATA | 144 + .../setuptools-65.5.0.dist-info/RECORD | 466 + .../setuptools-65.5.0.dist-info/REQUESTED | 0 .../setuptools-65.5.0.dist-info/WHEEL | 5 + .../entry_points.txt | 57 + .../setuptools-65.5.0.dist-info/top_level.txt | 3 + .../site-packages/setuptools/__init__.py | 247 + .../setuptools/_deprecation_warning.py | 7 + .../setuptools/_distutils/__init__.py | 24 + .../setuptools/_distutils/_collections.py | 56 + .../setuptools/_distutils/_functools.py | 20 + .../setuptools/_distutils/_macos_compat.py | 12 + .../setuptools/_distutils/_msvccompiler.py | 572 ++ .../setuptools/_distutils/archive_util.py | 280 + .../setuptools/_distutils/bcppcompiler.py | 408 + .../setuptools/_distutils/ccompiler.py | 1220 +++ .../setuptools/_distutils/cmd.py | 436 + .../setuptools/_distutils/command/__init__.py | 25 + .../_distutils/command/_framework_compat.py | 55 + .../setuptools/_distutils/command/bdist.py | 157 + .../_distutils/command/bdist_dumb.py | 144 + .../_distutils/command/bdist_rpm.py | 615 ++ .../setuptools/_distutils/command/build.py | 153 + .../_distutils/command/build_clib.py | 208 + .../_distutils/command/build_ext.py | 787 ++ .../setuptools/_distutils/command/build_py.py | 407 + .../_distutils/command/build_scripts.py | 173 + .../setuptools/_distutils/command/check.py | 151 + .../setuptools/_distutils/command/clean.py | 76 + .../setuptools/_distutils/command/config.py | 377 + .../setuptools/_distutils/command/install.py | 814 ++ .../_distutils/command/install_data.py | 84 + .../_distutils/command/install_egg_info.py | 91 + .../_distutils/command/install_headers.py | 45 + .../_distutils/command/install_lib.py | 238 + .../_distutils/command/install_scripts.py | 61 + .../_distutils/command/py37compat.py | 31 + .../setuptools/_distutils/command/register.py | 319 + .../setuptools/_distutils/command/sdist.py | 531 + .../setuptools/_distutils/command/upload.py | 205 + .../setuptools/_distutils/config.py | 139 + .../setuptools/_distutils/core.py | 291 + .../setuptools/_distutils/cygwinccompiler.py | 364 + .../setuptools/_distutils/debug.py | 5 + .../setuptools/_distutils/dep_util.py | 96 + .../setuptools/_distutils/dir_util.py | 243 + .../setuptools/_distutils/errors.py | 127 + .../setuptools/_distutils/extension.py | 248 + .../setuptools/_distutils/fancy_getopt.py | 470 + .../setuptools/_distutils/file_util.py | 249 + .../setuptools/_distutils/filelist.py | 371 + .../setuptools/_distutils/log.py | 80 + .../setuptools/_distutils/msvc9compiler.py | 832 ++ .../setuptools/_distutils/msvccompiler.py | 695 ++ .../setuptools/_distutils/py38compat.py | 8 + .../setuptools/_distutils/py39compat.py | 22 + .../setuptools/_distutils/spawn.py | 109 + .../setuptools/_distutils/sysconfig.py | 558 ++ .../setuptools/_distutils/text_file.py | 287 + .../setuptools/_distutils/unixccompiler.py | 401 + .../setuptools/_distutils/util.py | 513 + .../setuptools/_distutils/version.py | 358 + .../setuptools/_distutils/versionpredicate.py | 175 + .../site-packages/setuptools/_entry_points.py | 86 + .../site-packages/setuptools/_imp.py | 82 + .../site-packages/setuptools/_importlib.py | 47 + .../site-packages/setuptools/_itertools.py | 23 + .../site-packages/setuptools/_path.py | 29 + .../site-packages/setuptools/_reqs.py | 19 + .../setuptools/_vendor/__init__.py | 0 .../_vendor/importlib_metadata/__init__.py | 1047 ++ .../_vendor/importlib_metadata/_adapters.py | 68 + .../importlib_metadata/_collections.py | 30 + .../_vendor/importlib_metadata/_compat.py | 71 + .../_vendor/importlib_metadata/_functools.py | 104 + .../_vendor/importlib_metadata/_itertools.py | 73 + .../_vendor/importlib_metadata/_meta.py | 48 + .../_vendor/importlib_metadata/_text.py | 99 + .../_vendor/importlib_resources/__init__.py | 36 + .../_vendor/importlib_resources/_adapters.py | 170 + .../_vendor/importlib_resources/_common.py | 104 + .../_vendor/importlib_resources/_compat.py | 98 + .../_vendor/importlib_resources/_itertools.py | 35 + .../_vendor/importlib_resources/_legacy.py | 121 + .../_vendor/importlib_resources/abc.py | 137 + .../_vendor/importlib_resources/readers.py | 122 + .../_vendor/importlib_resources/simple.py | 116 + .../setuptools/_vendor/jaraco/__init__.py | 0 .../setuptools/_vendor/jaraco/context.py | 213 + .../setuptools/_vendor/jaraco/functools.py | 525 + .../_vendor/jaraco/text/__init__.py | 599 ++ .../_vendor/more_itertools/__init__.py | 4 + .../setuptools/_vendor/more_itertools/more.py | 3824 +++++++ .../_vendor/more_itertools/recipes.py | 620 ++ .../setuptools/_vendor/ordered_set.py | 488 + .../setuptools/_vendor/packaging/__about__.py | 26 + .../setuptools/_vendor/packaging/__init__.py | 25 + .../_vendor/packaging/_manylinux.py | 301 + .../_vendor/packaging/_musllinux.py | 136 + .../_vendor/packaging/_structures.py | 61 + .../setuptools/_vendor/packaging/markers.py | 304 + .../_vendor/packaging/requirements.py | 146 + .../_vendor/packaging/specifiers.py | 802 ++ .../setuptools/_vendor/packaging/tags.py | 487 + .../setuptools/_vendor/packaging/utils.py | 136 + .../setuptools/_vendor/packaging/version.py | 504 + .../setuptools/_vendor/pyparsing/__init__.py | 331 + .../setuptools/_vendor/pyparsing/actions.py | 207 + .../setuptools/_vendor/pyparsing/common.py | 424 + .../setuptools/_vendor/pyparsing/core.py | 5814 +++++++++++ .../_vendor/pyparsing/diagram/__init__.py | 642 ++ .../_vendor/pyparsing/exceptions.py | 267 + .../setuptools/_vendor/pyparsing/helpers.py | 1088 ++ .../setuptools/_vendor/pyparsing/results.py | 760 ++ .../setuptools/_vendor/pyparsing/testing.py | 331 + .../setuptools/_vendor/pyparsing/unicode.py | 352 + .../setuptools/_vendor/pyparsing/util.py | 235 + .../setuptools/_vendor/tomli/__init__.py | 11 + .../setuptools/_vendor/tomli/_parser.py | 691 ++ .../setuptools/_vendor/tomli/_re.py | 107 + .../setuptools/_vendor/tomli/_types.py | 10 + .../setuptools/_vendor/typing_extensions.py | 2296 +++++ .../site-packages/setuptools/_vendor/zipp.py | 329 + .../site-packages/setuptools/archive_util.py | 213 + .../site-packages/setuptools/build_meta.py | 511 + .../site-packages/setuptools/cli-32.exe | Bin 0 -> 65536 bytes .../site-packages/setuptools/cli-64.exe | Bin 0 -> 74752 bytes .../site-packages/setuptools/cli-arm64.exe | Bin 0 -> 137216 bytes .../site-packages/setuptools/cli.exe | Bin 0 -> 65536 bytes .../setuptools/command/__init__.py | 12 + .../site-packages/setuptools/command/alias.py | 78 + .../setuptools/command/bdist_egg.py | 457 + .../setuptools/command/bdist_rpm.py | 40 + .../site-packages/setuptools/command/build.py | 146 + .../setuptools/command/build_clib.py | 101 + .../setuptools/command/build_ext.py | 383 + .../setuptools/command/build_py.py | 368 + .../setuptools/command/develop.py | 193 + .../setuptools/command/easy_install.py | 2312 +++++ .../setuptools/command/editable_wheel.py | 844 ++ .../setuptools/command/egg_info.py | 763 ++ .../setuptools/command/install.py | 139 + .../setuptools/command/install_egg_info.py | 63 + .../setuptools/command/install_lib.py | 122 + .../setuptools/command/install_scripts.py | 70 + .../setuptools/command/launcher manifest.xml | 15 + .../setuptools/command/py36compat.py | 134 + .../setuptools/command/register.py | 18 + .../setuptools/command/rotate.py | 64 + .../setuptools/command/saveopts.py | 22 + .../site-packages/setuptools/command/sdist.py | 210 + .../setuptools/command/setopt.py | 149 + .../site-packages/setuptools/command/test.py | 251 + .../setuptools/command/upload.py | 17 + .../setuptools/command/upload_docs.py | 213 + .../setuptools/config/__init__.py | 35 + .../setuptools/config/_apply_pyprojecttoml.py | 377 + .../config/_validate_pyproject/__init__.py | 34 + .../_validate_pyproject/error_reporting.py | 318 + .../_validate_pyproject/extra_validations.py | 36 + .../fastjsonschema_exceptions.py | 51 + .../fastjsonschema_validations.py | 1035 ++ .../config/_validate_pyproject/formats.py | 259 + .../site-packages/setuptools/config/expand.py | 462 + .../setuptools/config/pyprojecttoml.py | 493 + .../setuptools/config/setupcfg.py | 762 ++ .../site-packages/setuptools/dep_util.py | 25 + .../site-packages/setuptools/depends.py | 176 + .../site-packages/setuptools/discovery.py | 600 ++ .../site-packages/setuptools/errors.py | 58 + .../site-packages/setuptools/extension.py | 148 + .../setuptools/extern/__init__.py | 76 + .../site-packages/setuptools/glob.py | 167 + .../site-packages/setuptools/gui-32.exe | Bin 0 -> 65536 bytes .../site-packages/setuptools/gui-64.exe | Bin 0 -> 75264 bytes .../site-packages/setuptools/gui-arm64.exe | Bin 0 -> 137728 bytes .../site-packages/setuptools/gui.exe | Bin 0 -> 65536 bytes .../site-packages/setuptools/installer.py | 104 + .../site-packages/setuptools/launch.py | 36 + .../site-packages/setuptools/logging.py | 36 + .../site-packages/setuptools/monkey.py | 165 + .../site-packages/setuptools/msvc.py | 1703 ++++ .../site-packages/setuptools/namespaces.py | 107 + .../site-packages/setuptools/package_index.py | 1126 +++ .../site-packages/setuptools/py34compat.py | 13 + .../site-packages/setuptools/sandbox.py | 530 + .../setuptools/script (dev).tmpl | 6 + .../site-packages/setuptools/script.tmpl | 3 + .../site-packages/setuptools/unicode_utils.py | 42 + .../site-packages/setuptools/version.py | 6 + .../site-packages/setuptools/wheel.py | 222 + .../setuptools/windows_support.py | 29 + .../twine-6.2.0.dist-info/INSTALLER | 1 + .../twine-6.2.0.dist-info/METADATA | 91 + .../twine-6.2.0.dist-info/RECORD | 42 + .../twine-6.2.0.dist-info/REQUESTED | 0 .../site-packages/twine-6.2.0.dist-info/WHEEL | 5 + .../twine-6.2.0.dist-info/entry_points.txt | 7 + .../twine-6.2.0.dist-info/licenses/LICENSE | 174 + .../twine-6.2.0.dist-info/top_level.txt | 1 + .../site-packages/twine/__init__.py | 54 + .../site-packages/twine/__main__.py | 54 + .../python3.11/site-packages/twine/auth.py | 307 + .../lib/python3.11/site-packages/twine/cli.py | 139 + .../site-packages/twine/commands/__init__.py | 93 + .../site-packages/twine/commands/check.py | 195 + .../site-packages/twine/commands/register.py | 87 + .../site-packages/twine/commands/upload.py | 253 + .../site-packages/twine/exceptions.py | 175 + .../python3.11/site-packages/twine/package.py | 403 + .../python3.11/site-packages/twine/py.typed | 0 .../site-packages/twine/repository.py | 246 + .../python3.11/site-packages/twine/sdist.py | 83 + .../site-packages/twine/settings.py | 360 + .../python3.11/site-packages/twine/utils.py | 387 + .../python3.11/site-packages/twine/wheel.py | 81 + .../urllib3-2.6.3.dist-info/INSTALLER | 1 + .../urllib3-2.6.3.dist-info/METADATA | 164 + .../urllib3-2.6.3.dist-info/RECORD | 79 + .../urllib3-2.6.3.dist-info/WHEEL | 4 + .../licenses/LICENSE.txt | 21 + .../site-packages/urllib3/__init__.py | 211 + .../site-packages/urllib3/_base_connection.py | 165 + .../site-packages/urllib3/_collections.py | 487 + .../site-packages/urllib3/_request_methods.py | 278 + .../site-packages/urllib3/_version.py | 34 + .../site-packages/urllib3/connection.py | 1099 ++ .../site-packages/urllib3/connectionpool.py | 1178 +++ .../site-packages/urllib3/contrib/__init__.py | 0 .../urllib3/contrib/emscripten/__init__.py | 17 + .../urllib3/contrib/emscripten/connection.py | 260 + .../emscripten/emscripten_fetch_worker.js | 110 + .../urllib3/contrib/emscripten/fetch.py | 726 ++ .../urllib3/contrib/emscripten/request.py | 22 + .../urllib3/contrib/emscripten/response.py | 277 + .../urllib3/contrib/pyopenssl.py | 564 ++ .../site-packages/urllib3/contrib/socks.py | 228 + .../site-packages/urllib3/exceptions.py | 335 + .../site-packages/urllib3/fields.py | 341 + .../site-packages/urllib3/filepost.py | 89 + .../site-packages/urllib3/http2/__init__.py | 53 + .../site-packages/urllib3/http2/connection.py | 356 + .../site-packages/urllib3/http2/probe.py | 87 + .../site-packages/urllib3/poolmanager.py | 651 ++ .../python3.11/site-packages/urllib3/py.typed | 2 + .../site-packages/urllib3/response.py | 1480 +++ .../site-packages/urllib3/util/__init__.py | 42 + .../site-packages/urllib3/util/connection.py | 137 + .../site-packages/urllib3/util/proxy.py | 43 + .../site-packages/urllib3/util/request.py | 263 + .../site-packages/urllib3/util/response.py | 101 + .../site-packages/urllib3/util/retry.py | 549 + .../site-packages/urllib3/util/ssl_.py | 527 + .../urllib3/util/ssl_match_hostname.py | 159 + .../urllib3/util/ssltransport.py | 271 + .../site-packages/urllib3/util/timeout.py | 275 + .../site-packages/urllib3/util/url.py | 469 + .../site-packages/urllib3/util/util.py | 42 + .../site-packages/urllib3/util/wait.py | 124 + .../zipp-3.23.0.dist-info/INSTALLER | 1 + .../zipp-3.23.0.dist-info/METADATA | 106 + .../zipp-3.23.0.dist-info/RECORD | 20 + .../site-packages/zipp-3.23.0.dist-info/WHEEL | 5 + .../zipp-3.23.0.dist-info/licenses/LICENSE | 18 + .../zipp-3.23.0.dist-info/top_level.txt | 1 + .../python3.11/site-packages/zipp/__init__.py | 456 + .../site-packages/zipp/_functools.py | 20 + .../site-packages/zipp/compat/__init__.py | 0 .../site-packages/zipp/compat/overlay.py | 37 + .../site-packages/zipp/compat/py310.py | 13 + .../site-packages/zipp/compat/py313.py | 34 + .../lib/python3.11/site-packages/zipp/glob.py | 116 + d2l-0.17.6/.venv/pyvenv.cfg | 5 + d2l-0.17.6/LICENSE | 152 + d2l-0.17.6/LICENSE-SAMPLECODE | 14 + d2l-0.17.6/LICENSE-SUMMARY | 5 + d2l-0.17.6/PKG-INFO | 16 + d2l-0.17.6/README.md | 100 + d2l-0.17.6/d2l/__init__.py | 12 + d2l-0.17.6/d2l/mxnet.py | 2852 ++++++ d2l-0.17.6/d2l/paddle.py | 2680 +++++ d2l-0.17.6/d2l/tensorflow.py | 1526 +++ d2l-0.17.6/d2l/torch.py | 2729 +++++ d2l-0.17.6/setup.cfg | 4 + d2l-0.17.6/setup.py | 24 + 1882 files changed, 572208 insertions(+) create mode 100644 d2l-0.17.6/.venv/bin/Activate.ps1 create mode 100644 d2l-0.17.6/.venv/bin/activate create mode 100644 d2l-0.17.6/.venv/bin/activate.csh create mode 100644 d2l-0.17.6/.venv/bin/activate.fish create mode 100755 d2l-0.17.6/.venv/bin/docutils create mode 100755 d2l-0.17.6/.venv/bin/keyring create mode 100755 d2l-0.17.6/.venv/bin/markdown-it create mode 100755 d2l-0.17.6/.venv/bin/normalizer create mode 100755 d2l-0.17.6/.venv/bin/pip create mode 100755 d2l-0.17.6/.venv/bin/pip3 create mode 100755 d2l-0.17.6/.venv/bin/pip3.11 create mode 100755 d2l-0.17.6/.venv/bin/pygmentize create mode 120000 d2l-0.17.6/.venv/bin/python create mode 120000 d2l-0.17.6/.venv/bin/python3 create mode 120000 d2l-0.17.6/.venv/bin/python3.11 create mode 100755 d2l-0.17.6/.venv/bin/rst2html create mode 100755 d2l-0.17.6/.venv/bin/rst2html4 create mode 100755 d2l-0.17.6/.venv/bin/rst2html5 create mode 100755 d2l-0.17.6/.venv/bin/rst2latex create mode 100755 d2l-0.17.6/.venv/bin/rst2man create mode 100755 d2l-0.17.6/.venv/bin/rst2odt create mode 100755 d2l-0.17.6/.venv/bin/rst2pseudoxml create mode 100755 d2l-0.17.6/.venv/bin/rst2s5 create mode 100755 d2l-0.17.6/.venv/bin/rst2xetex create mode 100755 d2l-0.17.6/.venv/bin/rst2xml create mode 100755 d2l-0.17.6/.venv/bin/twine create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/_distutils_hack/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/_distutils_hack/override.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/backports.tarfile-1.2.0.dist-info/INSTALLER create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/backports.tarfile-1.2.0.dist-info/LICENSE create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/backports.tarfile-1.2.0.dist-info/METADATA create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/backports.tarfile-1.2.0.dist-info/RECORD create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/backports.tarfile-1.2.0.dist-info/WHEEL create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/backports.tarfile-1.2.0.dist-info/top_level.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/backports/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/backports/tarfile/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/backports/tarfile/__main__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/backports/tarfile/compat/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/backports/tarfile/compat/py38.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/certifi-2026.1.4.dist-info/INSTALLER create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/certifi-2026.1.4.dist-info/METADATA create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/certifi-2026.1.4.dist-info/RECORD create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/certifi-2026.1.4.dist-info/WHEEL create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/certifi-2026.1.4.dist-info/licenses/LICENSE create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/certifi-2026.1.4.dist-info/top_level.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/certifi/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/certifi/__main__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/certifi/cacert.pem create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/certifi/core.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/certifi/py.typed create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer-3.4.4.dist-info/INSTALLER create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer-3.4.4.dist-info/METADATA create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer-3.4.4.dist-info/RECORD create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer-3.4.4.dist-info/WHEEL create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer-3.4.4.dist-info/entry_points.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer-3.4.4.dist-info/licenses/LICENSE create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer-3.4.4.dist-info/top_level.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer/__main__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer/api.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer/cd.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer/cli/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer/cli/__main__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer/constant.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer/legacy.py create mode 100755 d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer/md.cpython-311-darwin.so create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer/md.py create mode 100755 d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer/md__mypyc.cpython-311-darwin.so create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer/models.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer/py.typed create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer/utils.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer/version.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils-0.22.4.dist-info/INSTALLER create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils-0.22.4.dist-info/METADATA create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils-0.22.4.dist-info/RECORD create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils-0.22.4.dist-info/WHEEL create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils-0.22.4.dist-info/entry_points.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils-0.22.4.dist-info/licenses/COPYING.rst create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils-0.22.4.dist-info/licenses/licenses/BSD-0-Clause.rst create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils-0.22.4.dist-info/licenses/licenses/BSD-2-Clause.rst create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils-0.22.4.dist-info/licenses/licenses/gpl-3-0.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/__init__.py create mode 100755 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/__main__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/core.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/docutils.conf create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/examples.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/frontend.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/io.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/languages/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/languages/af.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/languages/ar.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/languages/ca.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/languages/cs.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/languages/da.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/languages/de.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/languages/en.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/languages/eo.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/languages/es.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/languages/fa.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/languages/fi.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/languages/fr.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/languages/gl.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/languages/he.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/languages/it.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/languages/ja.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/languages/ka.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/languages/ko.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/languages/lt.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/languages/lv.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/languages/nl.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/languages/pl.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/languages/pt_br.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/languages/ru.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/languages/sk.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/languages/sv.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/languages/uk.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/languages/zh_cn.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/languages/zh_tw.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/nodes.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/commonmark_wrapper.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/docutils_xml.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/null.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/recommonmark_wrapper.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/directives/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/directives/admonitions.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/directives/body.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/directives/html.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/directives/images.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/directives/misc.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/directives/parts.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/directives/references.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/directives/tables.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/README.rst create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/html-roles.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/isoamsa.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/isoamsb.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/isoamsc.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/isoamsn.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/isoamso.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/isoamsr.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/isobox.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/isocyr1.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/isocyr2.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/isodia.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/isogrk1.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/isogrk2.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/isogrk3.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/isogrk4-wide.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/isogrk4.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/isolat1.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/isolat2.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/isomfrk-wide.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/isomfrk.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/isomopf-wide.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/isomopf.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/isomscr-wide.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/isomscr.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/isonum.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/isopub.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/isotech.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/mmlalias.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/mmlextra-wide.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/mmlextra.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/s5defs.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/xhtml1-lat1.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/xhtml1-special.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/xhtml1-symbol.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/languages/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/languages/af.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/languages/ar.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/languages/ca.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/languages/cs.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/languages/da.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/languages/de.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/languages/en.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/languages/eo.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/languages/es.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/languages/fa.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/languages/fi.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/languages/fr.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/languages/gl.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/languages/he.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/languages/it.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/languages/ja.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/languages/ka.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/languages/ko.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/languages/lt.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/languages/lv.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/languages/nl.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/languages/pl.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/languages/pt_br.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/languages/ru.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/languages/sk.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/languages/sv.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/languages/uk.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/languages/zh_cn.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/languages/zh_tw.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/roles.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/states.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/parsers/rst/tableparser.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/readers/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/readers/doctree.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/readers/pep.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/readers/standalone.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/statemachine.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/transforms/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/transforms/components.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/transforms/frontmatter.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/transforms/misc.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/transforms/parts.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/transforms/peps.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/transforms/references.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/transforms/universal.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/transforms/writer_aux.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/utils/__init__.py create mode 100755 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/utils/_roman_numerals.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/utils/_typing.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/utils/code_analyzer.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/utils/math/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/utils/math/latex2mathml.py create mode 100755 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/utils/math/math2html.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/utils/math/mathalphabet2unichar.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/utils/math/mathml_elements.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/utils/math/tex2mathml_extern.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/utils/math/tex2unichar.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/utils/math/unichar2tex.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/utils/punctuation_chars.py create mode 100755 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/utils/smartquotes.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/utils/urischemes.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/writers/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/writers/_html_base.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/writers/docutils_xml.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/writers/html4css1/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/writers/html4css1/html4css1.css create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/writers/html4css1/template.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/writers/html5_polyglot/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/writers/html5_polyglot/italic-field-names.css create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/writers/html5_polyglot/math.css create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/writers/html5_polyglot/minimal.css create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/writers/html5_polyglot/plain.css create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/writers/html5_polyglot/responsive.css create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/writers/html5_polyglot/template.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/writers/html5_polyglot/tuftig.css create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/writers/latex2e/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/writers/latex2e/default.tex create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/writers/latex2e/docutils.sty create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/writers/latex2e/titlepage.tex create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/writers/latex2e/titlingpage.tex create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/writers/latex2e/xelatex.tex create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/writers/manpage.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/writers/null.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/writers/odf_odt/__init__.py create mode 100755 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/writers/odf_odt/prepstyles.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/writers/odf_odt/pygmentsformatter.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/writers/odf_odt/styles.odt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/writers/pep_html/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/writers/pep_html/pep.css create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/writers/pep_html/template.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/writers/pseudoxml.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/writers/s5_html/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/writers/s5_html/themes/README.rst create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/writers/s5_html/themes/big-black/__base__ create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/writers/s5_html/themes/big-black/framing.css create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/writers/s5_html/themes/big-black/pretty.css create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/writers/s5_html/themes/big-white/framing.css create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/writers/s5_html/themes/big-white/pretty.css create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/writers/s5_html/themes/default/framing.css create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/writers/s5_html/themes/default/opera.css create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/writers/s5_html/themes/default/outline.css create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/writers/s5_html/themes/default/pretty.css create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/writers/s5_html/themes/default/print.css create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/writers/s5_html/themes/default/s5-core.css create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/writers/s5_html/themes/default/slides.css create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/writers/s5_html/themes/default/slides.js create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/writers/s5_html/themes/medium-black/__base__ create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/writers/s5_html/themes/medium-black/pretty.css create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/writers/s5_html/themes/medium-white/framing.css create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/writers/s5_html/themes/medium-white/pretty.css create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/writers/s5_html/themes/small-black/__base__ create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/writers/s5_html/themes/small-black/pretty.css create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/writers/s5_html/themes/small-white/framing.css create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/writers/s5_html/themes/small-white/pretty.css create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/writers/xetex/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/id-1.5.0.dist-info/INSTALLER create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/id-1.5.0.dist-info/LICENSE create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/id-1.5.0.dist-info/METADATA create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/id-1.5.0.dist-info/RECORD create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/id-1.5.0.dist-info/WHEEL create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/id-1.5.0.dist-info/entry_points.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/id/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/id/__main__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/id/_internal/oidc/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/id/_internal/oidc/ambient.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/idna-3.11.dist-info/INSTALLER create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/idna-3.11.dist-info/METADATA create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/idna-3.11.dist-info/RECORD create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/idna-3.11.dist-info/WHEEL create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/idna-3.11.dist-info/licenses/LICENSE.md create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/idna/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/idna/codec.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/idna/compat.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/idna/core.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/idna/idnadata.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/idna/intranges.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/idna/package_data.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/idna/py.typed create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/idna/uts46data.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/importlib_metadata-8.7.1.dist-info/INSTALLER create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/importlib_metadata-8.7.1.dist-info/METADATA create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/importlib_metadata-8.7.1.dist-info/RECORD create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/importlib_metadata-8.7.1.dist-info/WHEEL create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/importlib_metadata-8.7.1.dist-info/licenses/LICENSE create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/importlib_metadata-8.7.1.dist-info/top_level.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/importlib_metadata/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/importlib_metadata/_adapters.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/importlib_metadata/_collections.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/importlib_metadata/_compat.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/importlib_metadata/_functools.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/importlib_metadata/_itertools.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/importlib_metadata/_meta.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/importlib_metadata/_text.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/importlib_metadata/_typing.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/importlib_metadata/compat/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/importlib_metadata/compat/py311.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/importlib_metadata/compat/py39.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/importlib_metadata/diagnose.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/importlib_metadata/py.typed create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/jaraco.classes-3.4.0.dist-info/INSTALLER create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/jaraco.classes-3.4.0.dist-info/LICENSE create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/jaraco.classes-3.4.0.dist-info/METADATA create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/jaraco.classes-3.4.0.dist-info/RECORD create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/jaraco.classes-3.4.0.dist-info/WHEEL create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/jaraco.classes-3.4.0.dist-info/top_level.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/jaraco/classes/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/jaraco/classes/ancestry.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/jaraco/classes/meta.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/jaraco/classes/properties.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/jaraco/classes/py.typed create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/jaraco/context/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/jaraco/context/py.typed create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/jaraco/functools/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/jaraco/functools/__init__.pyi create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/jaraco/functools/py.typed create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/jaraco_context-6.1.0.dist-info/INSTALLER create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/jaraco_context-6.1.0.dist-info/METADATA create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/jaraco_context-6.1.0.dist-info/RECORD create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/jaraco_context-6.1.0.dist-info/WHEEL create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/jaraco_context-6.1.0.dist-info/licenses/LICENSE create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/jaraco_context-6.1.0.dist-info/top_level.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/jaraco_functools-4.4.0.dist-info/INSTALLER create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/jaraco_functools-4.4.0.dist-info/METADATA create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/jaraco_functools-4.4.0.dist-info/RECORD create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/jaraco_functools-4.4.0.dist-info/WHEEL create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/jaraco_functools-4.4.0.dist-info/licenses/LICENSE create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/jaraco_functools-4.4.0.dist-info/top_level.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/keyring-25.7.0.dist-info/INSTALLER create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/keyring-25.7.0.dist-info/METADATA create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/keyring-25.7.0.dist-info/RECORD create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/keyring-25.7.0.dist-info/WHEEL create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/keyring-25.7.0.dist-info/entry_points.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/keyring-25.7.0.dist-info/licenses/LICENSE create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/keyring-25.7.0.dist-info/top_level.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/keyring/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/keyring/__main__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/keyring/backend.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/keyring/backend_complete.bash create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/keyring/backend_complete.zsh create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/keyring/backends/SecretService.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/keyring/backends/Windows.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/keyring/backends/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/keyring/backends/chainer.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/keyring/backends/fail.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/keyring/backends/kwallet.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/keyring/backends/libsecret.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/keyring/backends/macOS/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/keyring/backends/macOS/api.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/keyring/backends/null.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/keyring/cli.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/keyring/compat/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/keyring/compat/properties.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/keyring/compat/py312.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/keyring/completion.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/keyring/core.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/keyring/credentials.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/keyring/devpi_client.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/keyring/errors.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/keyring/http.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/keyring/py.typed create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/keyring/testing/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/keyring/testing/backend.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/keyring/testing/util.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/keyring/util/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/keyring/util/platform_.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/_compat.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/_punycode.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/cli/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/cli/parse.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/common/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/common/entities.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/common/html_blocks.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/common/html_re.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/common/normalize_url.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/common/utils.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/helpers/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/helpers/parse_link_destination.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/helpers/parse_link_label.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/helpers/parse_link_title.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/main.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/parser_block.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/parser_core.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/parser_inline.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/port.yaml create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/presets/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/presets/commonmark.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/presets/default.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/presets/zero.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/py.typed create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/renderer.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/ruler.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/rules_block/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/rules_block/blockquote.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/rules_block/code.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/rules_block/fence.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/rules_block/heading.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/rules_block/hr.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/rules_block/html_block.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/rules_block/lheading.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/rules_block/list.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/rules_block/paragraph.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/rules_block/reference.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/rules_block/state_block.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/rules_block/table.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/rules_core/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/rules_core/block.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/rules_core/inline.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/rules_core/linkify.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/rules_core/normalize.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/rules_core/replacements.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/rules_core/smartquotes.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/rules_core/state_core.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/rules_core/text_join.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/rules_inline/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/rules_inline/autolink.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/rules_inline/backticks.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/rules_inline/balance_pairs.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/rules_inline/emphasis.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/rules_inline/entity.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/rules_inline/escape.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/rules_inline/fragments_join.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/rules_inline/html_inline.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/rules_inline/image.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/rules_inline/link.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/rules_inline/linkify.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/rules_inline/newline.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/rules_inline/state_inline.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/rules_inline/strikethrough.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/rules_inline/text.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/token.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/tree.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it/utils.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it_py-4.0.0.dist-info/INSTALLER create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it_py-4.0.0.dist-info/METADATA create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it_py-4.0.0.dist-info/RECORD create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it_py-4.0.0.dist-info/WHEEL create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it_py-4.0.0.dist-info/entry_points.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it_py-4.0.0.dist-info/licenses/LICENSE create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/markdown_it_py-4.0.0.dist-info/licenses/LICENSE.markdown-it create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/mdurl-0.1.2.dist-info/INSTALLER create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/mdurl-0.1.2.dist-info/LICENSE create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/mdurl-0.1.2.dist-info/METADATA create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/mdurl-0.1.2.dist-info/RECORD create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/mdurl-0.1.2.dist-info/WHEEL create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/mdurl/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/mdurl/_decode.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/mdurl/_encode.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/mdurl/_format.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/mdurl/_parse.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/mdurl/_url.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/mdurl/py.typed create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/more_itertools-10.8.0.dist-info/INSTALLER create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/more_itertools-10.8.0.dist-info/METADATA create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/more_itertools-10.8.0.dist-info/RECORD create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/more_itertools-10.8.0.dist-info/WHEEL create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/more_itertools-10.8.0.dist-info/licenses/LICENSE create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/more_itertools/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/more_itertools/__init__.pyi create mode 100755 d2l-0.17.6/.venv/lib/python3.11/site-packages/more_itertools/more.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/more_itertools/more.pyi create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/more_itertools/py.typed create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/more_itertools/recipes.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/more_itertools/recipes.pyi create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/nh3-0.3.2.dist-info/INSTALLER create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/nh3-0.3.2.dist-info/METADATA create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/nh3-0.3.2.dist-info/RECORD create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/nh3-0.3.2.dist-info/WHEEL create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/nh3-0.3.2.dist-info/licenses/LICENSE create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/nh3/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/nh3/__init__.pyi create mode 100755 d2l-0.17.6/.venv/lib/python3.11/site-packages/nh3/nh3.abi3.so create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/nh3/py.typed create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/packaging-26.0.dist-info/INSTALLER create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/packaging-26.0.dist-info/METADATA create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/packaging-26.0.dist-info/RECORD create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/packaging-26.0.dist-info/WHEEL create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/packaging-26.0.dist-info/licenses/LICENSE create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/packaging-26.0.dist-info/licenses/LICENSE.APACHE create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/packaging-26.0.dist-info/licenses/LICENSE.BSD create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/packaging/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/packaging/_elffile.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/packaging/_manylinux.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/packaging/_musllinux.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/packaging/_parser.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/packaging/_structures.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/packaging/_tokenizer.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/packaging/licenses/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/packaging/licenses/_spdx.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/packaging/markers.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/packaging/metadata.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/packaging/py.typed create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/packaging/pylock.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/packaging/requirements.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/packaging/specifiers.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/packaging/tags.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/packaging/utils.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/packaging/version.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip-24.0.dist-info/AUTHORS.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip-24.0.dist-info/INSTALLER create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip-24.0.dist-info/LICENSE.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip-24.0.dist-info/METADATA create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip-24.0.dist-info/RECORD create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip-24.0.dist-info/REQUESTED create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip-24.0.dist-info/WHEEL create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip-24.0.dist-info/entry_points.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip-24.0.dist-info/top_level.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/__main__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/__pip-runner__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/build_env.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/cache.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/cli/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/cli/autocompletion.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/cli/base_command.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/cli/cmdoptions.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/cli/command_context.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/cli/main.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/cli/main_parser.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/cli/parser.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/cli/progress_bars.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/cli/req_command.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/cli/spinners.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/cli/status_codes.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/commands/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/commands/cache.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/commands/check.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/commands/completion.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/commands/configuration.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/commands/debug.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/commands/download.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/commands/freeze.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/commands/hash.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/commands/help.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/commands/index.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/commands/inspect.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/commands/install.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/commands/list.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/commands/search.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/commands/show.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/commands/uninstall.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/commands/wheel.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/configuration.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/exceptions.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/index/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/index/collector.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/index/package_finder.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/index/sources.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/locations/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/locations/_distutils.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/locations/_sysconfig.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/locations/base.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/main.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/metadata/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/metadata/_json.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/metadata/base.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/metadata/importlib/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/metadata/importlib/_compat.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/metadata/importlib/_dists.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/metadata/importlib/_envs.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/metadata/pkg_resources.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/models/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/models/candidate.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/models/direct_url.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/models/format_control.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/models/index.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/models/installation_report.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/models/link.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/models/scheme.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/models/search_scope.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/models/selection_prefs.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/models/target_python.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/models/wheel.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/network/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/network/auth.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/network/cache.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/network/download.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/network/lazy_wheel.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/network/session.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/network/utils.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/network/xmlrpc.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/operations/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/operations/build/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/operations/build/build_tracker.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/operations/build/metadata.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/operations/build/metadata_editable.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/operations/build/metadata_legacy.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/operations/build/wheel.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/operations/build/wheel_editable.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/operations/build/wheel_legacy.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/operations/check.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/operations/freeze.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/operations/install/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/operations/install/editable_legacy.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/operations/install/wheel.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/operations/prepare.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/pyproject.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/req/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/req/constructors.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/req/req_file.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/req/req_install.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/req/req_set.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/req/req_uninstall.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/resolution/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/resolution/base.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/resolution/legacy/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/resolution/legacy/resolver.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/base.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/candidates.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/factory.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/provider.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/reporter.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/requirements.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/resolver.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/self_outdated_check.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/utils/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/utils/_jaraco_text.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/utils/_log.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/utils/appdirs.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/utils/compat.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/utils/compatibility_tags.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/utils/datetime.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/utils/deprecation.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/utils/direct_url_helpers.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/utils/egg_link.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/utils/encoding.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/utils/entrypoints.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/utils/filesystem.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/utils/filetypes.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/utils/glibc.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/utils/hashes.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/utils/logging.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/utils/misc.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/utils/models.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/utils/packaging.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/utils/setuptools_build.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/utils/subprocess.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/utils/temp_dir.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/utils/unpacking.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/utils/urls.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/utils/virtualenv.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/utils/wheel.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/vcs/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/vcs/bazaar.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/vcs/git.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/vcs/mercurial.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/vcs/subversion.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/vcs/versioncontrol.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_internal/wheel_builder.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/_cmd.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/adapter.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/cache.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/caches/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/controller.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/filewrapper.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/heuristics.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/py.typed create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/serialize.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/cachecontrol/wrapper.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/certifi/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/certifi/__main__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/certifi/cacert.pem create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/certifi/core.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/certifi/py.typed create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/chardet/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/chardet/big5freq.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/chardet/big5prober.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/chardet/chardistribution.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/chardet/charsetgroupprober.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/chardet/charsetprober.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/chardet/cli/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/chardet/cli/chardetect.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/chardet/codingstatemachine.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/chardet/codingstatemachinedict.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/chardet/cp949prober.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/chardet/enums.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/chardet/escprober.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/chardet/escsm.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/chardet/eucjpprober.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/chardet/euckrfreq.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/chardet/euckrprober.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/chardet/euctwfreq.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/chardet/euctwprober.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/chardet/gb2312freq.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/chardet/gb2312prober.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/chardet/hebrewprober.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/chardet/jisfreq.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/chardet/johabfreq.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/chardet/johabprober.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/chardet/jpcntx.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/chardet/langbulgarianmodel.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/chardet/langgreekmodel.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/chardet/langhebrewmodel.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/chardet/langhungarianmodel.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/chardet/langrussianmodel.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/chardet/langthaimodel.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/chardet/langturkishmodel.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/chardet/latin1prober.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/chardet/macromanprober.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/chardet/mbcharsetprober.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/chardet/mbcsgroupprober.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/chardet/mbcssm.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/chardet/metadata/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/chardet/metadata/languages.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/chardet/py.typed create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/chardet/resultdict.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/chardet/sbcharsetprober.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/chardet/sbcsgroupprober.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/chardet/sjisprober.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/chardet/universaldetector.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/chardet/utf1632prober.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/chardet/utf8prober.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/chardet/version.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/colorama/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/colorama/ansi.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/colorama/ansitowin32.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/colorama/initialise.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/colorama/tests/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/colorama/tests/ansi_test.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/colorama/tests/ansitowin32_test.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/colorama/tests/initialise_test.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/colorama/tests/isatty_test.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/colorama/tests/utils.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/colorama/tests/winterm_test.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/colorama/win32.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/colorama/winterm.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/idna/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/idna/codec.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/idna/compat.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/idna/core.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/idna/idnadata.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/idna/intranges.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/idna/package_data.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/idna/py.typed create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/idna/uts46data.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/msgpack/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/msgpack/exceptions.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/msgpack/ext.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/msgpack/fallback.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/packaging/__about__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/packaging/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/packaging/_manylinux.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/packaging/_musllinux.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/packaging/_structures.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/packaging/markers.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/packaging/py.typed create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/packaging/requirements.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/packaging/specifiers.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/packaging/tags.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/packaging/utils.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/packaging/version.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/pkg_resources/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/platformdirs/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/platformdirs/__main__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/platformdirs/android.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/platformdirs/api.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/platformdirs/macos.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/platformdirs/py.typed create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/platformdirs/unix.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/platformdirs/version.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/platformdirs/windows.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/pygments/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/pygments/__main__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/pygments/cmdline.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/pygments/console.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/pygments/filter.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/pygments/filters/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatter.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/_mapping.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/bbcode.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/groff.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/html.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/img.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/irc.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/latex.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/other.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/pangomarkup.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/rtf.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/svg.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/terminal.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/terminal256.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/pygments/lexer.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/pygments/lexers/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/pygments/lexers/_mapping.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/pygments/lexers/python.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/pygments/modeline.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/pygments/plugin.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/pygments/regexopt.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/pygments/scanner.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/pygments/sphinxext.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/pygments/style.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/pygments/styles/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/pygments/token.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/pygments/unistring.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/pygments/util.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/pyparsing/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/pyparsing/actions.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/pyparsing/common.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/pyparsing/core.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/pyparsing/diagram/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/pyparsing/exceptions.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/pyparsing/helpers.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/pyparsing/py.typed create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/pyparsing/results.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/pyparsing/testing.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/pyparsing/unicode.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/pyparsing/util.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/_compat.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/_impl.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/_in_process/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/requests/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/requests/__version__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/requests/_internal_utils.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/requests/adapters.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/requests/api.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/requests/auth.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/requests/certs.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/requests/compat.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/requests/cookies.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/requests/exceptions.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/requests/help.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/requests/hooks.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/requests/models.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/requests/packages.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/requests/sessions.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/requests/status_codes.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/requests/structures.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/requests/utils.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/resolvelib/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/resolvelib/compat/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/resolvelib/compat/collections_abc.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/resolvelib/providers.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/resolvelib/py.typed create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/resolvelib/reporters.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/resolvelib/resolvers.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/resolvelib/structs.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/__main__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/_cell_widths.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/_emoji_codes.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/_emoji_replace.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/_export_format.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/_extension.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/_fileno.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/_inspect.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/_log_render.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/_loop.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/_null_file.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/_palettes.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/_pick.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/_ratio.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/_spinners.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/_stack.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/_timer.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/_win32_console.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/_windows.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/_windows_renderer.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/_wrap.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/abc.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/align.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/ansi.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/bar.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/box.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/cells.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/color.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/color_triplet.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/columns.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/console.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/constrain.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/containers.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/control.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/default_styles.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/diagnose.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/emoji.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/errors.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/file_proxy.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/filesize.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/highlighter.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/json.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/jupyter.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/layout.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/live.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/live_render.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/logging.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/markup.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/measure.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/padding.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/pager.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/palette.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/panel.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/pretty.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/progress.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/progress_bar.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/prompt.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/protocol.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/py.typed create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/region.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/repr.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/rule.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/scope.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/screen.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/segment.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/spinner.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/status.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/style.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/styled.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/syntax.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/table.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/terminal_theme.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/text.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/theme.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/themes.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/traceback.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/rich/tree.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/six.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/tenacity/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/tenacity/_asyncio.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/tenacity/_utils.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/tenacity/after.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/tenacity/before.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/tenacity/before_sleep.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/tenacity/nap.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/tenacity/py.typed create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/tenacity/retry.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/tenacity/stop.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/tenacity/tornadoweb.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/tenacity/wait.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/tomli/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/tomli/_parser.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/tomli/_re.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/tomli/_types.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/tomli/py.typed create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/truststore/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/truststore/_api.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/truststore/_macos.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/truststore/_openssl.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/truststore/_ssl_constants.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/truststore/_windows.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/truststore/py.typed create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/typing_extensions.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/urllib3/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/urllib3/_collections.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/urllib3/_version.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/urllib3/connection.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/urllib3/connectionpool.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/appengine.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/securetransport.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/socks.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/urllib3/exceptions.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/urllib3/fields.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/urllib3/filepost.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/urllib3/packages/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/urllib3/packages/backports/weakref_finalize.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/urllib3/packages/six.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/urllib3/poolmanager.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/urllib3/request.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/urllib3/response.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/urllib3/util/connection.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/urllib3/util/proxy.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/urllib3/util/queue.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/urllib3/util/request.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/urllib3/util/response.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/urllib3/util/retry.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/urllib3/util/ssl_.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/urllib3/util/ssl_match_hostname.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/urllib3/util/ssltransport.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/urllib3/util/timeout.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/urllib3/util/url.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/urllib3/util/wait.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/vendor.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/webencodings/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/webencodings/labels.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/webencodings/mklabels.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/webencodings/tests.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/_vendor/webencodings/x_user_defined.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pip/py.typed create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pkg_resources/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pkg_resources/_vendor/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pkg_resources/_vendor/appdirs.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pkg_resources/_vendor/importlib_resources/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pkg_resources/_vendor/importlib_resources/_adapters.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pkg_resources/_vendor/importlib_resources/_common.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pkg_resources/_vendor/importlib_resources/_compat.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pkg_resources/_vendor/importlib_resources/_itertools.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pkg_resources/_vendor/importlib_resources/_legacy.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pkg_resources/_vendor/importlib_resources/abc.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pkg_resources/_vendor/importlib_resources/readers.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pkg_resources/_vendor/importlib_resources/simple.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pkg_resources/_vendor/jaraco/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pkg_resources/_vendor/jaraco/context.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pkg_resources/_vendor/jaraco/functools.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pkg_resources/_vendor/jaraco/text/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pkg_resources/_vendor/more_itertools/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pkg_resources/_vendor/more_itertools/more.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pkg_resources/_vendor/more_itertools/recipes.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__about__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/_manylinux.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/_musllinux.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/_structures.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/markers.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/requirements.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/specifiers.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/tags.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/utils.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pkg_resources/_vendor/packaging/version.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pkg_resources/_vendor/pyparsing/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pkg_resources/_vendor/pyparsing/actions.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pkg_resources/_vendor/pyparsing/common.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pkg_resources/_vendor/pyparsing/core.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pkg_resources/_vendor/pyparsing/diagram/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pkg_resources/_vendor/pyparsing/exceptions.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pkg_resources/_vendor/pyparsing/helpers.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pkg_resources/_vendor/pyparsing/results.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pkg_resources/_vendor/pyparsing/testing.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pkg_resources/_vendor/pyparsing/unicode.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pkg_resources/_vendor/pyparsing/util.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pkg_resources/_vendor/zipp.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pkg_resources/extern/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments-2.19.2.dist-info/INSTALLER create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments-2.19.2.dist-info/METADATA create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments-2.19.2.dist-info/RECORD create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments-2.19.2.dist-info/WHEEL create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments-2.19.2.dist-info/entry_points.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments-2.19.2.dist-info/licenses/AUTHORS create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments-2.19.2.dist-info/licenses/LICENSE create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/__main__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/cmdline.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/console.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/filter.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/filters/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/formatter.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/formatters/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/formatters/_mapping.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/formatters/bbcode.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/formatters/groff.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/formatters/html.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/formatters/img.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/formatters/irc.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/formatters/latex.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/formatters/other.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/formatters/pangomarkup.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/formatters/rtf.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/formatters/svg.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/formatters/terminal.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/formatters/terminal256.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexer.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/_ada_builtins.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/_asy_builtins.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/_cl_builtins.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/_cocoa_builtins.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/_csound_builtins.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/_css_builtins.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/_googlesql_builtins.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/_julia_builtins.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/_lasso_builtins.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/_lilypond_builtins.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/_lua_builtins.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/_luau_builtins.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/_mapping.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/_mql_builtins.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/_mysql_builtins.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/_openedge_builtins.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/_php_builtins.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/_postgres_builtins.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/_qlik_builtins.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/_scheme_builtins.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/_scilab_builtins.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/_sourcemod_builtins.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/_sql_builtins.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/_stan_builtins.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/_stata_builtins.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/_tsql_builtins.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/_usd_builtins.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/_vbscript_builtins.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/_vim_builtins.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/actionscript.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/ada.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/agile.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/algebra.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/ambient.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/amdgpu.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/ampl.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/apdlexer.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/apl.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/archetype.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/arrow.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/arturo.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/asc.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/asm.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/asn1.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/automation.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/bare.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/basic.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/bdd.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/berry.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/bibtex.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/blueprint.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/boa.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/bqn.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/business.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/c_cpp.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/c_like.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/capnproto.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/carbon.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/cddl.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/chapel.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/clean.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/codeql.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/comal.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/compiled.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/configs.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/console.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/cplint.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/crystal.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/csound.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/css.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/d.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/dalvik.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/data.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/dax.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/devicetree.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/diff.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/dns.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/dotnet.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/dsls.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/dylan.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/ecl.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/eiffel.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/elm.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/elpi.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/email.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/erlang.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/esoteric.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/ezhil.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/factor.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/fantom.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/felix.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/fift.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/floscript.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/forth.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/fortran.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/foxpro.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/freefem.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/func.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/functional.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/futhark.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/gcodelexer.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/gdscript.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/gleam.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/go.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/grammar_notation.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/graph.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/graphics.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/graphql.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/graphviz.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/gsql.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/hare.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/haskell.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/haxe.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/hdl.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/hexdump.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/html.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/idl.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/igor.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/inferno.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/installers.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/int_fiction.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/iolang.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/j.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/javascript.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/jmespath.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/jslt.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/json5.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/jsonnet.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/jsx.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/julia.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/jvm.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/kuin.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/kusto.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/ldap.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/lean.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/lilypond.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/lisp.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/macaulay2.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/make.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/maple.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/markup.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/math.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/matlab.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/maxima.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/meson.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/mime.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/minecraft.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/mips.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/ml.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/modeling.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/modula2.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/mojo.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/monte.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/mosel.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/ncl.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/nimrod.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/nit.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/nix.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/numbair.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/oberon.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/objective.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/ooc.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/openscad.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/other.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/parasail.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/parsers.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/pascal.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/pawn.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/pddl.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/perl.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/phix.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/php.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/pointless.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/pony.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/praat.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/procfile.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/prolog.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/promql.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/prql.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/ptx.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/python.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/q.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/qlik.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/qvt.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/r.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/rdf.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/rebol.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/rego.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/resource.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/ride.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/rita.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/rnc.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/roboconf.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/robotframework.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/ruby.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/rust.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/sas.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/savi.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/scdoc.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/scripting.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/sgf.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/shell.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/sieve.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/slash.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/smalltalk.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/smithy.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/smv.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/snobol.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/solidity.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/soong.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/sophia.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/special.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/spice.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/sql.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/srcinfo.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/stata.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/supercollider.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/tablegen.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/tact.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/tal.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/tcl.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/teal.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/templates.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/teraterm.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/testing.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/text.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/textedit.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/textfmts.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/theorem.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/thingsdb.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/tlb.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/tls.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/tnt.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/trafficscript.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/typoscript.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/typst.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/ul4.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/unicon.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/urbi.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/usd.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/varnish.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/verification.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/verifpal.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/vip.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/vyper.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/web.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/webassembly.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/webidl.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/webmisc.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/wgsl.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/whiley.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/wowtoc.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/wren.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/x10.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/xorg.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/yang.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/yara.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/lexers/zig.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/modeline.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/plugin.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/regexopt.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/scanner.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/sphinxext.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/style.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/styles/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/styles/_mapping.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/styles/abap.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/styles/algol.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/styles/algol_nu.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/styles/arduino.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/styles/autumn.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/styles/borland.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/styles/bw.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/styles/coffee.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/styles/colorful.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/styles/default.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/styles/dracula.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/styles/emacs.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/styles/friendly.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/styles/friendly_grayscale.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/styles/fruity.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/styles/gh_dark.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/styles/gruvbox.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/styles/igor.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/styles/inkpot.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/styles/lightbulb.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/styles/lilypond.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/styles/lovelace.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/styles/manni.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/styles/material.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/styles/monokai.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/styles/murphy.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/styles/native.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/styles/nord.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/styles/onedark.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/styles/paraiso_dark.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/styles/paraiso_light.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/styles/pastie.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/styles/perldoc.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/styles/rainbow_dash.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/styles/rrt.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/styles/sas.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/styles/solarized.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/styles/staroffice.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/styles/stata_dark.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/styles/stata_light.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/styles/tango.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/styles/trac.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/styles/vim.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/styles/vs.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/styles/xcode.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/styles/zenburn.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/token.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/unistring.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/pygments/util.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/readme_renderer-44.0.dist-info/INSTALLER create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/readme_renderer-44.0.dist-info/LICENSE create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/readme_renderer-44.0.dist-info/METADATA create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/readme_renderer-44.0.dist-info/RECORD create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/readme_renderer-44.0.dist-info/WHEEL create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/readme_renderer-44.0.dist-info/top_level.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/readme_renderer/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/readme_renderer/__main__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/readme_renderer/clean.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/readme_renderer/markdown.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/readme_renderer/py.typed create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/readme_renderer/rst.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/readme_renderer/txt.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests-2.32.5.dist-info/INSTALLER create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests-2.32.5.dist-info/METADATA create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests-2.32.5.dist-info/RECORD create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests-2.32.5.dist-info/WHEEL create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests-2.32.5.dist-info/licenses/LICENSE create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests-2.32.5.dist-info/top_level.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests/__version__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests/_internal_utils.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests/adapters.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests/api.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests/auth.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests/certs.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests/compat.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests/cookies.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests/exceptions.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests/help.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests/hooks.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests/models.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests/packages.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests/sessions.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests/status_codes.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests/structures.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests/utils.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests_toolbelt-1.0.0.dist-info/AUTHORS.rst create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests_toolbelt-1.0.0.dist-info/INSTALLER create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests_toolbelt-1.0.0.dist-info/LICENSE create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests_toolbelt-1.0.0.dist-info/METADATA create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests_toolbelt-1.0.0.dist-info/RECORD create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests_toolbelt-1.0.0.dist-info/WHEEL create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests_toolbelt-1.0.0.dist-info/top_level.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests_toolbelt/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests_toolbelt/_compat.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests_toolbelt/adapters/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests_toolbelt/adapters/appengine.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests_toolbelt/adapters/fingerprint.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests_toolbelt/adapters/host_header_ssl.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests_toolbelt/adapters/socket_options.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests_toolbelt/adapters/source.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests_toolbelt/adapters/ssl.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests_toolbelt/adapters/x509.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests_toolbelt/auth/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests_toolbelt/auth/_digest_auth_compat.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests_toolbelt/auth/guess.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests_toolbelt/auth/handler.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests_toolbelt/auth/http_proxy_digest.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests_toolbelt/cookies/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests_toolbelt/cookies/forgetful.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests_toolbelt/downloadutils/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests_toolbelt/downloadutils/stream.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests_toolbelt/downloadutils/tee.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests_toolbelt/exceptions.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests_toolbelt/multipart/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests_toolbelt/multipart/decoder.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests_toolbelt/multipart/encoder.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests_toolbelt/sessions.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests_toolbelt/streaming_iterator.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests_toolbelt/threaded/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests_toolbelt/threaded/pool.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests_toolbelt/threaded/thread.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests_toolbelt/utils/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests_toolbelt/utils/deprecated.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests_toolbelt/utils/dump.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests_toolbelt/utils/formdata.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/requests_toolbelt/utils/user_agent.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rfc3986-2.0.0.dist-info/INSTALLER create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rfc3986-2.0.0.dist-info/LICENSE create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rfc3986-2.0.0.dist-info/METADATA create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rfc3986-2.0.0.dist-info/RECORD create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rfc3986-2.0.0.dist-info/WHEEL create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rfc3986-2.0.0.dist-info/top_level.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rfc3986/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rfc3986/_mixin.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rfc3986/abnf_regexp.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rfc3986/api.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rfc3986/builder.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rfc3986/compat.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rfc3986/exceptions.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rfc3986/iri.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rfc3986/misc.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rfc3986/normalizers.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rfc3986/parseresult.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rfc3986/uri.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rfc3986/validators.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich-14.2.0.dist-info/INSTALLER create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich-14.2.0.dist-info/LICENSE create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich-14.2.0.dist-info/METADATA create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich-14.2.0.dist-info/RECORD create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich-14.2.0.dist-info/WHEEL create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/__main__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/_cell_widths.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/_emoji_codes.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/_emoji_replace.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/_export_format.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/_extension.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/_fileno.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/_inspect.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/_log_render.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/_loop.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/_null_file.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/_palettes.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/_pick.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/_ratio.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/_spinners.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/_stack.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/_timer.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/_win32_console.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/_windows.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/_windows_renderer.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/_wrap.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/abc.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/align.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/ansi.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/bar.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/box.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/cells.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/color.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/color_triplet.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/columns.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/console.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/constrain.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/containers.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/control.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/default_styles.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/diagnose.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/emoji.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/errors.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/file_proxy.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/filesize.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/highlighter.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/json.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/jupyter.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/layout.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/live.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/live_render.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/logging.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/markdown.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/markup.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/measure.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/padding.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/pager.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/palette.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/panel.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/pretty.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/progress.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/progress_bar.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/prompt.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/protocol.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/py.typed create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/region.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/repr.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/rule.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/scope.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/screen.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/segment.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/spinner.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/status.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/style.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/styled.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/syntax.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/table.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/terminal_theme.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/text.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/theme.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/themes.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/traceback.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/rich/tree.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools-65.5.0.dist-info/INSTALLER create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools-65.5.0.dist-info/LICENSE create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools-65.5.0.dist-info/METADATA create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools-65.5.0.dist-info/RECORD create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools-65.5.0.dist-info/REQUESTED create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools-65.5.0.dist-info/WHEEL create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools-65.5.0.dist-info/entry_points.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools-65.5.0.dist-info/top_level.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_deprecation_warning.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_distutils/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_distutils/_collections.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_distutils/_functools.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_distutils/_macos_compat.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_distutils/_msvccompiler.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_distutils/archive_util.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_distutils/bcppcompiler.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_distutils/ccompiler.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_distutils/cmd.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_distutils/command/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_distutils/command/_framework_compat.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_distutils/command/bdist.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_distutils/command/bdist_dumb.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_distutils/command/bdist_rpm.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_distutils/command/build.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_distutils/command/build_clib.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_distutils/command/build_ext.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_distutils/command/build_py.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_distutils/command/build_scripts.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_distutils/command/check.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_distutils/command/clean.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_distutils/command/config.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_distutils/command/install.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_distutils/command/install_data.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_distutils/command/install_egg_info.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_distutils/command/install_headers.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_distutils/command/install_lib.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_distutils/command/install_scripts.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_distutils/command/py37compat.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_distutils/command/register.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_distutils/command/sdist.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_distutils/command/upload.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_distutils/config.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_distutils/core.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_distutils/cygwinccompiler.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_distutils/debug.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_distutils/dep_util.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_distutils/dir_util.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_distutils/errors.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_distutils/extension.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_distutils/fancy_getopt.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_distutils/file_util.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_distutils/filelist.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_distutils/log.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_distutils/msvc9compiler.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_distutils/msvccompiler.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_distutils/py38compat.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_distutils/py39compat.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_distutils/spawn.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_distutils/sysconfig.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_distutils/text_file.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_distutils/unixccompiler.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_distutils/util.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_distutils/version.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_distutils/versionpredicate.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_entry_points.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_imp.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_importlib.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_itertools.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_path.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_reqs.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_vendor/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_vendor/importlib_metadata/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_vendor/importlib_metadata/_adapters.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_vendor/importlib_metadata/_collections.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_vendor/importlib_metadata/_compat.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_vendor/importlib_metadata/_functools.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_vendor/importlib_metadata/_itertools.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_vendor/importlib_metadata/_meta.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_vendor/importlib_metadata/_text.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_vendor/importlib_resources/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_vendor/importlib_resources/_adapters.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_vendor/importlib_resources/_common.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_vendor/importlib_resources/_compat.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_vendor/importlib_resources/_itertools.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_vendor/importlib_resources/_legacy.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_vendor/importlib_resources/abc.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_vendor/importlib_resources/readers.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_vendor/importlib_resources/simple.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_vendor/jaraco/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_vendor/jaraco/context.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_vendor/jaraco/functools.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_vendor/jaraco/text/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_vendor/more_itertools/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_vendor/more_itertools/more.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_vendor/more_itertools/recipes.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_vendor/ordered_set.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_vendor/packaging/__about__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_vendor/packaging/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_vendor/packaging/_manylinux.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_vendor/packaging/_musllinux.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_vendor/packaging/_structures.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_vendor/packaging/markers.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_vendor/packaging/requirements.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_vendor/packaging/specifiers.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_vendor/packaging/tags.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_vendor/packaging/utils.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_vendor/packaging/version.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_vendor/pyparsing/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_vendor/pyparsing/actions.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_vendor/pyparsing/common.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_vendor/pyparsing/core.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_vendor/pyparsing/diagram/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_vendor/pyparsing/exceptions.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_vendor/pyparsing/helpers.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_vendor/pyparsing/results.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_vendor/pyparsing/testing.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_vendor/pyparsing/unicode.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_vendor/pyparsing/util.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_vendor/tomli/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_vendor/tomli/_parser.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_vendor/tomli/_re.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_vendor/tomli/_types.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_vendor/typing_extensions.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/_vendor/zipp.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/archive_util.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/build_meta.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/cli-32.exe create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/cli-64.exe create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/cli-arm64.exe create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/cli.exe create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/command/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/command/alias.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/command/bdist_egg.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/command/bdist_rpm.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/command/build.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/command/build_clib.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/command/build_ext.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/command/build_py.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/command/develop.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/command/easy_install.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/command/editable_wheel.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/command/egg_info.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/command/install.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/command/install_egg_info.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/command/install_lib.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/command/install_scripts.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/command/launcher manifest.xml create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/command/py36compat.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/command/register.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/command/rotate.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/command/saveopts.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/command/sdist.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/command/setopt.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/command/test.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/command/upload.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/command/upload_docs.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/config/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/config/_apply_pyprojecttoml.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/config/_validate_pyproject/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/config/_validate_pyproject/error_reporting.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/config/_validate_pyproject/extra_validations.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/config/_validate_pyproject/fastjsonschema_exceptions.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/config/_validate_pyproject/fastjsonschema_validations.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/config/_validate_pyproject/formats.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/config/expand.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/config/pyprojecttoml.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/config/setupcfg.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/dep_util.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/depends.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/discovery.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/errors.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/extension.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/extern/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/glob.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/gui-32.exe create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/gui-64.exe create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/gui-arm64.exe create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/gui.exe create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/installer.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/launch.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/logging.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/monkey.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/msvc.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/namespaces.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/package_index.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/py34compat.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/sandbox.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/script (dev).tmpl create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/script.tmpl create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/unicode_utils.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/version.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/wheel.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/setuptools/windows_support.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/twine-6.2.0.dist-info/INSTALLER create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/twine-6.2.0.dist-info/METADATA create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/twine-6.2.0.dist-info/RECORD create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/twine-6.2.0.dist-info/REQUESTED create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/twine-6.2.0.dist-info/WHEEL create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/twine-6.2.0.dist-info/entry_points.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/twine-6.2.0.dist-info/licenses/LICENSE create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/twine-6.2.0.dist-info/top_level.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/twine/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/twine/__main__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/twine/auth.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/twine/cli.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/twine/commands/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/twine/commands/check.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/twine/commands/register.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/twine/commands/upload.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/twine/exceptions.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/twine/package.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/twine/py.typed create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/twine/repository.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/twine/sdist.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/twine/settings.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/twine/utils.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/twine/wheel.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/urllib3-2.6.3.dist-info/INSTALLER create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/urllib3-2.6.3.dist-info/METADATA create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/urllib3-2.6.3.dist-info/RECORD create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/urllib3-2.6.3.dist-info/WHEEL create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/urllib3-2.6.3.dist-info/licenses/LICENSE.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/urllib3/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/urllib3/_base_connection.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/urllib3/_collections.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/urllib3/_request_methods.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/urllib3/_version.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/urllib3/connection.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/urllib3/connectionpool.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/urllib3/contrib/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/urllib3/contrib/emscripten/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/urllib3/contrib/emscripten/connection.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/urllib3/contrib/emscripten/emscripten_fetch_worker.js create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/urllib3/contrib/emscripten/fetch.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/urllib3/contrib/emscripten/request.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/urllib3/contrib/emscripten/response.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/urllib3/contrib/pyopenssl.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/urllib3/contrib/socks.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/urllib3/exceptions.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/urllib3/fields.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/urllib3/filepost.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/urllib3/http2/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/urllib3/http2/connection.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/urllib3/http2/probe.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/urllib3/poolmanager.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/urllib3/py.typed create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/urllib3/response.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/urllib3/util/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/urllib3/util/connection.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/urllib3/util/proxy.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/urllib3/util/request.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/urllib3/util/response.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/urllib3/util/retry.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/urllib3/util/ssl_.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/urllib3/util/ssl_match_hostname.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/urllib3/util/ssltransport.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/urllib3/util/timeout.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/urllib3/util/url.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/urllib3/util/util.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/urllib3/util/wait.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/zipp-3.23.0.dist-info/INSTALLER create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/zipp-3.23.0.dist-info/METADATA create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/zipp-3.23.0.dist-info/RECORD create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/zipp-3.23.0.dist-info/WHEEL create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/zipp-3.23.0.dist-info/licenses/LICENSE create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/zipp-3.23.0.dist-info/top_level.txt create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/zipp/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/zipp/_functools.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/zipp/compat/__init__.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/zipp/compat/overlay.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/zipp/compat/py310.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/zipp/compat/py313.py create mode 100644 d2l-0.17.6/.venv/lib/python3.11/site-packages/zipp/glob.py create mode 100644 d2l-0.17.6/.venv/pyvenv.cfg create mode 100644 d2l-0.17.6/LICENSE create mode 100644 d2l-0.17.6/LICENSE-SAMPLECODE create mode 100644 d2l-0.17.6/LICENSE-SUMMARY create mode 100644 d2l-0.17.6/PKG-INFO create mode 100644 d2l-0.17.6/README.md create mode 100644 d2l-0.17.6/d2l/__init__.py create mode 100644 d2l-0.17.6/d2l/mxnet.py create mode 100644 d2l-0.17.6/d2l/paddle.py create mode 100644 d2l-0.17.6/d2l/tensorflow.py create mode 100644 d2l-0.17.6/d2l/torch.py create mode 100644 d2l-0.17.6/setup.cfg create mode 100644 d2l-0.17.6/setup.py diff --git a/d2l-0.17.6/.venv/bin/Activate.ps1 b/d2l-0.17.6/.venv/bin/Activate.ps1 new file mode 100644 index 000000000..b49d77ba4 --- /dev/null +++ b/d2l-0.17.6/.venv/bin/Activate.ps1 @@ -0,0 +1,247 @@ +<# +.Synopsis +Activate a Python virtual environment for the current PowerShell session. + +.Description +Pushes the python executable for a virtual environment to the front of the +$Env:PATH environment variable and sets the prompt to signify that you are +in a Python virtual environment. Makes use of the command line switches as +well as the `pyvenv.cfg` file values present in the virtual environment. + +.Parameter VenvDir +Path to the directory that contains the virtual environment to activate. The +default value for this is the parent of the directory that the Activate.ps1 +script is located within. + +.Parameter Prompt +The prompt prefix to display when this virtual environment is activated. By +default, this prompt is the name of the virtual environment folder (VenvDir) +surrounded by parentheses and followed by a single space (ie. '(.venv) '). + +.Example +Activate.ps1 +Activates the Python virtual environment that contains the Activate.ps1 script. + +.Example +Activate.ps1 -Verbose +Activates the Python virtual environment that contains the Activate.ps1 script, +and shows extra information about the activation as it executes. + +.Example +Activate.ps1 -VenvDir C:\Users\MyUser\Common\.venv +Activates the Python virtual environment located in the specified location. + +.Example +Activate.ps1 -Prompt "MyPython" +Activates the Python virtual environment that contains the Activate.ps1 script, +and prefixes the current prompt with the specified string (surrounded in +parentheses) while the virtual environment is active. + +.Notes +On Windows, it may be required to enable this Activate.ps1 script by setting the +execution policy for the user. You can do this by issuing the following PowerShell +command: + +PS C:\> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser + +For more information on Execution Policies: +https://go.microsoft.com/fwlink/?LinkID=135170 + +#> +Param( + [Parameter(Mandatory = $false)] + [String] + $VenvDir, + [Parameter(Mandatory = $false)] + [String] + $Prompt +) + +<# Function declarations --------------------------------------------------- #> + +<# +.Synopsis +Remove all shell session elements added by the Activate script, including the +addition of the virtual environment's Python executable from the beginning of +the PATH variable. + +.Parameter NonDestructive +If present, do not remove this function from the global namespace for the +session. + +#> +function global:deactivate ([switch]$NonDestructive) { + # Revert to original values + + # The prior prompt: + if (Test-Path -Path Function:_OLD_VIRTUAL_PROMPT) { + Copy-Item -Path Function:_OLD_VIRTUAL_PROMPT -Destination Function:prompt + Remove-Item -Path Function:_OLD_VIRTUAL_PROMPT + } + + # The prior PYTHONHOME: + if (Test-Path -Path Env:_OLD_VIRTUAL_PYTHONHOME) { + Copy-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME -Destination Env:PYTHONHOME + Remove-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME + } + + # The prior PATH: + if (Test-Path -Path Env:_OLD_VIRTUAL_PATH) { + Copy-Item -Path Env:_OLD_VIRTUAL_PATH -Destination Env:PATH + Remove-Item -Path Env:_OLD_VIRTUAL_PATH + } + + # Just remove the VIRTUAL_ENV altogether: + if (Test-Path -Path Env:VIRTUAL_ENV) { + Remove-Item -Path env:VIRTUAL_ENV + } + + # Just remove VIRTUAL_ENV_PROMPT altogether. + if (Test-Path -Path Env:VIRTUAL_ENV_PROMPT) { + Remove-Item -Path env:VIRTUAL_ENV_PROMPT + } + + # Just remove the _PYTHON_VENV_PROMPT_PREFIX altogether: + if (Get-Variable -Name "_PYTHON_VENV_PROMPT_PREFIX" -ErrorAction SilentlyContinue) { + Remove-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Scope Global -Force + } + + # Leave deactivate function in the global namespace if requested: + if (-not $NonDestructive) { + Remove-Item -Path function:deactivate + } +} + +<# +.Description +Get-PyVenvConfig parses the values from the pyvenv.cfg file located in the +given folder, and returns them in a map. + +For each line in the pyvenv.cfg file, if that line can be parsed into exactly +two strings separated by `=` (with any amount of whitespace surrounding the =) +then it is considered a `key = value` line. The left hand string is the key, +the right hand is the value. + +If the value starts with a `'` or a `"` then the first and last character is +stripped from the value before being captured. + +.Parameter ConfigDir +Path to the directory that contains the `pyvenv.cfg` file. +#> +function Get-PyVenvConfig( + [String] + $ConfigDir +) { + Write-Verbose "Given ConfigDir=$ConfigDir, obtain values in pyvenv.cfg" + + # Ensure the file exists, and issue a warning if it doesn't (but still allow the function to continue). + $pyvenvConfigPath = Join-Path -Resolve -Path $ConfigDir -ChildPath 'pyvenv.cfg' -ErrorAction Continue + + # An empty map will be returned if no config file is found. + $pyvenvConfig = @{ } + + if ($pyvenvConfigPath) { + + Write-Verbose "File exists, parse `key = value` lines" + $pyvenvConfigContent = Get-Content -Path $pyvenvConfigPath + + $pyvenvConfigContent | ForEach-Object { + $keyval = $PSItem -split "\s*=\s*", 2 + if ($keyval[0] -and $keyval[1]) { + $val = $keyval[1] + + # Remove extraneous quotations around a string value. + if ("'""".Contains($val.Substring(0, 1))) { + $val = $val.Substring(1, $val.Length - 2) + } + + $pyvenvConfig[$keyval[0]] = $val + Write-Verbose "Adding Key: '$($keyval[0])'='$val'" + } + } + } + return $pyvenvConfig +} + + +<# Begin Activate script --------------------------------------------------- #> + +# Determine the containing directory of this script +$VenvExecPath = Split-Path -Parent $MyInvocation.MyCommand.Definition +$VenvExecDir = Get-Item -Path $VenvExecPath + +Write-Verbose "Activation script is located in path: '$VenvExecPath'" +Write-Verbose "VenvExecDir Fullname: '$($VenvExecDir.FullName)" +Write-Verbose "VenvExecDir Name: '$($VenvExecDir.Name)" + +# Set values required in priority: CmdLine, ConfigFile, Default +# First, get the location of the virtual environment, it might not be +# VenvExecDir if specified on the command line. +if ($VenvDir) { + Write-Verbose "VenvDir given as parameter, using '$VenvDir' to determine values" +} +else { + Write-Verbose "VenvDir not given as a parameter, using parent directory name as VenvDir." + $VenvDir = $VenvExecDir.Parent.FullName.TrimEnd("\\/") + Write-Verbose "VenvDir=$VenvDir" +} + +# Next, read the `pyvenv.cfg` file to determine any required value such +# as `prompt`. +$pyvenvCfg = Get-PyVenvConfig -ConfigDir $VenvDir + +# Next, set the prompt from the command line, or the config file, or +# just use the name of the virtual environment folder. +if ($Prompt) { + Write-Verbose "Prompt specified as argument, using '$Prompt'" +} +else { + Write-Verbose "Prompt not specified as argument to script, checking pyvenv.cfg value" + if ($pyvenvCfg -and $pyvenvCfg['prompt']) { + Write-Verbose " Setting based on value in pyvenv.cfg='$($pyvenvCfg['prompt'])'" + $Prompt = $pyvenvCfg['prompt']; + } + else { + Write-Verbose " Setting prompt based on parent's directory's name. (Is the directory name passed to venv module when creating the virtual environment)" + Write-Verbose " Got leaf-name of $VenvDir='$(Split-Path -Path $venvDir -Leaf)'" + $Prompt = Split-Path -Path $venvDir -Leaf + } +} + +Write-Verbose "Prompt = '$Prompt'" +Write-Verbose "VenvDir='$VenvDir'" + +# Deactivate any currently active virtual environment, but leave the +# deactivate function in place. +deactivate -nondestructive + +# Now set the environment variable VIRTUAL_ENV, used by many tools to determine +# that there is an activated venv. +$env:VIRTUAL_ENV = $VenvDir + +if (-not $Env:VIRTUAL_ENV_DISABLE_PROMPT) { + + Write-Verbose "Setting prompt to '$Prompt'" + + # Set the prompt to include the env name + # Make sure _OLD_VIRTUAL_PROMPT is global + function global:_OLD_VIRTUAL_PROMPT { "" } + Copy-Item -Path function:prompt -Destination function:_OLD_VIRTUAL_PROMPT + New-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Description "Python virtual environment prompt prefix" -Scope Global -Option ReadOnly -Visibility Public -Value $Prompt + + function global:prompt { + Write-Host -NoNewline -ForegroundColor Green "($_PYTHON_VENV_PROMPT_PREFIX) " + _OLD_VIRTUAL_PROMPT + } + $env:VIRTUAL_ENV_PROMPT = $Prompt +} + +# Clear PYTHONHOME +if (Test-Path -Path Env:PYTHONHOME) { + Copy-Item -Path Env:PYTHONHOME -Destination Env:_OLD_VIRTUAL_PYTHONHOME + Remove-Item -Path Env:PYTHONHOME +} + +# Add the venv to the PATH +Copy-Item -Path Env:PATH -Destination Env:_OLD_VIRTUAL_PATH +$Env:PATH = "$VenvExecDir$([System.IO.Path]::PathSeparator)$Env:PATH" diff --git a/d2l-0.17.6/.venv/bin/activate b/d2l-0.17.6/.venv/bin/activate new file mode 100644 index 000000000..f60158d9e --- /dev/null +++ b/d2l-0.17.6/.venv/bin/activate @@ -0,0 +1,63 @@ +# This file must be used with "source bin/activate" *from bash* +# you cannot run it directly + +deactivate () { + # reset old environment variables + if [ -n "${_OLD_VIRTUAL_PATH:-}" ] ; then + PATH="${_OLD_VIRTUAL_PATH:-}" + export PATH + unset _OLD_VIRTUAL_PATH + fi + if [ -n "${_OLD_VIRTUAL_PYTHONHOME:-}" ] ; then + PYTHONHOME="${_OLD_VIRTUAL_PYTHONHOME:-}" + export PYTHONHOME + unset _OLD_VIRTUAL_PYTHONHOME + fi + + # Call hash to forget past commands. Without forgetting + # past commands the $PATH changes we made may not be respected + hash -r 2> /dev/null + + if [ -n "${_OLD_VIRTUAL_PS1:-}" ] ; then + PS1="${_OLD_VIRTUAL_PS1:-}" + export PS1 + unset _OLD_VIRTUAL_PS1 + fi + + unset VIRTUAL_ENV + unset VIRTUAL_ENV_PROMPT + if [ ! "${1:-}" = "nondestructive" ] ; then + # Self destruct! + unset -f deactivate + fi +} + +# unset irrelevant variables +deactivate nondestructive + +VIRTUAL_ENV="/Users/wyc/Desktop/d2l-0.17.6/.venv" +export VIRTUAL_ENV + +_OLD_VIRTUAL_PATH="$PATH" +PATH="$VIRTUAL_ENV/bin:$PATH" +export PATH + +# unset PYTHONHOME if set +# this will fail if PYTHONHOME is set to the empty string (which is bad anyway) +# could use `if (set -u; : $PYTHONHOME) ;` in bash +if [ -n "${PYTHONHOME:-}" ] ; then + _OLD_VIRTUAL_PYTHONHOME="${PYTHONHOME:-}" + unset PYTHONHOME +fi + +if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then + _OLD_VIRTUAL_PS1="${PS1:-}" + PS1="(.venv) ${PS1:-}" + export PS1 + VIRTUAL_ENV_PROMPT="(.venv) " + export VIRTUAL_ENV_PROMPT +fi + +# Call hash to forget past commands. Without forgetting +# past commands the $PATH changes we made may not be respected +hash -r 2> /dev/null diff --git a/d2l-0.17.6/.venv/bin/activate.csh b/d2l-0.17.6/.venv/bin/activate.csh new file mode 100644 index 000000000..e3dd81d20 --- /dev/null +++ b/d2l-0.17.6/.venv/bin/activate.csh @@ -0,0 +1,26 @@ +# This file must be used with "source bin/activate.csh" *from csh*. +# You cannot run it directly. +# Created by Davide Di Blasi . +# Ported to Python 3.3 venv by Andrew Svetlov + +alias deactivate 'test $?_OLD_VIRTUAL_PATH != 0 && setenv PATH "$_OLD_VIRTUAL_PATH" && unset _OLD_VIRTUAL_PATH; rehash; test $?_OLD_VIRTUAL_PROMPT != 0 && set prompt="$_OLD_VIRTUAL_PROMPT" && unset _OLD_VIRTUAL_PROMPT; unsetenv VIRTUAL_ENV; unsetenv VIRTUAL_ENV_PROMPT; test "\!:*" != "nondestructive" && unalias deactivate' + +# Unset irrelevant variables. +deactivate nondestructive + +setenv VIRTUAL_ENV "/Users/wyc/Desktop/d2l-0.17.6/.venv" + +set _OLD_VIRTUAL_PATH="$PATH" +setenv PATH "$VIRTUAL_ENV/bin:$PATH" + + +set _OLD_VIRTUAL_PROMPT="$prompt" + +if (! "$?VIRTUAL_ENV_DISABLE_PROMPT") then + set prompt = "(.venv) $prompt" + setenv VIRTUAL_ENV_PROMPT "(.venv) " +endif + +alias pydoc python -m pydoc + +rehash diff --git a/d2l-0.17.6/.venv/bin/activate.fish b/d2l-0.17.6/.venv/bin/activate.fish new file mode 100644 index 000000000..6aefb3f0a --- /dev/null +++ b/d2l-0.17.6/.venv/bin/activate.fish @@ -0,0 +1,69 @@ +# This file must be used with "source /bin/activate.fish" *from fish* +# (https://fishshell.com/); you cannot run it directly. + +function deactivate -d "Exit virtual environment and return to normal shell environment" + # reset old environment variables + if test -n "$_OLD_VIRTUAL_PATH" + set -gx PATH $_OLD_VIRTUAL_PATH + set -e _OLD_VIRTUAL_PATH + end + if test -n "$_OLD_VIRTUAL_PYTHONHOME" + set -gx PYTHONHOME $_OLD_VIRTUAL_PYTHONHOME + set -e _OLD_VIRTUAL_PYTHONHOME + end + + if test -n "$_OLD_FISH_PROMPT_OVERRIDE" + set -e _OLD_FISH_PROMPT_OVERRIDE + # prevents error when using nested fish instances (Issue #93858) + if functions -q _old_fish_prompt + functions -e fish_prompt + functions -c _old_fish_prompt fish_prompt + functions -e _old_fish_prompt + end + end + + set -e VIRTUAL_ENV + set -e VIRTUAL_ENV_PROMPT + if test "$argv[1]" != "nondestructive" + # Self-destruct! + functions -e deactivate + end +end + +# Unset irrelevant variables. +deactivate nondestructive + +set -gx VIRTUAL_ENV "/Users/wyc/Desktop/d2l-0.17.6/.venv" + +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 + +if test -z "$VIRTUAL_ENV_DISABLE_PROMPT" + # fish uses a function instead of an env var to generate the prompt. + + # Save the current fish_prompt function as the function _old_fish_prompt. + functions -c fish_prompt _old_fish_prompt + + # With the original prompt function renamed, we can override with our own. + function fish_prompt + # Save the return status of the last command. + set -l old_status $status + + # Output the venv prompt; color taken from the blue of the Python logo. + printf "%s%s%s" (set_color 4B8BBE) "(.venv) " (set_color normal) + + # Restore the return status of the previous command. + echo "exit $old_status" | . + # Output the original/"old" prompt. + _old_fish_prompt + end + + set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV" + set -gx VIRTUAL_ENV_PROMPT "(.venv) " +end diff --git a/d2l-0.17.6/.venv/bin/docutils b/d2l-0.17.6/.venv/bin/docutils new file mode 100755 index 000000000..9eb09c55e --- /dev/null +++ b/d2l-0.17.6/.venv/bin/docutils @@ -0,0 +1,8 @@ +#!/Users/wyc/Desktop/d2l-0.17.6/.venv/bin/python3.11 +# -*- coding: utf-8 -*- +import re +import sys +from docutils.__main__ import main +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/d2l-0.17.6/.venv/bin/keyring b/d2l-0.17.6/.venv/bin/keyring new file mode 100755 index 000000000..914056d91 --- /dev/null +++ b/d2l-0.17.6/.venv/bin/keyring @@ -0,0 +1,8 @@ +#!/Users/wyc/Desktop/d2l-0.17.6/.venv/bin/python3.11 +# -*- coding: utf-8 -*- +import re +import sys +from keyring.cli import main +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/d2l-0.17.6/.venv/bin/markdown-it b/d2l-0.17.6/.venv/bin/markdown-it new file mode 100755 index 000000000..a8daa4b4d --- /dev/null +++ b/d2l-0.17.6/.venv/bin/markdown-it @@ -0,0 +1,8 @@ +#!/Users/wyc/Desktop/d2l-0.17.6/.venv/bin/python3.11 +# -*- coding: utf-8 -*- +import re +import sys +from markdown_it.cli.parse import main +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/d2l-0.17.6/.venv/bin/normalizer b/d2l-0.17.6/.venv/bin/normalizer new file mode 100755 index 000000000..326c52348 --- /dev/null +++ b/d2l-0.17.6/.venv/bin/normalizer @@ -0,0 +1,8 @@ +#!/Users/wyc/Desktop/d2l-0.17.6/.venv/bin/python3.11 +# -*- coding: utf-8 -*- +import re +import sys +from charset_normalizer.cli import cli_detect +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(cli_detect()) diff --git a/d2l-0.17.6/.venv/bin/pip b/d2l-0.17.6/.venv/bin/pip new file mode 100755 index 000000000..c8a98bc58 --- /dev/null +++ b/d2l-0.17.6/.venv/bin/pip @@ -0,0 +1,8 @@ +#!/Users/wyc/Desktop/d2l-0.17.6/.venv/bin/python3.11 +# -*- coding: utf-8 -*- +import re +import sys +from pip._internal.cli.main import main +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/d2l-0.17.6/.venv/bin/pip3 b/d2l-0.17.6/.venv/bin/pip3 new file mode 100755 index 000000000..c8a98bc58 --- /dev/null +++ b/d2l-0.17.6/.venv/bin/pip3 @@ -0,0 +1,8 @@ +#!/Users/wyc/Desktop/d2l-0.17.6/.venv/bin/python3.11 +# -*- coding: utf-8 -*- +import re +import sys +from pip._internal.cli.main import main +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/d2l-0.17.6/.venv/bin/pip3.11 b/d2l-0.17.6/.venv/bin/pip3.11 new file mode 100755 index 000000000..c8a98bc58 --- /dev/null +++ b/d2l-0.17.6/.venv/bin/pip3.11 @@ -0,0 +1,8 @@ +#!/Users/wyc/Desktop/d2l-0.17.6/.venv/bin/python3.11 +# -*- coding: utf-8 -*- +import re +import sys +from pip._internal.cli.main import main +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/d2l-0.17.6/.venv/bin/pygmentize b/d2l-0.17.6/.venv/bin/pygmentize new file mode 100755 index 000000000..77642492b --- /dev/null +++ b/d2l-0.17.6/.venv/bin/pygmentize @@ -0,0 +1,8 @@ +#!/Users/wyc/Desktop/d2l-0.17.6/.venv/bin/python3.11 +# -*- coding: utf-8 -*- +import re +import sys +from pygments.cmdline import main +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/d2l-0.17.6/.venv/bin/python b/d2l-0.17.6/.venv/bin/python new file mode 120000 index 000000000..6e7f3c7dd --- /dev/null +++ b/d2l-0.17.6/.venv/bin/python @@ -0,0 +1 @@ +python3.11 \ No newline at end of file diff --git a/d2l-0.17.6/.venv/bin/python3 b/d2l-0.17.6/.venv/bin/python3 new file mode 120000 index 000000000..6e7f3c7dd --- /dev/null +++ b/d2l-0.17.6/.venv/bin/python3 @@ -0,0 +1 @@ +python3.11 \ No newline at end of file diff --git a/d2l-0.17.6/.venv/bin/python3.11 b/d2l-0.17.6/.venv/bin/python3.11 new file mode 120000 index 000000000..2d1757773 --- /dev/null +++ b/d2l-0.17.6/.venv/bin/python3.11 @@ -0,0 +1 @@ +/Library/Frameworks/Python.framework/Versions/3.11/bin/python3.11 \ No newline at end of file diff --git a/d2l-0.17.6/.venv/bin/rst2html b/d2l-0.17.6/.venv/bin/rst2html new file mode 100755 index 000000000..12379b5da --- /dev/null +++ b/d2l-0.17.6/.venv/bin/rst2html @@ -0,0 +1,8 @@ +#!/Users/wyc/Desktop/d2l-0.17.6/.venv/bin/python3.11 +# -*- coding: utf-8 -*- +import re +import sys +from docutils.core import rst2html +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(rst2html()) diff --git a/d2l-0.17.6/.venv/bin/rst2html4 b/d2l-0.17.6/.venv/bin/rst2html4 new file mode 100755 index 000000000..42d491099 --- /dev/null +++ b/d2l-0.17.6/.venv/bin/rst2html4 @@ -0,0 +1,8 @@ +#!/Users/wyc/Desktop/d2l-0.17.6/.venv/bin/python3.11 +# -*- coding: utf-8 -*- +import re +import sys +from docutils.core import rst2html4 +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(rst2html4()) diff --git a/d2l-0.17.6/.venv/bin/rst2html5 b/d2l-0.17.6/.venv/bin/rst2html5 new file mode 100755 index 000000000..f2f01150e --- /dev/null +++ b/d2l-0.17.6/.venv/bin/rst2html5 @@ -0,0 +1,8 @@ +#!/Users/wyc/Desktop/d2l-0.17.6/.venv/bin/python3.11 +# -*- coding: utf-8 -*- +import re +import sys +from docutils.core import rst2html5 +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(rst2html5()) diff --git a/d2l-0.17.6/.venv/bin/rst2latex b/d2l-0.17.6/.venv/bin/rst2latex new file mode 100755 index 000000000..1eb2c61ca --- /dev/null +++ b/d2l-0.17.6/.venv/bin/rst2latex @@ -0,0 +1,8 @@ +#!/Users/wyc/Desktop/d2l-0.17.6/.venv/bin/python3.11 +# -*- coding: utf-8 -*- +import re +import sys +from docutils.core import rst2latex +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(rst2latex()) diff --git a/d2l-0.17.6/.venv/bin/rst2man b/d2l-0.17.6/.venv/bin/rst2man new file mode 100755 index 000000000..2c54deffb --- /dev/null +++ b/d2l-0.17.6/.venv/bin/rst2man @@ -0,0 +1,8 @@ +#!/Users/wyc/Desktop/d2l-0.17.6/.venv/bin/python3.11 +# -*- coding: utf-8 -*- +import re +import sys +from docutils.core import rst2man +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(rst2man()) diff --git a/d2l-0.17.6/.venv/bin/rst2odt b/d2l-0.17.6/.venv/bin/rst2odt new file mode 100755 index 000000000..af000aadd --- /dev/null +++ b/d2l-0.17.6/.venv/bin/rst2odt @@ -0,0 +1,8 @@ +#!/Users/wyc/Desktop/d2l-0.17.6/.venv/bin/python3.11 +# -*- coding: utf-8 -*- +import re +import sys +from docutils.core import rst2odt +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(rst2odt()) diff --git a/d2l-0.17.6/.venv/bin/rst2pseudoxml b/d2l-0.17.6/.venv/bin/rst2pseudoxml new file mode 100755 index 000000000..9461d3b88 --- /dev/null +++ b/d2l-0.17.6/.venv/bin/rst2pseudoxml @@ -0,0 +1,8 @@ +#!/Users/wyc/Desktop/d2l-0.17.6/.venv/bin/python3.11 +# -*- coding: utf-8 -*- +import re +import sys +from docutils.core import rst2pseudoxml +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(rst2pseudoxml()) diff --git a/d2l-0.17.6/.venv/bin/rst2s5 b/d2l-0.17.6/.venv/bin/rst2s5 new file mode 100755 index 000000000..395066942 --- /dev/null +++ b/d2l-0.17.6/.venv/bin/rst2s5 @@ -0,0 +1,8 @@ +#!/Users/wyc/Desktop/d2l-0.17.6/.venv/bin/python3.11 +# -*- coding: utf-8 -*- +import re +import sys +from docutils.core import rst2s5 +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(rst2s5()) diff --git a/d2l-0.17.6/.venv/bin/rst2xetex b/d2l-0.17.6/.venv/bin/rst2xetex new file mode 100755 index 000000000..12f60e655 --- /dev/null +++ b/d2l-0.17.6/.venv/bin/rst2xetex @@ -0,0 +1,8 @@ +#!/Users/wyc/Desktop/d2l-0.17.6/.venv/bin/python3.11 +# -*- coding: utf-8 -*- +import re +import sys +from docutils.core import rst2xetex +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(rst2xetex()) diff --git a/d2l-0.17.6/.venv/bin/rst2xml b/d2l-0.17.6/.venv/bin/rst2xml new file mode 100755 index 000000000..2b36abeb1 --- /dev/null +++ b/d2l-0.17.6/.venv/bin/rst2xml @@ -0,0 +1,8 @@ +#!/Users/wyc/Desktop/d2l-0.17.6/.venv/bin/python3.11 +# -*- coding: utf-8 -*- +import re +import sys +from docutils.core import rst2xml +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(rst2xml()) diff --git a/d2l-0.17.6/.venv/bin/twine b/d2l-0.17.6/.venv/bin/twine new file mode 100755 index 000000000..c33414e00 --- /dev/null +++ b/d2l-0.17.6/.venv/bin/twine @@ -0,0 +1,8 @@ +#!/Users/wyc/Desktop/d2l-0.17.6/.venv/bin/python3.11 +# -*- coding: utf-8 -*- +import re +import sys +from twine.__main__ import main +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/d2l-0.17.6/.venv/lib/python3.11/site-packages/_distutils_hack/__init__.py b/d2l-0.17.6/.venv/lib/python3.11/site-packages/_distutils_hack/__init__.py new file mode 100644 index 000000000..f987a5367 --- /dev/null +++ b/d2l-0.17.6/.venv/lib/python3.11/site-packages/_distutils_hack/__init__.py @@ -0,0 +1,222 @@ +# don't import any costly modules +import sys +import os + + +is_pypy = '__pypy__' in sys.builtin_module_names + + +def warn_distutils_present(): + if 'distutils' not in sys.modules: + return + if is_pypy and sys.version_info < (3, 7): + # PyPy for 3.6 unconditionally imports distutils, so bypass the warning + # https://foss.heptapod.net/pypy/pypy/-/blob/be829135bc0d758997b3566062999ee8b23872b4/lib-python/3/site.py#L250 + return + import warnings + + warnings.warn( + "Distutils was imported before Setuptools, but importing Setuptools " + "also replaces the `distutils` module in `sys.modules`. This may lead " + "to undesirable behaviors or errors. To avoid these issues, avoid " + "using distutils directly, ensure that setuptools is installed in the " + "traditional way (e.g. not an editable install), and/or make sure " + "that setuptools is always imported before distutils." + ) + + +def clear_distutils(): + if 'distutils' not in sys.modules: + return + import warnings + + warnings.warn("Setuptools is replacing distutils.") + mods = [ + name + for name in sys.modules + if name == "distutils" or name.startswith("distutils.") + ] + for name in mods: + del sys.modules[name] + + +def enabled(): + """ + Allow selection of distutils by environment variable. + """ + which = os.environ.get('SETUPTOOLS_USE_DISTUTILS', 'local') + return which == 'local' + + +def ensure_local_distutils(): + import importlib + + clear_distutils() + + # With the DistutilsMetaFinder in place, + # perform an import to cause distutils to be + # loaded from setuptools._distutils. Ref #2906. + with shim(): + importlib.import_module('distutils') + + # check that submodules load as expected + core = importlib.import_module('distutils.core') + assert '_distutils' in core.__file__, core.__file__ + assert 'setuptools._distutils.log' not in sys.modules + + +def do_override(): + """ + Ensure that the local copy of distutils is preferred over stdlib. + + See https://github.com/pypa/setuptools/issues/417#issuecomment-392298401 + for more motivation. + """ + if enabled(): + warn_distutils_present() + ensure_local_distutils() + + +class _TrivialRe: + def __init__(self, *patterns): + self._patterns = patterns + + def match(self, string): + return all(pat in string for pat in self._patterns) + + +class DistutilsMetaFinder: + def find_spec(self, fullname, path, target=None): + # optimization: only consider top level modules and those + # found in the CPython test suite. + if path is not None and not fullname.startswith('test.'): + return + + method_name = 'spec_for_{fullname}'.format(**locals()) + method = getattr(self, method_name, lambda: None) + return method() + + def spec_for_distutils(self): + if self.is_cpython(): + return + + import importlib + import importlib.abc + import importlib.util + + try: + mod = importlib.import_module('setuptools._distutils') + except Exception: + # There are a couple of cases where setuptools._distutils + # may not be present: + # - An older Setuptools without a local distutils is + # taking precedence. Ref #2957. + # - Path manipulation during sitecustomize removes + # setuptools from the path but only after the hook + # has been loaded. Ref #2980. + # In either case, fall back to stdlib behavior. + return + + class DistutilsLoader(importlib.abc.Loader): + def create_module(self, spec): + mod.__name__ = 'distutils' + return mod + + def exec_module(self, module): + pass + + return importlib.util.spec_from_loader( + 'distutils', DistutilsLoader(), origin=mod.__file__ + ) + + @staticmethod + def is_cpython(): + """ + Suppress supplying distutils for CPython (build and tests). + Ref #2965 and #3007. + """ + return os.path.isfile('pybuilddir.txt') + + def spec_for_pip(self): + """ + Ensure stdlib distutils when running under pip. + See pypa/pip#8761 for rationale. + """ + if self.pip_imported_during_build(): + return + clear_distutils() + self.spec_for_distutils = lambda: None + + @classmethod + def pip_imported_during_build(cls): + """ + Detect if pip is being imported in a build script. Ref #2355. + """ + import traceback + + return any( + cls.frame_file_is_setup(frame) for frame, line in traceback.walk_stack(None) + ) + + @staticmethod + def frame_file_is_setup(frame): + """ + Return True if the indicated frame suggests a setup.py file. + """ + # some frames may not have __file__ (#2940) + return frame.f_globals.get('__file__', '').endswith('setup.py') + + def spec_for_sensitive_tests(self): + """ + Ensure stdlib distutils when running select tests under CPython. + + python/cpython#91169 + """ + clear_distutils() + self.spec_for_distutils = lambda: None + + sensitive_tests = ( + [ + 'test.test_distutils', + 'test.test_peg_generator', + 'test.test_importlib', + ] + if sys.version_info < (3, 10) + else [ + 'test.test_distutils', + ] + ) + + +for name in DistutilsMetaFinder.sensitive_tests: + setattr( + DistutilsMetaFinder, + f'spec_for_{name}', + DistutilsMetaFinder.spec_for_sensitive_tests, + ) + + +DISTUTILS_FINDER = DistutilsMetaFinder() + + +def add_shim(): + DISTUTILS_FINDER in sys.meta_path or insert_shim() + + +class shim: + def __enter__(self): + insert_shim() + + def __exit__(self, exc, value, tb): + remove_shim() + + +def insert_shim(): + sys.meta_path.insert(0, DISTUTILS_FINDER) + + +def remove_shim(): + try: + sys.meta_path.remove(DISTUTILS_FINDER) + except ValueError: + pass diff --git a/d2l-0.17.6/.venv/lib/python3.11/site-packages/_distutils_hack/override.py b/d2l-0.17.6/.venv/lib/python3.11/site-packages/_distutils_hack/override.py new file mode 100644 index 000000000..2cc433a4a --- /dev/null +++ b/d2l-0.17.6/.venv/lib/python3.11/site-packages/_distutils_hack/override.py @@ -0,0 +1 @@ +__import__('_distutils_hack').do_override() diff --git a/d2l-0.17.6/.venv/lib/python3.11/site-packages/backports.tarfile-1.2.0.dist-info/INSTALLER b/d2l-0.17.6/.venv/lib/python3.11/site-packages/backports.tarfile-1.2.0.dist-info/INSTALLER new file mode 100644 index 000000000..a1b589e38 --- /dev/null +++ b/d2l-0.17.6/.venv/lib/python3.11/site-packages/backports.tarfile-1.2.0.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/d2l-0.17.6/.venv/lib/python3.11/site-packages/backports.tarfile-1.2.0.dist-info/LICENSE b/d2l-0.17.6/.venv/lib/python3.11/site-packages/backports.tarfile-1.2.0.dist-info/LICENSE new file mode 100644 index 000000000..1bb5a4435 --- /dev/null +++ b/d2l-0.17.6/.venv/lib/python3.11/site-packages/backports.tarfile-1.2.0.dist-info/LICENSE @@ -0,0 +1,17 @@ +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/d2l-0.17.6/.venv/lib/python3.11/site-packages/backports.tarfile-1.2.0.dist-info/METADATA b/d2l-0.17.6/.venv/lib/python3.11/site-packages/backports.tarfile-1.2.0.dist-info/METADATA new file mode 100644 index 000000000..db0a2dcdb --- /dev/null +++ b/d2l-0.17.6/.venv/lib/python3.11/site-packages/backports.tarfile-1.2.0.dist-info/METADATA @@ -0,0 +1,46 @@ +Metadata-Version: 2.1 +Name: backports.tarfile +Version: 1.2.0 +Summary: Backport of CPython tarfile module +Author-email: "Jason R. Coombs" +Project-URL: Homepage, https://github.com/jaraco/backports.tarfile +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: MIT License +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3 :: Only +Requires-Python: >=3.8 +Description-Content-Type: text/x-rst +License-File: LICENSE +Provides-Extra: docs +Requires-Dist: sphinx >=3.5 ; extra == 'docs' +Requires-Dist: jaraco.packaging >=9.3 ; extra == 'docs' +Requires-Dist: rst.linker >=1.9 ; extra == 'docs' +Requires-Dist: furo ; extra == 'docs' +Requires-Dist: sphinx-lint ; extra == 'docs' +Provides-Extra: testing +Requires-Dist: pytest !=8.1.*,>=6 ; extra == 'testing' +Requires-Dist: pytest-checkdocs >=2.4 ; extra == 'testing' +Requires-Dist: pytest-cov ; extra == 'testing' +Requires-Dist: pytest-enabler >=2.2 ; extra == 'testing' +Requires-Dist: jaraco.test ; extra == 'testing' +Requires-Dist: pytest !=8.0.* ; extra == 'testing' + +.. image:: https://img.shields.io/pypi/v/backports.tarfile.svg + :target: https://pypi.org/project/backports.tarfile + +.. image:: https://img.shields.io/pypi/pyversions/backports.tarfile.svg + +.. image:: https://github.com/jaraco/backports.tarfile/actions/workflows/main.yml/badge.svg + :target: https://github.com/jaraco/backports.tarfile/actions?query=workflow%3A%22tests%22 + :alt: tests + +.. image:: https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/charliermarsh/ruff/main/assets/badge/v2.json + :target: https://github.com/astral-sh/ruff + :alt: Ruff + +.. .. image:: https://readthedocs.org/projects/backportstarfile/badge/?version=latest +.. :target: https://backportstarfile.readthedocs.io/en/latest/?badge=latest + +.. image:: https://img.shields.io/badge/skeleton-2024-informational + :target: https://blog.jaraco.com/skeleton diff --git a/d2l-0.17.6/.venv/lib/python3.11/site-packages/backports.tarfile-1.2.0.dist-info/RECORD b/d2l-0.17.6/.venv/lib/python3.11/site-packages/backports.tarfile-1.2.0.dist-info/RECORD new file mode 100644 index 000000000..ed5d76d00 --- /dev/null +++ b/d2l-0.17.6/.venv/lib/python3.11/site-packages/backports.tarfile-1.2.0.dist-info/RECORD @@ -0,0 +1,16 @@ +backports.tarfile-1.2.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +backports.tarfile-1.2.0.dist-info/LICENSE,sha256=htoPAa6uRjSKPD1GUZXcHOzN55956HdppkuNoEsqR0E,1023 +backports.tarfile-1.2.0.dist-info/METADATA,sha256=ghXFTq132dxaEIolxr3HK1mZqm9iyUmaRANZQSr6WlE,2020 +backports.tarfile-1.2.0.dist-info/RECORD,, +backports.tarfile-1.2.0.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92 +backports.tarfile-1.2.0.dist-info/top_level.txt,sha256=cGjaLMOoBR1FK0ApojtzWVmViTtJ7JGIK_HwXiEsvtU,10 +backports/__init__.py,sha256=iOEMwnlORWezdO8-2vxBIPSR37D7JGjluZ8f55vzxls,81 +backports/__pycache__/__init__.cpython-311.pyc,, +backports/tarfile/__init__.py,sha256=Pwf2qUIfB0SolJPCKcx3vz3UEu_aids4g4sAfxy94qg,108491 +backports/tarfile/__main__.py,sha256=Yw2oGT1afrz2eBskzdPYL8ReB_3liApmhFkN2EbDmc4,59 +backports/tarfile/__pycache__/__init__.cpython-311.pyc,, +backports/tarfile/__pycache__/__main__.cpython-311.pyc,, +backports/tarfile/compat/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +backports/tarfile/compat/__pycache__/__init__.cpython-311.pyc,, +backports/tarfile/compat/__pycache__/py38.cpython-311.pyc,, +backports/tarfile/compat/py38.py,sha256=iYkyt_gvWjLzGUTJD9TuTfMMjOk-ersXZmRlvQYN2qE,568 diff --git a/d2l-0.17.6/.venv/lib/python3.11/site-packages/backports.tarfile-1.2.0.dist-info/WHEEL b/d2l-0.17.6/.venv/lib/python3.11/site-packages/backports.tarfile-1.2.0.dist-info/WHEEL new file mode 100644 index 000000000..bab98d675 --- /dev/null +++ b/d2l-0.17.6/.venv/lib/python3.11/site-packages/backports.tarfile-1.2.0.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.43.0) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/d2l-0.17.6/.venv/lib/python3.11/site-packages/backports.tarfile-1.2.0.dist-info/top_level.txt b/d2l-0.17.6/.venv/lib/python3.11/site-packages/backports.tarfile-1.2.0.dist-info/top_level.txt new file mode 100644 index 000000000..99d2be5b6 --- /dev/null +++ b/d2l-0.17.6/.venv/lib/python3.11/site-packages/backports.tarfile-1.2.0.dist-info/top_level.txt @@ -0,0 +1 @@ +backports diff --git a/d2l-0.17.6/.venv/lib/python3.11/site-packages/backports/__init__.py b/d2l-0.17.6/.venv/lib/python3.11/site-packages/backports/__init__.py new file mode 100644 index 000000000..0d1f7edf5 --- /dev/null +++ b/d2l-0.17.6/.venv/lib/python3.11/site-packages/backports/__init__.py @@ -0,0 +1 @@ +__path__ = __import__('pkgutil').extend_path(__path__, __name__) # type: ignore diff --git a/d2l-0.17.6/.venv/lib/python3.11/site-packages/backports/tarfile/__init__.py b/d2l-0.17.6/.venv/lib/python3.11/site-packages/backports/tarfile/__init__.py new file mode 100644 index 000000000..8c16881cb --- /dev/null +++ b/d2l-0.17.6/.venv/lib/python3.11/site-packages/backports/tarfile/__init__.py @@ -0,0 +1,2937 @@ +#------------------------------------------------------------------- +# tarfile.py +#------------------------------------------------------------------- +# Copyright (C) 2002 Lars Gustaebel +# All rights reserved. +# +# Permission is hereby granted, free of charge, to any person +# obtaining a copy of this software and associated documentation +# files (the "Software"), to deal in the Software without +# restriction, including without limitation the rights to use, +# copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following +# conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +# OTHER DEALINGS IN THE SOFTWARE. +# +"""Read from and write to tar format archives. +""" + +version = "0.9.0" +__author__ = "Lars Gust\u00e4bel (lars@gustaebel.de)" +__credits__ = "Gustavo Niemeyer, Niels Gust\u00e4bel, Richard Townsend." + +#--------- +# Imports +#--------- +from builtins import open as bltn_open +import sys +import os +import io +import shutil +import stat +import time +import struct +import copy +import re + +from .compat.py38 import removesuffix + +try: + import pwd +except ImportError: + pwd = None +try: + import grp +except ImportError: + grp = None + +# os.symlink on Windows prior to 6.0 raises NotImplementedError +# OSError (winerror=1314) will be raised if the caller does not hold the +# SeCreateSymbolicLinkPrivilege privilege +symlink_exception = (AttributeError, NotImplementedError, OSError) + +# from tarfile import * +__all__ = ["TarFile", "TarInfo", "is_tarfile", "TarError", "ReadError", + "CompressionError", "StreamError", "ExtractError", "HeaderError", + "ENCODING", "USTAR_FORMAT", "GNU_FORMAT", "PAX_FORMAT", + "DEFAULT_FORMAT", "open","fully_trusted_filter", "data_filter", + "tar_filter", "FilterError", "AbsoluteLinkError", + "OutsideDestinationError", "SpecialFileError", "AbsolutePathError", + "LinkOutsideDestinationError"] + + +#--------------------------------------------------------- +# tar constants +#--------------------------------------------------------- +NUL = b"\0" # the null character +BLOCKSIZE = 512 # length of processing blocks +RECORDSIZE = BLOCKSIZE * 20 # length of records +GNU_MAGIC = b"ustar \0" # magic gnu tar string +POSIX_MAGIC = b"ustar\x0000" # magic posix tar string + +LENGTH_NAME = 100 # maximum length of a filename +LENGTH_LINK = 100 # maximum length of a linkname +LENGTH_PREFIX = 155 # maximum length of the prefix field + +REGTYPE = b"0" # regular file +AREGTYPE = b"\0" # regular file +LNKTYPE = b"1" # link (inside tarfile) +SYMTYPE = b"2" # symbolic link +CHRTYPE = b"3" # character special device +BLKTYPE = b"4" # block special device +DIRTYPE = b"5" # directory +FIFOTYPE = b"6" # fifo special device +CONTTYPE = b"7" # contiguous file + +GNUTYPE_LONGNAME = b"L" # GNU tar longname +GNUTYPE_LONGLINK = b"K" # GNU tar longlink +GNUTYPE_SPARSE = b"S" # GNU tar sparse file + +XHDTYPE = b"x" # POSIX.1-2001 extended header +XGLTYPE = b"g" # POSIX.1-2001 global header +SOLARIS_XHDTYPE = b"X" # Solaris extended header + +USTAR_FORMAT = 0 # POSIX.1-1988 (ustar) format +GNU_FORMAT = 1 # GNU tar format +PAX_FORMAT = 2 # POSIX.1-2001 (pax) format +DEFAULT_FORMAT = PAX_FORMAT + +#--------------------------------------------------------- +# tarfile constants +#--------------------------------------------------------- +# File types that tarfile supports: +SUPPORTED_TYPES = (REGTYPE, AREGTYPE, LNKTYPE, + SYMTYPE, DIRTYPE, FIFOTYPE, + CONTTYPE, CHRTYPE, BLKTYPE, + GNUTYPE_LONGNAME, GNUTYPE_LONGLINK, + GNUTYPE_SPARSE) + +# File types that will be treated as a regular file. +REGULAR_TYPES = (REGTYPE, AREGTYPE, + CONTTYPE, GNUTYPE_SPARSE) + +# File types that are part of the GNU tar format. +GNU_TYPES = (GNUTYPE_LONGNAME, GNUTYPE_LONGLINK, + GNUTYPE_SPARSE) + +# Fields from a pax header that override a TarInfo attribute. +PAX_FIELDS = ("path", "linkpath", "size", "mtime", + "uid", "gid", "uname", "gname") + +# Fields from a pax header that are affected by hdrcharset. +PAX_NAME_FIELDS = {"path", "linkpath", "uname", "gname"} + +# Fields in a pax header that are numbers, all other fields +# are treated as strings. +PAX_NUMBER_FIELDS = { + "atime": float, + "ctime": float, + "mtime": float, + "uid": int, + "gid": int, + "size": int +} + +#--------------------------------------------------------- +# initialization +#--------------------------------------------------------- +if os.name == "nt": + ENCODING = "utf-8" +else: + ENCODING = sys.getfilesystemencoding() + +#--------------------------------------------------------- +# Some useful functions +#--------------------------------------------------------- + +def stn(s, length, encoding, errors): + """Convert a string to a null-terminated bytes object. + """ + if s is None: + raise ValueError("metadata cannot contain None") + s = s.encode(encoding, errors) + return s[:length] + (length - len(s)) * NUL + +def nts(s, encoding, errors): + """Convert a null-terminated bytes object to a string. + """ + p = s.find(b"\0") + if p != -1: + s = s[:p] + return s.decode(encoding, errors) + +def nti(s): + """Convert a number field to a python number. + """ + # There are two possible encodings for a number field, see + # itn() below. + if s[0] in (0o200, 0o377): + n = 0 + for i in range(len(s) - 1): + n <<= 8 + n += s[i + 1] + if s[0] == 0o377: + n = -(256 ** (len(s) - 1) - n) + else: + try: + s = nts(s, "ascii", "strict") + n = int(s.strip() or "0", 8) + except ValueError: + raise InvalidHeaderError("invalid header") + return n + +def itn(n, digits=8, format=DEFAULT_FORMAT): + """Convert a python number to a number field. + """ + # POSIX 1003.1-1988 requires numbers to be encoded as a string of + # octal digits followed by a null-byte, this allows values up to + # (8**(digits-1))-1. GNU tar allows storing numbers greater than + # that if necessary. A leading 0o200 or 0o377 byte indicate this + # particular encoding, the following digits-1 bytes are a big-endian + # base-256 representation. This allows values up to (256**(digits-1))-1. + # A 0o200 byte indicates a positive number, a 0o377 byte a negative + # number. + original_n = n + n = int(n) + if 0 <= n < 8 ** (digits - 1): + s = bytes("%0*o" % (digits - 1, n), "ascii") + NUL + elif format == GNU_FORMAT and -256 ** (digits - 1) <= n < 256 ** (digits - 1): + if n >= 0: + s = bytearray([0o200]) + else: + s = bytearray([0o377]) + n = 256 ** digits + n + + for i in range(digits - 1): + s.insert(1, n & 0o377) + n >>= 8 + else: + raise ValueError("overflow in number field") + + return s + +def calc_chksums(buf): + """Calculate the checksum for a member's header by summing up all + characters except for the chksum field which is treated as if + it was filled with spaces. According to the GNU tar sources, + some tars (Sun and NeXT) calculate chksum with signed char, + which will be different if there are chars in the buffer with + the high bit set. So we calculate two checksums, unsigned and + signed. + """ + unsigned_chksum = 256 + sum(struct.unpack_from("148B8x356B", buf)) + signed_chksum = 256 + sum(struct.unpack_from("148b8x356b", buf)) + return unsigned_chksum, signed_chksum + +def copyfileobj(src, dst, length=None, exception=OSError, bufsize=None): + """Copy length bytes from fileobj src to fileobj dst. + If length is None, copy the entire content. + """ + bufsize = bufsize or 16 * 1024 + if length == 0: + return + if length is None: + shutil.copyfileobj(src, dst, bufsize) + return + + blocks, remainder = divmod(length, bufsize) + for b in range(blocks): + buf = src.read(bufsize) + if len(buf) < bufsize: + raise exception("unexpected end of data") + dst.write(buf) + + if remainder != 0: + buf = src.read(remainder) + if len(buf) < remainder: + raise exception("unexpected end of data") + dst.write(buf) + return + +def _safe_print(s): + encoding = getattr(sys.stdout, 'encoding', None) + if encoding is not None: + s = s.encode(encoding, 'backslashreplace').decode(encoding) + print(s, end=' ') + + +class TarError(Exception): + """Base exception.""" + pass +class ExtractError(TarError): + """General exception for extract errors.""" + pass +class ReadError(TarError): + """Exception for unreadable tar archives.""" + pass +class CompressionError(TarError): + """Exception for unavailable compression methods.""" + pass +class StreamError(TarError): + """Exception for unsupported operations on stream-like TarFiles.""" + pass +class HeaderError(TarError): + """Base exception for header errors.""" + pass +class EmptyHeaderError(HeaderError): + """Exception for empty headers.""" + pass +class TruncatedHeaderError(HeaderError): + """Exception for truncated headers.""" + pass +class EOFHeaderError(HeaderError): + """Exception for end of file headers.""" + pass +class InvalidHeaderError(HeaderError): + """Exception for invalid headers.""" + pass +class SubsequentHeaderError(HeaderError): + """Exception for missing and invalid extended headers.""" + pass + +#--------------------------- +# internal stream interface +#--------------------------- +class _LowLevelFile: + """Low-level file object. Supports reading and writing. + It is used instead of a regular file object for streaming + access. + """ + + def __init__(self, name, mode): + mode = { + "r": os.O_RDONLY, + "w": os.O_WRONLY | os.O_CREAT | os.O_TRUNC, + }[mode] + if hasattr(os, "O_BINARY"): + mode |= os.O_BINARY + self.fd = os.open(name, mode, 0o666) + + def close(self): + os.close(self.fd) + + def read(self, size): + return os.read(self.fd, size) + + def write(self, s): + os.write(self.fd, s) + +class _Stream: + """Class that serves as an adapter between TarFile and + a stream-like object. The stream-like object only + needs to have a read() or write() method that works with bytes, + and the method is accessed blockwise. + Use of gzip or bzip2 compression is possible. + A stream-like object could be for example: sys.stdin.buffer, + sys.stdout.buffer, a socket, a tape device etc. + + _Stream is intended to be used only internally. + """ + + def __init__(self, name, mode, comptype, fileobj, bufsize, + compresslevel): + """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") from None + self.zlib = zlib + self.crc = zlib.crc32(b"") + if mode == "r": + self.exception = zlib.error + self._init_read_gz() + else: + self._init_write_gz(compresslevel) + + elif comptype == "bz2": + try: + import bz2 + except ImportError: + raise CompressionError("bz2 module is not available") from None + if mode == "r": + self.dbuf = b"" + self.cmp = bz2.BZ2Decompressor() + self.exception = OSError + else: + self.cmp = bz2.BZ2Compressor(compresslevel) + + elif comptype == "xz": + try: + import lzma + except ImportError: + raise CompressionError("lzma module is not available") from None + if mode == "r": + self.dbuf = b"" + self.cmp = lzma.LZMADecompressor() + self.exception = lzma.LZMAError + else: + self.cmp = lzma.LZMACompressor() + + elif comptype != "tar": + raise CompressionError("unknown compression type %r" % comptype) + + except: + if not self._extfileobj: + self.fileobj.close() + self.closed = True + raise + + def __del__(self): + if hasattr(self, "closed") and not self.closed: + self.close() + + def _init_write_gz(self, compresslevel): + """Initialize for writing with gzip compression. + """ + self.cmp = self.zlib.compressobj(compresslevel, + self.zlib.DEFLATED, + -self.zlib.MAX_WBITS, + self.zlib.DEF_MEM_LEVEL, + 0) + timestamp = struct.pack(" self.bufsize: + self.fileobj.write(self.buf[:self.bufsize]) + self.buf = self.buf[self.bufsize:] + + def close(self): + """Close the _Stream object. No operation should be + done on it afterwards. + """ + if self.closed: + return + + self.closed = True + try: + if self.mode == "w" and self.comptype != "tar": + self.buf += self.cmp.flush() + + if self.mode == "w" and self.buf: + self.fileobj.write(self.buf) + self.buf = b"" + if self.comptype == "gz": + self.fileobj.write(struct.pack("= 0: + blocks, remainder = divmod(pos - self.pos, self.bufsize) + for i in range(blocks): + self.read(self.bufsize) + self.read(remainder) + else: + raise StreamError("seeking backwards is not allowed") + return self.pos + + def read(self, size): + """Return the next size number of bytes from the stream.""" + assert size is not None + buf = self._read(size) + self.pos += len(buf) + return buf + + def _read(self, size): + """Return size bytes from the stream. + """ + if self.comptype == "tar": + return self.__read(size) + + c = len(self.dbuf) + t = [self.dbuf] + while c < size: + # Skip underlying buffer to avoid unaligned double buffering. + if self.buf: + buf = self.buf + self.buf = b"" + else: + buf = self.fileobj.read(self.bufsize) + if not buf: + break + try: + buf = self.cmp.decompress(buf) + except self.exception as e: + raise ReadError("invalid compressed data") from e + t.append(buf) + c += len(buf) + t = b"".join(t) + self.dbuf = t[size:] + return t[:size] + + def __read(self, size): + """Return size bytes from stream. If internal buffer is empty, + read another block from the stream. + """ + c = len(self.buf) + t = [self.buf] + while c < size: + buf = self.fileobj.read(self.bufsize) + if not buf: + break + t.append(buf) + c += len(buf) + t = b"".join(t) + self.buf = t[size:] + return t[:size] +# class _Stream + +class _StreamProxy(object): + """Small proxy class that enables transparent compression + detection for the Stream interface (mode 'r|*'). + """ + + def __init__(self, fileobj): + self.fileobj = fileobj + self.buf = self.fileobj.read(BLOCKSIZE) + + def read(self, size): + self.read = self.fileobj.read + return self.buf + + def getcomptype(self): + if self.buf.startswith(b"\x1f\x8b\x08"): + return "gz" + elif self.buf[0:3] == b"BZh" and self.buf[4:10] == b"1AY&SY": + return "bz2" + elif self.buf.startswith((b"\x5d\x00\x00\x80", b"\xfd7zXZ")): + return "xz" + else: + return "tar" + + def close(self): + self.fileobj.close() +# class StreamProxy + +#------------------------ +# Extraction file object +#------------------------ +class _FileInFile(object): + """A thin wrapper around an existing file object that + provides a part of its data as an individual file + object. + """ + + def __init__(self, fileobj, offset, size, name, blockinfo=None): + self.fileobj = fileobj + self.offset = offset + self.size = size + self.position = 0 + self.name = name + self.closed = False + + if blockinfo is None: + blockinfo = [(0, size)] + + # Construct a map with data and zero blocks. + self.map_index = 0 + self.map = [] + lastpos = 0 + realpos = self.offset + for offset, size in blockinfo: + if offset > lastpos: + self.map.append((False, lastpos, offset, None)) + self.map.append((True, offset, offset + size, realpos)) + realpos += size + lastpos = offset + size + if lastpos < self.size: + self.map.append((False, lastpos, self.size, None)) + + def flush(self): + pass + + @property + def mode(self): + return 'rb' + + def readable(self): + return True + + def writable(self): + return False + + def seekable(self): + return self.fileobj.seekable() + + def tell(self): + """Return the current file position. + """ + return self.position + + def seek(self, position, whence=io.SEEK_SET): + """Seek to a position in the file. + """ + if whence == io.SEEK_SET: + self.position = min(max(position, 0), self.size) + elif whence == io.SEEK_CUR: + if position < 0: + self.position = max(self.position + position, 0) + else: + self.position = min(self.position + position, self.size) + elif whence == io.SEEK_END: + self.position = max(min(self.size + position, self.size), 0) + else: + raise ValueError("Invalid argument") + return self.position + + def read(self, size=None): + """Read data from the file. + """ + if size is None: + size = self.size - self.position + else: + size = min(size, self.size - self.position) + + buf = b"" + while size > 0: + while True: + data, start, stop, offset = self.map[self.map_index] + if start <= self.position < stop: + break + else: + self.map_index += 1 + if self.map_index == len(self.map): + self.map_index = 0 + length = min(size, stop - self.position) + if data: + self.fileobj.seek(offset + (self.position - start)) + b = self.fileobj.read(length) + if len(b) != length: + raise ReadError("unexpected end of data") + buf += b + else: + buf += NUL * length + size -= length + self.position += length + return buf + + def readinto(self, b): + buf = self.read(len(b)) + b[:len(buf)] = buf + return len(buf) + + def close(self): + self.closed = True +#class _FileInFile + +class ExFileObject(io.BufferedReader): + + def __init__(self, tarfile, tarinfo): + fileobj = _FileInFile(tarfile.fileobj, tarinfo.offset_data, + tarinfo.size, tarinfo.name, tarinfo.sparse) + super().__init__(fileobj) +#class ExFileObject + + +#----------------------------- +# extraction filters (PEP 706) +#----------------------------- + +class FilterError(TarError): + pass + +class AbsolutePathError(FilterError): + def __init__(self, tarinfo): + self.tarinfo = tarinfo + super().__init__(f'member {tarinfo.name!r} has an absolute path') + +class OutsideDestinationError(FilterError): + def __init__(self, tarinfo, path): + self.tarinfo = tarinfo + self._path = path + super().__init__(f'{tarinfo.name!r} would be extracted to {path!r}, ' + + 'which is outside the destination') + +class SpecialFileError(FilterError): + def __init__(self, tarinfo): + self.tarinfo = tarinfo + super().__init__(f'{tarinfo.name!r} is a special file') + +class AbsoluteLinkError(FilterError): + def __init__(self, tarinfo): + self.tarinfo = tarinfo + super().__init__(f'{tarinfo.name!r} is a link to an absolute path') + +class LinkOutsideDestinationError(FilterError): + def __init__(self, tarinfo, path): + self.tarinfo = tarinfo + self._path = path + super().__init__(f'{tarinfo.name!r} would link to {path!r}, ' + + 'which is outside the destination') + +def _get_filtered_attrs(member, dest_path, for_data=True): + new_attrs = {} + name = member.name + dest_path = os.path.realpath(dest_path) + # Strip leading / (tar's directory separator) from filenames. + # Include os.sep (target OS directory separator) as well. + if name.startswith(('/', os.sep)): + name = new_attrs['name'] = member.path.lstrip('/' + os.sep) + if os.path.isabs(name): + # Path is absolute even after stripping. + # For example, 'C:/foo' on Windows. + raise AbsolutePathError(member) + # Ensure we stay in the destination + target_path = os.path.realpath(os.path.join(dest_path, name)) + if os.path.commonpath([target_path, dest_path]) != dest_path: + raise OutsideDestinationError(member, target_path) + # Limit permissions (no high bits, and go-w) + mode = member.mode + if mode is not None: + # Strip high bits & group/other write bits + mode = mode & 0o755 + if for_data: + # For data, handle permissions & file types + if member.isreg() or member.islnk(): + if not mode & 0o100: + # Clear executable bits if not executable by user + mode &= ~0o111 + # Ensure owner can read & write + mode |= 0o600 + elif member.isdir() or member.issym(): + # Ignore mode for directories & symlinks + mode = None + else: + # Reject special files + raise SpecialFileError(member) + if mode != member.mode: + new_attrs['mode'] = mode + if for_data: + # Ignore ownership for 'data' + if member.uid is not None: + new_attrs['uid'] = None + if member.gid is not None: + new_attrs['gid'] = None + if member.uname is not None: + new_attrs['uname'] = None + if member.gname is not None: + new_attrs['gname'] = None + # Check link destination for 'data' + if member.islnk() or member.issym(): + if os.path.isabs(member.linkname): + raise AbsoluteLinkError(member) + if member.issym(): + target_path = os.path.join(dest_path, + os.path.dirname(name), + member.linkname) + else: + target_path = os.path.join(dest_path, + member.linkname) + target_path = os.path.realpath(target_path) + if os.path.commonpath([target_path, dest_path]) != dest_path: + raise LinkOutsideDestinationError(member, target_path) + return new_attrs + +def fully_trusted_filter(member, dest_path): + return member + +def tar_filter(member, dest_path): + new_attrs = _get_filtered_attrs(member, dest_path, False) + if new_attrs: + return member.replace(**new_attrs, deep=False) + return member + +def data_filter(member, dest_path): + new_attrs = _get_filtered_attrs(member, dest_path, True) + if new_attrs: + return member.replace(**new_attrs, deep=False) + return member + +_NAMED_FILTERS = { + "fully_trusted": fully_trusted_filter, + "tar": tar_filter, + "data": data_filter, +} + +#------------------ +# Exported Classes +#------------------ + +# Sentinel for replace() defaults, meaning "don't change the attribute" +_KEEP = object() + +class TarInfo(object): + """Informational class which holds the details about an + archive member given by a tar header block. + TarInfo objects are returned by TarFile.getmember(), + TarFile.getmembers() and TarFile.gettarinfo() and are + usually created internally. + """ + + __slots__ = dict( + name = 'Name of the archive member.', + mode = 'Permission bits.', + uid = 'User ID of the user who originally stored this member.', + gid = 'Group ID of the user who originally stored this member.', + size = 'Size in bytes.', + mtime = 'Time of last modification.', + chksum = 'Header checksum.', + type = ('File type. type is usually one of these constants: ' + 'REGTYPE, AREGTYPE, LNKTYPE, SYMTYPE, DIRTYPE, FIFOTYPE, ' + 'CONTTYPE, CHRTYPE, BLKTYPE, GNUTYPE_SPARSE.'), + linkname = ('Name of the target file name, which is only present ' + 'in TarInfo objects of type LNKTYPE and SYMTYPE.'), + uname = 'User name.', + gname = 'Group name.', + devmajor = 'Device major number.', + devminor = 'Device minor number.', + offset = 'The tar header starts here.', + offset_data = "The file's data starts here.", + pax_headers = ('A dictionary containing key-value pairs of an ' + 'associated pax extended header.'), + sparse = 'Sparse member information.', + _tarfile = None, + _sparse_structs = None, + _link_target = None, + ) + + def __init__(self, name=""): + """Construct a TarInfo object. name is the optional name + of the member. + """ + self.name = name # member name + self.mode = 0o644 # file permissions + self.uid = 0 # user id + self.gid = 0 # group id + self.size = 0 # file size + self.mtime = 0 # modification time + self.chksum = 0 # header checksum + self.type = REGTYPE # member type + self.linkname = "" # link name + self.uname = "" # user name + self.gname = "" # group name + self.devmajor = 0 # device major number + self.devminor = 0 # device minor number + + self.offset = 0 # the tar header starts here + self.offset_data = 0 # the file's data starts here + + self.sparse = None # sparse member information + self.pax_headers = {} # pax header information + + @property + def tarfile(self): + import warnings + warnings.warn( + 'The undocumented "tarfile" attribute of TarInfo objects ' + + 'is deprecated and will be removed in Python 3.16', + DeprecationWarning, stacklevel=2) + return self._tarfile + + @tarfile.setter + def tarfile(self, tarfile): + import warnings + warnings.warn( + 'The undocumented "tarfile" attribute of TarInfo objects ' + + 'is deprecated and will be removed in Python 3.16', + DeprecationWarning, stacklevel=2) + self._tarfile = tarfile + + @property + def path(self): + 'In pax headers, "name" is called "path".' + return self.name + + @path.setter + def path(self, name): + self.name = name + + @property + def linkpath(self): + 'In pax headers, "linkname" is called "linkpath".' + return self.linkname + + @linkpath.setter + def linkpath(self, linkname): + self.linkname = linkname + + def __repr__(self): + return "<%s %r at %#x>" % (self.__class__.__name__,self.name,id(self)) + + def replace(self, *, + name=_KEEP, mtime=_KEEP, mode=_KEEP, linkname=_KEEP, + uid=_KEEP, gid=_KEEP, uname=_KEEP, gname=_KEEP, + deep=True, _KEEP=_KEEP): + """Return a deep copy of self with the given attributes replaced. + """ + if deep: + result = copy.deepcopy(self) + else: + result = copy.copy(self) + if name is not _KEEP: + result.name = name + if mtime is not _KEEP: + result.mtime = mtime + if mode is not _KEEP: + result.mode = mode + if linkname is not _KEEP: + result.linkname = linkname + if uid is not _KEEP: + result.uid = uid + if gid is not _KEEP: + result.gid = gid + if uname is not _KEEP: + result.uname = uname + if gname is not _KEEP: + result.gname = gname + return result + + def get_info(self): + """Return the TarInfo's attributes as a dictionary. + """ + if self.mode is None: + mode = None + else: + mode = self.mode & 0o7777 + info = { + "name": self.name, + "mode": mode, + "uid": self.uid, + "gid": self.gid, + "size": self.size, + "mtime": self.mtime, + "chksum": self.chksum, + "type": self.type, + "linkname": self.linkname, + "uname": self.uname, + "gname": self.gname, + "devmajor": self.devmajor, + "devminor": self.devminor + } + + if info["type"] == DIRTYPE and not info["name"].endswith("/"): + info["name"] += "/" + + return info + + def tobuf(self, format=DEFAULT_FORMAT, encoding=ENCODING, errors="surrogateescape"): + """Return a tar header as a string of 512 byte blocks. + """ + info = self.get_info() + for name, value in info.items(): + if value is None: + raise ValueError("%s may not be None" % name) + + if format == USTAR_FORMAT: + return self.create_ustar_header(info, encoding, errors) + elif format == GNU_FORMAT: + return self.create_gnu_header(info, encoding, errors) + elif format == PAX_FORMAT: + return self.create_pax_header(info, encoding) + else: + raise ValueError("invalid format") + + def create_ustar_header(self, info, encoding, errors): + """Return the object as a ustar header block. + """ + info["magic"] = POSIX_MAGIC + + if len(info["linkname"].encode(encoding, errors)) > LENGTH_LINK: + raise ValueError("linkname is too long") + + if len(info["name"].encode(encoding, errors)) > LENGTH_NAME: + info["prefix"], info["name"] = self._posix_split_name(info["name"], encoding, errors) + + return self._create_header(info, USTAR_FORMAT, encoding, errors) + + def create_gnu_header(self, info, encoding, errors): + """Return the object as a GNU header block sequence. + """ + info["magic"] = GNU_MAGIC + + buf = b"" + if len(info["linkname"].encode(encoding, errors)) > LENGTH_LINK: + buf += self._create_gnu_long_header(info["linkname"], GNUTYPE_LONGLINK, encoding, errors) + + if len(info["name"].encode(encoding, errors)) > LENGTH_NAME: + buf += self._create_gnu_long_header(info["name"], GNUTYPE_LONGNAME, encoding, errors) + + return buf + self._create_header(info, GNU_FORMAT, encoding, errors) + + def create_pax_header(self, info, encoding): + """Return the object as a ustar header block. If it cannot be + represented this way, prepend a pax extended header sequence + with supplement information. + """ + info["magic"] = POSIX_MAGIC + pax_headers = self.pax_headers.copy() + + # Test string fields for values that exceed the field length or cannot + # be represented in ASCII encoding. + for name, hname, length in ( + ("name", "path", LENGTH_NAME), ("linkname", "linkpath", LENGTH_LINK), + ("uname", "uname", 32), ("gname", "gname", 32)): + + if hname in pax_headers: + # The pax header has priority. + continue + + # Try to encode the string as ASCII. + try: + info[name].encode("ascii", "strict") + except UnicodeEncodeError: + pax_headers[hname] = info[name] + continue + + if len(info[name]) > length: + pax_headers[hname] = info[name] + + # Test number fields for values that exceed the field limit or values + # that like to be stored as float. + for name, digits in (("uid", 8), ("gid", 8), ("size", 12), ("mtime", 12)): + needs_pax = False + + val = info[name] + val_is_float = isinstance(val, float) + val_int = round(val) if val_is_float else val + if not 0 <= val_int < 8 ** (digits - 1): + # Avoid overflow. + info[name] = 0 + needs_pax = True + elif val_is_float: + # Put rounded value in ustar header, and full + # precision value in pax header. + info[name] = val_int + needs_pax = True + + # The existing pax header has priority. + if needs_pax and name not in pax_headers: + pax_headers[name] = str(val) + + # Create a pax extended header if necessary. + if pax_headers: + buf = self._create_pax_generic_header(pax_headers, XHDTYPE, encoding) + else: + buf = b"" + + return buf + self._create_header(info, USTAR_FORMAT, "ascii", "replace") + + @classmethod + def create_pax_global_header(cls, pax_headers): + """Return the object as a pax global header block sequence. + """ + return cls._create_pax_generic_header(pax_headers, XGLTYPE, "utf-8") + + def _posix_split_name(self, name, encoding, errors): + """Split a name longer than 100 chars into a prefix + and a name part. + """ + components = name.split("/") + for i in range(1, len(components)): + prefix = "/".join(components[:i]) + name = "/".join(components[i:]) + if len(prefix.encode(encoding, errors)) <= LENGTH_PREFIX and \ + len(name.encode(encoding, errors)) <= LENGTH_NAME: + break + else: + raise ValueError("name is too long") + + return prefix, name + + @staticmethod + def _create_header(info, format, encoding, errors): + """Return a header block. info is a dictionary with file + information, format must be one of the *_FORMAT constants. + """ + has_device_fields = info.get("type") in (CHRTYPE, BLKTYPE) + if has_device_fields: + devmajor = itn(info.get("devmajor", 0), 8, format) + devminor = itn(info.get("devminor", 0), 8, format) + else: + devmajor = stn("", 8, encoding, errors) + devminor = stn("", 8, encoding, errors) + + # None values in metadata should cause ValueError. + # itn()/stn() do this for all fields except type. + filetype = info.get("type", REGTYPE) + if filetype is None: + raise ValueError("TarInfo.type must not be None") + + parts = [ + stn(info.get("name", ""), 100, encoding, errors), + itn(info.get("mode", 0) & 0o7777, 8, format), + itn(info.get("uid", 0), 8, format), + itn(info.get("gid", 0), 8, format), + itn(info.get("size", 0), 12, format), + itn(info.get("mtime", 0), 12, format), + b" ", # checksum field + filetype, + stn(info.get("linkname", ""), 100, encoding, errors), + info.get("magic", POSIX_MAGIC), + stn(info.get("uname", ""), 32, encoding, errors), + stn(info.get("gname", ""), 32, encoding, errors), + devmajor, + devminor, + stn(info.get("prefix", ""), 155, encoding, errors) + ] + + buf = struct.pack("%ds" % BLOCKSIZE, b"".join(parts)) + chksum = calc_chksums(buf[-BLOCKSIZE:])[0] + buf = buf[:-364] + bytes("%06o\0" % chksum, "ascii") + buf[-357:] + return buf + + @staticmethod + def _create_payload(payload): + """Return the string payload filled with zero bytes + up to the next 512 byte border. + """ + blocks, remainder = divmod(len(payload), BLOCKSIZE) + if remainder > 0: + payload += (BLOCKSIZE - remainder) * NUL + return payload + + @classmethod + def _create_gnu_long_header(cls, name, type, encoding, errors): + """Return a GNUTYPE_LONGNAME or GNUTYPE_LONGLINK sequence + for name. + """ + name = name.encode(encoding, errors) + NUL + + info = {} + info["name"] = "././@LongLink" + info["type"] = type + info["size"] = len(name) + info["magic"] = GNU_MAGIC + + # create extended header + name blocks. + return cls._create_header(info, USTAR_FORMAT, encoding, errors) + \ + cls._create_payload(name) + + @classmethod + def _create_pax_generic_header(cls, pax_headers, type, encoding): + """Return a POSIX.1-2008 extended or global header sequence + that contains a list of keyword, value pairs. The values + must be strings. + """ + # Check if one of the fields contains surrogate characters and thereby + # forces hdrcharset=BINARY, see _proc_pax() for more information. + binary = False + for keyword, value in pax_headers.items(): + try: + value.encode("utf-8", "strict") + except UnicodeEncodeError: + binary = True + break + + records = b"" + if binary: + # Put the hdrcharset field at the beginning of the header. + records += b"21 hdrcharset=BINARY\n" + + for keyword, value in pax_headers.items(): + keyword = keyword.encode("utf-8") + if binary: + # Try to restore the original byte representation of 'value'. + # Needless to say, that the encoding must match the string. + value = value.encode(encoding, "surrogateescape") + else: + value = value.encode("utf-8") + + l = len(keyword) + len(value) + 3 # ' ' + '=' + '\n' + n = p = 0 + while True: + n = l + len(str(p)) + if n == p: + break + p = n + records += bytes(str(p), "ascii") + b" " + keyword + b"=" + value + b"\n" + + # We use a hardcoded "././@PaxHeader" name like star does + # instead of the one that POSIX recommends. + info = {} + info["name"] = "././@PaxHeader" + info["type"] = type + info["size"] = len(records) + info["magic"] = POSIX_MAGIC + + # Create pax header + record blocks. + return cls._create_header(info, USTAR_FORMAT, "ascii", "replace") + \ + cls._create_payload(records) + + @classmethod + def frombuf(cls, buf, encoding, errors): + """Construct a TarInfo object from a 512 byte bytes object. + """ + 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 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) + + # Remove redundant slashes from directories. This is to be consistent + # with frombuf(). + if self.isdir(): + self.name = self.name.rstrip("/") + + return self + + def _proc_gnulong(self, tarfile): + """Process the blocks that hold a GNU longname + or longlink member. + """ + buf = tarfile.fileobj.read(self._block(self.size)) + + # Fetch the next header and process it. + try: + next = self.fromtarfile(tarfile) + except HeaderError as e: + raise SubsequentHeaderError(str(e)) from None + + # Patch the TarInfo object from the next header with + # the longname information. + next.offset = self.offset + if self.type == GNUTYPE_LONGNAME: + next.name = nts(buf, tarfile.encoding, tarfile.errors) + elif self.type == GNUTYPE_LONGLINK: + next.linkname = nts(buf, tarfile.encoding, tarfile.errors) + + # Remove redundant slashes from directories. This is to be consistent + # with frombuf(). + if next.isdir(): + next.name = removesuffix(next.name, "/") + + 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("utf-8") + + # 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 = "utf-8" + + # 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 match := regex.match(buf, pos): + length, keyword = match.groups() + length = int(length) + if length == 0: + raise InvalidHeaderError("invalid header") + value = buf[match.end(2) + 1:match.start(1) + length - 1] + + # Normally, we could just use "utf-8" as the encoding and "strict" + # as the error handler, but we better not take the risk. For + # example, GNU tar <= 1.23 is known to store filenames it cannot + # translate to UTF-8 as raw strings (unfortunately without a + # hdrcharset=BINARY header). + # We first try the strict standard encoding, and if that fails we + # fall back on the user's encoding and error handler. + keyword = self._decode_pax_field(keyword, "utf-8", "utf-8", + 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, "utf-8", "utf-8", + tarfile.errors) + + pax_headers[keyword] = value + pos += length + + # Fetch the next header. + try: + next = self.fromtarfile(tarfile) + except HeaderError as e: + raise SubsequentHeaderError(str(e)) from None + + # Process GNU sparse information. + if "GNU.sparse.map" in pax_headers: + # GNU extended sparse format version 0.1. + self._proc_gnusparse_01(next, pax_headers) + + elif "GNU.sparse.size" in pax_headers: + # GNU extended sparse format version 0.0. + self._proc_gnusparse_00(next, 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 True if the Tarinfo object is a regular file.' + return self.type in REGULAR_TYPES + + def isfile(self): + 'Return True if the Tarinfo object is a regular file.' + return self.isreg() + + def isdir(self): + 'Return True if it is a directory.' + return self.type == DIRTYPE + + def issym(self): + 'Return True if it is a symbolic link.' + return self.type == SYMTYPE + + def islnk(self): + 'Return True if it is a hard link.' + return self.type == LNKTYPE + + def ischr(self): + 'Return True if it is a character device.' + return self.type == CHRTYPE + + def isblk(self): + 'Return True if it is a block device.' + return self.type == BLKTYPE + + def isfifo(self): + 'Return True if it is a FIFO.' + return self.type == FIFOTYPE + + def issparse(self): + return self.sparse is not None + + def isdev(self): + 'Return True if it is one of character device, block device or FIFO.' + return self.type in (CHRTYPE, BLKTYPE, FIFOTYPE) +# class TarInfo + +class TarFile(object): + """The TarFile Class provides an interface to tar archives. + """ + + debug = 0 # May be set from 0 (no msgs) to 3 (all msgs) + + dereference = False # If true, add content of linked file to the + # tar file, else the link. + + ignore_zeros = False # If true, skips empty or invalid blocks and + # continues processing. + + errorlevel = 1 # If 0, fatal errors only appear in debug + # messages (if debug >= 0). If > 0, errors + # are passed to the caller as exceptions. + + format = DEFAULT_FORMAT # The format to use when creating an archive. + + encoding = ENCODING # Encoding for 8-bit character strings. + + errors = None # Error handler for unicode conversion. + + tarinfo = TarInfo # The default TarInfo class to use. + + fileobject = ExFileObject # The file-object for extractfile(). + + extraction_filter = None # The default filter for extraction. + + def __init__(self, name=None, mode="r", fileobj=None, format=None, + tarinfo=None, dereference=None, ignore_zeros=None, encoding=None, + errors="surrogateescape", pax_headers=None, debug=None, + errorlevel=None, copybufsize=None, stream=False): + """Open an (uncompressed) tar archive 'name'. 'mode' is either 'r' to + read from an existing archive, 'a' to append data to an existing + file or 'w' to create a new file overwriting an existing one. 'mode' + defaults to 'r'. + If 'fileobj' is given, it is used for reading or writing data. If it + can be determined, 'mode' is overridden by 'fileobj's mode. + 'fileobj' is not closed, when TarFile is closed. + """ + modes = {"r": "rb", "a": "r+b", "w": "wb", "x": "xb"} + if mode not in modes: + raise ValueError("mode must be 'r', 'a', 'w' or 'x'") + self.mode = mode + self._mode = modes[mode] + + if not fileobj: + if self.mode == "a" and not os.path.exists(name): + # Create nonexistent files in append mode. + self.mode = "w" + self._mode = "wb" + fileobj = bltn_open(name, self._mode) + self._extfileobj = False + else: + if (name is None and hasattr(fileobj, "name") and + isinstance(fileobj.name, (str, bytes))): + name = fileobj.name + if hasattr(fileobj, "mode"): + self._mode = fileobj.mode + self._extfileobj = True + self.name = os.path.abspath(name) if name else None + self.fileobj = fileobj + + self.stream = stream + + # Init attributes. + if format is not None: + self.format = format + if tarinfo is not None: + self.tarinfo = tarinfo + if dereference is not None: + self.dereference = dereference + if ignore_zeros is not None: + self.ignore_zeros = ignore_zeros + if encoding is not None: + self.encoding = encoding + self.errors = errors + + if pax_headers is not None and self.format == PAX_FORMAT: + self.pax_headers = pax_headers + else: + self.pax_headers = {} + + if debug is not None: + self.debug = debug + if errorlevel is not None: + self.errorlevel = errorlevel + + # Init datastructures. + self.copybufsize = copybufsize + self.closed = False + self.members = [] # list of members as TarInfo objects + self._loaded = False # flag if all members have been read + self.offset = self.fileobj.tell() + # current position in the archive file + self.inodes = {} # dictionary caching the inodes of + # archive members already added + + try: + if self.mode == "r": + self.firstmember = None + self.firstmember = self.next() + + if self.mode == "a": + # Move to the end of the archive, + # before the first empty block. + while True: + self.fileobj.seek(self.offset) + try: + tarinfo = self.tarinfo.fromtarfile(self) + self.members.append(tarinfo) + except EOFHeaderError: + self.fileobj.seek(self.offset) + break + except HeaderError as e: + raise ReadError(str(e)) from None + + if self.mode in ("a", "w", "x"): + self._loaded = True + + if self.pax_headers: + buf = self.tarinfo.create_pax_global_header(self.pax_headers.copy()) + self.fileobj.write(buf) + self.offset += len(buf) + except: + if not self._extfileobj: + self.fileobj.close() + self.closed = True + raise + + #-------------------------------------------------------------------------- + # Below are the classmethods which act as alternate constructors to the + # TarFile class. The open() method is the only one that is needed for + # public use; it is the "super"-constructor and is able to select an + # adequate "sub"-constructor for a particular compression using the mapping + # from OPEN_METH. + # + # This concept allows one to subclass TarFile without losing the comfort of + # the super-constructor. A sub-constructor is registered and made available + # by adding it to the mapping in OPEN_METH. + + @classmethod + def open(cls, name=None, mode="r", fileobj=None, bufsize=RECORDSIZE, **kwargs): + r"""Open a tar archive for reading, writing or appending. Return + an appropriate TarFile class. + + mode: + 'r' or 'r:\*' open for reading with transparent compression + 'r:' open for reading exclusively uncompressed + 'r:gz' open for reading with gzip compression + 'r:bz2' open for reading with bzip2 compression + 'r:xz' open for reading with lzma compression + 'a' or 'a:' open for appending, creating the file if necessary + 'w' or 'w:' open for writing without compression + 'w:gz' open for writing with gzip compression + 'w:bz2' open for writing with bzip2 compression + 'w:xz' open for writing with lzma compression + + 'x' or 'x:' create a tarfile exclusively without compression, raise + an exception if the file is already created + 'x:gz' create a gzip compressed tarfile, raise an exception + if the file is already created + 'x:bz2' create a bzip2 compressed tarfile, raise an exception + if the file is already created + 'x:xz' create an lzma compressed tarfile, raise an exception + if the file is already created + + 'r|\*' open a stream of tar blocks with transparent compression + 'r|' open an uncompressed stream of tar blocks for reading + 'r|gz' open a gzip compressed stream of tar blocks + 'r|bz2' open a bzip2 compressed stream of tar blocks + 'r|xz' open an lzma compressed stream of tar blocks + 'w|' open an uncompressed stream for writing + 'w|gz' open a gzip compressed stream for writing + 'w|bz2' open a bzip2 compressed stream for writing + 'w|xz' open an lzma compressed stream for writing + """ + + if not name and not fileobj: + raise ValueError("nothing to open") + + if mode in ("r", "r:*"): + # Find out which *open() is appropriate for opening the file. + def not_compressed(comptype): + return cls.OPEN_METH[comptype] == 'taropen' + error_msgs = [] + for comptype in sorted(cls.OPEN_METH, key=not_compressed): + func = getattr(cls, cls.OPEN_METH[comptype]) + if fileobj is not None: + saved_pos = fileobj.tell() + try: + return func(name, "r", fileobj, **kwargs) + except (ReadError, CompressionError) as e: + error_msgs.append(f'- method {comptype}: {e!r}') + if fileobj is not None: + fileobj.seek(saved_pos) + continue + error_msgs_summary = '\n'.join(error_msgs) + raise ReadError(f"file could not be opened successfully:\n{error_msgs_summary}") + + elif ":" in mode: + filemode, comptype = mode.split(":", 1) + filemode = filemode or "r" + comptype = comptype or "tar" + + # Select the *open() function according to + # given compression. + if comptype in cls.OPEN_METH: + func = getattr(cls, cls.OPEN_METH[comptype]) + else: + raise CompressionError("unknown compression type %r" % comptype) + return func(name, filemode, fileobj, **kwargs) + + elif "|" in mode: + filemode, comptype = mode.split("|", 1) + filemode = filemode or "r" + comptype = comptype or "tar" + + if filemode not in ("r", "w"): + raise ValueError("mode must be 'r' or 'w'") + + compresslevel = kwargs.pop("compresslevel", 9) + stream = _Stream(name, filemode, comptype, fileobj, bufsize, + compresslevel) + try: + t = cls(name, filemode, stream, **kwargs) + except: + stream.close() + raise + t._extfileobj = False + return t + + elif mode in ("a", "w", "x"): + return cls.taropen(name, mode, fileobj, **kwargs) + + raise ValueError("undiscernible mode") + + @classmethod + def taropen(cls, name, mode="r", fileobj=None, **kwargs): + """Open uncompressed tar archive name for reading or writing. + """ + if mode not in ("r", "a", "w", "x"): + raise ValueError("mode must be 'r', 'a', 'w' or 'x'") + return cls(name, mode, fileobj, **kwargs) + + @classmethod + def gzopen(cls, name, mode="r", fileobj=None, compresslevel=9, **kwargs): + """Open gzip compressed tar archive name for reading or writing. + Appending is not allowed. + """ + if mode not in ("r", "w", "x"): + raise ValueError("mode must be 'r', 'w' or 'x'") + + try: + from gzip import GzipFile + except ImportError: + raise CompressionError("gzip module is not available") from None + + try: + fileobj = GzipFile(name, mode + "b", compresslevel, fileobj) + except OSError as e: + if fileobj is not None and mode == 'r': + raise ReadError("not a gzip file") from e + raise + + try: + t = cls.taropen(name, mode, fileobj, **kwargs) + except OSError as e: + fileobj.close() + if mode == 'r': + raise ReadError("not a gzip file") from e + raise + except: + fileobj.close() + raise + t._extfileobj = False + return t + + @classmethod + def bz2open(cls, name, mode="r", fileobj=None, compresslevel=9, **kwargs): + """Open bzip2 compressed tar archive name for reading or writing. + Appending is not allowed. + """ + if mode not in ("r", "w", "x"): + raise ValueError("mode must be 'r', 'w' or 'x'") + + try: + from bz2 import BZ2File + except ImportError: + raise CompressionError("bz2 module is not available") from None + + fileobj = BZ2File(fileobj or name, mode, compresslevel=compresslevel) + + try: + t = cls.taropen(name, mode, fileobj, **kwargs) + except (OSError, EOFError) as e: + fileobj.close() + if mode == 'r': + raise ReadError("not a bzip2 file") from e + raise + except: + fileobj.close() + raise + t._extfileobj = False + return t + + @classmethod + def xzopen(cls, name, mode="r", fileobj=None, preset=None, **kwargs): + """Open lzma compressed tar archive name for reading or writing. + Appending is not allowed. + """ + if mode not in ("r", "w", "x"): + raise ValueError("mode must be 'r', 'w' or 'x'") + + try: + from lzma import LZMAFile, LZMAError + except ImportError: + raise CompressionError("lzma module is not available") from None + + fileobj = LZMAFile(fileobj or name, mode, preset=preset) + + try: + t = cls.taropen(name, mode, fileobj, **kwargs) + except (LZMAError, EOFError) as e: + fileobj.close() + if mode == 'r': + raise ReadError("not an lzma file") from e + raise + except: + fileobj.close() + raise + t._extfileobj = False + return t + + # All *open() methods are registered here. + OPEN_METH = { + "tar": "taropen", # uncompressed tar + "gz": "gzopen", # gzip compressed tar + "bz2": "bz2open", # bzip2 compressed tar + "xz": "xzopen" # lzma compressed tar + } + + #-------------------------------------------------------------------------- + # The public methods which TarFile provides: + + def close(self): + """Close the TarFile. In write-mode, two finishing zero blocks are + appended to the archive. + """ + if self.closed: + return + + self.closed = True + try: + if self.mode in ("a", "w", "x"): + self.fileobj.write(NUL * (BLOCKSIZE * 2)) + self.offset += (BLOCKSIZE * 2) + # fill up the end with zero-blocks + # (like option -b20 for tar does) + blocks, remainder = divmod(self.offset, RECORDSIZE) + if remainder > 0: + self.fileobj.write(NUL * (RECORDSIZE - remainder)) + finally: + if not self._extfileobj: + self.fileobj.close() + + def getmember(self, name): + """Return a TarInfo object for member 'name'. If 'name' can not be + found in the archive, KeyError is raised. If a member occurs more + than once in the archive, its last occurrence is assumed to be the + most up-to-date version. + """ + tarinfo = self._getmember(name.rstrip('/')) + if tarinfo is None: + raise KeyError("filename %r not found" % name) + return tarinfo + + def getmembers(self): + """Return the members of the archive as a list of TarInfo objects. The + list has the same order as the members in the archive. + """ + self._check() + if not self._loaded: # if we want to obtain a list of + self._load() # all members, we first have to + # scan the whole archive. + return self.members + + def getnames(self): + """Return the members of the archive as a list of their names. It has + the same order as the list returned by getmembers(). + """ + return [tarinfo.name for tarinfo in self.getmembers()] + + def gettarinfo(self, name=None, arcname=None, fileobj=None): + """Create a TarInfo object from the result of os.stat or equivalent + on an existing file. The file is either named by 'name', or + specified as a file object 'fileobj' with a file descriptor. If + given, 'arcname' specifies an alternative name for the file in the + archive, otherwise, the name is taken from the 'name' attribute of + 'fileobj', or the 'name' argument. The name should be a text + string. + """ + self._check("awx") + + # When fileobj is given, replace name by + # fileobj's real name. + if fileobj is not None: + name = fileobj.name + + # Building the name of the member in the archive. + # Backward slashes are converted to forward slashes, + # Absolute paths are turned to relative paths. + if arcname is None: + arcname = name + drv, arcname = os.path.splitdrive(arcname) + arcname = arcname.replace(os.sep, "/") + arcname = arcname.lstrip("/") + + # Now, fill the TarInfo object with + # information specific for the file. + tarinfo = self.tarinfo() + tarinfo._tarfile = self # To be removed in 3.16. + + # Use os.stat or os.lstat, depending on if symlinks shall be resolved. + if fileobj is None: + if not self.dereference: + statres = os.lstat(name) + else: + statres = os.stat(name) + else: + statres = os.fstat(fileobj.fileno()) + linkname = "" + + stmd = statres.st_mode + if stat.S_ISREG(stmd): + inode = (statres.st_ino, statres.st_dev) + if not self.dereference and statres.st_nlink > 1 and \ + inode in self.inodes and arcname != self.inodes[inode]: + # Is it a hardlink to an already + # archived file? + type = LNKTYPE + linkname = self.inodes[inode] + else: + # The inode is added only if its valid. + # For win32 it is always 0. + type = REGTYPE + if inode[0]: + self.inodes[inode] = arcname + elif stat.S_ISDIR(stmd): + type = DIRTYPE + elif stat.S_ISFIFO(stmd): + type = FIFOTYPE + elif stat.S_ISLNK(stmd): + type = SYMTYPE + linkname = os.readlink(name) + elif stat.S_ISCHR(stmd): + type = CHRTYPE + elif stat.S_ISBLK(stmd): + type = BLKTYPE + else: + return None + + # Fill the TarInfo object with all + # information we can get. + tarinfo.name = arcname + tarinfo.mode = stmd + tarinfo.uid = statres.st_uid + tarinfo.gid = statres.st_gid + if type == REGTYPE: + tarinfo.size = statres.st_size + else: + tarinfo.size = 0 + tarinfo.mtime = statres.st_mtime + tarinfo.type = type + tarinfo.linkname = linkname + 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, *, members=None): + """Print a table of contents to sys.stdout. If 'verbose' is False, only + the names of the members are printed. If it is True, an 'ls -l'-like + output is produced. 'members' is optional and must be a subset of the + list returned by getmembers(). + """ + # Convert tarinfo type to stat type. + type2mode = {REGTYPE: stat.S_IFREG, SYMTYPE: stat.S_IFLNK, + FIFOTYPE: stat.S_IFIFO, CHRTYPE: stat.S_IFCHR, + DIRTYPE: stat.S_IFDIR, BLKTYPE: stat.S_IFBLK} + self._check() + + if members is None: + members = self + for tarinfo in members: + if verbose: + if tarinfo.mode is None: + _safe_print("??????????") + else: + modetype = type2mode.get(tarinfo.type, 0) + _safe_print(stat.filemode(modetype | tarinfo.mode)) + _safe_print("%s/%s" % (tarinfo.uname or tarinfo.uid, + tarinfo.gname or tarinfo.gid)) + if tarinfo.ischr() or tarinfo.isblk(): + _safe_print("%10s" % + ("%d,%d" % (tarinfo.devmajor, tarinfo.devminor))) + else: + _safe_print("%10d" % tarinfo.size) + if tarinfo.mtime is None: + _safe_print("????-??-?? ??:??:??") + else: + _safe_print("%d-%02d-%02d %02d:%02d:%02d" \ + % time.localtime(tarinfo.mtime)[:6]) + + _safe_print(tarinfo.name + ("/" if tarinfo.isdir() else "")) + + if verbose: + if tarinfo.issym(): + _safe_print("-> " + tarinfo.linkname) + if tarinfo.islnk(): + _safe_print("link to " + tarinfo.linkname) + print() + + def add(self, name, arcname=None, recursive=True, *, filter=None): + """Add the file 'name' to the archive. 'name' may be any type of file + (directory, fifo, symbolic link, etc.). If given, 'arcname' + specifies an alternative name for the file in the archive. + Directories are added recursively by default. This can be avoided by + setting 'recursive' to False. 'filter' is a function + that expects a TarInfo object argument and returns the changed + TarInfo object, if it returns None the TarInfo object will be + excluded from the archive. + """ + self._check("awx") + + if arcname is None: + arcname = name + + # Skip if somebody tries to archive the archive... + if self.name is not None and os.path.abspath(name) == self.name: + self._dbg(2, "tarfile: Skipped %r" % name) + return + + self._dbg(1, name) + + # Create a TarInfo object from the file. + tarinfo = self.gettarinfo(name, arcname) + + if tarinfo is None: + self._dbg(1, "tarfile: Unsupported type %r" % name) + return + + # Change or exclude the TarInfo object. + if filter is not None: + tarinfo = filter(tarinfo) + if tarinfo is None: + self._dbg(2, "tarfile: Excluded %r" % name) + return + + # Append the tar header and data to the archive. + if tarinfo.isreg(): + with bltn_open(name, "rb") as f: + self.addfile(tarinfo, f) + + elif tarinfo.isdir(): + self.addfile(tarinfo) + if recursive: + for f in sorted(os.listdir(name)): + self.add(os.path.join(name, f), os.path.join(arcname, f), + recursive, filter=filter) + + else: + self.addfile(tarinfo) + + def addfile(self, tarinfo, fileobj=None): + """Add the TarInfo object 'tarinfo' to the archive. If 'tarinfo' represents + a non zero-size regular file, the 'fileobj' argument should be a binary file, + and tarinfo.size bytes are read from it and added to the archive. + You can create TarInfo objects directly, or by using gettarinfo(). + """ + self._check("awx") + + if fileobj is None and tarinfo.isreg() and tarinfo.size != 0: + raise ValueError("fileobj not provided for non zero-size regular file") + + tarinfo = copy.copy(tarinfo) + + buf = tarinfo.tobuf(self.format, self.encoding, self.errors) + self.fileobj.write(buf) + self.offset += len(buf) + bufsize=self.copybufsize + # If there's data to follow, append it. + if fileobj is not None: + copyfileobj(fileobj, self.fileobj, tarinfo.size, bufsize=bufsize) + blocks, remainder = divmod(tarinfo.size, BLOCKSIZE) + if remainder > 0: + self.fileobj.write(NUL * (BLOCKSIZE - remainder)) + blocks += 1 + self.offset += blocks * BLOCKSIZE + + self.members.append(tarinfo) + + def _get_filter_function(self, filter): + if filter is None: + filter = self.extraction_filter + if filter is None: + import warnings + warnings.warn( + 'Python 3.14 will, by default, filter extracted tar ' + + 'archives and reject files or modify their metadata. ' + + 'Use the filter argument to control this behavior.', + DeprecationWarning, stacklevel=3) + return fully_trusted_filter + if isinstance(filter, str): + raise TypeError( + 'String names are not supported for ' + + 'TarFile.extraction_filter. Use a function such as ' + + 'tarfile.data_filter directly.') + return filter + if callable(filter): + return filter + try: + return _NAMED_FILTERS[filter] + except KeyError: + raise ValueError(f"filter {filter!r} not found") from None + + def extractall(self, path=".", members=None, *, numeric_owner=False, + filter=None): + """Extract all members from the archive to the current working + directory and set owner, modification time and permissions on + directories afterwards. 'path' specifies a different directory + to extract to. 'members' is optional and must be a subset of the + list returned by getmembers(). If 'numeric_owner' is True, only + the numbers for user/group names are used and not the names. + + The 'filter' function will be called on each member just + before extraction. + It can return a changed TarInfo or None to skip the member. + String names of common filters are accepted. + """ + directories = [] + + filter_function = self._get_filter_function(filter) + if members is None: + members = self + + for member in members: + tarinfo = self._get_extract_tarinfo(member, filter_function, path) + if tarinfo is None: + continue + if tarinfo.isdir(): + # For directories, delay setting attributes until later, + # since permissions can interfere with extraction and + # extracting contents can reset mtime. + directories.append(tarinfo) + self._extract_one(tarinfo, path, set_attrs=not tarinfo.isdir(), + numeric_owner=numeric_owner) + + # Reverse sort directories. + directories.sort(key=lambda a: a.name, reverse=True) + + # Set correct owner, mtime and filemode on directories. + for tarinfo in directories: + dirpath = os.path.join(path, tarinfo.name) + try: + self.chown(tarinfo, dirpath, numeric_owner=numeric_owner) + self.utime(tarinfo, dirpath) + self.chmod(tarinfo, dirpath) + except ExtractError as e: + self._handle_nonfatal_error(e) + + def extract(self, member, path="", set_attrs=True, *, numeric_owner=False, + filter=None): + """Extract a member from the archive to the current working directory, + using its full name. Its file information is extracted as accurately + as possible. 'member' may be a filename or a TarInfo object. You can + specify a different directory using 'path'. File attributes (owner, + mtime, mode) are set unless 'set_attrs' is False. If 'numeric_owner' + is True, only the numbers for user/group names are used and not + the names. + + The 'filter' function will be called before extraction. + It can return a changed TarInfo or None to skip the member. + String names of common filters are accepted. + """ + filter_function = self._get_filter_function(filter) + tarinfo = self._get_extract_tarinfo(member, filter_function, path) + if tarinfo is not None: + self._extract_one(tarinfo, path, set_attrs, numeric_owner) + + def _get_extract_tarinfo(self, member, filter_function, path): + """Get filtered TarInfo (or None) from member, which might be a str""" + if isinstance(member, str): + tarinfo = self.getmember(member) + else: + tarinfo = member + + unfiltered = tarinfo + try: + tarinfo = filter_function(tarinfo, path) + except (OSError, FilterError) as e: + self._handle_fatal_error(e) + except ExtractError as e: + self._handle_nonfatal_error(e) + if tarinfo is None: + self._dbg(2, "tarfile: Excluded %r" % unfiltered.name) + return None + # Prepare the link target for makelink(). + if tarinfo.islnk(): + tarinfo = copy.copy(tarinfo) + tarinfo._link_target = os.path.join(path, tarinfo.linkname) + return tarinfo + + def _extract_one(self, tarinfo, path, set_attrs, numeric_owner): + """Extract from filtered tarinfo to disk""" + self._check("r") + + try: + self._extract_member(tarinfo, os.path.join(path, tarinfo.name), + set_attrs=set_attrs, + numeric_owner=numeric_owner) + except OSError as e: + self._handle_fatal_error(e) + except ExtractError as e: + self._handle_nonfatal_error(e) + + def _handle_nonfatal_error(self, e): + """Handle non-fatal error (ExtractError) according to errorlevel""" + if self.errorlevel > 1: + raise + else: + self._dbg(1, "tarfile: %s" % e) + + def _handle_fatal_error(self, e): + """Handle "fatal" error according to self.errorlevel""" + if self.errorlevel > 0: + raise + elif isinstance(e, OSError): + if e.filename is None: + self._dbg(1, "tarfile: %s" % e.strerror) + else: + self._dbg(1, "tarfile: %s %r" % (e.strerror, e.filename)) + else: + self._dbg(1, "tarfile: %s %s" % (type(e).__name__, e)) + + def extractfile(self, member): + """Extract a member from the archive as a file object. 'member' may be + a filename or a TarInfo object. If 'member' is a regular file or + a link, an io.BufferedReader object is returned. For all other + existing members, None is returned. If 'member' does not appear + in the archive, KeyError is raised. + """ + self._check("r") + + if isinstance(member, str): + tarinfo = self.getmember(member) + else: + tarinfo = member + + if tarinfo.isreg() or tarinfo.type not in SUPPORTED_TYPES: + # Members with unknown types are treated as regular files. + return self.fileobject(self, tarinfo) + + elif tarinfo.islnk() or tarinfo.issym(): + if isinstance(self.fileobj, _Stream): + # A small but ugly workaround for the case that someone tries + # to extract a (sym)link as a file-object from a non-seekable + # stream of tar blocks. + raise StreamError("cannot extract (sym)link as file object") + else: + # A (sym)link's file object is its target's file object. + return self.extractfile(self._find_link_target(tarinfo)) + else: + # If there's no data associated with the member (directory, chrdev, + # blkdev, etc.), return None instead of a file object. + return None + + def _extract_member(self, tarinfo, targetpath, set_attrs=True, + numeric_owner=False): + """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, exist_ok=True) + + if tarinfo.islnk() or tarinfo.issym(): + self._dbg(1, "%s -> %s" % (tarinfo.name, tarinfo.linkname)) + else: + self._dbg(1, tarinfo.name) + + if tarinfo.isreg(): + self.makefile(tarinfo, targetpath) + elif tarinfo.isdir(): + self.makedir(tarinfo, targetpath) + elif tarinfo.isfifo(): + self.makefifo(tarinfo, targetpath) + elif tarinfo.ischr() or tarinfo.isblk(): + self.makedev(tarinfo, targetpath) + elif tarinfo.islnk() or tarinfo.issym(): + self.makelink(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, numeric_owner) + if not tarinfo.issym(): + self.chmod(tarinfo, targetpath) + self.utime(tarinfo, targetpath) + + #-------------------------------------------------------------------------- + # Below are the different file methods. They are called via + # _extract_member() when extract() is called. They can be replaced in a + # subclass to implement other functionality. + + def makedir(self, tarinfo, targetpath): + """Make a directory called targetpath. + """ + try: + if tarinfo.mode is None: + # Use the system's default mode + os.mkdir(targetpath) + else: + # Use a safe mode for the directory, the real mode is set + # later in _extract_member(). + os.mkdir(targetpath, 0o700) + except FileExistsError: + if not os.path.isdir(targetpath): + raise + + def makefile(self, tarinfo, targetpath): + """Make a file called targetpath. + """ + source = self.fileobj + source.seek(tarinfo.offset_data) + bufsize = self.copybufsize + with bltn_open(targetpath, "wb") as target: + if tarinfo.sparse is not None: + for offset, size in tarinfo.sparse: + target.seek(offset) + copyfileobj(source, target, size, ReadError, bufsize) + target.seek(tarinfo.size) + target.truncate() + else: + copyfileobj(source, target, tarinfo.size, ReadError, bufsize) + + def makeunknown(self, tarinfo, targetpath): + """Make a file from a TarInfo object with an unknown type + at targetpath. + """ + self.makefile(tarinfo, targetpath) + self._dbg(1, "tarfile: Unknown file type %r, " \ + "extracted as regular file." % tarinfo.type) + + def makefifo(self, tarinfo, targetpath): + """Make a fifo called targetpath. + """ + if hasattr(os, "mkfifo"): + os.mkfifo(targetpath) + else: + raise ExtractError("fifo not supported by system") + + def makedev(self, tarinfo, targetpath): + """Make a character or block device called targetpath. + """ + if not hasattr(os, "mknod") or not hasattr(os, "makedev"): + raise ExtractError("special devices not supported by system") + + mode = tarinfo.mode + if mode is None: + # Use mknod's default + mode = 0o600 + if tarinfo.isblk(): + mode |= stat.S_IFBLK + else: + mode |= stat.S_IFCHR + + os.mknod(targetpath, mode, + os.makedev(tarinfo.devmajor, tarinfo.devminor)) + + def makelink(self, tarinfo, targetpath): + """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(): + if os.path.lexists(targetpath): + # Avoid FileExistsError on following os.symlink. + os.unlink(targetpath) + os.symlink(tarinfo.linkname, targetpath) + else: + 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: + try: + self._extract_member(self._find_link_target(tarinfo), + targetpath) + except KeyError: + raise ExtractError("unable to resolve link inside archive") from None + + def chown(self, tarinfo, targetpath, numeric_owner): + """Set owner of targetpath according to tarinfo. If numeric_owner + is True, use .gid/.uid instead of .gname/.uname. If numeric_owner + is False, fall back to .gid/.uid when the search based on name + fails. + """ + if hasattr(os, "geteuid") and os.geteuid() == 0: + # We have to be root to do so. + g = tarinfo.gid + u = tarinfo.uid + if not numeric_owner: + try: + if grp and tarinfo.gname: + g = grp.getgrnam(tarinfo.gname)[2] + except KeyError: + pass + try: + if pwd and tarinfo.uname: + u = pwd.getpwnam(tarinfo.uname)[2] + except KeyError: + pass + if g is None: + g = -1 + if u is None: + u = -1 + try: + if tarinfo.issym() and hasattr(os, "lchown"): + os.lchown(targetpath, u, g) + else: + os.chown(targetpath, u, g) + except (OSError, OverflowError) as e: + # OverflowError can be raised if an ID doesn't fit in 'id_t' + raise ExtractError("could not change owner") from e + + def chmod(self, tarinfo, targetpath): + """Set file permissions of targetpath according to tarinfo. + """ + if tarinfo.mode is None: + return + try: + os.chmod(targetpath, tarinfo.mode) + except OSError as e: + raise ExtractError("could not change mode") from e + + def utime(self, tarinfo, targetpath): + """Set modification time of targetpath according to tarinfo. + """ + mtime = tarinfo.mtime + if mtime is None: + return + if not hasattr(os, 'utime'): + return + try: + os.utime(targetpath, (mtime, mtime)) + except OSError as e: + raise ExtractError("could not change modification time") from e + + #-------------------------------------------------------------------------- + def next(self): + """Return the next member of the archive as a TarInfo object, when + TarFile is opened for reading. Return None if there is no more + available. + """ + self._check("ra") + if self.firstmember is not None: + m = self.firstmember + self.firstmember = None + return m + + # Advance the file pointer. + if self.offset != self.fileobj.tell(): + if self.offset == 0: + return None + self.fileobj.seek(self.offset - 1) + if not self.fileobj.read(1): + raise ReadError("unexpected end of data") + + # Read the next block. + tarinfo = None + while True: + try: + tarinfo = self.tarinfo.fromtarfile(self) + except EOFHeaderError as e: + if self.ignore_zeros: + self._dbg(2, "0x%X: %s" % (self.offset, e)) + self.offset += BLOCKSIZE + continue + except InvalidHeaderError as e: + if self.ignore_zeros: + self._dbg(2, "0x%X: %s" % (self.offset, e)) + self.offset += BLOCKSIZE + continue + elif self.offset == 0: + raise ReadError(str(e)) from None + except EmptyHeaderError: + if self.offset == 0: + raise ReadError("empty file") from None + except TruncatedHeaderError as e: + if self.offset == 0: + raise ReadError(str(e)) from None + except SubsequentHeaderError as e: + raise ReadError(str(e)) from None + except Exception as e: + try: + import zlib + if isinstance(e, zlib.error): + raise ReadError(f'zlib error: {e}') from None + else: + raise e + except ImportError: + raise e + break + + if tarinfo is not None: + # if streaming the file we do not want to cache the tarinfo + if not self.stream: + self.members.append(tarinfo) + else: + self._loaded = True + + return tarinfo + + #-------------------------------------------------------------------------- + # Little helper methods: + + def _getmember(self, name, tarinfo=None, normalize=False): + """Find an archive member by name from bottom to top. + If tarinfo is given, it is used as the starting point. + """ + # Ensure that all members have been loaded. + members = self.getmembers() + + # Limit the member search list up to tarinfo. + skipping = False + if tarinfo is not None: + try: + index = members.index(tarinfo) + except ValueError: + # The given starting point might be a (modified) copy. + # We'll later skip members until we find an equivalent. + skipping = True + else: + # Happy fast path + members = members[:index] + + if normalize: + name = os.path.normpath(name) + + for member in reversed(members): + if skipping: + if tarinfo.offset == member.offset: + skipping = False + continue + if normalize: + member_name = os.path.normpath(member.name) + else: + member_name = member.name + + if name == member_name: + return member + + if skipping: + # Starting point was not found + raise ValueError(tarinfo) + + def _load(self): + """Read through the entire archive file and look for readable + members. This should not run if the file is set to stream. + """ + if not self.stream: + while self.next() is not None: + pass + self._loaded = True + + def _check(self, mode=None): + """Check if TarFile is still open, and if the operation's mode + corresponds to TarFile's mode. + """ + if self.closed: + raise OSError("%s is closed" % self.__class__.__name__) + if mode is not None and self.mode not in mode: + raise OSError("bad operation for mode %r" % self.mode) + + def _find_link_target(self, tarinfo): + """Find the target member of a symlink or hardlink member in the + archive. + """ + if tarinfo.issym(): + # Always search the entire archive. + linkname = "/".join(filter(None, (os.path.dirname(tarinfo.name), tarinfo.linkname))) + limit = None + else: + # Search the archive before the link, because a hard link is + # just a reference to an already archived file. + linkname = tarinfo.linkname + limit = tarinfo + + member = self._getmember(linkname, tarinfo=limit, normalize=True) + if member is None: + raise KeyError("linkname %r not found" % linkname) + return member + + def __iter__(self): + """Provide an iterator object. + """ + if self._loaded: + yield from self.members + return + + # Yield items using TarFile's next() method. + # When all members have been read, set TarFile as _loaded. + index = 0 + # Fix for SF #1100429: Under rare circumstances it can + # happen that getmembers() is called during iteration, + # which will have already exhausted the next() method. + if self.firstmember is not None: + tarinfo = self.next() + index += 1 + yield tarinfo + + while True: + if index < len(self.members): + tarinfo = self.members[index] + elif not self._loaded: + tarinfo = self.next() + if not tarinfo: + self._loaded = True + return + else: + return + index += 1 + yield tarinfo + + def _dbg(self, level, msg): + """Write debugging output to sys.stderr. + """ + if level <= self.debug: + print(msg, file=sys.stderr) + + def __enter__(self): + self._check() + return self + + def __exit__(self, type, value, traceback): + if type is None: + self.close() + else: + # An exception occurred. We must not call close() because + # it would try to write end-of-archive blocks and padding. + if not self._extfileobj: + self.fileobj.close() + self.closed = True + +#-------------------- +# exported functions +#-------------------- + +def is_tarfile(name): + """Return True if name points to a tar archive that we + are able to handle, else return False. + + 'name' should be a string, file, or file-like object. + """ + try: + if hasattr(name, "read"): + pos = name.tell() + t = open(fileobj=name) + name.seek(pos) + else: + t = open(name) + t.close() + return True + except TarError: + return False + +open = TarFile.open + + +def main(): + import argparse + + description = 'A simple command-line interface for tarfile module.' + parser = argparse.ArgumentParser(description=description) + parser.add_argument('-v', '--verbose', action='store_true', default=False, + help='Verbose output') + parser.add_argument('--filter', metavar='', + choices=_NAMED_FILTERS, + help='Filter for extraction') + + group = parser.add_mutually_exclusive_group(required=True) + group.add_argument('-l', '--list', metavar='', + help='Show listing of a tarfile') + group.add_argument('-e', '--extract', nargs='+', + metavar=('', ''), + help='Extract tarfile into target dir') + group.add_argument('-c', '--create', nargs='+', + metavar=('', ''), + help='Create tarfile from sources') + group.add_argument('-t', '--test', metavar='', + help='Test if a tarfile is valid') + + args = parser.parse_args() + + if args.filter and args.extract is None: + parser.exit(1, '--filter is only valid for extraction\n') + + if args.test is not None: + src = args.test + if is_tarfile(src): + with open(src, 'r') as tar: + tar.getmembers() + print(tar.getmembers(), file=sys.stderr) + if args.verbose: + print('{!r} is a tar archive.'.format(src)) + else: + parser.exit(1, '{!r} is not a tar archive.\n'.format(src)) + + elif args.list is not None: + src = args.list + if is_tarfile(src): + with TarFile.open(src, 'r:*') as tf: + tf.list(verbose=args.verbose) + else: + parser.exit(1, '{!r} is not a tar archive.\n'.format(src)) + + elif args.extract is not None: + if len(args.extract) == 1: + src = args.extract[0] + curdir = os.curdir + elif len(args.extract) == 2: + src, curdir = args.extract + else: + parser.exit(1, parser.format_help()) + + if is_tarfile(src): + with TarFile.open(src, 'r:*') as tf: + tf.extractall(path=curdir, filter=args.filter) + if args.verbose: + if curdir == '.': + msg = '{!r} file is extracted.'.format(src) + else: + msg = ('{!r} file is extracted ' + 'into {!r} directory.').format(src, curdir) + print(msg) + else: + parser.exit(1, '{!r} is not a tar archive.\n'.format(src)) + + elif args.create is not None: + tar_name = args.create.pop(0) + _, ext = os.path.splitext(tar_name) + compressions = { + # gz + '.gz': 'gz', + '.tgz': 'gz', + # xz + '.xz': 'xz', + '.txz': 'xz', + # bz2 + '.bz2': 'bz2', + '.tbz': 'bz2', + '.tbz2': 'bz2', + '.tb2': 'bz2', + } + tar_mode = 'w:' + compressions[ext] if ext in compressions else 'w' + tar_files = args.create + + with TarFile.open(tar_name, tar_mode) as tf: + for file_name in tar_files: + tf.add(file_name) + + if args.verbose: + print('{!r} file created.'.format(tar_name)) + +if __name__ == '__main__': + main() diff --git a/d2l-0.17.6/.venv/lib/python3.11/site-packages/backports/tarfile/__main__.py b/d2l-0.17.6/.venv/lib/python3.11/site-packages/backports/tarfile/__main__.py new file mode 100644 index 000000000..daf550908 --- /dev/null +++ b/d2l-0.17.6/.venv/lib/python3.11/site-packages/backports/tarfile/__main__.py @@ -0,0 +1,5 @@ +from . import main + + +if __name__ == '__main__': + main() diff --git a/d2l-0.17.6/.venv/lib/python3.11/site-packages/backports/tarfile/compat/__init__.py b/d2l-0.17.6/.venv/lib/python3.11/site-packages/backports/tarfile/compat/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/d2l-0.17.6/.venv/lib/python3.11/site-packages/backports/tarfile/compat/py38.py b/d2l-0.17.6/.venv/lib/python3.11/site-packages/backports/tarfile/compat/py38.py new file mode 100644 index 000000000..20fbbfc1c --- /dev/null +++ b/d2l-0.17.6/.venv/lib/python3.11/site-packages/backports/tarfile/compat/py38.py @@ -0,0 +1,24 @@ +import sys + + +if sys.version_info < (3, 9): + + def removesuffix(self, suffix): + # suffix='' should not call self[:-0]. + if suffix and self.endswith(suffix): + return self[: -len(suffix)] + else: + return self[:] + + def removeprefix(self, prefix): + if self.startswith(prefix): + return self[len(prefix) :] + else: + return self[:] +else: + + def removesuffix(self, suffix): + return self.removesuffix(suffix) + + def removeprefix(self, prefix): + return self.removeprefix(prefix) diff --git a/d2l-0.17.6/.venv/lib/python3.11/site-packages/certifi-2026.1.4.dist-info/INSTALLER b/d2l-0.17.6/.venv/lib/python3.11/site-packages/certifi-2026.1.4.dist-info/INSTALLER new file mode 100644 index 000000000..a1b589e38 --- /dev/null +++ b/d2l-0.17.6/.venv/lib/python3.11/site-packages/certifi-2026.1.4.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/d2l-0.17.6/.venv/lib/python3.11/site-packages/certifi-2026.1.4.dist-info/METADATA b/d2l-0.17.6/.venv/lib/python3.11/site-packages/certifi-2026.1.4.dist-info/METADATA new file mode 100644 index 000000000..d1bc526a9 --- /dev/null +++ b/d2l-0.17.6/.venv/lib/python3.11/site-packages/certifi-2026.1.4.dist-info/METADATA @@ -0,0 +1,78 @@ +Metadata-Version: 2.4 +Name: certifi +Version: 2026.1.4 +Summary: Python package for providing Mozilla's CA Bundle. +Home-page: https://github.com/certifi/python-certifi +Author: Kenneth Reitz +Author-email: me@kennethreitz.com +License: MPL-2.0 +Project-URL: Source, https://github.com/certifi/python-certifi +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0) +Classifier: Natural Language :: English +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3 :: Only +Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: 3.11 +Classifier: Programming Language :: Python :: 3.12 +Classifier: Programming Language :: Python :: 3.13 +Classifier: Programming Language :: Python :: 3.14 +Requires-Python: >=3.7 +License-File: LICENSE +Dynamic: author +Dynamic: author-email +Dynamic: classifier +Dynamic: description +Dynamic: home-page +Dynamic: license +Dynamic: license-file +Dynamic: project-url +Dynamic: requires-python +Dynamic: summary + +Certifi: Python SSL Certificates +================================ + +Certifi provides Mozilla's carefully curated collection of Root Certificates for +validating the trustworthiness of SSL certificates while verifying the identity +of TLS hosts. It has been extracted from the `Requests`_ project. + +Installation +------------ + +``certifi`` is available on PyPI. Simply install it with ``pip``:: + + $ pip install certifi + +Usage +----- + +To reference the installed certificate authority (CA) bundle, you can use the +built-in function:: + + >>> import certifi + + >>> certifi.where() + '/usr/local/lib/python3.7/site-packages/certifi/cacert.pem' + +Or from the command line:: + + $ python -m certifi + /usr/local/lib/python3.7/site-packages/certifi/cacert.pem + +Enjoy! + +.. _`Requests`: https://requests.readthedocs.io/en/master/ + +Addition/Removal of Certificates +-------------------------------- + +Certifi does not support any addition/removal or other modification of the +CA trust store content. This project is intended to provide a reliable and +highly portable root of trust to python deployments. Look to upstream projects +for methods to use alternate trust. diff --git a/d2l-0.17.6/.venv/lib/python3.11/site-packages/certifi-2026.1.4.dist-info/RECORD b/d2l-0.17.6/.venv/lib/python3.11/site-packages/certifi-2026.1.4.dist-info/RECORD new file mode 100644 index 000000000..33b9c77d2 --- /dev/null +++ b/d2l-0.17.6/.venv/lib/python3.11/site-packages/certifi-2026.1.4.dist-info/RECORD @@ -0,0 +1,14 @@ +certifi-2026.1.4.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +certifi-2026.1.4.dist-info/METADATA,sha256=FSfJEfKuMo6bJlofUrtRpn4PFTYtbYyXpHN_A3ZFpIY,2473 +certifi-2026.1.4.dist-info/RECORD,, +certifi-2026.1.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91 +certifi-2026.1.4.dist-info/licenses/LICENSE,sha256=6TcW2mucDVpKHfYP5pWzcPBpVgPSH2-D8FPkLPwQyvc,989 +certifi-2026.1.4.dist-info/top_level.txt,sha256=KMu4vUCfsjLrkPbSNdgdekS-pVJzBAJFO__nI8NF6-U,8 +certifi/__init__.py,sha256=969deMMS7Uchipr0oO4dbRBUvRi0uNYCn07VmG1aTrg,94 +certifi/__main__.py,sha256=xBBoj905TUWBLRGANOcf7oi6e-3dMP4cEoG9OyMs11g,243 +certifi/__pycache__/__init__.cpython-311.pyc,, +certifi/__pycache__/__main__.cpython-311.pyc,, +certifi/__pycache__/core.cpython-311.pyc,, +certifi/cacert.pem,sha256=Tzl1_zCrvzVEO0hgZK6Ly0Hf9wf_31dsdtKS-0WKoKk,270954 +certifi/core.py,sha256=XFXycndG5pf37ayeF8N32HUuDafsyhkVMbO4BAPWHa0,3394 +certifi/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 diff --git a/d2l-0.17.6/.venv/lib/python3.11/site-packages/certifi-2026.1.4.dist-info/WHEEL b/d2l-0.17.6/.venv/lib/python3.11/site-packages/certifi-2026.1.4.dist-info/WHEEL new file mode 100644 index 000000000..e7fa31b6f --- /dev/null +++ b/d2l-0.17.6/.venv/lib/python3.11/site-packages/certifi-2026.1.4.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: setuptools (80.9.0) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/d2l-0.17.6/.venv/lib/python3.11/site-packages/certifi-2026.1.4.dist-info/licenses/LICENSE b/d2l-0.17.6/.venv/lib/python3.11/site-packages/certifi-2026.1.4.dist-info/licenses/LICENSE new file mode 100644 index 000000000..62b076cde --- /dev/null +++ b/d2l-0.17.6/.venv/lib/python3.11/site-packages/certifi-2026.1.4.dist-info/licenses/LICENSE @@ -0,0 +1,20 @@ +This package contains a modified version of ca-bundle.crt: + +ca-bundle.crt -- Bundle of CA Root Certificates + +This is a bundle of X.509 certificates of public Certificate Authorities +(CA). These were automatically extracted from Mozilla's root certificates +file (certdata.txt). This file can be found in the mozilla source tree: +https://hg.mozilla.org/mozilla-central/file/tip/security/nss/lib/ckfw/builtins/certdata.txt +It contains the certificates in PEM format and therefore +can be directly used with curl / libcurl / php_curl, or with +an Apache+mod_ssl webserver for SSL client authentication. +Just configure this file as the SSLCACertificateFile.# + +***** BEGIN LICENSE BLOCK ***** +This Source Code Form is subject to the terms of the Mozilla Public License, +v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain +one at http://mozilla.org/MPL/2.0/. + +***** END LICENSE BLOCK ***** +@(#) $RCSfile: certdata.txt,v $ $Revision: 1.80 $ $Date: 2011/11/03 15:11:58 $ diff --git a/d2l-0.17.6/.venv/lib/python3.11/site-packages/certifi-2026.1.4.dist-info/top_level.txt b/d2l-0.17.6/.venv/lib/python3.11/site-packages/certifi-2026.1.4.dist-info/top_level.txt new file mode 100644 index 000000000..963eac530 --- /dev/null +++ b/d2l-0.17.6/.venv/lib/python3.11/site-packages/certifi-2026.1.4.dist-info/top_level.txt @@ -0,0 +1 @@ +certifi diff --git a/d2l-0.17.6/.venv/lib/python3.11/site-packages/certifi/__init__.py b/d2l-0.17.6/.venv/lib/python3.11/site-packages/certifi/__init__.py new file mode 100644 index 000000000..090fd5848 --- /dev/null +++ b/d2l-0.17.6/.venv/lib/python3.11/site-packages/certifi/__init__.py @@ -0,0 +1,4 @@ +from .core import contents, where + +__all__ = ["contents", "where"] +__version__ = "2026.01.04" diff --git a/d2l-0.17.6/.venv/lib/python3.11/site-packages/certifi/__main__.py b/d2l-0.17.6/.venv/lib/python3.11/site-packages/certifi/__main__.py new file mode 100644 index 000000000..8945b5da8 --- /dev/null +++ b/d2l-0.17.6/.venv/lib/python3.11/site-packages/certifi/__main__.py @@ -0,0 +1,12 @@ +import argparse + +from certifi import contents, where + +parser = argparse.ArgumentParser() +parser.add_argument("-c", "--contents", action="store_true") +args = parser.parse_args() + +if args.contents: + print(contents()) +else: + print(where()) diff --git a/d2l-0.17.6/.venv/lib/python3.11/site-packages/certifi/cacert.pem b/d2l-0.17.6/.venv/lib/python3.11/site-packages/certifi/cacert.pem new file mode 100644 index 000000000..132db0df1 --- /dev/null +++ b/d2l-0.17.6/.venv/lib/python3.11/site-packages/certifi/cacert.pem @@ -0,0 +1,4468 @@ + +# Issuer: CN=QuoVadis Root CA 2 O=QuoVadis Limited +# Subject: CN=QuoVadis Root CA 2 O=QuoVadis Limited +# Label: "QuoVadis Root CA 2" +# Serial: 1289 +# MD5 Fingerprint: 5e:39:7b:dd:f8:ba:ec:82:e9:ac:62:ba:0c:54:00:2b +# SHA1 Fingerprint: ca:3a:fb:cf:12:40:36:4b:44:b2:16:20:88:80:48:39:19:93:7c:f7 +# SHA256 Fingerprint: 85:a0:dd:7d:d7:20:ad:b7:ff:05:f8:3d:54:2b:20:9d:c7:ff:45:28:f7:d6:77:b1:83:89:fe:a5:e5:c4:9e:86 +-----BEGIN CERTIFICATE----- +MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x +GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv +b3QgQ0EgMjAeFw0wNjExMjQxODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNV +BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W +YWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCa +GMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6XJxg +Fyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55J +WpzmM+Yklvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bB +rrcCaoF6qUWD4gXmuVbBlDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp ++ARz8un+XJiM9XOva7R+zdRcAitMOeGylZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1 +ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt66/3FsvbzSUr5R/7mp/i +Ucw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1JdxnwQ5hYIiz +PtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og +/zOhD7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UH +oycR7hYQe7xFSkyyBNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuI +yV77zGHcizN300QyNQliBJIWENieJ0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1Ud +EwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBQahGK8SEwzJQTU7tD2 +A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGUa6FJpEcwRTEL +MAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT +ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2f +BluornFdLwUvZ+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzn +g/iN/Ae42l9NLmeyhP3ZRPx3UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2Bl +fF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodmVjB3pjd4M1IQWK4/YY7yarHvGH5K +WWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK+JDSV6IZUaUtl0Ha +B0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrWIozc +hLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPR +TUIZ3Ph1WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWD +mbA4CD/pXvk1B+TJYm5Xf6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0Z +ohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y +4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8VCLAAVBpQ570su9t+Oza +8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u +-----END CERTIFICATE----- + +# Issuer: CN=QuoVadis Root CA 3 O=QuoVadis Limited +# Subject: CN=QuoVadis Root CA 3 O=QuoVadis Limited +# Label: "QuoVadis Root CA 3" +# Serial: 1478 +# MD5 Fingerprint: 31:85:3c:62:94:97:63:b9:aa:fd:89:4e:af:6f:e0:cf +# SHA1 Fingerprint: 1f:49:14:f7:d8:74:95:1d:dd:ae:02:c0:be:fd:3a:2d:82:75:51:85 +# SHA256 Fingerprint: 18:f1:fc:7f:20:5d:f8:ad:dd:eb:7f:e0:07:dd:57:e3:af:37:5a:9c:4d:8d:73:54:6b:f4:f1:fe:d1:e1:8d:35 +-----BEGIN CERTIFICATE----- +MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x +GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv +b3QgQ0EgMzAeFw0wNjExMjQxOTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNV +BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W +YWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDM +V0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNggDhoB +4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUr +H556VOijKTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd +8lyyBTNvijbO0BNO/79KDDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9Cabwv +vWhDFlaJKjdhkf2mrk7AyxRllDdLkgbvBNDInIjbC3uBr7E9KsRlOni27tyAsdLT +mZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwpp5ijJUMv7/FfJuGITfhe +btfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8nT8KKdjc +T5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDt +WAEXMJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZ +c6tsgLjoC2SToJyMGf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A +4iLItLRkT9a6fUg+qGkM17uGcclzuD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYD +VR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHTBgkrBgEEAb5YAAMwgcUwgZMG +CCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNvbnN0 +aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0 +aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu +dC4wLQYIKwYBBQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2Nw +czALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4G +A1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4ywLQoUmkRzBFMQswCQYDVQQGEwJC +TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UEAxMSUXVvVmFkaXMg +Um9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZVqyM0 +7ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSem +d1o417+shvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd ++LJ2w/w4E6oM3kJpK27zPOuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B +4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadN +t54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp8kokUvd0/bpO5qgdAm6x +DYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBCbjPsMZ57 +k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6s +zHXug/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0j +Wy10QJLZYxkNc91pvGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeT +mJlglFwjz1onl14LBQaTNx47aTbrqZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK +4SVhM7JZG+Ju1zdXtg2pEto= +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Assured ID Root CA" +# Serial: 17154717934120587862167794914071425081 +# MD5 Fingerprint: 87:ce:0b:7b:2a:0e:49:00:e1:58:71:9b:37:a8:93:72 +# SHA1 Fingerprint: 05:63:b8:63:0d:62:d7:5a:bb:c8:ab:1e:4b:df:b5:a8:99:b2:4d:43 +# SHA256 Fingerprint: 3e:90:99:b5:01:5e:8f:48:6c:00:bc:ea:9d:11:1e:e7:21:fa:ba:35:5a:89:bc:f1:df:69:56:1e:3d:c6:32:5c +-----BEGIN CERTIFICATE----- +MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv +b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl +cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c +JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP +mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+ +wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4 +VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/ +AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB +AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW +BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun +pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC +dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf +fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm +NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx +H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe ++o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Global Root CA" +# Serial: 10944719598952040374951832963794454346 +# MD5 Fingerprint: 79:e4:a9:84:0d:7d:3a:96:d7:c0:4f:e2:43:4c:89:2e +# SHA1 Fingerprint: a8:98:5d:3a:65:e5:e5:c4:b2:d7:d6:6d:40:c6:dd:2f:b1:9c:54:36 +# SHA256 Fingerprint: 43:48:a0:e9:44:4c:78:cb:26:5e:05:8d:5e:89:44:b4:d8:4f:96:62:bd:26:db:25:7f:89:34:a4:43:c7:01:61 +-----BEGIN CERTIFICATE----- +MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD +QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT +MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j +b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB +CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97 +nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt +43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P +T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4 +gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO +BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR +TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw +DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr +hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg +06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF +PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls +YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk +CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert High Assurance EV Root CA" +# Serial: 3553400076410547919724730734378100087 +# MD5 Fingerprint: d4:74:de:57:5c:39:b2:d3:9c:85:83:c5:c0:65:49:8a +# SHA1 Fingerprint: 5f:b7:ee:06:33:e2:59:db:ad:0c:4c:9a:e6:d3:8f:1a:61:c7:dc:25 +# SHA256 Fingerprint: 74:31:e5:f4:c3:c1:ce:46:90:77:4f:0b:61:e0:54:40:88:3b:a9:a0:1e:d0:0b:a6:ab:d7:80:6e:d3:b1:18:cf +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j +ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL +MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3 +LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug +RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm ++9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW +PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM +xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB +Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3 +hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg +EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF +MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA +FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec +nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z +eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF +hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2 +Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe +vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep ++OkuE6N36B9K +-----END CERTIFICATE----- + +# Issuer: CN=SwissSign Gold CA - G2 O=SwissSign AG +# Subject: CN=SwissSign Gold CA - G2 O=SwissSign AG +# Label: "SwissSign Gold CA - G2" +# Serial: 13492815561806991280 +# MD5 Fingerprint: 24:77:d9:a8:91:d1:3b:fa:88:2d:c2:ff:f8:cd:33:93 +# SHA1 Fingerprint: d8:c5:38:8a:b7:30:1b:1b:6e:d4:7a:e6:45:25:3a:6f:9f:1a:27:61 +# SHA256 Fingerprint: 62:dd:0b:e9:b9:f5:0a:16:3e:a0:f8:e7:5c:05:3b:1e:ca:57:ea:55:c8:68:8f:64:7c:68:81:f2:c8:35:7b:95 +-----BEGIN CERTIFICATE----- +MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV +BAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2ln +biBHb2xkIENBIC0gRzIwHhcNMDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBF +MQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMR8wHQYDVQQDExZT +d2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC +CgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUqt2/8 +76LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+ +bbqBHH5CjCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c +6bM8K8vzARO/Ws/BtQpgvd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqE +emA8atufK+ze3gE/bk3lUIbLtK/tREDFylqM2tIrfKjuvqblCqoOpd8FUrdVxyJd +MmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvRAiTysybUa9oEVeXBCsdt +MDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuendjIj3o02y +MszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69y +FGkOpeUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPi +aG59je883WX0XaxR7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxM +gI93e2CaHt+28kgeDrpOVG2Y4OGiGqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCB +qTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUWyV7 +lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64OfPAeGZe6Drn +8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov +L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe6 +45R88a7A3hfm5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczO +UYrHUDFu4Up+GC9pWbY9ZIEr44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5 +O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOfMke6UiI0HTJ6CVanfCU2qT1L2sCC +bwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6mGu6uLftIdxf+u+yv +GPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxpmo/a +77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCC +hdiDyyJkvC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid3 +92qgQmwLOM7XdVAyksLfKzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEpp +Ld6leNcG2mqeSz53OiATIgHQv2ieY2BrNU0LbbqhPcCT4H8js1WtciVORvnSFu+w +ZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6LqjviOvrv1vA+ACOzB2+htt +Qc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ +-----END CERTIFICATE----- + +# Issuer: CN=SecureTrust CA O=SecureTrust Corporation +# Subject: CN=SecureTrust CA O=SecureTrust Corporation +# Label: "SecureTrust CA" +# Serial: 17199774589125277788362757014266862032 +# MD5 Fingerprint: dc:32:c3:a7:6d:25:57:c7:68:09:9d:ea:2d:a9:a2:d1 +# SHA1 Fingerprint: 87:82:c6:c3:04:35:3b:cf:d2:96:92:d2:59:3e:7d:44:d9:34:ff:11 +# SHA256 Fingerprint: f1:c1:b5:0a:e5:a2:0d:d8:03:0e:c9:f6:bc:24:82:3d:d3:67:b5:25:57:59:b4:e7:1b:61:fc:e9:f7:37:5d:73 +-----BEGIN CERTIFICATE----- +MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBI +MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x +FzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIz +MTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENv +cnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCCASIwDQYJKoZIhvcN +AQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQXOZEz +Zum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO +0gMdA+9tDWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIao +wW8xQmxSPmjL8xk037uHGFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj +7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b01k/unK8RCSc43Oz969XL0Imnal0ugBS +8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmHursCAwEAAaOBnTCBmjAT +BgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB +/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCeg +JYYjaHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGC +NxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt3 +6Z3q059c4EVlew3KW+JwULKUBRSuSceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/ +3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHfmbx8IVQr5Fiiu1cprp6poxkm +D5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZnMUFdAvnZyPS +CPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR +3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= +-----END CERTIFICATE----- + +# Issuer: CN=Secure Global CA O=SecureTrust Corporation +# Subject: CN=Secure Global CA O=SecureTrust Corporation +# Label: "Secure Global CA" +# Serial: 9751836167731051554232119481456978597 +# MD5 Fingerprint: cf:f4:27:0d:d4:ed:dc:65:16:49:6d:3d:da:bf:6e:de +# SHA1 Fingerprint: 3a:44:73:5a:e5:81:90:1f:24:86:61:46:1e:3b:9c:c4:5f:f5:3a:1b +# SHA256 Fingerprint: 42:00:f5:04:3a:c8:59:0e:bb:52:7d:20:9e:d1:50:30:29:fb:cb:d4:1c:a1:b5:06:ec:27:f1:5a:de:7d:ac:69 +-----BEGIN CERTIFICATE----- +MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBK +MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x +GTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkx +MjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3Qg +Q29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jxYDiJ +iQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa +/FHtaMbQbqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJ +jnIFHovdRIWCQtBJwB1g8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnI +HmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYVHDGA76oYa8J719rO+TMg1fW9ajMtgQT7 +sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi0XPnj3pDAgMBAAGjgZ0w +gZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQF +MAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCsw +KaAnoCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsG +AQQBgjcVAQQDAgEAMA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0L +URYD7xh8yOOvaliTFGCRsoTciE6+OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXO +H0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cnCDpOGR86p1hcF895P4vkp9Mm +I50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/53CYNv6ZHdAbY +iNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc +f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW +-----END CERTIFICATE----- + +# Issuer: CN=COMODO Certification Authority O=COMODO CA Limited +# Subject: CN=COMODO Certification Authority O=COMODO CA Limited +# Label: "COMODO Certification Authority" +# Serial: 104350513648249232941998508985834464573 +# MD5 Fingerprint: 5c:48:dc:f7:42:72:ec:56:94:6d:1c:cc:71:35:80:75 +# SHA1 Fingerprint: 66:31:bf:9e:f7:4f:9e:b6:c9:d5:a6:0c:ba:6a:be:d1:f7:bd:ef:7b +# SHA256 Fingerprint: 0c:2c:d6:3d:f7:80:6f:a3:99:ed:e8:09:11:6b:57:5b:f8:79:89:f0:65:18:f9:80:8c:86:05:03:17:8b:af:66 +-----BEGIN CERTIFICATE----- +MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB +gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G +A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV +BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAw +MDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl +YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P +RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3 +UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI +2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8 +Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp ++2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+ +DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O +nKVIrLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW +/zAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6g +PKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9u +QXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5t3iuHXIY +SdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CPOGEIqB6BCsAv +IC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ +RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4 +zJVSk/BwJVmcIGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5dd +BA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB +ZQ== +-----END CERTIFICATE----- + +# Issuer: CN=COMODO ECC Certification Authority O=COMODO CA Limited +# Subject: CN=COMODO ECC Certification Authority O=COMODO CA Limited +# Label: "COMODO ECC Certification Authority" +# Serial: 41578283867086692638256921589707938090 +# MD5 Fingerprint: 7c:62:ff:74:9d:31:53:5e:68:4a:d5:78:aa:1e:bf:23 +# SHA1 Fingerprint: 9f:74:4e:9f:2b:4d:ba:ec:0f:31:2c:50:b6:56:3b:8e:2d:93:c3:11 +# SHA256 Fingerprint: 17:93:92:7a:06:14:54:97:89:ad:ce:2f:8f:34:f7:f0:b6:6d:0f:3a:e3:a3:b8:4d:21:ec:15:db:ba:4f:ad:c7 +-----BEGIN CERTIFICATE----- +MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTEL +MAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE +BxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMT +IkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwMzA2MDAw +MDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdy +ZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09N +T0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSR +FtSrYpn1PlILBs5BAH+X4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0J +cfRK9ChQtP6IHG4/bC8vCVlbpVsLM5niwz2J+Wos77LTBumjQjBAMB0GA1UdDgQW +BBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ +BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VGFAkK+qDm +fQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdv +GDeAU/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= +-----END CERTIFICATE----- + +# Issuer: CN=Certigna O=Dhimyotis +# Subject: CN=Certigna O=Dhimyotis +# Label: "Certigna" +# Serial: 18364802974209362175 +# MD5 Fingerprint: ab:57:a6:5b:7d:42:82:19:b5:d8:58:26:28:5e:fd:ff +# SHA1 Fingerprint: b1:2e:13:63:45:86:a4:6f:1a:b2:60:68:37:58:2d:c4:ac:fd:94:97 +# SHA256 Fingerprint: e3:b6:a2:db:2e:d7:ce:48:84:2f:7a:c5:32:41:c7:b7:1d:54:14:4b:fb:40:c1:1f:3f:1d:0b:42:f5:ee:a1:2d +-----BEGIN CERTIFICATE----- +MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNV +BAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4X +DTA3MDYyOTE1MTMwNVoXDTI3MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQ +BgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwIQ2VydGlnbmEwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7qXOEm7RFHYeGifBZ4 +QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyHGxny +gQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbw +zBfsV1/pogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q +130yGLMLLGq/jj8UEYkgDncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2 +JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKfIrjxwo1p3Po6WAbfAgMBAAGjgbwwgbkw +DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQtCRZvgHyUtVF9lo53BEw +ZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJBgNVBAYT +AkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzj +AQ/JSP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG +9w0BAQUFAAOCAQEAhQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8h +bV6lUmPOEvjvKtpv6zf+EwLHyzs+ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFnc +fca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1kluPBS1xp81HlDQwY9qcEQCYsuu +HWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY1gkIl2PlwS6w +t0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw +WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== +-----END CERTIFICATE----- + +# Issuer: O=Chunghwa Telecom Co., Ltd. OU=ePKI Root Certification Authority +# Subject: O=Chunghwa Telecom Co., Ltd. OU=ePKI Root Certification Authority +# Label: "ePKI Root Certification Authority" +# Serial: 28956088682735189655030529057352760477 +# MD5 Fingerprint: 1b:2e:00:ca:26:06:90:3d:ad:fe:6f:15:68:d3:6b:b3 +# SHA1 Fingerprint: 67:65:0d:f1:7e:8e:7e:5b:82:40:a4:f4:56:4b:cf:e2:3d:69:c6:f0 +# SHA256 Fingerprint: c0:a6:f4:dc:63:a2:4b:fd:cf:54:ef:2a:6a:08:2a:0a:72:de:35:80:3e:2f:f5:ff:52:7a:e5:d8:72:06:df:d5 +-----BEGIN CERTIFICATE----- +MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBe +MQswCQYDVQQGEwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0 +ZC4xKjAoBgNVBAsMIWVQS0kgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe +Fw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMxMjdaMF4xCzAJBgNVBAYTAlRXMSMw +IQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEqMCgGA1UECwwhZVBL +SSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEF +AAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAH +SyZbCUNsIZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAh +ijHyl3SJCRImHJ7K2RKilTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3X +DZoTM1PRYfl61dd4s5oz9wCGzh1NlDivqOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1 +TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX12ruOzjjK9SXDrkb5wdJ +fzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0OWQqraffA +sgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uU +WH1+ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLS +nT0IFaUQAS2zMnaolQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pH +dmX2Os+PYhcZewoozRrSgx4hxyy/vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJip +NiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXiZo1jDiVN1Rmy5nk3pyKdVDEC +AwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/QkqiMAwGA1UdEwQF +MAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH +ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGB +uvl2ICO1J2B01GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6Yl +PwZpVnPDimZI+ymBV3QGypzqKOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkP +JXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdVxrsStZf0X4OFunHB2WyBEXYKCrC/ +gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEPNXubrjlpC2JgQCA2 +j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+rGNm6 +5ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUB +o2M3IUxExJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS +/jQ6fbjpKdx2qcgw+BRxgMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2z +Gp1iro2C6pSe3VkQw63d4k3jMdXH7OjysP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTE +W9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmODBCEIZ43ygknQW/2xzQ+D +hNQ+IIX3Sj0rnP0qCglN6oH4EZw= +-----END CERTIFICATE----- + +# Issuer: O=certSIGN OU=certSIGN ROOT CA +# Subject: O=certSIGN OU=certSIGN ROOT CA +# Label: "certSIGN ROOT CA" +# Serial: 35210227249154 +# MD5 Fingerprint: 18:98:c0:d6:e9:3a:fc:f9:b0:f5:0c:f7:4b:01:44:17 +# SHA1 Fingerprint: fa:b7:ee:36:97:26:62:fb:2d:b0:2a:f6:bf:03:fd:e8:7c:4b:2f:9b +# SHA256 Fingerprint: ea:a9:62:c4:fa:4a:6b:af:eb:e4:15:19:6d:35:1c:cd:88:8d:4f:53:f3:fa:8a:e6:d7:c4:66:a9:4e:60:42:bb +-----BEGIN CERTIFICATE----- +MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYT +AlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBD +QTAeFw0wNjA3MDQxNzIwMDRaFw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJP +MREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTCC +ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7IJUqOtdu0KBuqV5Do +0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHHrfAQ +UySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5d +RdY4zTW2ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQ +OA7+j0xbm0bqQfWwCHTD0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwv +JoIQ4uNllAoEwF73XVv4EOLQunpL+943AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08C +AwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAcYwHQYDVR0O +BBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IBAQA+0hyJ +LjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecY +MnQ8SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ +44gx+FkagQnIl6Z0x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6I +Jd1hJyMctTEHBDa0GpC9oHRxUIltvBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNw +i/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7NzTogVZ96edhBiIL5VaZVDADlN +9u6wWk5JRFRYX0KD +-----END CERTIFICATE----- + +# Issuer: CN=NetLock Arany (Class Gold) F\u0151tan\xfas\xedtv\xe1ny O=NetLock Kft. OU=Tan\xfas\xedtv\xe1nykiad\xf3k (Certification Services) +# Subject: CN=NetLock Arany (Class Gold) F\u0151tan\xfas\xedtv\xe1ny O=NetLock Kft. OU=Tan\xfas\xedtv\xe1nykiad\xf3k (Certification Services) +# Label: "NetLock Arany (Class Gold) F\u0151tan\xfas\xedtv\xe1ny" +# Serial: 80544274841616 +# MD5 Fingerprint: c5:a1:b7:ff:73:dd:d6:d7:34:32:18:df:fc:3c:ad:88 +# SHA1 Fingerprint: 06:08:3f:59:3f:15:a1:04:a0:69:a4:6b:a9:03:d0:06:b7:97:09:91 +# SHA256 Fingerprint: 6c:61:da:c3:a2:de:f0:31:50:6b:e0:36:d2:a6:fe:40:19:94:fb:d1:3d:f9:c8:d4:66:59:92:74:c4:46:ec:98 +-----BEGIN CERTIFICATE----- +MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQG +EwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3 +MDUGA1UECwwuVGFuw7pzw610dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNl +cnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBBcmFueSAoQ2xhc3MgR29sZCkgRsWR +dGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgxMjA2MTUwODIxWjCB +pzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxOZXRM +b2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlm +aWNhdGlvbiBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNz +IEdvbGQpIEbFkXRhbsO6c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAxCRec75LbRTDofTjl5Bu0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrT +lF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw/HpYzY6b7cNGbIRwXdrz +AZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAkH3B5r9s5 +VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRG +ILdwfzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2 +BJtr+UBdADTHLpl1neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAG +AQH/AgEEMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2M +U9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwWqZw8UQCgwBEIBaeZ5m8BiFRh +bvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTtaYtOUZcTh5m2C ++C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC +bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2F +uLjbvrW5KfnaNwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2 +XjG4Kvte9nHfRCaexOYNkbQudZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= +-----END CERTIFICATE----- + +# Issuer: CN=Microsec e-Szigno Root CA 2009 O=Microsec Ltd. +# Subject: CN=Microsec e-Szigno Root CA 2009 O=Microsec Ltd. +# Label: "Microsec e-Szigno Root CA 2009" +# Serial: 14014712776195784473 +# MD5 Fingerprint: f8:49:f4:03:bc:44:2d:83:be:48:69:7d:29:64:fc:b1 +# SHA1 Fingerprint: 89:df:74:fe:5c:f4:0f:4a:80:f9:e3:37:7d:54:da:91:e1:01:31:8e +# SHA256 Fingerprint: 3c:5f:81:fe:a5:fa:b8:2c:64:bf:a2:ea:ec:af:cd:e8:e0:77:fc:86:20:a7:ca:e5:37:16:3d:f3:6e:db:f3:78 +-----BEGIN CERTIFICATE----- +MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYD +VQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0 +ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0G +CSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTAeFw0wOTA2MTYxMTMwMThaFw0y +OTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3Qx +FjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3pp +Z25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o +dTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvP +kd6mJviZpWNwrZuuyjNAfW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tc +cbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG0IMZfcChEhyVbUr02MelTTMuhTlAdX4U +fIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKApxn1ntxVUwOXewdI/5n7 +N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm1HxdrtbC +xkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1 ++rUCAwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G +A1UdDgQWBBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPM +Pcu1SCOhGnqmKrs0aDAbBgNVHREEFDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqG +SIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0olZMEyL/azXm4Q5DwpL7v8u8h +mLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfXI/OMn74dseGk +ddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775 +tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c +2Pm2G2JwCz02yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5t +HMN1Rq41Bab2XD0h7lbwyYIiLXpUq3DDfSJlgnCW +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3 +# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3 +# Label: "GlobalSign Root CA - R3" +# Serial: 4835703278459759426209954 +# MD5 Fingerprint: c5:df:b8:49:ca:05:13:55:ee:2d:ba:1a:c3:3e:b0:28 +# SHA1 Fingerprint: d6:9b:56:11:48:f0:1c:77:c5:45:78:c1:09:26:df:5b:85:69:76:ad +# SHA256 Fingerprint: cb:b5:22:d7:b7:f1:27:ad:6a:01:13:86:5b:df:1c:d4:10:2e:7d:07:59:af:63:5a:7c:f4:72:0d:c9:63:c5:3b +-----BEGIN CERTIFICATE----- +MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G +A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp +Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4 +MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG +A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8 +RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT +gHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm +KPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd +QQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ +XriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw +DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o +LkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU +RUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp +jjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK +6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX +mcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs +Mx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH +WD9f +-----END CERTIFICATE----- + +# Issuer: CN=Izenpe.com O=IZENPE S.A. +# Subject: CN=Izenpe.com O=IZENPE S.A. +# Label: "Izenpe.com" +# Serial: 917563065490389241595536686991402621 +# MD5 Fingerprint: a6:b0:cd:85:80:da:5c:50:34:a3:39:90:2f:55:67:73 +# SHA1 Fingerprint: 2f:78:3d:25:52:18:a7:4a:65:39:71:b5:2c:a2:9c:45:15:6f:e9:19 +# SHA256 Fingerprint: 25:30:cc:8e:98:32:15:02:ba:d9:6f:9b:1f:ba:1b:09:9e:2d:29:9e:0f:45:48:bb:91:4f:36:3b:c0:d4:53:1f +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +# Issuer: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc. +# Subject: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc. +# Label: "Go Daddy Root Certificate Authority - G2" +# Serial: 0 +# MD5 Fingerprint: 80:3a:bc:22:c1:e6:fb:8d:9b:3b:27:4a:32:1b:9a:01 +# SHA1 Fingerprint: 47:be:ab:c9:22:ea:e8:0e:78:78:34:62:a7:9f:45:c2:54:fd:e6:8b +# SHA256 Fingerprint: 45:14:0b:32:47:eb:9c:c8:c5:b4:f0:d7:b5:30:91:f7:32:92:08:9e:6e:5a:63:e2:74:9d:d3:ac:a9:19:8e:da +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx +EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT +EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp +ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIz +NTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH +EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UE +AxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKD +E6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH +/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7Rnwy +DfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVh +GkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGR +tDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEA +AaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE +FDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmX +WWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu +9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTr +gIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo +2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO +LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI +4uJEvlz36hz1 +-----END CERTIFICATE----- + +# Issuer: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc. +# Subject: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc. +# Label: "Starfield Root Certificate Authority - G2" +# Serial: 0 +# MD5 Fingerprint: d6:39:81:c6:52:7e:96:69:fc:fc:ca:66:ed:05:f2:96 +# SHA1 Fingerprint: b5:1c:06:7c:ee:2b:0c:3d:f8:55:ab:2d:92:f4:fe:39:d4:e7:0f:0e +# SHA256 Fingerprint: 2c:e1:cb:0b:f9:d2:f9:e1:02:99:3f:be:21:51:52:c3:b2:dd:0c:ab:de:1c:68:e5:31:9b:83:91:54:db:b7:f5 +-----BEGIN CERTIFICATE----- +MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMx +EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT +HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVs +ZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAw +MFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 +b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVj +aG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZp +Y2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAL3twQP89o/8ArFvW59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMg +nLRJdzIpVv257IzdIvpy3Cdhl+72WoTsbhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1 +HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNkN3mSwOxGXn/hbVNMYq/N +Hwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7NfZTD4p7dN +dloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0 +HZbUJtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO +BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0G +CSqGSIb3DQEBCwUAA4IBAQARWfolTwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjU +sHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx4mcujJUDJi5DnUox9g61DLu3 +4jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUwF5okxBDgBPfg +8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K +pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1 +mMpYjn0q7pBZc2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 +-----END CERTIFICATE----- + +# Issuer: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc. +# Subject: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc. +# Label: "Starfield Services Root Certificate Authority - G2" +# Serial: 0 +# MD5 Fingerprint: 17:35:74:af:7b:61:1c:eb:f4:f9:3c:e2:ee:40:f9:a2 +# SHA1 Fingerprint: 92:5a:8f:8d:2c:6d:04:e0:66:5f:59:6a:ff:22:d8:63:e8:25:6f:3f +# SHA256 Fingerprint: 56:8d:69:05:a2:c8:87:08:a4:b3:02:51:90:ed:cf:ed:b1:97:4a:60:6a:13:c6:e5:29:0f:cb:2a:e6:3e:da:b5 +-----BEGIN CERTIFICATE----- +MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx +EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT +HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs +ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 +MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy +ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2Vy +dmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p +OsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm2 +8xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1K +Ts9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufe +hRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk +6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAw +DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+q +AdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMI +bw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXB +ve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z +qwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd +iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn +0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCN +sSi6 +-----END CERTIFICATE----- + +# Issuer: CN=Certum Trusted Network CA O=Unizeto Technologies S.A. OU=Certum Certification Authority +# Subject: CN=Certum Trusted Network CA O=Unizeto Technologies S.A. OU=Certum Certification Authority +# Label: "Certum Trusted Network CA" +# Serial: 279744 +# MD5 Fingerprint: d5:e9:81:40:c5:18:69:fc:46:2c:89:75:62:0f:aa:78 +# SHA1 Fingerprint: 07:e0:32:e0:20:b7:2c:3f:19:2f:06:28:a2:59:3a:19:a7:0f:06:9e +# SHA256 Fingerprint: 5c:58:46:8d:55:f5:8e:49:7e:74:39:82:d2:b5:00:10:b6:d1:65:37:4a:cf:83:a7:d4:a3:2d:b7:68:c4:40:8e +-----BEGIN CERTIFICATE----- +MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBM +MSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5D +ZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBU +cnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIyMTIwNzM3WhcNMjkxMjMxMTIwNzM3 +WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMg +Uy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIw +IAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rH +UV+rpDKmYYe2bg+G0jACl/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LM +TXPb865Px1bVWqeWifrzq2jUI4ZZJ88JJ7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVU +BBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4fOQtf/WsX+sWn7Et0brM +kUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0cvW0QM8x +AcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNV +HQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15y +sHhE49wcrwn9I0j6vSrEuVUEtRCjjSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfL +I9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1mS1FhIrlQgnXdAIv94nYmem8 +J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5ajZt3hrvJBW8qY +VoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI +03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= +-----END CERTIFICATE----- + +# Issuer: CN=TWCA Root Certification Authority O=TAIWAN-CA OU=Root CA +# Subject: CN=TWCA Root Certification Authority O=TAIWAN-CA OU=Root CA +# Label: "TWCA Root Certification Authority" +# Serial: 1 +# MD5 Fingerprint: aa:08:8f:f6:f9:7b:b7:f2:b1:a7:1e:9b:ea:ea:bd:79 +# SHA1 Fingerprint: cf:9e:87:6d:d3:eb:fc:42:26:97:a3:b5:a3:7a:a0:76:a9:06:23:48 +# SHA256 Fingerprint: bf:d8:8f:e1:10:1c:41:ae:3e:80:1b:f8:be:56:35:0e:e9:ba:d1:a6:b9:bd:51:5e:dc:5c:6d:5b:87:11:ac:44 +-----BEGIN CERTIFICATE----- +MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzES +MBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFU +V0NBIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMz +WhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJVEFJV0FO +LUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlm +aWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +AQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFE +AcK0HMMxQhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HH +K3XLfJ+utdGdIzdjp9xCoi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeX +RfwZVzsrb+RH9JlF/h3x+JejiB03HFyP4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/z +rX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1ry+UPizgN7gr8/g+YnzAx +3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkq +hkiG9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeC +MErJk/9q56YAf4lCmtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdls +XebQ79NqZp4VKIV66IIArB6nCWlWQtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62D +lhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVYT0bf+215WfKEIlKuD8z7fDvn +aspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocnyYh0igzyXxfkZ +YiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw== +-----END CERTIFICATE----- + +# Issuer: O=SECOM Trust Systems CO.,LTD. OU=Security Communication RootCA2 +# Subject: O=SECOM Trust Systems CO.,LTD. OU=Security Communication RootCA2 +# Label: "Security Communication RootCA2" +# Serial: 0 +# MD5 Fingerprint: 6c:39:7d:a4:0e:55:59:b2:3f:d6:41:b1:12:50:de:43 +# SHA1 Fingerprint: 5f:3b:8c:f2:f8:10:b3:7d:78:b4:ce:ec:19:19:c3:73:34:b9:c7:74 +# SHA256 Fingerprint: 51:3b:2c:ec:b8:10:d4:cd:e5:dd:85:39:1a:df:c6:c2:dd:60:d8:7b:b7:36:d2:b5:21:48:4a:a4:7a:0e:be:f6 +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDEl +MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMe +U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoX +DTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRy +dXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3VyaXR5IENvbW11bmlj +YXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANAV +OVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGr +zbl+dp+++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVM +VAX3NuRFg3sUZdbcDE3R3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQ +hNBqyjoGADdH5H5XTz+L62e4iKrFvlNVspHEfbmwhRkGeC7bYRr6hfVKkaHnFtWO +ojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1KEOtOghY6rCcMU/Gt1SSw +awNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8QIH4D5cs +OPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3 +DQEBCwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpF +coJxDjrSzG+ntKEju/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXc +okgfGT+Ok+vx+hfuzU7jBBJV1uXk3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8 +t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6qtnRGEmyR7jTV7JqR50S+kDFy +1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29mvVXIwAHIRc/ +SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 +-----END CERTIFICATE----- + +# Issuer: CN=Actalis Authentication Root CA O=Actalis S.p.A./03358520967 +# Subject: CN=Actalis Authentication Root CA O=Actalis S.p.A./03358520967 +# Label: "Actalis Authentication Root CA" +# Serial: 6271844772424770508 +# MD5 Fingerprint: 69:c1:0d:4f:07:a3:1b:c3:fe:56:3d:04:bc:11:f6:a6 +# SHA1 Fingerprint: f3:73:b3:87:06:5a:28:84:8a:f2:f3:4a:ce:19:2b:dd:c7:8e:9c:ac +# SHA256 Fingerprint: 55:92:60:84:ec:96:3a:64:b9:6e:2a:be:01:ce:0b:a8:6a:64:fb:fe:bc:c7:aa:b5:af:c1:55:b3:7f:d7:60:66 +-----BEGIN CERTIFICATE----- +MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UE +BhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8w +MzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290 +IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDkyMjExMjIwMlowazELMAkGA1UEBhMC +SVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1 +ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENB +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNv +UTufClrJwkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX +4ay8IMKx4INRimlNAJZaby/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9 +KK3giq0itFZljoZUj5NDKd45RnijMCO6zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/ +gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1fYVEiVRvjRuPjPdA1Yprb +rxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2oxgkg4YQ +51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2F +be8lEfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxe +KF+w6D9Fz8+vm2/7hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4F +v6MGn8i1zeQf1xcGDXqVdFUNaBr8EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbn +fpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5jF66CyCU3nuDuP/jVo23Eek7 +jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLYiDrIn3hm7Ynz +ezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt +ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAL +e3KHwGCmSUyIWOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70 +jsNjLiNmsGe+b7bAEzlgqqI0JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDz +WochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKxK3JCaKygvU5a2hi/a5iB0P2avl4V +SM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+Xlff1ANATIGk0k9j +pwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC4yyX +X04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+Ok +fcvHlXHo2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7R +K4X9p2jIugErsWx0Hbhzlefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btU +ZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXemOR/qnuOf0GZvBeyqdn6/axag67XH/JJU +LysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9vwGYT7JZVEc+NHt4bVaT +LnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg== +-----END CERTIFICATE----- + +# Issuer: CN=Buypass Class 2 Root CA O=Buypass AS-983163327 +# Subject: CN=Buypass Class 2 Root CA O=Buypass AS-983163327 +# Label: "Buypass Class 2 Root CA" +# Serial: 2 +# MD5 Fingerprint: 46:a7:d2:fe:45:fb:64:5a:a8:59:90:9b:78:44:9b:29 +# SHA1 Fingerprint: 49:0a:75:74:de:87:0a:47:fe:58:ee:f6:c7:6b:eb:c6:0b:12:40:99 +# SHA256 Fingerprint: 9a:11:40:25:19:7c:5b:b9:5d:94:e6:3d:55:cd:43:79:08:47:b6:46:b2:3c:df:11:ad:a4:a0:0e:ff:15:fb:48 +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd +MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg +Q2xhc3MgMiBSb290IENBMB4XDTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1ow +TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw +HgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB +BQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1g1Lr +6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPV +L4O2fuPn9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC91 +1K2GScuVr1QGbNgGE41b/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHx +MlAQTn/0hpPshNOOvEu/XAFOBz3cFIqUCqTqc/sLUegTBxj6DvEr0VQVfTzh97QZ +QmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeffawrbD02TTqigzXsu8lkB +arcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgIzRFo1clr +Us3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLi +FRhnBkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRS +P/TizPJhk9H9Z2vXUq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN +9SG9dKpN6nIDSdvHXx1iY8f93ZHsM+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxP +AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMmAd+BikoL1Rpzz +uvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAU18h +9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s +A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3t +OluwlN5E40EIosHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo ++fsicdl9sz1Gv7SEr5AcD48Saq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7 +KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYdDnkM/crqJIByw5c/8nerQyIKx+u2 +DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWDLfJ6v9r9jv6ly0Us +H8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0oyLQ +I+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK7 +5t98biGCwWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h +3PFaTWwyI0PurKju7koSCTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPz +Y11aWOIv4x3kqdbQCtCev9eBCfHJxyYNrJgWVqA= +-----END CERTIFICATE----- + +# Issuer: CN=Buypass Class 3 Root CA O=Buypass AS-983163327 +# Subject: CN=Buypass Class 3 Root CA O=Buypass AS-983163327 +# Label: "Buypass Class 3 Root CA" +# Serial: 2 +# MD5 Fingerprint: 3d:3b:18:9e:2c:64:5a:e8:d5:88:ce:0e:f9:37:c2:ec +# SHA1 Fingerprint: da:fa:f7:fa:66:84:ec:06:8f:14:50:bd:c7:c2:81:a5:bc:a9:64:57 +# SHA256 Fingerprint: ed:f7:eb:bc:a2:7a:2a:38:4d:38:7b:7d:40:10:c6:66:e2:ed:b4:84:3e:4c:29:b4:ae:1d:5b:93:32:e6:b2:4d +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd +MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg +Q2xhc3MgMyBSb290IENBMB4XDTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFow +TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw +HgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB +BQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRHsJ8Y +ZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3E +N3coTRiR5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9 +tznDDgFHmV0ST9tD+leh7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX +0DJq1l1sDPGzbjniazEuOQAnFN44wOwZZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c +/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH2xc519woe2v1n/MuwU8X +KhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV/afmiSTY +zIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvS +O1UQRwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D +34xFMFbG02SrZvPAXpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgP +K9Dx2hzLabjKSWJtyNBjYt1gD1iqj6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3 +AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFEe4zf/lb+74suwv +Tg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAACAj +QTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV +cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXS +IGrs/CIBKM+GuIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2 +HJLw5QY33KbmkJs4j1xrG0aGQ0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsa +O5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8ZORK15FTAaggiG6cX0S5y2CBNOxv +033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2KSb12tjE8nVhz36u +dmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz6MkE +kbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg41 +3OEMXbugUZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvD +u79leNKGef9JOxqDDPDeeOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq +4/g7u9xN12TyUb7mqqta6THuBrxzvxNiCp/HuZc= +-----END CERTIFICATE----- + +# Issuer: CN=T-TeleSec GlobalRoot Class 3 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center +# Subject: CN=T-TeleSec GlobalRoot Class 3 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center +# Label: "T-TeleSec GlobalRoot Class 3" +# Serial: 1 +# MD5 Fingerprint: ca:fb:40:a8:4e:39:92:8a:1d:fe:8e:2f:c4:27:ea:ef +# SHA1 Fingerprint: 55:a6:72:3e:cb:f2:ec:cd:c3:23:74:70:19:9d:2a:be:11:e3:81:d1 +# SHA256 Fingerprint: fd:73:da:d3:1c:64:4f:f1:b4:3b:ef:0c:cd:da:96:71:0b:9c:d9:87:5e:ca:7e:31:70:7a:f3:e9:6d:52:2b:bd +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx +KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd +BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl +YyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgxMDAxMTAyOTU2WhcNMzMxMDAxMjM1 +OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy +aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 +ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN +8ELg63iIVl6bmlQdTQyK9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/ +RLyTPWGrTs0NvvAgJ1gORH8EGoel15YUNpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4 +hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZFiP0Zf3WHHx+xGwpzJFu5 +ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W0eDrXltM +EnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGj +QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1 +A/d2O2GCahKqGFPrAyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOy +WL6ukK2YJ5f+AbGwUgC4TeQbIXQbfsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ +1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzTucpH9sry9uetuUg/vBa3wW30 +6gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7hP0HHRwA11fXT +91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml +e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4p +TpPDpFQUWw== +-----END CERTIFICATE----- + +# Issuer: CN=D-TRUST Root Class 3 CA 2 2009 O=D-Trust GmbH +# Subject: CN=D-TRUST Root Class 3 CA 2 2009 O=D-Trust GmbH +# Label: "D-TRUST Root Class 3 CA 2 2009" +# Serial: 623603 +# MD5 Fingerprint: cd:e0:25:69:8d:47:ac:9c:89:35:90:f7:fd:51:3d:2f +# SHA1 Fingerprint: 58:e8:ab:b0:36:15:33:fb:80:f7:9b:1b:6d:29:d3:ff:8d:5f:00:f0 +# SHA256 Fingerprint: 49:e7:a4:42:ac:f0:ea:62:87:05:00:54:b5:25:64:b6:50:e4:f4:9e:42:e3:48:d6:aa:38:e0:39:e9:57:b1:c1 +-----BEGIN CERTIFICATE----- +MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRF +MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBD +bGFzcyAzIENBIDIgMjAwOTAeFw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NTha +ME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMM +HkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOADER03 +UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42 +tSHKXzlABF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9R +ySPocq60vFYJfxLLHLGvKZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsM +lFqVlNpQmvH/pStmMaTJOKDfHR+4CS7zp+hnUquVH+BGPtikw8paxTGA6Eian5Rp +/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUCAwEAAaOCARowggEWMA8G +A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ4PGEMA4G +A1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVj +dG9yeS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUy +MENBJTIwMiUyMDIwMDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRl +cmV2b2NhdGlvbmxpc3QwQ6BBoD+GPWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3Js +L2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAwOS5jcmwwDQYJKoZIhvcNAQEL +BQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm2H6NMLVwMeni +acfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0 +o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4K +zCUqNQT4YJEVdT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8 +PIWmawomDeCTmGCufsYkl4phX5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3Y +Johw1+qRzT65ysCQblrGXnRl11z+o+I= +-----END CERTIFICATE----- + +# Issuer: CN=D-TRUST Root Class 3 CA 2 EV 2009 O=D-Trust GmbH +# Subject: CN=D-TRUST Root Class 3 CA 2 EV 2009 O=D-Trust GmbH +# Label: "D-TRUST Root Class 3 CA 2 EV 2009" +# Serial: 623604 +# MD5 Fingerprint: aa:c6:43:2c:5e:2d:cd:c4:34:c0:50:4f:11:02:4f:b6 +# SHA1 Fingerprint: 96:c9:1b:0b:95:b4:10:98:42:fa:d0:d8:22:79:fe:60:fa:b9:16:83 +# SHA256 Fingerprint: ee:c5:49:6b:98:8c:e9:86:25:b9:34:09:2e:ec:29:08:be:d0:b0:f3:16:c2:d4:73:0c:84:ea:f1:f3:d3:48:81 +-----BEGIN CERTIFICATE----- +MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRF +MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBD +bGFzcyAzIENBIDIgRVYgMjAwOTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUw +NDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNV +BAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAwOTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfSegpn +ljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM0 +3TP1YtHhzRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6Z +qQTMFexgaDbtCHu39b+T7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lR +p75mpoo6Kr3HGrHhFPC+Oh25z1uxav60sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8 +HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure3511H3a6UCAwEAAaOCASQw +ggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyvcop9Ntea +HNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFw +Oi8vZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xh +c3MlMjAzJTIwQ0ElMjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1E +RT9jZXJ0aWZpY2F0ZXJldm9jYXRpb25saXN0MEagRKBChkBodHRwOi8vd3d3LmQt +dHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xhc3NfM19jYV8yX2V2XzIwMDku +Y3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+PPoeUSbrh/Yp +3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05 +nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNF +CSuGdXzfX2lXANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7na +xpeG0ILD5EJt/rDiZE4OJudANCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqX +KVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVvw9y4AyHqnxbxLFS1 +-----END CERTIFICATE----- + +# Issuer: CN=CA Disig Root R2 O=Disig a.s. +# Subject: CN=CA Disig Root R2 O=Disig a.s. +# Label: "CA Disig Root R2" +# Serial: 10572350602393338211 +# MD5 Fingerprint: 26:01:fb:d8:27:a7:17:9a:45:54:38:1a:43:01:3b:03 +# SHA1 Fingerprint: b5:61:eb:ea:a4:de:e4:25:4b:69:1a:98:a5:57:47:c2:34:c7:d9:71 +# SHA256 Fingerprint: e2:3d:4a:03:6d:7b:70:e9:f5:95:b1:42:20:79:d2:b9:1e:df:bb:1f:b6:51:a0:63:3e:aa:8a:9d:c5:f8:07:03 +-----BEGIN CERTIFICATE----- +MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNV +BAYTAlNLMRMwEQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMu +MRkwFwYDVQQDExBDQSBEaXNpZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQy +MDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sxEzARBgNVBAcTCkJyYXRpc2xhdmEx +EzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERpc2lnIFJvb3QgUjIw +ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbCw3Oe +NcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNH +PWSb6WiaxswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3I +x2ymrdMxp7zo5eFm1tL7A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbe +QTg06ov80egEFGEtQX6sx3dOy1FU+16SGBsEWmjGycT6txOgmLcRK7fWV8x8nhfR +yyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqVg8NTEQxzHQuyRpDRQjrO +QG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa5Beny912 +H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJ +QfYEkoopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUD +i/ZnWejBBhG93c+AAk9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORs +nLMOPReisjQS1n6yqEm70XooQL6iFh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1 +rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud +DwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5uQu0wDQYJKoZI +hvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM +tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqf +GopTpti72TVVsRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkb +lvdhuDvEK7Z4bLQjb/D907JedR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka ++elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W81k/BfDxujRNt+3vrMNDcTa/F1bal +TFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjxmHHEt38OFdAlab0i +nSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01utI3 +gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18Dr +G5gPcFw0sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3Os +zMOl6W8KjptlwlCFtaOgUxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8x +L4ysEr3vQCj8KWefshNPZiTEUxnpHikV7+ZtsH8tZ/3zbBt1RqPlShfppNcL +-----END CERTIFICATE----- + +# Issuer: CN=ACCVRAIZ1 O=ACCV OU=PKIACCV +# Subject: CN=ACCVRAIZ1 O=ACCV OU=PKIACCV +# Label: "ACCVRAIZ1" +# Serial: 6828503384748696800 +# MD5 Fingerprint: d0:a0:5a:ee:05:b6:09:94:21:a1:7d:f1:b2:29:82:02 +# SHA1 Fingerprint: 93:05:7a:88:15:c6:4f:ce:88:2f:fa:91:16:52:28:78:bc:53:64:17 +# SHA256 Fingerprint: 9a:6e:c0:12:e1:a7:da:9d:be:34:19:4d:47:8a:d7:c0:db:18:22:fb:07:1d:f1:29:81:49:6e:d1:04:38:41:13 +-----BEGIN CERTIFICATE----- +MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UE +AwwJQUNDVlJBSVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQsw +CQYDVQQGEwJFUzAeFw0xMTA1MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQ +BgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwHUEtJQUNDVjENMAsGA1UECgwEQUND +VjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCb +qau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gMjmoY +HtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWo +G2ioPej0RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpA +lHPrzg5XPAOBOp0KoVdDaaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhr +IA8wKFSVf+DuzgpmndFALW4ir50awQUZ0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/ +0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDGWuzndN9wrqODJerWx5eH +k6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs78yM2x/47 +4KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMO +m3WR5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpa +cXpkatcnYGMN285J9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPl +uUsXQA+xtrn13k/c4LOsOxFwYIRKQ26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYI +KwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRwOi8vd3d3LmFjY3YuZXMvZmls +ZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEuY3J0MB8GCCsG +AQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2 +VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeT +VfZW6oHlNsyMHj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIG +CCsGAQUFBwICMIIBFB6CARAAQQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUA +cgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBhAO0AegAgAGQAZQAgAGwAYQAgAEEA +QwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUAYwBuAG8AbABvAGcA +7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBjAHQA +cgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAA +QwBQAFMAIABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUA +czAwBggrBgEFBQcCARYkaHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2Mu +aHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRt +aW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2MV9kZXIuY3JsMA4GA1Ud +DwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZIhvcNAQEF +BQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdp +D70ER9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gU +JyCpZET/LtZ1qmxNYEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+m +AM/EKXMRNt6GGT6d7hmKG9Ww7Y49nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepD +vV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJTS+xJlsndQAJxGJ3KQhfnlms +tn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3sCPdK6jT2iWH +7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h +I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szA +h1xA2syVP1XgNce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xF +d3+YJ5oyXSrjhO7FmGYvliAd3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2H +pPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3pEfbRD0tVNEYqi4Y7 +-----END CERTIFICATE----- + +# Issuer: CN=TWCA Global Root CA O=TAIWAN-CA OU=Root CA +# Subject: CN=TWCA Global Root CA O=TAIWAN-CA OU=Root CA +# Label: "TWCA Global Root CA" +# Serial: 3262 +# MD5 Fingerprint: f9:03:7e:cf:e6:9e:3c:73:7a:2a:90:07:69:ff:2b:96 +# SHA1 Fingerprint: 9c:bb:48:53:f6:a4:f6:d3:52:a4:e8:32:52:55:60:13:f5:ad:af:65 +# SHA256 Fingerprint: 59:76:90:07:f7:68:5d:0f:cd:50:87:2f:9f:95:d5:75:5a:5b:2b:45:7d:81:f3:69:2b:61:0a:98:67:2f:0e:1b +-----BEGIN CERTIFICATE----- +MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcx +EjAQBgNVBAoTCVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMT +VFdDQSBHbG9iYWwgUm9vdCBDQTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5 +NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQKEwlUQUlXQU4tQ0ExEDAOBgNVBAsT +B1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3QgQ0EwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2CnJfF +10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz +0ALfUPZVr2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfCh +MBwqoJimFb3u/Rk28OKRQ4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbH +zIh1HrtsBv+baz4X7GGqcXzGHaL3SekVtTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc +46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1WKKD+u4ZqyPpcC1jcxkt2 +yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99sy2sbZCi +laLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYP +oA/pyJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQA +BDzfuBSO6N+pjWxnkjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcE +qYSjMq+u7msXi7Kx/mzhkIyIqJdIzshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm +4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6gcFGn90xHNcgL +1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn +LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WF +H6vPNOw/KP4M8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNo +RI2T9GRwoD2dKAXDOXC4Ynsg/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+ +nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlglPx4mI88k1HtQJAH32RjJMtOcQWh +15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryPA9gK8kxkRr05YuWW +6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3mi4TW +nsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5j +wa19hAM8EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWz +aGHQRiapIVJpLesux+t3zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmy +KwbQBM0= +-----END CERTIFICATE----- + +# Issuer: CN=TeliaSonera Root CA v1 O=TeliaSonera +# Subject: CN=TeliaSonera Root CA v1 O=TeliaSonera +# Label: "TeliaSonera Root CA v1" +# Serial: 199041966741090107964904287217786801558 +# MD5 Fingerprint: 37:41:49:1b:18:56:9a:26:f5:ad:c2:66:fb:40:a5:4c +# SHA1 Fingerprint: 43:13:bb:96:f1:d5:86:9b:c1:4e:6a:92:f6:cf:f6:34:69:87:82:37 +# SHA256 Fingerprint: dd:69:36:fe:21:f8:f0:77:c1:23:a1:a5:21:c1:22:24:f7:22:55:b7:3e:03:a7:26:06:93:e8:a2:4b:0f:a3:89 +-----BEGIN CERTIFICATE----- +MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAw +NzEUMBIGA1UECgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJv +b3QgQ0EgdjEwHhcNMDcxMDE4MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYD +VQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwWVGVsaWFTb25lcmEgUm9vdCBDQSB2 +MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+6yfwIaPzaSZVfp3F +VRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA3GV1 +7CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+X +Z75Ljo1kB1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+ +/jXh7VB7qTCNGdMJjmhnXb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs +81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxHoLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkm +dtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3F0fUTPHSiXk+TT2YqGHe +Oh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJoWjiUIMu +sDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4 +pgd7gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fs +slESl1MpWtTwEhDcTwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQ +arMCpgKIv7NHfirZ1fpoeDVNAgMBAAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYD +VR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qWDNXr+nuqF+gTEjANBgkqhkiG +9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNmzqjMDfz1mgbl +dxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx +0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1Tj +TQpgcmLNkQfWpb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBed +Y2gea+zDTYa4EzAvXUYNR0PVG6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7 +Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpcc41teyWRyu5FrgZLAMzTsVlQ2jqI +OylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOTJsjrDNYmiLbAJM+7 +vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2qReW +t88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcn +HL/EVlP6Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVx +SK236thZiNSQvxaz2emsWWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY= +-----END CERTIFICATE----- + +# Issuer: CN=T-TeleSec GlobalRoot Class 2 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center +# Subject: CN=T-TeleSec GlobalRoot Class 2 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center +# Label: "T-TeleSec GlobalRoot Class 2" +# Serial: 1 +# MD5 Fingerprint: 2b:9b:9e:e4:7b:6c:1f:00:72:1a:cc:c1:77:79:df:6a +# SHA1 Fingerprint: 59:0d:2d:7d:88:4f:40:2e:61:7e:a5:62:32:17:65:cf:17:d8:94:e9 +# SHA256 Fingerprint: 91:e2:f5:78:8d:58:10:eb:a7:ba:58:73:7d:e1:54:8a:8e:ca:cd:01:45:98:bc:0b:14:3e:04:1b:17:05:25:52 +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx +KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd +BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl +YyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgxMDAxMTA0MDE0WhcNMzMxMDAxMjM1 +OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy +aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 +ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUd +AqSzm1nzHoqvNK38DcLZSBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiC +FoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/FvudocP05l03Sx5iRUKrERLMjfTlH6VJi +1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx9702cu+fjOlbpSD8DT6Iavq +jnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGVWOHAD3bZ +wI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGj +QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/ +WSA2AHmgoCJrjNXyYdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhy +NsZt+U2e+iKo4YFWz827n+qrkRk4r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPAC +uvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNfvNoBYimipidx5joifsFvHZVw +IEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR3p1m0IvVVGb6 +g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN +9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlP +BSeOE6Fuwg== +-----END CERTIFICATE----- + +# Issuer: CN=Atos TrustedRoot 2011 O=Atos +# Subject: CN=Atos TrustedRoot 2011 O=Atos +# Label: "Atos TrustedRoot 2011" +# Serial: 6643877497813316402 +# MD5 Fingerprint: ae:b9:c4:32:4b:ac:7f:5d:66:cc:77:94:bb:2a:77:56 +# SHA1 Fingerprint: 2b:b1:f5:3e:55:0c:1d:c5:f1:d4:e6:b7:6a:46:4b:55:06:02:ac:21 +# SHA256 Fingerprint: f3:56:be:a2:44:b7:a9:1e:b3:5d:53:ca:9a:d7:86:4a:ce:01:8e:2d:35:d5:f8:f9:6d:df:68:a6:f4:1a:a4:74 +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UE +AwwVQXRvcyBUcnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQG +EwJERTAeFw0xMTA3MDcxNDU4MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMM +FUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsGA1UECgwEQXRvczELMAkGA1UEBhMC +REUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCVhTuXbyo7LjvPpvMp +Nb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr54rM +VD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+ +SZFhyBH+DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ +4J7sVaE3IqKHBAUsR320HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0L +cp2AMBYHlT8oDv3FdU9T1nSatCQujgKRz3bFmx5VdJx4IbHwLfELn8LVlhgf8FQi +eowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7Rl+lwrrw7GWzbITAPBgNV +HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZbNshMBgG +A1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3 +DQEBCwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8j +vZfza1zv7v1Apt+hk6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kP +DpFrdRbhIfzYJsdHt6bPWHJxfrrhTZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pc +maHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a961qn8FYiqTxlVMYVqL2Gns2D +lmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G3mB/ufNPRJLv +KrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed +-----END CERTIFICATE----- + +# Issuer: CN=QuoVadis Root CA 1 G3 O=QuoVadis Limited +# Subject: CN=QuoVadis Root CA 1 G3 O=QuoVadis Limited +# Label: "QuoVadis Root CA 1 G3" +# Serial: 687049649626669250736271037606554624078720034195 +# MD5 Fingerprint: a4:bc:5b:3f:fe:37:9a:fa:64:f0:e2:fa:05:3d:0b:ab +# SHA1 Fingerprint: 1b:8e:ea:57:96:29:1a:c9:39:ea:b8:0a:81:1a:73:73:c0:93:79:67 +# SHA256 Fingerprint: 8a:86:6f:d1:b2:76:b5:7e:57:8e:92:1c:65:82:8a:2b:ed:58:e9:f2:f2:88:05:41:34:b7:f1:f4:bf:c9:cc:74 +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQEL +BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc +BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMSBHMzAeFw0xMjAxMTIxNzI3NDRaFw00 +MjAxMTIxNzI3NDRaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDEgRzMwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjunybEC0BJyFuTHK3C3kEakEPBtV +wedYMB0ktMPvhd6MLOHBPd+C5k+tR4ds7FtJwUrVu4/sh6x/gpqG7D0DmVIB0jWe +rNrwU8lmPNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOGMAqNF341 +68Xfuw6cwI2H44g4hWf6Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh +4Pw5qlPafX7PGglTvF0FBM+hSo+LdoINofjSxxR3W5A2B4GbPgb6Ul5jxaYA/qXp +UhtStZI5cgMJYr2wYBZupt0lwgNm3fME0UDiTouG9G/lg6AnhF4EwfWQvTA9xO+o +abw4m6SkltFi2mnAAZauy8RRNOoMqv8hjlmPSlzkYZqn0ukqeI1RPToV7qJZjqlc +3sX5kCLliEVx3ZGZbHqfPT2YfF72vhZooF6uCyP8Wg+qInYtyaEQHeTTRCOQiJ/G +KubX9ZqzWB4vMIkIG1SitZgj7Ah3HJVdYdHLiZxfokqRmu8hqkkWCKi9YSgxyXSt +hfbZxbGL0eUQMk1fiyA6PEkfM4VZDdvLCXVDaXP7a3F98N/ETH3Goy7IlXnLc6KO +Tk0k+17kBL5yG6YnLUlamXrXXAkgt3+UuU/xDRxeiEIbEbfnkduebPRq34wGmAOt +zCjvpUfzUwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZIhvcNAQELBQAD +ggIBABj6W3X8PnrHX3fHyt/PX8MSxEBd1DKquGrX1RUVRpgjpeaQWxiZTOOtQqOC +MTaIzen7xASWSIsBx40Bz1szBpZGZnQdT+3Btrm0DWHMY37XLneMlhwqI2hrhVd2 +cDMT/uFPpiN3GPoajOi9ZcnPP/TJF9zrx7zABC4tRi9pZsMbj/7sPtPKlL92CiUN +qXsCHKnQO18LwIE6PWThv6ctTr1NxNgpxiIY0MWscgKCP6o6ojoilzHdCGPDdRS5 +YCgtW2jgFqlmgiNR9etT2DGbe+m3nUvriBbP+V04ikkwj+3x6xn0dxoxGE1nVGwv +b2X52z3sIexe9PSLymBlVNFxZPT5pqOBMzYzcfCkeF9OrYMh3jRJjehZrJ3ydlo2 +8hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ+p6Q9pxyz0fawx/k +NSBT8lTR32GDpgLiJTjehTItXnOQUl1CxM49S+H5GYQd1aJQzEH7QRTDvdbJWqNj +ZgKAvQU6O0ec7AAmTPWIUb+oI38YB7AL7YsmoWTTYUrrXJ/es69nA7Mf3W1daWhp +q1467HxpvMc7hU6eFbm0FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFt +nh8GKjwStIsPm6Ik8KaN1nrgS7ZklmOVhMJKzRwuJIczYOXD +-----END CERTIFICATE----- + +# Issuer: CN=QuoVadis Root CA 2 G3 O=QuoVadis Limited +# Subject: CN=QuoVadis Root CA 2 G3 O=QuoVadis Limited +# Label: "QuoVadis Root CA 2 G3" +# Serial: 390156079458959257446133169266079962026824725800 +# MD5 Fingerprint: af:0c:86:6e:bf:40:2d:7f:0b:3e:12:50:ba:12:3d:06 +# SHA1 Fingerprint: 09:3c:61:f3:8b:8b:dc:7d:55:df:75:38:02:05:00:e1:25:f5:c8:36 +# SHA256 Fingerprint: 8f:e4:fb:0a:f9:3a:4d:0d:67:db:0b:eb:b2:3e:37:c7:1b:f3:25:dc:bc:dd:24:0e:a0:4d:af:58:b4:7e:18:40 +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQEL +BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc +BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00 +MjAxMTIxODU5MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDIgRzMwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjcV4g/Ruv5r+LrI3HimtFhZiFf +qq8nUeVuGxbULX1QsFN3vXg6YOJkApt8hpvWGo6t/x8Vf9WVHhLL5hSEBMHfNrMW +n4rjyduYNM7YMxcoRvynyfDStNVNCXJJ+fKH46nafaF9a7I6JaltUkSs+L5u+9ym +c5GQYaYDFCDy54ejiK2toIz/pgslUiXnFgHVy7g1gQyjO/Dh4fxaXc6AcW34Sas+ +O7q414AB+6XrW7PFXmAqMaCvN+ggOp+oMiwMzAkd056OXbxMmO7FGmh77FOm6RQ1 +o9/NgJ8MSPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+lV0POKa2Mq1W/xPtbAd0j +IaFYAI7D0GoT7RPjEiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZoL1NesNKq +IcGY5jDjZ1XHm26sGahVpkUG0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz +8eQQsSWu1ZK7E8EM4DnatDlXtas1qnIhO4M15zHfeiFuuDIIfR0ykRVKYnLP43eh +vNURG3YBZwjgQQvD6xVu+KQZ2aKrr+InUlYrAoosFCT5v0ICvybIxo/gbjh9Uy3l +7ZizlWNof/k19N+IxWA1ksB8aRxhlRbQ694Lrz4EEEVlWFA4r0jyWbYW8jwNkALG +cC4BrTwV1wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZIhvcNAQELBQAD +ggIBAJHfgD9DCX5xwvfrs4iP4VGyvD11+ShdyLyZm3tdquXK4Qr36LLTn91nMX66 +AarHakE7kNQIXLJgapDwyM4DYvmL7ftuKtwGTTwpD4kWilhMSA/ohGHqPHKmd+RC +roijQ1h5fq7KpVMNqT1wvSAZYaRsOPxDMuHBR//47PERIjKWnML2W2mWeyAMQ0Ga +W/ZZGYjeVYg3UQt4XAoeo0L9x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4n +lv1mNDthcnPxFlxHBlRJAHpYErAK74X9sbgzdWqTHBLmYF5vHX/JHyPLhGGfHoJE ++V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDbIl9qxV6XU/IyAgkwo1jwDQHV +csaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+D77vfoRrQ+NwmNtd +dbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpnIdsPNWNg +KCLjsZWDzYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeM +HVOyToV7BjjHLPj4sHKNJeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4 +WSr2Rz0ZiC3oheGe7IUIarFsNMkd7EgrO3jtZsSOeWmD3n+M +-----END CERTIFICATE----- + +# Issuer: CN=QuoVadis Root CA 3 G3 O=QuoVadis Limited +# Subject: CN=QuoVadis Root CA 3 G3 O=QuoVadis Limited +# Label: "QuoVadis Root CA 3 G3" +# Serial: 268090761170461462463995952157327242137089239581 +# MD5 Fingerprint: df:7d:b9:ad:54:6f:68:a1:df:89:57:03:97:43:b0:d7 +# SHA1 Fingerprint: 48:12:bd:92:3c:a8:c4:39:06:e7:30:6d:27:96:e6:a4:cf:22:2e:7d +# SHA256 Fingerprint: 88:ef:81:de:20:2e:b0:18:45:2e:43:f8:64:72:5c:ea:5f:bd:1f:c2:d9:d2:05:73:07:09:c5:d8:b8:69:0f:46 +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQEL +BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc +BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMyBHMzAeFw0xMjAxMTIyMDI2MzJaFw00 +MjAxMTIyMDI2MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDMgRzMwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQCzyw4QZ47qFJenMioKVjZ/aEzHs286IxSR +/xl/pcqs7rN2nXrpixurazHb+gtTTK/FpRp5PIpM/6zfJd5O2YIyC0TeytuMrKNu +FoM7pmRLMon7FhY4futD4tN0SsJiCnMK3UmzV9KwCoWdcTzeo8vAMvMBOSBDGzXR +U7Ox7sWTaYI+FrUoRqHe6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+c +ra1AdHkrAj80//ogaX3T7mH1urPnMNA3I4ZyYUUpSFlob3emLoG+B01vr87ERROR +FHAGjx+f+IdpsQ7vw4kZ6+ocYfx6bIrc1gMLnia6Et3UVDmrJqMz6nWB2i3ND0/k +A9HvFZcba5DFApCTZgIhsUfei5pKgLlVj7WiL8DWM2fafsSntARE60f75li59wzw +eyuxwHApw0BiLTtIadwjPEjrewl5qW3aqDCYz4ByA4imW0aucnl8CAMhZa634Ryl +sSqiMd5mBPfAdOhx3v89WcyWJhKLhZVXGqtrdQtEPREoPHtht+KPZ0/l7DxMYIBp +VzgeAVuNVejH38DMdyM0SXV89pgR6y3e7UEuFAUCf+D+IOs15xGsIs5XPd7JMG0Q +A4XN8f+MFrXBsj6IbGB/kE+V9/YtrQE5BwT6dYB9v0lQ7e/JxHwc64B+27bQ3RP+ +ydOc17KXqQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQUxhfQvKjqAkPyGwaZXSuQILnXnOQwDQYJKoZIhvcNAQELBQAD +ggIBADRh2Va1EodVTd2jNTFGu6QHcrxfYWLopfsLN7E8trP6KZ1/AvWkyaiTt3px +KGmPc+FSkNrVvjrlt3ZqVoAh313m6Tqe5T72omnHKgqwGEfcIHB9UqM+WXzBusnI +FUBhynLWcKzSt/Ac5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5Wvv +oxXqA/4Ti2Tk08HS6IT7SdEQTXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFg +u/BYpbWcC/ePIlUnwEsBbTuZDdQdm2NnL9DuDcpmvJRPpq3t/O5jrFc/ZSXPsoaP +0Aj/uHYUbt7lJ+yreLVTubY/6CD50qi+YUbKh4yE8/nxoGibIh6BJpsQBJFxwAYf +3KDTuVan45gtf4Od34wrnDKOMpTwATwiKp9Dwi7DmDkHOHv8XgBCH/MyJnmDhPbl +8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H6QrG2vd+ +DhcI00iX0HGS8A85PjRqHH3Y8iKuu2n0M7SmSFXRDw4m6Oy2Cy2nhTXN/VnIn9HN +PlopNLk9hM6xZdRZkZFWdSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/ +ywaZWWDYWGWVjUTR939+J399roD1B0y2PpxxVJkES/1Y+Zj0 +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Assured ID Root G2 O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Assured ID Root G2 O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Assured ID Root G2" +# Serial: 15385348160840213938643033620894905419 +# MD5 Fingerprint: 92:38:b9:f8:63:24:82:65:2c:57:33:e6:fe:81:8f:9d +# SHA1 Fingerprint: a1:4b:48:d9:43:ee:0a:0e:40:90:4f:3c:e0:a4:c0:91:93:51:5d:3f +# SHA256 Fingerprint: 7d:05:eb:b6:82:33:9f:8c:94:51:ee:09:4e:eb:fe:fa:79:53:a1:14:ed:b2:f4:49:49:45:2f:ab:7d:2f:c1:85 +-----BEGIN CERTIFICATE----- +MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBl +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv +b3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl +cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSA +n61UQbVH35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4Htecc +biJVMWWXvdMX0h5i89vqbFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9Hp +EgjAALAcKxHad3A2m67OeYfcgnDmCXRwVWmvo2ifv922ebPynXApVfSr/5Vh88lA +bx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OPYLfykqGxvYmJHzDNw6Yu +YjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+RnlTGNAgMB +AAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQW +BBTOw0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPI +QW5pJ6d1Ee88hjZv0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I +0jJmwYrA8y8678Dj1JGG0VDjA9tzd29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4Gni +lmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAWhsI6yLETcDbYz+70CjTVW0z9 +B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0MjomZmWzwPDCv +ON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo +IhNzbM8m9Yop5w== +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Assured ID Root G3 O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Assured ID Root G3 O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Assured ID Root G3" +# Serial: 15459312981008553731928384953135426796 +# MD5 Fingerprint: 7c:7f:65:31:0c:81:df:8d:ba:3e:99:e2:5c:ad:6e:fb +# SHA1 Fingerprint: f5:17:a2:4f:9a:48:c6:c9:f8:a2:00:26:9f:dc:0f:48:2c:ab:30:89 +# SHA256 Fingerprint: 7e:37:cb:8b:4c:47:09:0c:ab:36:55:1b:a6:f4:5d:b8:40:68:0f:ba:16:6a:95:2d:b1:00:71:7f:43:05:3f:c2 +-----BEGIN CERTIFICATE----- +MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQsw +CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu +ZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3Qg +RzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQGEwJV +UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu +Y29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQBgcq +hkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJf +Zn4f5dwbRXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17Q +RSAPWXYQ1qAk8C3eNvJsKTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ +BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgFUaFNN6KDec6NHSrkhDAKBggqhkjOPQQD +AwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5FyYZ5eEJJZVrmDxxDnOOlY +JjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy1vUhZscv +6pZjamVFkpUBtA== +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Global Root G2 O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Global Root G2 O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Global Root G2" +# Serial: 4293743540046975378534879503202253541 +# MD5 Fingerprint: e4:a6:8a:c8:54:ac:52:42:46:0a:fd:72:48:1b:2a:44 +# SHA1 Fingerprint: df:3c:24:f9:bf:d6:66:76:1b:26:80:73:fe:06:d1:cc:8d:4f:82:a4 +# SHA256 Fingerprint: cb:3c:cb:b7:60:31:e5:e0:13:8f:8d:d3:9a:23:f9:de:47:ff:c3:5e:43:c1:14:4c:ea:27:d4:6a:5a:b1:cb:5f +-----BEGIN CERTIFICATE----- +MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBh +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH +MjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVT +MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j +b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI +2/Ou8jqJkTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx +1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQ +q2EGnI/yuum06ZIya7XzV+hdG82MHauVBJVJ8zUtluNJbd134/tJS7SsVQepj5Wz +tCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQ +vIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQABo0IwQDAP +BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV +5uNu5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY +1Yl9PMWLSn/pvtsrF9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4 +NeF22d+mQrvHRAiGfzZ0JFrabA0UWTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NG +Fdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBHQRFXGU7Aj64GxJUTFy8bJZ91 +8rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/iyK5S9kJRaTe +pLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl +MrY= +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Global Root G3 O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Global Root G3 O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Global Root G3" +# Serial: 7089244469030293291760083333884364146 +# MD5 Fingerprint: f5:5d:a4:50:a5:fb:28:7e:1e:0f:0d:cc:96:57:56:ca +# SHA1 Fingerprint: 7e:04:de:89:6a:3e:66:6d:00:e6:87:d3:3f:fa:d9:3b:e8:3d:34:9e +# SHA256 Fingerprint: 31:ad:66:48:f8:10:41:38:c7:38:f3:9e:a4:32:01:33:39:3e:3a:18:cc:02:29:6e:f9:7c:2a:c9:ef:67:31:d0 +-----BEGIN CERTIFICATE----- +MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQsw +CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu +ZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAe +Fw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVTMRUw +EwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20x +IDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0CAQYF +K4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FG +fp4tn+6OYwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPO +Z9wj/wMco+I+o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAd +BgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNpYim8S8YwCgYIKoZIzj0EAwMDaAAwZQIx +AK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y3maTD/HMsQmP3Wyr+mt/ +oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34VOKa5Vt8 +sycX +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Trusted Root G4 O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Trusted Root G4 O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Trusted Root G4" +# Serial: 7451500558977370777930084869016614236 +# MD5 Fingerprint: 78:f2:fc:aa:60:1f:2f:b4:eb:c9:37:ba:53:2e:75:49 +# SHA1 Fingerprint: dd:fb:16:cd:49:31:c9:73:a2:03:7d:3f:c8:3a:4d:7d:77:5d:05:e4 +# SHA256 Fingerprint: 55:2f:7b:dc:f1:a7:af:9e:6c:e6:72:01:7f:4f:12:ab:f7:72:40:c7:8e:76:1a:c2:03:d1:d9:d2:0a:c8:99:88 +-----BEGIN CERTIFICATE----- +MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBi +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3Qg +RzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBiMQswCQYDVQQGEwJV +UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu +Y29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3y +ithZwuEppz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1If +xp4VpX6+n6lXFllVcq9ok3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDV +ySAdYyktzuxeTsiT+CFhmzTrBcZe7FsavOvJz82sNEBfsXpm7nfISKhmV1efVFiO +DCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGYQJB5w3jHtrHEtWoYOAMQ +jdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6MUSaM0C/ +CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCi +EhtmmnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADM +fRyVw4/3IbKyEbe7f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QY +uKZ3AeEPlAwhHbJUKSWJbOUOUlFHdL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXK +chYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8oR7FwI+isX4KJpn15GkvmB0t +9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +hjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQAD +ggIBALth2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2 +SV1EY+CtnJYYZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd ++SeuMIW59mdNOj6PWTkiU0TryF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWc +fFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy7zBZLq7gcfJW5GqXb5JQbZaNaHqa +sjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iahixTXTBmyUEFxPT9N +cCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN5r5N +0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie +4u1Ki7wb/UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mI +r/OSmbaz5mEP0oUA51Aa5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1 +/YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tKG48BtieVU+i2iW1bvGjUI+iLUaJW+fCm +gKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP82Z+ +-----END CERTIFICATE----- + +# Issuer: CN=COMODO RSA Certification Authority O=COMODO CA Limited +# Subject: CN=COMODO RSA Certification Authority O=COMODO CA Limited +# Label: "COMODO RSA Certification Authority" +# Serial: 101909084537582093308941363524873193117 +# MD5 Fingerprint: 1b:31:b0:71:40:36:cc:14:36:91:ad:c4:3e:fd:ec:18 +# SHA1 Fingerprint: af:e5:d2:44:a8:d1:19:42:30:ff:47:9f:e2:f8:97:bb:cd:7a:8c:b4 +# SHA256 Fingerprint: 52:f0:e1:c4:e5:8e:c6:29:29:1b:60:31:7f:07:46:71:b8:5d:7e:a8:0d:5b:07:27:34:63:53:4b:32:b4:02:34 +-----BEGIN CERTIFICATE----- +MIIF2DCCA8CgAwIBAgIQTKr5yttjb+Af907YWwOGnTANBgkqhkiG9w0BAQwFADCB +hTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G +A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNV +BAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMTE5 +MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgT +EkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR +Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCR +6FSS0gpWsawNJN3Fz0RndJkrN6N9I3AAcbxT38T6KhKPS38QVr2fcHK3YX/JSw8X +pz3jsARh7v8Rl8f0hj4K+j5c+ZPmNHrZFGvnnLOFoIJ6dq9xkNfs/Q36nGz637CC +9BR++b7Epi9Pf5l/tfxnQ3K9DADWietrLNPtj5gcFKt+5eNu/Nio5JIk2kNrYrhV +/erBvGy2i/MOjZrkm2xpmfh4SDBF1a3hDTxFYPwyllEnvGfDyi62a+pGx8cgoLEf +Zd5ICLqkTqnyg0Y3hOvozIFIQ2dOciqbXL1MGyiKXCJ7tKuY2e7gUYPDCUZObT6Z ++pUX2nwzV0E8jVHtC7ZcryxjGt9XyD+86V3Em69FmeKjWiS0uqlWPc9vqv9JWL7w +qP/0uK3pN/u6uPQLOvnoQ0IeidiEyxPx2bvhiWC4jChWrBQdnArncevPDt09qZah +SL0896+1DSJMwBGB7FY79tOi4lu3sgQiUpWAk2nojkxl8ZEDLXB0AuqLZxUpaVIC +u9ffUGpVRr+goyhhf3DQw6KqLCGqR84onAZFdr+CGCe01a60y1Dma/RMhnEw6abf +Fobg2P9A3fvQQoh/ozM6LlweQRGBY84YcWsr7KaKtzFcOmpH4MN5WdYgGq/yapiq +crxXStJLnbsQ/LBMQeXtHT1eKJ2czL+zUdqnR+WEUwIDAQABo0IwQDAdBgNVHQ4E +FgQUu69+Aj36pvE8hI6t7jiY7NkyMtQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB +/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAArx1UaEt65Ru2yyTUEUAJNMnMvl +wFTPoCWOAvn9sKIN9SCYPBMtrFaisNZ+EZLpLrqeLppysb0ZRGxhNaKatBYSaVqM +4dc+pBroLwP0rmEdEBsqpIt6xf4FpuHA1sj+nq6PK7o9mfjYcwlYRm6mnPTXJ9OV +2jeDchzTc+CiR5kDOF3VSXkAKRzH7JsgHAckaVd4sjn8OoSgtZx8jb8uk2Intzna +FxiuvTwJaP+EmzzV1gsD41eeFPfR60/IvYcjt7ZJQ3mFXLrrkguhxuhoqEwWsRqZ +CuhTLJK7oQkYdQxlqHvLI7cawiiFwxv/0Cti76R7CZGYZ4wUAc1oBmpjIXUDgIiK +boHGhfKppC3n9KUkEEeDys30jXlYsQab5xoq2Z0B15R97QNKyvDb6KkBPvVWmcke +jkk9u+UJueBPSZI9FoJAzMxZxuY67RIuaTxslbH9qh17f4a+Hg4yRvv7E491f0yL +S0Zj/gA0QHDBw7mh3aZw4gSzQbzpgJHqZJx64SIDqZxubw5lT2yHh17zbqD5daWb +QOhTsiedSrnAdyGN/4fy3ryM7xfft0kL0fJuMAsaDk527RH89elWsn2/x20Kk4yl +0MC2Hb46TpSi125sC8KKfPog88Tk5c0NqMuRkrF8hey1FGlmDoLnzc7ILaZRfyHB +NVOFBkpdn627G190 +-----END CERTIFICATE----- + +# Issuer: CN=USERTrust RSA Certification Authority O=The USERTRUST Network +# Subject: CN=USERTrust RSA Certification Authority O=The USERTRUST Network +# Label: "USERTrust RSA Certification Authority" +# Serial: 2645093764781058787591871645665788717 +# MD5 Fingerprint: 1b:fe:69:d1:91:b7:19:33:a3:72:a8:0f:e1:55:e5:b5 +# SHA1 Fingerprint: 2b:8f:1b:57:33:0d:bb:a2:d0:7a:6c:51:f7:0e:e9:0d:da:b9:ad:8e +# SHA256 Fingerprint: e7:93:c9:b0:2f:d8:aa:13:e2:1c:31:22:8a:cc:b0:81:19:64:3b:74:9c:89:89:64:b1:74:6d:46:c3:d4:cb:d2 +-----BEGIN CERTIFICATE----- +MIIF3jCCA8agAwIBAgIQAf1tMPyjylGoG7xkDjUDLTANBgkqhkiG9w0BAQwFADCB +iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl +cnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNV +BAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAw +MjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNV +BAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU +aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2Vy +dGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +AoICAQCAEmUXNg7D2wiz0KxXDXbtzSfTTK1Qg2HiqiBNCS1kCdzOiZ/MPans9s/B +3PHTsdZ7NygRK0faOca8Ohm0X6a9fZ2jY0K2dvKpOyuR+OJv0OwWIJAJPuLodMkY +tJHUYmTbf6MG8YgYapAiPLz+E/CHFHv25B+O1ORRxhFnRghRy4YUVD+8M/5+bJz/ +Fp0YvVGONaanZshyZ9shZrHUm3gDwFA66Mzw3LyeTP6vBZY1H1dat//O+T23LLb2 +VN3I5xI6Ta5MirdcmrS3ID3KfyI0rn47aGYBROcBTkZTmzNg95S+UzeQc0PzMsNT +79uq/nROacdrjGCT3sTHDN/hMq7MkztReJVni+49Vv4M0GkPGw/zJSZrM233bkf6 +c0Plfg6lZrEpfDKEY1WJxA3Bk1QwGROs0303p+tdOmw1XNtB1xLaqUkL39iAigmT +Yo61Zs8liM2EuLE/pDkP2QKe6xJMlXzzawWpXhaDzLhn4ugTncxbgtNMs+1b/97l +c6wjOy0AvzVVdAlJ2ElYGn+SNuZRkg7zJn0cTRe8yexDJtC/QV9AqURE9JnnV4ee +UB9XVKg+/XRjL7FQZQnmWEIuQxpMtPAlR1n6BB6T1CZGSlCBst6+eLf8ZxXhyVeE +Hg9j1uliutZfVS7qXMYoCAQlObgOK6nyTJccBz8NUvXt7y+CDwIDAQABo0IwQDAd +BgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rIDZsswDgYDVR0PAQH/BAQDAgEGMA8G +A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAFzUfA3P9wF9QZllDHPF +Up/L+M+ZBn8b2kMVn54CVVeWFPFSPCeHlCjtHzoBN6J2/FNQwISbxmtOuowhT6KO +VWKR82kV2LyI48SqC/3vqOlLVSoGIG1VeCkZ7l8wXEskEVX/JJpuXior7gtNn3/3 +ATiUFJVDBwn7YKnuHKsSjKCaXqeYalltiz8I+8jRRa8YFWSQEg9zKC7F4iRO/Fjs +8PRF/iKz6y+O0tlFYQXBl2+odnKPi4w2r78NBc5xjeambx9spnFixdjQg3IM8WcR +iQycE0xyNN+81XHfqnHd4blsjDwSXWXavVcStkNr/+XeTWYRUc+ZruwXtuhxkYze +Sf7dNXGiFSeUHM9h4ya7b6NnJSFd5t0dCy5oGzuCr+yDZ4XUmFF0sbmZgIn/f3gZ +XHlKYC6SQK5MNyosycdiyA5d9zZbyuAlJQG03RoHnHcAP9Dc1ew91Pq7P8yF1m9/ +qS3fuQL39ZeatTXaw2ewh0qpKJ4jjv9cJ2vhsE/zB+4ALtRZh8tSQZXq9EfX7mRB +VXyNWQKV3WKdwrnuWih0hKWbt5DHDAff9Yk2dDLWKMGwsAvgnEzDHNb842m1R0aB +L6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gxQ+6IHdfG +jjxDah2nGN59PRbxYvnKkKj9 +-----END CERTIFICATE----- + +# Issuer: CN=USERTrust ECC Certification Authority O=The USERTRUST Network +# Subject: CN=USERTrust ECC Certification Authority O=The USERTRUST Network +# Label: "USERTrust ECC Certification Authority" +# Serial: 123013823720199481456569720443997572134 +# MD5 Fingerprint: fa:68:bc:d9:b5:7f:ad:fd:c9:1d:06:83:28:cc:24:c1 +# SHA1 Fingerprint: d1:cb:ca:5d:b2:d5:2a:7f:69:3b:67:4d:e5:f0:5a:1d:0c:95:7d:f0 +# SHA256 Fingerprint: 4f:f4:60:d5:4b:9c:86:da:bf:bc:fc:57:12:e0:40:0d:2b:ed:3f:bc:4d:4f:bd:aa:86:e0:6a:dc:d2:a9:ad:7a +-----BEGIN CERTIFICATE----- +MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDEL +MAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNl +eSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMT +JVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMjAx +MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgT +Ck5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVUaGUg +VVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlm +aWNhdGlvbiBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqflo +I+d61SRvU8Za2EurxtW20eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinng +o4N+LZfQYcTxmdwlkWOrfzCjtHDix6EznPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0G +A1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNVHQ8BAf8EBAMCAQYwDwYD +VR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBBHU6+4WMB +zzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbW +RNZu9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg= +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R5 +# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R5 +# Label: "GlobalSign ECC Root CA - R5" +# Serial: 32785792099990507226680698011560947931244 +# MD5 Fingerprint: 9f:ad:3b:1c:02:1e:8a:ba:17:74:38:81:0c:a2:bc:08 +# SHA1 Fingerprint: 1f:24:c6:30:cd:a4:18:ef:20:69:ff:ad:4f:dd:5f:46:3a:1b:69:aa +# SHA256 Fingerprint: 17:9f:bc:14:8a:3d:d0:0f:d2:4e:a1:34:58:cc:43:bf:a7:f5:9c:81:82:d7:83:a5:13:f6:eb:ec:10:0c:89:24 +-----BEGIN CERTIFICATE----- +MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEk +MCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpH +bG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoX +DTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBD +QSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu +MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6SFkc +8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8ke +hOvRnkmSh5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYD +VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYI +KoZIzj0EAwMDaAAwZQIxAOVpEslu28YxuglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg +515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7yFz9SO8NdCKoCOJuxUnO +xwy8p2Fp8fc74SrL+SvzZpA3 +-----END CERTIFICATE----- + +# Issuer: CN=IdenTrust Commercial Root CA 1 O=IdenTrust +# Subject: CN=IdenTrust Commercial Root CA 1 O=IdenTrust +# Label: "IdenTrust Commercial Root CA 1" +# Serial: 13298821034946342390520003877796839426 +# MD5 Fingerprint: b3:3e:77:73:75:ee:a0:d3:e3:7e:49:63:49:59:bb:c7 +# SHA1 Fingerprint: df:71:7e:aa:4a:d9:4e:c9:55:84:99:60:2d:48:de:5f:bc:f0:3a:25 +# SHA256 Fingerprint: 5d:56:49:9b:e4:d2:e0:8b:cf:ca:d0:8a:3e:38:72:3d:50:50:3b:de:70:69:48:e4:2f:55:60:30:19:e5:28:ae +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIQCgFCgAAAAUUjyES1AAAAAjANBgkqhkiG9w0BAQsFADBK +MQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVu +VHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwHhcNMTQwMTE2MTgxMjIzWhcNMzQw +MTE2MTgxMjIzWjBKMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScw +JQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQCnUBneP5k91DNG8W9RYYKyqU+PZ4ldhNlT +3Qwo2dfw/66VQ3KZ+bVdfIrBQuExUHTRgQ18zZshq0PirK1ehm7zCYofWjK9ouuU ++ehcCuz/mNKvcbO0U59Oh++SvL3sTzIwiEsXXlfEU8L2ApeN2WIrvyQfYo3fw7gp +S0l4PJNgiCL8mdo2yMKi1CxUAGc1bnO/AljwpN3lsKImesrgNqUZFvX9t++uP0D1 +bVoE/c40yiTcdCMbXTMTEl3EASX2MN0CXZ/g1Ue9tOsbobtJSdifWwLziuQkkORi +T0/Br4sOdBeo0XKIanoBScy0RnnGF7HamB4HWfp1IYVl3ZBWzvurpWCdxJ35UrCL +vYf5jysjCiN2O/cz4ckA82n5S6LgTrx+kzmEB/dEcH7+B1rlsazRGMzyNeVJSQjK +Vsk9+w8YfYs7wRPCTY/JTw436R+hDmrfYi7LNQZReSzIJTj0+kuniVyc0uMNOYZK +dHzVWYfCP04MXFL0PfdSgvHqo6z9STQaKPNBiDoT7uje/5kdX7rL6B7yuVBgwDHT +c+XvvqDtMwt0viAgxGds8AgDelWAf0ZOlqf0Hj7h9tgJ4TNkK2PXMl6f+cB7D3hv +l7yTmvmcEpB4eoCHFddydJxVdHixuuFucAS6T6C6aMN7/zHwcz09lCqxC0EOoP5N +iGVreTO01wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zAdBgNVHQ4EFgQU7UQZwNPwBovupHu+QucmVMiONnYwDQYJKoZIhvcNAQELBQAD +ggIBAA2ukDL2pkt8RHYZYR4nKM1eVO8lvOMIkPkp165oCOGUAFjvLi5+U1KMtlwH +6oi6mYtQlNeCgN9hCQCTrQ0U5s7B8jeUeLBfnLOic7iPBZM4zY0+sLj7wM+x8uwt +LRvM7Kqas6pgghstO8OEPVeKlh6cdbjTMM1gCIOQ045U8U1mwF10A0Cj7oV+wh93 +nAbowacYXVKV7cndJZ5t+qntozo00Fl72u1Q8zW/7esUTTHHYPTa8Yec4kjixsU3 ++wYQ+nVZZjFHKdp2mhzpgq7vmrlR94gjmmmVYjzlVYA211QC//G5Xc7UI2/YRYRK +W2XviQzdFKcgyxilJbQN+QHwotL0AMh0jqEqSI5l2xPE4iUXfeu+h1sXIFRRk0pT +AwvsXcoz7WL9RccvW9xYoIA55vrX/hMUpu09lEpCdNTDd1lzzY9GvlU47/rokTLq +l1gEIt44w8y8bckzOmoKaT+gyOpyj4xjhiO9bTyWnpXgSUyqorkqG5w2gXjtw+hG +4iZZRHUe2XWJUc0QhJ1hYMtd+ZciTY6Y5uN/9lu7rs3KSoFrXgvzUeF0K+l+J6fZ +mUlO+KWA2yUPHGNiiskzZ2s8EIPGrd6ozRaOjfAHN3Gf8qv8QfXBi+wAN10J5U6A +7/qxXDgGpRtK4dw4LTzcqx+QGtVKnO7RcGzM7vRX+Bi6hG6H +-----END CERTIFICATE----- + +# Issuer: CN=IdenTrust Public Sector Root CA 1 O=IdenTrust +# Subject: CN=IdenTrust Public Sector Root CA 1 O=IdenTrust +# Label: "IdenTrust Public Sector Root CA 1" +# Serial: 13298821034946342390521976156843933698 +# MD5 Fingerprint: 37:06:a5:b0:fc:89:9d:ba:f4:6b:8c:1a:64:cd:d5:ba +# SHA1 Fingerprint: ba:29:41:60:77:98:3f:f4:f3:ef:f2:31:05:3b:2e:ea:6d:4d:45:fd +# SHA256 Fingerprint: 30:d0:89:5a:9a:44:8a:26:20:91:63:55:22:d1:f5:20:10:b5:86:7a:ca:e1:2c:78:ef:95:8f:d4:f4:38:9f:2f +-----BEGIN CERTIFICATE----- +MIIFZjCCA06gAwIBAgIQCgFCgAAAAUUjz0Z8AAAAAjANBgkqhkiG9w0BAQsFADBN +MQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVu +VHJ1c3QgUHVibGljIFNlY3RvciBSb290IENBIDEwHhcNMTQwMTE2MTc1MzMyWhcN +MzQwMTE2MTc1MzMyWjBNMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0 +MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3RvciBSb290IENBIDEwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2IpT8pEiv6EdrCvsnduTyP4o7 +ekosMSqMjbCpwzFrqHd2hCa2rIFCDQjrVVi7evi8ZX3yoG2LqEfpYnYeEe4IFNGy +RBb06tD6Hi9e28tzQa68ALBKK0CyrOE7S8ItneShm+waOh7wCLPQ5CQ1B5+ctMlS +bdsHyo+1W/CD80/HLaXIrcuVIKQxKFdYWuSNG5qrng0M8gozOSI5Cpcu81N3uURF +/YTLNiCBWS2ab21ISGHKTN9T0a9SvESfqy9rg3LvdYDaBjMbXcjaY8ZNzaxmMc3R +3j6HEDbhuaR672BQssvKplbgN6+rNBM5Jeg5ZuSYeqoSmJxZZoY+rfGwyj4GD3vw +EUs3oERte8uojHH01bWRNszwFcYr3lEXsZdMUD2xlVl8BX0tIdUAvwFnol57plzy +9yLxkA2T26pEUWbMfXYD62qoKjgZl3YNa4ph+bz27nb9cCvdKTz4Ch5bQhyLVi9V +GxyhLrXHFub4qjySjmm2AcG1hp2JDws4lFTo6tyePSW8Uybt1as5qsVATFSrsrTZ +2fjXctscvG29ZV/viDUqZi/u9rNl8DONfJhBaUYPQxxp+pu10GFqzcpL2UyQRqsV +WaFHVCkugyhfHMKiq3IXAAaOReyL4jM9f9oZRORicsPfIsbyVtTdX5Vy7W1f90gD +W/3FKqD2cyOEEBsB5wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ +BAUwAwEB/zAdBgNVHQ4EFgQU43HgntinQtnbcZFrlJPrw6PRFKMwDQYJKoZIhvcN +AQELBQADggIBAEf63QqwEZE4rU1d9+UOl1QZgkiHVIyqZJnYWv6IAcVYpZmxI1Qj +t2odIFflAWJBF9MJ23XLblSQdf4an4EKwt3X9wnQW3IV5B4Jaj0z8yGa5hV+rVHV +DRDtfULAj+7AmgjVQdZcDiFpboBhDhXAuM/FSRJSzL46zNQuOAXeNf0fb7iAaJg9 +TaDKQGXSc3z1i9kKlT/YPyNtGtEqJBnZhbMX73huqVjRI9PHE+1yJX9dsXNw0H8G +lwmEKYBhHfpe/3OsoOOJuBxxFcbeMX8S3OFtm6/n6J91eEyrRjuazr8FGF1NFTwW +mhlQBJqymm9li1JfPFgEKCXAZmExfrngdbkaqIHWchezxQMxNRF4eKLg6TCMf4Df +WN88uieW4oA0beOY02QnrEh+KHdcxiVhJfiFDGX6xDIvpZgF5PgLZxYWxoK4Mhn5 ++bl53B/N66+rDt0b20XkeucC4pVd/GnwU2lhlXV5C15V5jgclKlZM57IcXR5f1GJ +tshquDDIajjDbp7hNxbqBWJMWxJH7ae0s1hWx0nzfxJoCTFx8G34Tkf71oXuxVhA +GaQdp/lLQzfcaFpPz+vCZHTetBXZ9FRUGi8c15dxVJCO2SCdUyt/q4/i6jC8UDfv +8Ue1fXwsBOxonbRJRBD0ckscZOf85muQ3Wl9af0AVqW3rLatt8o+Ae+c +-----END CERTIFICATE----- + +# Issuer: CN=CFCA EV ROOT O=China Financial Certification Authority +# Subject: CN=CFCA EV ROOT O=China Financial Certification Authority +# Label: "CFCA EV ROOT" +# Serial: 407555286 +# MD5 Fingerprint: 74:e1:b6:ed:26:7a:7a:44:30:33:94:ab:7b:27:81:30 +# SHA1 Fingerprint: e2:b8:29:4b:55:84:ab:6b:58:c2:90:46:6c:ac:3f:b8:39:8f:84:83 +# SHA256 Fingerprint: 5c:c3:d7:8e:4e:1d:5e:45:54:7a:04:e6:87:3e:64:f9:0c:f9:53:6d:1c:cc:2e:f8:00:f3:55:c4:c5:fd:70:fd +-----BEGIN CERTIFICATE----- +MIIFjTCCA3WgAwIBAgIEGErM1jANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJD +TjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9y +aXR5MRUwEwYDVQQDDAxDRkNBIEVWIFJPT1QwHhcNMTIwODA4MDMwNzAxWhcNMjkx +MjMxMDMwNzAxWjBWMQswCQYDVQQGEwJDTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5j +aWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQDDAxDRkNBIEVWIFJP +T1QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXXWvNED8fBVnVBU03 +sQ7smCuOFR36k0sXgiFxEFLXUWRwFsJVaU2OFW2fvwwbwuCjZ9YMrM8irq93VCpL +TIpTUnrD7i7es3ElweldPe6hL6P3KjzJIx1qqx2hp/Hz7KDVRM8Vz3IvHWOX6Jn5 +/ZOkVIBMUtRSqy5J35DNuF++P96hyk0g1CXohClTt7GIH//62pCfCqktQT+x8Rgp +7hZZLDRJGqgG16iI0gNyejLi6mhNbiyWZXvKWfry4t3uMCz7zEasxGPrb382KzRz +EpR/38wmnvFyXVBlWY9ps4deMm/DGIq1lY+wejfeWkU7xzbh72fROdOXW3NiGUgt +hxwG+3SYIElz8AXSG7Ggo7cbcNOIabla1jj0Ytwli3i/+Oh+uFzJlU9fpy25IGvP +a931DfSCt/SyZi4QKPaXWnuWFo8BGS1sbn85WAZkgwGDg8NNkt0yxoekN+kWzqot +aK8KgWU6cMGbrU1tVMoqLUuFG7OA5nBFDWteNfB/O7ic5ARwiRIlk9oKmSJgamNg +TnYGmE69g60dWIolhdLHZR4tjsbftsbhf4oEIRUpdPA+nJCdDC7xij5aqgwJHsfV +PKPtl8MeNPo4+QgO48BdK4PRVmrJtqhUUy54Mmc9gn900PvhtgVguXDbjgv5E1hv +cWAQUhC5wUEJ73IfZzF4/5YFjQIDAQABo2MwYTAfBgNVHSMEGDAWgBTj/i39KNAL +tbq2osS/BqoFjJP7LzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAd +BgNVHQ4EFgQU4/4t/SjQC7W6tqLEvwaqBYyT+y8wDQYJKoZIhvcNAQELBQADggIB +ACXGumvrh8vegjmWPfBEp2uEcwPenStPuiB/vHiyz5ewG5zz13ku9Ui20vsXiObT +ej/tUxPQ4i9qecsAIyjmHjdXNYmEwnZPNDatZ8POQQaIxffu2Bq41gt/UP+TqhdL +jOztUmCypAbqTuv0axn96/Ua4CUqmtzHQTb3yHQFhDmVOdYLO6Qn+gjYXB74BGBS +ESgoA//vU2YApUo0FmZ8/Qmkrp5nGm9BC2sGE5uPhnEFtC+NiWYzKXZUmhH4J/qy +P5Hgzg0b8zAarb8iXRvTvyUFTeGSGn+ZnzxEk8rUQElsgIfXBDrDMlI1Dlb4pd19 +xIsNER9Tyx6yF7Zod1rg1MvIB671Oi6ON7fQAUtDKXeMOZePglr4UeWJoBjnaH9d +Ci77o0cOPaYjesYBx4/IXr9tgFa+iiS6M+qf4TIRnvHST4D2G0CvOJ4RUHlzEhLN +5mydLIhyPDCBBpEi6lmt2hkuIsKNuYyH4Ga8cyNfIWRjgEj1oDwYPZTISEEdQLpe +/v5WOaHIz16eGWRGENoXkbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+Z +AAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3CekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ +5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su +-----END CERTIFICATE----- + +# Issuer: CN=OISTE WISeKey Global Root GB CA O=WISeKey OU=OISTE Foundation Endorsed +# Subject: CN=OISTE WISeKey Global Root GB CA O=WISeKey OU=OISTE Foundation Endorsed +# Label: "OISTE WISeKey Global Root GB CA" +# Serial: 157768595616588414422159278966750757568 +# MD5 Fingerprint: a4:eb:b9:61:28:2e:b7:2f:98:b0:35:26:90:99:51:1d +# SHA1 Fingerprint: 0f:f9:40:76:18:d3:d7:6a:4b:98:f0:a8:35:9e:0c:fd:27:ac:cc:ed +# SHA256 Fingerprint: 6b:9c:08:e8:6e:b0:f7:67:cf:ad:65:cd:98:b6:21:49:e5:49:4a:67:f5:84:5e:7b:d1:ed:01:9f:27:b8:6b:d6 +-----BEGIN CERTIFICATE----- +MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBt +MQswCQYDVQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUg +Rm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9i +YWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAwMzJaFw0zOTEyMDExNTEwMzFaMG0x +CzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQLExlPSVNURSBG +b3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2Jh +bCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3 +HEokKtaXscriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGx +WuR51jIjK+FTzJlFXHtPrby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX +1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNk +u7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4oQnc/nSMbsrY9gBQHTC5P +99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvgGUpuuy9r +M2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw +AwEB/zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUB +BAMCAQAwDQYJKoZIhvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrgh +cViXfa43FK8+5/ea4n32cZiZBKpDdHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5 +gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0VQreUGdNZtGn//3ZwLWoo4rO +ZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEuiHZeeevJuQHHf +aPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic +Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM= +-----END CERTIFICATE----- + +# Issuer: CN=SZAFIR ROOT CA2 O=Krajowa Izba Rozliczeniowa S.A. +# Subject: CN=SZAFIR ROOT CA2 O=Krajowa Izba Rozliczeniowa S.A. +# Label: "SZAFIR ROOT CA2" +# Serial: 357043034767186914217277344587386743377558296292 +# MD5 Fingerprint: 11:64:c1:89:b0:24:b1:8c:b1:07:7e:89:9e:51:9e:99 +# SHA1 Fingerprint: e2:52:fa:95:3f:ed:db:24:60:bd:6e:28:f3:9c:cc:cf:5e:b3:3f:de +# SHA256 Fingerprint: a1:33:9d:33:28:1a:0b:56:e5:57:d3:d3:2b:1c:e7:f9:36:7e:b0:94:bd:5f:a7:2a:7e:50:04:c8:de:d7:ca:fe +-----BEGIN CERTIFICATE----- +MIIDcjCCAlqgAwIBAgIUPopdB+xV0jLVt+O2XwHrLdzk1uQwDQYJKoZIhvcNAQEL +BQAwUTELMAkGA1UEBhMCUEwxKDAmBgNVBAoMH0tyYWpvd2EgSXpiYSBSb3psaWN6 +ZW5pb3dhIFMuQS4xGDAWBgNVBAMMD1NaQUZJUiBST09UIENBMjAeFw0xNTEwMTkw +NzQzMzBaFw0zNTEwMTkwNzQzMzBaMFExCzAJBgNVBAYTAlBMMSgwJgYDVQQKDB9L +cmFqb3dhIEl6YmEgUm96bGljemVuaW93YSBTLkEuMRgwFgYDVQQDDA9TWkFGSVIg +Uk9PVCBDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3vD5QqEvN +QLXOYeeWyrSh2gwisPq1e3YAd4wLz32ohswmUeQgPYUM1ljj5/QqGJ3a0a4m7utT +3PSQ1hNKDJA8w/Ta0o4NkjrcsbH/ON7Dui1fgLkCvUqdGw+0w8LBZwPd3BucPbOw +3gAeqDRHu5rr/gsUvTaE2g0gv/pby6kWIK05YO4vdbbnl5z5Pv1+TW9NL++IDWr6 +3fE9biCloBK0TXC5ztdyO4mTp4CEHCdJckm1/zuVnsHMyAHs6A6KCpbns6aH5db5 +BSsNl0BwPLqsdVqc1U2dAgrSS5tmS0YHF2Wtn2yIANwiieDhZNRnvDF5YTy7ykHN +XGoAyDw4jlivAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD +AgEGMB0GA1UdDgQWBBQuFqlKGLXLzPVvUPMjX/hd56zwyDANBgkqhkiG9w0BAQsF +AAOCAQEAtXP4A9xZWx126aMqe5Aosk3AM0+qmrHUuOQn/6mWmc5G4G18TKI4pAZw +8PRBEew/R40/cof5O/2kbytTAOD/OblqBw7rHRz2onKQy4I9EYKL0rufKq8h5mOG +nXkZ7/e7DDWQw4rtTw/1zBLZpD67oPwglV9PJi8RI4NOdQcPv5vRtB3pEAT+ymCP +oky4rc/hkA/NrgrHXXu3UNLUYfrVFdvXn4dRVOul4+vJhaAlIDf7js4MNIThPIGy +d05DpYhfhmehPea0XGG2Ptv+tyjFogeutcrKjSoS75ftwjCkySp6+/NNIxuZMzSg +LvWpCz/UXeHPhJ/iGcJfitYgHuNztw== +-----END CERTIFICATE----- + +# Issuer: CN=Certum Trusted Network CA 2 O=Unizeto Technologies S.A. OU=Certum Certification Authority +# Subject: CN=Certum Trusted Network CA 2 O=Unizeto Technologies S.A. OU=Certum Certification Authority +# Label: "Certum Trusted Network CA 2" +# Serial: 44979900017204383099463764357512596969 +# MD5 Fingerprint: 6d:46:9e:d9:25:6d:08:23:5b:5e:74:7d:1e:27:db:f2 +# SHA1 Fingerprint: d3:dd:48:3e:2b:bf:4c:05:e8:af:10:f5:fa:76:26:cf:d3:dc:30:92 +# SHA256 Fingerprint: b6:76:f2:ed:da:e8:77:5c:d3:6c:b0:f6:3c:d1:d4:60:39:61:f4:9e:62:65:ba:01:3a:2f:03:07:b6:d0:b8:04 +-----BEGIN CERTIFICATE----- +MIIF0jCCA7qgAwIBAgIQIdbQSk8lD8kyN/yqXhKN6TANBgkqhkiG9w0BAQ0FADCB +gDELMAkGA1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMu +QS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIG +A1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29yayBDQSAyMCIYDzIwMTExMDA2MDgz +OTU2WhgPMjA0NjEwMDYwODM5NTZaMIGAMQswCQYDVQQGEwJQTDEiMCAGA1UEChMZ +VW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3 +b3JrIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9+Xj45tWA +DGSdhhuWZGc/IjoedQF97/tcZ4zJzFxrqZHmuULlIEub2pt7uZld2ZuAS9eEQCsn +0+i6MLs+CRqnSZXvK0AkwpfHp+6bJe+oCgCXhVqqndwpyeI1B+twTUrWwbNWuKFB +OJvR+zF/j+Bf4bE/D44WSWDXBo0Y+aomEKsq09DRZ40bRr5HMNUuctHFY9rnY3lE +fktjJImGLjQ/KUxSiyqnwOKRKIm5wFv5HdnnJ63/mgKXwcZQkpsCLL2puTRZCr+E +Sv/f/rOf69me4Jgj7KZrdxYq28ytOxykh9xGc14ZYmhFV+SQgkK7QtbwYeDBoz1m +o130GO6IyY0XRSmZMnUCMe4pJshrAua1YkV/NxVaI2iJ1D7eTiew8EAMvE0Xy02i +sx7QBlrd9pPPV3WZ9fqGGmd4s7+W/jTcvedSVuWz5XV710GRBdxdaeOVDUO5/IOW +OZV7bIBaTxNyxtd9KXpEulKkKtVBRgkg/iKgtlswjbyJDNXXcPiHUv3a76xRLgez +Tv7QCdpw75j6VuZt27VXS9zlLCUVyJ4ueE742pyehizKV/Ma5ciSixqClnrDvFAS +adgOWkaLOusm+iPJtrCBvkIApPjW/jAux9JG9uWOdf3yzLnQh1vMBhBgu4M1t15n +3kfsmUjxpKEV/q2MYo45VU85FrmxY53/twIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMC +AQYwDQYJKoZIhvcNAQENBQADggIBAHGlDs7k6b8/ONWJWsQCYftMxRQXLYtPU2sQ +F/xlhMcQSZDe28cmk4gmb3DWAl45oPePq5a1pRNcgRRtDoGCERuKTsZPpd1iHkTf +CVn0W3cLN+mLIMb4Ck4uWBzrM9DPhmDJ2vuAL55MYIR4PSFk1vtBHxgP58l1cb29 +XN40hz5BsA72udY/CROWFC/emh1auVbONTqwX3BNXuMp8SMoclm2q8KMZiYcdywm +djWLKKdpoPk79SPdhRB0yZADVpHnr7pH1BKXESLjokmUbOe3lEu6LaTaM4tMpkT/ +WjzGHWTYtTHkpjx6qFcL2+1hGsvxznN3Y6SHb0xRONbkX8eftoEq5IVIeVheO/jb +AoJnwTnbw3RLPTYe+SmTiGhbqEQZIfCn6IENLOiTNrQ3ssqwGyZ6miUfmpqAnksq +P/ujmv5zMnHCnsZy4YpoJ/HkD7TETKVhk/iXEAcqMCWpuchxuO9ozC1+9eB+D4Ko +b7a6bINDd82Kkhehnlt4Fj1F4jNy3eFmypnTycUm/Q1oBEauttmbjL4ZvrHG8hnj +XALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLXis7VmFxWlgPF7ncGNf/P +5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7zAYspsbi +DrW5viSP +-----END CERTIFICATE----- + +# Issuer: CN=Hellenic Academic and Research Institutions RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority +# Subject: CN=Hellenic Academic and Research Institutions RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority +# Label: "Hellenic Academic and Research Institutions RootCA 2015" +# Serial: 0 +# MD5 Fingerprint: ca:ff:e2:db:03:d9:cb:4b:e9:0f:ad:84:fd:7b:18:ce +# SHA1 Fingerprint: 01:0c:06:95:a6:98:19:14:ff:bf:5f:c6:b0:b6:95:ea:29:e9:12:a6 +# SHA256 Fingerprint: a0:40:92:9a:02:ce:53:b4:ac:f4:f2:ff:c6:98:1c:e4:49:6f:75:5e:6d:45:fe:0b:2a:69:2b:cd:52:52:3f:36 +-----BEGIN CERTIFICATE----- +MIIGCzCCA/OgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBpjELMAkGA1UEBhMCR1Ix +DzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5k +IFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMT +N0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9v +dENBIDIwMTUwHhcNMTUwNzA3MTAxMTIxWhcNNDAwNjMwMTAxMTIxWjCBpjELMAkG +A1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNh +ZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkx +QDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1 +dGlvbnMgUm9vdENBIDIwMTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC +AQDC+Kk/G4n8PDwEXT2QNrCROnk8ZlrvbTkBSRq0t89/TSNTt5AA4xMqKKYx8ZEA +4yjsriFBzh/a/X0SWwGDD7mwX5nh8hKDgE0GPt+sr+ehiGsxr/CL0BgzuNtFajT0 +AoAkKAoCFZVedioNmToUW/bLy1O8E00BiDeUJRtCvCLYjqOWXjrZMts+6PAQZe10 +4S+nfK8nNLspfZu2zwnI5dMK/IhlZXQK3HMcXM1AsRzUtoSMTFDPaI6oWa7CJ06C +ojXdFPQf/7J31Ycvqm59JCfnxssm5uX+Zwdj2EUN3TpZZTlYepKZcj2chF6IIbjV +9Cz82XBST3i4vTwri5WY9bPRaM8gFH5MXF/ni+X1NYEZN9cRCLdmvtNKzoNXADrD +gfgXy5I2XdGj2HUb4Ysn6npIQf1FGQatJ5lOwXBH3bWfgVMS5bGMSF0xQxfjjMZ6 +Y5ZLKTBOhE5iGV48zpeQpX8B653g+IuJ3SWYPZK2fu/Z8VFRfS0myGlZYeCsargq +NhEEelC9MoS+L9xy1dcdFkfkR2YgP/SWxa+OAXqlD3pk9Q0Yh9muiNX6hME6wGko +LfINaFGq46V3xqSQDqE3izEjR8EJCOtu93ib14L8hCCZSRm2Ekax+0VVFqmjZayc +Bw/qa9wfLgZy7IaIEuQt218FL+TwA9MmM+eAws1CoRc0CwIDAQABo0IwQDAPBgNV +HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUcRVnyMjJvXVd +ctA4GGqd83EkVAswDQYJKoZIhvcNAQELBQADggIBAHW7bVRLqhBYRjTyYtcWNl0I +XtVsyIe9tC5G8jH4fOpCtZMWVdyhDBKg2mF+D1hYc2Ryx+hFjtyp8iY/xnmMsVMI +M4GwVhO+5lFc2JsKT0ucVlMC6U/2DWDqTUJV6HwbISHTGzrMd/K4kPFox/la/vot +9L/J9UUbzjgQKjeKeaO04wlshYaT/4mWJ3iBj2fjRnRUjtkNaeJK9E10A/+yd+2V +Z5fkscWrv2oj6NSU4kQoYsRL4vDY4ilrGnB+JGGTe08DMiUNRSQrlrRGar9KC/ea +j8GsGsVn82800vpzY4zvFrCopEYq+OsS7HK07/grfoxSwIuEVPkvPuNVqNxmsdnh +X9izjFk0WaSrT2y7HxjbdavYy5LNlDhhDgcGH0tGEPEVvo2FXDtKK4F5D7Rpn0lQ +l033DlZdwJVqwjbDG2jJ9SrcR5q+ss7FJej6A7na+RZukYT1HCjI/CbM1xyQVqdf +bzoEvM14iQuODy+jqk+iGxI9FghAD/FGTNeqewjBCvVtJ94Cj8rDtSvK6evIIVM4 +pcw72Hc3MKJP2W/R8kCtQXoXxdZKNYm3QdV8hn9VTYNKpXMgwDqvkPGaJI7ZjnHK +e7iG2rKPmT4dEw0SEe7Uq/DpFXYC5ODfqiAeW2GFZECpkJcNrVPSWh2HagCXZWK0 +vm9qp/UsQu0yrbYhnr68 +-----END CERTIFICATE----- + +# Issuer: CN=Hellenic Academic and Research Institutions ECC RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority +# Subject: CN=Hellenic Academic and Research Institutions ECC RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority +# Label: "Hellenic Academic and Research Institutions ECC RootCA 2015" +# Serial: 0 +# MD5 Fingerprint: 81:e5:b4:17:eb:c2:f5:e1:4b:0d:41:7b:49:92:fe:ef +# SHA1 Fingerprint: 9f:f1:71:8d:92:d5:9a:f3:7d:74:97:b4:bc:6f:84:68:0b:ba:b6:66 +# SHA256 Fingerprint: 44:b5:45:aa:8a:25:e6:5a:73:ca:15:dc:27:fc:36:d2:4c:1c:b9:95:3a:06:65:39:b1:15:82:dc:48:7b:48:33 +-----BEGIN CERTIFICATE----- +MIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzAN +BgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl +c2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hl +bGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgRUNDIFJv +b3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEwMzcxMlowgaoxCzAJ +BgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmljIEFj +YWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5 +MUQwQgYDVQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0 +dXRpb25zIEVDQyBSb290Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKg +QehLgoRc4vgxEZmGZE4JJS+dQS8KrjVPdJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJa +jq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoKVlp8aQuqgAkkbH7BRqNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFLQi +C4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaep +lSTAGiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7Sof +TUwJCA3sS61kFyjndc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR +-----END CERTIFICATE----- + +# Issuer: CN=ISRG Root X1 O=Internet Security Research Group +# Subject: CN=ISRG Root X1 O=Internet Security Research Group +# Label: "ISRG Root X1" +# Serial: 172886928669790476064670243504169061120 +# MD5 Fingerprint: 0c:d2:f9:e0:da:17:73:e9:ed:86:4d:a5:e3:70:e7:4e +# SHA1 Fingerprint: ca:bd:2a:79:a1:07:6a:31:f2:1d:25:36:35:cb:03:9d:43:29:a5:e8 +# SHA256 Fingerprint: 96:bc:ec:06:26:49:76:f3:74:60:77:9a:cf:28:c5:a7:cf:e8:a3:c0:aa:e1:1a:8f:fc:ee:05:c0:bd:df:08:c6 +-----BEGIN CERTIFICATE----- +MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw +TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh +cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 +WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu +ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY +MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc +h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+ +0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U +A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW +T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH +B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC +B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv +KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn +OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn +jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw +qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI +rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq +hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL +ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ +3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK +NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5 +ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur +TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC +jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc +oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq +4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA +mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d +emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc= +-----END CERTIFICATE----- + +# Issuer: O=FNMT-RCM OU=AC RAIZ FNMT-RCM +# Subject: O=FNMT-RCM OU=AC RAIZ FNMT-RCM +# Label: "AC RAIZ FNMT-RCM" +# Serial: 485876308206448804701554682760554759 +# MD5 Fingerprint: e2:09:04:b4:d3:bd:d1:a0:14:fd:1a:d2:47:c4:57:1d +# SHA1 Fingerprint: ec:50:35:07:b2:15:c4:95:62:19:e2:a8:9a:5b:42:99:2c:4c:2c:20 +# SHA256 Fingerprint: eb:c5:57:0c:29:01:8c:4d:67:b1:aa:12:7b:af:12:f7:03:b4:61:1e:bc:17:b7:da:b5:57:38:94:17:9b:93:fa +-----BEGIN CERTIFICATE----- +MIIFgzCCA2ugAwIBAgIPXZONMGc2yAYdGsdUhGkHMA0GCSqGSIb3DQEBCwUAMDsx +CzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJ +WiBGTk1ULVJDTTAeFw0wODEwMjkxNTU5NTZaFw0zMDAxMDEwMDAwMDBaMDsxCzAJ +BgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBG +Tk1ULVJDTTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALpxgHpMhm5/ +yBNtwMZ9HACXjywMI7sQmkCpGreHiPibVmr75nuOi5KOpyVdWRHbNi63URcfqQgf +BBckWKo3Shjf5TnUV/3XwSyRAZHiItQDwFj8d0fsjz50Q7qsNI1NOHZnjrDIbzAz +WHFctPVrbtQBULgTfmxKo0nRIBnuvMApGGWn3v7v3QqQIecaZ5JCEJhfTzC8PhxF +tBDXaEAUwED653cXeuYLj2VbPNmaUtu1vZ5Gzz3rkQUCwJaydkxNEJY7kvqcfw+Z +374jNUUeAlz+taibmSXaXvMiwzn15Cou08YfxGyqxRxqAQVKL9LFwag0Jl1mpdIC +IfkYtwb1TplvqKtMUejPUBjFd8g5CSxJkjKZqLsXF3mwWsXmo8RZZUc1g16p6DUL +mbvkzSDGm0oGObVo/CK67lWMK07q87Hj/LaZmtVC+nFNCM+HHmpxffnTtOmlcYF7 +wk5HlqX2doWjKI/pgG6BU6VtX7hI+cL5NqYuSf+4lsKMB7ObiFj86xsc3i1w4peS +MKGJ47xVqCfWS+2QrYv6YyVZLag13cqXM7zlzced0ezvXg5KkAYmY6252TUtB7p2 +ZSysV4999AeU14ECll2jB0nVetBX+RvnU0Z1qrB5QstocQjpYL05ac70r8NWQMet +UqIJ5G+GR4of6ygnXYMgrwTJbFaai0b1AgMBAAGjgYMwgYAwDwYDVR0TAQH/BAUw +AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFPd9xf3E6Jobd2Sn9R2gzL+H +YJptMD4GA1UdIAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1odHRwOi8vd3d3 +LmNlcnQuZm5tdC5lcy9kcGNzLzANBgkqhkiG9w0BAQsFAAOCAgEAB5BK3/MjTvDD +nFFlm5wioooMhfNzKWtN/gHiqQxjAb8EZ6WdmF/9ARP67Jpi6Yb+tmLSbkyU+8B1 +RXxlDPiyN8+sD8+Nb/kZ94/sHvJwnvDKuO+3/3Y3dlv2bojzr2IyIpMNOmqOFGYM +LVN0V2Ue1bLdI4E7pWYjJ2cJj+F3qkPNZVEI7VFY/uY5+ctHhKQV8Xa7pO6kO8Rf +77IzlhEYt8llvhjho6Tc+hj507wTmzl6NLrTQfv6MooqtyuGC2mDOL7Nii4LcK2N +JpLuHvUBKwrZ1pebbuCoGRw6IYsMHkCtA+fdZn71uSANA+iW+YJF1DngoABd15jm +fZ5nc8OaKveri6E6FO80vFIOiZiaBECEHX5FaZNXzuvO+FB8TxxuBEOb+dY7Ixjp +6o7RTUaN8Tvkasq6+yO3m/qZASlaWFot4/nUbQ4mrcFuNLwy+AwF+mWj2zs3gyLp +1txyM/1d8iC9djwj2ij3+RvrWWTV3F9yfiD8zYm1kGdNYno/Tq0dwzn+evQoFt9B +9kiABdcPUXmsEKvU7ANm5mqwujGSQkBqvjrTcuFqN1W8rB2Vt2lh8kORdOag0wok +RqEIr9baRRmW1FMdW4R58MD3R++Lj8UGrp1MYp3/RgT408m2ECVAdf4WqslKYIYv +uu8wd+RU4riEmViAqhOLUTpPSPaLtrM= +-----END CERTIFICATE----- + +# Issuer: CN=Amazon Root CA 1 O=Amazon +# Subject: CN=Amazon Root CA 1 O=Amazon +# Label: "Amazon Root CA 1" +# Serial: 143266978916655856878034712317230054538369994 +# MD5 Fingerprint: 43:c6:bf:ae:ec:fe:ad:2f:18:c6:88:68:30:fc:c8:e6 +# SHA1 Fingerprint: 8d:a7:f9:65:ec:5e:fc:37:91:0f:1c:6e:59:fd:c1:cc:6a:6e:de:16 +# SHA256 Fingerprint: 8e:cd:e6:88:4f:3d:87:b1:12:5b:a3:1a:c3:fc:b1:3d:70:16:de:7f:57:cc:90:4f:e1:cb:97:c6:ae:98:19:6e +-----BEGIN CERTIFICATE----- +MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF +ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6 +b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTEL +MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv +b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj +ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM +9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw +IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6 +VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L +93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm +jgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUA +A4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDI +U5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUs +N+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vv +o/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU +5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpy +rqXRfboQnoZsG4q5WTP468SQvvG5 +-----END CERTIFICATE----- + +# Issuer: CN=Amazon Root CA 2 O=Amazon +# Subject: CN=Amazon Root CA 2 O=Amazon +# Label: "Amazon Root CA 2" +# Serial: 143266982885963551818349160658925006970653239 +# MD5 Fingerprint: c8:e5:8d:ce:a8:42:e2:7a:c0:2a:5c:7c:9e:26:bf:66 +# SHA1 Fingerprint: 5a:8c:ef:45:d7:a6:98:59:76:7a:8c:8b:44:96:b5:78:cf:47:4b:1a +# SHA256 Fingerprint: 1b:a5:b2:aa:8c:65:40:1a:82:96:01:18:f8:0b:ec:4f:62:30:4d:83:ce:c4:71:3a:19:c3:9c:01:1e:a4:6d:b4 +-----BEGIN CERTIFICATE----- +MIIFQTCCAymgAwIBAgITBmyf0pY1hp8KD+WGePhbJruKNzANBgkqhkiG9w0BAQwF +ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6 +b24gUm9vdCBDQSAyMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTEL +MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv +b3QgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK2Wny2cSkxK +gXlRmeyKy2tgURO8TW0G/LAIjd0ZEGrHJgw12MBvIITplLGbhQPDW9tK6Mj4kHbZ +W0/jTOgGNk3Mmqw9DJArktQGGWCsN0R5hYGCrVo34A3MnaZMUnbqQ523BNFQ9lXg +1dKmSYXpN+nKfq5clU1Imj+uIFptiJXZNLhSGkOQsL9sBbm2eLfq0OQ6PBJTYv9K +8nu+NQWpEjTj82R0Yiw9AElaKP4yRLuH3WUnAnE72kr3H9rN9yFVkE8P7K6C4Z9r +2UXTu/Bfh+08LDmG2j/e7HJV63mjrdvdfLC6HM783k81ds8P+HgfajZRRidhW+me +z/CiVX18JYpvL7TFz4QuK/0NURBs+18bvBt+xa47mAExkv8LV/SasrlX6avvDXbR +8O70zoan4G7ptGmh32n2M8ZpLpcTnqWHsFcQgTfJU7O7f/aS0ZzQGPSSbtqDT6Zj +mUyl+17vIWR6IF9sZIUVyzfpYgwLKhbcAS4y2j5L9Z469hdAlO+ekQiG+r5jqFoz +7Mt0Q5X5bGlSNscpb/xVA1wf+5+9R+vnSUeVC06JIglJ4PVhHvG/LopyboBZ/1c6 ++XUyo05f7O0oYtlNc/LMgRdg7c3r3NunysV+Ar3yVAhU/bQtCSwXVEqY0VThUWcI +0u1ufm8/0i2BWSlmy5A5lREedCf+3euvAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMB +Af8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSwDPBMMPQFWAJI/TPlUq9LhONm +UjANBgkqhkiG9w0BAQwFAAOCAgEAqqiAjw54o+Ci1M3m9Zh6O+oAA7CXDpO8Wqj2 +LIxyh6mx/H9z/WNxeKWHWc8w4Q0QshNabYL1auaAn6AFC2jkR2vHat+2/XcycuUY ++gn0oJMsXdKMdYV2ZZAMA3m3MSNjrXiDCYZohMr/+c8mmpJ5581LxedhpxfL86kS +k5Nrp+gvU5LEYFiwzAJRGFuFjWJZY7attN6a+yb3ACfAXVU3dJnJUH/jWS5E4ywl +7uxMMne0nxrpS10gxdr9HIcWxkPo1LsmmkVwXqkLN1PiRnsn/eBG8om3zEK2yygm +btmlyTrIQRNg91CMFa6ybRoVGld45pIq2WWQgj9sAq+uEjonljYE1x2igGOpm/Hl +urR8FLBOybEfdF849lHqm/osohHUqS0nGkWxr7JOcQ3AWEbWaQbLU8uz/mtBzUF+ +fUwPfHJ5elnNXkoOrJupmHN5fLT0zLm4BwyydFy4x2+IoZCn9Kr5v2c69BoVYh63 +n749sSmvZ6ES8lgQGVMDMBu4Gon2nL2XA46jCfMdiyHxtN/kHNGfZQIG6lzWE7OE +76KlXIx3KadowGuuQNKotOrN8I1LOJwZmhsoVLiJkO/KdYE+HvJkJMcYr07/R54H +9jVlpNMKVv/1F2Rs76giJUmTtt8AF9pYfl3uxRuw0dFfIRDH+fO6AgonB8Xx1sfT +4PsJYGw= +-----END CERTIFICATE----- + +# Issuer: CN=Amazon Root CA 3 O=Amazon +# Subject: CN=Amazon Root CA 3 O=Amazon +# Label: "Amazon Root CA 3" +# Serial: 143266986699090766294700635381230934788665930 +# MD5 Fingerprint: a0:d4:ef:0b:f7:b5:d8:49:95:2a:ec:f5:c4:fc:81:87 +# SHA1 Fingerprint: 0d:44:dd:8c:3c:8c:1a:1a:58:75:64:81:e9:0f:2e:2a:ff:b3:d2:6e +# SHA256 Fingerprint: 18:ce:6c:fe:7b:f1:4e:60:b2:e3:47:b8:df:e8:68:cb:31:d0:2e:bb:3a:da:27:15:69:f5:03:43:b4:6d:b3:a4 +-----BEGIN CERTIFICATE----- +MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5 +MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g +Um9vdCBDQSAzMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG +A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg +Q0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZBf8ANm+gBG1bG8lKl +ui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjrZt6j +QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSr +ttvXBp43rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkr +BqWTrBqYaGFy+uGh0PsceGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteM +YyRIHN8wfdVoOw== +-----END CERTIFICATE----- + +# Issuer: CN=Amazon Root CA 4 O=Amazon +# Subject: CN=Amazon Root CA 4 O=Amazon +# Label: "Amazon Root CA 4" +# Serial: 143266989758080763974105200630763877849284878 +# MD5 Fingerprint: 89:bc:27:d5:eb:17:8d:06:6a:69:d5:fd:89:47:b4:cd +# SHA1 Fingerprint: f6:10:84:07:d6:f8:bb:67:98:0c:c2:e2:44:c2:eb:ae:1c:ef:63:be +# SHA256 Fingerprint: e3:5d:28:41:9e:d0:20:25:cf:a6:90:38:cd:62:39:62:45:8d:a5:c6:95:fb:de:a3:c2:2b:0b:fb:25:89:70:92 +-----BEGIN CERTIFICATE----- +MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5 +MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g +Um9vdCBDQSA0MB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG +A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg +Q0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN/sGKe0uoe0ZLY7Bi +9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri83Bk +M6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB +/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WB +MAoGCCqGSM49BAMDA2gAMGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlw +CkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1AE47xDqUEpHJWEadIRNyp4iciuRMStuW +1KyLa2tJElMzrdfkviT8tQp21KW8EA== +-----END CERTIFICATE----- + +# Issuer: CN=TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 O=Turkiye Bilimsel ve Teknolojik Arastirma Kurumu - TUBITAK OU=Kamu Sertifikasyon Merkezi - Kamu SM +# Subject: CN=TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 O=Turkiye Bilimsel ve Teknolojik Arastirma Kurumu - TUBITAK OU=Kamu Sertifikasyon Merkezi - Kamu SM +# Label: "TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1" +# Serial: 1 +# MD5 Fingerprint: dc:00:81:dc:69:2f:3e:2f:b0:3b:f6:3d:5a:91:8e:49 +# SHA1 Fingerprint: 31:43:64:9b:ec:ce:27:ec:ed:3a:3f:0b:8f:0d:e4:e8:91:dd:ee:ca +# SHA256 Fingerprint: 46:ed:c3:68:90:46:d5:3a:45:3f:b3:10:4a:b8:0d:ca:ec:65:8b:26:60:ea:16:29:dd:7e:86:79:90:64:87:16 +-----BEGIN CERTIFICATE----- +MIIEYzCCA0ugAwIBAgIBATANBgkqhkiG9w0BAQsFADCB0jELMAkGA1UEBhMCVFIx +GDAWBgNVBAcTD0dlYnplIC0gS29jYWVsaTFCMEAGA1UEChM5VHVya2l5ZSBCaWxp +bXNlbCB2ZSBUZWtub2xvamlrIEFyYXN0aXJtYSBLdXJ1bXUgLSBUVUJJVEFLMS0w +KwYDVQQLEyRLYW11IFNlcnRpZmlrYXN5b24gTWVya2V6aSAtIEthbXUgU00xNjA0 +BgNVBAMTLVRVQklUQUsgS2FtdSBTTSBTU0wgS29rIFNlcnRpZmlrYXNpIC0gU3Vy +dW0gMTAeFw0xMzExMjUwODI1NTVaFw00MzEwMjUwODI1NTVaMIHSMQswCQYDVQQG +EwJUUjEYMBYGA1UEBxMPR2ViemUgLSBLb2NhZWxpMUIwQAYDVQQKEzlUdXJraXll +IEJpbGltc2VsIHZlIFRla25vbG9qaWsgQXJhc3Rpcm1hIEt1cnVtdSAtIFRVQklU +QUsxLTArBgNVBAsTJEthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppIC0gS2FtdSBT +TTE2MDQGA1UEAxMtVFVCSVRBSyBLYW11IFNNIFNTTCBLb2sgU2VydGlmaWthc2kg +LSBTdXJ1bSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr3UwM6q7 +a9OZLBI3hNmNe5eA027n/5tQlT6QlVZC1xl8JoSNkvoBHToP4mQ4t4y86Ij5iySr +LqP1N+RAjhgleYN1Hzv/bKjFxlb4tO2KRKOrbEz8HdDc72i9z+SqzvBV96I01INr +N3wcwv61A+xXzry0tcXtAA9TNypN9E8Mg/uGz8v+jE69h/mniyFXnHrfA2eJLJ2X +YacQuFWQfw4tJzh03+f92k4S400VIgLI4OD8D62K18lUUMw7D8oWgITQUVbDjlZ/ +iSIzL+aFCr2lqBs23tPcLG07xxO9WSMs5uWk99gL7eqQQESolbuT1dCANLZGeA4f +AJNG4e7p+exPFwIDAQABo0IwQDAdBgNVHQ4EFgQUZT/HiobGPN08VFw1+DrtUgxH +V8gwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL +BQADggEBACo/4fEyjq7hmFxLXs9rHmoJ0iKpEsdeV31zVmSAhHqT5Am5EM2fKifh +AHe+SMg1qIGf5LgsyX8OsNJLN13qudULXjS99HMpw+0mFZx+CFOKWI3QSyjfwbPf +IPP54+M638yclNhOT8NrF7f3cuitZjO1JVOr4PhMqZ398g26rrnZqsZr+ZO7rqu4 +lzwDGrpDxpa5RXI4s6ehlj2Re37AIVNMh+3yC1SVUZPVIqUNivGTDj5UDrDYyU7c +8jEyVupk+eq1nRZmQnLzf9OxMUP8pI4X8W0jq5Rm+K37DwhuJi1/FwcJsoz7UMCf +lo3Ptv0AnVoUmr8CRPXBwp8iXqIPoeM= +-----END CERTIFICATE----- + +# Issuer: CN=GDCA TrustAUTH R5 ROOT O=GUANG DONG CERTIFICATE AUTHORITY CO.,LTD. +# Subject: CN=GDCA TrustAUTH R5 ROOT O=GUANG DONG CERTIFICATE AUTHORITY CO.,LTD. +# Label: "GDCA TrustAUTH R5 ROOT" +# Serial: 9009899650740120186 +# MD5 Fingerprint: 63:cc:d9:3d:34:35:5c:6f:53:a3:e2:08:70:48:1f:b4 +# SHA1 Fingerprint: 0f:36:38:5b:81:1a:25:c3:9b:31:4e:83:ca:e9:34:66:70:cc:74:b4 +# SHA256 Fingerprint: bf:ff:8f:d0:44:33:48:7d:6a:8a:a6:0c:1a:29:76:7a:9f:c2:bb:b0:5e:42:0f:71:3a:13:b9:92:89:1d:38:93 +-----BEGIN CERTIFICATE----- +MIIFiDCCA3CgAwIBAgIIfQmX/vBH6nowDQYJKoZIhvcNAQELBQAwYjELMAkGA1UE +BhMCQ04xMjAwBgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZ +IENPLixMVEQuMR8wHQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMB4XDTE0 +MTEyNjA1MTMxNVoXDTQwMTIzMTE1NTk1OVowYjELMAkGA1UEBhMCQ04xMjAwBgNV +BAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZIENPLixMVEQuMR8w +HQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMIICIjANBgkqhkiG9w0BAQEF +AAOCAg8AMIICCgKCAgEA2aMW8Mh0dHeb7zMNOwZ+Vfy1YI92hhJCfVZmPoiC7XJj +Dp6L3TQsAlFRwxn9WVSEyfFrs0yw6ehGXTjGoqcuEVe6ghWinI9tsJlKCvLriXBj +TnnEt1u9ol2x8kECK62pOqPseQrsXzrj/e+APK00mxqriCZ7VqKChh/rNYmDf1+u +KU49tm7srsHwJ5uu4/Ts765/94Y9cnrrpftZTqfrlYwiOXnhLQiPzLyRuEH3FMEj +qcOtmkVEs7LXLM3GKeJQEK5cy4KOFxg2fZfmiJqwTTQJ9Cy5WmYqsBebnh52nUpm +MUHfP/vFBu8btn4aRjb3ZGM74zkYI+dndRTVdVeSN72+ahsmUPI2JgaQxXABZG12 +ZuGR224HwGGALrIuL4xwp9E7PLOR5G62xDtw8mySlwnNR30YwPO7ng/Wi64HtloP +zgsMR6flPri9fcebNaBhlzpBdRfMK5Z3KpIhHtmVdiBnaM8Nvd/WHwlqmuLMc3Gk +L30SgLdTMEZeS1SZD2fJpcjyIMGC7J0R38IC+xo70e0gmu9lZJIQDSri3nDxGGeC +jGHeuLzRL5z7D9Ar7Rt2ueQ5Vfj4oR24qoAATILnsn8JuLwwoC8N9VKejveSswoA +HQBUlwbgsQfZxw9cZX08bVlX5O2ljelAU58VS6Bx9hoh49pwBiFYFIeFd3mqgnkC +AwEAAaNCMEAwHQYDVR0OBBYEFOLJQJ9NzuiaoXzPDj9lxSmIahlRMA8GA1UdEwEB +/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQDRSVfg +p8xoWLoBDysZzY2wYUWsEe1jUGn4H3++Fo/9nesLqjJHdtJnJO29fDMylyrHBYZm +DRd9FBUb1Ov9H5r2XpdptxolpAqzkT9fNqyL7FeoPueBihhXOYV0GkLH6VsTX4/5 +COmSdI31R9KrO9b7eGZONn356ZLpBN79SWP8bfsUcZNnL0dKt7n/HipzcEYwv1ry +L3ml4Y0M2fmyYzeMN2WFcGpcWwlyua1jPLHd+PwyvzeG5LuOmCd+uh8W4XAR8gPf +JWIyJyYYMoSf/wA6E7qaTfRPuBRwIrHKK5DOKcFw9C+df/KQHtZa37dG/OaG+svg +IHZ6uqbL9XzeYqWxi+7egmaKTjowHz+Ay60nugxe19CxVsp3cbK1daFQqUBDF8Io +2c9Si1vIY9RCPqAzekYu9wogRlR+ak8x8YF+QnQ4ZXMn7sZ8uI7XpTrXmKGcjBBV +09tL7ECQ8s1uV9JiDnxXk7Gnbc2dg7sq5+W2O3FYrf3RRbxake5TFW/TRQl1brqQ +XR4EzzffHqhmsYzmIGrv/EhOdJhCrylvLmrH+33RZjEizIYAfmaDDEL0vTSSwxrq +T8p+ck0LcIymSLumoRT2+1hEmRSuqguTaaApJUqlyyvdimYHFngVV3Eb7PVHhPOe +MTd61X8kreS8/f3MboPoDKi3QWwH3b08hpcv0g== +-----END CERTIFICATE----- + +# Issuer: CN=SSL.com Root Certification Authority RSA O=SSL Corporation +# Subject: CN=SSL.com Root Certification Authority RSA O=SSL Corporation +# Label: "SSL.com Root Certification Authority RSA" +# Serial: 8875640296558310041 +# MD5 Fingerprint: 86:69:12:c0:70:f1:ec:ac:ac:c2:d5:bc:a5:5b:a1:29 +# SHA1 Fingerprint: b7:ab:33:08:d1:ea:44:77:ba:14:80:12:5a:6f:bd:a9:36:49:0c:bb +# SHA256 Fingerprint: 85:66:6a:56:2e:e0:be:5c:e9:25:c1:d8:89:0a:6f:76:a8:7e:c1:6d:4d:7d:5f:29:ea:74:19:cf:20:12:3b:69 +-----BEGIN CERTIFICATE----- +MIIF3TCCA8WgAwIBAgIIeyyb0xaAMpkwDQYJKoZIhvcNAQELBQAwfDELMAkGA1UE +BhMCVVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQK +DA9TU0wgQ29ycG9yYXRpb24xMTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eSBSU0EwHhcNMTYwMjEyMTczOTM5WhcNNDEwMjEyMTcz +OTM5WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hv +dXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNv +bSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFJTQTCCAiIwDQYJKoZIhvcN +AQEBBQADggIPADCCAgoCggIBAPkP3aMrfcvQKv7sZ4Wm5y4bunfh4/WvpOz6Sl2R +xFdHaxh3a3by/ZPkPQ/CFp4LZsNWlJ4Xg4XOVu/yFv0AYvUiCVToZRdOQbngT0aX +qhvIuG5iXmmxX9sqAn78bMrzQdjt0Oj8P2FI7bADFB0QDksZ4LtO7IZl/zbzXmcC +C52GVWH9ejjt/uIZALdvoVBidXQ8oPrIJZK0bnoix/geoeOy3ZExqysdBP+lSgQ3 +6YWkMyv94tZVNHwZpEpox7Ko07fKoZOI68GXvIz5HdkihCR0xwQ9aqkpk8zruFvh +/l8lqjRYyMEjVJ0bmBHDOJx+PYZspQ9AhnwC9FwCTyjLrnGfDzrIM/4RJTXq/LrF +YD3ZfBjVsqnTdXgDciLKOsMf7yzlLqn6niy2UUb9rwPW6mBo6oUWNmuF6R7As93E +JNyAKoFBbZQ+yODJgUEAnl6/f8UImKIYLEJAs/lvOCdLToD0PYFH4Ih86hzOtXVc +US4cK38acijnALXRdMbX5J+tB5O2UzU1/Dfkw/ZdFr4hc96SCvigY2q8lpJqPvi8 +ZVWb3vUNiSYE/CUapiVpy8JtynziWV+XrOvvLsi81xtZPCvM8hnIk2snYxnP/Okm ++Mpxm3+T/jRnhE6Z6/yzeAkzcLpmpnbtG3PrGqUNxCITIJRWCk4sbE6x/c+cCbqi +M+2HAgMBAAGjYzBhMB0GA1UdDgQWBBTdBAkHovV6fVJTEpKV7jiAJQ2mWTAPBgNV +HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFN0ECQei9Xp9UlMSkpXuOIAlDaZZMA4G +A1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAIBgRlCn7Jp0cHh5wYfGV +cpNxJK1ok1iOMq8bs3AD/CUrdIWQPXhq9LmLpZc7tRiRux6n+UBbkflVma8eEdBc +Hadm47GUBwwyOabqG7B52B2ccETjit3E+ZUfijhDPwGFpUenPUayvOUiaPd7nNgs +PgohyC0zrL/FgZkxdMF1ccW+sfAjRfSda/wZY52jvATGGAslu1OJD7OAUN5F7kR/ +q5R4ZJjT9ijdh9hwZXT7DrkT66cPYakylszeu+1jTBi7qUD3oFRuIIhxdRjqerQ0 +cuAjJ3dctpDqhiVAq+8zD8ufgr6iIPv2tS0a5sKFsXQP+8hlAqRSAUfdSSLBv9jr +a6x+3uxjMxW3IwiPxg+NQVrdjsW5j+VFP3jbutIbQLH+cU0/4IGiul607BXgk90I +H37hVZkLId6Tngr75qNJvTYw/ud3sqB1l7UtgYgXZSD32pAAn8lSzDLKNXz1PQ/Y +K9f1JmzJBjSWFupwWRoyeXkLtoh/D1JIPb9s2KJELtFOt3JY04kTlf5Eq/jXixtu +nLwsoFvVagCvXzfh1foQC5ichucmj87w7G6KVwuA406ywKBjYZC6VWg3dGq2ktuf +oYYitmUnDuy2n0Jg5GfCtdpBC8TTi2EbvPofkSvXRAdeuims2cXp71NIWuuA8ShY +Ic2wBlX7Jz9TkHCpBB5XJ7k= +-----END CERTIFICATE----- + +# Issuer: CN=SSL.com Root Certification Authority ECC O=SSL Corporation +# Subject: CN=SSL.com Root Certification Authority ECC O=SSL Corporation +# Label: "SSL.com Root Certification Authority ECC" +# Serial: 8495723813297216424 +# MD5 Fingerprint: 2e:da:e4:39:7f:9c:8f:37:d1:70:9f:26:17:51:3a:8e +# SHA1 Fingerprint: c3:19:7c:39:24:e6:54:af:1b:c4:ab:20:95:7a:e2:c3:0e:13:02:6a +# SHA256 Fingerprint: 34:17:bb:06:cc:60:07:da:1b:96:1c:92:0b:8a:b4:ce:3f:ad:82:0e:4a:a3:0b:9a:cb:c4:a7:4e:bd:ce:bc:65 +-----BEGIN CERTIFICATE----- +MIICjTCCAhSgAwIBAgIIdebfy8FoW6gwCgYIKoZIzj0EAwIwfDELMAkGA1UEBhMC +VVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9T +U0wgQ29ycG9yYXRpb24xMTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZpY2F0 +aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEyMTgxNDAzWhcNNDEwMjEyMTgxNDAz +WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hvdXN0 +b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNvbSBS +b290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuB +BAAiA2IABEVuqVDEpiM2nl8ojRfLliJkP9x6jh3MCLOicSS6jkm5BBtHllirLZXI +7Z4INcgn64mMU1jrYor+8FsPazFSY0E7ic3s7LaNGdM0B9y7xgZ/wkWV7Mt/qCPg +CemB+vNH06NjMGEwHQYDVR0OBBYEFILRhXMw5zUE044CkvvlpNHEIejNMA8GA1Ud +EwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUgtGFczDnNQTTjgKS++Wk0cQh6M0wDgYD +VR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2cAMGQCMG/n61kRpGDPYbCWe+0F+S8T +kdzt5fxQaxFGRrMcIQBiu77D5+jNB5n5DQtdcj7EqgIwH7y6C+IwJPt8bYBVCpk+ +gA0z5Wajs6O7pdWLjwkspl1+4vAHCGht0nxpbl/f5Wpl +-----END CERTIFICATE----- + +# Issuer: CN=SSL.com EV Root Certification Authority RSA R2 O=SSL Corporation +# Subject: CN=SSL.com EV Root Certification Authority RSA R2 O=SSL Corporation +# Label: "SSL.com EV Root Certification Authority RSA R2" +# Serial: 6248227494352943350 +# MD5 Fingerprint: e1:1e:31:58:1a:ae:54:53:02:f6:17:6a:11:7b:4d:95 +# SHA1 Fingerprint: 74:3a:f0:52:9b:d0:32:a0:f4:4a:83:cd:d4:ba:a9:7b:7c:2e:c4:9a +# SHA256 Fingerprint: 2e:7b:f1:6c:c2:24:85:a7:bb:e2:aa:86:96:75:07:61:b0:ae:39:be:3b:2f:e9:d0:cc:6d:4e:f7:34:91:42:5c +-----BEGIN CERTIFICATE----- +MIIF6zCCA9OgAwIBAgIIVrYpzTS8ePYwDQYJKoZIhvcNAQELBQAwgYIxCzAJBgNV +BAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UE +CgwPU1NMIENvcnBvcmF0aW9uMTcwNQYDVQQDDC5TU0wuY29tIEVWIFJvb3QgQ2Vy +dGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIyMB4XDTE3MDUzMTE4MTQzN1oXDTQy +MDUzMDE4MTQzN1owgYIxCzAJBgNVBAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEQMA4G +A1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMTcwNQYDVQQD +DC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIy +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjzZlQOHWTcDXtOlG2mvq +M0fNTPl9fb69LT3w23jhhqXZuglXaO1XPqDQCEGD5yhBJB/jchXQARr7XnAjssuf +OePPxU7Gkm0mxnu7s9onnQqG6YE3Bf7wcXHswxzpY6IXFJ3vG2fThVUCAtZJycxa +4bH3bzKfydQ7iEGonL3Lq9ttewkfokxykNorCPzPPFTOZw+oz12WGQvE43LrrdF9 +HSfvkusQv1vrO6/PgN3B0pYEW3p+pKk8OHakYo6gOV7qd89dAFmPZiw+B6KjBSYR +aZfqhbcPlgtLyEDhULouisv3D5oi53+aNxPN8k0TayHRwMwi8qFG9kRpnMphNQcA +b9ZhCBHqurj26bNg5U257J8UZslXWNvNh2n4ioYSA0e/ZhN2rHd9NCSFg83XqpyQ +Gp8hLH94t2S42Oim9HizVcuE0jLEeK6jj2HdzghTreyI/BXkmg3mnxp3zkyPuBQV +PWKchjgGAGYS5Fl2WlPAApiiECtoRHuOec4zSnaqW4EWG7WK2NAAe15itAnWhmMO +pgWVSbooi4iTsjQc2KRVbrcc0N6ZVTsj9CLg+SlmJuwgUHfbSguPvuUCYHBBXtSu +UDkiFCbLsjtzdFVHB3mBOagwE0TlBIqulhMlQg+5U8Sb/M3kHN48+qvWBkofZ6aY +MBzdLNvcGJVXZsb/XItW9XcCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNV +HSMEGDAWgBT5YLvU49U09rj1BoAlp3PbRmmonjAdBgNVHQ4EFgQU+WC71OPVNPa4 +9QaAJadz20ZpqJ4wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQBW +s47LCp1Jjr+kxJG7ZhcFUZh1++VQLHqe8RT6q9OKPv+RKY9ji9i0qVQBDb6Thi/5 +Sm3HXvVX+cpVHBK+Rw82xd9qt9t1wkclf7nxY/hoLVUE0fKNsKTPvDxeH3jnpaAg +cLAExbf3cqfeIg29MyVGjGSSJuM+LmOW2puMPfgYCdcDzH2GguDKBAdRUNf/ktUM +79qGn5nX67evaOI5JpS6aLe/g9Pqemc9YmeuJeVy6OLk7K4S9ksrPJ/psEDzOFSz +/bdoyNrGj1E8svuR3Bznm53htw1yj+KkxKl4+esUrMZDBcJlOSgYAsOCsp0FvmXt +ll9ldDz7CTUue5wT/RsPXcdtgTpWD8w74a8CLyKsRspGPKAcTNZEtF4uXBVmCeEm +Kf7GUmG6sXP/wwyc5WxqlD8UykAWlYTzWamsX0xhk23RO8yilQwipmdnRC652dKK +QbNmC1r7fSOl8hqw/96bg5Qu0T/fkreRrwU7ZcegbLHNYhLDkBvjJc40vG93drEQ +w/cFGsDWr3RiSBd3kmmQYRzelYB0VI8YHMPzA9C/pEN1hlMYegouCRw2n5H9gooi +S9EOUCXdywMMF8mDAAhONU2Ki+3wApRmLER/y5UnlhetCTCstnEXbosX9hwJ1C07 +mKVx01QT2WDz9UtmT/rx7iASjbSsV7FFY6GsdqnC+w== +-----END CERTIFICATE----- + +# Issuer: CN=SSL.com EV Root Certification Authority ECC O=SSL Corporation +# Subject: CN=SSL.com EV Root Certification Authority ECC O=SSL Corporation +# Label: "SSL.com EV Root Certification Authority ECC" +# Serial: 3182246526754555285 +# MD5 Fingerprint: 59:53:22:65:83:42:01:54:c0:ce:42:b9:5a:7c:f2:90 +# SHA1 Fingerprint: 4c:dd:51:a3:d1:f5:20:32:14:b0:c6:c5:32:23:03:91:c7:46:42:6d +# SHA256 Fingerprint: 22:a2:c1:f7:bd:ed:70:4c:c1:e7:01:b5:f4:08:c3:10:88:0f:e9:56:b5:de:2a:4a:44:f9:9c:87:3a:25:a7:c8 +-----BEGIN CERTIFICATE----- +MIIClDCCAhqgAwIBAgIILCmcWxbtBZUwCgYIKoZIzj0EAwIwfzELMAkGA1UEBhMC +VVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9T +U0wgQ29ycG9yYXRpb24xNDAyBgNVBAMMK1NTTC5jb20gRVYgUm9vdCBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEyMTgxNTIzWhcNNDEwMjEyMTgx +NTIzWjB/MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hv +dXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjE0MDIGA1UEAwwrU1NMLmNv +bSBFViBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49 +AgEGBSuBBAAiA2IABKoSR5CYG/vvw0AHgyBO8TCCogbR8pKGYfL2IWjKAMTH6kMA +VIbc/R/fALhBYlzccBYy3h+Z1MzFB8gIH2EWB1E9fVwHU+M1OIzfzZ/ZLg1Kthku +WnBaBu2+8KGwytAJKaNjMGEwHQYDVR0OBBYEFFvKXuXe0oGqzagtZFG22XKbl+ZP +MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUW8pe5d7SgarNqC1kUbbZcpuX +5k8wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2gAMGUCMQCK5kCJN+vp1RPZ +ytRrJPOwPYdGWBrssd9v+1a6cGvHOMzosYxPD/fxZ3YOg9AeUY8CMD32IygmTMZg +h5Mmm7I1HrrW9zzRHM76JTymGoEVW/MSD2zuZYrJh6j5B+BimoxcSg== +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R6 +# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R6 +# Label: "GlobalSign Root CA - R6" +# Serial: 1417766617973444989252670301619537 +# MD5 Fingerprint: 4f:dd:07:e4:d4:22:64:39:1e:0c:37:42:ea:d1:c6:ae +# SHA1 Fingerprint: 80:94:64:0e:b5:a7:a1:ca:11:9c:1f:dd:d5:9f:81:02:63:a7:fb:d1 +# SHA256 Fingerprint: 2c:ab:ea:fe:37:d0:6c:a2:2a:ba:73:91:c0:03:3d:25:98:29:52:c4:53:64:73:49:76:3a:3a:b5:ad:6c:cf:69 +-----BEGIN CERTIFICATE----- +MIIFgzCCA2ugAwIBAgIORea7A4Mzw4VlSOb/RVEwDQYJKoZIhvcNAQEMBQAwTDEg +MB4GA1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjYxEzARBgNVBAoTCkdsb2Jh +bFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMTQxMjEwMDAwMDAwWhcNMzQx +MjEwMDAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSNjET +MBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCAiIwDQYJ +KoZIhvcNAQEBBQADggIPADCCAgoCggIBAJUH6HPKZvnsFMp7PPcNCPG0RQssgrRI +xutbPK6DuEGSMxSkb3/pKszGsIhrxbaJ0cay/xTOURQh7ErdG1rG1ofuTToVBu1k +ZguSgMpE3nOUTvOniX9PeGMIyBJQbUJmL025eShNUhqKGoC3GYEOfsSKvGRMIRxD +aNc9PIrFsmbVkJq3MQbFvuJtMgamHvm566qjuL++gmNQ0PAYid/kD3n16qIfKtJw +LnvnvJO7bVPiSHyMEAc4/2ayd2F+4OqMPKq0pPbzlUoSB239jLKJz9CgYXfIWHSw +1CM69106yqLbnQneXUQtkPGBzVeS+n68UARjNN9rkxi+azayOeSsJDa38O+2HBNX +k7besvjihbdzorg1qkXy4J02oW9UivFyVm4uiMVRQkQVlO6jxTiWm05OWgtH8wY2 +SXcwvHE35absIQh1/OZhFj931dmRl4QKbNQCTXTAFO39OfuD8l4UoQSwC+n+7o/h +bguyCLNhZglqsQY6ZZZZwPA1/cnaKI0aEYdwgQqomnUdnjqGBQCe24DWJfncBZ4n +WUx2OVvq+aWh2IMP0f/fMBH5hc8zSPXKbWQULHpYT9NLCEnFlWQaYw55PfWzjMpY +rZxCRXluDocZXFSxZba/jJvcE+kNb7gu3GduyYsRtYQUigAZcIN5kZeR1Bonvzce +MgfYFGM8KEyvAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTAD +AQH/MB0GA1UdDgQWBBSubAWjkxPioufi1xzWx/B/yGdToDAfBgNVHSMEGDAWgBSu +bAWjkxPioufi1xzWx/B/yGdToDANBgkqhkiG9w0BAQwFAAOCAgEAgyXt6NH9lVLN +nsAEoJFp5lzQhN7craJP6Ed41mWYqVuoPId8AorRbrcWc+ZfwFSY1XS+wc3iEZGt +Ixg93eFyRJa0lV7Ae46ZeBZDE1ZXs6KzO7V33EByrKPrmzU+sQghoefEQzd5Mr61 +55wsTLxDKZmOMNOsIeDjHfrYBzN2VAAiKrlNIC5waNrlU/yDXNOd8v9EDERm8tLj +vUYAGm0CuiVdjaExUd1URhxN25mW7xocBFymFe944Hn+Xds+qkxV/ZoVqW/hpvvf +cDDpw+5CRu3CkwWJ+n1jez/QcYF8AOiYrg54NMMl+68KnyBr3TsTjxKM4kEaSHpz +oHdpx7Zcf4LIHv5YGygrqGytXm3ABdJ7t+uA/iU3/gKbaKxCXcPu9czc8FB10jZp +nOZ7BN9uBmm23goJSFmH63sUYHpkqmlD75HHTOwY3WzvUy2MmeFe8nI+z1TIvWfs +pA9MRf/TuTAjB0yPEL+GltmZWrSZVxykzLsViVO6LAUP5MSeGbEYNNVMnbrt9x+v +JJUEeKgDu+6B5dpffItKoZB0JaezPkvILFa9x8jvOOJckvB595yEunQtYQEgfn7R +8k8HWV+LLUNS60YMlOH1Zkd5d9VUWx+tJDfLRVpOoERIyNiwmcUVhAn21klJwGW4 +5hpxbqCo8YLoRT5s1gLXCmeDBVrJpBA= +-----END CERTIFICATE----- + +# Issuer: CN=OISTE WISeKey Global Root GC CA O=WISeKey OU=OISTE Foundation Endorsed +# Subject: CN=OISTE WISeKey Global Root GC CA O=WISeKey OU=OISTE Foundation Endorsed +# Label: "OISTE WISeKey Global Root GC CA" +# Serial: 44084345621038548146064804565436152554 +# MD5 Fingerprint: a9:d6:b9:2d:2f:93:64:f8:a5:69:ca:91:e9:68:07:23 +# SHA1 Fingerprint: e0:11:84:5e:34:de:be:88:81:b9:9c:f6:16:26:d1:96:1f:c3:b9:31 +# SHA256 Fingerprint: 85:60:f9:1c:36:24:da:ba:95:70:b5:fe:a0:db:e3:6f:f1:1a:83:23:be:94:86:85:4f:b3:f3:4a:55:71:19:8d +-----BEGIN CERTIFICATE----- +MIICaTCCAe+gAwIBAgIQISpWDK7aDKtARb8roi066jAKBggqhkjOPQQDAzBtMQsw +CQYDVQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91 +bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwg +Um9vdCBHQyBDQTAeFw0xNzA1MDkwOTQ4MzRaFw00MjA1MDkwOTU4MzNaMG0xCzAJ +BgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQLExlPSVNURSBGb3Vu +ZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2JhbCBS +b290IEdDIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAETOlQwMYPchi82PG6s4ni +eUqjFqdrVCTbUf/q9Akkwwsin8tqJ4KBDdLArzHkdIJuyiXZjHWd8dvQmqJLIX4W +p2OQ0jnUsYd4XxiWD1AbNTcPasbc2RNNpI6QN+a9WzGRo1QwUjAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUSIcUrOPDnpBgOtfKie7T +rYy0UGYwEAYJKwYBBAGCNxUBBAMCAQAwCgYIKoZIzj0EAwMDaAAwZQIwJsdpW9zV +57LnyAyMjMPdeYwbY9XJUpROTYJKcx6ygISpJcBMWm1JKWB4E+J+SOtkAjEA2zQg +Mgj/mkkCtojeFK9dbJlxjRo/i9fgojaGHAeCOnZT/cKi7e97sIBPWA9LUzm9 +-----END CERTIFICATE----- + +# Issuer: CN=UCA Global G2 Root O=UniTrust +# Subject: CN=UCA Global G2 Root O=UniTrust +# Label: "UCA Global G2 Root" +# Serial: 124779693093741543919145257850076631279 +# MD5 Fingerprint: 80:fe:f0:c4:4a:f0:5c:62:32:9f:1c:ba:78:a9:50:f8 +# SHA1 Fingerprint: 28:f9:78:16:19:7a:ff:18:25:18:aa:44:fe:c1:a0:ce:5c:b6:4c:8a +# SHA256 Fingerprint: 9b:ea:11:c9:76:fe:01:47:64:c1:be:56:a6:f9:14:b5:a5:60:31:7a:bd:99:88:39:33:82:e5:16:1a:a0:49:3c +-----BEGIN CERTIFICATE----- +MIIFRjCCAy6gAwIBAgIQXd+x2lqj7V2+WmUgZQOQ7zANBgkqhkiG9w0BAQsFADA9 +MQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxGzAZBgNVBAMMElVDQSBH +bG9iYWwgRzIgUm9vdDAeFw0xNjAzMTEwMDAwMDBaFw00MDEyMzEwMDAwMDBaMD0x +CzAJBgNVBAYTAkNOMREwDwYDVQQKDAhVbmlUcnVzdDEbMBkGA1UEAwwSVUNBIEds +b2JhbCBHMiBSb290MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxeYr +b3zvJgUno4Ek2m/LAfmZmqkywiKHYUGRO8vDaBsGxUypK8FnFyIdK+35KYmToni9 +kmugow2ifsqTs6bRjDXVdfkX9s9FxeV67HeToI8jrg4aA3++1NDtLnurRiNb/yzm +VHqUwCoV8MmNsHo7JOHXaOIxPAYzRrZUEaalLyJUKlgNAQLx+hVRZ2zA+te2G3/R +VogvGjqNO7uCEeBHANBSh6v7hn4PJGtAnTRnvI3HLYZveT6OqTwXS3+wmeOwcWDc +C/Vkw85DvG1xudLeJ1uK6NjGruFZfc8oLTW4lVYa8bJYS7cSN8h8s+1LgOGN+jIj +tm+3SJUIsUROhYw6AlQgL9+/V087OpAh18EmNVQg7Mc/R+zvWr9LesGtOxdQXGLY +D0tK3Cv6brxzks3sx1DoQZbXqX5t2Okdj4q1uViSukqSKwxW/YDrCPBeKW4bHAyv +j5OJrdu9o54hyokZ7N+1wxrrFv54NkzWbtA+FxyQF2smuvt6L78RHBgOLXMDj6Dl +NaBa4kx1HXHhOThTeEDMg5PXCp6dW4+K5OXgSORIskfNTip1KnvyIvbJvgmRlld6 +iIis7nCs+dwp4wwcOxJORNanTrAmyPPZGpeRaOrvjUYG0lZFWJo8DA+DuAUlwznP +O6Q0ibd5Ei9Hxeepl2n8pndntd978XplFeRhVmUCAwEAAaNCMEAwDgYDVR0PAQH/ +BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFIHEjMz15DD/pQwIX4wV +ZyF0Ad/fMA0GCSqGSIb3DQEBCwUAA4ICAQATZSL1jiutROTL/7lo5sOASD0Ee/oj +L3rtNtqyzm325p7lX1iPyzcyochltq44PTUbPrw7tgTQvPlJ9Zv3hcU2tsu8+Mg5 +1eRfB70VVJd0ysrtT7q6ZHafgbiERUlMjW+i67HM0cOU2kTC5uLqGOiiHycFutfl +1qnN3e92mI0ADs0b+gO3joBYDic/UvuUospeZcnWhNq5NXHzJsBPd+aBJ9J3O5oU +b3n09tDh05S60FdRvScFDcH9yBIw7m+NESsIndTUv4BFFJqIRNow6rSn4+7vW4LV +PtateJLbXDzz2K36uGt/xDYotgIVilQsnLAXc47QN6MUPJiVAAwpBVueSUmxX8fj +y88nZY41F7dXyDDZQVu5FLbowg+UMaeUmMxq67XhJ/UQqAHojhJi6IjMtX9Gl8Cb +EGY4GjZGXyJoPd/JxhMnq1MGrKI8hgZlb7F+sSlEmqO6SWkoaY/X5V+tBIZkbxqg +DMUIYs6Ao9Dz7GjevjPHF1t/gMRMTLGmhIrDO7gJzRSBuhjjVFc2/tsvfEehOjPI ++Vg7RE+xygKJBJYoaMVLuCaJu9YzL1DV/pqJuhgyklTGW+Cd+V7lDSKb9triyCGy +YiGqhkCyLmTTX8jjfhFnRR8F/uOi77Oos/N9j/gMHyIfLXC0uAE0djAA5SN4p1bX +UB+K+wb1whnw0A== +-----END CERTIFICATE----- + +# Issuer: CN=UCA Extended Validation Root O=UniTrust +# Subject: CN=UCA Extended Validation Root O=UniTrust +# Label: "UCA Extended Validation Root" +# Serial: 106100277556486529736699587978573607008 +# MD5 Fingerprint: a1:f3:5f:43:c6:34:9b:da:bf:8c:7e:05:53:ad:96:e2 +# SHA1 Fingerprint: a3:a1:b0:6f:24:61:23:4a:e3:36:a5:c2:37:fc:a6:ff:dd:f0:d7:3a +# SHA256 Fingerprint: d4:3a:f9:b3:54:73:75:5c:96:84:fc:06:d7:d8:cb:70:ee:5c:28:e7:73:fb:29:4e:b4:1e:e7:17:22:92:4d:24 +-----BEGIN CERTIFICATE----- +MIIFWjCCA0KgAwIBAgIQT9Irj/VkyDOeTzRYZiNwYDANBgkqhkiG9w0BAQsFADBH +MQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxJTAjBgNVBAMMHFVDQSBF +eHRlbmRlZCBWYWxpZGF0aW9uIFJvb3QwHhcNMTUwMzEzMDAwMDAwWhcNMzgxMjMx +MDAwMDAwWjBHMQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxJTAjBgNV +BAMMHFVDQSBFeHRlbmRlZCBWYWxpZGF0aW9uIFJvb3QwggIiMA0GCSqGSIb3DQEB +AQUAA4ICDwAwggIKAoICAQCpCQcoEwKwmeBkqh5DFnpzsZGgdT6o+uM4AHrsiWog +D4vFsJszA1qGxliG1cGFu0/GnEBNyr7uaZa4rYEwmnySBesFK5pI0Lh2PpbIILvS +sPGP2KxFRv+qZ2C0d35qHzwaUnoEPQc8hQ2E0B92CvdqFN9y4zR8V05WAT558aop +O2z6+I9tTcg1367r3CTueUWnhbYFiN6IXSV8l2RnCdm/WhUFhvMJHuxYMjMR83dk +sHYf5BA1FxvyDrFspCqjc/wJHx4yGVMR59mzLC52LqGj3n5qiAno8geK+LLNEOfi +c0CTuwjRP+H8C5SzJe98ptfRr5//lpr1kXuYC3fUfugH0mK1lTnj8/FtDw5lhIpj +VMWAtuCeS31HJqcBCF3RiJ7XwzJE+oJKCmhUfzhTA8ykADNkUVkLo4KRel7sFsLz +KuZi2irbWWIQJUoqgQtHB0MGcIfS+pMRKXpITeuUx3BNr2fVUbGAIAEBtHoIppB/ +TuDvB0GHr2qlXov7z1CymlSvw4m6WC31MJixNnI5fkkE/SmnTHnkBVfblLkWU41G +sx2VYVdWf6/wFlthWG82UBEL2KwrlRYaDh8IzTY0ZRBiZtWAXxQgXy0MoHgKaNYs +1+lvK9JKBZP8nm9rZ/+I8U6laUpSNwXqxhaN0sSZ0YIrO7o1dfdRUVjzyAfd5LQD +fwIDAQABo0IwQDAdBgNVHQ4EFgQU2XQ65DA9DfcS3H5aBZ8eNJr34RQwDwYDVR0T +AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQADggIBADaN +l8xCFWQpN5smLNb7rhVpLGsaGvdftvkHTFnq88nIua7Mui563MD1sC3AO6+fcAUR +ap8lTwEpcOPlDOHqWnzcSbvBHiqB9RZLcpHIojG5qtr8nR/zXUACE/xOHAbKsxSQ +VBcZEhrxH9cMaVr2cXj0lH2RC47skFSOvG+hTKv8dGT9cZr4QQehzZHkPJrgmzI5 +c6sq1WnIeJEmMX3ixzDx/BR4dxIOE/TdFpS/S2d7cFOFyrC78zhNLJA5wA3CXWvp +4uXViI3WLL+rG761KIcSF3Ru/H38j9CHJrAb+7lsq+KePRXBOy5nAliRn+/4Qh8s +t2j1da3Ptfb/EX3C8CSlrdP6oDyp+l3cpaDvRKS+1ujl5BOWF3sGPjLtx7dCvHaj +2GU4Kzg1USEODm8uNBNA4StnDG1KQTAYI1oyVZnJF+A83vbsea0rWBmirSwiGpWO +vpaQXUJXxPkUAzUrHC1RVwinOt4/5Mi0A3PCwSaAuwtCH60NryZy2sy+s6ODWA2C +xR9GUeOcGMyNm43sSet1UNWMKFnKdDTajAshqx7qG+XH/RU+wBeq+yNuJkbL+vmx +cmtpzyKEC2IPrNkZAJSidjzULZrtBJ4tBmIQN1IchXIbJ+XMxjHsN+xjWZsLHXbM +fjKaiJUINlK73nZfdklJrX+9ZSCyycErdhh2n1ax +-----END CERTIFICATE----- + +# Issuer: CN=Certigna Root CA O=Dhimyotis OU=0002 48146308100036 +# Subject: CN=Certigna Root CA O=Dhimyotis OU=0002 48146308100036 +# Label: "Certigna Root CA" +# Serial: 269714418870597844693661054334862075617 +# MD5 Fingerprint: 0e:5c:30:62:27:eb:5b:bc:d7:ae:62:ba:e9:d5:df:77 +# SHA1 Fingerprint: 2d:0d:52:14:ff:9e:ad:99:24:01:74:20:47:6e:6c:85:27:27:f5:43 +# SHA256 Fingerprint: d4:8d:3d:23:ee:db:50:a4:59:e5:51:97:60:1c:27:77:4b:9d:7b:18:c9:4d:5a:05:95:11:a1:02:50:b9:31:68 +-----BEGIN CERTIFICATE----- +MIIGWzCCBEOgAwIBAgIRAMrpG4nxVQMNo+ZBbcTjpuEwDQYJKoZIhvcNAQELBQAw +WjELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczEcMBoGA1UECwwTMDAw +MiA0ODE0NjMwODEwMDAzNjEZMBcGA1UEAwwQQ2VydGlnbmEgUm9vdCBDQTAeFw0x +MzEwMDEwODMyMjdaFw0zMzEwMDEwODMyMjdaMFoxCzAJBgNVBAYTAkZSMRIwEAYD +VQQKDAlEaGlteW90aXMxHDAaBgNVBAsMEzAwMDIgNDgxNDYzMDgxMDAwMzYxGTAX +BgNVBAMMEENlcnRpZ25hIFJvb3QgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +ggIKAoICAQDNGDllGlmx6mQWDoyUJJV8g9PFOSbcDO8WV43X2KyjQn+Cyu3NW9sO +ty3tRQgXstmzy9YXUnIo245Onoq2C/mehJpNdt4iKVzSs9IGPjA5qXSjklYcoW9M +CiBtnyN6tMbaLOQdLNyzKNAT8kxOAkmhVECe5uUFoC2EyP+YbNDrihqECB63aCPu +I9Vwzm1RaRDuoXrC0SIxwoKF0vJVdlB8JXrJhFwLrN1CTivngqIkicuQstDuI7pm +TLtipPlTWmR7fJj6o0ieD5Wupxj0auwuA0Wv8HT4Ks16XdG+RCYyKfHx9WzMfgIh +C59vpD++nVPiz32pLHxYGpfhPTc3GGYo0kDFUYqMwy3OU4gkWGQwFsWq4NYKpkDf +ePb1BHxpE4S80dGnBs8B92jAqFe7OmGtBIyT46388NtEbVncSVmurJqZNjBBe3Yz +IoejwpKGbvlw7q6Hh5UbxHq9MfPU0uWZ/75I7HX1eBYdpnDBfzwboZL7z8g81sWT +Co/1VTp2lc5ZmIoJlXcymoO6LAQ6l73UL77XbJuiyn1tJslV1c/DeVIICZkHJC1k +JWumIWmbat10TWuXekG9qxf5kBdIjzb5LdXF2+6qhUVB+s06RbFo5jZMm5BX7CO5 +hwjCxAnxl4YqKE3idMDaxIzb3+KhF1nOJFl0Mdp//TBt2dzhauH8XwIDAQABo4IB +GjCCARYwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE +FBiHVuBud+4kNTxOc5of1uHieX4rMB8GA1UdIwQYMBaAFBiHVuBud+4kNTxOc5of +1uHieX4rMEQGA1UdIAQ9MDswOQYEVR0gADAxMC8GCCsGAQUFBwIBFiNodHRwczov +L3d3d3cuY2VydGlnbmEuZnIvYXV0b3JpdGVzLzBtBgNVHR8EZjBkMC+gLaArhilo +dHRwOi8vY3JsLmNlcnRpZ25hLmZyL2NlcnRpZ25hcm9vdGNhLmNybDAxoC+gLYYr +aHR0cDovL2NybC5kaGlteW90aXMuY29tL2NlcnRpZ25hcm9vdGNhLmNybDANBgkq +hkiG9w0BAQsFAAOCAgEAlLieT/DjlQgi581oQfccVdV8AOItOoldaDgvUSILSo3L +6btdPrtcPbEo/uRTVRPPoZAbAh1fZkYJMyjhDSSXcNMQH+pkV5a7XdrnxIxPTGRG +HVyH41neQtGbqH6mid2PHMkwgu07nM3A6RngatgCdTer9zQoKJHyBApPNeNgJgH6 +0BGM+RFq7q89w1DTj18zeTyGqHNFkIwgtnJzFyO+B2XleJINugHA64wcZr+shncB +lA2c5uk5jR+mUYyZDDl34bSb+hxnV29qao6pK0xXeXpXIs/NX2NGjVxZOob4Mkdi +o2cNGJHc+6Zr9UhhcyNZjgKnvETq9Emd8VRY+WCv2hikLyhF3HqgiIZd8zvn/yk1 +gPxkQ5Tm4xxvvq0OKmOZK8l+hfZx6AYDlf7ej0gcWtSS6Cvu5zHbugRqh5jnxV/v +faci9wHYTfmJ0A6aBVmknpjZbyvKcL5kwlWj9Omvw5Ip3IgWJJk8jSaYtlu3zM63 +Nwf9JtmYhST/WSMDmu2dnajkXjjO11INb9I/bbEFa0nOipFGc/T2L/Coc3cOZayh +jWZSaX5LaAzHHjcng6WMxwLkFM1JAbBzs/3GkDpv0mztO+7skb6iQ12LAEpmJURw +3kAP+HwV96LOPNdeE4yBFxgX0b3xdxA61GU5wSesVywlVP+i2k+KYTlerj1KjL0= +-----END CERTIFICATE----- + +# Issuer: CN=emSign Root CA - G1 O=eMudhra Technologies Limited OU=emSign PKI +# Subject: CN=emSign Root CA - G1 O=eMudhra Technologies Limited OU=emSign PKI +# Label: "emSign Root CA - G1" +# Serial: 235931866688319308814040 +# MD5 Fingerprint: 9c:42:84:57:dd:cb:0b:a7:2e:95:ad:b6:f3:da:bc:ac +# SHA1 Fingerprint: 8a:c7:ad:8f:73:ac:4e:c1:b5:75:4d:a5:40:f4:fc:cf:7c:b5:8e:8c +# SHA256 Fingerprint: 40:f6:af:03:46:a9:9a:a1:cd:1d:55:5a:4e:9c:ce:62:c7:f9:63:46:03:ee:40:66:15:83:3d:c8:c8:d0:03:67 +-----BEGIN CERTIFICATE----- +MIIDlDCCAnygAwIBAgIKMfXkYgxsWO3W2DANBgkqhkiG9w0BAQsFADBnMQswCQYD +VQQGEwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBU +ZWNobm9sb2dpZXMgTGltaXRlZDEcMBoGA1UEAxMTZW1TaWduIFJvb3QgQ0EgLSBH +MTAeFw0xODAyMTgxODMwMDBaFw00MzAyMTgxODMwMDBaMGcxCzAJBgNVBAYTAklO +MRMwEQYDVQQLEwplbVNpZ24gUEtJMSUwIwYDVQQKExxlTXVkaHJhIFRlY2hub2xv +Z2llcyBMaW1pdGVkMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEcxMIIBIjAN +BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAk0u76WaK7p1b1TST0Bsew+eeuGQz +f2N4aLTNLnF115sgxk0pvLZoYIr3IZpWNVrzdr3YzZr/k1ZLpVkGoZM0Kd0WNHVO +8oG0x5ZOrRkVUkr+PHB1cM2vK6sVmjM8qrOLqs1D/fXqcP/tzxE7lM5OMhbTI0Aq +d7OvPAEsbO2ZLIvZTmmYsvePQbAyeGHWDV/D+qJAkh1cF+ZwPjXnorfCYuKrpDhM +tTk1b+oDafo6VGiFbdbyL0NVHpENDtjVaqSW0RM8LHhQ6DqS0hdW5TUaQBw+jSzt +Od9C4INBdN+jzcKGYEho42kLVACL5HZpIQ15TjQIXhTCzLG3rdd8cIrHhQIDAQAB +o0IwQDAdBgNVHQ4EFgQU++8Nhp6w492pufEhF38+/PB3KxowDgYDVR0PAQH/BAQD +AgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAFn/8oz1h31x +PaOfG1vR2vjTnGs2vZupYeveFix0PZ7mddrXuqe8QhfnPZHr5X3dPpzxz5KsbEjM +wiI/aTvFthUvozXGaCocV685743QNcMYDHsAVhzNixl03r4PEuDQqqE/AjSxcM6d +GNYIAwlG7mDgfrbESQRRfXBgvKqy/3lyeqYdPV8q+Mri/Tm3R7nrft8EI6/6nAYH +6ftjk4BAtcZsCjEozgyfz7MjNYBBjWzEN3uBL4ChQEKF6dk4jeihU80Bv2noWgby +RQuQ+q7hv53yrlc8pa6yVvSLZUDp/TGBLPQ5Cdjua6e0ph0VpZj3AYHYhX3zUVxx +iN66zB+Afko= +-----END CERTIFICATE----- + +# Issuer: CN=emSign ECC Root CA - G3 O=eMudhra Technologies Limited OU=emSign PKI +# Subject: CN=emSign ECC Root CA - G3 O=eMudhra Technologies Limited OU=emSign PKI +# Label: "emSign ECC Root CA - G3" +# Serial: 287880440101571086945156 +# MD5 Fingerprint: ce:0b:72:d1:9f:88:8e:d0:50:03:e8:e3:b8:8b:67:40 +# SHA1 Fingerprint: 30:43:fa:4f:f2:57:dc:a0:c3:80:ee:2e:58:ea:78:b2:3f:e6:bb:c1 +# SHA256 Fingerprint: 86:a1:ec:ba:08:9c:4a:8d:3b:be:27:34:c6:12:ba:34:1d:81:3e:04:3c:f9:e8:a8:62:cd:5c:57:a3:6b:be:6b +-----BEGIN CERTIFICATE----- +MIICTjCCAdOgAwIBAgIKPPYHqWhwDtqLhDAKBggqhkjOPQQDAzBrMQswCQYDVQQG +EwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNo +bm9sb2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0g +RzMwHhcNMTgwMjE4MTgzMDAwWhcNNDMwMjE4MTgzMDAwWjBrMQswCQYDVQQGEwJJ +TjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNobm9s +b2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0gRzMw +djAQBgcqhkjOPQIBBgUrgQQAIgNiAAQjpQy4LRL1KPOxst3iAhKAnjlfSU2fySU0 +WXTsuwYc58Byr+iuL+FBVIcUqEqy6HyC5ltqtdyzdc6LBtCGI79G1Y4PPwT01xyS +fvalY8L1X44uT6EYGQIrMgqCZH0Wk9GjQjBAMB0GA1UdDgQWBBR8XQKEE9TMipuB +zhccLikenEhjQjAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggq +hkjOPQQDAwNpADBmAjEAvvNhzwIQHWSVB7gYboiFBS+DCBeQyh+KTOgNG3qxrdWB +CUfvO6wIBHxcmbHtRwfSAjEAnbpV/KlK6O3t5nYBQnvI+GDZjVGLVTv7jHvrZQnD ++JbNR6iC8hZVdyR+EhCVBCyj +-----END CERTIFICATE----- + +# Issuer: CN=emSign Root CA - C1 O=eMudhra Inc OU=emSign PKI +# Subject: CN=emSign Root CA - C1 O=eMudhra Inc OU=emSign PKI +# Label: "emSign Root CA - C1" +# Serial: 825510296613316004955058 +# MD5 Fingerprint: d8:e3:5d:01:21:fa:78:5a:b0:df:ba:d2:ee:2a:5f:68 +# SHA1 Fingerprint: e7:2e:f1:df:fc:b2:09:28:cf:5d:d4:d5:67:37:b1:51:cb:86:4f:01 +# SHA256 Fingerprint: 12:56:09:aa:30:1d:a0:a2:49:b9:7a:82:39:cb:6a:34:21:6f:44:dc:ac:9f:39:54:b1:42:92:f2:e8:c8:60:8f +-----BEGIN CERTIFICATE----- +MIIDczCCAlugAwIBAgILAK7PALrEzzL4Q7IwDQYJKoZIhvcNAQELBQAwVjELMAkG +A1UEBhMCVVMxEzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEg +SW5jMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEMxMB4XDTE4MDIxODE4MzAw +MFoXDTQzMDIxODE4MzAwMFowVjELMAkGA1UEBhMCVVMxEzARBgNVBAsTCmVtU2ln +biBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMRwwGgYDVQQDExNlbVNpZ24gUm9v +dCBDQSAtIEMxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz+upufGZ +BczYKCFK83M0UYRWEPWgTywS4/oTmifQz/l5GnRfHXk5/Fv4cI7gklL35CX5VIPZ +HdPIWoU/Xse2B+4+wM6ar6xWQio5JXDWv7V7Nq2s9nPczdcdioOl+yuQFTdrHCZH +3DspVpNqs8FqOp099cGXOFgFixwR4+S0uF2FHYP+eF8LRWgYSKVGczQ7/g/IdrvH +GPMF0Ybzhe3nudkyrVWIzqa2kbBPrH4VI5b2P/AgNBbeCsbEBEV5f6f9vtKppa+c +xSMq9zwhbL2vj07FOrLzNBL834AaSaTUqZX3noleoomslMuoaJuvimUnzYnu3Yy1 +aylwQ6BpC+S5DwIDAQABo0IwQDAdBgNVHQ4EFgQU/qHgcB4qAzlSWkK+XJGFehiq +TbUwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL +BQADggEBAMJKVvoVIXsoounlHfv4LcQ5lkFMOycsxGwYFYDGrK9HWS8mC+M2sO87 +/kOXSTKZEhVb3xEp/6tT+LvBeA+snFOvV71ojD1pM/CjoCNjO2RnIkSt1XHLVip4 +kqNPEjE2NuLe/gDEo2APJ62gsIq1NnpSob0n9CAnYuhNlCQT5AoE6TyrLshDCUrG +YQTlSTR+08TI9Q/Aqum6VF7zYytPT1DU/rl7mYw9wC68AivTxEDkigcxHpvOJpkT ++xHqmiIMERnHXhuBUDDIlhJu58tBf5E7oke3VIAb3ADMmpDqw8NQBmIMMMAVSKeo +WXzhriKi4gp6D/piq1JM4fHfyr6DDUI= +-----END CERTIFICATE----- + +# Issuer: CN=emSign ECC Root CA - C3 O=eMudhra Inc OU=emSign PKI +# Subject: CN=emSign ECC Root CA - C3 O=eMudhra Inc OU=emSign PKI +# Label: "emSign ECC Root CA - C3" +# Serial: 582948710642506000014504 +# MD5 Fingerprint: 3e:53:b3:a3:81:ee:d7:10:f8:d3:b0:1d:17:92:f5:d5 +# SHA1 Fingerprint: b6:af:43:c2:9b:81:53:7d:f6:ef:6b:c3:1f:1f:60:15:0c:ee:48:66 +# SHA256 Fingerprint: bc:4d:80:9b:15:18:9d:78:db:3e:1d:8c:f4:f9:72:6a:79:5d:a1:64:3c:a5:f1:35:8e:1d:db:0e:dc:0d:7e:b3 +-----BEGIN CERTIFICATE----- +MIICKzCCAbGgAwIBAgIKe3G2gla4EnycqDAKBggqhkjOPQQDAzBaMQswCQYDVQQG +EwJVUzETMBEGA1UECxMKZW1TaWduIFBLSTEUMBIGA1UEChMLZU11ZGhyYSBJbmMx +IDAeBgNVBAMTF2VtU2lnbiBFQ0MgUm9vdCBDQSAtIEMzMB4XDTE4MDIxODE4MzAw +MFoXDTQzMDIxODE4MzAwMFowWjELMAkGA1UEBhMCVVMxEzARBgNVBAsTCmVtU2ln +biBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMSAwHgYDVQQDExdlbVNpZ24gRUND +IFJvb3QgQ0EgLSBDMzB2MBAGByqGSM49AgEGBSuBBAAiA2IABP2lYa57JhAd6bci +MK4G9IGzsUJxlTm801Ljr6/58pc1kjZGDoeVjbk5Wum739D+yAdBPLtVb4Ojavti +sIGJAnB9SMVK4+kiVCJNk7tCDK93nCOmfddhEc5lx/h//vXyqaNCMEAwHQYDVR0O +BBYEFPtaSNCAIEDyqOkAB2kZd6fmw/TPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB +Af8EBTADAQH/MAoGCCqGSM49BAMDA2gAMGUCMQC02C8Cif22TGK6Q04ThHK1rt0c +3ta13FaPWEBaLd4gTCKDypOofu4SQMfWh0/434UCMBwUZOR8loMRnLDRWmFLpg9J +0wD8ofzkpf9/rdcw0Md3f76BB1UwUCAU9Vc4CqgxUQ== +-----END CERTIFICATE----- + +# Issuer: CN=Hongkong Post Root CA 3 O=Hongkong Post +# Subject: CN=Hongkong Post Root CA 3 O=Hongkong Post +# Label: "Hongkong Post Root CA 3" +# Serial: 46170865288971385588281144162979347873371282084 +# MD5 Fingerprint: 11:fc:9f:bd:73:30:02:8a:fd:3f:f3:58:b9:cb:20:f0 +# SHA1 Fingerprint: 58:a2:d0:ec:20:52:81:5b:c1:f3:f8:64:02:24:4e:c2:8e:02:4b:02 +# SHA256 Fingerprint: 5a:2f:c0:3f:0c:83:b0:90:bb:fa:40:60:4b:09:88:44:6c:76:36:18:3d:f9:84:6e:17:10:1a:44:7f:b8:ef:d6 +-----BEGIN CERTIFICATE----- +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 +mpv0 +-----END CERTIFICATE----- + +# Issuer: CN=Microsoft ECC Root Certificate Authority 2017 O=Microsoft Corporation +# Subject: CN=Microsoft ECC Root Certificate Authority 2017 O=Microsoft Corporation +# Label: "Microsoft ECC Root Certificate Authority 2017" +# Serial: 136839042543790627607696632466672567020 +# MD5 Fingerprint: dd:a1:03:e6:4a:93:10:d1:bf:f0:19:42:cb:fe:ed:67 +# SHA1 Fingerprint: 99:9a:64:c3:7f:f4:7d:9f:ab:95:f1:47:69:89:14:60:ee:c4:c3:c5 +# SHA256 Fingerprint: 35:8d:f3:9d:76:4a:f9:e1:b7:66:e9:c9:72:df:35:2e:e1:5c:fa:c2:27:af:6a:d1:d7:0e:8e:4a:6e:dc:ba:02 +-----BEGIN CERTIFICATE----- +MIICWTCCAd+gAwIBAgIQZvI9r4fei7FK6gxXMQHC7DAKBggqhkjOPQQDAzBlMQsw +CQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYD +VQQDEy1NaWNyb3NvZnQgRUNDIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIw +MTcwHhcNMTkxMjE4MjMwNjQ1WhcNNDIwNzE4MjMxNjA0WjBlMQswCQYDVQQGEwJV +UzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1NaWNy +b3NvZnQgRUNDIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwdjAQBgcq +hkjOPQIBBgUrgQQAIgNiAATUvD0CQnVBEyPNgASGAlEvaqiBYgtlzPbKnR5vSmZR +ogPZnZH6thaxjG7efM3beaYvzrvOcS/lpaso7GMEZpn4+vKTEAXhgShC48Zo9OYb +hGBKia/teQ87zvH2RPUBeMCjVDBSMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8E +BTADAQH/MB0GA1UdDgQWBBTIy5lycFIM+Oa+sgRXKSrPQhDtNTAQBgkrBgEEAYI3 +FQEEAwIBADAKBggqhkjOPQQDAwNoADBlAjBY8k3qDPlfXu5gKcs68tvWMoQZP3zV +L8KxzJOuULsJMsbG7X7JNpQS5GiFBqIb0C8CMQCZ6Ra0DvpWSNSkMBaReNtUjGUB +iudQZsIxtzm6uBoiB078a1QWIP8rtedMDE2mT3M= +-----END CERTIFICATE----- + +# Issuer: CN=Microsoft RSA Root Certificate Authority 2017 O=Microsoft Corporation +# Subject: CN=Microsoft RSA Root Certificate Authority 2017 O=Microsoft Corporation +# Label: "Microsoft RSA Root Certificate Authority 2017" +# Serial: 40975477897264996090493496164228220339 +# MD5 Fingerprint: 10:ff:00:ff:cf:c9:f8:c7:7a:c0:ee:35:8e:c9:0f:47 +# SHA1 Fingerprint: 73:a5:e6:4a:3b:ff:83:16:ff:0e:dc:cc:61:8a:90:6e:4e:ae:4d:74 +# SHA256 Fingerprint: c7:41:f7:0f:4b:2a:8d:88:bf:2e:71:c1:41:22:ef:53:ef:10:eb:a0:cf:a5:e6:4c:fa:20:f4:18:85:30:73:e0 +-----BEGIN CERTIFICATE----- +MIIFqDCCA5CgAwIBAgIQHtOXCV/YtLNHcB6qvn9FszANBgkqhkiG9w0BAQwFADBl +MQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYw +NAYDVQQDEy1NaWNyb3NvZnQgUlNBIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5 +IDIwMTcwHhcNMTkxMjE4MjI1MTIyWhcNNDIwNzE4MjMwMDIzWjBlMQswCQYDVQQG +EwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1N +aWNyb3NvZnQgUlNBIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKW76UM4wplZEWCpW9R2LBifOZ +Nt9GkMml7Xhqb0eRaPgnZ1AzHaGm++DlQ6OEAlcBXZxIQIJTELy/xztokLaCLeX0 +ZdDMbRnMlfl7rEqUrQ7eS0MdhweSE5CAg2Q1OQT85elss7YfUJQ4ZVBcF0a5toW1 +HLUX6NZFndiyJrDKxHBKrmCk3bPZ7Pw71VdyvD/IybLeS2v4I2wDwAW9lcfNcztm +gGTjGqwu+UcF8ga2m3P1eDNbx6H7JyqhtJqRjJHTOoI+dkC0zVJhUXAoP8XFWvLJ +jEm7FFtNyP9nTUwSlq31/niol4fX/V4ggNyhSyL71Imtus5Hl0dVe49FyGcohJUc +aDDv70ngNXtk55iwlNpNhTs+VcQor1fznhPbRiefHqJeRIOkpcrVE7NLP8TjwuaG +YaRSMLl6IE9vDzhTyzMMEyuP1pq9KsgtsRx9S1HKR9FIJ3Jdh+vVReZIZZ2vUpC6 +W6IYZVcSn2i51BVrlMRpIpj0M+Dt+VGOQVDJNE92kKz8OMHY4Xu54+OU4UZpyw4K +UGsTuqwPN1q3ErWQgR5WrlcihtnJ0tHXUeOrO8ZV/R4O03QK0dqq6mm4lyiPSMQH ++FJDOvTKVTUssKZqwJz58oHhEmrARdlns87/I6KJClTUFLkqqNfs+avNJVgyeY+Q +W5g5xAgGwax/Dj0ApQIDAQABo1QwUjAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/ +BAUwAwEB/zAdBgNVHQ4EFgQUCctZf4aycI8awznjwNnpv7tNsiMwEAYJKwYBBAGC +NxUBBAMCAQAwDQYJKoZIhvcNAQEMBQADggIBAKyvPl3CEZaJjqPnktaXFbgToqZC +LgLNFgVZJ8og6Lq46BrsTaiXVq5lQ7GPAJtSzVXNUzltYkyLDVt8LkS/gxCP81OC +gMNPOsduET/m4xaRhPtthH80dK2Jp86519efhGSSvpWhrQlTM93uCupKUY5vVau6 +tZRGrox/2KJQJWVggEbbMwSubLWYdFQl3JPk+ONVFT24bcMKpBLBaYVu32TxU5nh +SnUgnZUP5NbcA/FZGOhHibJXWpS2qdgXKxdJ5XbLwVaZOjex/2kskZGT4d9Mozd2 +TaGf+G0eHdP67Pv0RR0Tbc/3WeUiJ3IrhvNXuzDtJE3cfVa7o7P4NHmJweDyAmH3 +pvwPuxwXC65B2Xy9J6P9LjrRk5Sxcx0ki69bIImtt2dmefU6xqaWM/5TkshGsRGR +xpl/j8nWZjEgQRCHLQzWwa80mMpkg/sTV9HB8Dx6jKXB/ZUhoHHBk2dxEuqPiApp +GWSZI1b7rCoucL5mxAyE7+WL85MB+GqQk2dLsmijtWKP6T+MejteD+eMuMZ87zf9 +dOLITzNy4ZQ5bb0Sr74MTnB8G2+NszKTc0QWbej09+CVgI+WXTik9KveCjCHk9hN +AHFiRSdLOkKEW39lt2c0Ui2cFmuqqNh7o0JMcccMyj6D5KbvtwEwXlGjefVwaaZB +RA+GsCyRxj3qrg+E +-----END CERTIFICATE----- + +# Issuer: CN=e-Szigno Root CA 2017 O=Microsec Ltd. +# Subject: CN=e-Szigno Root CA 2017 O=Microsec Ltd. +# Label: "e-Szigno Root CA 2017" +# Serial: 411379200276854331539784714 +# MD5 Fingerprint: de:1f:f6:9e:84:ae:a7:b4:21:ce:1e:58:7d:d1:84:98 +# SHA1 Fingerprint: 89:d4:83:03:4f:9e:9a:48:80:5f:72:37:d4:a9:a6:ef:cb:7c:1f:d1 +# SHA256 Fingerprint: be:b0:0b:30:83:9b:9b:c3:2c:32:e4:44:79:05:95:06:41:f2:64:21:b1:5e:d0:89:19:8b:51:8a:e2:ea:1b:99 +-----BEGIN CERTIFICATE----- +MIICQDCCAeWgAwIBAgIMAVRI7yH9l1kN9QQKMAoGCCqGSM49BAMCMHExCzAJBgNV +BAYTAkhVMREwDwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UECgwNTWljcm9zZWMgTHRk +LjEXMBUGA1UEYQwOVkFUSFUtMjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3ppZ25vIFJv +b3QgQ0EgMjAxNzAeFw0xNzA4MjIxMjA3MDZaFw00MjA4MjIxMjA3MDZaMHExCzAJ +BgNVBAYTAkhVMREwDwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UECgwNTWljcm9zZWMg +THRkLjEXMBUGA1UEYQwOVkFUSFUtMjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3ppZ25v +IFJvb3QgQ0EgMjAxNzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJbcPYrYsHtv +xie+RJCxs1YVe45DJH0ahFnuY2iyxl6H0BVIHqiQrb1TotreOpCmYF9oMrWGQd+H +Wyx7xf58etqjYzBhMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G +A1UdDgQWBBSHERUI0arBeAyxr87GyZDvvzAEwDAfBgNVHSMEGDAWgBSHERUI0arB +eAyxr87GyZDvvzAEwDAKBggqhkjOPQQDAgNJADBGAiEAtVfd14pVCzbhhkT61Nlo +jbjcI4qKDdQvfepz7L9NbKgCIQDLpbQS+ue16M9+k/zzNY9vTlp8tLxOsvxyqltZ ++efcMQ== +-----END CERTIFICATE----- + +# Issuer: O=CERTSIGN SA OU=certSIGN ROOT CA G2 +# Subject: O=CERTSIGN SA OU=certSIGN ROOT CA G2 +# Label: "certSIGN Root CA G2" +# Serial: 313609486401300475190 +# MD5 Fingerprint: 8c:f1:75:8a:c6:19:cf:94:b7:f7:65:20:87:c3:97:c7 +# SHA1 Fingerprint: 26:f9:93:b4:ed:3d:28:27:b0:b9:4b:a7:e9:15:1d:a3:8d:92:e5:32 +# SHA256 Fingerprint: 65:7c:fe:2f:a7:3f:aa:38:46:25:71:f3:32:a2:36:3a:46:fc:e7:02:09:51:71:07:02:cd:fb:b6:ee:da:33:05 +-----BEGIN CERTIFICATE----- +MIIFRzCCAy+gAwIBAgIJEQA0tk7GNi02MA0GCSqGSIb3DQEBCwUAMEExCzAJBgNV +BAYTAlJPMRQwEgYDVQQKEwtDRVJUU0lHTiBTQTEcMBoGA1UECxMTY2VydFNJR04g +Uk9PVCBDQSBHMjAeFw0xNzAyMDYwOTI3MzVaFw00MjAyMDYwOTI3MzVaMEExCzAJ +BgNVBAYTAlJPMRQwEgYDVQQKEwtDRVJUU0lHTiBTQTEcMBoGA1UECxMTY2VydFNJ +R04gUk9PVCBDQSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDF +dRmRfUR0dIf+DjuW3NgBFszuY5HnC2/OOwppGnzC46+CjobXXo9X69MhWf05N0Iw +vlDqtg+piNguLWkh59E3GE59kdUWX2tbAMI5Qw02hVK5U2UPHULlj88F0+7cDBrZ +uIt4ImfkabBoxTzkbFpG583H+u/E7Eu9aqSs/cwoUe+StCmrqzWaTOTECMYmzPhp +n+Sc8CnTXPnGFiWeI8MgwT0PPzhAsP6CRDiqWhqKa2NYOLQV07YRaXseVO6MGiKs +cpc/I1mbySKEwQdPzH/iV8oScLumZfNpdWO9lfsbl83kqK/20U6o2YpxJM02PbyW +xPFsqa7lzw1uKA2wDrXKUXt4FMMgL3/7FFXhEZn91QqhngLjYl/rNUssuHLoPj1P +rCy7Lobio3aP5ZMqz6WryFyNSwb/EkaseMsUBzXgqd+L6a8VTxaJW732jcZZroiF +DsGJ6x9nxUWO/203Nit4ZoORUSs9/1F3dmKh7Gc+PoGD4FapUB8fepmrY7+EF3fx +DTvf95xhszWYijqy7DwaNz9+j5LP2RIUZNoQAhVB/0/E6xyjyfqZ90bp4RjZsbgy +LcsUDFDYg2WD7rlcz8sFWkz6GZdr1l0T08JcVLwyc6B49fFtHsufpaafItzRUZ6C +eWRgKRM+o/1Pcmqr4tTluCRVLERLiohEnMqE0yo7AgMBAAGjQjBAMA8GA1UdEwEB +/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSCIS1mxteg4BXrzkwJ +d8RgnlRuAzANBgkqhkiG9w0BAQsFAAOCAgEAYN4auOfyYILVAzOBywaK8SJJ6ejq +kX/GM15oGQOGO0MBzwdw5AgeZYWR5hEit/UCI46uuR59H35s5r0l1ZUa8gWmr4UC +b6741jH/JclKyMeKqdmfS0mbEVeZkkMR3rYzpMzXjWR91M08KCy0mpbqTfXERMQl +qiCA2ClV9+BB/AYm/7k29UMUA2Z44RGx2iBfRgB4ACGlHgAoYXhvqAEBj500mv/0 +OJD7uNGzcgbJceaBxXntC6Z58hMLnPddDnskk7RI24Zf3lCGeOdA5jGokHZwYa+c +NywRtYK3qq4kNFtyDGkNzVmf9nGvnAvRCjj5BiKDUyUM/FHE5r7iOZULJK2v0ZXk +ltd0ZGtxTgI8qoXzIKNDOXZbbFD+mpwUHmUUihW9o4JFWklWatKcsWMy5WHgUyIO +pwpJ6st+H6jiYoD2EEVSmAYY3qXNL3+q1Ok+CHLsIwMCPKaq2LxndD0UF/tUSxfj +03k9bWtJySgOLnRQvwzZRjoQhsmnP+mg7H/rpXdYaXHmgwo38oZJar55CJD2AhZk +PuXaTH4MNMn5X7azKFGnpyuqSfqNZSlO42sTp5SjLVFteAxEy9/eCG/Oo2Sr05WE +1LlSVHJ7liXMvGnjSG4N0MedJ5qq+BOS3R7fY581qRY27Iy4g/Q9iY/NtBde17MX +QRBdJ3NghVdJIgc= +-----END CERTIFICATE----- + +# Issuer: CN=Trustwave Global Certification Authority O=Trustwave Holdings, Inc. +# Subject: CN=Trustwave Global Certification Authority O=Trustwave Holdings, Inc. +# Label: "Trustwave Global Certification Authority" +# Serial: 1846098327275375458322922162 +# MD5 Fingerprint: f8:1c:18:2d:2f:ba:5f:6d:a1:6c:bc:c7:ab:91:c7:0e +# SHA1 Fingerprint: 2f:8f:36:4f:e1:58:97:44:21:59:87:a5:2a:9a:d0:69:95:26:7f:b5 +# SHA256 Fingerprint: 97:55:20:15:f5:dd:fc:3c:87:88:c0:06:94:45:55:40:88:94:45:00:84:f1:00:86:70:86:bc:1a:2b:b5:8d:c8 +-----BEGIN CERTIFICATE----- +MIIF2jCCA8KgAwIBAgIMBfcOhtpJ80Y1LrqyMA0GCSqGSIb3DQEBCwUAMIGIMQsw +CQYDVQQGEwJVUzERMA8GA1UECAwISWxsaW5vaXMxEDAOBgNVBAcMB0NoaWNhZ28x +ITAfBgNVBAoMGFRydXN0d2F2ZSBIb2xkaW5ncywgSW5jLjExMC8GA1UEAwwoVHJ1 +c3R3YXZlIEdsb2JhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MjMx +OTM0MTJaFw00MjA4MjMxOTM0MTJaMIGIMQswCQYDVQQGEwJVUzERMA8GA1UECAwI +SWxsaW5vaXMxEDAOBgNVBAcMB0NoaWNhZ28xITAfBgNVBAoMGFRydXN0d2F2ZSBI +b2xkaW5ncywgSW5jLjExMC8GA1UEAwwoVHJ1c3R3YXZlIEdsb2JhbCBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB +ALldUShLPDeS0YLOvR29zd24q88KPuFd5dyqCblXAj7mY2Hf8g+CY66j96xz0Xzn +swuvCAAJWX/NKSqIk4cXGIDtiLK0thAfLdZfVaITXdHG6wZWiYj+rDKd/VzDBcdu +7oaJuogDnXIhhpCujwOl3J+IKMujkkkP7NAP4m1ET4BqstTnoApTAbqOl5F2brz8 +1Ws25kCI1nsvXwXoLG0R8+eyvpJETNKXpP7ScoFDB5zpET71ixpZfR9oWN0EACyW +80OzfpgZdNmcc9kYvkHHNHnZ9GLCQ7mzJ7Aiy/k9UscwR7PJPrhq4ufogXBeQotP +JqX+OsIgbrv4Fo7NDKm0G2x2EOFYeUY+VM6AqFcJNykbmROPDMjWLBz7BegIlT1l +RtzuzWniTY+HKE40Cz7PFNm73bZQmq131BnW2hqIyE4bJ3XYsgjxroMwuREOzYfw +hI0Vcnyh78zyiGG69Gm7DIwLdVcEuE4qFC49DxweMqZiNu5m4iK4BUBjECLzMx10 +coos9TkpoNPnG4CELcU9402x/RpvumUHO1jsQkUm+9jaJXLE9gCxInm943xZYkqc +BW89zubWR2OZxiRvchLIrH+QtAuRcOi35hYQcRfO3gZPSEF9NUqjifLJS3tBEW1n +twiYTOURGa5CgNz7kAXU+FDKvuStx8KU1xad5hePrzb7AgMBAAGjQjBAMA8GA1Ud +EwEB/wQFMAMBAf8wHQYDVR0OBBYEFJngGWcNYtt2s9o9uFvo/ULSMQ6HMA4GA1Ud +DwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAmHNw4rDT7TnsTGDZqRKGFx6W +0OhUKDtkLSGm+J1WE2pIPU/HPinbbViDVD2HfSMF1OQc3Og4ZYbFdada2zUFvXfe +uyk3QAUHw5RSn8pk3fEbK9xGChACMf1KaA0HZJDmHvUqoai7PF35owgLEQzxPy0Q +lG/+4jSHg9bP5Rs1bdID4bANqKCqRieCNqcVtgimQlRXtpla4gt5kNdXElE1GYhB +aCXUNxeEFfsBctyV3lImIJgm4nb1J2/6ADtKYdkNy1GTKv0WBpanI5ojSP5RvbbE +sLFUzt5sQa0WZ37b/TjNuThOssFgy50X31ieemKyJo90lZvkWx3SD92YHJtZuSPT +MaCm/zjdzyBP6VhWOmfD0faZmZ26NraAL4hHT4a/RDqA5Dccprrql5gR0IRiR2Qe +qu5AvzSxnI9O4fKSTx+O856X3vOmeWqJcU9LJxdI/uz0UA9PSX3MReO9ekDFQdxh +VicGaeVyQYHTtgGJoC86cnn+OjC/QezHYj6RS8fZMXZC+fc8Y+wmjHMMfRod6qh8 +h6jCJ3zhM0EPz8/8AKAigJ5Kp28AsEFFtyLKaEjFQqKu3R3y4G5OBVixwJAWKqQ9 +EEC+j2Jjg6mcgn0tAumDMHzLJ8n9HmYAsC7TIS+OMxZsmO0QqAfWzJPP29FpHOTK +yeC2nOnOcXHebD8WpHk= +-----END CERTIFICATE----- + +# Issuer: CN=Trustwave Global ECC P256 Certification Authority O=Trustwave Holdings, Inc. +# Subject: CN=Trustwave Global ECC P256 Certification Authority O=Trustwave Holdings, Inc. +# Label: "Trustwave Global ECC P256 Certification Authority" +# Serial: 4151900041497450638097112925 +# MD5 Fingerprint: 5b:44:e3:8d:5d:36:86:26:e8:0d:05:d2:59:a7:83:54 +# SHA1 Fingerprint: b4:90:82:dd:45:0c:be:8b:5b:b1:66:d3:e2:a4:08:26:cd:ed:42:cf +# SHA256 Fingerprint: 94:5b:bc:82:5e:a5:54:f4:89:d1:fd:51:a7:3d:df:2e:a6:24:ac:70:19:a0:52:05:22:5c:22:a7:8c:cf:a8:b4 +-----BEGIN CERTIFICATE----- +MIICYDCCAgegAwIBAgIMDWpfCD8oXD5Rld9dMAoGCCqGSM49BAMCMIGRMQswCQYD +VQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAf +BgNVBAoTGFRydXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3 +YXZlIEdsb2JhbCBFQ0MgUDI1NiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0x +NzA4MjMxOTM1MTBaFw00MjA4MjMxOTM1MTBaMIGRMQswCQYDVQQGEwJVUzERMA8G +A1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0 +d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBF +Q0MgUDI1NiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTBZMBMGByqGSM49AgEGCCqG +SM49AwEHA0IABH77bOYj43MyCMpg5lOcunSNGLB4kFKA3TjASh3RqMyTpJcGOMoN +FWLGjgEqZZ2q3zSRLoHB5DOSMcT9CTqmP62jQzBBMA8GA1UdEwEB/wQFMAMBAf8w +DwYDVR0PAQH/BAUDAwcGADAdBgNVHQ4EFgQUo0EGrJBt0UrrdaVKEJmzsaGLSvcw +CgYIKoZIzj0EAwIDRwAwRAIgB+ZU2g6gWrKuEZ+Hxbb/ad4lvvigtwjzRM4q3wgh +DDcCIC0mA6AFvWvR9lz4ZcyGbbOcNEhjhAnFjXca4syc4XR7 +-----END CERTIFICATE----- + +# Issuer: CN=Trustwave Global ECC P384 Certification Authority O=Trustwave Holdings, Inc. +# Subject: CN=Trustwave Global ECC P384 Certification Authority O=Trustwave Holdings, Inc. +# Label: "Trustwave Global ECC P384 Certification Authority" +# Serial: 2704997926503831671788816187 +# MD5 Fingerprint: ea:cf:60:c4:3b:b9:15:29:40:a1:97:ed:78:27:93:d6 +# SHA1 Fingerprint: e7:f3:a3:c8:cf:6f:c3:04:2e:6d:0e:67:32:c5:9e:68:95:0d:5e:d2 +# SHA256 Fingerprint: 55:90:38:59:c8:c0:c3:eb:b8:75:9e:ce:4e:25:57:22:5f:f5:75:8b:bd:38:eb:d4:82:76:60:1e:1b:d5:80:97 +-----BEGIN CERTIFICATE----- +MIICnTCCAiSgAwIBAgIMCL2Fl2yZJ6SAaEc7MAoGCCqGSM49BAMDMIGRMQswCQYD +VQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAf +BgNVBAoTGFRydXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3 +YXZlIEdsb2JhbCBFQ0MgUDM4NCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0x +NzA4MjMxOTM2NDNaFw00MjA4MjMxOTM2NDNaMIGRMQswCQYDVQQGEwJVUzERMA8G +A1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0 +d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBF +Q0MgUDM4NCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTB2MBAGByqGSM49AgEGBSuB +BAAiA2IABGvaDXU1CDFHBa5FmVXxERMuSvgQMSOjfoPTfygIOiYaOs+Xgh+AtycJ +j9GOMMQKmw6sWASr9zZ9lCOkmwqKi6vr/TklZvFe/oyujUF5nQlgziip04pt89ZF +1PKYhDhloKNDMEEwDwYDVR0TAQH/BAUwAwEB/zAPBgNVHQ8BAf8EBQMDBwYAMB0G +A1UdDgQWBBRVqYSJ0sEyvRjLbKYHTsjnnb6CkDAKBggqhkjOPQQDAwNnADBkAjA3 +AZKXRRJ+oPM+rRk6ct30UJMDEr5E0k9BpIycnR+j9sKS50gU/k6bpZFXrsY3crsC +MGclCrEMXu6pY5Jv5ZAL/mYiykf9ijH3g/56vxC+GCsej/YpHpRZ744hN8tRmKVu +Sw== +-----END CERTIFICATE----- + +# Issuer: CN=NAVER Global Root Certification Authority O=NAVER BUSINESS PLATFORM Corp. +# Subject: CN=NAVER Global Root Certification Authority O=NAVER BUSINESS PLATFORM Corp. +# Label: "NAVER Global Root Certification Authority" +# Serial: 9013692873798656336226253319739695165984492813 +# MD5 Fingerprint: c8:7e:41:f6:25:3b:f5:09:b3:17:e8:46:3d:bf:d0:9b +# SHA1 Fingerprint: 8f:6b:f2:a9:27:4a:da:14:a0:c4:f4:8e:61:27:f9:c0:1e:78:5d:d1 +# SHA256 Fingerprint: 88:f4:38:dc:f8:ff:d1:fa:8f:42:91:15:ff:e5:f8:2a:e1:e0:6e:0c:70:c3:75:fa:ad:71:7b:34:a4:9e:72:65 +-----BEGIN CERTIFICATE----- +MIIFojCCA4qgAwIBAgIUAZQwHqIL3fXFMyqxQ0Rx+NZQTQ0wDQYJKoZIhvcNAQEM +BQAwaTELMAkGA1UEBhMCS1IxJjAkBgNVBAoMHU5BVkVSIEJVU0lORVNTIFBMQVRG +T1JNIENvcnAuMTIwMAYDVQQDDClOQVZFUiBHbG9iYWwgUm9vdCBDZXJ0aWZpY2F0 +aW9uIEF1dGhvcml0eTAeFw0xNzA4MTgwODU4NDJaFw0zNzA4MTgyMzU5NTlaMGkx +CzAJBgNVBAYTAktSMSYwJAYDVQQKDB1OQVZFUiBCVVNJTkVTUyBQTEFURk9STSBD +b3JwLjEyMDAGA1UEAwwpTkFWRVIgR2xvYmFsIFJvb3QgQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC21PGTXLVA +iQqrDZBbUGOukJR0F0Vy1ntlWilLp1agS7gvQnXp2XskWjFlqxcX0TM62RHcQDaH +38dq6SZeWYp34+hInDEW+j6RscrJo+KfziFTowI2MMtSAuXaMl3Dxeb57hHHi8lE +HoSTGEq0n+USZGnQJoViAbbJAh2+g1G7XNr4rRVqmfeSVPc0W+m/6imBEtRTkZaz +kVrd/pBzKPswRrXKCAfHcXLJZtM0l/aM9BhK4dA9WkW2aacp+yPOiNgSnABIqKYP +szuSjXEOdMWLyEz59JuOuDxp7W87UC9Y7cSw0BwbagzivESq2M0UXZR4Yb8Obtoq +vC8MC3GmsxY/nOb5zJ9TNeIDoKAYv7vxvvTWjIcNQvcGufFt7QSUqP620wbGQGHf +nZ3zVHbOUzoBppJB7ASjjw2i1QnK1sua8e9DXcCrpUHPXFNwcMmIpi3Ua2FzUCaG +YQ5fG8Ir4ozVu53BA0K6lNpfqbDKzE0K70dpAy8i+/Eozr9dUGWokG2zdLAIx6yo +0es+nPxdGoMuK8u180SdOqcXYZaicdNwlhVNt0xz7hlcxVs+Qf6sdWA7G2POAN3a +CJBitOUt7kinaxeZVL6HSuOpXgRM6xBtVNbv8ejyYhbLgGvtPe31HzClrkvJE+2K +AQHJuFFYwGY6sWZLxNUxAmLpdIQM201GLQIDAQABo0IwQDAdBgNVHQ4EFgQU0p+I +36HNLL3s9TsBAZMzJ7LrYEswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMB +Af8wDQYJKoZIhvcNAQEMBQADggIBADLKgLOdPVQG3dLSLvCkASELZ0jKbY7gyKoN +qo0hV4/GPnrK21HUUrPUloSlWGB/5QuOH/XcChWB5Tu2tyIvCZwTFrFsDDUIbatj +cu3cvuzHV+YwIHHW1xDBE1UBjCpD5EHxzzp6U5LOogMFDTjfArsQLtk70pt6wKGm ++LUx5vR1yblTmXVHIloUFcd4G7ad6Qz4G3bxhYTeodoS76TiEJd6eN4MUZeoIUCL +hr0N8F5OSza7OyAfikJW4Qsav3vQIkMsRIz75Sq0bBwcupTgE34h5prCy8VCZLQe +lHsIJchxzIdFV4XTnyliIoNRlwAYl3dqmJLJfGBs32x9SuRwTMKeuB330DTHD8z7 +p/8Dvq1wkNoL3chtl1+afwkyQf3NosxabUzyqkn+Zvjp2DXrDige7kgvOtB5CTh8 +piKCk5XQA76+AqAF3SAi428diDRgxuYKuQl1C/AH6GmWNcf7I4GOODm4RStDeKLR +LBT/DShycpWbXgnbiUSYqqFJu3FS8r/2/yehNq+4tneI3TqkbZs0kNwUXTC/t+sX +5Ie3cdCh13cV1ELX8vMxmV2b3RZtP+oGI/hGoiLtk/bdmuYqh7GYVPEi92tF4+KO +dh2ajcQGjTa3FPOdVGm3jjzVpG2Tgbet9r1ke8LJaDmgkpzNNIaRkPpkUZ3+/uul +9XXeifdy +-----END CERTIFICATE----- + +# Issuer: CN=AC RAIZ FNMT-RCM SERVIDORES SEGUROS O=FNMT-RCM OU=Ceres +# Subject: CN=AC RAIZ FNMT-RCM SERVIDORES SEGUROS O=FNMT-RCM OU=Ceres +# Label: "AC RAIZ FNMT-RCM SERVIDORES SEGUROS" +# Serial: 131542671362353147877283741781055151509 +# MD5 Fingerprint: 19:36:9c:52:03:2f:d2:d1:bb:23:cc:dd:1e:12:55:bb +# SHA1 Fingerprint: 62:ff:d9:9e:c0:65:0d:03:ce:75:93:d2:ed:3f:2d:32:c9:e3:e5:4a +# SHA256 Fingerprint: 55:41:53:b1:3d:2c:f9:dd:b7:53:bf:be:1a:4e:0a:e0:8d:0a:a4:18:70:58:fe:60:a2:b8:62:b2:e4:b8:7b:cb +-----BEGIN CERTIFICATE----- +MIICbjCCAfOgAwIBAgIQYvYybOXE42hcG2LdnC6dlTAKBggqhkjOPQQDAzB4MQsw +CQYDVQQGEwJFUzERMA8GA1UECgwIRk5NVC1SQ00xDjAMBgNVBAsMBUNlcmVzMRgw +FgYDVQRhDA9WQVRFUy1RMjgyNjAwNEoxLDAqBgNVBAMMI0FDIFJBSVogRk5NVC1S +Q00gU0VSVklET1JFUyBTRUdVUk9TMB4XDTE4MTIyMDA5MzczM1oXDTQzMTIyMDA5 +MzczM1oweDELMAkGA1UEBhMCRVMxETAPBgNVBAoMCEZOTVQtUkNNMQ4wDAYDVQQL +DAVDZXJlczEYMBYGA1UEYQwPVkFURVMtUTI4MjYwMDRKMSwwKgYDVQQDDCNBQyBS +QUlaIEZOTVQtUkNNIFNFUlZJRE9SRVMgU0VHVVJPUzB2MBAGByqGSM49AgEGBSuB +BAAiA2IABPa6V1PIyqvfNkpSIeSX0oNnnvBlUdBeh8dHsVnyV0ebAAKTRBdp20LH +sbI6GA60XYyzZl2hNPk2LEnb80b8s0RpRBNm/dfF/a82Tc4DTQdxz69qBdKiQ1oK +Um8BA06Oi6NCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD +VR0OBBYEFAG5L++/EYZg8k/QQW6rcx/n0m5JMAoGCCqGSM49BAMDA2kAMGYCMQCu +SuMrQMN0EfKVrRYj3k4MGuZdpSRea0R7/DjiT8ucRRcRTBQnJlU5dUoDzBOQn5IC +MQD6SmxgiHPz7riYYqnOK8LZiqZwMR2vsJRM60/G49HzYqc8/5MuB1xJAWdpEgJy +v+c= +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign Root R46 O=GlobalSign nv-sa +# Subject: CN=GlobalSign Root R46 O=GlobalSign nv-sa +# Label: "GlobalSign Root R46" +# Serial: 1552617688466950547958867513931858518042577 +# MD5 Fingerprint: c4:14:30:e4:fa:66:43:94:2a:6a:1b:24:5f:19:d0:ef +# SHA1 Fingerprint: 53:a2:b0:4b:ca:6b:d6:45:e6:39:8a:8e:c4:0d:d2:bf:77:c3:a2:90 +# SHA256 Fingerprint: 4f:a3:12:6d:8d:3a:11:d1:c4:85:5a:4f:80:7c:ba:d6:cf:91:9d:3a:5a:88:b0:3b:ea:2c:63:72:d9:3c:40:c9 +-----BEGIN CERTIFICATE----- +MIIFWjCCA0KgAwIBAgISEdK7udcjGJ5AXwqdLdDfJWfRMA0GCSqGSIb3DQEBDAUA +MEYxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYD +VQQDExNHbG9iYWxTaWduIFJvb3QgUjQ2MB4XDTE5MDMyMDAwMDAwMFoXDTQ2MDMy +MDAwMDAwMFowRjELMAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYt +c2ExHDAaBgNVBAMTE0dsb2JhbFNpZ24gUm9vdCBSNDYwggIiMA0GCSqGSIb3DQEB +AQUAA4ICDwAwggIKAoICAQCsrHQy6LNl5brtQyYdpokNRbopiLKkHWPd08EsCVeJ +OaFV6Wc0dwxu5FUdUiXSE2te4R2pt32JMl8Nnp8semNgQB+msLZ4j5lUlghYruQG +vGIFAha/r6gjA7aUD7xubMLL1aa7DOn2wQL7Id5m3RerdELv8HQvJfTqa1VbkNud +316HCkD7rRlr+/fKYIje2sGP1q7Vf9Q8g+7XFkyDRTNrJ9CG0Bwta/OrffGFqfUo +0q3v84RLHIf8E6M6cqJaESvWJ3En7YEtbWaBkoe0G1h6zD8K+kZPTXhc+CtI4wSE +y132tGqzZfxCnlEmIyDLPRT5ge1lFgBPGmSXZgjPjHvjK8Cd+RTyG/FWaha/LIWF +zXg4mutCagI0GIMXTpRW+LaCtfOW3T3zvn8gdz57GSNrLNRyc0NXfeD412lPFzYE ++cCQYDdF3uYM2HSNrpyibXRdQr4G9dlkbgIQrImwTDsHTUB+JMWKmIJ5jqSngiCN +I/onccnfxkF0oE32kRbcRoxfKWMxWXEM2G/CtjJ9++ZdU6Z+Ffy7dXxd7Pj2Fxzs +x2sZy/N78CsHpdlseVR2bJ0cpm4O6XkMqCNqo98bMDGfsVR7/mrLZqrcZdCinkqa +ByFrgY/bxFn63iLABJzjqls2k+g9vXqhnQt2sQvHnf3PmKgGwvgqo6GDoLclcqUC +4wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV +HQ4EFgQUA1yrc4GHqMywptWU4jaWSf8FmSwwDQYJKoZIhvcNAQEMBQADggIBAHx4 +7PYCLLtbfpIrXTncvtgdokIzTfnvpCo7RGkerNlFo048p9gkUbJUHJNOxO97k4Vg +JuoJSOD1u8fpaNK7ajFxzHmuEajwmf3lH7wvqMxX63bEIaZHU1VNaL8FpO7XJqti +2kM3S+LGteWygxk6x9PbTZ4IevPuzz5i+6zoYMzRx6Fcg0XERczzF2sUyQQCPtIk +pnnpHs6i58FZFZ8d4kuaPp92CC1r2LpXFNqD6v6MVenQTqnMdzGxRBF6XLE+0xRF +FRhiJBPSy03OXIPBNvIQtQ6IbbjhVp+J3pZmOUdkLG5NrmJ7v2B0GbhWrJKsFjLt +rWhV/pi60zTe9Mlhww6G9kuEYO4Ne7UyWHmRVSyBQ7N0H3qqJZ4d16GLuc1CLgSk +ZoNNiTW2bKg2SnkheCLQQrzRQDGQob4Ez8pn7fXwgNNgyYMqIgXQBztSvwyeqiv5 +u+YfjyW6hY0XHgL+XVAEV8/+LbzvXMAaq7afJMbfc2hIkCwU9D9SGuTSyxTDYWnP +4vkYxboznxSjBF25cfe1lNj2M8FawTSLfJvdkzrnE6JwYZ+vj+vYxXX4M2bUdGc6 +N3ec592kD3ZDZopD8p/7DEJ4Y9HiD2971KE9dJeFt0g5QdYg/NA6s/rob8SKunE3 +vouXsXgxT7PntgMTzlSdriVZzH81Xwj3QEUxeCp6 +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign Root E46 O=GlobalSign nv-sa +# Subject: CN=GlobalSign Root E46 O=GlobalSign nv-sa +# Label: "GlobalSign Root E46" +# Serial: 1552617690338932563915843282459653771421763 +# MD5 Fingerprint: b5:b8:66:ed:de:08:83:e3:c9:e2:01:34:06:ac:51:6f +# SHA1 Fingerprint: 39:b4:6c:d5:fe:80:06:eb:e2:2f:4a:bb:08:33:a0:af:db:b9:dd:84 +# SHA256 Fingerprint: cb:b9:c4:4d:84:b8:04:3e:10:50:ea:31:a6:9f:51:49:55:d7:bf:d2:e2:c6:b4:93:01:01:9a:d6:1d:9f:50:58 +-----BEGIN CERTIFICATE----- +MIICCzCCAZGgAwIBAgISEdK7ujNu1LzmJGjFDYQdmOhDMAoGCCqGSM49BAMDMEYx +CzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYDVQQD +ExNHbG9iYWxTaWduIFJvb3QgRTQ2MB4XDTE5MDMyMDAwMDAwMFoXDTQ2MDMyMDAw +MDAwMFowRjELMAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2Ex +HDAaBgNVBAMTE0dsb2JhbFNpZ24gUm9vdCBFNDYwdjAQBgcqhkjOPQIBBgUrgQQA +IgNiAAScDrHPt+ieUnd1NPqlRqetMhkytAepJ8qUuwzSChDH2omwlwxwEwkBjtjq +R+q+soArzfwoDdusvKSGN+1wCAB16pMLey5SnCNoIwZD7JIvU4Tb+0cUB+hflGdd +yXqBPCCjQjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud +DgQWBBQxCpCPtsad0kRLgLWi5h+xEk8blTAKBggqhkjOPQQDAwNoADBlAjEA31SQ +7Zvvi5QCkxeCmb6zniz2C5GMn0oUsfZkvLtoURMMA/cVi4RguYv/Uo7njLwcAjA8 ++RHUjE7AwWHCFUyqqx0LMV87HOIAl0Qx5v5zli/altP+CAezNIm8BZ/3Hobui3A= +-----END CERTIFICATE----- + +# Issuer: CN=ANF Secure Server Root CA O=ANF Autoridad de Certificacion OU=ANF CA Raiz +# Subject: CN=ANF Secure Server Root CA O=ANF Autoridad de Certificacion OU=ANF CA Raiz +# Label: "ANF Secure Server Root CA" +# Serial: 996390341000653745 +# MD5 Fingerprint: 26:a6:44:5a:d9:af:4e:2f:b2:1d:b6:65:b0:4e:e8:96 +# SHA1 Fingerprint: 5b:6e:68:d0:cc:15:b6:a0:5f:1e:c1:5f:ae:02:fc:6b:2f:5d:6f:74 +# SHA256 Fingerprint: fb:8f:ec:75:91:69:b9:10:6b:1e:51:16:44:c6:18:c5:13:04:37:3f:6c:06:43:08:8d:8b:ef:fd:1b:99:75:99 +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +# Issuer: CN=Certum EC-384 CA O=Asseco Data Systems S.A. OU=Certum Certification Authority +# Subject: CN=Certum EC-384 CA O=Asseco Data Systems S.A. OU=Certum Certification Authority +# Label: "Certum EC-384 CA" +# Serial: 160250656287871593594747141429395092468 +# MD5 Fingerprint: b6:65:b3:96:60:97:12:a1:ec:4e:e1:3d:a3:c6:c9:f1 +# SHA1 Fingerprint: f3:3e:78:3c:ac:df:f4:a2:cc:ac:67:55:69:56:d7:e5:16:3c:e1:ed +# SHA256 Fingerprint: 6b:32:80:85:62:53:18:aa:50:d1:73:c9:8d:8b:da:09:d5:7e:27:41:3d:11:4c:f7:87:a0:f5:d0:6c:03:0c:f6 +-----BEGIN CERTIFICATE----- +MIICZTCCAeugAwIBAgIQeI8nXIESUiClBNAt3bpz9DAKBggqhkjOPQQDAzB0MQsw +CQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMScw +JQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxGTAXBgNVBAMT +EENlcnR1bSBFQy0zODQgQ0EwHhcNMTgwMzI2MDcyNDU0WhcNNDMwMzI2MDcyNDU0 +WjB0MQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBT +LkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxGTAX +BgNVBAMTEENlcnR1bSBFQy0zODQgQ0EwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATE +KI6rGFtqvm5kN2PkzeyrOvfMobgOgknXhimfoZTy42B4mIF4Bk3y7JoOV2CDn7Tm +Fy8as10CW4kjPMIRBSqniBMY81CE1700LCeJVf/OTOffph8oxPBUw7l8t1Ot68Kj +QjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI0GZnQkdjrzife81r1HfS+8 +EF9LMA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNoADBlAjADVS2m5hjEfO/J +UG7BJw+ch69u1RsIGL2SKcHvlJF40jocVYli5RsJHrpka/F2tNQCMQC0QoSZ/6vn +nvuRlydd3LBbMHHOXjgaatkl5+r3YZJW+OraNsKHZZYuciUvf9/DE8k= +-----END CERTIFICATE----- + +# Issuer: CN=Certum Trusted Root CA O=Asseco Data Systems S.A. OU=Certum Certification Authority +# Subject: CN=Certum Trusted Root CA O=Asseco Data Systems S.A. OU=Certum Certification Authority +# Label: "Certum Trusted Root CA" +# Serial: 40870380103424195783807378461123655149 +# MD5 Fingerprint: 51:e1:c2:e7:fe:4c:84:af:59:0e:2f:f4:54:6f:ea:29 +# SHA1 Fingerprint: c8:83:44:c0:18:ae:9f:cc:f1:87:b7:8f:22:d1:c5:d7:45:84:ba:e5 +# SHA256 Fingerprint: fe:76:96:57:38:55:77:3e:37:a9:5e:7a:d4:d9:cc:96:c3:01:57:c1:5d:31:76:5b:a9:b1:57:04:e1:ae:78:fd +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +# Issuer: CN=TunTrust Root CA O=Agence Nationale de Certification Electronique +# Subject: CN=TunTrust Root CA O=Agence Nationale de Certification Electronique +# Label: "TunTrust Root CA" +# Serial: 108534058042236574382096126452369648152337120275 +# MD5 Fingerprint: 85:13:b9:90:5b:36:5c:b6:5e:b8:5a:f8:e0:31:57:b4 +# SHA1 Fingerprint: cf:e9:70:84:0f:e0:73:0f:9d:f6:0c:7f:2c:4b:ee:20:46:34:9c:bb +# SHA256 Fingerprint: 2e:44:10:2a:b5:8c:b8:54:19:45:1c:8e:19:d9:ac:f3:66:2c:af:bc:61:4b:6a:53:96:0a:30:f7:d0:e2:eb:41 +-----BEGIN CERTIFICATE----- +MIIFszCCA5ugAwIBAgIUEwLV4kBMkkaGFmddtLu7sms+/BMwDQYJKoZIhvcNAQEL +BQAwYTELMAkGA1UEBhMCVE4xNzA1BgNVBAoMLkFnZW5jZSBOYXRpb25hbGUgZGUg +Q2VydGlmaWNhdGlvbiBFbGVjdHJvbmlxdWUxGTAXBgNVBAMMEFR1blRydXN0IFJv +b3QgQ0EwHhcNMTkwNDI2MDg1NzU2WhcNNDQwNDI2MDg1NzU2WjBhMQswCQYDVQQG +EwJUTjE3MDUGA1UECgwuQWdlbmNlIE5hdGlvbmFsZSBkZSBDZXJ0aWZpY2F0aW9u +IEVsZWN0cm9uaXF1ZTEZMBcGA1UEAwwQVHVuVHJ1c3QgUm9vdCBDQTCCAiIwDQYJ +KoZIhvcNAQEBBQADggIPADCCAgoCggIBAMPN0/y9BFPdDCA61YguBUtB9YOCfvdZ +n56eY+hz2vYGqU8ftPkLHzmMmiDQfgbU7DTZhrx1W4eI8NLZ1KMKsmwb60ksPqxd +2JQDoOw05TDENX37Jk0bbjBU2PWARZw5rZzJJQRNmpA+TkBuimvNKWfGzC3gdOgF +VwpIUPp6Q9p+7FuaDmJ2/uqdHYVy7BG7NegfJ7/Boce7SBbdVtfMTqDhuazb1YMZ +GoXRlJfXyqNlC/M4+QKu3fZnz8k/9YosRxqZbwUN/dAdgjH8KcwAWJeRTIAAHDOF +li/LQcKLEITDCSSJH7UP2dl3RxiSlGBcx5kDPP73lad9UKGAwqmDrViWVSHbhlnU +r8a83YFuB9tgYv7sEG7aaAH0gxupPqJbI9dkxt/con3YS7qC0lH4Zr8GRuR5KiY2 +eY8fTpkdso8MDhz/yV3A/ZAQprE38806JG60hZC/gLkMjNWb1sjxVj8agIl6qeIb +MlEsPvLfe/ZdeikZjuXIvTZxi11Mwh0/rViizz1wTaZQmCXcI/m4WEEIcb9PuISg +jwBUFfyRbVinljvrS5YnzWuioYasDXxU5mZMZl+QviGaAkYt5IPCgLnPSz7ofzwB +7I9ezX/SKEIBlYrilz0QIX32nRzFNKHsLA4KUiwSVXAkPcvCFDVDXSdOvsC9qnyW +5/yeYa1E0wCXAgMBAAGjYzBhMB0GA1UdDgQWBBQGmpsfU33x9aTI04Y+oXNZtPdE +ITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFAaamx9TffH1pMjThj6hc1m0 +90QhMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAqgVutt0Vyb+z +xiD2BkewhpMl0425yAA/l/VSJ4hxyXT968pk21vvHl26v9Hr7lxpuhbI87mP0zYu +QEkHDVneixCwSQXi/5E/S7fdAo74gShczNxtr18UnH1YeA32gAm56Q6XKRm4t+v4 +FstVEuTGfbvE7Pi1HE4+Z7/FXxttbUcoqgRYYdZ2vyJ/0Adqp2RT8JeNnYA/u8EH +22Wv5psymsNUk8QcCMNE+3tjEUPRahphanltkE8pjkcFwRJpadbGNjHh/PqAulxP +xOu3Mqz4dWEX1xAZufHSCe96Qp1bWgvUxpVOKs7/B9dPfhgGiPEZtdmYu65xxBzn +dFlY7wyJz4sfdZMaBBSSSFCp61cpABbjNhzI+L/wM9VBD8TMPN3pM0MBkRArHtG5 +Xc0yGYuPjCB31yLEQtyEFpslbei0VXF/sHyz03FJuc9SpAQ/3D2gu68zngowYI7b +nV2UqL1g52KAdoGDDIzMMEZJ4gzSqK/rYXHv5yJiqfdcZGyfFoxnNidF9Ql7v/YQ +CvGwjVRDjAS6oz/v4jXH+XTgbzRB0L9zZVcg+ZtnemZoJE6AZb0QmQZZ8mWvuMZH +u/2QeItBcy6vVR/cO5JyboTT0GFMDcx2V+IthSIVNg3rAZ3r2OvEhJn7wAzMMujj +d9qDRIueVSjAi1jTkD5OGwDxFa2DK5o= +-----END CERTIFICATE----- + +# Issuer: CN=HARICA TLS RSA Root CA 2021 O=Hellenic Academic and Research Institutions CA +# Subject: CN=HARICA TLS RSA Root CA 2021 O=Hellenic Academic and Research Institutions CA +# Label: "HARICA TLS RSA Root CA 2021" +# Serial: 76817823531813593706434026085292783742 +# MD5 Fingerprint: 65:47:9b:58:86:dd:2c:f0:fc:a2:84:1f:1e:96:c4:91 +# SHA1 Fingerprint: 02:2d:05:82:fa:88:ce:14:0c:06:79:de:7f:14:10:e9:45:d7:a5:6d +# SHA256 Fingerprint: d9:5d:0e:8e:da:79:52:5b:f9:be:b1:1b:14:d2:10:0d:32:94:98:5f:0c:62:d9:fa:bd:9c:d9:99:ec:cb:7b:1d +-----BEGIN CERTIFICATE----- +MIIFpDCCA4ygAwIBAgIQOcqTHO9D88aOk8f0ZIk4fjANBgkqhkiG9w0BAQsFADBs +MQswCQYDVQQGEwJHUjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl +c2VhcmNoIEluc3RpdHV0aW9ucyBDQTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBSU0Eg +Um9vdCBDQSAyMDIxMB4XDTIxMDIxOTEwNTUzOFoXDTQ1MDIxMzEwNTUzN1owbDEL +MAkGA1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNl +YXJjaCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgUlNBIFJv +b3QgQ0EgMjAyMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAIvC569l +mwVnlskNJLnQDmT8zuIkGCyEf3dRywQRNrhe7Wlxp57kJQmXZ8FHws+RFjZiPTgE +4VGC/6zStGndLuwRo0Xua2s7TL+MjaQenRG56Tj5eg4MmOIjHdFOY9TnuEFE+2uv +a9of08WRiFukiZLRgeaMOVig1mlDqa2YUlhu2wr7a89o+uOkXjpFc5gH6l8Cct4M +pbOfrqkdtx2z/IpZ525yZa31MJQjB/OCFks1mJxTuy/K5FrZx40d/JiZ+yykgmvw +Kh+OC19xXFyuQnspiYHLA6OZyoieC0AJQTPb5lh6/a6ZcMBaD9YThnEvdmn8kN3b +LW7R8pv1GmuebxWMevBLKKAiOIAkbDakO/IwkfN4E8/BPzWr8R0RI7VDIp4BkrcY +AuUR0YLbFQDMYTfBKnya4dC6s1BG7oKsnTH4+yPiAwBIcKMJJnkVU2DzOFytOOqB +AGMUuTNe3QvboEUHGjMJ+E20pwKmafTCWQWIZYVWrkvL4N48fS0ayOn7H6NhStYq +E613TBoYm5EPWNgGVMWX+Ko/IIqmhaZ39qb8HOLubpQzKoNQhArlT4b4UEV4AIHr +W2jjJo3Me1xR9BQsQL4aYB16cmEdH2MtiKrOokWQCPxrvrNQKlr9qEgYRtaQQJKQ +CoReaDH46+0N0x3GfZkYVVYnZS6NRcUk7M7jAgMBAAGjQjBAMA8GA1UdEwEB/wQF +MAMBAf8wHQYDVR0OBBYEFApII6ZgpJIKM+qTW8VX6iVNvRLuMA4GA1UdDwEB/wQE +AwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAPpBIqm5iFSVmewzVjIuJndftTgfvnNAU +X15QvWiWkKQUEapobQk1OUAJ2vQJLDSle1mESSmXdMgHHkdt8s4cUCbjnj1AUz/3 +f5Z2EMVGpdAgS1D0NTsY9FVqQRtHBmg8uwkIYtlfVUKqrFOFrJVWNlar5AWMxaja +H6NpvVMPxP/cyuN+8kyIhkdGGvMA9YCRotxDQpSbIPDRzbLrLFPCU3hKTwSUQZqP +JzLB5UkZv/HywouoCjkxKLR9YjYsTewfM7Z+d21+UPCfDtcRj88YxeMn/ibvBZ3P +zzfF0HvaO7AWhAw6k9a+F9sPPg4ZeAnHqQJyIkv3N3a6dcSFA1pj1bF1BcK5vZSt +jBWZp5N99sXzqnTPBIWUmAD04vnKJGW/4GKvyMX6ssmeVkjaef2WdhW+o45WxLM0 +/L5H9MG0qPzVMIho7suuyWPEdr6sOBjhXlzPrjoiUevRi7PzKzMHVIf6tLITe7pT +BGIBnfHAT+7hOtSLIBD6Alfm78ELt5BGnBkpjNxvoEppaZS3JGWg/6w/zgH7IS79 +aPib8qXPMThcFarmlwDB31qlpzmq6YR/PFGoOtmUW4y/Twhx5duoXNTSpv4Ao8YW +xw/ogM4cKGR0GQjTQuPOAF1/sdwTsOEFy9EgqoZ0njnnkf3/W9b3raYvAwtt41dU +63ZTGI0RmLo= +-----END CERTIFICATE----- + +# Issuer: CN=HARICA TLS ECC Root CA 2021 O=Hellenic Academic and Research Institutions CA +# Subject: CN=HARICA TLS ECC Root CA 2021 O=Hellenic Academic and Research Institutions CA +# Label: "HARICA TLS ECC Root CA 2021" +# Serial: 137515985548005187474074462014555733966 +# MD5 Fingerprint: ae:f7:4c:e5:66:35:d1:b7:9b:8c:22:93:74:d3:4b:b0 +# SHA1 Fingerprint: bc:b0:c1:9d:e9:98:92:70:19:38:57:e9:8d:a7:b4:5d:6e:ee:01:48 +# SHA256 Fingerprint: 3f:99:cc:47:4a:cf:ce:4d:fe:d5:87:94:66:5e:47:8d:15:47:73:9f:2e:78:0f:1b:b4:ca:9b:13:30:97:d4:01 +-----BEGIN CERTIFICATE----- +MIICVDCCAdugAwIBAgIQZ3SdjXfYO2rbIvT/WeK/zjAKBggqhkjOPQQDAzBsMQsw +CQYDVQQGEwJHUjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2Vh +cmNoIEluc3RpdHV0aW9ucyBDQTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBFQ0MgUm9v +dCBDQSAyMDIxMB4XDTIxMDIxOTExMDExMFoXDTQ1MDIxMzExMDEwOVowbDELMAkG +A1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJj +aCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgRUNDIFJvb3Qg +Q0EgMjAyMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABDgI/rGgltJ6rK9JOtDA4MM7 +KKrxcm1lAEeIhPyaJmuqS7psBAqIXhfyVYf8MLA04jRYVxqEU+kw2anylnTDUR9Y +STHMmE5gEYd103KUkE+bECUqqHgtvpBBWJAVcqeht6NCMEAwDwYDVR0TAQH/BAUw +AwEB/zAdBgNVHQ4EFgQUyRtTgRL+BNUW0aq8mm+3oJUZbsowDgYDVR0PAQH/BAQD +AgGGMAoGCCqGSM49BAMDA2cAMGQCMBHervjcToiwqfAircJRQO9gcS3ujwLEXQNw +SaSS6sUUiHCm0w2wqsosQJz76YJumgIwK0eaB8bRwoF8yguWGEEbo/QwCZ61IygN +nxS2PFOiTAZpffpskcYqSUXm7LcT4Tps +-----END CERTIFICATE----- + +# Issuer: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068 +# Subject: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068 +# Label: "Autoridad de Certificacion Firmaprofesional CIF A62634068" +# Serial: 1977337328857672817 +# MD5 Fingerprint: 4e:6e:9b:54:4c:ca:b7:fa:48:e4:90:b1:15:4b:1c:a3 +# SHA1 Fingerprint: 0b:be:c2:27:22:49:cb:39:aa:db:35:5c:53:e3:8c:ae:78:ff:b6:fe +# SHA256 Fingerprint: 57:de:05:83:ef:d2:b2:6e:03:61:da:99:da:9d:f4:64:8d:ef:7e:e8:44:1c:3b:72:8a:fa:9b:cd:e0:f9:b2:6a +-----BEGIN CERTIFICATE----- +MIIGFDCCA/ygAwIBAgIIG3Dp0v+ubHEwDQYJKoZIhvcNAQELBQAwUTELMAkGA1UE +BhMCRVMxQjBABgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1h +cHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODAeFw0xNDA5MjMxNTIyMDdaFw0zNjA1 +MDUxNTIyMDdaMFExCzAJBgNVBAYTAkVTMUIwQAYDVQQDDDlBdXRvcmlkYWQgZGUg +Q2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBBNjI2MzQwNjgwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDDUtd9 +thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQM +cas9UX4PB99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefG +L9ItWY16Ck6WaVICqjaY7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15i +NA9wBj4gGFrO93IbJWyTdBSTo3OxDqqHECNZXyAFGUftaI6SEspd/NYrspI8IM/h +X68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyIplD9amML9ZMWGxmPsu2b +m8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctXMbScyJCy +Z/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirja +EbsXLZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/T +KI8xWVvTyQKmtFLKbpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF +6NkBiDkal4ZkQdU7hwxu+g/GvUgUvzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVh +OSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMB0GA1UdDgQWBBRlzeurNR4APn7VdMAc +tHNHDhpkLzASBgNVHRMBAf8ECDAGAQH/AgEBMIGmBgNVHSAEgZ4wgZswgZgGBFUd +IAAwgY8wLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuZmlybWFwcm9mZXNpb25hbC5j +b20vY3BzMFwGCCsGAQUFBwICMFAeTgBQAGEAcwBlAG8AIABkAGUAIABsAGEAIABC +AG8AbgBhAG4AbwB2AGEAIAA0ADcAIABCAGEAcgBjAGUAbABvAG4AYQAgADAAOAAw +ADEANzAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADggIBAHSHKAIrdx9m +iWTtj3QuRhy7qPj4Cx2Dtjqn6EWKB7fgPiDL4QjbEwj4KKE1soCzC1HA01aajTNF +Sa9J8OA9B3pFE1r/yJfY0xgsfZb43aJlQ3CTkBW6kN/oGbDbLIpgD7dvlAceHabJ +hfa9NPhAeGIQcDq+fUs5gakQ1JZBu/hfHAsdCPKxsIl68veg4MSPi3i1O1ilI45P +Vf42O+AMt8oqMEEgtIDNrvx2ZnOorm7hfNoD6JQg5iKj0B+QXSBTFCZX2lSX3xZE +EAEeiGaPcjiT3SC3NL7X8e5jjkd5KAb881lFJWAiMxujX6i6KtoaPc1A6ozuBRWV +1aUsIC+nmCjuRfzxuIgALI9C2lHVnOUTaHFFQ4ueCyE8S1wF3BqfmI7avSKecs2t +CsvMo2ebKHTEm9caPARYpoKdrcd7b/+Alun4jWq9GJAd/0kakFI3ky88Al2CdgtR +5xbHV/g4+afNmyJU72OwFW1TZQNKXkqgsqeOSQBZONXH9IBk9W6VULgRfhVwOEqw +f9DEMnDAGf/JOC0ULGb0QkTmVXYbgBVX/8Cnp6o5qtjTcNAuuuuUavpfNIbnYrX9 +ivAwhZTJryQCL2/W3Wf+47BVTwSYT6RBVuKT0Gro1vP7ZeDOdcQxWQzugsgMYDNK +GbqEZycPvEJdvSRUDewdcAZfpLz6IHxV +-----END CERTIFICATE----- + +# Issuer: CN=vTrus ECC Root CA O=iTrusChina Co.,Ltd. +# Subject: CN=vTrus ECC Root CA O=iTrusChina Co.,Ltd. +# Label: "vTrus ECC Root CA" +# Serial: 630369271402956006249506845124680065938238527194 +# MD5 Fingerprint: de:4b:c1:f5:52:8c:9b:43:e1:3e:8f:55:54:17:8d:85 +# SHA1 Fingerprint: f6:9c:db:b0:fc:f6:02:13:b6:52:32:a6:a3:91:3f:16:70:da:c3:e1 +# SHA256 Fingerprint: 30:fb:ba:2c:32:23:8e:2a:98:54:7a:f9:79:31:e5:50:42:8b:9b:3f:1c:8e:eb:66:33:dc:fa:86:c5:b2:7d:d3 +-----BEGIN CERTIFICATE----- +MIICDzCCAZWgAwIBAgIUbmq8WapTvpg5Z6LSa6Q75m0c1towCgYIKoZIzj0EAwMw +RzELMAkGA1UEBhMCQ04xHDAaBgNVBAoTE2lUcnVzQ2hpbmEgQ28uLEx0ZC4xGjAY +BgNVBAMTEXZUcnVzIEVDQyBSb290IENBMB4XDTE4MDczMTA3MjY0NFoXDTQzMDcz +MTA3MjY0NFowRzELMAkGA1UEBhMCQ04xHDAaBgNVBAoTE2lUcnVzQ2hpbmEgQ28u +LEx0ZC4xGjAYBgNVBAMTEXZUcnVzIEVDQyBSb290IENBMHYwEAYHKoZIzj0CAQYF +K4EEACIDYgAEZVBKrox5lkqqHAjDo6LN/llWQXf9JpRCux3NCNtzslt188+cToL0 +v/hhJoVs1oVbcnDS/dtitN9Ti72xRFhiQgnH+n9bEOf+QP3A2MMrMudwpremIFUd +e4BdS49nTPEQo0IwQDAdBgNVHQ4EFgQUmDnNvtiyjPeyq+GtJK97fKHbH88wDwYD +VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwCgYIKoZIzj0EAwMDaAAwZQIw +V53dVvHH4+m4SVBrm2nDb+zDfSXkV5UTQJtS0zvzQBm8JsctBp61ezaf9SXUY2sA +AjEA6dPGnlaaKsyh2j/IZivTWJwghfqrkYpwcBE4YGQLYgmRWAD5Tfs0aNoJrSEG +GJTO +-----END CERTIFICATE----- + +# Issuer: CN=vTrus Root CA O=iTrusChina Co.,Ltd. +# Subject: CN=vTrus Root CA O=iTrusChina Co.,Ltd. +# Label: "vTrus Root CA" +# Serial: 387574501246983434957692974888460947164905180485 +# MD5 Fingerprint: b8:c9:37:df:fa:6b:31:84:64:c5:ea:11:6a:1b:75:fc +# SHA1 Fingerprint: 84:1a:69:fb:f5:cd:1a:25:34:13:3d:e3:f8:fc:b8:99:d0:c9:14:b7 +# SHA256 Fingerprint: 8a:71:de:65:59:33:6f:42:6c:26:e5:38:80:d0:0d:88:a1:8d:a4:c6:a9:1f:0d:cb:61:94:e2:06:c5:c9:63:87 +-----BEGIN CERTIFICATE----- +MIIFVjCCAz6gAwIBAgIUQ+NxE9izWRRdt86M/TX9b7wFjUUwDQYJKoZIhvcNAQEL +BQAwQzELMAkGA1UEBhMCQ04xHDAaBgNVBAoTE2lUcnVzQ2hpbmEgQ28uLEx0ZC4x +FjAUBgNVBAMTDXZUcnVzIFJvb3QgQ0EwHhcNMTgwNzMxMDcyNDA1WhcNNDMwNzMx +MDcyNDA1WjBDMQswCQYDVQQGEwJDTjEcMBoGA1UEChMTaVRydXNDaGluYSBDby4s +THRkLjEWMBQGA1UEAxMNdlRydXMgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQAD +ggIPADCCAgoCggIBAL1VfGHTuB0EYgWgrmy3cLRB6ksDXhA/kFocizuwZotsSKYc +IrrVQJLuM7IjWcmOvFjai57QGfIvWcaMY1q6n6MLsLOaXLoRuBLpDLvPbmyAhykU +AyyNJJrIZIO1aqwTLDPxn9wsYTwaP3BVm60AUn/PBLn+NvqcwBauYv6WTEN+VRS+ +GrPSbcKvdmaVayqwlHeFXgQPYh1jdfdr58tbmnDsPmcF8P4HCIDPKNsFxhQnL4Z9 +8Cfe/+Z+M0jnCx5Y0ScrUw5XSmXX+6KAYPxMvDVTAWqXcoKv8R1w6Jz1717CbMdH +flqUhSZNO7rrTOiwCcJlwp2dCZtOtZcFrPUGoPc2BX70kLJrxLT5ZOrpGgrIDajt +J8nU57O5q4IikCc9Kuh8kO+8T/3iCiSn3mUkpF3qwHYw03dQ+A0Em5Q2AXPKBlim +0zvc+gRGE1WKyURHuFE5Gi7oNOJ5y1lKCn+8pu8fA2dqWSslYpPZUxlmPCdiKYZN +pGvu/9ROutW04o5IWgAZCfEF2c6Rsffr6TlP9m8EQ5pV9T4FFL2/s1m02I4zhKOQ +UqqzApVg+QxMaPnu1RcN+HFXtSXkKe5lXa/R7jwXC1pDxaWG6iSe4gUH3DRCEpHW +OXSuTEGC2/KmSNGzm/MzqvOmwMVO9fSddmPmAsYiS8GVP1BkLFTltvA8Kc9XAgMB +AAGjQjBAMB0GA1UdDgQWBBRUYnBj8XWEQ1iO0RYgscasGrz2iTAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAKbqSSaet +8PFww+SX8J+pJdVrnjT+5hpk9jprUrIQeBqfTNqK2uwcN1LgQkv7bHbKJAs5EhWd +nxEt/Hlk3ODg9d3gV8mlsnZwUKT+twpw1aA08XXXTUm6EdGz2OyC/+sOxL9kLX1j +bhd47F18iMjrjld22VkE+rxSH0Ws8HqA7Oxvdq6R2xCOBNyS36D25q5J08FsEhvM +Kar5CKXiNxTKsbhm7xqC5PD48acWabfbqWE8n/Uxy+QARsIvdLGx14HuqCaVvIiv +TDUHKgLKeBRtRytAVunLKmChZwOgzoy8sHJnxDHO2zTlJQNgJXtxmOTAGytfdELS +S8VZCAeHvsXDf+eW2eHcKJfWjwXj9ZtOyh1QRwVTsMo554WgicEFOwE30z9J4nfr +I8iIZjs9OXYhRvHsXyO466JmdXTBQPfYaJqT4i2pLr0cox7IdMakLXogqzu4sEb9 +b91fUlV1YvCXoHzXOP0l382gmxDPi7g4Xl7FtKYCNqEeXxzP4padKar9mK5S4fNB +UvupLnKWnyfjqnN9+BojZns7q2WwMgFLFT49ok8MKzWixtlnEjUwzXYuFrOZnk1P +Ti07NEPhmg4NpGaXutIcSkwsKouLgU9xGqndXHt7CMUADTdA43x7VF8vhV929ven +sBxXVsFy6K2ir40zSbofitzmdHxghm+Hl3s= +-----END CERTIFICATE----- + +# Issuer: CN=ISRG Root X2 O=Internet Security Research Group +# Subject: CN=ISRG Root X2 O=Internet Security Research Group +# Label: "ISRG Root X2" +# Serial: 87493402998870891108772069816698636114 +# MD5 Fingerprint: d3:9e:c4:1e:23:3c:a6:df:cf:a3:7e:6d:e0:14:e6:e5 +# SHA1 Fingerprint: bd:b1:b9:3c:d5:97:8d:45:c6:26:14:55:f8:db:95:c7:5a:d1:53:af +# SHA256 Fingerprint: 69:72:9b:8e:15:a8:6e:fc:17:7a:57:af:b7:17:1d:fc:64:ad:d2:8c:2f:ca:8c:f1:50:7e:34:45:3c:cb:14:70 +-----BEGIN CERTIFICATE----- +MIICGzCCAaGgAwIBAgIQQdKd0XLq7qeAwSxs6S+HUjAKBggqhkjOPQQDAzBPMQsw +CQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2gg +R3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMjAeFw0yMDA5MDQwMDAwMDBaFw00 +MDA5MTcxNjAwMDBaME8xCzAJBgNVBAYTAlVTMSkwJwYDVQQKEyBJbnRlcm5ldCBT +ZWN1cml0eSBSZXNlYXJjaCBHcm91cDEVMBMGA1UEAxMMSVNSRyBSb290IFgyMHYw +EAYHKoZIzj0CAQYFK4EEACIDYgAEzZvVn4CDCuwJSvMWSj5cz3es3mcFDR0HttwW ++1qLFNvicWDEukWVEYmO6gbf9yoWHKS5xcUy4APgHoIYOIvXRdgKam7mAHf7AlF9 +ItgKbppbd9/w+kHsOdx1ymgHDB/qo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0T +AQH/BAUwAwEB/zAdBgNVHQ4EFgQUfEKWrt5LSDv6kviejM9ti6lyN5UwCgYIKoZI +zj0EAwMDaAAwZQIwe3lORlCEwkSHRhtFcP9Ymd70/aTSVaYgLXTWNLxBo1BfASdW +tL4ndQavEi51mI38AjEAi/V3bNTIZargCyzuFJ0nN6T5U6VR5CmD1/iQMVtCnwr1 +/q4AaOeMSQ+2b1tbFfLn +-----END CERTIFICATE----- + +# Issuer: CN=HiPKI Root CA - G1 O=Chunghwa Telecom Co., Ltd. +# Subject: CN=HiPKI Root CA - G1 O=Chunghwa Telecom Co., Ltd. +# Label: "HiPKI Root CA - G1" +# Serial: 60966262342023497858655262305426234976 +# MD5 Fingerprint: 69:45:df:16:65:4b:e8:68:9a:8f:76:5f:ff:80:9e:d3 +# SHA1 Fingerprint: 6a:92:e4:a8:ee:1b:ec:96:45:37:e3:29:57:49:cd:96:e3:e5:d2:60 +# SHA256 Fingerprint: f0:15:ce:3c:c2:39:bf:ef:06:4b:e9:f1:d2:c4:17:e1:a0:26:4a:0a:94:be:1f:0c:8d:12:18:64:eb:69:49:cc +-----BEGIN CERTIFICATE----- +MIIFajCCA1KgAwIBAgIQLd2szmKXlKFD6LDNdmpeYDANBgkqhkiG9w0BAQsFADBP +MQswCQYDVQQGEwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0 +ZC4xGzAZBgNVBAMMEkhpUEtJIFJvb3QgQ0EgLSBHMTAeFw0xOTAyMjIwOTQ2MDRa +Fw0zNzEyMzExNTU5NTlaME8xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3 +YSBUZWxlY29tIENvLiwgTHRkLjEbMBkGA1UEAwwSSGlQS0kgUm9vdCBDQSAtIEcx +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA9B5/UnMyDHPkvRN0o9Qw +qNCuS9i233VHZvR85zkEHmpwINJaR3JnVfSl6J3VHiGh8Ge6zCFovkRTv4354twv +Vcg3Px+kwJyz5HdcoEb+d/oaoDjq7Zpy3iu9lFc6uux55199QmQ5eiY29yTw1S+6 +lZgRZq2XNdZ1AYDgr/SEYYwNHl98h5ZeQa/rh+r4XfEuiAU+TCK72h8q3VJGZDnz +Qs7ZngyzsHeXZJzA9KMuH5UHsBffMNsAGJZMoYFL3QRtU6M9/Aes1MU3guvklQgZ +KILSQjqj2FPseYlgSGDIcpJQ3AOPgz+yQlda22rpEZfdhSi8MEyr48KxRURHH+CK +FgeW0iEPU8DtqX7UTuybCeyvQqww1r/REEXgphaypcXTT3OUM3ECoWqj1jOXTyFj +HluP2cFeRXF3D4FdXyGarYPM+l7WjSNfGz1BryB1ZlpK9p/7qxj3ccC2HTHsOyDr +y+K49a6SsvfhhEvyovKTmiKe0xRvNlS9H15ZFblzqMF8b3ti6RZsR1pl8w4Rm0bZ +/W3c1pzAtH2lsN0/Vm+h+fbkEkj9Bn8SV7apI09bA8PgcSojt/ewsTu8mL3WmKgM +a/aOEmem8rJY5AIJEzypuxC00jBF8ez3ABHfZfjcK0NVvxaXxA/VLGGEqnKG/uY6 +fsI/fe78LxQ+5oXdUG+3Se0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNV +HQ4EFgQU8ncX+l6o/vY9cdVouslGDDjYr7AwDgYDVR0PAQH/BAQDAgGGMA0GCSqG +SIb3DQEBCwUAA4ICAQBQUfB13HAE4/+qddRxosuej6ip0691x1TPOhwEmSKsxBHi +7zNKpiMdDg1H2DfHb680f0+BazVP6XKlMeJ45/dOlBhbQH3PayFUhuaVevvGyuqc +SE5XCV0vrPSltJczWNWseanMX/mF+lLFjfiRFOs6DRfQUsJ748JzjkZ4Bjgs6Fza +ZsT0pPBWGTMpWmWSBUdGSquEwx4noR8RkpkndZMPvDY7l1ePJlsMu5wP1G4wB9Tc +XzZoZjmDlicmisjEOf6aIW/Vcobpf2Lll07QJNBAsNB1CI69aO4I1258EHBGG3zg +iLKecoaZAeO/n0kZtCW+VmWuF2PlHt/o/0elv+EmBYTksMCv5wiZqAxeJoBF1Pho +L5aPruJKHJwWDBNvOIf2u8g0X5IDUXlwpt/L9ZlNec1OvFefQ05rLisY+GpzjLrF +Ne85akEez3GoorKGB1s6yeHvP2UEgEcyRHCVTjFnanRbEEV16rCf0OY1/k6fi8wr +kkVbbiVghUbN0aqwdmaTd5a+g744tiROJgvM7XpWGuDpWsZkrUx6AEhEL7lAuxM+ +vhV4nYWBSipX3tUZQ9rbyltHhoMLP7YNdnhzeSJesYAfz77RP1YQmCuVh6EfnWQU +YDksswBVLuT1sw5XxJFBAJw/6KXf6vb/yPCtbVKoF6ubYfwSUTXkJf2vqmqGOQ== +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R4 +# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R4 +# Label: "GlobalSign ECC Root CA - R4" +# Serial: 159662223612894884239637590694 +# MD5 Fingerprint: 26:29:f8:6d:e1:88:bf:a2:65:7f:aa:c4:cd:0f:7f:fc +# SHA1 Fingerprint: 6b:a0:b0:98:e1:71:ef:5a:ad:fe:48:15:80:77:10:f4:bd:6f:0b:28 +# SHA256 Fingerprint: b0:85:d7:0b:96:4f:19:1a:73:e4:af:0d:54:ae:7a:0e:07:aa:fd:af:9b:71:dd:08:62:13:8a:b7:32:5a:24:a2 +-----BEGIN CERTIFICATE----- +MIIB3DCCAYOgAwIBAgINAgPlfvU/k/2lCSGypjAKBggqhkjOPQQDAjBQMSQwIgYD +VQQLExtHbG9iYWxTaWduIEVDQyBSb290IENBIC0gUjQxEzARBgNVBAoTCkdsb2Jh +bFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMTIxMTEzMDAwMDAwWhcNMzgw +MTE5MDMxNDA3WjBQMSQwIgYDVQQLExtHbG9iYWxTaWduIEVDQyBSb290IENBIC0g +UjQxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wWTAT +BgcqhkjOPQIBBggqhkjOPQMBBwNCAAS4xnnTj2wlDp8uORkcA6SumuU5BwkWymOx +uYb4ilfBV85C+nOh92VC/x7BALJucw7/xyHlGKSq2XE/qNS5zowdo0IwQDAOBgNV +HQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVLB7rUW44kB/ ++wpu+74zyTyjhNUwCgYIKoZIzj0EAwIDRwAwRAIgIk90crlgr/HmnKAWBVBfw147 +bmF0774BxL4YSFlhgjICICadVGNA3jdgUM/I2O2dgq43mLyjj0xMqTQrbO/7lZsm +-----END CERTIFICATE----- + +# Issuer: CN=GTS Root R1 O=Google Trust Services LLC +# Subject: CN=GTS Root R1 O=Google Trust Services LLC +# Label: "GTS Root R1" +# Serial: 159662320309726417404178440727 +# MD5 Fingerprint: 05:fe:d0:bf:71:a8:a3:76:63:da:01:e0:d8:52:dc:40 +# SHA1 Fingerprint: e5:8c:1c:c4:91:3b:38:63:4b:e9:10:6e:e3:ad:8e:6b:9d:d9:81:4a +# SHA256 Fingerprint: d9:47:43:2a:bd:e7:b7:fa:90:fc:2e:6b:59:10:1b:12:80:e0:e1:c7:e4:e4:0f:a3:c6:88:7f:ff:57:a7:f4:cf +-----BEGIN CERTIFICATE----- +MIIFVzCCAz+gAwIBAgINAgPlk28xsBNJiGuiFzANBgkqhkiG9w0BAQwFADBHMQsw +CQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEU +MBIGA1UEAxMLR1RTIFJvb3QgUjEwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAw +MDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZp +Y2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjEwggIiMA0GCSqGSIb3DQEBAQUA +A4ICDwAwggIKAoICAQC2EQKLHuOhd5s73L+UPreVp0A8of2C+X0yBoJx9vaMf/vo +27xqLpeXo4xL+Sv2sfnOhB2x+cWX3u+58qPpvBKJXqeqUqv4IyfLpLGcY9vXmX7w +Cl7raKb0xlpHDU0QM+NOsROjyBhsS+z8CZDfnWQpJSMHobTSPS5g4M/SCYe7zUjw +TcLCeoiKu7rPWRnWr4+wB7CeMfGCwcDfLqZtbBkOtdh+JhpFAz2weaSUKK0Pfybl +qAj+lug8aJRT7oM6iCsVlgmy4HqMLnXWnOunVmSPlk9orj2XwoSPwLxAwAtcvfaH +szVsrBhQf4TgTM2S0yDpM7xSma8ytSmzJSq0SPly4cpk9+aCEI3oncKKiPo4Zor8 +Y/kB+Xj9e1x3+naH+uzfsQ55lVe0vSbv1gHR6xYKu44LtcXFilWr06zqkUspzBmk +MiVOKvFlRNACzqrOSbTqn3yDsEB750Orp2yjj32JgfpMpf/VjsPOS+C12LOORc92 +wO1AK/1TD7Cn1TsNsYqiA94xrcx36m97PtbfkSIS5r762DL8EGMUUXLeXdYWk70p +aDPvOmbsB4om3xPXV2V4J95eSRQAogB/mqghtqmxlbCluQ0WEdrHbEg8QOB+DVrN +VjzRlwW5y0vtOUucxD/SVRNuJLDWcfr0wbrM7Rv1/oFB2ACYPTrIrnqYNxgFlQID +AQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E +FgQU5K8rJnEaK0gnhS9SZizv8IkTcT4wDQYJKoZIhvcNAQEMBQADggIBAJ+qQibb +C5u+/x6Wki4+omVKapi6Ist9wTrYggoGxval3sBOh2Z5ofmmWJyq+bXmYOfg6LEe +QkEzCzc9zolwFcq1JKjPa7XSQCGYzyI0zzvFIoTgxQ6KfF2I5DUkzps+GlQebtuy +h6f88/qBVRRiClmpIgUxPoLW7ttXNLwzldMXG+gnoot7TiYaelpkttGsN/H9oPM4 +7HLwEXWdyzRSjeZ2axfG34arJ45JK3VmgRAhpuo+9K4l/3wV3s6MJT/KYnAK9y8J +ZgfIPxz88NtFMN9iiMG1D53Dn0reWVlHxYciNuaCp+0KueIHoI17eko8cdLiA6Ef +MgfdG+RCzgwARWGAtQsgWSl4vflVy2PFPEz0tv/bal8xa5meLMFrUKTX5hgUvYU/ +Z6tGn6D/Qqc6f1zLXbBwHSs09dR2CQzreExZBfMzQsNhFRAbd03OIozUhfJFfbdT +6u9AWpQKXCBfTkBdYiJ23//OYb2MI3jSNwLgjt7RETeJ9r/tSQdirpLsQBqvFAnZ +0E6yove+7u7Y/9waLd64NnHi/Hm3lCXRSHNboTXns5lndcEZOitHTtNCjv0xyBZm +2tIMPNuzjsmhDYAPexZ3FL//2wmUspO8IFgV6dtxQ/PeEMMA3KgqlbbC1j+Qa3bb +bP6MvPJwNQzcmRk13NfIRmPVNnGuV/u3gm3c +-----END CERTIFICATE----- + +# Issuer: CN=GTS Root R2 O=Google Trust Services LLC +# Subject: CN=GTS Root R2 O=Google Trust Services LLC +# Label: "GTS Root R2" +# Serial: 159662449406622349769042896298 +# MD5 Fingerprint: 1e:39:c0:53:e6:1e:29:82:0b:ca:52:55:36:5d:57:dc +# SHA1 Fingerprint: 9a:44:49:76:32:db:de:fa:d0:bc:fb:5a:7b:17:bd:9e:56:09:24:94 +# SHA256 Fingerprint: 8d:25:cd:97:22:9d:bf:70:35:6b:da:4e:b3:cc:73:40:31:e2:4c:f0:0f:af:cf:d3:2d:c7:6e:b5:84:1c:7e:a8 +-----BEGIN CERTIFICATE----- +MIIFVzCCAz+gAwIBAgINAgPlrsWNBCUaqxElqjANBgkqhkiG9w0BAQwFADBHMQsw +CQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEU +MBIGA1UEAxMLR1RTIFJvb3QgUjIwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAw +MDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZp +Y2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjIwggIiMA0GCSqGSIb3DQEBAQUA +A4ICDwAwggIKAoICAQDO3v2m++zsFDQ8BwZabFn3GTXd98GdVarTzTukk3LvCvpt +nfbwhYBboUhSnznFt+4orO/LdmgUud+tAWyZH8QiHZ/+cnfgLFuv5AS/T3KgGjSY +6Dlo7JUle3ah5mm5hRm9iYz+re026nO8/4Piy33B0s5Ks40FnotJk9/BW9BuXvAu +MC6C/Pq8tBcKSOWIm8Wba96wyrQD8Nr0kLhlZPdcTK3ofmZemde4wj7I0BOdre7k +RXuJVfeKH2JShBKzwkCX44ofR5GmdFrS+LFjKBC4swm4VndAoiaYecb+3yXuPuWg +f9RhD1FLPD+M2uFwdNjCaKH5wQzpoeJ/u1U8dgbuak7MkogwTZq9TwtImoS1mKPV ++3PBV2HdKFZ1E66HjucMUQkQdYhMvI35ezzUIkgfKtzra7tEscszcTJGr61K8Yzo +dDqs5xoic4DSMPclQsciOzsSrZYuxsN2B6ogtzVJV+mSSeh2FnIxZyuWfoqjx5RW +Ir9qS34BIbIjMt/kmkRtWVtd9QCgHJvGeJeNkP+byKq0rxFROV7Z+2et1VsRnTKa +G73VululycslaVNVJ1zgyjbLiGH7HrfQy+4W+9OmTN6SpdTi3/UGVN4unUu0kzCq +gc7dGtxRcw1PcOnlthYhGXmy5okLdWTK1au8CcEYof/UVKGFPP0UJAOyh9OktwID +AQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E +FgQUu//KjiOfT5nK2+JopqUVJxce2Q4wDQYJKoZIhvcNAQEMBQADggIBAB/Kzt3H +vqGf2SdMC9wXmBFqiN495nFWcrKeGk6c1SuYJF2ba3uwM4IJvd8lRuqYnrYb/oM8 +0mJhwQTtzuDFycgTE1XnqGOtjHsB/ncw4c5omwX4Eu55MaBBRTUoCnGkJE+M3DyC +B19m3H0Q/gxhswWV7uGugQ+o+MePTagjAiZrHYNSVc61LwDKgEDg4XSsYPWHgJ2u +NmSRXbBoGOqKYcl3qJfEycel/FVL8/B/uWU9J2jQzGv6U53hkRrJXRqWbTKH7QMg +yALOWr7Z6v2yTcQvG99fevX4i8buMTolUVVnjWQye+mew4K6Ki3pHrTgSAai/Gev +HyICc/sgCq+dVEuhzf9gR7A/Xe8bVr2XIZYtCtFenTgCR2y59PYjJbigapordwj6 +xLEokCZYCDzifqrXPW+6MYgKBesntaFJ7qBFVHvmJ2WZICGoo7z7GJa7Um8M7YNR +TOlZ4iBgxcJlkoKM8xAfDoqXvneCbT+PHV28SSe9zE8P4c52hgQjxcCMElv924Sg +JPFI/2R80L5cFtHvma3AH/vLrrw4IgYmZNralw4/KBVEqE8AyvCazM90arQ+POuV +7LXTWtiBmelDGDfrs7vRWGJB82bSj6p4lVQgw1oudCvV0b4YacCs1aTPObpRhANl +6WLAYv7YTVWW4tAR+kg0Eeye7QUd5MjWHYbL +-----END CERTIFICATE----- + +# Issuer: CN=GTS Root R3 O=Google Trust Services LLC +# Subject: CN=GTS Root R3 O=Google Trust Services LLC +# Label: "GTS Root R3" +# Serial: 159662495401136852707857743206 +# MD5 Fingerprint: 3e:e7:9d:58:02:94:46:51:94:e5:e0:22:4a:8b:e7:73 +# SHA1 Fingerprint: ed:e5:71:80:2b:c8:92:b9:5b:83:3c:d2:32:68:3f:09:cd:a0:1e:46 +# SHA256 Fingerprint: 34:d8:a7:3e:e2:08:d9:bc:db:0d:95:65:20:93:4b:4e:40:e6:94:82:59:6e:8b:6f:73:c8:42:6b:01:0a:6f:48 +-----BEGIN CERTIFICATE----- +MIICCTCCAY6gAwIBAgINAgPluILrIPglJ209ZjAKBggqhkjOPQQDAzBHMQswCQYD +VQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIG +A1UEAxMLR1RTIFJvb3QgUjMwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAw +WjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2Vz +IExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjMwdjAQBgcqhkjOPQIBBgUrgQQAIgNi +AAQfTzOHMymKoYTey8chWEGJ6ladK0uFxh1MJ7x/JlFyb+Kf1qPKzEUURout736G +jOyxfi//qXGdGIRFBEFVbivqJn+7kAHjSxm65FSWRQmx1WyRRK2EE46ajA2ADDL2 +4CejQjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW +BBTB8Sa6oC2uhYHP0/EqEr24Cmf9vDAKBggqhkjOPQQDAwNpADBmAjEA9uEglRR7 +VKOQFhG/hMjqb2sXnh5GmCCbn9MN2azTL818+FsuVbu/3ZL3pAzcMeGiAjEA/Jdm +ZuVDFhOD3cffL74UOO0BzrEXGhF16b0DjyZ+hOXJYKaV11RZt+cRLInUue4X +-----END CERTIFICATE----- + +# Issuer: CN=GTS Root R4 O=Google Trust Services LLC +# Subject: CN=GTS Root R4 O=Google Trust Services LLC +# Label: "GTS Root R4" +# Serial: 159662532700760215368942768210 +# MD5 Fingerprint: 43:96:83:77:19:4d:76:b3:9d:65:52:e4:1d:22:a5:e8 +# SHA1 Fingerprint: 77:d3:03:67:b5:e0:0c:15:f6:0c:38:61:df:7c:e1:3b:92:46:4d:47 +# SHA256 Fingerprint: 34:9d:fa:40:58:c5:e2:63:12:3b:39:8a:e7:95:57:3c:4e:13:13:c8:3f:e6:8f:93:55:6c:d5:e8:03:1b:3c:7d +-----BEGIN CERTIFICATE----- +MIICCTCCAY6gAwIBAgINAgPlwGjvYxqccpBQUjAKBggqhkjOPQQDAzBHMQswCQYD +VQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIG +A1UEAxMLR1RTIFJvb3QgUjQwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAw +WjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2Vz +IExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjQwdjAQBgcqhkjOPQIBBgUrgQQAIgNi +AATzdHOnaItgrkO4NcWBMHtLSZ37wWHO5t5GvWvVYRg1rkDdc/eJkTBa6zzuhXyi +QHY7qca4R9gq55KRanPpsXI5nymfopjTX15YhmUPoYRlBtHci8nHc8iMai/lxKvR +HYqjQjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW +BBSATNbrdP9JNqPV2Py1PsVq8JQdjDAKBggqhkjOPQQDAwNpADBmAjEA6ED/g94D +9J+uHXqnLrmvT/aDHQ4thQEd0dlq7A/Cr8deVl5c1RxYIigL9zC2L7F8AjEA8GE8 +p/SgguMh1YQdc4acLa/KNJvxn7kjNuK8YAOdgLOaVsjh4rsUecrNIdSUtUlD +-----END CERTIFICATE----- + +# Issuer: CN=Telia Root CA v2 O=Telia Finland Oyj +# Subject: CN=Telia Root CA v2 O=Telia Finland Oyj +# Label: "Telia Root CA v2" +# Serial: 7288924052977061235122729490515358 +# MD5 Fingerprint: 0e:8f:ac:aa:82:df:85:b1:f4:dc:10:1c:fc:99:d9:48 +# SHA1 Fingerprint: b9:99:cd:d1:73:50:8a:c4:47:05:08:9c:8c:88:fb:be:a0:2b:40:cd +# SHA256 Fingerprint: 24:2b:69:74:2f:cb:1e:5b:2a:bf:98:89:8b:94:57:21:87:54:4e:5b:4d:99:11:78:65:73:62:1f:6a:74:b8:2c +-----BEGIN CERTIFICATE----- +MIIFdDCCA1ygAwIBAgIPAWdfJ9b+euPkrL4JWwWeMA0GCSqGSIb3DQEBCwUAMEQx +CzAJBgNVBAYTAkZJMRowGAYDVQQKDBFUZWxpYSBGaW5sYW5kIE95ajEZMBcGA1UE +AwwQVGVsaWEgUm9vdCBDQSB2MjAeFw0xODExMjkxMTU1NTRaFw00MzExMjkxMTU1 +NTRaMEQxCzAJBgNVBAYTAkZJMRowGAYDVQQKDBFUZWxpYSBGaW5sYW5kIE95ajEZ +MBcGA1UEAwwQVGVsaWEgUm9vdCBDQSB2MjCCAiIwDQYJKoZIhvcNAQEBBQADggIP +ADCCAgoCggIBALLQPwe84nvQa5n44ndp586dpAO8gm2h/oFlH0wnrI4AuhZ76zBq +AMCzdGh+sq/H1WKzej9Qyow2RCRj0jbpDIX2Q3bVTKFgcmfiKDOlyzG4OiIjNLh9 +vVYiQJ3q9HsDrWj8soFPmNB06o3lfc1jw6P23pLCWBnglrvFxKk9pXSW/q/5iaq9 +lRdU2HhE8Qx3FZLgmEKnpNaqIJLNwaCzlrI6hEKNfdWV5Nbb6WLEWLN5xYzTNTOD +n3WhUidhOPFZPY5Q4L15POdslv5e2QJltI5c0BE0312/UqeBAMN/mUWZFdUXyApT +7GPzmX3MaRKGwhfwAZ6/hLzRUssbkmbOpFPlob/E2wnW5olWK8jjfN7j/4nlNW4o +6GwLI1GpJQXrSPjdscr6bAhR77cYbETKJuFzxokGgeWKrLDiKca5JLNrRBH0pUPC +TEPlcDaMtjNXepUugqD0XBCzYYP2AgWGLnwtbNwDRm41k9V6lS/eINhbfpSQBGq6 +WT0EBXWdN6IOLj3rwaRSg/7Qa9RmjtzG6RJOHSpXqhC8fF6CfaamyfItufUXJ63R +DolUK5X6wK0dmBR4M0KGCqlztft0DbcbMBnEWg4cJ7faGND/isgFuvGqHKI3t+ZI +pEYslOqodmJHixBTB0hXbOKSTbauBcvcwUpej6w9GU7C7WB1K9vBykLVAgMBAAGj +YzBhMB8GA1UdIwQYMBaAFHKs5DN5qkWH9v2sHZ7Wxy+G2CQ5MB0GA1UdDgQWBBRy +rOQzeapFh/b9rB2e1scvhtgkOTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUw +AwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAoDtZpwmUPjaE0n4vOaWWl/oRrfxn83EJ +8rKJhGdEr7nv7ZbsnGTbMjBvZ5qsfl+yqwE2foH65IRe0qw24GtixX1LDoJt0nZi +0f6X+J8wfBj5tFJ3gh1229MdqfDBmgC9bXXYfef6xzijnHDoRnkDry5023X4blMM +A8iZGok1GTzTyVR8qPAs5m4HeW9q4ebqkYJpCh3DflminmtGFZhb069GHWLIzoBS +SRE/yQQSwxN8PzuKlts8oB4KtItUsiRnDe+Cy748fdHif64W1lZYudogsYMVoe+K +TTJvQS8TUoKU1xrBeKJR3Stwbbca+few4GeXVtt8YVMJAygCQMez2P2ccGrGKMOF +6eLtGpOg3kuYooQ+BXcBlj37tCAPnHICehIv1aO6UXivKitEZU61/Qrowc15h2Er +3oBXRb9n8ZuRXqWk7FlIEA04x7D6w0RtBPV4UBySllva9bguulvP5fBqnUsvWHMt +Ty3EHD70sz+rFQ47GUGKpMFXEmZxTPpT41frYpUJnlTd0cI8Vzy9OK2YZLe4A5pT +VmBds9hCG1xLEooc6+t9xnppxyd/pPiL8uSUZodL6ZQHCRJ5irLrdATczvREWeAW +ysUsWNc8e89ihmpQfTU2Zqf7N+cox9jQraVplI/owd8k+BsHMYeB2F326CjYSlKA +rBPuUBQemMc= +-----END CERTIFICATE----- + +# Issuer: CN=D-TRUST BR Root CA 1 2020 O=D-Trust GmbH +# Subject: CN=D-TRUST BR Root CA 1 2020 O=D-Trust GmbH +# Label: "D-TRUST BR Root CA 1 2020" +# Serial: 165870826978392376648679885835942448534 +# MD5 Fingerprint: b5:aa:4b:d5:ed:f7:e3:55:2e:8f:72:0a:f3:75:b8:ed +# SHA1 Fingerprint: 1f:5b:98:f0:e3:b5:f7:74:3c:ed:e6:b0:36:7d:32:cd:f4:09:41:67 +# SHA256 Fingerprint: e5:9a:aa:81:60:09:c2:2b:ff:5b:25:ba:d3:7d:f3:06:f0:49:79:7c:1f:81:d8:5a:b0:89:e6:57:bd:8f:00:44 +-----BEGIN CERTIFICATE----- +MIIC2zCCAmCgAwIBAgIQfMmPK4TX3+oPyWWa00tNljAKBggqhkjOPQQDAzBIMQsw +CQYDVQQGEwJERTEVMBMGA1UEChMMRC1UcnVzdCBHbWJIMSIwIAYDVQQDExlELVRS +VVNUIEJSIFJvb3QgQ0EgMSAyMDIwMB4XDTIwMDIxMTA5NDUwMFoXDTM1MDIxMTA5 +NDQ1OVowSDELMAkGA1UEBhMCREUxFTATBgNVBAoTDEQtVHJ1c3QgR21iSDEiMCAG +A1UEAxMZRC1UUlVTVCBCUiBSb290IENBIDEgMjAyMDB2MBAGByqGSM49AgEGBSuB +BAAiA2IABMbLxyjR+4T1mu9CFCDhQ2tuda38KwOE1HaTJddZO0Flax7mNCq7dPYS +zuht56vkPE4/RAiLzRZxy7+SmfSk1zxQVFKQhYN4lGdnoxwJGT11NIXe7WB9xwy0 +QVK5buXuQqOCAQ0wggEJMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFHOREKv/ +VbNafAkl1bK6CKBrqx9tMA4GA1UdDwEB/wQEAwIBBjCBxgYDVR0fBIG+MIG7MD6g +PKA6hjhodHRwOi8vY3JsLmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X2JyX3Jvb3Rf +Y2FfMV8yMDIwLmNybDB5oHegdYZzbGRhcDovL2RpcmVjdG9yeS5kLXRydXN0Lm5l +dC9DTj1ELVRSVVNUJTIwQlIlMjBSb290JTIwQ0ElMjAxJTIwMjAyMCxPPUQtVHJ1 +c3QlMjBHbWJILEM9REU/Y2VydGlmaWNhdGVyZXZvY2F0aW9ubGlzdDAKBggqhkjO +PQQDAwNpADBmAjEAlJAtE/rhY/hhY+ithXhUkZy4kzg+GkHaQBZTQgjKL47xPoFW +wKrY7RjEsK70PvomAjEA8yjixtsrmfu3Ubgko6SUeho/5jbiA1czijDLgsfWFBHV +dWNbFJWcHwHP2NVypw87 +-----END CERTIFICATE----- + +# Issuer: CN=D-TRUST EV Root CA 1 2020 O=D-Trust GmbH +# Subject: CN=D-TRUST EV Root CA 1 2020 O=D-Trust GmbH +# Label: "D-TRUST EV Root CA 1 2020" +# Serial: 126288379621884218666039612629459926992 +# MD5 Fingerprint: 8c:2d:9d:70:9f:48:99:11:06:11:fb:e9:cb:30:c0:6e +# SHA1 Fingerprint: 61:db:8c:21:59:69:03:90:d8:7c:9c:12:86:54:cf:9d:3d:f4:dd:07 +# SHA256 Fingerprint: 08:17:0d:1a:a3:64:53:90:1a:2f:95:92:45:e3:47:db:0c:8d:37:ab:aa:bc:56:b8:1a:a1:00:dc:95:89:70:db +-----BEGIN CERTIFICATE----- +MIIC2zCCAmCgAwIBAgIQXwJB13qHfEwDo6yWjfv/0DAKBggqhkjOPQQDAzBIMQsw +CQYDVQQGEwJERTEVMBMGA1UEChMMRC1UcnVzdCBHbWJIMSIwIAYDVQQDExlELVRS +VVNUIEVWIFJvb3QgQ0EgMSAyMDIwMB4XDTIwMDIxMTEwMDAwMFoXDTM1MDIxMTA5 +NTk1OVowSDELMAkGA1UEBhMCREUxFTATBgNVBAoTDEQtVHJ1c3QgR21iSDEiMCAG +A1UEAxMZRC1UUlVTVCBFViBSb290IENBIDEgMjAyMDB2MBAGByqGSM49AgEGBSuB +BAAiA2IABPEL3YZDIBnfl4XoIkqbz52Yv7QFJsnL46bSj8WeeHsxiamJrSc8ZRCC +/N/DnU7wMyPE0jL1HLDfMxddxfCxivnvubcUyilKwg+pf3VlSSowZ/Rk99Yad9rD +wpdhQntJraOCAQ0wggEJMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFH8QARY3 +OqQo5FD4pPfsazK2/umLMA4GA1UdDwEB/wQEAwIBBjCBxgYDVR0fBIG+MIG7MD6g +PKA6hjhodHRwOi8vY3JsLmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X2V2X3Jvb3Rf +Y2FfMV8yMDIwLmNybDB5oHegdYZzbGRhcDovL2RpcmVjdG9yeS5kLXRydXN0Lm5l +dC9DTj1ELVRSVVNUJTIwRVYlMjBSb290JTIwQ0ElMjAxJTIwMjAyMCxPPUQtVHJ1 +c3QlMjBHbWJILEM9REU/Y2VydGlmaWNhdGVyZXZvY2F0aW9ubGlzdDAKBggqhkjO +PQQDAwNpADBmAjEAyjzGKnXCXnViOTYAYFqLwZOZzNnbQTs7h5kXO9XMT8oi96CA +y/m0sRtW9XLS/BnRAjEAkfcwkz8QRitxpNA7RJvAKQIFskF3UfN5Wp6OFKBOQtJb +gfM0agPnIjhQW+0ZT0MW +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert TLS ECC P384 Root G5 O=DigiCert, Inc. +# Subject: CN=DigiCert TLS ECC P384 Root G5 O=DigiCert, Inc. +# Label: "DigiCert TLS ECC P384 Root G5" +# Serial: 13129116028163249804115411775095713523 +# MD5 Fingerprint: d3:71:04:6a:43:1c:db:a6:59:e1:a8:a3:aa:c5:71:ed +# SHA1 Fingerprint: 17:f3:de:5e:9f:0f:19:e9:8e:f6:1f:32:26:6e:20:c4:07:ae:30:ee +# SHA256 Fingerprint: 01:8e:13:f0:77:25:32:cf:80:9b:d1:b1:72:81:86:72:83:fc:48:c6:e1:3b:e9:c6:98:12:85:4a:49:0c:1b:05 +-----BEGIN CERTIFICATE----- +MIICGTCCAZ+gAwIBAgIQCeCTZaz32ci5PhwLBCou8zAKBggqhkjOPQQDAzBOMQsw +CQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xJjAkBgNVBAMTHURp +Z2lDZXJ0IFRMUyBFQ0MgUDM4NCBSb290IEc1MB4XDTIxMDExNTAwMDAwMFoXDTQ2 +MDExNDIzNTk1OVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJ +bmMuMSYwJAYDVQQDEx1EaWdpQ2VydCBUTFMgRUNDIFAzODQgUm9vdCBHNTB2MBAG +ByqGSM49AgEGBSuBBAAiA2IABMFEoc8Rl1Ca3iOCNQfN0MsYndLxf3c1TzvdlHJS +7cI7+Oz6e2tYIOyZrsn8aLN1udsJ7MgT9U7GCh1mMEy7H0cKPGEQQil8pQgO4CLp +0zVozptjn4S1mU1YoI71VOeVyaNCMEAwHQYDVR0OBBYEFMFRRVBZqz7nLFr6ICIS +B4CIfBFqMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MAoGCCqGSM49 +BAMDA2gAMGUCMQCJao1H5+z8blUD2WdsJk6Dxv3J+ysTvLd6jLRl0mlpYxNjOyZQ +LgGheQaRnUi/wr4CMEfDFXuxoJGZSZOoPHzoRgaLLPIxAJSdYsiJvRmEFOml+wG4 +DXZDjC5Ty3zfDBeWUA== +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert TLS RSA4096 Root G5 O=DigiCert, Inc. +# Subject: CN=DigiCert TLS RSA4096 Root G5 O=DigiCert, Inc. +# Label: "DigiCert TLS RSA4096 Root G5" +# Serial: 11930366277458970227240571539258396554 +# MD5 Fingerprint: ac:fe:f7:34:96:a9:f2:b3:b4:12:4b:e4:27:41:6f:e1 +# SHA1 Fingerprint: a7:88:49:dc:5d:7c:75:8c:8c:de:39:98:56:b3:aa:d0:b2:a5:71:35 +# SHA256 Fingerprint: 37:1a:00:dc:05:33:b3:72:1a:7e:eb:40:e8:41:9e:70:79:9d:2b:0a:0f:2c:1d:80:69:31:65:f7:ce:c4:ad:75 +-----BEGIN CERTIFICATE----- +MIIFZjCCA06gAwIBAgIQCPm0eKj6ftpqMzeJ3nzPijANBgkqhkiG9w0BAQwFADBN +MQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xJTAjBgNVBAMT +HERpZ2lDZXJ0IFRMUyBSU0E0MDk2IFJvb3QgRzUwHhcNMjEwMTE1MDAwMDAwWhcN +NDYwMTE0MjM1OTU5WjBNMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQs +IEluYy4xJTAjBgNVBAMTHERpZ2lDZXJ0IFRMUyBSU0E0MDk2IFJvb3QgRzUwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCz0PTJeRGd/fxmgefM1eS87IE+ +ajWOLrfn3q/5B03PMJ3qCQuZvWxX2hhKuHisOjmopkisLnLlvevxGs3npAOpPxG0 +2C+JFvuUAT27L/gTBaF4HI4o4EXgg/RZG5Wzrn4DReW+wkL+7vI8toUTmDKdFqgp +wgscONyfMXdcvyej/Cestyu9dJsXLfKB2l2w4SMXPohKEiPQ6s+d3gMXsUJKoBZM +pG2T6T867jp8nVid9E6P/DsjyG244gXazOvswzH016cpVIDPRFtMbzCe88zdH5RD +nU1/cHAN1DrRN/BsnZvAFJNY781BOHW8EwOVfH/jXOnVDdXifBBiqmvwPXbzP6Po +sMH976pXTayGpxi0KcEsDr9kvimM2AItzVwv8n/vFfQMFawKsPHTDU9qTXeXAaDx +Zre3zu/O7Oyldcqs4+Fj97ihBMi8ez9dLRYiVu1ISf6nL3kwJZu6ay0/nTvEF+cd +Lvvyz6b84xQslpghjLSR6Rlgg/IwKwZzUNWYOwbpx4oMYIwo+FKbbuH2TbsGJJvX +KyY//SovcfXWJL5/MZ4PbeiPT02jP/816t9JXkGPhvnxd3lLG7SjXi/7RgLQZhNe +XoVPzthwiHvOAbWWl9fNff2C+MIkwcoBOU+NosEUQB+cZtUMCUbW8tDRSHZWOkPL +tgoRObqME2wGtZ7P6wIDAQABo0IwQDAdBgNVHQ4EFgQUUTMc7TZArxfTJc1paPKv +TiM+s0EwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcN +AQEMBQADggIBAGCmr1tfV9qJ20tQqcQjNSH/0GEwhJG3PxDPJY7Jv0Y02cEhJhxw +GXIeo8mH/qlDZJY6yFMECrZBu8RHANmfGBg7sg7zNOok992vIGCukihfNudd5N7H +PNtQOa27PShNlnx2xlv0wdsUpasZYgcYQF+Xkdycx6u1UQ3maVNVzDl92sURVXLF +O4uJ+DQtpBflF+aZfTCIITfNMBc9uPK8qHWgQ9w+iUuQrm0D4ByjoJYJu32jtyoQ +REtGBzRj7TG5BO6jm5qu5jF49OokYTurWGT/u4cnYiWB39yhL/btp/96j1EuMPik +AdKFOV8BmZZvWltwGUb+hmA+rYAQCd05JS9Yf7vSdPD3Rh9GOUrYU9DzLjtxpdRv +/PNn5AeP3SYZ4Y1b+qOTEZvpyDrDVWiakuFSdjjo4bq9+0/V77PnSIMx8IIh47a+ +p6tv75/fTM8BuGJqIz3nCU2AG3swpMPdB380vqQmsvZB6Akd4yCYqjdP//fx4ilw +MUc/dNAUFvohigLVigmUdy7yWSiLfFCSCmZ4OIN1xLVaqBHG5cGdZlXPU8Sv13WF +qUITVuwhd4GTWgzqltlJyqEI8pc7bZsEGCREjnwB8twl2F6GmrE52/WRMmrRpnCK +ovfepEWFJqgejF0pW8hL2JpqA15w8oVPbEtoL8pU9ozaMv7Da4M/OMZ+ +-----END CERTIFICATE----- + +# Issuer: CN=Certainly Root R1 O=Certainly +# Subject: CN=Certainly Root R1 O=Certainly +# Label: "Certainly Root R1" +# Serial: 188833316161142517227353805653483829216 +# MD5 Fingerprint: 07:70:d4:3e:82:87:a0:fa:33:36:13:f4:fa:33:e7:12 +# SHA1 Fingerprint: a0:50:ee:0f:28:71:f4:27:b2:12:6d:6f:50:96:25:ba:cc:86:42:af +# SHA256 Fingerprint: 77:b8:2c:d8:64:4c:43:05:f7:ac:c5:cb:15:6b:45:67:50:04:03:3d:51:c6:0c:62:02:a8:e0:c3:34:67:d3:a0 +-----BEGIN CERTIFICATE----- +MIIFRzCCAy+gAwIBAgIRAI4P+UuQcWhlM1T01EQ5t+AwDQYJKoZIhvcNAQELBQAw +PTELMAkGA1UEBhMCVVMxEjAQBgNVBAoTCUNlcnRhaW5seTEaMBgGA1UEAxMRQ2Vy +dGFpbmx5IFJvb3QgUjEwHhcNMjEwNDAxMDAwMDAwWhcNNDYwNDAxMDAwMDAwWjA9 +MQswCQYDVQQGEwJVUzESMBAGA1UEChMJQ2VydGFpbmx5MRowGAYDVQQDExFDZXJ0 +YWlubHkgUm9vdCBSMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANA2 +1B/q3avk0bbm+yLA3RMNansiExyXPGhjZjKcA7WNpIGD2ngwEc/csiu+kr+O5MQT +vqRoTNoCaBZ0vrLdBORrKt03H2As2/X3oXyVtwxwhi7xOu9S98zTm/mLvg7fMbed +aFySpvXl8wo0tf97ouSHocavFwDvA5HtqRxOcT3Si2yJ9HiG5mpJoM610rCrm/b0 +1C7jcvk2xusVtyWMOvwlDbMicyF0yEqWYZL1LwsYpfSt4u5BvQF5+paMjRcCMLT5 +r3gajLQ2EBAHBXDQ9DGQilHFhiZ5shGIXsXwClTNSaa/ApzSRKft43jvRl5tcdF5 +cBxGX1HpyTfcX35pe0HfNEXgO4T0oYoKNp43zGJS4YkNKPl6I7ENPT2a/Z2B7yyQ +wHtETrtJ4A5KVpK8y7XdeReJkd5hiXSSqOMyhb5OhaRLWcsrxXiOcVTQAjeZjOVJ +6uBUcqQRBi8LjMFbvrWhsFNunLhgkR9Za/kt9JQKl7XsxXYDVBtlUrpMklZRNaBA +2CnbrlJ2Oy0wQJuK0EJWtLeIAaSHO1OWzaMWj/Nmqhexx2DgwUMFDO6bW2BvBlyH +Wyf5QBGenDPBt+U1VwV/J84XIIwc/PH72jEpSe31C4SnT8H2TsIonPru4K8H+zMR +eiFPCyEQtkA6qyI6BJyLm4SGcprSp6XEtHWRqSsjAgMBAAGjQjBAMA4GA1UdDwEB +/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTgqj8ljZ9EXME66C6u +d0yEPmcM9DANBgkqhkiG9w0BAQsFAAOCAgEAuVevuBLaV4OPaAszHQNTVfSVcOQr +PbA56/qJYv331hgELyE03fFo8NWWWt7CgKPBjcZq91l3rhVkz1t5BXdm6ozTaw3d +8VkswTOlMIAVRQdFGjEitpIAq5lNOo93r6kiyi9jyhXWx8bwPWz8HA2YEGGeEaIi +1wrykXprOQ4vMMM2SZ/g6Q8CRFA3lFV96p/2O7qUpUzpvD5RtOjKkjZUbVwlKNrd +rRT90+7iIgXr0PK3aBLXWopBGsaSpVo7Y0VPv+E6dyIvXL9G+VoDhRNCX8reU9di +taY1BMJH/5n9hN9czulegChB8n3nHpDYT3Y+gjwN/KUD+nsa2UUeYNrEjvn8K8l7 +lcUq/6qJ34IxD3L/DCfXCh5WAFAeDJDBlrXYFIW7pw0WwfgHJBu6haEaBQmAupVj +yTrsJZ9/nbqkRxWbRHDxakvWOF5D8xh+UG7pWijmZeZ3Gzr9Hb4DJqPb1OG7fpYn +Kx3upPvaJVQTA945xsMfTZDsjxtK0hzthZU4UHlG1sGQUDGpXJpuHfUzVounmdLy +yCwzk5Iwx06MZTMQZBf9JBeW0Y3COmor6xOLRPIh80oat3df1+2IpHLlOR+Vnb5n +wXARPbv0+Em34yaXOp/SX3z7wJl8OSngex2/DaeP0ik0biQVy96QXr8axGbqwua6 +OV+KmalBWQewLK8= +-----END CERTIFICATE----- + +# Issuer: CN=Certainly Root E1 O=Certainly +# Subject: CN=Certainly Root E1 O=Certainly +# Label: "Certainly Root E1" +# Serial: 8168531406727139161245376702891150584 +# MD5 Fingerprint: 0a:9e:ca:cd:3e:52:50:c6:36:f3:4b:a3:ed:a7:53:e9 +# SHA1 Fingerprint: f9:e1:6d:dc:01:89:cf:d5:82:45:63:3e:c5:37:7d:c2:eb:93:6f:2b +# SHA256 Fingerprint: b4:58:5f:22:e4:ac:75:6a:4e:86:12:a1:36:1c:5d:9d:03:1a:93:fd:84:fe:bb:77:8f:a3:06:8b:0f:c4:2d:c2 +-----BEGIN CERTIFICATE----- +MIIB9zCCAX2gAwIBAgIQBiUzsUcDMydc+Y2aub/M+DAKBggqhkjOPQQDAzA9MQsw +CQYDVQQGEwJVUzESMBAGA1UEChMJQ2VydGFpbmx5MRowGAYDVQQDExFDZXJ0YWlu +bHkgUm9vdCBFMTAeFw0yMTA0MDEwMDAwMDBaFw00NjA0MDEwMDAwMDBaMD0xCzAJ +BgNVBAYTAlVTMRIwEAYDVQQKEwlDZXJ0YWlubHkxGjAYBgNVBAMTEUNlcnRhaW5s +eSBSb290IEUxMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE3m/4fxzf7flHh4axpMCK ++IKXgOqPyEpeKn2IaKcBYhSRJHpcnqMXfYqGITQYUBsQ3tA3SybHGWCA6TS9YBk2 +QNYphwk8kXr2vBMj3VlOBF7PyAIcGFPBMdjaIOlEjeR2o0IwQDAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU8ygYy2R17ikq6+2uI1g4 +hevIIgcwCgYIKoZIzj0EAwMDaAAwZQIxALGOWiDDshliTd6wT99u0nCK8Z9+aozm +ut6Dacpps6kFtZaSF4fC0urQe87YQVt8rgIwRt7qy12a7DLCZRawTDBcMPPaTnOG +BtjOiQRINzf43TNRnXCve1XYAS59BWQOhriR +-----END CERTIFICATE----- + +# Issuer: CN=Security Communication ECC RootCA1 O=SECOM Trust Systems CO.,LTD. +# Subject: CN=Security Communication ECC RootCA1 O=SECOM Trust Systems CO.,LTD. +# Label: "Security Communication ECC RootCA1" +# Serial: 15446673492073852651 +# MD5 Fingerprint: 7e:43:b0:92:68:ec:05:43:4c:98:ab:5d:35:2e:7e:86 +# SHA1 Fingerprint: b8:0e:26:a9:bf:d2:b2:3b:c0:ef:46:c9:ba:c7:bb:f6:1d:0d:41:41 +# SHA256 Fingerprint: e7:4f:bd:a5:5b:d5:64:c4:73:a3:6b:44:1a:a7:99:c8:a6:8e:07:74:40:e8:28:8b:9f:a1:e5:0e:4b:ba:ca:11 +-----BEGIN CERTIFICATE----- +MIICODCCAb6gAwIBAgIJANZdm7N4gS7rMAoGCCqGSM49BAMDMGExCzAJBgNVBAYT +AkpQMSUwIwYDVQQKExxTRUNPTSBUcnVzdCBTeXN0ZW1zIENPLixMVEQuMSswKQYD +VQQDEyJTZWN1cml0eSBDb21tdW5pY2F0aW9uIEVDQyBSb290Q0ExMB4XDTE2MDYx +NjA1MTUyOFoXDTM4MDExODA1MTUyOFowYTELMAkGA1UEBhMCSlAxJTAjBgNVBAoT +HFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKzApBgNVBAMTIlNlY3VyaXR5 +IENvbW11bmljYXRpb24gRUNDIFJvb3RDQTEwdjAQBgcqhkjOPQIBBgUrgQQAIgNi +AASkpW9gAwPDvTH00xecK4R1rOX9PVdu12O/5gSJko6BnOPpR27KkBLIE+Cnnfdl +dB9sELLo5OnvbYUymUSxXv3MdhDYW72ixvnWQuRXdtyQwjWpS4g8EkdtXP9JTxpK +ULGjQjBAMB0GA1UdDgQWBBSGHOf+LaVKiwj+KBH6vqNm+GBZLzAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjAVXUI9/Lbu +9zuxNuie9sRGKEkz0FhDKmMpzE2xtHqiuQ04pV1IKv3LsnNdo4gIxwwCMQDAqy0O +be0YottT6SXbVQjgUMzfRGEWgqtJsLKB7HOHeLRMsmIbEvoWTSVLY70eN9k= +-----END CERTIFICATE----- + +# Issuer: CN=BJCA Global Root CA1 O=BEIJING CERTIFICATE AUTHORITY +# Subject: CN=BJCA Global Root CA1 O=BEIJING CERTIFICATE AUTHORITY +# Label: "BJCA Global Root CA1" +# Serial: 113562791157148395269083148143378328608 +# MD5 Fingerprint: 42:32:99:76:43:33:36:24:35:07:82:9b:28:f9:d0:90 +# SHA1 Fingerprint: d5:ec:8d:7b:4c:ba:79:f4:e7:e8:cb:9d:6b:ae:77:83:10:03:21:6a +# SHA256 Fingerprint: f3:89:6f:88:fe:7c:0a:88:27:66:a7:fa:6a:d2:74:9f:b5:7a:7f:3e:98:fb:76:9c:1f:a7:b0:9c:2c:44:d5:ae +-----BEGIN CERTIFICATE----- +MIIFdDCCA1ygAwIBAgIQVW9l47TZkGobCdFsPsBsIDANBgkqhkiG9w0BAQsFADBU +MQswCQYDVQQGEwJDTjEmMCQGA1UECgwdQkVJSklORyBDRVJUSUZJQ0FURSBBVVRI +T1JJVFkxHTAbBgNVBAMMFEJKQ0EgR2xvYmFsIFJvb3QgQ0ExMB4XDTE5MTIxOTAz +MTYxN1oXDTQ0MTIxMjAzMTYxN1owVDELMAkGA1UEBhMCQ04xJjAkBgNVBAoMHUJF +SUpJTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZMR0wGwYDVQQDDBRCSkNBIEdsb2Jh +bCBSb290IENBMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAPFmCL3Z +xRVhy4QEQaVpN3cdwbB7+sN3SJATcmTRuHyQNZ0YeYjjlwE8R4HyDqKYDZ4/N+AZ +spDyRhySsTphzvq3Rp4Dhtczbu33RYx2N95ulpH3134rhxfVizXuhJFyV9xgw8O5 +58dnJCNPYwpj9mZ9S1WnP3hkSWkSl+BMDdMJoDIwOvqfwPKcxRIqLhy1BDPapDgR +at7GGPZHOiJBhyL8xIkoVNiMpTAK+BcWyqw3/XmnkRd4OJmtWO2y3syJfQOcs4ll +5+M7sSKGjwZteAf9kRJ/sGsciQ35uMt0WwfCyPQ10WRjeulumijWML3mG90Vr4Tq +nMfK9Q7q8l0ph49pczm+LiRvRSGsxdRpJQaDrXpIhRMsDQa4bHlW/KNnMoH1V6XK +V0Jp6VwkYe/iMBhORJhVb3rCk9gZtt58R4oRTklH2yiUAguUSiz5EtBP6DF+bHq/ +pj+bOT0CFqMYs2esWz8sgytnOYFcuX6U1WTdno9uruh8W7TXakdI136z1C2OVnZO +z2nxbkRs1CTqjSShGL+9V/6pmTW12xB3uD1IutbB5/EjPtffhZ0nPNRAvQoMvfXn +jSXWgXSHRtQpdaJCbPdzied9v3pKH9MiyRVVz99vfFXQpIsHETdfg6YmV6YBW37+ +WGgHqel62bno/1Afq8K0wM7o6v0PvY1NuLxxAgMBAAGjQjBAMB0GA1UdDgQWBBTF +7+3M2I0hxkjk49cULqcWk+WYATAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE +AwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAUoKsITQfI/Ki2Pm4rzc2IInRNwPWaZ+4 +YRC6ojGYWUfo0Q0lHhVBDOAqVdVXUsv45Mdpox1NcQJeXyFFYEhcCY5JEMEE3Kli +awLwQ8hOnThJdMkycFRtwUf8jrQ2ntScvd0g1lPJGKm1Vrl2i5VnZu69mP6u775u ++2D2/VnGKhs/I0qUJDAnyIm860Qkmss9vk/Ves6OF8tiwdneHg56/0OGNFK8YT88 +X7vZdrRTvJez/opMEi4r89fO4aL/3Xtw+zuhTaRjAv04l5U/BXCga99igUOLtFkN +SoxUnMW7gZ/NfaXvCyUeOiDbHPwfmGcCCtRzRBPbUYQaVQNW4AB+dAb/OMRyHdOo +P2gxXdMJxy6MW2Pg6Nwe0uxhHvLe5e/2mXZgLR6UcnHGCyoyx5JO1UbXHfmpGQrI ++pXObSOYqgs4rZpWDW+N8TEAiMEXnM0ZNjX+VVOg4DwzX5Ze4jLp3zO7Bkqp2IRz +znfSxqxx4VyjHQy7Ct9f4qNx2No3WqB4K/TUfet27fJhcKVlmtOJNBir+3I+17Q9 +eVzYH6Eze9mCUAyTF6ps3MKCuwJXNq+YJyo5UOGwifUll35HaBC07HPKs5fRJNz2 +YqAo07WjuGS3iGJCz51TzZm+ZGiPTx4SSPfSKcOYKMryMguTjClPPGAyzQWWYezy +r/6zcCwupvI= +-----END CERTIFICATE----- + +# Issuer: CN=BJCA Global Root CA2 O=BEIJING CERTIFICATE AUTHORITY +# Subject: CN=BJCA Global Root CA2 O=BEIJING CERTIFICATE AUTHORITY +# Label: "BJCA Global Root CA2" +# Serial: 58605626836079930195615843123109055211 +# MD5 Fingerprint: 5e:0a:f6:47:5f:a6:14:e8:11:01:95:3f:4d:01:eb:3c +# SHA1 Fingerprint: f4:27:86:eb:6e:b8:6d:88:31:67:02:fb:ba:66:a4:53:00:aa:7a:a6 +# SHA256 Fingerprint: 57:4d:f6:93:1e:27:80:39:66:7b:72:0a:fd:c1:60:0f:c2:7e:b6:6d:d3:09:29:79:fb:73:85:64:87:21:28:82 +-----BEGIN CERTIFICATE----- +MIICJTCCAaugAwIBAgIQLBcIfWQqwP6FGFkGz7RK6zAKBggqhkjOPQQDAzBUMQsw +CQYDVQQGEwJDTjEmMCQGA1UECgwdQkVJSklORyBDRVJUSUZJQ0FURSBBVVRIT1JJ +VFkxHTAbBgNVBAMMFEJKQ0EgR2xvYmFsIFJvb3QgQ0EyMB4XDTE5MTIxOTAzMTgy +MVoXDTQ0MTIxMjAzMTgyMVowVDELMAkGA1UEBhMCQ04xJjAkBgNVBAoMHUJFSUpJ +TkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZMR0wGwYDVQQDDBRCSkNBIEdsb2JhbCBS +b290IENBMjB2MBAGByqGSM49AgEGBSuBBAAiA2IABJ3LgJGNU2e1uVCxA/jlSR9B +IgmwUVJY1is0j8USRhTFiy8shP8sbqjV8QnjAyEUxEM9fMEsxEtqSs3ph+B99iK+ ++kpRuDCK/eHeGBIK9ke35xe/J4rUQUyWPGCWwf0VHKNCMEAwHQYDVR0OBBYEFNJK +sVF/BvDRgh9Obl+rg/xI1LCRMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD +AgEGMAoGCCqGSM49BAMDA2gAMGUCMBq8W9f+qdJUDkpd0m2xQNz0Q9XSSpkZElaA +94M04TVOSG0ED1cxMDAtsaqdAzjbBgIxAMvMh1PLet8gUXOQwKhbYdDFUDn9hf7B +43j4ptZLvZuHjw/l1lOWqzzIQNph91Oj9w== +-----END CERTIFICATE----- + +# Issuer: CN=Sectigo Public Server Authentication Root E46 O=Sectigo Limited +# Subject: CN=Sectigo Public Server Authentication Root E46 O=Sectigo Limited +# Label: "Sectigo Public Server Authentication Root E46" +# Serial: 88989738453351742415770396670917916916 +# MD5 Fingerprint: 28:23:f8:b2:98:5c:37:16:3b:3e:46:13:4e:b0:b3:01 +# SHA1 Fingerprint: ec:8a:39:6c:40:f0:2e:bc:42:75:d4:9f:ab:1c:1a:5b:67:be:d2:9a +# SHA256 Fingerprint: c9:0f:26:f0:fb:1b:40:18:b2:22:27:51:9b:5c:a2:b5:3e:2c:a5:b3:be:5c:f1:8e:fe:1b:ef:47:38:0c:53:83 +-----BEGIN CERTIFICATE----- +MIICOjCCAcGgAwIBAgIQQvLM2htpN0RfFf51KBC49DAKBggqhkjOPQQDAzBfMQsw +CQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQDEy1T +ZWN0aWdvIFB1YmxpYyBTZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBFNDYwHhcN +MjEwMzIyMDAwMDAwWhcNNDYwMzIxMjM1OTU5WjBfMQswCQYDVQQGEwJHQjEYMBYG +A1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQDEy1TZWN0aWdvIFB1YmxpYyBT +ZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBFNDYwdjAQBgcqhkjOPQIBBgUrgQQA +IgNiAAR2+pmpbiDt+dd34wc7qNs9Xzjoq1WmVk/WSOrsfy2qw7LFeeyZYX8QeccC +WvkEN/U0NSt3zn8gj1KjAIns1aeibVvjS5KToID1AZTc8GgHHs3u/iVStSBDHBv+ +6xnOQ6OjQjBAMB0GA1UdDgQWBBTRItpMWfFLXyY4qp3W7usNw/upYTAOBgNVHQ8B +Af8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNnADBkAjAn7qRa +qCG76UeXlImldCBteU/IvZNeWBj7LRoAasm4PdCkT0RHlAFWovgzJQxC36oCMB3q +4S6ILuH5px0CMk7yn2xVdOOurvulGu7t0vzCAxHrRVxgED1cf5kDW21USAGKcw== +-----END CERTIFICATE----- + +# Issuer: CN=Sectigo Public Server Authentication Root R46 O=Sectigo Limited +# Subject: CN=Sectigo Public Server Authentication Root R46 O=Sectigo Limited +# Label: "Sectigo Public Server Authentication Root R46" +# Serial: 156256931880233212765902055439220583700 +# MD5 Fingerprint: 32:10:09:52:00:d5:7e:6c:43:df:15:c0:b1:16:93:e5 +# SHA1 Fingerprint: ad:98:f9:f3:e4:7d:75:3b:65:d4:82:b3:a4:52:17:bb:6e:f5:e4:38 +# SHA256 Fingerprint: 7b:b6:47:a6:2a:ee:ac:88:bf:25:7a:a5:22:d0:1f:fe:a3:95:e0:ab:45:c7:3f:93:f6:56:54:ec:38:f2:5a:06 +-----BEGIN CERTIFICATE----- +MIIFijCCA3KgAwIBAgIQdY39i658BwD6qSWn4cetFDANBgkqhkiG9w0BAQwFADBf +MQswCQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQD +Ey1TZWN0aWdvIFB1YmxpYyBTZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBSNDYw +HhcNMjEwMzIyMDAwMDAwWhcNNDYwMzIxMjM1OTU5WjBfMQswCQYDVQQGEwJHQjEY +MBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQDEy1TZWN0aWdvIFB1Ymxp +YyBTZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBSNDYwggIiMA0GCSqGSIb3DQEB +AQUAA4ICDwAwggIKAoICAQCTvtU2UnXYASOgHEdCSe5jtrch/cSV1UgrJnwUUxDa +ef0rty2k1Cz66jLdScK5vQ9IPXtamFSvnl0xdE8H/FAh3aTPaE8bEmNtJZlMKpnz +SDBh+oF8HqcIStw+KxwfGExxqjWMrfhu6DtK2eWUAtaJhBOqbchPM8xQljeSM9xf +iOefVNlI8JhD1mb9nxc4Q8UBUQvX4yMPFF1bFOdLvt30yNoDN9HWOaEhUTCDsG3X +ME6WW5HwcCSrv0WBZEMNvSE6Lzzpng3LILVCJ8zab5vuZDCQOc2TZYEhMbUjUDM3 +IuM47fgxMMxF/mL50V0yeUKH32rMVhlATc6qu/m1dkmU8Sf4kaWD5QazYw6A3OAS +VYCmO2a0OYctyPDQ0RTp5A1NDvZdV3LFOxxHVp3i1fuBYYzMTYCQNFu31xR13NgE +SJ/AwSiItOkcyqex8Va3e0lMWeUgFaiEAin6OJRpmkkGj80feRQXEgyDet4fsZfu ++Zd4KKTIRJLpfSYFplhym3kT2BFfrsU4YjRosoYwjviQYZ4ybPUHNs2iTG7sijbt +8uaZFURww3y8nDnAtOFr94MlI1fZEoDlSfB1D++N6xybVCi0ITz8fAr/73trdf+L +HaAZBav6+CuBQug4urv7qv094PPK306Xlynt8xhW6aWWrL3DkJiy4Pmi1KZHQ3xt +zwIDAQABo0IwQDAdBgNVHQ4EFgQUVnNYZJX5khqwEioEYnmhQBWIIUkwDgYDVR0P +AQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAC9c +mTz8Bl6MlC5w6tIyMY208FHVvArzZJ8HXtXBc2hkeqK5Duj5XYUtqDdFqij0lgVQ +YKlJfp/imTYpE0RHap1VIDzYm/EDMrraQKFz6oOht0SmDpkBm+S8f74TlH7Kph52 +gDY9hAaLMyZlbcp+nv4fjFg4exqDsQ+8FxG75gbMY/qB8oFM2gsQa6H61SilzwZA +Fv97fRheORKkU55+MkIQpiGRqRxOF3yEvJ+M0ejf5lG5Nkc/kLnHvALcWxxPDkjB +JYOcCj+esQMzEhonrPcibCTRAUH4WAP+JWgiH5paPHxsnnVI84HxZmduTILA7rpX +DhjvLpr3Etiga+kFpaHpaPi8TD8SHkXoUsCjvxInebnMMTzD9joiFgOgyY9mpFui +TdaBJQbpdqQACj7LzTWb4OE4y2BThihCQRxEV+ioratF4yUQvNs+ZUH7G6aXD+u5 +dHn5HrwdVw1Hr8Mvn4dGp+smWg9WY7ViYG4A++MnESLn/pmPNPW56MORcr3Ywx65 +LvKRRFHQV80MNNVIIb/bE/FmJUNS0nAiNs2fxBx1IK1jcmMGDw4nztJqDby1ORrp +0XZ60Vzk50lJLVU3aPAaOpg+VBeHVOmmJ1CJeyAvP/+/oYtKR5j/K3tJPsMpRmAY +QqszKbrAKbkTidOIijlBO8n9pu0f9GBj39ItVQGL +-----END CERTIFICATE----- + +# Issuer: CN=SSL.com TLS RSA Root CA 2022 O=SSL Corporation +# Subject: CN=SSL.com TLS RSA Root CA 2022 O=SSL Corporation +# Label: "SSL.com TLS RSA Root CA 2022" +# Serial: 148535279242832292258835760425842727825 +# MD5 Fingerprint: d8:4e:c6:59:30:d8:fe:a0:d6:7a:5a:2c:2c:69:78:da +# SHA1 Fingerprint: ec:2c:83:40:72:af:26:95:10:ff:0e:f2:03:ee:31:70:f6:78:9d:ca +# SHA256 Fingerprint: 8f:af:7d:2e:2c:b4:70:9b:b8:e0:b3:36:66:bf:75:a5:dd:45:b5:de:48:0f:8e:a8:d4:bf:e6:be:bc:17:f2:ed +-----BEGIN CERTIFICATE----- +MIIFiTCCA3GgAwIBAgIQb77arXO9CEDii02+1PdbkTANBgkqhkiG9w0BAQsFADBO +MQswCQYDVQQGEwJVUzEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMSUwIwYDVQQD +DBxTU0wuY29tIFRMUyBSU0EgUm9vdCBDQSAyMDIyMB4XDTIyMDgyNTE2MzQyMloX +DTQ2MDgxOTE2MzQyMVowTjELMAkGA1UEBhMCVVMxGDAWBgNVBAoMD1NTTCBDb3Jw +b3JhdGlvbjElMCMGA1UEAwwcU1NMLmNvbSBUTFMgUlNBIFJvb3QgQ0EgMjAyMjCC +AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANCkCXJPQIgSYT41I57u9nTP +L3tYPc48DRAokC+X94xI2KDYJbFMsBFMF3NQ0CJKY7uB0ylu1bUJPiYYf7ISf5OY +t6/wNr/y7hienDtSxUcZXXTzZGbVXcdotL8bHAajvI9AI7YexoS9UcQbOcGV0ins +S657Lb85/bRi3pZ7QcacoOAGcvvwB5cJOYF0r/c0WRFXCsJbwST0MXMwgsadugL3 +PnxEX4MN8/HdIGkWCVDi1FW24IBydm5MR7d1VVm0U3TZlMZBrViKMWYPHqIbKUBO +L9975hYsLfy/7PO0+r4Y9ptJ1O4Fbtk085zx7AGL0SDGD6C1vBdOSHtRwvzpXGk3 +R2azaPgVKPC506QVzFpPulJwoxJF3ca6TvvC0PeoUidtbnm1jPx7jMEWTO6Af77w +dr5BUxIzrlo4QqvXDz5BjXYHMtWrifZOZ9mxQnUjbvPNQrL8VfVThxc7wDNY8VLS ++YCk8OjwO4s4zKTGkH8PnP2L0aPP2oOnaclQNtVcBdIKQXTbYxE3waWglksejBYS +d66UNHsef8JmAOSqg+qKkK3ONkRN0VHpvB/zagX9wHQfJRlAUW7qglFA35u5CCoG +AtUjHBPW6dvbxrB6y3snm/vg1UYk7RBLY0ulBY+6uB0rpvqR4pJSvezrZ5dtmi2f +gTIFZzL7SAg/2SW4BCUvAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0j +BBgwFoAU+y437uOEeicuzRk1sTN8/9REQrkwHQYDVR0OBBYEFPsuN+7jhHonLs0Z +NbEzfP/UREK5MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAjYlt +hEUY8U+zoO9opMAdrDC8Z2awms22qyIZZtM7QbUQnRC6cm4pJCAcAZli05bg4vsM +QtfhWsSWTVTNj8pDU/0quOr4ZcoBwq1gaAafORpR2eCNJvkLTqVTJXojpBzOCBvf +R4iyrT7gJ4eLSYwfqUdYe5byiB0YrrPRpgqU+tvT5TgKa3kSM/tKWTcWQA673vWJ +DPFs0/dRa1419dvAJuoSc06pkZCmF8NsLzjUo3KUQyxi4U5cMj29TH0ZR6LDSeeW +P4+a0zvkEdiLA9z2tmBVGKaBUfPhqBVq6+AL8BQx1rmMRTqoENjwuSfr98t67wVy +lrXEj5ZzxOhWc5y8aVFjvO9nHEMaX3cZHxj4HCUp+UmZKbaSPaKDN7EgkaibMOlq +bLQjk2UEqxHzDh1TJElTHaE/nUiSEeJ9DU/1172iWD54nR4fK/4huxoTtrEoZP2w +AgDHbICivRZQIA9ygV/MlP+7mea6kMvq+cYMwq7FGc4zoWtcu358NFcXrfA/rs3q +r5nsLFR+jM4uElZI7xc7P0peYNLcdDa8pUNjyw9bowJWCZ4kLOGGgYz+qxcs+sji +Mho6/4UIyYOf8kpIEFR3N+2ivEC+5BB09+Rbu7nzifmPQdjH5FCQNYA+HLhNkNPU +98OwoX6EyneSMSy4kLGCenROmxMmtNVQZlR4rmA= +-----END CERTIFICATE----- + +# Issuer: CN=SSL.com TLS ECC Root CA 2022 O=SSL Corporation +# Subject: CN=SSL.com TLS ECC Root CA 2022 O=SSL Corporation +# Label: "SSL.com TLS ECC Root CA 2022" +# Serial: 26605119622390491762507526719404364228 +# MD5 Fingerprint: 99:d7:5c:f1:51:36:cc:e9:ce:d9:19:2e:77:71:56:c5 +# SHA1 Fingerprint: 9f:5f:d9:1a:54:6d:f5:0c:71:f0:ee:7a:bd:17:49:98:84:73:e2:39 +# SHA256 Fingerprint: c3:2f:fd:9f:46:f9:36:d1:6c:36:73:99:09:59:43:4b:9a:d6:0a:af:bb:9e:7c:f3:36:54:f1:44:cc:1b:a1:43 +-----BEGIN CERTIFICATE----- +MIICOjCCAcCgAwIBAgIQFAP1q/s3ixdAW+JDsqXRxDAKBggqhkjOPQQDAzBOMQsw +CQYDVQQGEwJVUzEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMSUwIwYDVQQDDBxT +U0wuY29tIFRMUyBFQ0MgUm9vdCBDQSAyMDIyMB4XDTIyMDgyNTE2MzM0OFoXDTQ2 +MDgxOTE2MzM0N1owTjELMAkGA1UEBhMCVVMxGDAWBgNVBAoMD1NTTCBDb3Jwb3Jh +dGlvbjElMCMGA1UEAwwcU1NMLmNvbSBUTFMgRUNDIFJvb3QgQ0EgMjAyMjB2MBAG +ByqGSM49AgEGBSuBBAAiA2IABEUpNXP6wrgjzhR9qLFNoFs27iosU8NgCTWyJGYm +acCzldZdkkAZDsalE3D07xJRKF3nzL35PIXBz5SQySvOkkJYWWf9lCcQZIxPBLFN +SeR7T5v15wj4A4j3p8OSSxlUgaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSME +GDAWgBSJjy+j6CugFFR781a4Jl9nOAuc0DAdBgNVHQ4EFgQUiY8vo+groBRUe/NW +uCZfZzgLnNAwDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMDA2gAMGUCMFXjIlbp +15IkWE8elDIPDAI2wv2sdDJO4fscgIijzPvX6yv/N33w7deedWo1dlJF4AIxAMeN +b0Igj762TVntd00pxCAgRWSGOlDGxK0tk/UYfXLtqc/ErFc2KAhl3zx5Zn6g6g== +-----END CERTIFICATE----- + +# Issuer: CN=Atos TrustedRoot Root CA ECC TLS 2021 O=Atos +# Subject: CN=Atos TrustedRoot Root CA ECC TLS 2021 O=Atos +# Label: "Atos TrustedRoot Root CA ECC TLS 2021" +# Serial: 81873346711060652204712539181482831616 +# MD5 Fingerprint: 16:9f:ad:f1:70:ad:79:d6:ed:29:b4:d1:c5:79:70:a8 +# SHA1 Fingerprint: 9e:bc:75:10:42:b3:02:f3:81:f4:f7:30:62:d4:8f:c3:a7:51:b2:dd +# SHA256 Fingerprint: b2:fa:e5:3e:14:cc:d7:ab:92:12:06:47:01:ae:27:9c:1d:89:88:fa:cb:77:5f:a8:a0:08:91:4e:66:39:88:a8 +-----BEGIN CERTIFICATE----- +MIICFTCCAZugAwIBAgIQPZg7pmY9kGP3fiZXOATvADAKBggqhkjOPQQDAzBMMS4w +LAYDVQQDDCVBdG9zIFRydXN0ZWRSb290IFJvb3QgQ0EgRUNDIFRMUyAyMDIxMQ0w +CwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0yMTA0MjIwOTI2MjNaFw00MTA0 +MTcwOTI2MjJaMEwxLjAsBgNVBAMMJUF0b3MgVHJ1c3RlZFJvb3QgUm9vdCBDQSBF +Q0MgVExTIDIwMjExDTALBgNVBAoMBEF0b3MxCzAJBgNVBAYTAkRFMHYwEAYHKoZI +zj0CAQYFK4EEACIDYgAEloZYKDcKZ9Cg3iQZGeHkBQcfl+3oZIK59sRxUM6KDP/X +tXa7oWyTbIOiaG6l2b4siJVBzV3dscqDY4PMwL502eCdpO5KTlbgmClBk1IQ1SQ4 +AjJn8ZQSb+/Xxd4u/RmAo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR2 +KCXWfeBmmnoJsmo7jjPXNtNPojAOBgNVHQ8BAf8EBAMCAYYwCgYIKoZIzj0EAwMD +aAAwZQIwW5kp85wxtolrbNa9d+F851F+uDrNozZffPc8dz7kUK2o59JZDCaOMDtu +CCrCp1rIAjEAmeMM56PDr9NJLkaCI2ZdyQAUEv049OGYa3cpetskz2VAv9LcjBHo +9H1/IISpQuQo +-----END CERTIFICATE----- + +# Issuer: CN=Atos TrustedRoot Root CA RSA TLS 2021 O=Atos +# Subject: CN=Atos TrustedRoot Root CA RSA TLS 2021 O=Atos +# Label: "Atos TrustedRoot Root CA RSA TLS 2021" +# Serial: 111436099570196163832749341232207667876 +# MD5 Fingerprint: d4:d3:46:b8:9a:c0:9c:76:5d:9e:3a:c3:b9:99:31:d2 +# SHA1 Fingerprint: 18:52:3b:0d:06:37:e4:d6:3a:df:23:e4:98:fb:5b:16:fb:86:74:48 +# SHA256 Fingerprint: 81:a9:08:8e:a5:9f:b3:64:c5:48:a6:f8:55:59:09:9b:6f:04:05:ef:bf:18:e5:32:4e:c9:f4:57:ba:00:11:2f +-----BEGIN CERTIFICATE----- +MIIFZDCCA0ygAwIBAgIQU9XP5hmTC/srBRLYwiqipDANBgkqhkiG9w0BAQwFADBM +MS4wLAYDVQQDDCVBdG9zIFRydXN0ZWRSb290IFJvb3QgQ0EgUlNBIFRMUyAyMDIx +MQ0wCwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0yMTA0MjIwOTIxMTBaFw00 +MTA0MTcwOTIxMDlaMEwxLjAsBgNVBAMMJUF0b3MgVHJ1c3RlZFJvb3QgUm9vdCBD +QSBSU0EgVExTIDIwMjExDTALBgNVBAoMBEF0b3MxCzAJBgNVBAYTAkRFMIICIjAN +BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtoAOxHm9BYx9sKOdTSJNy/BBl01Z +4NH+VoyX8te9j2y3I49f1cTYQcvyAh5x5en2XssIKl4w8i1mx4QbZFc4nXUtVsYv +Ye+W/CBGvevUez8/fEc4BKkbqlLfEzfTFRVOvV98r61jx3ncCHvVoOX3W3WsgFWZ +kmGbzSoXfduP9LVq6hdKZChmFSlsAvFr1bqjM9xaZ6cF4r9lthawEO3NUDPJcFDs +GY6wx/J0W2tExn2WuZgIWWbeKQGb9Cpt0xU6kGpn8bRrZtkh68rZYnxGEFzedUln +nkL5/nWpo63/dgpnQOPF943HhZpZnmKaau1Fh5hnstVKPNe0OwANwI8f4UDErmwh +3El+fsqyjW22v5MvoVw+j8rtgI5Y4dtXz4U2OLJxpAmMkokIiEjxQGMYsluMWuPD +0xeqqxmjLBvk1cbiZnrXghmmOxYsL3GHX0WelXOTwkKBIROW1527k2gV+p2kHYzy +geBYBr3JtuP2iV2J+axEoctr+hbxx1A9JNr3w+SH1VbxT5Aw+kUJWdo0zuATHAR8 +ANSbhqRAvNncTFd+rrcztl524WWLZt+NyteYr842mIycg5kDcPOvdO3GDjbnvezB +c6eUWsuSZIKmAMFwoW4sKeFYV+xafJlrJaSQOoD0IJ2azsct+bJLKZWD6TWNp0lI +pw9MGZHQ9b8Q4HECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU +dEmZ0f+0emhFdcN+tNzMzjkz2ggwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB +DAUAA4ICAQAjQ1MkYlxt/T7Cz1UAbMVWiLkO3TriJQ2VSpfKgInuKs1l+NsW4AmS +4BjHeJi78+xCUvuppILXTdiK/ORO/auQxDh1MoSf/7OwKwIzNsAQkG8dnK/haZPs +o0UvFJ/1TCplQ3IM98P4lYsU84UgYt1UU90s3BiVaU+DR3BAM1h3Egyi61IxHkzJ +qM7F78PRreBrAwA0JrRUITWXAdxfG/F851X6LWh3e9NpzNMOa7pNdkTWwhWaJuyw +xfW70Xp0wmzNxbVe9kzmWy2B27O3Opee7c9GslA9hGCZcbUztVdF5kJHdWoOsAgM +rr3e97sPWD2PAzHoPYJQyi9eDF20l74gNAf0xBLh7tew2VktafcxBPTy+av5EzH4 +AXcOPUIjJsyacmdRIXrMPIWo6iFqO9taPKU0nprALN+AnCng33eU0aKAQv9qTFsR +0PXNor6uzFFcw9VUewyu1rkGd4Di7wcaaMxZUa1+XGdrudviB0JbuAEFWDlN5LuY +o7Ey7Nmj1m+UI/87tyll5gfp77YZ6ufCOB0yiJA8EytuzO+rdwY0d4RPcuSBhPm5 +dDTedk+SKlOxJTnbPP/lPqYO5Wue/9vsL3SD3460s6neFE3/MaNFcyT6lSnMEpcE +oji2jbDwN/zIIX8/syQbPYtuzE2wFg2WHYMfRsCbvUOZ58SWLs5fyQ== +-----END CERTIFICATE----- + +# Issuer: CN=TrustAsia Global Root CA G3 O=TrustAsia Technologies, Inc. +# Subject: CN=TrustAsia Global Root CA G3 O=TrustAsia Technologies, Inc. +# Label: "TrustAsia Global Root CA G3" +# Serial: 576386314500428537169965010905813481816650257167 +# MD5 Fingerprint: 30:42:1b:b7:bb:81:75:35:e4:16:4f:53:d2:94:de:04 +# SHA1 Fingerprint: 63:cf:b6:c1:27:2b:56:e4:88:8e:1c:23:9a:b6:2e:81:47:24:c3:c7 +# SHA256 Fingerprint: e0:d3:22:6a:eb:11:63:c2:e4:8f:f9:be:3b:50:b4:c6:43:1b:e7:bb:1e:ac:c5:c3:6b:5d:5e:c5:09:03:9a:08 +-----BEGIN CERTIFICATE----- +MIIFpTCCA42gAwIBAgIUZPYOZXdhaqs7tOqFhLuxibhxkw8wDQYJKoZIhvcNAQEM +BQAwWjELMAkGA1UEBhMCQ04xJTAjBgNVBAoMHFRydXN0QXNpYSBUZWNobm9sb2dp +ZXMsIEluYy4xJDAiBgNVBAMMG1RydXN0QXNpYSBHbG9iYWwgUm9vdCBDQSBHMzAe +Fw0yMTA1MjAwMjEwMTlaFw00NjA1MTkwMjEwMTlaMFoxCzAJBgNVBAYTAkNOMSUw +IwYDVQQKDBxUcnVzdEFzaWEgVGVjaG5vbG9naWVzLCBJbmMuMSQwIgYDVQQDDBtU +cnVzdEFzaWEgR2xvYmFsIFJvb3QgQ0EgRzMwggIiMA0GCSqGSIb3DQEBAQUAA4IC +DwAwggIKAoICAQDAMYJhkuSUGwoqZdC+BqmHO1ES6nBBruL7dOoKjbmzTNyPtxNS +T1QY4SxzlZHFZjtqz6xjbYdT8PfxObegQ2OwxANdV6nnRM7EoYNl9lA+sX4WuDqK +AtCWHwDNBSHvBm3dIZwZQ0WhxeiAysKtQGIXBsaqvPPW5vxQfmZCHzyLpnl5hkA1 +nyDvP+uLRx+PjsXUjrYsyUQE49RDdT/VP68czH5GX6zfZBCK70bwkPAPLfSIC7Ep +qq+FqklYqL9joDiR5rPmd2jE+SoZhLsO4fWvieylL1AgdB4SQXMeJNnKziyhWTXA +yB1GJ2Faj/lN03J5Zh6fFZAhLf3ti1ZwA0pJPn9pMRJpxx5cynoTi+jm9WAPzJMs +hH/x/Gr8m0ed262IPfN2dTPXS6TIi/n1Q1hPy8gDVI+lhXgEGvNz8teHHUGf59gX +zhqcD0r83ERoVGjiQTz+LISGNzzNPy+i2+f3VANfWdP3kXjHi3dqFuVJhZBFcnAv +kV34PmVACxmZySYgWmjBNb9Pp1Hx2BErW+Canig7CjoKH8GB5S7wprlppYiU5msT +f9FkPz2ccEblooV7WIQn3MSAPmeamseaMQ4w7OYXQJXZRe0Blqq/DPNL0WP3E1jA +uPP6Z92bfW1K/zJMtSU7/xxnD4UiWQWRkUF3gdCFTIcQcf+eQxuulXUtgQIDAQAB +o2MwYTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFEDk5PIj7zjKsK5Xf/Ih +MBY027ySMB0GA1UdDgQWBBRA5OTyI+84yrCuV3/yITAWNNu8kjAOBgNVHQ8BAf8E +BAMCAQYwDQYJKoZIhvcNAQEMBQADggIBACY7UeFNOPMyGLS0XuFlXsSUT9SnYaP4 +wM8zAQLpw6o1D/GUE3d3NZ4tVlFEbuHGLige/9rsR82XRBf34EzC4Xx8MnpmyFq2 +XFNFV1pF1AWZLy4jVe5jaN/TG3inEpQGAHUNcoTpLrxaatXeL1nHo+zSh2bbt1S1 +JKv0Q3jbSwTEb93mPmY+KfJLaHEih6D4sTNjduMNhXJEIlU/HHzp/LgV6FL6qj6j +ITk1dImmasI5+njPtqzn59ZW/yOSLlALqbUHM/Q4X6RJpstlcHboCoWASzY9M/eV +VHUl2qzEc4Jl6VL1XP04lQJqaTDFHApXB64ipCz5xUG3uOyfT0gA+QEEVcys+TIx +xHWVBqB/0Y0n3bOppHKH/lmLmnp0Ft0WpWIp6zqW3IunaFnT63eROfjXy9mPX1on +AX1daBli2MjN9LdyR75bl87yraKZk62Uy5P2EgmVtqvXO9A/EcswFi55gORngS1d +7XB4tmBZrOFdRWOPyN9yaFvqHbgB8X7754qz41SgOAngPN5C8sLtLpvzHzW2Ntjj +gKGLzZlkD8Kqq7HK9W+eQ42EVJmzbsASZthwEPEGNTNDqJwuuhQxzhB/HIbjj9LV ++Hfsm6vxL2PZQl/gZ4FkkfGXL/xuJvYz+NO1+MRiqzFRJQJ6+N1rZdVtTTDIZbpo +FGWsJwt0ivKH +-----END CERTIFICATE----- + +# Issuer: CN=TrustAsia Global Root CA G4 O=TrustAsia Technologies, Inc. +# Subject: CN=TrustAsia Global Root CA G4 O=TrustAsia Technologies, Inc. +# Label: "TrustAsia Global Root CA G4" +# Serial: 451799571007117016466790293371524403291602933463 +# MD5 Fingerprint: 54:dd:b2:d7:5f:d8:3e:ed:7c:e0:0b:2e:cc:ed:eb:eb +# SHA1 Fingerprint: 57:73:a5:61:5d:80:b2:e6:ac:38:82:fc:68:07:31:ac:9f:b5:92:5a +# SHA256 Fingerprint: be:4b:56:cb:50:56:c0:13:6a:52:6d:f4:44:50:8d:aa:36:a0:b5:4f:42:e4:ac:38:f7:2a:f4:70:e4:79:65:4c +-----BEGIN CERTIFICATE----- +MIICVTCCAdygAwIBAgIUTyNkuI6XY57GU4HBdk7LKnQV1tcwCgYIKoZIzj0EAwMw +WjELMAkGA1UEBhMCQ04xJTAjBgNVBAoMHFRydXN0QXNpYSBUZWNobm9sb2dpZXMs +IEluYy4xJDAiBgNVBAMMG1RydXN0QXNpYSBHbG9iYWwgUm9vdCBDQSBHNDAeFw0y +MTA1MjAwMjEwMjJaFw00NjA1MTkwMjEwMjJaMFoxCzAJBgNVBAYTAkNOMSUwIwYD +VQQKDBxUcnVzdEFzaWEgVGVjaG5vbG9naWVzLCBJbmMuMSQwIgYDVQQDDBtUcnVz +dEFzaWEgR2xvYmFsIFJvb3QgQ0EgRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATx +s8045CVD5d4ZCbuBeaIVXxVjAd7Cq92zphtnS4CDr5nLrBfbK5bKfFJV4hrhPVbw +LxYI+hW8m7tH5j/uqOFMjPXTNvk4XatwmkcN4oFBButJ+bAp3TPsUKV/eSm4IJij +YzBhMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUpbtKl86zK3+kMd6Xg1mD +pm9xy94wHQYDVR0OBBYEFKW7SpfOsyt/pDHel4NZg6ZvccveMA4GA1UdDwEB/wQE +AwIBBjAKBggqhkjOPQQDAwNnADBkAjBe8usGzEkxn0AAbbd+NvBNEU/zy4k6LHiR +UKNbwMp1JvK/kF0LgoxgKJ/GcJpo5PECMFxYDlZ2z1jD1xCMuo6u47xkdUfFVZDj +/bpV6wfEU6s3qe4hsiFbYI89MvHVI5TWWA== +-----END CERTIFICATE----- + +# Issuer: CN=Telekom Security TLS ECC Root 2020 O=Deutsche Telekom Security GmbH +# Subject: CN=Telekom Security TLS ECC Root 2020 O=Deutsche Telekom Security GmbH +# Label: "Telekom Security TLS ECC Root 2020" +# Serial: 72082518505882327255703894282316633856 +# MD5 Fingerprint: c1:ab:fe:6a:10:2c:03:8d:bc:1c:22:32:c0:85:a7:fd +# SHA1 Fingerprint: c0:f8:96:c5:a9:3b:01:06:21:07:da:18:42:48:bc:e9:9d:88:d5:ec +# SHA256 Fingerprint: 57:8a:f4:de:d0:85:3f:4e:59:98:db:4a:ea:f9:cb:ea:8d:94:5f:60:b6:20:a3:8d:1a:3c:13:b2:bc:7b:a8:e1 +-----BEGIN CERTIFICATE----- +MIICQjCCAcmgAwIBAgIQNjqWjMlcsljN0AFdxeVXADAKBggqhkjOPQQDAzBjMQsw +CQYDVQQGEwJERTEnMCUGA1UECgweRGV1dHNjaGUgVGVsZWtvbSBTZWN1cml0eSBH +bWJIMSswKQYDVQQDDCJUZWxla29tIFNlY3VyaXR5IFRMUyBFQ0MgUm9vdCAyMDIw +MB4XDTIwMDgyNTA3NDgyMFoXDTQ1MDgyNTIzNTk1OVowYzELMAkGA1UEBhMCREUx +JzAlBgNVBAoMHkRldXRzY2hlIFRlbGVrb20gU2VjdXJpdHkgR21iSDErMCkGA1UE +AwwiVGVsZWtvbSBTZWN1cml0eSBUTFMgRUNDIFJvb3QgMjAyMDB2MBAGByqGSM49 +AgEGBSuBBAAiA2IABM6//leov9Wq9xCazbzREaK9Z0LMkOsVGJDZos0MKiXrPk/O +tdKPD/M12kOLAoC+b1EkHQ9rK8qfwm9QMuU3ILYg/4gND21Ju9sGpIeQkpT0CdDP +f8iAC8GXs7s1J8nCG6NCMEAwHQYDVR0OBBYEFONyzG6VmUex5rNhTNHLq+O6zd6f +MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMAoGCCqGSM49BAMDA2cA +MGQCMHVSi7ekEE+uShCLsoRbQuHmKjYC2qBuGT8lv9pZMo7k+5Dck2TOrbRBR2Di +z6fLHgIwN0GMZt9Ba9aDAEH9L1r3ULRn0SyocddDypwnJJGDSA3PzfdUga/sf+Rn +27iQ7t0l +-----END CERTIFICATE----- + +# Issuer: CN=Telekom Security TLS RSA Root 2023 O=Deutsche Telekom Security GmbH +# Subject: CN=Telekom Security TLS RSA Root 2023 O=Deutsche Telekom Security GmbH +# Label: "Telekom Security TLS RSA Root 2023" +# Serial: 44676229530606711399881795178081572759 +# MD5 Fingerprint: bf:5b:eb:54:40:cd:48:71:c4:20:8d:7d:de:0a:42:f2 +# SHA1 Fingerprint: 54:d3:ac:b3:bd:57:56:f6:85:9d:ce:e5:c3:21:e2:d4:ad:83:d0:93 +# SHA256 Fingerprint: ef:c6:5c:ad:bb:59:ad:b6:ef:e8:4d:a2:23:11:b3:56:24:b7:1b:3b:1e:a0:da:8b:66:55:17:4e:c8:97:86:46 +-----BEGIN CERTIFICATE----- +MIIFszCCA5ugAwIBAgIQIZxULej27HF3+k7ow3BXlzANBgkqhkiG9w0BAQwFADBj +MQswCQYDVQQGEwJERTEnMCUGA1UECgweRGV1dHNjaGUgVGVsZWtvbSBTZWN1cml0 +eSBHbWJIMSswKQYDVQQDDCJUZWxla29tIFNlY3VyaXR5IFRMUyBSU0EgUm9vdCAy +MDIzMB4XDTIzMDMyODEyMTY0NVoXDTQ4MDMyNzIzNTk1OVowYzELMAkGA1UEBhMC +REUxJzAlBgNVBAoMHkRldXRzY2hlIFRlbGVrb20gU2VjdXJpdHkgR21iSDErMCkG +A1UEAwwiVGVsZWtvbSBTZWN1cml0eSBUTFMgUlNBIFJvb3QgMjAyMzCCAiIwDQYJ +KoZIhvcNAQEBBQADggIPADCCAgoCggIBAO01oYGA88tKaVvC+1GDrib94W7zgRJ9 +cUD/h3VCKSHtgVIs3xLBGYSJwb3FKNXVS2xE1kzbB5ZKVXrKNoIENqil/Cf2SfHV +cp6R+SPWcHu79ZvB7JPPGeplfohwoHP89v+1VmLhc2o0mD6CuKyVU/QBoCcHcqMA +U6DksquDOFczJZSfvkgdmOGjup5czQRxUX11eKvzWarE4GC+j4NSuHUaQTXtvPM6 +Y+mpFEXX5lLRbtLevOP1Czvm4MS9Q2QTps70mDdsipWol8hHD/BeEIvnHRz+sTug +BTNoBUGCwQMrAcjnj02r6LX2zWtEtefdi+zqJbQAIldNsLGyMcEWzv/9FIS3R/qy +8XDe24tsNlikfLMR0cN3f1+2JeANxdKz+bi4d9s3cXFH42AYTyS2dTd4uaNir73J +co4vzLuu2+QVUhkHM/tqty1LkCiCc/4YizWN26cEar7qwU02OxY2kTLvtkCJkUPg +8qKrBC7m8kwOFjQgrIfBLX7JZkcXFBGk8/ehJImr2BrIoVyxo/eMbcgByU/J7MT8 +rFEz0ciD0cmfHdRHNCk+y7AO+oMLKFjlKdw/fKifybYKu6boRhYPluV75Gp6SG12 +mAWl3G0eQh5C2hrgUve1g8Aae3g1LDj1H/1Joy7SWWO/gLCMk3PLNaaZlSJhZQNg ++y+TS/qanIA7AgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUtqeX +gj10hZv3PJ+TmpV5dVKMbUcwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS2 +p5eCPXSFm/c8n5OalXl1UoxtRzANBgkqhkiG9w0BAQwFAAOCAgEAqMxhpr51nhVQ +pGv7qHBFfLp+sVr8WyP6Cnf4mHGCDG3gXkaqk/QeoMPhk9tLrbKmXauw1GLLXrtm +9S3ul0A8Yute1hTWjOKWi0FpkzXmuZlrYrShF2Y0pmtjxrlO8iLpWA1WQdH6DErw +M807u20hOq6OcrXDSvvpfeWxm4bu4uB9tPcy/SKE8YXJN3nptT+/XOR0so8RYgDd +GGah2XsjX/GO1WfoVNpbOms2b/mBsTNHM3dA+VKq3dSDz4V4mZqTuXNnQkYRIer+ +CqkbGmVps4+uFrb2S1ayLfmlyOw7YqPta9BO1UAJpB+Y1zqlklkg5LB9zVtzaL1t +xKITDmcZuI1CfmwMmm6gJC3VRRvcxAIU/oVbZZfKTpBQCHpCNfnqwmbU+AGuHrS+ +w6jv/naaoqYfRvaE7fzbzsQCzndILIyy7MMAo+wsVRjBfhnu4S/yrYObnqsZ38aK +L4x35bcF7DvB7L6Gs4a8wPfc5+pbrrLMtTWGS9DiP7bY+A4A7l3j941Y/8+LN+lj +X273CXE2whJdV/LItM3z7gLfEdxquVeEHVlNjM7IDiPCtyaaEBRx/pOyiriA8A4Q +ntOoUAw3gi/q4Iqd4Sw5/7W0cwDk90imc6y/st53BIe0o82bNSQ3+pCTE4FCxpgm +dTdmQRCsu/WU48IxK63nI1bMNSWSs1A= +-----END CERTIFICATE----- + +# Issuer: CN=FIRMAPROFESIONAL CA ROOT-A WEB O=Firmaprofesional SA +# Subject: CN=FIRMAPROFESIONAL CA ROOT-A WEB O=Firmaprofesional SA +# Label: "FIRMAPROFESIONAL CA ROOT-A WEB" +# Serial: 65916896770016886708751106294915943533 +# MD5 Fingerprint: 82:b2:ad:45:00:82:b0:66:63:f8:5f:c3:67:4e:ce:a3 +# SHA1 Fingerprint: a8:31:11:74:a6:14:15:0d:ca:77:dd:0e:e4:0c:5d:58:fc:a0:72:a5 +# SHA256 Fingerprint: be:f2:56:da:f2:6e:9c:69:bd:ec:16:02:35:97:98:f3:ca:f7:18:21:a0:3e:01:82:57:c5:3c:65:61:7f:3d:4a +-----BEGIN CERTIFICATE----- +MIICejCCAgCgAwIBAgIQMZch7a+JQn81QYehZ1ZMbTAKBggqhkjOPQQDAzBuMQsw +CQYDVQQGEwJFUzEcMBoGA1UECgwTRmlybWFwcm9mZXNpb25hbCBTQTEYMBYGA1UE +YQwPVkFURVMtQTYyNjM0MDY4MScwJQYDVQQDDB5GSVJNQVBST0ZFU0lPTkFMIENB +IFJPT1QtQSBXRUIwHhcNMjIwNDA2MDkwMTM2WhcNNDcwMzMxMDkwMTM2WjBuMQsw +CQYDVQQGEwJFUzEcMBoGA1UECgwTRmlybWFwcm9mZXNpb25hbCBTQTEYMBYGA1UE +YQwPVkFURVMtQTYyNjM0MDY4MScwJQYDVQQDDB5GSVJNQVBST0ZFU0lPTkFMIENB +IFJPT1QtQSBXRUIwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAARHU+osEaR3xyrq89Zf +e9MEkVz6iMYiuYMQYneEMy3pA4jU4DP37XcsSmDq5G+tbbT4TIqk5B/K6k84Si6C +cyvHZpsKjECcfIr28jlgst7L7Ljkb+qbXbdTkBgyVcUgt5SjYzBhMA8GA1UdEwEB +/wQFMAMBAf8wHwYDVR0jBBgwFoAUk+FDY1w8ndYn81LsF7Kpryz3dvgwHQYDVR0O +BBYEFJPhQ2NcPJ3WJ/NS7Beyqa8s93b4MA4GA1UdDwEB/wQEAwIBBjAKBggqhkjO +PQQDAwNoADBlAjAdfKR7w4l1M+E7qUW/Runpod3JIha3RxEL2Jq68cgLcFBTApFw +hVmpHqTm6iMxoAACMQD94vizrxa5HnPEluPBMBnYfubDl94cT7iJLzPrSA8Z94dG +XSaQpYXFuXqUPoeovQA= +-----END CERTIFICATE----- + +# Issuer: CN=TWCA CYBER Root CA O=TAIWAN-CA OU=Root CA +# Subject: CN=TWCA CYBER Root CA O=TAIWAN-CA OU=Root CA +# Label: "TWCA CYBER Root CA" +# Serial: 85076849864375384482682434040119489222 +# MD5 Fingerprint: 0b:33:a0:97:52:95:d4:a9:fd:bb:db:6e:a3:55:5b:51 +# SHA1 Fingerprint: f6:b1:1c:1a:83:38:e9:7b:db:b3:a8:c8:33:24:e0:2d:9c:7f:26:66 +# SHA256 Fingerprint: 3f:63:bb:28:14:be:17:4e:c8:b6:43:9c:f0:8d:6d:56:f0:b7:c4:05:88:3a:56:48:a3:34:42:4d:6b:3e:c5:58 +-----BEGIN CERTIFICATE----- +MIIFjTCCA3WgAwIBAgIQQAE0jMIAAAAAAAAAATzyxjANBgkqhkiG9w0BAQwFADBQ +MQswCQYDVQQGEwJUVzESMBAGA1UEChMJVEFJV0FOLUNBMRAwDgYDVQQLEwdSb290 +IENBMRswGQYDVQQDExJUV0NBIENZQkVSIFJvb3QgQ0EwHhcNMjIxMTIyMDY1NDI5 +WhcNNDcxMTIyMTU1OTU5WjBQMQswCQYDVQQGEwJUVzESMBAGA1UEChMJVEFJV0FO +LUNBMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJUV0NBIENZQkVSIFJvb3Qg +Q0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDG+Moe2Qkgfh1sTs6P +40czRJzHyWmqOlt47nDSkvgEs1JSHWdyKKHfi12VCv7qze33Kc7wb3+szT3vsxxF +avcokPFhV8UMxKNQXd7UtcsZyoC5dc4pztKFIuwCY8xEMCDa6pFbVuYdHNWdZsc/ +34bKS1PE2Y2yHer43CdTo0fhYcx9tbD47nORxc5zb87uEB8aBs/pJ2DFTxnk684i +JkXXYJndzk834H/nY62wuFm40AZoNWDTNq5xQwTxaWV4fPMf88oon1oglWa0zbfu +j3ikRRjpJi+NmykosaS3Om251Bw4ckVYsV7r8Cibt4LK/c/WMw+f+5eesRycnupf +Xtuq3VTpMCEobY5583WSjCb+3MX2w7DfRFlDo7YDKPYIMKoNM+HvnKkHIuNZW0CP +2oi3aQiotyMuRAlZN1vH4xfyIutuOVLF3lSnmMlLIJXcRolftBL5hSmO68gnFSDA +S9TMfAxsNAwmmyYxpjyn9tnQS6Jk/zuZQXLB4HCX8SS7K8R0IrGsayIyJNN4KsDA +oS/xUgXJP+92ZuJF2A09rZXIx4kmyA+upwMu+8Ff+iDhcK2wZSA3M2Cw1a/XDBzC +kHDXShi8fgGwsOsVHkQGzaRP6AzRwyAQ4VRlnrZR0Bp2a0JaWHY06rc3Ga4udfmW +5cFZ95RXKSWNOkyrTZpB0F8mAwIDAQABo2MwYTAOBgNVHQ8BAf8EBAMCAQYwDwYD +VR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBSdhWEUfMFib5do5E83QOGt4A1WNzAd +BgNVHQ4EFgQUnYVhFHzBYm+XaORPN0DhreANVjcwDQYJKoZIhvcNAQEMBQADggIB +AGSPesRiDrWIzLjHhg6hShbNcAu3p4ULs3a2D6f/CIsLJc+o1IN1KriWiLb73y0t +tGlTITVX1olNc79pj3CjYcya2x6a4CD4bLubIp1dhDGaLIrdaqHXKGnK/nZVekZn +68xDiBaiA9a5F/gZbG0jAn/xX9AKKSM70aoK7akXJlQKTcKlTfjF/biBzysseKNn +TKkHmvPfXvt89YnNdJdhEGoHK4Fa0o635yDRIG4kqIQnoVesqlVYL9zZyvpoBJ7t +RCT5dEA7IzOrg1oYJkK2bVS1FmAwbLGg+LhBoF1JSdJlBTrq/p1hvIbZv97Tujqx +f36SNI7JAG7cmL3c7IAFrQI932XtCwP39xaEBDG6k5TY8hL4iuO/Qq+n1M0RFxbI +Qh0UqEL20kCGoE8jypZFVmAGzbdVAaYBlGX+bgUJurSkquLvWL69J1bY73NxW0Qz +8ppy6rBePm6pUlvscG21h483XjyMnM7k8M4MZ0HMzvaAq07MTFb1wWFZk7Q+ptq4 +NxKfKjLji7gh7MMrZQzvIt6IKTtM1/r+t+FHvpw+PoP7UV31aPcuIYXcv/Fa4nzX +xeSDwWrruoBa3lwtcHb4yOWHh8qgnaHlIhInD0Q9HWzq1MKLL295q39QpsQZp6F6 +t5b5wR9iWqJDB0BeJsas7a5wFsWqynKKTbDPAYsDP27X +-----END CERTIFICATE----- + +# Issuer: CN=SecureSign Root CA12 O=Cybertrust Japan Co., Ltd. +# Subject: CN=SecureSign Root CA12 O=Cybertrust Japan Co., Ltd. +# Label: "SecureSign Root CA12" +# Serial: 587887345431707215246142177076162061960426065942 +# MD5 Fingerprint: c6:89:ca:64:42:9b:62:08:49:0b:1e:7f:e9:07:3d:e8 +# SHA1 Fingerprint: 7a:22:1e:3d:de:1b:06:ac:9e:c8:47:70:16:8e:3c:e5:f7:6b:06:f4 +# SHA256 Fingerprint: 3f:03:4b:b5:70:4d:44:b2:d0:85:45:a0:20:57:de:93:eb:f3:90:5f:ce:72:1a:cb:c7:30:c0:6d:da:ee:90:4e +-----BEGIN CERTIFICATE----- +MIIDcjCCAlqgAwIBAgIUZvnHwa/swlG07VOX5uaCwysckBYwDQYJKoZIhvcNAQEL +BQAwUTELMAkGA1UEBhMCSlAxIzAhBgNVBAoTGkN5YmVydHJ1c3QgSmFwYW4gQ28u +LCBMdGQuMR0wGwYDVQQDExRTZWN1cmVTaWduIFJvb3QgQ0ExMjAeFw0yMDA0MDgw +NTM2NDZaFw00MDA0MDgwNTM2NDZaMFExCzAJBgNVBAYTAkpQMSMwIQYDVQQKExpD +eWJlcnRydXN0IEphcGFuIENvLiwgTHRkLjEdMBsGA1UEAxMUU2VjdXJlU2lnbiBS +b290IENBMTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6OcE3emhF +KxS06+QT61d1I02PJC0W6K6OyX2kVzsqdiUzg2zqMoqUm048luT9Ub+ZyZN+v/mt +p7JIKwccJ/VMvHASd6SFVLX9kHrko+RRWAPNEHl57muTH2SOa2SroxPjcf59q5zd +J1M3s6oYwlkm7Fsf0uZlfO+TvdhYXAvA42VvPMfKWeP+bl+sg779XSVOKik71gur +FzJ4pOE+lEa+Ym6b3kaosRbnhW70CEBFEaCeVESE99g2zvVQR9wsMJvuwPWW0v4J +hscGWa5Pro4RmHvzC1KqYiaqId+OJTN5lxZJjfU+1UefNzFJM3IFTQy2VYzxV4+K +h9GtxRESOaCtAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD +AgEGMB0GA1UdDgQWBBRXNPN0zwRL1SXm8UC2LEzZLemgrTANBgkqhkiG9w0BAQsF +AAOCAQEAPrvbFxbS8hQBICw4g0utvsqFepq2m2um4fylOqyttCg6r9cBg0krY6Ld +mmQOmFxv3Y67ilQiLUoT865AQ9tPkbeGGuwAtEGBpE/6aouIs3YIcipJQMPTw4WJ +mBClnW8Zt7vPemVV2zfrPIpyMpcemik+rY3moxtt9XUa5rBouVui7mlHJzWhhpmA +8zNL4WukJsPvdFlseqJkth5Ew1DgDzk9qTPxpfPSvWKErI4cqc1avTc7bgoitPQV +55FYxTpE05Uo2cBl6XLK0A+9H7MV2anjpEcJnuDLN/v9vZfVvhgaaaI5gdka9at/ +yOPiZwud9AzqVN/Ssq+xIvEg37xEHA== +-----END CERTIFICATE----- + +# Issuer: CN=SecureSign Root CA14 O=Cybertrust Japan Co., Ltd. +# Subject: CN=SecureSign Root CA14 O=Cybertrust Japan Co., Ltd. +# Label: "SecureSign Root CA14" +# Serial: 575790784512929437950770173562378038616896959179 +# MD5 Fingerprint: 71:0d:72:fa:92:19:65:5e:89:04:ac:16:33:f0:bc:d5 +# SHA1 Fingerprint: dd:50:c0:f7:79:b3:64:2e:74:a2:b8:9d:9f:d3:40:dd:bb:f0:f2:4f +# SHA256 Fingerprint: 4b:00:9c:10:34:49:4f:9a:b5:6b:ba:3b:a1:d6:27:31:fc:4d:20:d8:95:5a:dc:ec:10:a9:25:60:72:61:e3:38 +-----BEGIN CERTIFICATE----- +MIIFcjCCA1qgAwIBAgIUZNtaDCBO6Ncpd8hQJ6JaJ90t8sswDQYJKoZIhvcNAQEM +BQAwUTELMAkGA1UEBhMCSlAxIzAhBgNVBAoTGkN5YmVydHJ1c3QgSmFwYW4gQ28u +LCBMdGQuMR0wGwYDVQQDExRTZWN1cmVTaWduIFJvb3QgQ0ExNDAeFw0yMDA0MDgw +NzA2MTlaFw00NTA0MDgwNzA2MTlaMFExCzAJBgNVBAYTAkpQMSMwIQYDVQQKExpD +eWJlcnRydXN0IEphcGFuIENvLiwgTHRkLjEdMBsGA1UEAxMUU2VjdXJlU2lnbiBS +b290IENBMTQwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDF0nqh1oq/ +FjHQmNE6lPxauG4iwWL3pwon71D2LrGeaBLwbCRjOfHw3xDG3rdSINVSW0KZnvOg +vlIfX8xnbacuUKLBl422+JX1sLrcneC+y9/3OPJH9aaakpUqYllQC6KxNedlsmGy +6pJxaeQp8E+BgQQ8sqVb1MWoWWd7VRxJq3qdwudzTe/NCcLEVxLbAQ4jeQkHO6Lo +/IrPj8BGJJw4J+CDnRugv3gVEOuGTgpa/d/aLIJ+7sr2KeH6caH3iGicnPCNvg9J +kdjqOvn90Ghx2+m1K06Ckm9mH+Dw3EzsytHqunQG+bOEkJTRX45zGRBdAuVwpcAQ +0BB8b8VYSbSwbprafZX1zNoCr7gsfXmPvkPx+SgojQlD+Ajda8iLLCSxjVIHvXib +y8posqTdDEx5YMaZ0ZPxMBoH064iwurO8YQJzOAUbn8/ftKChazcqRZOhaBgy/ac +18izju3Gm5h1DVXoX+WViwKkrkMpKBGk5hIwAUt1ax5mnXkvpXYvHUC0bcl9eQjs +0Wq2XSqypWa9a4X0dFbD9ed1Uigspf9mR6XU/v6eVL9lfgHWMI+lNpyiUBzuOIAB +SMbHdPTGrMNASRZhdCyvjG817XsYAFs2PJxQDcqSMxDxJklt33UkN4Ii1+iW/RVL +ApY+B3KVfqs9TC7XyvDf4Fg/LS8EmjijAQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUBpOjCl4oaTeqYR3r6/wtbyPk +86AwDQYJKoZIhvcNAQEMBQADggIBAJaAcgkGfpzMkwQWu6A6jZJOtxEaCnFxEM0E +rX+lRVAQZk5KQaID2RFPeje5S+LGjzJmdSX7684/AykmjbgWHfYfM25I5uj4V7Ib +ed87hwriZLoAymzvftAj63iP/2SbNDefNWWipAA9EiOWWF3KY4fGoweITedpdopT +zfFP7ELyk+OZpDc8h7hi2/DsHzc/N19DzFGdtfCXwreFamgLRB7lUe6TzktuhsHS +DCRZNhqfLJGP4xjblJUK7ZGqDpncllPjYYPGFrojutzdfhrGe0K22VoF3Jpf1d+4 +2kd92jjbrDnVHmtsKheMYc2xbXIBw8MgAGJoFjHVdqqGuw6qnsb58Nn4DSEC5MUo +FlkRudlpcyqSeLiSV5sI8jrlL5WwWLdrIBRtFO8KvH7YVdiI2i/6GaX7i+B/OfVy +K4XELKzvGUWSTLNhB9xNH27SgRNcmvMSZ4PPmz+Ln52kuaiWA3rF7iDeM9ovnhp6 +dB7h7sxaOgTdsxoEqBRjrLdHEoOabPXm6RUVkRqEGQ6UROcSjiVbgGcZ3GOTEAtl +Lor6CZpO2oYofaphNdgOpygau1LgePhsumywbrmHXumZNTfxPWQrqaA0k89jL9WB +365jJ6UeTo3cKXhZ+PmhIIynJkBugnLNeLLIjzwec+fBH7/PzqUqm9tEZDKgu39c +JRNItX+S +-----END CERTIFICATE----- + +# Issuer: CN=SecureSign Root CA15 O=Cybertrust Japan Co., Ltd. +# Subject: CN=SecureSign Root CA15 O=Cybertrust Japan Co., Ltd. +# Label: "SecureSign Root CA15" +# Serial: 126083514594751269499665114766174399806381178503 +# MD5 Fingerprint: 13:30:fc:c4:62:a6:a9:de:b5:c1:68:af:b5:d2:31:47 +# SHA1 Fingerprint: cb:ba:83:c8:c1:5a:5d:f1:f9:73:6f:ca:d7:ef:28:13:06:4a:07:7d +# SHA256 Fingerprint: e7:78:f0:f0:95:fe:84:37:29:cd:1a:00:82:17:9e:53:14:a9:c2:91:44:28:05:e1:fb:1d:8f:b6:b8:88:6c:3a +-----BEGIN CERTIFICATE----- +MIICIzCCAamgAwIBAgIUFhXHw9hJp75pDIqI7fBw+d23PocwCgYIKoZIzj0EAwMw +UTELMAkGA1UEBhMCSlAxIzAhBgNVBAoTGkN5YmVydHJ1c3QgSmFwYW4gQ28uLCBM +dGQuMR0wGwYDVQQDExRTZWN1cmVTaWduIFJvb3QgQ0ExNTAeFw0yMDA0MDgwODMy +NTZaFw00NTA0MDgwODMyNTZaMFExCzAJBgNVBAYTAkpQMSMwIQYDVQQKExpDeWJl +cnRydXN0IEphcGFuIENvLiwgTHRkLjEdMBsGA1UEAxMUU2VjdXJlU2lnbiBSb290 +IENBMTUwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQLUHSNZDKZmbPSYAi4Io5GdCx4 +wCtELW1fHcmuS1Iggz24FG1Th2CeX2yF2wYUleDHKP+dX+Sq8bOLbe1PL0vJSpSR +ZHX+AezB2Ot6lHhWGENfa4HL9rzatAy2KZMIaY+jQjBAMA8GA1UdEwEB/wQFMAMB +Af8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTrQciu/NWeUUj1vYv0hyCTQSvT +9DAKBggqhkjOPQQDAwNoADBlAjEA2S6Jfl5OpBEHvVnCB96rMjhTKkZEBhd6zlHp +4P9mLQlO4E/0BdGF9jVg3PVys0Z9AjBEmEYagoUeYWmJSwdLZrWeqrqgHkHZAXQ6 +bkU6iYAZezKYVWOr62Nuk22rGwlgMU4= +-----END CERTIFICATE----- + +# Issuer: CN=D-TRUST BR Root CA 2 2023 O=D-Trust GmbH +# Subject: CN=D-TRUST BR Root CA 2 2023 O=D-Trust GmbH +# Label: "D-TRUST BR Root CA 2 2023" +# Serial: 153168538924886464690566649552453098598 +# MD5 Fingerprint: e1:09:ed:d3:60:d4:56:1b:47:1f:b7:0c:5f:1b:5f:85 +# SHA1 Fingerprint: 2d:b0:70:ee:71:94:af:69:68:17:db:79:ce:58:9f:a0:6b:96:f7:87 +# SHA256 Fingerprint: 05:52:e6:f8:3f:df:65:e8:fa:96:70:e6:66:df:28:a4:e2:13:40:b5:10:cb:e5:25:66:f9:7c:4f:b9:4b:2b:d1 +-----BEGIN CERTIFICATE----- +MIIFqTCCA5GgAwIBAgIQczswBEhb2U14LnNLyaHcZjANBgkqhkiG9w0BAQ0FADBI +MQswCQYDVQQGEwJERTEVMBMGA1UEChMMRC1UcnVzdCBHbWJIMSIwIAYDVQQDExlE +LVRSVVNUIEJSIFJvb3QgQ0EgMiAyMDIzMB4XDTIzMDUwOTA4NTYzMVoXDTM4MDUw +OTA4NTYzMFowSDELMAkGA1UEBhMCREUxFTATBgNVBAoTDEQtVHJ1c3QgR21iSDEi +MCAGA1UEAxMZRC1UUlVTVCBCUiBSb290IENBIDIgMjAyMzCCAiIwDQYJKoZIhvcN +AQEBBQADggIPADCCAgoCggIBAK7/CVmRgApKaOYkP7in5Mg6CjoWzckjYaCTcfKr +i3OPoGdlYNJUa2NRb0kz4HIHE304zQaSBylSa053bATTlfrdTIzZXcFhfUvnKLNE +gXtRr90zsWh81k5M/itoucpmacTsXld/9w3HnDY25QdgrMBM6ghs7wZ8T1soegj8 +k12b9py0i4a6Ibn08OhZWiihNIQaJZG2tY/vsvmA+vk9PBFy2OMvhnbFeSzBqZCT +Rphny4NqoFAjpzv2gTng7fC5v2Xx2Mt6++9zA84A9H3X4F07ZrjcjrqDy4d2A/wl +2ecjbwb9Z/Pg/4S8R7+1FhhGaRTMBffb00msa8yr5LULQyReS2tNZ9/WtT5PeB+U +cSTq3nD88ZP+npNa5JRal1QMNXtfbO4AHyTsA7oC9Xb0n9Sa7YUsOCIvx9gvdhFP +/Wxc6PWOJ4d/GUohR5AdeY0cW/jPSoXk7bNbjb7EZChdQcRurDhaTyN0dKkSw/bS +uREVMweR2Ds3OmMwBtHFIjYoYiMQ4EbMl6zWK11kJNXuHA7e+whadSr2Y23OC0K+ +0bpwHJwh5Q8xaRfX/Aq03u2AnMuStIv13lmiWAmlY0cL4UEyNEHZmrHZqLAbWt4N +DfTisl01gLmB1IRpkQLLddCNxbU9CZEJjxShFHR5PtbJFR2kWVki3PaKRT08EtY+ +XTIvAgMBAAGjgY4wgYswDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUZ5Dw1t61 +GNVGKX5cq/ieCLxklRAwDgYDVR0PAQH/BAQDAgEGMEkGA1UdHwRCMEAwPqA8oDqG +OGh0dHA6Ly9jcmwuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3RfYnJfcm9vdF9jYV8y +XzIwMjMuY3JsMA0GCSqGSIb3DQEBDQUAA4ICAQA097N3U9swFrktpSHxQCF16+tI +FoE9c+CeJyrrd6kTpGoKWloUMz1oH4Guaf2Mn2VsNELZLdB/eBaxOqwjMa1ef67n +riv6uvw8l5VAk1/DLQOj7aRvU9f6QA4w9QAgLABMjDu0ox+2v5Eyq6+SmNMW5tTR +VFxDWy6u71cqqLRvpO8NVhTaIasgdp4D/Ca4nj8+AybmTNudX0KEPUUDAxxZiMrc +LmEkWqTqJwtzEr5SswrPMhfiHocaFpVIbVrg0M8JkiZmkdijYQ6qgYF/6FKC0ULn +4B0Y+qSFNueG4A3rvNTJ1jxD8V1Jbn6Bm2m1iWKPiFLY1/4nwSPFyysCu7Ff/vtD +hQNGvl3GyiEm/9cCnnRK3PgTFbGBVzbLZVzRHTF36SXDw7IyN9XxmAnkbWOACKsG +koHU6XCPpz+y7YaMgmo1yEJagtFSGkUPFaUA8JR7ZSdXOUPPfH/mvTWze/EZTN46 +ls/pdu4D58JDUjxqgejBWoC9EV2Ta/vH5mQ/u2kc6d0li690yVRAysuTEwrt+2aS +Ecr1wPrYg1UDfNPFIkZ1cGt5SAYqgpq/5usWDiJFAbzdNpQ0qTUmiteXue4Icr80 +knCDgKs4qllo3UCkGJCy89UDyibK79XH4I9TjvAA46jtn/mtd+ArY0+ew+43u3gJ +hJ65bvspmZDogNOfJA== +-----END CERTIFICATE----- + +# Issuer: CN=TrustAsia TLS ECC Root CA O=TrustAsia Technologies, Inc. +# Subject: CN=TrustAsia TLS ECC Root CA O=TrustAsia Technologies, Inc. +# Label: "TrustAsia TLS ECC Root CA" +# Serial: 310892014698942880364840003424242768478804666567 +# MD5 Fingerprint: 09:48:04:77:d2:fc:65:93:71:66:b1:11:95:4f:06:8c +# SHA1 Fingerprint: b5:ec:39:f3:a1:66:37:ae:c3:05:94:57:e2:be:11:be:b7:a1:7f:36 +# SHA256 Fingerprint: c0:07:6b:9e:f0:53:1f:b1:a6:56:d6:7c:4e:be:97:cd:5d:ba:a4:1e:f4:45:98:ac:c2:48:98:78:c9:2d:87:11 +-----BEGIN CERTIFICATE----- +MIICMTCCAbegAwIBAgIUNnThTXxlE8msg1UloD5Sfi9QaMcwCgYIKoZIzj0EAwMw +WDELMAkGA1UEBhMCQ04xJTAjBgNVBAoTHFRydXN0QXNpYSBUZWNobm9sb2dpZXMs +IEluYy4xIjAgBgNVBAMTGVRydXN0QXNpYSBUTFMgRUNDIFJvb3QgQ0EwHhcNMjQw +NTE1MDU0MTU2WhcNNDQwNTE1MDU0MTU1WjBYMQswCQYDVQQGEwJDTjElMCMGA1UE +ChMcVHJ1c3RBc2lhIFRlY2hub2xvZ2llcywgSW5jLjEiMCAGA1UEAxMZVHJ1c3RB +c2lhIFRMUyBFQ0MgUm9vdCBDQTB2MBAGByqGSM49AgEGBSuBBAAiA2IABLh/pVs/ +AT598IhtrimY4ZtcU5nb9wj/1WrgjstEpvDBjL1P1M7UiFPoXlfXTr4sP/MSpwDp +guMqWzJ8S5sUKZ74LYO1644xST0mYekdcouJtgq7nDM1D9rs3qlKH8kzsaNCMEAw +DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQULIVTu7FDzTLqnqOH/qKYqKaT6RAw +DgYDVR0PAQH/BAQDAgEGMAoGCCqGSM49BAMDA2gAMGUCMFRH18MtYYZI9HlaVQ01 +L18N9mdsd0AaRuf4aFtOJx24mH1/k78ITcTaRTChD15KeAIxAKORh/IRM4PDwYqR +OkwrULG9IpRdNYlzg8WbGf60oenUoWa2AaU2+dhoYSi3dOGiMQ== +-----END CERTIFICATE----- + +# Issuer: CN=TrustAsia TLS RSA Root CA O=TrustAsia Technologies, Inc. +# Subject: CN=TrustAsia TLS RSA Root CA O=TrustAsia Technologies, Inc. +# Label: "TrustAsia TLS RSA Root CA" +# Serial: 160405846464868906657516898462547310235378010780 +# MD5 Fingerprint: 3b:9e:c3:86:0f:34:3c:6b:c5:46:c4:8e:1d:e7:19:12 +# SHA1 Fingerprint: a5:46:50:c5:62:ea:95:9a:1a:a7:04:6f:17:58:c7:29:53:3d:03:fa +# SHA256 Fingerprint: 06:c0:8d:7d:af:d8:76:97:1e:b1:12:4f:e6:7f:84:7e:c0:c7:a1:58:d3:ea:53:cb:e9:40:e2:ea:97:91:f4:c3 +-----BEGIN CERTIFICATE----- +MIIFgDCCA2igAwIBAgIUHBjYz+VTPyI1RlNUJDxsR9FcSpwwDQYJKoZIhvcNAQEM +BQAwWDELMAkGA1UEBhMCQ04xJTAjBgNVBAoTHFRydXN0QXNpYSBUZWNobm9sb2dp +ZXMsIEluYy4xIjAgBgNVBAMTGVRydXN0QXNpYSBUTFMgUlNBIFJvb3QgQ0EwHhcN +MjQwNTE1MDU0MTU3WhcNNDQwNTE1MDU0MTU2WjBYMQswCQYDVQQGEwJDTjElMCMG +A1UEChMcVHJ1c3RBc2lhIFRlY2hub2xvZ2llcywgSW5jLjEiMCAGA1UEAxMZVHJ1 +c3RBc2lhIFRMUyBSU0EgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCC +AgoCggIBAMMWuBtqpERz5dZO9LnPWwvB0ZqB9WOwj0PBuwhaGnrhB3YmH49pVr7+ +NmDQDIPNlOrnxS1cLwUWAp4KqC/lYCZUlviYQB2srp10Zy9U+5RjmOMmSoPGlbYJ +Q1DNDX3eRA5gEk9bNb2/mThtfWza4mhzH/kxpRkQcwUqwzIZheo0qt1CHjCNP561 +HmHVb70AcnKtEj+qpklz8oYVlQwQX1Fkzv93uMltrOXVmPGZLmzjyUT5tUMnCE32 +ft5EebuyjBza00tsLtbDeLdM1aTk2tyKjg7/D8OmYCYozza/+lcK7Fs/6TAWe8Tb +xNRkoDD75f0dcZLdKY9BWN4ArTr9PXwaqLEX8E40eFgl1oUh63kd0Nyrz2I8sMeX +i9bQn9P+PN7F4/w6g3CEIR0JwqH8uyghZVNgepBtljhb//HXeltt08lwSUq6HTrQ +UNoyIBnkiz/r1RYmNzz7dZ6wB3C4FGB33PYPXFIKvF1tjVEK2sUYyJtt3LCDs3+j +TnhMmCWr8n4uIF6CFabW2I+s5c0yhsj55NqJ4js+k8UTav/H9xj8Z7XvGCxUq0DT +bE3txci3OE9kxJRMT6DNrqXGJyV1J23G2pyOsAWZ1SgRxSHUuPzHlqtKZFlhaxP8 +S8ySpg+kUb8OWJDZgoM5pl+z+m6Ss80zDoWo8SnTq1mt1tve1CuBAgMBAAGjQjBA +MA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFLgHkXlcBvRG/XtZylomkadFK/hT +MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQwFAAOCAgEAIZtqBSBdGBanEqT3 +Rz/NyjuujsCCztxIJXgXbODgcMTWltnZ9r96nBO7U5WS/8+S4PPFJzVXqDuiGev4 +iqME3mmL5Dw8veWv0BIb5Ylrc5tvJQJLkIKvQMKtuppgJFqBTQUYo+IzeXoLH5Pt +7DlK9RME7I10nYEKqG/odv6LTytpEoYKNDbdgptvT+Bz3Ul/KD7JO6NXBNiT2Twp +2xIQaOHEibgGIOcberyxk2GaGUARtWqFVwHxtlotJnMnlvm5P1vQiJ3koP26TpUJ +g3933FEFlJ0gcXax7PqJtZwuhfG5WyRasQmr2soaB82G39tp27RIGAAtvKLEiUUj +pQ7hRGU+isFqMB3iYPg6qocJQrmBktwliJiJ8Xw18WLK7nn4GS/+X/jbh87qqA8M +pugLoDzga5SYnH+tBuYc6kIQX+ImFTw3OffXvO645e8D7r0i+yiGNFjEWn9hongP +XvPKnbwbPKfILfanIhHKA9jnZwqKDss1jjQ52MjqjZ9k4DewbNfFj8GQYSbbJIwe +SsCI3zWQzj8C9GRh3sfIB5XeMhg6j6JCQCTl1jNdfK7vsU1P1FeQNWrcrgSXSYk0 +ly4wBOeY99sLAZDBHwo/+ML+TvrbmnNzFrwFuHnYWa8G5z9nODmxfKuU4CkUpijy +323imttUQ/hHWKNddBWcwauwxzQ= +-----END CERTIFICATE----- + +# Issuer: CN=D-TRUST EV Root CA 2 2023 O=D-Trust GmbH +# Subject: CN=D-TRUST EV Root CA 2 2023 O=D-Trust GmbH +# Label: "D-TRUST EV Root CA 2 2023" +# Serial: 139766439402180512324132425437959641711 +# MD5 Fingerprint: 96:b4:78:09:f0:09:cb:77:eb:bb:1b:4d:6f:36:bc:b6 +# SHA1 Fingerprint: a5:5b:d8:47:6c:8f:19:f7:4c:f4:6d:6b:b6:c2:79:82:22:df:54:8b +# SHA256 Fingerprint: 8e:82:21:b2:e7:d4:00:78:36:a1:67:2f:0d:cc:29:9c:33:bc:07:d3:16:f1:32:fa:1a:20:6d:58:71:50:f1:ce +-----BEGIN CERTIFICATE----- +MIIFqTCCA5GgAwIBAgIQaSYJfoBLTKCnjHhiU19abzANBgkqhkiG9w0BAQ0FADBI +MQswCQYDVQQGEwJERTEVMBMGA1UEChMMRC1UcnVzdCBHbWJIMSIwIAYDVQQDExlE +LVRSVVNUIEVWIFJvb3QgQ0EgMiAyMDIzMB4XDTIzMDUwOTA5MTAzM1oXDTM4MDUw +OTA5MTAzMlowSDELMAkGA1UEBhMCREUxFTATBgNVBAoTDEQtVHJ1c3QgR21iSDEi +MCAGA1UEAxMZRC1UUlVTVCBFViBSb290IENBIDIgMjAyMzCCAiIwDQYJKoZIhvcN +AQEBBQADggIPADCCAgoCggIBANiOo4mAC7JXUtypU0w3uX9jFxPvp1sjW2l1sJkK +F8GLxNuo4MwxusLyzV3pt/gdr2rElYfXR8mV2IIEUD2BCP/kPbOx1sWy/YgJ25yE +7CUXFId/MHibaljJtnMoPDT3mfd/06b4HEV8rSyMlD/YZxBTfiLNTiVR8CUkNRFe +EMbsh2aJgWi6zCudR3Mfvc2RpHJqnKIbGKBv7FD0fUDCqDDPvXPIEysQEx6Lmqg6 +lHPTGGkKSv/BAQP/eX+1SH977ugpbzZMlWGG2Pmic4ruri+W7mjNPU0oQvlFKzIb +RlUWaqZLKfm7lVa/Rh3sHZMdwGWyH6FDrlaeoLGPaxK3YG14C8qKXO0elg6DpkiV +jTujIcSuWMYAsoS0I6SWhjW42J7YrDRJmGOVxcttSEfi8i4YHtAxq9107PncjLgc +jmgjutDzUNzPZY9zOjLHfP7KgiJPvo5iR2blzYfi6NUPGJ/lBHJLRjwQ8kTCZFZx +TnXonMkmdMV9WdEKWw9t/p51HBjGGjp82A0EzM23RWV6sY+4roRIPrN6TagD4uJ+ +ARZZaBhDM7DS3LAaQzXupdqpRlyuhoFBAUp0JuyfBr/CBTdkdXgpaP3F9ev+R/nk +hbDhezGdpn9yo7nELC7MmVcOIQxFAZRl62UJxmMiCzNJkkg8/M3OsD6Onov4/knF +NXJHAgMBAAGjgY4wgYswDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUqvyREBuH +kV8Wub9PS5FeAByxMoAwDgYDVR0PAQH/BAQDAgEGMEkGA1UdHwRCMEAwPqA8oDqG +OGh0dHA6Ly9jcmwuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3RfZXZfcm9vdF9jYV8y +XzIwMjMuY3JsMA0GCSqGSIb3DQEBDQUAA4ICAQCTy6UfmRHsmg1fLBWTxj++EI14 +QvBukEdHjqOSMo1wj/Zbjb6JzkcBahsgIIlbyIIQbODnmaprxiqgYzWRaoUlrRc4 +pZt+UPJ26oUFKidBK7GB0aL2QHWpDsvxVUjY7NHss+jOFKE17MJeNRqrphYBBo7q +3C+jisosketSjl8MmxfPy3MHGcRqwnNU73xDUmPBEcrCRbH0O1P1aa4846XerOhU +t7KR/aypH/KH5BfGSah82ApB9PI+53c0BFLd6IHyTS9URZ0V4U/M5d40VxDJI3IX +cI1QcB9WbMy5/zpaT2N6w25lBx2Eof+pDGOJbbJAiDnXH3dotfyc1dZnaVuodNv8 +ifYbMvekJKZ2t0dT741Jj6m2g1qllpBFYfXeA08mD6iL8AOWsKwV0HFaanuU5nCT +2vFp4LJiTZ6P/4mdm13NRemUAiKN4DV/6PEEeXFsVIP4M7kFMhtYVRFP0OUnR3Hs +7dpn1mKmS00PaaLJvOwiS5THaJQXfuKOKD62xur1NGyfN4gHONuGcfrNlUhDbqNP +gofXNJhuS5N5YHVpD/Aa1VP6IQzCP+k/HxiMkl14p3ZnGbuy6n/pcAlWVqOwDAst +Nl7F6cTVg8uGF5csbBNvh1qvSaYd2804BC5f4ko1Di1L+KIkBI3Y4WNeApI02phh +XBxvWHZks/wCuPWdCg== +-----END CERTIFICATE----- + +# Issuer: CN=SwissSign RSA TLS Root CA 2022 - 1 O=SwissSign AG +# Subject: CN=SwissSign RSA TLS Root CA 2022 - 1 O=SwissSign AG +# Label: "SwissSign RSA TLS Root CA 2022 - 1" +# Serial: 388078645722908516278762308316089881486363258315 +# MD5 Fingerprint: 16:2e:e4:19:76:81:85:ba:8e:91:58:f1:15:ef:72:39 +# SHA1 Fingerprint: 81:34:0a:be:4c:cd:ce:cc:e7:7d:cc:8a:d4:57:e2:45:a0:77:5d:ce +# SHA256 Fingerprint: 19:31:44:f4:31:e0:fd:db:74:07:17:d4:de:92:6a:57:11:33:88:4b:43:60:d3:0e:27:29:13:cb:e6:60:ce:41 +-----BEGIN CERTIFICATE----- +MIIFkzCCA3ugAwIBAgIUQ/oMX04bgBhE79G0TzUfRPSA7cswDQYJKoZIhvcNAQEL +BQAwUTELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzErMCkGA1UE +AxMiU3dpc3NTaWduIFJTQSBUTFMgUm9vdCBDQSAyMDIyIC0gMTAeFw0yMjA2MDgx +MTA4MjJaFw00NzA2MDgxMTA4MjJaMFExCzAJBgNVBAYTAkNIMRUwEwYDVQQKEwxT +d2lzc1NpZ24gQUcxKzApBgNVBAMTIlN3aXNzU2lnbiBSU0EgVExTIFJvb3QgQ0Eg +MjAyMiAtIDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDLKmjiC8NX +vDVjvHClO/OMPE5Xlm7DTjak9gLKHqquuN6orx122ro10JFwB9+zBvKK8i5VUXu7 +LCTLf5ImgKO0lPaCoaTo+nUdWfMHamFk4saMla+ju45vVs9xzF6BYQ1t8qsCLqSX +5XH8irCRIFucdFJtrhUnWXjyCcplDn/L9Ovn3KlMd/YrFgSVrpxxpT8q2kFC5zyE +EPThPYxr4iuRR1VPuFa+Rd4iUU1OKNlfGUEGjw5NBuBwQCMBauTLE5tzrE0USJIt +/m2n+IdreXXhvhCxqohAWVTXz8TQm0SzOGlkjIHRI36qOTw7D59Ke4LKa2/KIj4x +0LDQKhySio/YGZxH5D4MucLNvkEM+KRHBdvBFzA4OmnczcNpI/2aDwLOEGrOyvi5 +KaM2iYauC8BPY7kGWUleDsFpswrzd34unYyzJ5jSmY0lpx+Gs6ZUcDj8fV3oT4MM +0ZPlEuRU2j7yrTrePjxF8CgPBrnh25d7mUWe3f6VWQQvdT/TromZhqwUtKiE+shd +OxtYk8EXlFXIC+OCeYSf8wCENO7cMdWP8vpPlkwGqnj73mSiI80fPsWMvDdUDrta +clXvyFu1cvh43zcgTFeRc5JzrBh3Q4IgaezprClG5QtO+DdziZaKHG29777YtvTK +wP1H8K4LWCDFyB02rpeNUIMmJCn3nTsPBQIDAQABo2MwYTAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBRvjmKLk0Ow4UD2p8P98Q+4 +DxU4pTAdBgNVHQ4EFgQUb45ii5NDsOFA9qfD/fEPuA8VOKUwDQYJKoZIhvcNAQEL +BQADggIBAKwsKUF9+lz1GpUYvyypiqkkVHX1uECry6gkUSsYP2OprphWKwVDIqO3 +10aewCoSPY6WlkDfDDOLazeROpW7OSltwAJsipQLBwJNGD77+3v1dj2b9l4wBlgz +Hqp41eZUBDqyggmNzhYzWUUo8aWjlw5DI/0LIICQ/+Mmz7hkkeUFjxOgdg3XNwwQ +iJb0Pr6VvfHDffCjw3lHC1ySFWPtUnWK50Zpy1FVCypM9fJkT6lc/2cyjlUtMoIc +gC9qkfjLvH4YoiaoLqNTKIftV+Vlek4ASltOU8liNr3CjlvrzG4ngRhZi0Rjn9UM +ZfQpZX+RLOV/fuiJz48gy20HQhFRJjKKLjpHE7iNvUcNCfAWpO2Whi4Z2L6MOuhF +LhG6rlrnub+xzI/goP+4s9GFe3lmozm1O2bYQL7Pt2eLSMkZJVX8vY3PXtpOpvJp +zv1/THfQwUY1mFwjmwJFQ5Ra3bxHrSL+ul4vkSkphnsh3m5kt8sNjzdbowhq6/Td +Ao9QAwKxuDdollDruF/UKIqlIgyKhPBZLtU30WHlQnNYKoH3dtvi4k0NX/a3vgW0 +rk4N3hY9A4GzJl5LuEsAz/+MF7psYC0nhzck5npgL7XTgwSqT0N1osGDsieYK7EO +gLrAhV5Cud+xYJHT6xh+cHiudoO+cVrQkOPKwRYlZ0rwtnu64ZzZ +-----END CERTIFICATE----- + +# Issuer: CN=OISTE Server Root ECC G1 O=OISTE Foundation +# Subject: CN=OISTE Server Root ECC G1 O=OISTE Foundation +# Label: "OISTE Server Root ECC G1" +# Serial: 47819833811561661340092227008453318557 +# MD5 Fingerprint: 42:a7:d2:35:ae:02:92:db:19:76:08:de:2f:05:b4:d4 +# SHA1 Fingerprint: 3b:f6:8b:09:ae:2a:92:7b:ba:e3:8d:3f:11:95:d9:e6:44:0c:45:e2 +# SHA256 Fingerprint: ee:c9:97:c0:c3:0f:21:6f:7e:3b:8b:30:7d:2b:ae:42:41:2d:75:3f:c8:21:9d:af:d1:52:0b:25:72:85:0f:49 +-----BEGIN CERTIFICATE----- +MIICNTCCAbqgAwIBAgIQI/nD1jWvjyhLH/BU6n6XnTAKBggqhkjOPQQDAzBLMQsw +CQYDVQQGEwJDSDEZMBcGA1UECgwQT0lTVEUgRm91bmRhdGlvbjEhMB8GA1UEAwwY +T0lTVEUgU2VydmVyIFJvb3QgRUNDIEcxMB4XDTIzMDUzMTE0NDIyOFoXDTQ4MDUy +NDE0NDIyN1owSzELMAkGA1UEBhMCQ0gxGTAXBgNVBAoMEE9JU1RFIEZvdW5kYXRp +b24xITAfBgNVBAMMGE9JU1RFIFNlcnZlciBSb290IEVDQyBHMTB2MBAGByqGSM49 +AgEGBSuBBAAiA2IABBcv+hK8rBjzCvRE1nZCnrPoH7d5qVi2+GXROiFPqOujvqQy +cvO2Ackr/XeFblPdreqqLiWStukhEaivtUwL85Zgmjvn6hp4LrQ95SjeHIC6XG4N +2xml4z+cKrhAS93mT6NjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBQ3 +TYhlz/w9itWj8UnATgwQb0K0nDAdBgNVHQ4EFgQUN02IZc/8PYrVo/FJwE4MEG9C +tJwwDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMDA2kAMGYCMQCpKjAd0MKfkFFR +QD6VVCHNFmb3U2wIFjnQEnx/Yxvf4zgAOdktUyBFCxxgZzFDJe0CMQCSia7pXGKD +YmH5LVerVrkR3SW+ak5KGoJr3M/TvEqzPNcum9v4KGm8ay3sMaE641c= +-----END CERTIFICATE----- + +# Issuer: CN=OISTE Server Root RSA G1 O=OISTE Foundation +# Subject: CN=OISTE Server Root RSA G1 O=OISTE Foundation +# Label: " OISTE Server Root RSA G1" +# Serial: 113845518112613905024960613408179309848 +# MD5 Fingerprint: 23:a7:9e:d4:70:b8:b9:14:57:41:8a:7e:44:59:e2:68 +# SHA1 Fingerprint: f7:00:34:25:94:88:68:31:e4:34:87:3f:70:fe:86:b3:86:9f:f0:6e +# SHA256 Fingerprint: 9a:e3:62:32:a5:18:9f:fd:db:35:3d:fd:26:52:0c:01:53:95:d2:27:77:da:c5:9d:b5:7b:98:c0:89:a6:51:e6 +-----BEGIN CERTIFICATE----- +MIIFgzCCA2ugAwIBAgIQVaXZZ5Qoxu0M+ifdWwFNGDANBgkqhkiG9w0BAQwFADBL +MQswCQYDVQQGEwJDSDEZMBcGA1UECgwQT0lTVEUgRm91bmRhdGlvbjEhMB8GA1UE +AwwYT0lTVEUgU2VydmVyIFJvb3QgUlNBIEcxMB4XDTIzMDUzMTE0MzcxNloXDTQ4 +MDUyNDE0MzcxNVowSzELMAkGA1UEBhMCQ0gxGTAXBgNVBAoMEE9JU1RFIEZvdW5k +YXRpb24xITAfBgNVBAMMGE9JU1RFIFNlcnZlciBSb290IFJTQSBHMTCCAiIwDQYJ +KoZIhvcNAQEBBQADggIPADCCAgoCggIBAKqu9KuCz/vlNwvn1ZatkOhLKdxVYOPM +vLO8LZK55KN68YG0nnJyQ98/qwsmtO57Gmn7KNByXEptaZnwYx4M0rH/1ow00O7b +rEi56rAUjtgHqSSY3ekJvqgiG1k50SeH3BzN+Puz6+mTeO0Pzjd8JnduodgsIUzk +ik/HEzxux9UTl7Ko2yRpg1bTacuCErudG/L4NPKYKyqOBGf244ehHa1uzjZ0Dl4z +O8vbUZeUapU8zhhabkvG/AePLhq5SvdkNCncpo1Q4Y2LS+VIG24ugBA/5J8bZT8R +tOpXaZ+0AOuFJJkk9SGdl6r7NH8CaxWQrbueWhl/pIzY+m0o/DjH40ytas7ZTpOS +jswMZ78LS5bOZmdTaMsXEY5Z96ycG7mOaES3GK/m5Q9l3JUJsJMStR8+lKXHiHUh +sd4JJCpM4rzsTGdHwimIuQq6+cF0zowYJmXa92/GjHtoXAvuY8BeS/FOzJ8vD+Ho +mnqT8eDI278n5mUpezbgMxVz8p1rhAhoKzYHKyfMeNhqhw5HdPSqoBNdZH702xSu ++zrkL8Fl47l6QGzwBrd7KJvX4V84c5Ss2XCTLdyEr0YconosP4EmQufU2MVshGYR +i3drVByjtdgQ8K4p92cIiBdcuJd5z+orKu5YM+Vt6SmqZQENghPsJQtdLEByFSnT +kCz3GkPVavBpAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAU +8snBDw1jALvsRQ5KH7WxszbNDo0wHQYDVR0OBBYEFPLJwQ8NYwC77EUOSh+1sbM2 +zQ6NMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQwFAAOCAgEANGd5sjrG5T33 +I3K5Ce+SrScfoE4KsvXaFwyihdJ+klH9FWXXXGtkFu6KRcoMQzZENdl//nk6HOjG +5D1rd9QhEOP28yBOqb6J8xycqd+8MDoX0TJD0KqKchxRKEzdNsjkLWd9kYccnbz8 +qyiWXmFcuCIzGEgWUOrKL+mlSdx/PKQZvDatkuK59EvV6wit53j+F8Bdh3foZ3dP +AGav9LEDOr4SfEE15fSmG0eLy3n31r8Xbk5l8PjaV8GUgeV6Vg27Rn9vkf195hfk +gSe7BYhW3SCl95gtkRlpMV+bMPKZrXJAlszYd2abtNUOshD+FKrDgHGdPY3ofRRs +YWSGRqbXVMW215AWRqWFyp464+YTFrYVI8ypKVL9AMb2kI5Wj4kI3Zaq5tNqqYY1 +9tVFeEJKRvwDyF7YZvZFZSS0vod7VSCd9521Kvy5YhnLbDuv0204bKt7ph6N/Ome +/msVuduCmsuY33OhkKCgxeDoAaijFJzIwZqsFVAzje18KotzlUBDJvyBpCpfOZC3 +J8tRd/iWkx7P8nd9H0aTolkelUTFLXVksNb54Dxp6gS1HAviRkRNQzuXSXERvSS2 +wq1yVAb+axj5d9spLFKebXd7Yv0PTY6YMjAwcRLWJTXjn/hvnLXrahut6hDTlhZy +BiElxky8j3C7DOReIoMt0r7+hVu05L0= +-----END CERTIFICATE----- diff --git a/d2l-0.17.6/.venv/lib/python3.11/site-packages/certifi/core.py b/d2l-0.17.6/.venv/lib/python3.11/site-packages/certifi/core.py new file mode 100644 index 000000000..1c9661cc7 --- /dev/null +++ b/d2l-0.17.6/.venv/lib/python3.11/site-packages/certifi/core.py @@ -0,0 +1,83 @@ +""" +certifi.py +~~~~~~~~~~ + +This module returns the installation location of cacert.pem or its contents. +""" +import sys +import atexit + +def exit_cacert_ctx() -> None: + _CACERT_CTX.__exit__(None, None, None) # type: ignore[union-attr] + + +if sys.version_info >= (3, 11): + + from importlib.resources import as_file, files + + _CACERT_CTX = None + _CACERT_PATH = None + + def where() -> str: + # This is slightly terrible, but we want to delay extracting the file + # in cases where we're inside of a zipimport situation until someone + # actually calls where(), but we don't want to re-extract the file + # on every call of where(), so we'll do it once then store it in a + # global variable. + global _CACERT_CTX + global _CACERT_PATH + if _CACERT_PATH is None: + # This is slightly janky, the importlib.resources API wants you to + # manage the cleanup of this file, so it doesn't actually return a + # path, it returns a context manager that will give you the path + # when you enter it and will do any cleanup when you leave it. In + # the common case of not needing a temporary file, it will just + # return the file system location and the __exit__() is a no-op. + # + # We also have to hold onto the actual context manager, because + # it will do the cleanup whenever it gets garbage collected, so + # we will also store that at the global level as well. + _CACERT_CTX = as_file(files("certifi").joinpath("cacert.pem")) + _CACERT_PATH = str(_CACERT_CTX.__enter__()) + atexit.register(exit_cacert_ctx) + + return _CACERT_PATH + + def contents() -> str: + return files("certifi").joinpath("cacert.pem").read_text(encoding="ascii") + +else: + + from importlib.resources import path as get_path, read_text + + _CACERT_CTX = None + _CACERT_PATH = None + + def where() -> str: + # This is slightly terrible, but we want to delay extracting the + # file in cases where we're inside of a zipimport situation until + # someone actually calls where(), but we don't want to re-extract + # the file on every call of where(), so we'll do it once then store + # it in a global variable. + global _CACERT_CTX + global _CACERT_PATH + if _CACERT_PATH is None: + # This is slightly janky, the importlib.resources API wants you + # to manage the cleanup of this file, so it doesn't actually + # return a path, it returns a context manager that will give + # you the path when you enter it and will do any cleanup when + # you leave it. In the common case of not needing a temporary + # file, it will just return the file system location and the + # __exit__() is a no-op. + # + # We also have to hold onto the actual context manager, because + # it will do the cleanup whenever it gets garbage collected, so + # we will also store that at the global level as well. + _CACERT_CTX = get_path("certifi", "cacert.pem") + _CACERT_PATH = str(_CACERT_CTX.__enter__()) + atexit.register(exit_cacert_ctx) + + return _CACERT_PATH + + def contents() -> str: + return read_text("certifi", "cacert.pem", encoding="ascii") diff --git a/d2l-0.17.6/.venv/lib/python3.11/site-packages/certifi/py.typed b/d2l-0.17.6/.venv/lib/python3.11/site-packages/certifi/py.typed new file mode 100644 index 000000000..e69de29bb diff --git a/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer-3.4.4.dist-info/INSTALLER b/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer-3.4.4.dist-info/INSTALLER new file mode 100644 index 000000000..a1b589e38 --- /dev/null +++ b/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer-3.4.4.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer-3.4.4.dist-info/METADATA b/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer-3.4.4.dist-info/METADATA new file mode 100644 index 000000000..8d32edcc9 --- /dev/null +++ b/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer-3.4.4.dist-info/METADATA @@ -0,0 +1,764 @@ +Metadata-Version: 2.4 +Name: charset-normalizer +Version: 3.4.4 +Summary: The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet. +Author-email: "Ahmed R. TAHRI" +Maintainer-email: "Ahmed R. TAHRI" +License: MIT +Project-URL: Changelog, https://github.com/jawah/charset_normalizer/blob/master/CHANGELOG.md +Project-URL: Documentation, https://charset-normalizer.readthedocs.io/ +Project-URL: Code, https://github.com/jawah/charset_normalizer +Project-URL: Issue tracker, https://github.com/jawah/charset_normalizer/issues +Keywords: encoding,charset,charset-detector,detector,normalization,unicode,chardet,detect +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: 3.11 +Classifier: Programming Language :: Python :: 3.12 +Classifier: Programming Language :: Python :: 3.13 +Classifier: Programming Language :: Python :: 3.14 +Classifier: Programming Language :: Python :: 3 :: Only +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: PyPy +Classifier: Topic :: Text Processing :: Linguistic +Classifier: Topic :: Utilities +Classifier: Typing :: Typed +Requires-Python: >=3.7 +Description-Content-Type: text/markdown +License-File: LICENSE +Provides-Extra: unicode-backport +Dynamic: license-file + +

Charset Detection, for Everyone 👋

+ +

+ The Real First Universal Charset Detector
+ + + + + Download Count Total + + + + +

+

+ Featured Packages
+ + Static Badge + + + Static Badge + +

+

+ In other language (unofficial port - by the community)
+ + Static Badge + +

+ +> A library that helps you read text from an unknown charset encoding.
Motivated by `chardet`, +> I'm trying to resolve the issue by taking a new approach. +> All IANA character set names for which the Python core library provides codecs are supported. + +

+ >>>>> 👉 Try Me Online Now, Then Adopt Me 👈 <<<<< +

+ +This project offers you an alternative to **Universal Charset Encoding Detector**, also known as **Chardet**. + +| Feature | [Chardet](https://github.com/chardet/chardet) | Charset Normalizer | [cChardet](https://github.com/PyYoshi/cChardet) | +|--------------------------------------------------|:---------------------------------------------:|:--------------------------------------------------------------------------------------------------:|:-----------------------------------------------:| +| `Fast` | ❌ | ✅ | ✅ | +| `Universal**` | ❌ | ✅ | ❌ | +| `Reliable` **without** distinguishable standards | ❌ | ✅ | ✅ | +| `Reliable` **with** distinguishable standards | ✅ | ✅ | ✅ | +| `License` | LGPL-2.1
_restrictive_ | MIT | MPL-1.1
_restrictive_ | +| `Native Python` | ✅ | ✅ | ❌ | +| `Detect spoken language` | ❌ | ✅ | N/A | +| `UnicodeDecodeError Safety` | ❌ | ✅ | ❌ | +| `Whl Size (min)` | 193.6 kB | 42 kB | ~200 kB | +| `Supported Encoding` | 33 | 🎉 [99](https://charset-normalizer.readthedocs.io/en/latest/user/support.html#supported-encodings) | 40 | + +

+Reading Normalized TextCat Reading Text +

+ +*\*\* : They are clearly using specific code for a specific encoding even if covering most of used one*
+ +## ⚡ Performance + +This package offer better performance than its counterpart Chardet. Here are some numbers. + +| Package | Accuracy | Mean per file (ms) | File per sec (est) | +|-----------------------------------------------|:--------:|:------------------:|:------------------:| +| [chardet](https://github.com/chardet/chardet) | 86 % | 63 ms | 16 file/sec | +| charset-normalizer | **98 %** | **10 ms** | 100 file/sec | + +| Package | 99th percentile | 95th percentile | 50th percentile | +|-----------------------------------------------|:---------------:|:---------------:|:---------------:| +| [chardet](https://github.com/chardet/chardet) | 265 ms | 71 ms | 7 ms | +| charset-normalizer | 100 ms | 50 ms | 5 ms | + +_updated as of december 2024 using CPython 3.12_ + +Chardet's performance on larger file (1MB+) are very poor. Expect huge difference on large payload. + +> Stats are generated using 400+ files using default parameters. More details on used files, see GHA workflows. +> And yes, these results might change at any time. The dataset can be updated to include more files. +> The actual delays heavily depends on your CPU capabilities. The factors should remain the same. +> Keep in mind that the stats are generous and that Chardet accuracy vs our is measured using Chardet initial capability +> (e.g. Supported Encoding) Challenge-them if you want. + +## ✨ Installation + +Using pip: + +```sh +pip install charset-normalizer -U +``` + +## 🚀 Basic Usage + +### CLI +This package comes with a CLI. + +``` +usage: normalizer [-h] [-v] [-a] [-n] [-m] [-r] [-f] [-t THRESHOLD] + file [file ...] + +The Real First Universal Charset Detector. Discover originating encoding used +on text file. Normalize text to unicode. + +positional arguments: + files File(s) to be analysed + +optional arguments: + -h, --help show this help message and exit + -v, --verbose Display complementary information about file if any. + Stdout will contain logs about the detection process. + -a, --with-alternative + Output complementary possibilities if any. Top-level + JSON WILL be a list. + -n, --normalize Permit to normalize input file. If not set, program + does not write anything. + -m, --minimal Only output the charset detected to STDOUT. Disabling + JSON output. + -r, --replace Replace file when trying to normalize it instead of + creating a new one. + -f, --force Replace file without asking if you are sure, use this + flag with caution. + -t THRESHOLD, --threshold THRESHOLD + Define a custom maximum amount of chaos allowed in + decoded content. 0. <= chaos <= 1. + --version Show version information and exit. +``` + +```bash +normalizer ./data/sample.1.fr.srt +``` + +or + +```bash +python -m charset_normalizer ./data/sample.1.fr.srt +``` + +🎉 Since version 1.4.0 the CLI produce easily usable stdout result in JSON format. + +```json +{ + "path": "/home/default/projects/charset_normalizer/data/sample.1.fr.srt", + "encoding": "cp1252", + "encoding_aliases": [ + "1252", + "windows_1252" + ], + "alternative_encodings": [ + "cp1254", + "cp1256", + "cp1258", + "iso8859_14", + "iso8859_15", + "iso8859_16", + "iso8859_3", + "iso8859_9", + "latin_1", + "mbcs" + ], + "language": "French", + "alphabets": [ + "Basic Latin", + "Latin-1 Supplement" + ], + "has_sig_or_bom": false, + "chaos": 0.149, + "coherence": 97.152, + "unicode_path": null, + "is_preferred": true +} +``` + +### Python +*Just print out normalized text* +```python +from charset_normalizer import from_path + +results = from_path('./my_subtitle.srt') + +print(str(results.best())) +``` + +*Upgrade your code without effort* +```python +from charset_normalizer import detect +``` + +The above code will behave the same as **chardet**. We ensure that we offer the best (reasonable) BC result possible. + +See the docs for advanced usage : [readthedocs.io](https://charset-normalizer.readthedocs.io/en/latest/) + +## 😇 Why + +When I started using Chardet, I noticed that it was not suited to my expectations, and I wanted to propose a +reliable alternative using a completely different method. Also! I never back down on a good challenge! + +I **don't care** about the **originating charset** encoding, because **two different tables** can +produce **two identical rendered string.** +What I want is to get readable text, the best I can. + +In a way, **I'm brute forcing text decoding.** How cool is that ? 😎 + +Don't confuse package **ftfy** with charset-normalizer or chardet. ftfy goal is to repair Unicode string whereas charset-normalizer to convert raw file in unknown encoding to unicode. + +## 🍰 How + + - Discard all charset encoding table that could not fit the binary content. + - Measure noise, or the mess once opened (by chunks) with a corresponding charset encoding. + - Extract matches with the lowest mess detected. + - Additionally, we measure coherence / probe for a language. + +**Wait a minute**, what is noise/mess and coherence according to **YOU ?** + +*Noise :* I opened hundred of text files, **written by humans**, with the wrong encoding table. **I observed**, then +**I established** some ground rules about **what is obvious** when **it seems like** a mess (aka. defining noise in rendered text). + I know that my interpretation of what is noise is probably incomplete, feel free to contribute in order to + improve or rewrite it. + +*Coherence :* For each language there is on earth, we have computed ranked letter appearance occurrences (the best we can). So I thought +that intel is worth something here. So I use those records against decoded text to check if I can detect intelligent design. + +## ⚡ Known limitations + + - Language detection is unreliable when text contains two or more languages sharing identical letters. (eg. HTML (english tags) + Turkish content (Sharing Latin characters)) + - Every charset detector heavily depends on sufficient content. In common cases, do not bother run detection on very tiny content. + +## ⚠️ About Python EOLs + +**If you are running:** + +- Python >=2.7,<3.5: Unsupported +- Python 3.5: charset-normalizer < 2.1 +- Python 3.6: charset-normalizer < 3.1 +- Python 3.7: charset-normalizer < 4.0 + +Upgrade your Python interpreter as soon as possible. + +## 👤 Contributing + +Contributions, issues and feature requests are very much welcome.
+Feel free to check [issues page](https://github.com/ousret/charset_normalizer/issues) if you want to contribute. + +## 📝 License + +Copyright © [Ahmed TAHRI @Ousret](https://github.com/Ousret).
+This project is [MIT](https://github.com/Ousret/charset_normalizer/blob/master/LICENSE) licensed. + +Characters frequencies used in this project © 2012 [Denny Vrandečić](http://simia.net/letters/) + +## 💼 For Enterprise + +Professional support for charset-normalizer is available as part of the [Tidelift +Subscription][1]. Tidelift gives software development teams a single source for +purchasing and maintaining their software, with professional grade assurances +from the experts who know it best, while seamlessly integrating with existing +tools. + +[1]: https://tidelift.com/subscription/pkg/pypi-charset-normalizer?utm_source=pypi-charset-normalizer&utm_medium=readme + +[![OpenSSF Best Practices](https://www.bestpractices.dev/projects/7297/badge)](https://www.bestpractices.dev/projects/7297) + +# Changelog +All notable changes to charset-normalizer will be documented in this file. This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). + +## [3.4.4](https://github.com/Ousret/charset_normalizer/compare/3.4.2...3.4.4) (2025-10-13) + +### Changed +- Bound `setuptools` to a specific constraint `setuptools>=68,<=81`. +- Raised upper bound of mypyc for the optional pre-built extension to v1.18.2 + +### Removed +- `setuptools-scm` as a build dependency. + +### Misc +- Enforced hashes in `dev-requirements.txt` and created `ci-requirements.txt` for security purposes. +- Additional pre-built wheels for riscv64, s390x, and armv7l architectures. +- Restore ` multiple.intoto.jsonl` in GitHub releases in addition to individual attestation file per wheel. + +## [3.4.3](https://github.com/Ousret/charset_normalizer/compare/3.4.2...3.4.3) (2025-08-09) + +### Changed +- mypy(c) is no longer a required dependency at build time if `CHARSET_NORMALIZER_USE_MYPYC` isn't set to `1`. (#595) (#583) +- automatically lower confidence on small bytes samples that are not Unicode in `detect` output legacy function. (#391) + +### Added +- Custom build backend to overcome inability to mark mypy as an optional dependency in the build phase. +- Support for Python 3.14 + +### Fixed +- sdist archive contained useless directories. +- automatically fallback on valid UTF-16 or UTF-32 even if the md says it's noisy. (#633) + +### Misc +- SBOM are automatically published to the relevant GitHub release to comply with regulatory changes. + Each published wheel comes with its SBOM. We choose CycloneDX as the format. +- Prebuilt optimized wheel are no longer distributed by default for CPython 3.7 due to a change in cibuildwheel. + +## [3.4.2](https://github.com/Ousret/charset_normalizer/compare/3.4.1...3.4.2) (2025-05-02) + +### Fixed +- Addressed the DeprecationWarning in our CLI regarding `argparse.FileType` by backporting the target class into the package. (#591) +- Improved the overall reliability of the detector with CJK Ideographs. (#605) (#587) + +### Changed +- Optional mypyc compilation upgraded to version 1.15 for Python >= 3.8 + +## [3.4.1](https://github.com/Ousret/charset_normalizer/compare/3.4.0...3.4.1) (2024-12-24) + +### Changed +- Project metadata are now stored using `pyproject.toml` instead of `setup.cfg` using setuptools as the build backend. +- Enforce annotation delayed loading for a simpler and consistent types in the project. +- Optional mypyc compilation upgraded to version 1.14 for Python >= 3.8 + +### Added +- pre-commit configuration. +- noxfile. + +### Removed +- `build-requirements.txt` as per using `pyproject.toml` native build configuration. +- `bin/integration.py` and `bin/serve.py` in favor of downstream integration test (see noxfile). +- `setup.cfg` in favor of `pyproject.toml` metadata configuration. +- Unused `utils.range_scan` function. + +### Fixed +- Converting content to Unicode bytes may insert `utf_8` instead of preferred `utf-8`. (#572) +- Deprecation warning "'count' is passed as positional argument" when converting to Unicode bytes on Python 3.13+ + +## [3.4.0](https://github.com/Ousret/charset_normalizer/compare/3.3.2...3.4.0) (2024-10-08) + +### Added +- Argument `--no-preemptive` in the CLI to prevent the detector to search for hints. +- Support for Python 3.13 (#512) + +### Fixed +- Relax the TypeError exception thrown when trying to compare a CharsetMatch with anything else than a CharsetMatch. +- Improved the general reliability of the detector based on user feedbacks. (#520) (#509) (#498) (#407) (#537) +- Declared charset in content (preemptive detection) not changed when converting to utf-8 bytes. (#381) + +## [3.3.2](https://github.com/Ousret/charset_normalizer/compare/3.3.1...3.3.2) (2023-10-31) + +### Fixed +- Unintentional memory usage regression when using large payload that match several encoding (#376) +- Regression on some detection case showcased in the documentation (#371) + +### Added +- Noise (md) probe that identify malformed arabic representation due to the presence of letters in isolated form (credit to my wife) + +## [3.3.1](https://github.com/Ousret/charset_normalizer/compare/3.3.0...3.3.1) (2023-10-22) + +### Changed +- Optional mypyc compilation upgraded to version 1.6.1 for Python >= 3.8 +- Improved the general detection reliability based on reports from the community + +## [3.3.0](https://github.com/Ousret/charset_normalizer/compare/3.2.0...3.3.0) (2023-09-30) + +### Added +- Allow to execute the CLI (e.g. normalizer) through `python -m charset_normalizer.cli` or `python -m charset_normalizer` +- Support for 9 forgotten encoding that are supported by Python but unlisted in `encoding.aliases` as they have no alias (#323) + +### Removed +- (internal) Redundant utils.is_ascii function and unused function is_private_use_only +- (internal) charset_normalizer.assets is moved inside charset_normalizer.constant + +### Changed +- (internal) Unicode code blocks in constants are updated using the latest v15.0.0 definition to improve detection +- Optional mypyc compilation upgraded to version 1.5.1 for Python >= 3.8 + +### Fixed +- Unable to properly sort CharsetMatch when both chaos/noise and coherence were close due to an unreachable condition in \_\_lt\_\_ (#350) + +## [3.2.0](https://github.com/Ousret/charset_normalizer/compare/3.1.0...3.2.0) (2023-06-07) + +### Changed +- Typehint for function `from_path` no longer enforce `PathLike` as its first argument +- Minor improvement over the global detection reliability + +### Added +- Introduce function `is_binary` that relies on main capabilities, and optimized to detect binaries +- Propagate `enable_fallback` argument throughout `from_bytes`, `from_path`, and `from_fp` that allow a deeper control over the detection (default True) +- Explicit support for Python 3.12 + +### Fixed +- Edge case detection failure where a file would contain 'very-long' camel cased word (Issue #289) + +## [3.1.0](https://github.com/Ousret/charset_normalizer/compare/3.0.1...3.1.0) (2023-03-06) + +### Added +- Argument `should_rename_legacy` for legacy function `detect` and disregard any new arguments without errors (PR #262) + +### Removed +- Support for Python 3.6 (PR #260) + +### Changed +- Optional speedup provided by mypy/c 1.0.1 + +## [3.0.1](https://github.com/Ousret/charset_normalizer/compare/3.0.0...3.0.1) (2022-11-18) + +### Fixed +- Multi-bytes cutter/chunk generator did not always cut correctly (PR #233) + +### Changed +- Speedup provided by mypy/c 0.990 on Python >= 3.7 + +## [3.0.0](https://github.com/Ousret/charset_normalizer/compare/2.1.1...3.0.0) (2022-10-20) + +### Added +- Extend the capability of explain=True when cp_isolation contains at most two entries (min one), will log in details of the Mess-detector results +- Support for alternative language frequency set in charset_normalizer.assets.FREQUENCIES +- Add parameter `language_threshold` in `from_bytes`, `from_path` and `from_fp` to adjust the minimum expected coherence ratio +- `normalizer --version` now specify if current version provide extra speedup (meaning mypyc compilation whl) + +### Changed +- Build with static metadata using 'build' frontend +- Make the language detection stricter +- Optional: Module `md.py` can be compiled using Mypyc to provide an extra speedup up to 4x faster than v2.1 + +### Fixed +- CLI with opt --normalize fail when using full path for files +- TooManyAccentuatedPlugin induce false positive on the mess detection when too few alpha character have been fed to it +- Sphinx warnings when generating the documentation + +### Removed +- Coherence detector no longer return 'Simple English' instead return 'English' +- Coherence detector no longer return 'Classical Chinese' instead return 'Chinese' +- Breaking: Method `first()` and `best()` from CharsetMatch +- UTF-7 will no longer appear as "detected" without a recognized SIG/mark (is unreliable/conflict with ASCII) +- Breaking: Class aliases CharsetDetector, CharsetDoctor, CharsetNormalizerMatch and CharsetNormalizerMatches +- Breaking: Top-level function `normalize` +- Breaking: Properties `chaos_secondary_pass`, `coherence_non_latin` and `w_counter` from CharsetMatch +- Support for the backport `unicodedata2` + +## [3.0.0rc1](https://github.com/Ousret/charset_normalizer/compare/3.0.0b2...3.0.0rc1) (2022-10-18) + +### Added +- Extend the capability of explain=True when cp_isolation contains at most two entries (min one), will log in details of the Mess-detector results +- Support for alternative language frequency set in charset_normalizer.assets.FREQUENCIES +- Add parameter `language_threshold` in `from_bytes`, `from_path` and `from_fp` to adjust the minimum expected coherence ratio + +### Changed +- Build with static metadata using 'build' frontend +- Make the language detection stricter + +### Fixed +- CLI with opt --normalize fail when using full path for files +- TooManyAccentuatedPlugin induce false positive on the mess detection when too few alpha character have been fed to it + +### Removed +- Coherence detector no longer return 'Simple English' instead return 'English' +- Coherence detector no longer return 'Classical Chinese' instead return 'Chinese' + +## [3.0.0b2](https://github.com/Ousret/charset_normalizer/compare/3.0.0b1...3.0.0b2) (2022-08-21) + +### Added +- `normalizer --version` now specify if current version provide extra speedup (meaning mypyc compilation whl) + +### Removed +- Breaking: Method `first()` and `best()` from CharsetMatch +- UTF-7 will no longer appear as "detected" without a recognized SIG/mark (is unreliable/conflict with ASCII) + +### Fixed +- Sphinx warnings when generating the documentation + +## [3.0.0b1](https://github.com/Ousret/charset_normalizer/compare/2.1.0...3.0.0b1) (2022-08-15) + +### Changed +- Optional: Module `md.py` can be compiled using Mypyc to provide an extra speedup up to 4x faster than v2.1 + +### Removed +- Breaking: Class aliases CharsetDetector, CharsetDoctor, CharsetNormalizerMatch and CharsetNormalizerMatches +- Breaking: Top-level function `normalize` +- Breaking: Properties `chaos_secondary_pass`, `coherence_non_latin` and `w_counter` from CharsetMatch +- Support for the backport `unicodedata2` + +## [2.1.1](https://github.com/Ousret/charset_normalizer/compare/2.1.0...2.1.1) (2022-08-19) + +### Deprecated +- Function `normalize` scheduled for removal in 3.0 + +### Changed +- Removed useless call to decode in fn is_unprintable (#206) + +### Fixed +- Third-party library (i18n xgettext) crashing not recognizing utf_8 (PEP 263) with underscore from [@aleksandernovikov](https://github.com/aleksandernovikov) (#204) + +## [2.1.0](https://github.com/Ousret/charset_normalizer/compare/2.0.12...2.1.0) (2022-06-19) + +### Added +- Output the Unicode table version when running the CLI with `--version` (PR #194) + +### Changed +- Re-use decoded buffer for single byte character sets from [@nijel](https://github.com/nijel) (PR #175) +- Fixing some performance bottlenecks from [@deedy5](https://github.com/deedy5) (PR #183) + +### Fixed +- Workaround potential bug in cpython with Zero Width No-Break Space located in Arabic Presentation Forms-B, Unicode 1.1 not acknowledged as space (PR #175) +- CLI default threshold aligned with the API threshold from [@oleksandr-kuzmenko](https://github.com/oleksandr-kuzmenko) (PR #181) + +### Removed +- Support for Python 3.5 (PR #192) + +### Deprecated +- Use of backport unicodedata from `unicodedata2` as Python is quickly catching up, scheduled for removal in 3.0 (PR #194) + +## [2.0.12](https://github.com/Ousret/charset_normalizer/compare/2.0.11...2.0.12) (2022-02-12) + +### Fixed +- ASCII miss-detection on rare cases (PR #170) + +## [2.0.11](https://github.com/Ousret/charset_normalizer/compare/2.0.10...2.0.11) (2022-01-30) + +### Added +- Explicit support for Python 3.11 (PR #164) + +### Changed +- The logging behavior have been completely reviewed, now using only TRACE and DEBUG levels (PR #163 #165) + +## [2.0.10](https://github.com/Ousret/charset_normalizer/compare/2.0.9...2.0.10) (2022-01-04) + +### Fixed +- Fallback match entries might lead to UnicodeDecodeError for large bytes sequence (PR #154) + +### Changed +- Skipping the language-detection (CD) on ASCII (PR #155) + +## [2.0.9](https://github.com/Ousret/charset_normalizer/compare/2.0.8...2.0.9) (2021-12-03) + +### Changed +- Moderating the logging impact (since 2.0.8) for specific environments (PR #147) + +### Fixed +- Wrong logging level applied when setting kwarg `explain` to True (PR #146) + +## [2.0.8](https://github.com/Ousret/charset_normalizer/compare/2.0.7...2.0.8) (2021-11-24) +### Changed +- Improvement over Vietnamese detection (PR #126) +- MD improvement on trailing data and long foreign (non-pure latin) data (PR #124) +- Efficiency improvements in cd/alphabet_languages from [@adbar](https://github.com/adbar) (PR #122) +- call sum() without an intermediary list following PEP 289 recommendations from [@adbar](https://github.com/adbar) (PR #129) +- Code style as refactored by Sourcery-AI (PR #131) +- Minor adjustment on the MD around european words (PR #133) +- Remove and replace SRTs from assets / tests (PR #139) +- Initialize the library logger with a `NullHandler` by default from [@nmaynes](https://github.com/nmaynes) (PR #135) +- Setting kwarg `explain` to True will add provisionally (bounded to function lifespan) a specific stream handler (PR #135) + +### Fixed +- Fix large (misleading) sequence giving UnicodeDecodeError (PR #137) +- Avoid using too insignificant chunk (PR #137) + +### Added +- Add and expose function `set_logging_handler` to configure a specific StreamHandler from [@nmaynes](https://github.com/nmaynes) (PR #135) +- Add `CHANGELOG.md` entries, format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) (PR #141) + +## [2.0.7](https://github.com/Ousret/charset_normalizer/compare/2.0.6...2.0.7) (2021-10-11) +### Added +- Add support for Kazakh (Cyrillic) language detection (PR #109) + +### Changed +- Further, improve inferring the language from a given single-byte code page (PR #112) +- Vainly trying to leverage PEP263 when PEP3120 is not supported (PR #116) +- Refactoring for potential performance improvements in loops from [@adbar](https://github.com/adbar) (PR #113) +- Various detection improvement (MD+CD) (PR #117) + +### Removed +- Remove redundant logging entry about detected language(s) (PR #115) + +### Fixed +- Fix a minor inconsistency between Python 3.5 and other versions regarding language detection (PR #117 #102) + +## [2.0.6](https://github.com/Ousret/charset_normalizer/compare/2.0.5...2.0.6) (2021-09-18) +### Fixed +- Unforeseen regression with the loss of the backward-compatibility with some older minor of Python 3.5.x (PR #100) +- Fix CLI crash when using --minimal output in certain cases (PR #103) + +### Changed +- Minor improvement to the detection efficiency (less than 1%) (PR #106 #101) + +## [2.0.5](https://github.com/Ousret/charset_normalizer/compare/2.0.4...2.0.5) (2021-09-14) +### Changed +- The project now comply with: flake8, mypy, isort and black to ensure a better overall quality (PR #81) +- The BC-support with v1.x was improved, the old staticmethods are restored (PR #82) +- The Unicode detection is slightly improved (PR #93) +- Add syntax sugar \_\_bool\_\_ for results CharsetMatches list-container (PR #91) + +### Removed +- The project no longer raise warning on tiny content given for detection, will be simply logged as warning instead (PR #92) + +### Fixed +- In some rare case, the chunks extractor could cut in the middle of a multi-byte character and could mislead the mess detection (PR #95) +- Some rare 'space' characters could trip up the UnprintablePlugin/Mess detection (PR #96) +- The MANIFEST.in was not exhaustive (PR #78) + +## [2.0.4](https://github.com/Ousret/charset_normalizer/compare/2.0.3...2.0.4) (2021-07-30) +### Fixed +- The CLI no longer raise an unexpected exception when no encoding has been found (PR #70) +- Fix accessing the 'alphabets' property when the payload contains surrogate characters (PR #68) +- The logger could mislead (explain=True) on detected languages and the impact of one MBCS match (PR #72) +- Submatch factoring could be wrong in rare edge cases (PR #72) +- Multiple files given to the CLI were ignored when publishing results to STDOUT. (After the first path) (PR #72) +- Fix line endings from CRLF to LF for certain project files (PR #67) + +### Changed +- Adjust the MD to lower the sensitivity, thus improving the global detection reliability (PR #69 #76) +- Allow fallback on specified encoding if any (PR #71) + +## [2.0.3](https://github.com/Ousret/charset_normalizer/compare/2.0.2...2.0.3) (2021-07-16) +### Changed +- Part of the detection mechanism has been improved to be less sensitive, resulting in more accurate detection results. Especially ASCII. (PR #63) +- According to the community wishes, the detection will fall back on ASCII or UTF-8 in a last-resort case. (PR #64) + +## [2.0.2](https://github.com/Ousret/charset_normalizer/compare/2.0.1...2.0.2) (2021-07-15) +### Fixed +- Empty/Too small JSON payload miss-detection fixed. Report from [@tseaver](https://github.com/tseaver) (PR #59) + +### Changed +- Don't inject unicodedata2 into sys.modules from [@akx](https://github.com/akx) (PR #57) + +## [2.0.1](https://github.com/Ousret/charset_normalizer/compare/2.0.0...2.0.1) (2021-07-13) +### Fixed +- Make it work where there isn't a filesystem available, dropping assets frequencies.json. Report from [@sethmlarson](https://github.com/sethmlarson). (PR #55) +- Using explain=False permanently disable the verbose output in the current runtime (PR #47) +- One log entry (language target preemptive) was not show in logs when using explain=True (PR #47) +- Fix undesired exception (ValueError) on getitem of instance CharsetMatches (PR #52) + +### Changed +- Public function normalize default args values were not aligned with from_bytes (PR #53) + +### Added +- You may now use charset aliases in cp_isolation and cp_exclusion arguments (PR #47) + +## [2.0.0](https://github.com/Ousret/charset_normalizer/compare/1.4.1...2.0.0) (2021-07-02) +### Changed +- 4x to 5 times faster than the previous 1.4.0 release. At least 2x faster than Chardet. +- Accent has been made on UTF-8 detection, should perform rather instantaneous. +- The backward compatibility with Chardet has been greatly improved. The legacy detect function returns an identical charset name whenever possible. +- The detection mechanism has been slightly improved, now Turkish content is detected correctly (most of the time) +- The program has been rewritten to ease the readability and maintainability. (+Using static typing)+ +- utf_7 detection has been reinstated. + +### Removed +- This package no longer require anything when used with Python 3.5 (Dropped cached_property) +- Removed support for these languages: Catalan, Esperanto, Kazakh, Baque, Volapük, Azeri, Galician, Nynorsk, Macedonian, and Serbocroatian. +- The exception hook on UnicodeDecodeError has been removed. + +### Deprecated +- Methods coherence_non_latin, w_counter, chaos_secondary_pass of the class CharsetMatch are now deprecated and scheduled for removal in v3.0 + +### Fixed +- The CLI output used the relative path of the file(s). Should be absolute. + +## [1.4.1](https://github.com/Ousret/charset_normalizer/compare/1.4.0...1.4.1) (2021-05-28) +### Fixed +- Logger configuration/usage no longer conflict with others (PR #44) + +## [1.4.0](https://github.com/Ousret/charset_normalizer/compare/1.3.9...1.4.0) (2021-05-21) +### Removed +- Using standard logging instead of using the package loguru. +- Dropping nose test framework in favor of the maintained pytest. +- Choose to not use dragonmapper package to help with gibberish Chinese/CJK text. +- Require cached_property only for Python 3.5 due to constraint. Dropping for every other interpreter version. +- Stop support for UTF-7 that does not contain a SIG. +- Dropping PrettyTable, replaced with pure JSON output in CLI. + +### Fixed +- BOM marker in a CharsetNormalizerMatch instance could be False in rare cases even if obviously present. Due to the sub-match factoring process. +- Not searching properly for the BOM when trying utf32/16 parent codec. + +### Changed +- Improving the package final size by compressing frequencies.json. +- Huge improvement over the larges payload. + +### Added +- CLI now produces JSON consumable output. +- Return ASCII if given sequences fit. Given reasonable confidence. + +## [1.3.9](https://github.com/Ousret/charset_normalizer/compare/1.3.8...1.3.9) (2021-05-13) + +### Fixed +- In some very rare cases, you may end up getting encode/decode errors due to a bad bytes payload (PR #40) + +## [1.3.8](https://github.com/Ousret/charset_normalizer/compare/1.3.7...1.3.8) (2021-05-12) + +### Fixed +- Empty given payload for detection may cause an exception if trying to access the `alphabets` property. (PR #39) + +## [1.3.7](https://github.com/Ousret/charset_normalizer/compare/1.3.6...1.3.7) (2021-05-12) + +### Fixed +- The legacy detect function should return UTF-8-SIG if sig is present in the payload. (PR #38) + +## [1.3.6](https://github.com/Ousret/charset_normalizer/compare/1.3.5...1.3.6) (2021-02-09) + +### Changed +- Amend the previous release to allow prettytable 2.0 (PR #35) + +## [1.3.5](https://github.com/Ousret/charset_normalizer/compare/1.3.4...1.3.5) (2021-02-08) + +### Fixed +- Fix error while using the package with a python pre-release interpreter (PR #33) + +### Changed +- Dependencies refactoring, constraints revised. + +### Added +- Add python 3.9 and 3.10 to the supported interpreters + +MIT License + +Copyright (c) 2025 TAHRI Ahmed R. + +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/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer-3.4.4.dist-info/RECORD b/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer-3.4.4.dist-info/RECORD new file mode 100644 index 000000000..b1ab3e140 --- /dev/null +++ b/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer-3.4.4.dist-info/RECORD @@ -0,0 +1,35 @@ +../../../bin/normalizer,sha256=yPUQSMRIGlwvvI8qxXO0oXSr6VujGVQJKouMBovts-8,267 +charset_normalizer-3.4.4.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +charset_normalizer-3.4.4.dist-info/METADATA,sha256=jVuUFBti8dav19YLvWissTihVdF2ozUY4KKMw7jdkBQ,37303 +charset_normalizer-3.4.4.dist-info/RECORD,, +charset_normalizer-3.4.4.dist-info/WHEEL,sha256=VWNc5NH4DDoQDkc74R-nMZPza3RGJ6ac2abjVbvC-0k,141 +charset_normalizer-3.4.4.dist-info/entry_points.txt,sha256=ADSTKrkXZ3hhdOVFi6DcUEHQRS0xfxDIE_pEz4wLIXA,65 +charset_normalizer-3.4.4.dist-info/licenses/LICENSE,sha256=bQ1Bv-FwrGx9wkjJpj4lTQ-0WmDVCoJX0K-SxuJJuIc,1071 +charset_normalizer-3.4.4.dist-info/top_level.txt,sha256=7ASyzePr8_xuZWJsnqJjIBtyV8vhEo0wBCv1MPRRi3Q,19 +charset_normalizer/__init__.py,sha256=OKRxRv2Zhnqk00tqkN0c1BtJjm165fWXLydE52IKuHc,1590 +charset_normalizer/__main__.py,sha256=yzYxMR-IhKRHYwcSlavEv8oGdwxsR89mr2X09qXGdps,109 +charset_normalizer/__pycache__/__init__.cpython-311.pyc,, +charset_normalizer/__pycache__/__main__.cpython-311.pyc,, +charset_normalizer/__pycache__/api.cpython-311.pyc,, +charset_normalizer/__pycache__/cd.cpython-311.pyc,, +charset_normalizer/__pycache__/constant.cpython-311.pyc,, +charset_normalizer/__pycache__/legacy.cpython-311.pyc,, +charset_normalizer/__pycache__/md.cpython-311.pyc,, +charset_normalizer/__pycache__/models.cpython-311.pyc,, +charset_normalizer/__pycache__/utils.cpython-311.pyc,, +charset_normalizer/__pycache__/version.cpython-311.pyc,, +charset_normalizer/api.py,sha256=V07i8aVeCD8T2fSia3C-fn0i9t8qQguEBhsqszg32Ns,22668 +charset_normalizer/cd.py,sha256=WKTo1HDb-H9HfCDc3Bfwq5jzS25Ziy9SE2a74SgTq88,12522 +charset_normalizer/cli/__init__.py,sha256=D8I86lFk2-py45JvqxniTirSj_sFyE6sjaY_0-G1shc,136 +charset_normalizer/cli/__main__.py,sha256=dMaXG6IJXRvqq8z2tig7Qb83-BpWTln55ooiku5_uvg,12646 +charset_normalizer/cli/__pycache__/__init__.cpython-311.pyc,, +charset_normalizer/cli/__pycache__/__main__.cpython-311.pyc,, +charset_normalizer/constant.py,sha256=7UVY4ldYhmQMHUdgQ_sgZmzcQ0xxYxpBunqSZ-XJZ8U,42713 +charset_normalizer/legacy.py,sha256=sYBzSpzsRrg_wF4LP536pG64BItw7Tqtc3SMQAHvFLM,2731 +charset_normalizer/md.cpython-311-darwin.so,sha256=lMwdspv1dP5y_OV-I9n8Z3rcbHDLqeFGDuGlqHsxNjs,66592 +charset_normalizer/md.py,sha256=-_oN3h3_X99nkFfqamD3yu45DC_wfk5odH0Tr_CQiXs,20145 +charset_normalizer/md__mypyc.cpython-311-darwin.so,sha256=12YZUImqsi1d7bxPs4bVHgFUxCnPvL9w_WMa4vVO-Y0,485672 +charset_normalizer/models.py,sha256=lKXhOnIPtiakbK3i__J9wpOfzx3JDTKj7Dn3Rg0VaRI,12394 +charset_normalizer/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +charset_normalizer/utils.py,sha256=sTejPgrdlNsKNucZfJCxJ95lMTLA0ShHLLE3n5wpT9Q,12170 +charset_normalizer/version.py,sha256=nKE4qBNk5WA4LIJ_yIH_aSDfvtsyizkWMg-PUG-UZVk,115 diff --git a/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer-3.4.4.dist-info/WHEEL b/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer-3.4.4.dist-info/WHEEL new file mode 100644 index 000000000..230d6374b --- /dev/null +++ b/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer-3.4.4.dist-info/WHEEL @@ -0,0 +1,6 @@ +Wheel-Version: 1.0 +Generator: setuptools (80.9.0) +Root-Is-Purelib: false +Tag: cp311-cp311-macosx_10_9_universal2 +Generator: delocate 0.13.0 + diff --git a/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer-3.4.4.dist-info/entry_points.txt b/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer-3.4.4.dist-info/entry_points.txt new file mode 100644 index 000000000..65619e73e --- /dev/null +++ b/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer-3.4.4.dist-info/entry_points.txt @@ -0,0 +1,2 @@ +[console_scripts] +normalizer = charset_normalizer.cli:cli_detect diff --git a/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer-3.4.4.dist-info/licenses/LICENSE b/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer-3.4.4.dist-info/licenses/LICENSE new file mode 100644 index 000000000..9725772c7 --- /dev/null +++ b/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer-3.4.4.dist-info/licenses/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025 TAHRI Ahmed R. + +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/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer-3.4.4.dist-info/top_level.txt b/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer-3.4.4.dist-info/top_level.txt new file mode 100644 index 000000000..66958f0a0 --- /dev/null +++ b/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer-3.4.4.dist-info/top_level.txt @@ -0,0 +1 @@ +charset_normalizer diff --git a/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer/__init__.py b/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer/__init__.py new file mode 100644 index 000000000..0d3a37990 --- /dev/null +++ b/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer/__init__.py @@ -0,0 +1,48 @@ +""" +Charset-Normalizer +~~~~~~~~~~~~~~ +The Real First Universal Charset Detector. +A library that helps you read text from an unknown charset encoding. +Motivated by chardet, This package is trying to resolve the issue by taking a new approach. +All IANA character set names for which the Python core library provides codecs are supported. + +Basic usage: + >>> from charset_normalizer import from_bytes + >>> results = from_bytes('Bсеки човек има право на образование. Oбразованието!'.encode('utf_8')) + >>> best_guess = results.best() + >>> str(best_guess) + 'Bсеки човек има право на образование. Oбразованието!' + +Others methods and usages are available - see the full documentation +at . +:copyright: (c) 2021 by Ahmed TAHRI +:license: MIT, see LICENSE for more details. +""" + +from __future__ import annotations + +import logging + +from .api import from_bytes, from_fp, from_path, is_binary +from .legacy import detect +from .models import CharsetMatch, CharsetMatches +from .utils import set_logging_handler +from .version import VERSION, __version__ + +__all__ = ( + "from_fp", + "from_path", + "from_bytes", + "is_binary", + "detect", + "CharsetMatch", + "CharsetMatches", + "__version__", + "VERSION", + "set_logging_handler", +) + +# Attach a NullHandler to the top level logger by default +# https://docs.python.org/3.3/howto/logging.html#configuring-logging-for-a-library + +logging.getLogger("charset_normalizer").addHandler(logging.NullHandler()) diff --git a/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer/__main__.py b/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer/__main__.py new file mode 100644 index 000000000..e0e76f7bf --- /dev/null +++ b/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer/__main__.py @@ -0,0 +1,6 @@ +from __future__ import annotations + +from .cli import cli_detect + +if __name__ == "__main__": + cli_detect() diff --git a/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer/api.py b/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer/api.py new file mode 100644 index 000000000..ebd963905 --- /dev/null +++ b/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer/api.py @@ -0,0 +1,669 @@ +from __future__ import annotations + +import logging +from os import PathLike +from typing import BinaryIO + +from .cd import ( + coherence_ratio, + encoding_languages, + mb_encoding_languages, + merge_coherence_ratios, +) +from .constant import IANA_SUPPORTED, TOO_BIG_SEQUENCE, TOO_SMALL_SEQUENCE, TRACE +from .md import mess_ratio +from .models import CharsetMatch, CharsetMatches +from .utils import ( + any_specified_encoding, + cut_sequence_chunks, + iana_name, + identify_sig_or_bom, + is_cp_similar, + is_multi_byte_encoding, + should_strip_sig_or_bom, +) + +logger = logging.getLogger("charset_normalizer") +explain_handler = logging.StreamHandler() +explain_handler.setFormatter( + logging.Formatter("%(asctime)s | %(levelname)s | %(message)s") +) + + +def from_bytes( + sequences: bytes | bytearray, + steps: int = 5, + chunk_size: int = 512, + threshold: float = 0.2, + cp_isolation: list[str] | None = None, + cp_exclusion: list[str] | None = None, + preemptive_behaviour: bool = True, + explain: bool = False, + language_threshold: float = 0.1, + enable_fallback: bool = True, +) -> CharsetMatches: + """ + Given a raw bytes sequence, return the best possibles charset usable to render str objects. + If there is no results, it is a strong indicator that the source is binary/not text. + By default, the process will extract 5 blocks of 512o each to assess the mess and coherence of a given sequence. + And will give up a particular code page after 20% of measured mess. Those criteria are customizable at will. + + The preemptive behavior DOES NOT replace the traditional detection workflow, it prioritize a particular code page + but never take it for granted. Can improve the performance. + + You may want to focus your attention to some code page or/and not others, use cp_isolation and cp_exclusion for that + purpose. + + This function will strip the SIG in the payload/sequence every time except on UTF-16, UTF-32. + By default the library does not setup any handler other than the NullHandler, if you choose to set the 'explain' + toggle to True it will alter the logger configuration to add a StreamHandler that is suitable for debugging. + Custom logging format and handler can be set manually. + """ + + if not isinstance(sequences, (bytearray, bytes)): + raise TypeError( + "Expected object of type bytes or bytearray, got: {}".format( + type(sequences) + ) + ) + + if explain: + previous_logger_level: int = logger.level + logger.addHandler(explain_handler) + logger.setLevel(TRACE) + + length: int = len(sequences) + + if length == 0: + logger.debug("Encoding detection on empty bytes, assuming utf_8 intention.") + if explain: # Defensive: ensure exit path clean handler + logger.removeHandler(explain_handler) + logger.setLevel(previous_logger_level or logging.WARNING) + return CharsetMatches([CharsetMatch(sequences, "utf_8", 0.0, False, [], "")]) + + if cp_isolation is not None: + logger.log( + TRACE, + "cp_isolation is set. use this flag for debugging purpose. " + "limited list of encoding allowed : %s.", + ", ".join(cp_isolation), + ) + cp_isolation = [iana_name(cp, False) for cp in cp_isolation] + else: + cp_isolation = [] + + if cp_exclusion is not None: + logger.log( + TRACE, + "cp_exclusion is set. use this flag for debugging purpose. " + "limited list of encoding excluded : %s.", + ", ".join(cp_exclusion), + ) + cp_exclusion = [iana_name(cp, False) for cp in cp_exclusion] + else: + cp_exclusion = [] + + if length <= (chunk_size * steps): + logger.log( + TRACE, + "override steps (%i) and chunk_size (%i) as content does not fit (%i byte(s) given) parameters.", + steps, + chunk_size, + length, + ) + steps = 1 + chunk_size = length + + if steps > 1 and length / steps < chunk_size: + chunk_size = int(length / steps) + + is_too_small_sequence: bool = len(sequences) < TOO_SMALL_SEQUENCE + is_too_large_sequence: bool = len(sequences) >= TOO_BIG_SEQUENCE + + if is_too_small_sequence: + logger.log( + TRACE, + "Trying to detect encoding from a tiny portion of ({}) byte(s).".format( + length + ), + ) + elif is_too_large_sequence: + logger.log( + TRACE, + "Using lazy str decoding because the payload is quite large, ({}) byte(s).".format( + length + ), + ) + + prioritized_encodings: list[str] = [] + + specified_encoding: str | None = ( + any_specified_encoding(sequences) if preemptive_behaviour else None + ) + + if specified_encoding is not None: + prioritized_encodings.append(specified_encoding) + logger.log( + TRACE, + "Detected declarative mark in sequence. Priority +1 given for %s.", + specified_encoding, + ) + + tested: set[str] = set() + tested_but_hard_failure: list[str] = [] + tested_but_soft_failure: list[str] = [] + + fallback_ascii: CharsetMatch | None = None + fallback_u8: CharsetMatch | None = None + fallback_specified: CharsetMatch | None = None + + results: CharsetMatches = CharsetMatches() + + early_stop_results: CharsetMatches = CharsetMatches() + + sig_encoding, sig_payload = identify_sig_or_bom(sequences) + + if sig_encoding is not None: + prioritized_encodings.append(sig_encoding) + logger.log( + TRACE, + "Detected a SIG or BOM mark on first %i byte(s). Priority +1 given for %s.", + len(sig_payload), + sig_encoding, + ) + + prioritized_encodings.append("ascii") + + if "utf_8" not in prioritized_encodings: + prioritized_encodings.append("utf_8") + + for encoding_iana in prioritized_encodings + IANA_SUPPORTED: + if cp_isolation and encoding_iana not in cp_isolation: + continue + + if cp_exclusion and encoding_iana in cp_exclusion: + continue + + if encoding_iana in tested: + continue + + tested.add(encoding_iana) + + decoded_payload: str | None = None + bom_or_sig_available: bool = sig_encoding == encoding_iana + strip_sig_or_bom: bool = bom_or_sig_available and should_strip_sig_or_bom( + encoding_iana + ) + + if encoding_iana in {"utf_16", "utf_32"} and not bom_or_sig_available: + logger.log( + TRACE, + "Encoding %s won't be tested as-is because it require a BOM. Will try some sub-encoder LE/BE.", + encoding_iana, + ) + continue + if encoding_iana in {"utf_7"} and not bom_or_sig_available: + logger.log( + TRACE, + "Encoding %s won't be tested as-is because detection is unreliable without BOM/SIG.", + encoding_iana, + ) + continue + + try: + is_multi_byte_decoder: bool = is_multi_byte_encoding(encoding_iana) + except (ModuleNotFoundError, ImportError): + logger.log( + TRACE, + "Encoding %s does not provide an IncrementalDecoder", + encoding_iana, + ) + continue + + try: + if is_too_large_sequence and is_multi_byte_decoder is False: + str( + ( + sequences[: int(50e4)] + if strip_sig_or_bom is False + else sequences[len(sig_payload) : int(50e4)] + ), + encoding=encoding_iana, + ) + else: + decoded_payload = str( + ( + sequences + if strip_sig_or_bom is False + else sequences[len(sig_payload) :] + ), + encoding=encoding_iana, + ) + except (UnicodeDecodeError, LookupError) as e: + if not isinstance(e, LookupError): + logger.log( + TRACE, + "Code page %s does not fit given bytes sequence at ALL. %s", + encoding_iana, + str(e), + ) + tested_but_hard_failure.append(encoding_iana) + continue + + similar_soft_failure_test: bool = False + + for encoding_soft_failed in tested_but_soft_failure: + if is_cp_similar(encoding_iana, encoding_soft_failed): + similar_soft_failure_test = True + break + + if similar_soft_failure_test: + logger.log( + TRACE, + "%s is deemed too similar to code page %s and was consider unsuited already. Continuing!", + encoding_iana, + encoding_soft_failed, + ) + continue + + r_ = range( + 0 if not bom_or_sig_available else len(sig_payload), + length, + int(length / steps), + ) + + multi_byte_bonus: bool = ( + is_multi_byte_decoder + and decoded_payload is not None + and len(decoded_payload) < length + ) + + if multi_byte_bonus: + logger.log( + TRACE, + "Code page %s is a multi byte encoding table and it appear that at least one character " + "was encoded using n-bytes.", + encoding_iana, + ) + + max_chunk_gave_up: int = int(len(r_) / 4) + + max_chunk_gave_up = max(max_chunk_gave_up, 2) + early_stop_count: int = 0 + lazy_str_hard_failure = False + + md_chunks: list[str] = [] + md_ratios = [] + + try: + for chunk in cut_sequence_chunks( + sequences, + encoding_iana, + r_, + chunk_size, + bom_or_sig_available, + strip_sig_or_bom, + sig_payload, + is_multi_byte_decoder, + decoded_payload, + ): + md_chunks.append(chunk) + + md_ratios.append( + mess_ratio( + chunk, + threshold, + explain is True and 1 <= len(cp_isolation) <= 2, + ) + ) + + if md_ratios[-1] >= threshold: + early_stop_count += 1 + + if (early_stop_count >= max_chunk_gave_up) or ( + bom_or_sig_available and strip_sig_or_bom is False + ): + break + except ( + UnicodeDecodeError + ) as e: # Lazy str loading may have missed something there + logger.log( + TRACE, + "LazyStr Loading: After MD chunk decode, code page %s does not fit given bytes sequence at ALL. %s", + encoding_iana, + str(e), + ) + early_stop_count = max_chunk_gave_up + lazy_str_hard_failure = True + + # We might want to check the sequence again with the whole content + # Only if initial MD tests passes + if ( + not lazy_str_hard_failure + and is_too_large_sequence + and not is_multi_byte_decoder + ): + try: + sequences[int(50e3) :].decode(encoding_iana, errors="strict") + except UnicodeDecodeError as e: + logger.log( + TRACE, + "LazyStr Loading: After final lookup, code page %s does not fit given bytes sequence at ALL. %s", + encoding_iana, + str(e), + ) + tested_but_hard_failure.append(encoding_iana) + continue + + mean_mess_ratio: float = sum(md_ratios) / len(md_ratios) if md_ratios else 0.0 + if mean_mess_ratio >= threshold or early_stop_count >= max_chunk_gave_up: + tested_but_soft_failure.append(encoding_iana) + logger.log( + TRACE, + "%s was excluded because of initial chaos probing. Gave up %i time(s). " + "Computed mean chaos is %f %%.", + encoding_iana, + early_stop_count, + round(mean_mess_ratio * 100, ndigits=3), + ) + # Preparing those fallbacks in case we got nothing. + if ( + enable_fallback + and encoding_iana + in ["ascii", "utf_8", specified_encoding, "utf_16", "utf_32"] + and not lazy_str_hard_failure + ): + fallback_entry = CharsetMatch( + sequences, + encoding_iana, + threshold, + bom_or_sig_available, + [], + decoded_payload, + preemptive_declaration=specified_encoding, + ) + if encoding_iana == specified_encoding: + fallback_specified = fallback_entry + elif encoding_iana == "ascii": + fallback_ascii = fallback_entry + else: + fallback_u8 = fallback_entry + continue + + logger.log( + TRACE, + "%s passed initial chaos probing. Mean measured chaos is %f %%", + encoding_iana, + round(mean_mess_ratio * 100, ndigits=3), + ) + + if not is_multi_byte_decoder: + target_languages: list[str] = encoding_languages(encoding_iana) + else: + target_languages = mb_encoding_languages(encoding_iana) + + if target_languages: + logger.log( + TRACE, + "{} should target any language(s) of {}".format( + encoding_iana, str(target_languages) + ), + ) + + cd_ratios = [] + + # We shall skip the CD when its about ASCII + # Most of the time its not relevant to run "language-detection" on it. + if encoding_iana != "ascii": + for chunk in md_chunks: + chunk_languages = coherence_ratio( + chunk, + language_threshold, + ",".join(target_languages) if target_languages else None, + ) + + cd_ratios.append(chunk_languages) + + cd_ratios_merged = merge_coherence_ratios(cd_ratios) + + if cd_ratios_merged: + logger.log( + TRACE, + "We detected language {} using {}".format( + cd_ratios_merged, encoding_iana + ), + ) + + current_match = CharsetMatch( + sequences, + encoding_iana, + mean_mess_ratio, + bom_or_sig_available, + cd_ratios_merged, + ( + decoded_payload + if ( + is_too_large_sequence is False + or encoding_iana in [specified_encoding, "ascii", "utf_8"] + ) + else None + ), + preemptive_declaration=specified_encoding, + ) + + results.append(current_match) + + if ( + encoding_iana in [specified_encoding, "ascii", "utf_8"] + and mean_mess_ratio < 0.1 + ): + # If md says nothing to worry about, then... stop immediately! + if mean_mess_ratio == 0.0: + logger.debug( + "Encoding detection: %s is most likely the one.", + current_match.encoding, + ) + if explain: # Defensive: ensure exit path clean handler + logger.removeHandler(explain_handler) + logger.setLevel(previous_logger_level) + return CharsetMatches([current_match]) + + early_stop_results.append(current_match) + + if ( + len(early_stop_results) + and (specified_encoding is None or specified_encoding in tested) + and "ascii" in tested + and "utf_8" in tested + ): + probable_result: CharsetMatch = early_stop_results.best() # type: ignore[assignment] + logger.debug( + "Encoding detection: %s is most likely the one.", + probable_result.encoding, + ) + if explain: # Defensive: ensure exit path clean handler + logger.removeHandler(explain_handler) + logger.setLevel(previous_logger_level) + + return CharsetMatches([probable_result]) + + if encoding_iana == sig_encoding: + logger.debug( + "Encoding detection: %s is most likely the one as we detected a BOM or SIG within " + "the beginning of the sequence.", + encoding_iana, + ) + if explain: # Defensive: ensure exit path clean handler + logger.removeHandler(explain_handler) + logger.setLevel(previous_logger_level) + return CharsetMatches([results[encoding_iana]]) + + if len(results) == 0: + if fallback_u8 or fallback_ascii or fallback_specified: + logger.log( + TRACE, + "Nothing got out of the detection process. Using ASCII/UTF-8/Specified fallback.", + ) + + if fallback_specified: + logger.debug( + "Encoding detection: %s will be used as a fallback match", + fallback_specified.encoding, + ) + results.append(fallback_specified) + elif ( + (fallback_u8 and fallback_ascii is None) + or ( + fallback_u8 + and fallback_ascii + and fallback_u8.fingerprint != fallback_ascii.fingerprint + ) + or (fallback_u8 is not None) + ): + logger.debug("Encoding detection: utf_8 will be used as a fallback match") + results.append(fallback_u8) + elif fallback_ascii: + logger.debug("Encoding detection: ascii will be used as a fallback match") + results.append(fallback_ascii) + + if results: + logger.debug( + "Encoding detection: Found %s as plausible (best-candidate) for content. With %i alternatives.", + results.best().encoding, # type: ignore + len(results) - 1, + ) + else: + logger.debug("Encoding detection: Unable to determine any suitable charset.") + + if explain: + logger.removeHandler(explain_handler) + logger.setLevel(previous_logger_level) + + return results + + +def from_fp( + fp: BinaryIO, + steps: int = 5, + chunk_size: int = 512, + threshold: float = 0.20, + cp_isolation: list[str] | None = None, + cp_exclusion: list[str] | None = None, + preemptive_behaviour: bool = True, + explain: bool = False, + language_threshold: float = 0.1, + enable_fallback: bool = True, +) -> CharsetMatches: + """ + Same thing than the function from_bytes but using a file pointer that is already ready. + Will not close the file pointer. + """ + return from_bytes( + fp.read(), + steps, + chunk_size, + threshold, + cp_isolation, + cp_exclusion, + preemptive_behaviour, + explain, + language_threshold, + enable_fallback, + ) + + +def from_path( + path: str | bytes | PathLike, # type: ignore[type-arg] + steps: int = 5, + chunk_size: int = 512, + threshold: float = 0.20, + cp_isolation: list[str] | None = None, + cp_exclusion: list[str] | None = None, + preemptive_behaviour: bool = True, + explain: bool = False, + language_threshold: float = 0.1, + enable_fallback: bool = True, +) -> CharsetMatches: + """ + Same thing than the function from_bytes but with one extra step. Opening and reading given file path in binary mode. + Can raise IOError. + """ + with open(path, "rb") as fp: + return from_fp( + fp, + steps, + chunk_size, + threshold, + cp_isolation, + cp_exclusion, + preemptive_behaviour, + explain, + language_threshold, + enable_fallback, + ) + + +def is_binary( + fp_or_path_or_payload: PathLike | str | BinaryIO | bytes, # type: ignore[type-arg] + steps: int = 5, + chunk_size: int = 512, + threshold: float = 0.20, + cp_isolation: list[str] | None = None, + cp_exclusion: list[str] | None = None, + preemptive_behaviour: bool = True, + explain: bool = False, + language_threshold: float = 0.1, + enable_fallback: bool = False, +) -> bool: + """ + Detect if the given input (file, bytes, or path) points to a binary file. aka. not a string. + Based on the same main heuristic algorithms and default kwargs at the sole exception that fallbacks match + are disabled to be stricter around ASCII-compatible but unlikely to be a string. + """ + if isinstance(fp_or_path_or_payload, (str, PathLike)): + guesses = from_path( + fp_or_path_or_payload, + steps=steps, + chunk_size=chunk_size, + threshold=threshold, + cp_isolation=cp_isolation, + cp_exclusion=cp_exclusion, + preemptive_behaviour=preemptive_behaviour, + explain=explain, + language_threshold=language_threshold, + enable_fallback=enable_fallback, + ) + elif isinstance( + fp_or_path_or_payload, + ( + bytes, + bytearray, + ), + ): + guesses = from_bytes( + fp_or_path_or_payload, + steps=steps, + chunk_size=chunk_size, + threshold=threshold, + cp_isolation=cp_isolation, + cp_exclusion=cp_exclusion, + preemptive_behaviour=preemptive_behaviour, + explain=explain, + language_threshold=language_threshold, + enable_fallback=enable_fallback, + ) + else: + guesses = from_fp( + fp_or_path_or_payload, + steps=steps, + chunk_size=chunk_size, + threshold=threshold, + cp_isolation=cp_isolation, + cp_exclusion=cp_exclusion, + preemptive_behaviour=preemptive_behaviour, + explain=explain, + language_threshold=language_threshold, + enable_fallback=enable_fallback, + ) + + return not guesses diff --git a/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer/cd.py b/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer/cd.py new file mode 100644 index 000000000..71a3ed519 --- /dev/null +++ b/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer/cd.py @@ -0,0 +1,395 @@ +from __future__ import annotations + +import importlib +from codecs import IncrementalDecoder +from collections import Counter +from functools import lru_cache +from typing import Counter as TypeCounter + +from .constant import ( + FREQUENCIES, + KO_NAMES, + LANGUAGE_SUPPORTED_COUNT, + TOO_SMALL_SEQUENCE, + ZH_NAMES, +) +from .md import is_suspiciously_successive_range +from .models import CoherenceMatches +from .utils import ( + is_accentuated, + is_latin, + is_multi_byte_encoding, + is_unicode_range_secondary, + unicode_range, +) + + +def encoding_unicode_range(iana_name: str) -> list[str]: + """ + Return associated unicode ranges in a single byte code page. + """ + if is_multi_byte_encoding(iana_name): + raise OSError("Function not supported on multi-byte code page") + + decoder = importlib.import_module(f"encodings.{iana_name}").IncrementalDecoder + + p: IncrementalDecoder = decoder(errors="ignore") + seen_ranges: dict[str, int] = {} + character_count: int = 0 + + for i in range(0x40, 0xFF): + chunk: str = p.decode(bytes([i])) + + if chunk: + character_range: str | None = unicode_range(chunk) + + if character_range is None: + continue + + if is_unicode_range_secondary(character_range) is False: + if character_range not in seen_ranges: + seen_ranges[character_range] = 0 + seen_ranges[character_range] += 1 + character_count += 1 + + return sorted( + [ + character_range + for character_range in seen_ranges + if seen_ranges[character_range] / character_count >= 0.15 + ] + ) + + +def unicode_range_languages(primary_range: str) -> list[str]: + """ + Return inferred languages used with a unicode range. + """ + languages: list[str] = [] + + for language, characters in FREQUENCIES.items(): + for character in characters: + if unicode_range(character) == primary_range: + languages.append(language) + break + + return languages + + +@lru_cache() +def encoding_languages(iana_name: str) -> list[str]: + """ + Single-byte encoding language association. Some code page are heavily linked to particular language(s). + This function does the correspondence. + """ + unicode_ranges: list[str] = encoding_unicode_range(iana_name) + primary_range: str | None = None + + for specified_range in unicode_ranges: + if "Latin" not in specified_range: + primary_range = specified_range + break + + if primary_range is None: + return ["Latin Based"] + + return unicode_range_languages(primary_range) + + +@lru_cache() +def mb_encoding_languages(iana_name: str) -> list[str]: + """ + Multi-byte encoding language association. Some code page are heavily linked to particular language(s). + This function does the correspondence. + """ + if ( + iana_name.startswith("shift_") + or iana_name.startswith("iso2022_jp") + or iana_name.startswith("euc_j") + or iana_name == "cp932" + ): + return ["Japanese"] + if iana_name.startswith("gb") or iana_name in ZH_NAMES: + return ["Chinese"] + if iana_name.startswith("iso2022_kr") or iana_name in KO_NAMES: + return ["Korean"] + + return [] + + +@lru_cache(maxsize=LANGUAGE_SUPPORTED_COUNT) +def get_target_features(language: str) -> tuple[bool, bool]: + """ + Determine main aspects from a supported language if it contains accents and if is pure Latin. + """ + target_have_accents: bool = False + target_pure_latin: bool = True + + for character in FREQUENCIES[language]: + if not target_have_accents and is_accentuated(character): + target_have_accents = True + if target_pure_latin and is_latin(character) is False: + target_pure_latin = False + + return target_have_accents, target_pure_latin + + +def alphabet_languages( + characters: list[str], ignore_non_latin: bool = False +) -> list[str]: + """ + Return associated languages associated to given characters. + """ + languages: list[tuple[str, float]] = [] + + source_have_accents = any(is_accentuated(character) for character in characters) + + for language, language_characters in FREQUENCIES.items(): + target_have_accents, target_pure_latin = get_target_features(language) + + if ignore_non_latin and target_pure_latin is False: + continue + + if target_have_accents is False and source_have_accents: + continue + + character_count: int = len(language_characters) + + character_match_count: int = len( + [c for c in language_characters if c in characters] + ) + + ratio: float = character_match_count / character_count + + if ratio >= 0.2: + languages.append((language, ratio)) + + languages = sorted(languages, key=lambda x: x[1], reverse=True) + + return [compatible_language[0] for compatible_language in languages] + + +def characters_popularity_compare( + language: str, ordered_characters: list[str] +) -> float: + """ + Determine if a ordered characters list (by occurrence from most appearance to rarest) match a particular language. + The result is a ratio between 0. (absolutely no correspondence) and 1. (near perfect fit). + Beware that is function is not strict on the match in order to ease the detection. (Meaning close match is 1.) + """ + if language not in FREQUENCIES: + raise ValueError(f"{language} not available") + + character_approved_count: int = 0 + FREQUENCIES_language_set = set(FREQUENCIES[language]) + + ordered_characters_count: int = len(ordered_characters) + target_language_characters_count: int = len(FREQUENCIES[language]) + + large_alphabet: bool = target_language_characters_count > 26 + + for character, character_rank in zip( + ordered_characters, range(0, ordered_characters_count) + ): + if character not in FREQUENCIES_language_set: + continue + + character_rank_in_language: int = FREQUENCIES[language].index(character) + expected_projection_ratio: float = ( + target_language_characters_count / ordered_characters_count + ) + character_rank_projection: int = int(character_rank * expected_projection_ratio) + + if ( + large_alphabet is False + and abs(character_rank_projection - character_rank_in_language) > 4 + ): + continue + + if ( + large_alphabet is True + and abs(character_rank_projection - character_rank_in_language) + < target_language_characters_count / 3 + ): + character_approved_count += 1 + continue + + characters_before_source: list[str] = FREQUENCIES[language][ + 0:character_rank_in_language + ] + characters_after_source: list[str] = FREQUENCIES[language][ + character_rank_in_language: + ] + characters_before: list[str] = ordered_characters[0:character_rank] + characters_after: list[str] = ordered_characters[character_rank:] + + before_match_count: int = len( + set(characters_before) & set(characters_before_source) + ) + + after_match_count: int = len( + set(characters_after) & set(characters_after_source) + ) + + if len(characters_before_source) == 0 and before_match_count <= 4: + character_approved_count += 1 + continue + + if len(characters_after_source) == 0 and after_match_count <= 4: + character_approved_count += 1 + continue + + if ( + before_match_count / len(characters_before_source) >= 0.4 + or after_match_count / len(characters_after_source) >= 0.4 + ): + character_approved_count += 1 + continue + + return character_approved_count / len(ordered_characters) + + +def alpha_unicode_split(decoded_sequence: str) -> list[str]: + """ + Given a decoded text sequence, return a list of str. Unicode range / alphabet separation. + Ex. a text containing English/Latin with a bit a Hebrew will return two items in the resulting list; + One containing the latin letters and the other hebrew. + """ + layers: dict[str, str] = {} + + for character in decoded_sequence: + if character.isalpha() is False: + continue + + character_range: str | None = unicode_range(character) + + if character_range is None: + continue + + layer_target_range: str | None = None + + for discovered_range in layers: + if ( + is_suspiciously_successive_range(discovered_range, character_range) + is False + ): + layer_target_range = discovered_range + break + + if layer_target_range is None: + layer_target_range = character_range + + if layer_target_range not in layers: + layers[layer_target_range] = character.lower() + continue + + layers[layer_target_range] += character.lower() + + return list(layers.values()) + + +def merge_coherence_ratios(results: list[CoherenceMatches]) -> CoherenceMatches: + """ + This function merge results previously given by the function coherence_ratio. + The return type is the same as coherence_ratio. + """ + per_language_ratios: dict[str, list[float]] = {} + for result in results: + for sub_result in result: + language, ratio = sub_result + if language not in per_language_ratios: + per_language_ratios[language] = [ratio] + continue + per_language_ratios[language].append(ratio) + + merge = [ + ( + language, + round( + sum(per_language_ratios[language]) / len(per_language_ratios[language]), + 4, + ), + ) + for language in per_language_ratios + ] + + return sorted(merge, key=lambda x: x[1], reverse=True) + + +def filter_alt_coherence_matches(results: CoherenceMatches) -> CoherenceMatches: + """ + We shall NOT return "English—" in CoherenceMatches because it is an alternative + of "English". This function only keeps the best match and remove the em-dash in it. + """ + index_results: dict[str, list[float]] = dict() + + for result in results: + language, ratio = result + no_em_name: str = language.replace("—", "") + + if no_em_name not in index_results: + index_results[no_em_name] = [] + + index_results[no_em_name].append(ratio) + + if any(len(index_results[e]) > 1 for e in index_results): + filtered_results: CoherenceMatches = [] + + for language in index_results: + filtered_results.append((language, max(index_results[language]))) + + return filtered_results + + return results + + +@lru_cache(maxsize=2048) +def coherence_ratio( + decoded_sequence: str, threshold: float = 0.1, lg_inclusion: str | None = None +) -> CoherenceMatches: + """ + Detect ANY language that can be identified in given sequence. The sequence will be analysed by layers. + A layer = Character extraction by alphabets/ranges. + """ + + results: list[tuple[str, float]] = [] + ignore_non_latin: bool = False + + sufficient_match_count: int = 0 + + lg_inclusion_list = lg_inclusion.split(",") if lg_inclusion is not None else [] + if "Latin Based" in lg_inclusion_list: + ignore_non_latin = True + lg_inclusion_list.remove("Latin Based") + + for layer in alpha_unicode_split(decoded_sequence): + sequence_frequencies: TypeCounter[str] = Counter(layer) + most_common = sequence_frequencies.most_common() + + character_count: int = sum(o for c, o in most_common) + + if character_count <= TOO_SMALL_SEQUENCE: + continue + + popular_character_ordered: list[str] = [c for c, o in most_common] + + for language in lg_inclusion_list or alphabet_languages( + popular_character_ordered, ignore_non_latin + ): + ratio: float = characters_popularity_compare( + language, popular_character_ordered + ) + + if ratio < threshold: + continue + elif ratio >= 0.8: + sufficient_match_count += 1 + + results.append((language, round(ratio, 4))) + + if sufficient_match_count >= 3: + break + + return sorted( + filter_alt_coherence_matches(results), key=lambda x: x[1], reverse=True + ) diff --git a/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer/cli/__init__.py b/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer/cli/__init__.py new file mode 100644 index 000000000..543a5a4de --- /dev/null +++ b/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer/cli/__init__.py @@ -0,0 +1,8 @@ +from __future__ import annotations + +from .__main__ import cli_detect, query_yes_no + +__all__ = ( + "cli_detect", + "query_yes_no", +) diff --git a/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer/cli/__main__.py b/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer/cli/__main__.py new file mode 100644 index 000000000..cb64156a0 --- /dev/null +++ b/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer/cli/__main__.py @@ -0,0 +1,381 @@ +from __future__ import annotations + +import argparse +import sys +import typing +from json import dumps +from os.path import abspath, basename, dirname, join, realpath +from platform import python_version +from unicodedata import unidata_version + +import charset_normalizer.md as md_module +from charset_normalizer import from_fp +from charset_normalizer.models import CliDetectionResult +from charset_normalizer.version import __version__ + + +def query_yes_no(question: str, default: str = "yes") -> bool: + """Ask a yes/no question via input() and return their answer. + + "question" is a string that is presented to the user. + "default" is the presumed answer if the user just hits . + It must be "yes" (the default), "no" or None (meaning + an answer is required of the user). + + The "answer" return value is True for "yes" or False for "no". + + Credit goes to (c) https://stackoverflow.com/questions/3041986/apt-command-line-interface-like-yes-no-input + """ + valid = {"yes": True, "y": True, "ye": True, "no": False, "n": False} + if default is None: + prompt = " [y/n] " + elif default == "yes": + prompt = " [Y/n] " + elif default == "no": + prompt = " [y/N] " + else: + raise ValueError("invalid default answer: '%s'" % default) + + while True: + sys.stdout.write(question + prompt) + choice = input().lower() + if default is not None and choice == "": + return valid[default] + elif choice in valid: + return valid[choice] + else: + sys.stdout.write("Please respond with 'yes' or 'no' (or 'y' or 'n').\n") + + +class FileType: + """Factory for creating file object types + + Instances of FileType are typically passed as type= arguments to the + ArgumentParser add_argument() method. + + Keyword Arguments: + - mode -- A string indicating how the file is to be opened. Accepts the + same values as the builtin open() function. + - bufsize -- The file's desired buffer size. Accepts the same values as + the builtin open() function. + - encoding -- The file's encoding. Accepts the same values as the + builtin open() function. + - errors -- A string indicating how encoding and decoding errors are to + be handled. Accepts the same value as the builtin open() function. + + Backported from CPython 3.12 + """ + + def __init__( + self, + mode: str = "r", + bufsize: int = -1, + encoding: str | None = None, + errors: str | None = None, + ): + self._mode = mode + self._bufsize = bufsize + self._encoding = encoding + self._errors = errors + + def __call__(self, string: str) -> typing.IO: # type: ignore[type-arg] + # the special argument "-" means sys.std{in,out} + if string == "-": + if "r" in self._mode: + return sys.stdin.buffer if "b" in self._mode else sys.stdin + elif any(c in self._mode for c in "wax"): + return sys.stdout.buffer if "b" in self._mode else sys.stdout + else: + msg = f'argument "-" with mode {self._mode}' + raise ValueError(msg) + + # all other arguments are used as file names + try: + return open(string, self._mode, self._bufsize, self._encoding, self._errors) + except OSError as e: + message = f"can't open '{string}': {e}" + raise argparse.ArgumentTypeError(message) + + def __repr__(self) -> str: + args = self._mode, self._bufsize + kwargs = [("encoding", self._encoding), ("errors", self._errors)] + args_str = ", ".join( + [repr(arg) for arg in args if arg != -1] + + [f"{kw}={arg!r}" for kw, arg in kwargs if arg is not None] + ) + return f"{type(self).__name__}({args_str})" + + +def cli_detect(argv: list[str] | None = None) -> int: + """ + CLI assistant using ARGV and ArgumentParser + :param argv: + :return: 0 if everything is fine, anything else equal trouble + """ + parser = argparse.ArgumentParser( + description="The Real First Universal Charset Detector. " + "Discover originating encoding used on text file. " + "Normalize text to unicode." + ) + + parser.add_argument( + "files", type=FileType("rb"), nargs="+", help="File(s) to be analysed" + ) + parser.add_argument( + "-v", + "--verbose", + action="store_true", + default=False, + dest="verbose", + help="Display complementary information about file if any. " + "Stdout will contain logs about the detection process.", + ) + parser.add_argument( + "-a", + "--with-alternative", + action="store_true", + default=False, + dest="alternatives", + help="Output complementary possibilities if any. Top-level JSON WILL be a list.", + ) + parser.add_argument( + "-n", + "--normalize", + action="store_true", + default=False, + dest="normalize", + help="Permit to normalize input file. If not set, program does not write anything.", + ) + parser.add_argument( + "-m", + "--minimal", + action="store_true", + default=False, + dest="minimal", + help="Only output the charset detected to STDOUT. Disabling JSON output.", + ) + parser.add_argument( + "-r", + "--replace", + action="store_true", + default=False, + dest="replace", + help="Replace file when trying to normalize it instead of creating a new one.", + ) + parser.add_argument( + "-f", + "--force", + action="store_true", + default=False, + dest="force", + help="Replace file without asking if you are sure, use this flag with caution.", + ) + parser.add_argument( + "-i", + "--no-preemptive", + action="store_true", + default=False, + dest="no_preemptive", + help="Disable looking at a charset declaration to hint the detector.", + ) + parser.add_argument( + "-t", + "--threshold", + action="store", + default=0.2, + type=float, + dest="threshold", + help="Define a custom maximum amount of noise allowed in decoded content. 0. <= noise <= 1.", + ) + parser.add_argument( + "--version", + action="version", + version="Charset-Normalizer {} - Python {} - Unicode {} - SpeedUp {}".format( + __version__, + python_version(), + unidata_version, + "OFF" if md_module.__file__.lower().endswith(".py") else "ON", + ), + help="Show version information and exit.", + ) + + args = parser.parse_args(argv) + + if args.replace is True and args.normalize is False: + if args.files: + for my_file in args.files: + my_file.close() + print("Use --replace in addition of --normalize only.", file=sys.stderr) + return 1 + + if args.force is True and args.replace is False: + if args.files: + for my_file in args.files: + my_file.close() + print("Use --force in addition of --replace only.", file=sys.stderr) + return 1 + + if args.threshold < 0.0 or args.threshold > 1.0: + if args.files: + for my_file in args.files: + my_file.close() + print("--threshold VALUE should be between 0. AND 1.", file=sys.stderr) + return 1 + + x_ = [] + + for my_file in args.files: + matches = from_fp( + my_file, + threshold=args.threshold, + explain=args.verbose, + preemptive_behaviour=args.no_preemptive is False, + ) + + best_guess = matches.best() + + if best_guess is None: + print( + 'Unable to identify originating encoding for "{}". {}'.format( + my_file.name, + ( + "Maybe try increasing maximum amount of chaos." + if args.threshold < 1.0 + else "" + ), + ), + file=sys.stderr, + ) + x_.append( + CliDetectionResult( + abspath(my_file.name), + None, + [], + [], + "Unknown", + [], + False, + 1.0, + 0.0, + None, + True, + ) + ) + else: + x_.append( + CliDetectionResult( + abspath(my_file.name), + best_guess.encoding, + best_guess.encoding_aliases, + [ + cp + for cp in best_guess.could_be_from_charset + if cp != best_guess.encoding + ], + best_guess.language, + best_guess.alphabets, + best_guess.bom, + best_guess.percent_chaos, + best_guess.percent_coherence, + None, + True, + ) + ) + + if len(matches) > 1 and args.alternatives: + for el in matches: + if el != best_guess: + x_.append( + CliDetectionResult( + abspath(my_file.name), + el.encoding, + el.encoding_aliases, + [ + cp + for cp in el.could_be_from_charset + if cp != el.encoding + ], + el.language, + el.alphabets, + el.bom, + el.percent_chaos, + el.percent_coherence, + None, + False, + ) + ) + + if args.normalize is True: + if best_guess.encoding.startswith("utf") is True: + print( + '"{}" file does not need to be normalized, as it already came from unicode.'.format( + my_file.name + ), + file=sys.stderr, + ) + if my_file.closed is False: + my_file.close() + continue + + dir_path = dirname(realpath(my_file.name)) + file_name = basename(realpath(my_file.name)) + + o_: list[str] = file_name.split(".") + + if args.replace is False: + o_.insert(-1, best_guess.encoding) + if my_file.closed is False: + my_file.close() + elif ( + args.force is False + and query_yes_no( + 'Are you sure to normalize "{}" by replacing it ?'.format( + my_file.name + ), + "no", + ) + is False + ): + if my_file.closed is False: + my_file.close() + continue + + try: + x_[0].unicode_path = join(dir_path, ".".join(o_)) + + with open(x_[0].unicode_path, "wb") as fp: + fp.write(best_guess.output()) + except OSError as e: + print(str(e), file=sys.stderr) + if my_file.closed is False: + my_file.close() + return 2 + + if my_file.closed is False: + my_file.close() + + if args.minimal is False: + print( + dumps( + [el.__dict__ for el in x_] if len(x_) > 1 else x_[0].__dict__, + ensure_ascii=True, + indent=4, + ) + ) + else: + for my_file in args.files: + print( + ", ".join( + [ + el.encoding or "undefined" + for el in x_ + if el.path == abspath(my_file.name) + ] + ) + ) + + return 0 + + +if __name__ == "__main__": + cli_detect() diff --git a/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer/constant.py b/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer/constant.py new file mode 100644 index 000000000..cc71a019c --- /dev/null +++ b/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer/constant.py @@ -0,0 +1,2015 @@ +from __future__ import annotations + +from codecs import BOM_UTF8, BOM_UTF16_BE, BOM_UTF16_LE, BOM_UTF32_BE, BOM_UTF32_LE +from encodings.aliases import aliases +from re import IGNORECASE +from re import compile as re_compile + +# Contain for each eligible encoding a list of/item bytes SIG/BOM +ENCODING_MARKS: dict[str, bytes | list[bytes]] = { + "utf_8": BOM_UTF8, + "utf_7": [ + b"\x2b\x2f\x76\x38", + b"\x2b\x2f\x76\x39", + b"\x2b\x2f\x76\x2b", + b"\x2b\x2f\x76\x2f", + b"\x2b\x2f\x76\x38\x2d", + ], + "gb18030": b"\x84\x31\x95\x33", + "utf_32": [BOM_UTF32_BE, BOM_UTF32_LE], + "utf_16": [BOM_UTF16_BE, BOM_UTF16_LE], +} + +TOO_SMALL_SEQUENCE: int = 32 +TOO_BIG_SEQUENCE: int = int(10e6) + +UTF8_MAXIMAL_ALLOCATION: int = 1_112_064 + +# Up-to-date Unicode ucd/15.0.0 +UNICODE_RANGES_COMBINED: dict[str, range] = { + "Control character": range(32), + "Basic Latin": range(32, 128), + "Latin-1 Supplement": range(128, 256), + "Latin Extended-A": range(256, 384), + "Latin Extended-B": range(384, 592), + "IPA Extensions": range(592, 688), + "Spacing Modifier Letters": range(688, 768), + "Combining Diacritical Marks": range(768, 880), + "Greek and Coptic": range(880, 1024), + "Cyrillic": range(1024, 1280), + "Cyrillic Supplement": range(1280, 1328), + "Armenian": range(1328, 1424), + "Hebrew": range(1424, 1536), + "Arabic": range(1536, 1792), + "Syriac": range(1792, 1872), + "Arabic Supplement": range(1872, 1920), + "Thaana": range(1920, 1984), + "NKo": range(1984, 2048), + "Samaritan": range(2048, 2112), + "Mandaic": range(2112, 2144), + "Syriac Supplement": range(2144, 2160), + "Arabic Extended-B": range(2160, 2208), + "Arabic Extended-A": range(2208, 2304), + "Devanagari": range(2304, 2432), + "Bengali": range(2432, 2560), + "Gurmukhi": range(2560, 2688), + "Gujarati": range(2688, 2816), + "Oriya": range(2816, 2944), + "Tamil": range(2944, 3072), + "Telugu": range(3072, 3200), + "Kannada": range(3200, 3328), + "Malayalam": range(3328, 3456), + "Sinhala": range(3456, 3584), + "Thai": range(3584, 3712), + "Lao": range(3712, 3840), + "Tibetan": range(3840, 4096), + "Myanmar": range(4096, 4256), + "Georgian": range(4256, 4352), + "Hangul Jamo": range(4352, 4608), + "Ethiopic": range(4608, 4992), + "Ethiopic Supplement": range(4992, 5024), + "Cherokee": range(5024, 5120), + "Unified Canadian Aboriginal Syllabics": range(5120, 5760), + "Ogham": range(5760, 5792), + "Runic": range(5792, 5888), + "Tagalog": range(5888, 5920), + "Hanunoo": range(5920, 5952), + "Buhid": range(5952, 5984), + "Tagbanwa": range(5984, 6016), + "Khmer": range(6016, 6144), + "Mongolian": range(6144, 6320), + "Unified Canadian Aboriginal Syllabics Extended": range(6320, 6400), + "Limbu": range(6400, 6480), + "Tai Le": range(6480, 6528), + "New Tai Lue": range(6528, 6624), + "Khmer Symbols": range(6624, 6656), + "Buginese": range(6656, 6688), + "Tai Tham": range(6688, 6832), + "Combining Diacritical Marks Extended": range(6832, 6912), + "Balinese": range(6912, 7040), + "Sundanese": range(7040, 7104), + "Batak": range(7104, 7168), + "Lepcha": range(7168, 7248), + "Ol Chiki": range(7248, 7296), + "Cyrillic Extended-C": range(7296, 7312), + "Georgian Extended": range(7312, 7360), + "Sundanese Supplement": range(7360, 7376), + "Vedic Extensions": range(7376, 7424), + "Phonetic Extensions": range(7424, 7552), + "Phonetic Extensions Supplement": range(7552, 7616), + "Combining Diacritical Marks Supplement": range(7616, 7680), + "Latin Extended Additional": range(7680, 7936), + "Greek Extended": range(7936, 8192), + "General Punctuation": range(8192, 8304), + "Superscripts and Subscripts": range(8304, 8352), + "Currency Symbols": range(8352, 8400), + "Combining Diacritical Marks for Symbols": range(8400, 8448), + "Letterlike Symbols": range(8448, 8528), + "Number Forms": range(8528, 8592), + "Arrows": range(8592, 8704), + "Mathematical Operators": range(8704, 8960), + "Miscellaneous Technical": range(8960, 9216), + "Control Pictures": range(9216, 9280), + "Optical Character Recognition": range(9280, 9312), + "Enclosed Alphanumerics": range(9312, 9472), + "Box Drawing": range(9472, 9600), + "Block Elements": range(9600, 9632), + "Geometric Shapes": range(9632, 9728), + "Miscellaneous Symbols": range(9728, 9984), + "Dingbats": range(9984, 10176), + "Miscellaneous Mathematical Symbols-A": range(10176, 10224), + "Supplemental Arrows-A": range(10224, 10240), + "Braille Patterns": range(10240, 10496), + "Supplemental Arrows-B": range(10496, 10624), + "Miscellaneous Mathematical Symbols-B": range(10624, 10752), + "Supplemental Mathematical Operators": range(10752, 11008), + "Miscellaneous Symbols and Arrows": range(11008, 11264), + "Glagolitic": range(11264, 11360), + "Latin Extended-C": range(11360, 11392), + "Coptic": range(11392, 11520), + "Georgian Supplement": range(11520, 11568), + "Tifinagh": range(11568, 11648), + "Ethiopic Extended": range(11648, 11744), + "Cyrillic Extended-A": range(11744, 11776), + "Supplemental Punctuation": range(11776, 11904), + "CJK Radicals Supplement": range(11904, 12032), + "Kangxi Radicals": range(12032, 12256), + "Ideographic Description Characters": range(12272, 12288), + "CJK Symbols and Punctuation": range(12288, 12352), + "Hiragana": range(12352, 12448), + "Katakana": range(12448, 12544), + "Bopomofo": range(12544, 12592), + "Hangul Compatibility Jamo": range(12592, 12688), + "Kanbun": range(12688, 12704), + "Bopomofo Extended": range(12704, 12736), + "CJK Strokes": range(12736, 12784), + "Katakana Phonetic Extensions": range(12784, 12800), + "Enclosed CJK Letters and Months": range(12800, 13056), + "CJK Compatibility": range(13056, 13312), + "CJK Unified Ideographs Extension A": range(13312, 19904), + "Yijing Hexagram Symbols": range(19904, 19968), + "CJK Unified Ideographs": range(19968, 40960), + "Yi Syllables": range(40960, 42128), + "Yi Radicals": range(42128, 42192), + "Lisu": range(42192, 42240), + "Vai": range(42240, 42560), + "Cyrillic Extended-B": range(42560, 42656), + "Bamum": range(42656, 42752), + "Modifier Tone Letters": range(42752, 42784), + "Latin Extended-D": range(42784, 43008), + "Syloti Nagri": range(43008, 43056), + "Common Indic Number Forms": range(43056, 43072), + "Phags-pa": range(43072, 43136), + "Saurashtra": range(43136, 43232), + "Devanagari Extended": range(43232, 43264), + "Kayah Li": range(43264, 43312), + "Rejang": range(43312, 43360), + "Hangul Jamo Extended-A": range(43360, 43392), + "Javanese": range(43392, 43488), + "Myanmar Extended-B": range(43488, 43520), + "Cham": range(43520, 43616), + "Myanmar Extended-A": range(43616, 43648), + "Tai Viet": range(43648, 43744), + "Meetei Mayek Extensions": range(43744, 43776), + "Ethiopic Extended-A": range(43776, 43824), + "Latin Extended-E": range(43824, 43888), + "Cherokee Supplement": range(43888, 43968), + "Meetei Mayek": range(43968, 44032), + "Hangul Syllables": range(44032, 55216), + "Hangul Jamo Extended-B": range(55216, 55296), + "High Surrogates": range(55296, 56192), + "High Private Use Surrogates": range(56192, 56320), + "Low Surrogates": range(56320, 57344), + "Private Use Area": range(57344, 63744), + "CJK Compatibility Ideographs": range(63744, 64256), + "Alphabetic Presentation Forms": range(64256, 64336), + "Arabic Presentation Forms-A": range(64336, 65024), + "Variation Selectors": range(65024, 65040), + "Vertical Forms": range(65040, 65056), + "Combining Half Marks": range(65056, 65072), + "CJK Compatibility Forms": range(65072, 65104), + "Small Form Variants": range(65104, 65136), + "Arabic Presentation Forms-B": range(65136, 65280), + "Halfwidth and Fullwidth Forms": range(65280, 65520), + "Specials": range(65520, 65536), + "Linear B Syllabary": range(65536, 65664), + "Linear B Ideograms": range(65664, 65792), + "Aegean Numbers": range(65792, 65856), + "Ancient Greek Numbers": range(65856, 65936), + "Ancient Symbols": range(65936, 66000), + "Phaistos Disc": range(66000, 66048), + "Lycian": range(66176, 66208), + "Carian": range(66208, 66272), + "Coptic Epact Numbers": range(66272, 66304), + "Old Italic": range(66304, 66352), + "Gothic": range(66352, 66384), + "Old Permic": range(66384, 66432), + "Ugaritic": range(66432, 66464), + "Old Persian": range(66464, 66528), + "Deseret": range(66560, 66640), + "Shavian": range(66640, 66688), + "Osmanya": range(66688, 66736), + "Osage": range(66736, 66816), + "Elbasan": range(66816, 66864), + "Caucasian Albanian": range(66864, 66928), + "Vithkuqi": range(66928, 67008), + "Linear A": range(67072, 67456), + "Latin Extended-F": range(67456, 67520), + "Cypriot Syllabary": range(67584, 67648), + "Imperial Aramaic": range(67648, 67680), + "Palmyrene": range(67680, 67712), + "Nabataean": range(67712, 67760), + "Hatran": range(67808, 67840), + "Phoenician": range(67840, 67872), + "Lydian": range(67872, 67904), + "Meroitic Hieroglyphs": range(67968, 68000), + "Meroitic Cursive": range(68000, 68096), + "Kharoshthi": range(68096, 68192), + "Old South Arabian": range(68192, 68224), + "Old North Arabian": range(68224, 68256), + "Manichaean": range(68288, 68352), + "Avestan": range(68352, 68416), + "Inscriptional Parthian": range(68416, 68448), + "Inscriptional Pahlavi": range(68448, 68480), + "Psalter Pahlavi": range(68480, 68528), + "Old Turkic": range(68608, 68688), + "Old Hungarian": range(68736, 68864), + "Hanifi Rohingya": range(68864, 68928), + "Rumi Numeral Symbols": range(69216, 69248), + "Yezidi": range(69248, 69312), + "Arabic Extended-C": range(69312, 69376), + "Old Sogdian": range(69376, 69424), + "Sogdian": range(69424, 69488), + "Old Uyghur": range(69488, 69552), + "Chorasmian": range(69552, 69600), + "Elymaic": range(69600, 69632), + "Brahmi": range(69632, 69760), + "Kaithi": range(69760, 69840), + "Sora Sompeng": range(69840, 69888), + "Chakma": range(69888, 69968), + "Mahajani": range(69968, 70016), + "Sharada": range(70016, 70112), + "Sinhala Archaic Numbers": range(70112, 70144), + "Khojki": range(70144, 70224), + "Multani": range(70272, 70320), + "Khudawadi": range(70320, 70400), + "Grantha": range(70400, 70528), + "Newa": range(70656, 70784), + "Tirhuta": range(70784, 70880), + "Siddham": range(71040, 71168), + "Modi": range(71168, 71264), + "Mongolian Supplement": range(71264, 71296), + "Takri": range(71296, 71376), + "Ahom": range(71424, 71504), + "Dogra": range(71680, 71760), + "Warang Citi": range(71840, 71936), + "Dives Akuru": range(71936, 72032), + "Nandinagari": range(72096, 72192), + "Zanabazar Square": range(72192, 72272), + "Soyombo": range(72272, 72368), + "Unified Canadian Aboriginal Syllabics Extended-A": range(72368, 72384), + "Pau Cin Hau": range(72384, 72448), + "Devanagari Extended-A": range(72448, 72544), + "Bhaiksuki": range(72704, 72816), + "Marchen": range(72816, 72896), + "Masaram Gondi": range(72960, 73056), + "Gunjala Gondi": range(73056, 73136), + "Makasar": range(73440, 73472), + "Kawi": range(73472, 73568), + "Lisu Supplement": range(73648, 73664), + "Tamil Supplement": range(73664, 73728), + "Cuneiform": range(73728, 74752), + "Cuneiform Numbers and Punctuation": range(74752, 74880), + "Early Dynastic Cuneiform": range(74880, 75088), + "Cypro-Minoan": range(77712, 77824), + "Egyptian Hieroglyphs": range(77824, 78896), + "Egyptian Hieroglyph Format Controls": range(78896, 78944), + "Anatolian Hieroglyphs": range(82944, 83584), + "Bamum Supplement": range(92160, 92736), + "Mro": range(92736, 92784), + "Tangsa": range(92784, 92880), + "Bassa Vah": range(92880, 92928), + "Pahawh Hmong": range(92928, 93072), + "Medefaidrin": range(93760, 93856), + "Miao": range(93952, 94112), + "Ideographic Symbols and Punctuation": range(94176, 94208), + "Tangut": range(94208, 100352), + "Tangut Components": range(100352, 101120), + "Khitan Small Script": range(101120, 101632), + "Tangut Supplement": range(101632, 101760), + "Kana Extended-B": range(110576, 110592), + "Kana Supplement": range(110592, 110848), + "Kana Extended-A": range(110848, 110896), + "Small Kana Extension": range(110896, 110960), + "Nushu": range(110960, 111360), + "Duployan": range(113664, 113824), + "Shorthand Format Controls": range(113824, 113840), + "Znamenny Musical Notation": range(118528, 118736), + "Byzantine Musical Symbols": range(118784, 119040), + "Musical Symbols": range(119040, 119296), + "Ancient Greek Musical Notation": range(119296, 119376), + "Kaktovik Numerals": range(119488, 119520), + "Mayan Numerals": range(119520, 119552), + "Tai Xuan Jing Symbols": range(119552, 119648), + "Counting Rod Numerals": range(119648, 119680), + "Mathematical Alphanumeric Symbols": range(119808, 120832), + "Sutton SignWriting": range(120832, 121520), + "Latin Extended-G": range(122624, 122880), + "Glagolitic Supplement": range(122880, 122928), + "Cyrillic Extended-D": range(122928, 123024), + "Nyiakeng Puachue Hmong": range(123136, 123216), + "Toto": range(123536, 123584), + "Wancho": range(123584, 123648), + "Nag Mundari": range(124112, 124160), + "Ethiopic Extended-B": range(124896, 124928), + "Mende Kikakui": range(124928, 125152), + "Adlam": range(125184, 125280), + "Indic Siyaq Numbers": range(126064, 126144), + "Ottoman Siyaq Numbers": range(126208, 126288), + "Arabic Mathematical Alphabetic Symbols": range(126464, 126720), + "Mahjong Tiles": range(126976, 127024), + "Domino Tiles": range(127024, 127136), + "Playing Cards": range(127136, 127232), + "Enclosed Alphanumeric Supplement": range(127232, 127488), + "Enclosed Ideographic Supplement": range(127488, 127744), + "Miscellaneous Symbols and Pictographs": range(127744, 128512), + "Emoticons range(Emoji)": range(128512, 128592), + "Ornamental Dingbats": range(128592, 128640), + "Transport and Map Symbols": range(128640, 128768), + "Alchemical Symbols": range(128768, 128896), + "Geometric Shapes Extended": range(128896, 129024), + "Supplemental Arrows-C": range(129024, 129280), + "Supplemental Symbols and Pictographs": range(129280, 129536), + "Chess Symbols": range(129536, 129648), + "Symbols and Pictographs Extended-A": range(129648, 129792), + "Symbols for Legacy Computing": range(129792, 130048), + "CJK Unified Ideographs Extension B": range(131072, 173792), + "CJK Unified Ideographs Extension C": range(173824, 177984), + "CJK Unified Ideographs Extension D": range(177984, 178208), + "CJK Unified Ideographs Extension E": range(178208, 183984), + "CJK Unified Ideographs Extension F": range(183984, 191472), + "CJK Compatibility Ideographs Supplement": range(194560, 195104), + "CJK Unified Ideographs Extension G": range(196608, 201552), + "CJK Unified Ideographs Extension H": range(201552, 205744), + "Tags": range(917504, 917632), + "Variation Selectors Supplement": range(917760, 918000), + "Supplementary Private Use Area-A": range(983040, 1048576), + "Supplementary Private Use Area-B": range(1048576, 1114112), +} + + +UNICODE_SECONDARY_RANGE_KEYWORD: list[str] = [ + "Supplement", + "Extended", + "Extensions", + "Modifier", + "Marks", + "Punctuation", + "Symbols", + "Forms", + "Operators", + "Miscellaneous", + "Drawing", + "Block", + "Shapes", + "Supplemental", + "Tags", +] + +RE_POSSIBLE_ENCODING_INDICATION = re_compile( + r"(?:(?:encoding)|(?:charset)|(?:coding))(?:[\:= ]{1,10})(?:[\"\']?)([a-zA-Z0-9\-_]+)(?:[\"\']?)", + IGNORECASE, +) + +IANA_NO_ALIASES = [ + "cp720", + "cp737", + "cp856", + "cp874", + "cp875", + "cp1006", + "koi8_r", + "koi8_t", + "koi8_u", +] + +IANA_SUPPORTED: list[str] = sorted( + filter( + lambda x: x.endswith("_codec") is False + and x not in {"rot_13", "tactis", "mbcs"}, + list(set(aliases.values())) + IANA_NO_ALIASES, + ) +) + +IANA_SUPPORTED_COUNT: int = len(IANA_SUPPORTED) + +# pre-computed code page that are similar using the function cp_similarity. +IANA_SUPPORTED_SIMILAR: dict[str, list[str]] = { + "cp037": ["cp1026", "cp1140", "cp273", "cp500"], + "cp1026": ["cp037", "cp1140", "cp273", "cp500"], + "cp1125": ["cp866"], + "cp1140": ["cp037", "cp1026", "cp273", "cp500"], + "cp1250": ["iso8859_2"], + "cp1251": ["kz1048", "ptcp154"], + "cp1252": ["iso8859_15", "iso8859_9", "latin_1"], + "cp1253": ["iso8859_7"], + "cp1254": ["iso8859_15", "iso8859_9", "latin_1"], + "cp1257": ["iso8859_13"], + "cp273": ["cp037", "cp1026", "cp1140", "cp500"], + "cp437": ["cp850", "cp858", "cp860", "cp861", "cp862", "cp863", "cp865"], + "cp500": ["cp037", "cp1026", "cp1140", "cp273"], + "cp850": ["cp437", "cp857", "cp858", "cp865"], + "cp857": ["cp850", "cp858", "cp865"], + "cp858": ["cp437", "cp850", "cp857", "cp865"], + "cp860": ["cp437", "cp861", "cp862", "cp863", "cp865"], + "cp861": ["cp437", "cp860", "cp862", "cp863", "cp865"], + "cp862": ["cp437", "cp860", "cp861", "cp863", "cp865"], + "cp863": ["cp437", "cp860", "cp861", "cp862", "cp865"], + "cp865": ["cp437", "cp850", "cp857", "cp858", "cp860", "cp861", "cp862", "cp863"], + "cp866": ["cp1125"], + "iso8859_10": ["iso8859_14", "iso8859_15", "iso8859_4", "iso8859_9", "latin_1"], + "iso8859_11": ["tis_620"], + "iso8859_13": ["cp1257"], + "iso8859_14": [ + "iso8859_10", + "iso8859_15", + "iso8859_16", + "iso8859_3", + "iso8859_9", + "latin_1", + ], + "iso8859_15": [ + "cp1252", + "cp1254", + "iso8859_10", + "iso8859_14", + "iso8859_16", + "iso8859_3", + "iso8859_9", + "latin_1", + ], + "iso8859_16": [ + "iso8859_14", + "iso8859_15", + "iso8859_2", + "iso8859_3", + "iso8859_9", + "latin_1", + ], + "iso8859_2": ["cp1250", "iso8859_16", "iso8859_4"], + "iso8859_3": ["iso8859_14", "iso8859_15", "iso8859_16", "iso8859_9", "latin_1"], + "iso8859_4": ["iso8859_10", "iso8859_2", "iso8859_9", "latin_1"], + "iso8859_7": ["cp1253"], + "iso8859_9": [ + "cp1252", + "cp1254", + "cp1258", + "iso8859_10", + "iso8859_14", + "iso8859_15", + "iso8859_16", + "iso8859_3", + "iso8859_4", + "latin_1", + ], + "kz1048": ["cp1251", "ptcp154"], + "latin_1": [ + "cp1252", + "cp1254", + "cp1258", + "iso8859_10", + "iso8859_14", + "iso8859_15", + "iso8859_16", + "iso8859_3", + "iso8859_4", + "iso8859_9", + ], + "mac_iceland": ["mac_roman", "mac_turkish"], + "mac_roman": ["mac_iceland", "mac_turkish"], + "mac_turkish": ["mac_iceland", "mac_roman"], + "ptcp154": ["cp1251", "kz1048"], + "tis_620": ["iso8859_11"], +} + + +CHARDET_CORRESPONDENCE: dict[str, str] = { + "iso2022_kr": "ISO-2022-KR", + "iso2022_jp": "ISO-2022-JP", + "euc_kr": "EUC-KR", + "tis_620": "TIS-620", + "utf_32": "UTF-32", + "euc_jp": "EUC-JP", + "koi8_r": "KOI8-R", + "iso8859_1": "ISO-8859-1", + "iso8859_2": "ISO-8859-2", + "iso8859_5": "ISO-8859-5", + "iso8859_6": "ISO-8859-6", + "iso8859_7": "ISO-8859-7", + "iso8859_8": "ISO-8859-8", + "utf_16": "UTF-16", + "cp855": "IBM855", + "mac_cyrillic": "MacCyrillic", + "gb2312": "GB2312", + "gb18030": "GB18030", + "cp932": "CP932", + "cp866": "IBM866", + "utf_8": "utf-8", + "utf_8_sig": "UTF-8-SIG", + "shift_jis": "SHIFT_JIS", + "big5": "Big5", + "cp1250": "windows-1250", + "cp1251": "windows-1251", + "cp1252": "Windows-1252", + "cp1253": "windows-1253", + "cp1255": "windows-1255", + "cp1256": "windows-1256", + "cp1254": "Windows-1254", + "cp949": "CP949", +} + + +COMMON_SAFE_ASCII_CHARACTERS: set[str] = { + "<", + ">", + "=", + ":", + "/", + "&", + ";", + "{", + "}", + "[", + "]", + ",", + "|", + '"', + "-", + "(", + ")", +} + +# Sample character sets — replace with full lists if needed +COMMON_CHINESE_CHARACTERS = "的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞" + +COMMON_JAPANESE_CHARACTERS = "日一国年大十二本中長出三時行見月分後前生五間上東四今金九入学高円子外八六下来気小七山話女北午百書先名川千水半男西電校語土木聞食車何南万毎白天母火右読友左休父雨" + +COMMON_KOREAN_CHARACTERS = "一二三四五六七八九十百千萬上下左右中人女子大小山川日月火水木金土父母天地國名年時文校學生" + +# Combine all into a set +COMMON_CJK_CHARACTERS = set( + "".join( + [ + COMMON_CHINESE_CHARACTERS, + COMMON_JAPANESE_CHARACTERS, + COMMON_KOREAN_CHARACTERS, + ] + ) +) + +KO_NAMES: set[str] = {"johab", "cp949", "euc_kr"} +ZH_NAMES: set[str] = {"big5", "cp950", "big5hkscs", "hz"} + +# Logging LEVEL below DEBUG +TRACE: int = 5 + + +# Language label that contain the em dash "—" +# character are to be considered alternative seq to origin +FREQUENCIES: dict[str, list[str]] = { + "English": [ + "e", + "a", + "t", + "i", + "o", + "n", + "s", + "r", + "h", + "l", + "d", + "c", + "u", + "m", + "f", + "p", + "g", + "w", + "y", + "b", + "v", + "k", + "x", + "j", + "z", + "q", + ], + "English—": [ + "e", + "a", + "t", + "i", + "o", + "n", + "s", + "r", + "h", + "l", + "d", + "c", + "m", + "u", + "f", + "p", + "g", + "w", + "b", + "y", + "v", + "k", + "j", + "x", + "z", + "q", + ], + "German": [ + "e", + "n", + "i", + "r", + "s", + "t", + "a", + "d", + "h", + "u", + "l", + "g", + "o", + "c", + "m", + "b", + "f", + "k", + "w", + "z", + "p", + "v", + "ü", + "ä", + "ö", + "j", + ], + "French": [ + "e", + "a", + "s", + "n", + "i", + "t", + "r", + "l", + "u", + "o", + "d", + "c", + "p", + "m", + "é", + "v", + "g", + "f", + "b", + "h", + "q", + "à", + "x", + "è", + "y", + "j", + ], + "Dutch": [ + "e", + "n", + "a", + "i", + "r", + "t", + "o", + "d", + "s", + "l", + "g", + "h", + "v", + "m", + "u", + "k", + "c", + "p", + "b", + "w", + "j", + "z", + "f", + "y", + "x", + "ë", + ], + "Italian": [ + "e", + "i", + "a", + "o", + "n", + "l", + "t", + "r", + "s", + "c", + "d", + "u", + "p", + "m", + "g", + "v", + "f", + "b", + "z", + "h", + "q", + "è", + "à", + "k", + "y", + "ò", + ], + "Polish": [ + "a", + "i", + "o", + "e", + "n", + "r", + "z", + "w", + "s", + "c", + "t", + "k", + "y", + "d", + "p", + "m", + "u", + "l", + "j", + "ł", + "g", + "b", + "h", + "ą", + "ę", + "ó", + ], + "Spanish": [ + "e", + "a", + "o", + "n", + "s", + "r", + "i", + "l", + "d", + "t", + "c", + "u", + "m", + "p", + "b", + "g", + "v", + "f", + "y", + "ó", + "h", + "q", + "í", + "j", + "z", + "á", + ], + "Russian": [ + "о", + "а", + "е", + "и", + "н", + "с", + "т", + "р", + "в", + "л", + "к", + "м", + "д", + "п", + "у", + "г", + "я", + "ы", + "з", + "б", + "й", + "ь", + "ч", + "х", + "ж", + "ц", + ], + # Jap-Kanji + "Japanese": [ + "人", + "一", + "大", + "亅", + "丁", + "丨", + "竹", + "笑", + "口", + "日", + "今", + "二", + "彳", + "行", + "十", + "土", + "丶", + "寸", + "寺", + "時", + "乙", + "丿", + "乂", + "气", + "気", + "冂", + "巾", + "亠", + "市", + "目", + "儿", + "見", + "八", + "小", + "凵", + "県", + "月", + "彐", + "門", + "間", + "木", + "東", + "山", + "出", + "本", + "中", + "刀", + "分", + "耳", + "又", + "取", + "最", + "言", + "田", + "心", + "思", + "刂", + "前", + "京", + "尹", + "事", + "生", + "厶", + "云", + "会", + "未", + "来", + "白", + "冫", + "楽", + "灬", + "馬", + "尸", + "尺", + "駅", + "明", + "耂", + "者", + "了", + "阝", + "都", + "高", + "卜", + "占", + "厂", + "广", + "店", + "子", + "申", + "奄", + "亻", + "俺", + "上", + "方", + "冖", + "学", + "衣", + "艮", + "食", + "自", + ], + # Jap-Katakana + "Japanese—": [ + "ー", + "ン", + "ス", + "・", + "ル", + "ト", + "リ", + "イ", + "ア", + "ラ", + "ッ", + "ク", + "ド", + "シ", + "レ", + "ジ", + "タ", + "フ", + "ロ", + "カ", + "テ", + "マ", + "ィ", + "グ", + "バ", + "ム", + "プ", + "オ", + "コ", + "デ", + "ニ", + "ウ", + "メ", + "サ", + "ビ", + "ナ", + "ブ", + "ャ", + "エ", + "ュ", + "チ", + "キ", + "ズ", + "ダ", + "パ", + "ミ", + "ェ", + "ョ", + "ハ", + "セ", + "ベ", + "ガ", + "モ", + "ツ", + "ネ", + "ボ", + "ソ", + "ノ", + "ァ", + "ヴ", + "ワ", + "ポ", + "ペ", + "ピ", + "ケ", + "ゴ", + "ギ", + "ザ", + "ホ", + "ゲ", + "ォ", + "ヤ", + "ヒ", + "ユ", + "ヨ", + "ヘ", + "ゼ", + "ヌ", + "ゥ", + "ゾ", + "ヶ", + "ヂ", + "ヲ", + "ヅ", + "ヵ", + "ヱ", + "ヰ", + "ヮ", + "ヽ", + "゠", + "ヾ", + "ヷ", + "ヿ", + "ヸ", + "ヹ", + "ヺ", + ], + # Jap-Hiragana + "Japanese——": [ + "の", + "に", + "る", + "た", + "と", + "は", + "し", + "い", + "を", + "で", + "て", + "が", + "な", + "れ", + "か", + "ら", + "さ", + "っ", + "り", + "す", + "あ", + "も", + "こ", + "ま", + "う", + "く", + "よ", + "き", + "ん", + "め", + "お", + "け", + "そ", + "つ", + "だ", + "や", + "え", + "ど", + "わ", + "ち", + "み", + "せ", + "じ", + "ば", + "へ", + "び", + "ず", + "ろ", + "ほ", + "げ", + "む", + "べ", + "ひ", + "ょ", + "ゆ", + "ぶ", + "ご", + "ゃ", + "ね", + "ふ", + "ぐ", + "ぎ", + "ぼ", + "ゅ", + "づ", + "ざ", + "ぞ", + "ぬ", + "ぜ", + "ぱ", + "ぽ", + "ぷ", + "ぴ", + "ぃ", + "ぁ", + "ぇ", + "ぺ", + "ゞ", + "ぢ", + "ぉ", + "ぅ", + "ゐ", + "ゝ", + "ゑ", + "゛", + "゜", + "ゎ", + "ゔ", + "゚", + "ゟ", + "゙", + "ゕ", + "ゖ", + ], + "Portuguese": [ + "a", + "e", + "o", + "s", + "i", + "r", + "d", + "n", + "t", + "m", + "u", + "c", + "l", + "p", + "g", + "v", + "b", + "f", + "h", + "ã", + "q", + "é", + "ç", + "á", + "z", + "í", + ], + "Swedish": [ + "e", + "a", + "n", + "r", + "t", + "s", + "i", + "l", + "d", + "o", + "m", + "k", + "g", + "v", + "h", + "f", + "u", + "p", + "ä", + "c", + "b", + "ö", + "å", + "y", + "j", + "x", + ], + "Chinese": [ + "的", + "一", + "是", + "不", + "了", + "在", + "人", + "有", + "我", + "他", + "这", + "个", + "们", + "中", + "来", + "上", + "大", + "为", + "和", + "国", + "地", + "到", + "以", + "说", + "时", + "要", + "就", + "出", + "会", + "可", + "也", + "你", + "对", + "生", + "能", + "而", + "子", + "那", + "得", + "于", + "着", + "下", + "自", + "之", + "年", + "过", + "发", + "后", + "作", + "里", + "用", + "道", + "行", + "所", + "然", + "家", + "种", + "事", + "成", + "方", + "多", + "经", + "么", + "去", + "法", + "学", + "如", + "都", + "同", + "现", + "当", + "没", + "动", + "面", + "起", + "看", + "定", + "天", + "分", + "还", + "进", + "好", + "小", + "部", + "其", + "些", + "主", + "样", + "理", + "心", + "她", + "本", + "前", + "开", + "但", + "因", + "只", + "从", + "想", + "实", + ], + "Ukrainian": [ + "о", + "а", + "н", + "і", + "и", + "р", + "в", + "т", + "е", + "с", + "к", + "л", + "у", + "д", + "м", + "п", + "з", + "я", + "ь", + "б", + "г", + "й", + "ч", + "х", + "ц", + "ї", + ], + "Norwegian": [ + "e", + "r", + "n", + "t", + "a", + "s", + "i", + "o", + "l", + "d", + "g", + "k", + "m", + "v", + "f", + "p", + "u", + "b", + "h", + "å", + "y", + "j", + "ø", + "c", + "æ", + "w", + ], + "Finnish": [ + "a", + "i", + "n", + "t", + "e", + "s", + "l", + "o", + "u", + "k", + "ä", + "m", + "r", + "v", + "j", + "h", + "p", + "y", + "d", + "ö", + "g", + "c", + "b", + "f", + "w", + "z", + ], + "Vietnamese": [ + "n", + "h", + "t", + "i", + "c", + "g", + "a", + "o", + "u", + "m", + "l", + "r", + "à", + "đ", + "s", + "e", + "v", + "p", + "b", + "y", + "ư", + "d", + "á", + "k", + "ộ", + "ế", + ], + "Czech": [ + "o", + "e", + "a", + "n", + "t", + "s", + "i", + "l", + "v", + "r", + "k", + "d", + "u", + "m", + "p", + "í", + "c", + "h", + "z", + "á", + "y", + "j", + "b", + "ě", + "é", + "ř", + ], + "Hungarian": [ + "e", + "a", + "t", + "l", + "s", + "n", + "k", + "r", + "i", + "o", + "z", + "á", + "é", + "g", + "m", + "b", + "y", + "v", + "d", + "h", + "u", + "p", + "j", + "ö", + "f", + "c", + ], + "Korean": [ + "이", + "다", + "에", + "의", + "는", + "로", + "하", + "을", + "가", + "고", + "지", + "서", + "한", + "은", + "기", + "으", + "년", + "대", + "사", + "시", + "를", + "리", + "도", + "인", + "스", + "일", + ], + "Indonesian": [ + "a", + "n", + "e", + "i", + "r", + "t", + "u", + "s", + "d", + "k", + "m", + "l", + "g", + "p", + "b", + "o", + "h", + "y", + "j", + "c", + "w", + "f", + "v", + "z", + "x", + "q", + ], + "Turkish": [ + "a", + "e", + "i", + "n", + "r", + "l", + "ı", + "k", + "d", + "t", + "s", + "m", + "y", + "u", + "o", + "b", + "ü", + "ş", + "v", + "g", + "z", + "h", + "c", + "p", + "ç", + "ğ", + ], + "Romanian": [ + "e", + "i", + "a", + "r", + "n", + "t", + "u", + "l", + "o", + "c", + "s", + "d", + "p", + "m", + "ă", + "f", + "v", + "î", + "g", + "b", + "ș", + "ț", + "z", + "h", + "â", + "j", + ], + "Farsi": [ + "ا", + "ی", + "ر", + "د", + "ن", + "ه", + "و", + "م", + "ت", + "ب", + "س", + "ل", + "ک", + "ش", + "ز", + "ف", + "گ", + "ع", + "خ", + "ق", + "ج", + "آ", + "پ", + "ح", + "ط", + "ص", + ], + "Arabic": [ + "ا", + "ل", + "ي", + "م", + "و", + "ن", + "ر", + "ت", + "ب", + "ة", + "ع", + "د", + "س", + "ف", + "ه", + "ك", + "ق", + "أ", + "ح", + "ج", + "ش", + "ط", + "ص", + "ى", + "خ", + "إ", + ], + "Danish": [ + "e", + "r", + "n", + "t", + "a", + "i", + "s", + "d", + "l", + "o", + "g", + "m", + "k", + "f", + "v", + "u", + "b", + "h", + "p", + "å", + "y", + "ø", + "æ", + "c", + "j", + "w", + ], + "Serbian": [ + "а", + "и", + "о", + "е", + "н", + "р", + "с", + "у", + "т", + "к", + "ј", + "в", + "д", + "м", + "п", + "л", + "г", + "з", + "б", + "a", + "i", + "e", + "o", + "n", + "ц", + "ш", + ], + "Lithuanian": [ + "i", + "a", + "s", + "o", + "r", + "e", + "t", + "n", + "u", + "k", + "m", + "l", + "p", + "v", + "d", + "j", + "g", + "ė", + "b", + "y", + "ų", + "š", + "ž", + "c", + "ą", + "į", + ], + "Slovene": [ + "e", + "a", + "i", + "o", + "n", + "r", + "s", + "l", + "t", + "j", + "v", + "k", + "d", + "p", + "m", + "u", + "z", + "b", + "g", + "h", + "č", + "c", + "š", + "ž", + "f", + "y", + ], + "Slovak": [ + "o", + "a", + "e", + "n", + "i", + "r", + "v", + "t", + "s", + "l", + "k", + "d", + "m", + "p", + "u", + "c", + "h", + "j", + "b", + "z", + "á", + "y", + "ý", + "í", + "č", + "é", + ], + "Hebrew": [ + "י", + "ו", + "ה", + "ל", + "ר", + "ב", + "ת", + "מ", + "א", + "ש", + "נ", + "ע", + "ם", + "ד", + "ק", + "ח", + "פ", + "ס", + "כ", + "ג", + "ט", + "צ", + "ן", + "ז", + "ך", + ], + "Bulgarian": [ + "а", + "и", + "о", + "е", + "н", + "т", + "р", + "с", + "в", + "л", + "к", + "д", + "п", + "м", + "з", + "г", + "я", + "ъ", + "у", + "б", + "ч", + "ц", + "й", + "ж", + "щ", + "х", + ], + "Croatian": [ + "a", + "i", + "o", + "e", + "n", + "r", + "j", + "s", + "t", + "u", + "k", + "l", + "v", + "d", + "m", + "p", + "g", + "z", + "b", + "c", + "č", + "h", + "š", + "ž", + "ć", + "f", + ], + "Hindi": [ + "क", + "र", + "स", + "न", + "त", + "म", + "ह", + "प", + "य", + "ल", + "व", + "ज", + "द", + "ग", + "ब", + "श", + "ट", + "अ", + "ए", + "थ", + "भ", + "ड", + "च", + "ध", + "ष", + "इ", + ], + "Estonian": [ + "a", + "i", + "e", + "s", + "t", + "l", + "u", + "n", + "o", + "k", + "r", + "d", + "m", + "v", + "g", + "p", + "j", + "h", + "ä", + "b", + "õ", + "ü", + "f", + "c", + "ö", + "y", + ], + "Thai": [ + "า", + "น", + "ร", + "อ", + "ก", + "เ", + "ง", + "ม", + "ย", + "ล", + "ว", + "ด", + "ท", + "ส", + "ต", + "ะ", + "ป", + "บ", + "ค", + "ห", + "แ", + "จ", + "พ", + "ช", + "ข", + "ใ", + ], + "Greek": [ + "α", + "τ", + "ο", + "ι", + "ε", + "ν", + "ρ", + "σ", + "κ", + "η", + "π", + "ς", + "υ", + "μ", + "λ", + "ί", + "ό", + "ά", + "γ", + "έ", + "δ", + "ή", + "ω", + "χ", + "θ", + "ύ", + ], + "Tamil": [ + "க", + "த", + "ப", + "ட", + "ர", + "ம", + "ல", + "ன", + "வ", + "ற", + "ய", + "ள", + "ச", + "ந", + "இ", + "ண", + "அ", + "ஆ", + "ழ", + "ங", + "எ", + "உ", + "ஒ", + "ஸ", + ], + "Kazakh": [ + "а", + "ы", + "е", + "н", + "т", + "р", + "л", + "і", + "д", + "с", + "м", + "қ", + "к", + "о", + "б", + "и", + "у", + "ғ", + "ж", + "ң", + "з", + "ш", + "й", + "п", + "г", + "ө", + ], +} + +LANGUAGE_SUPPORTED_COUNT: int = len(FREQUENCIES) diff --git a/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer/legacy.py b/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer/legacy.py new file mode 100644 index 000000000..360a3107b --- /dev/null +++ b/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer/legacy.py @@ -0,0 +1,80 @@ +from __future__ import annotations + +from typing import TYPE_CHECKING, Any +from warnings import warn + +from .api import from_bytes +from .constant import CHARDET_CORRESPONDENCE, TOO_SMALL_SEQUENCE + +# TODO: remove this check when dropping Python 3.7 support +if TYPE_CHECKING: + from typing_extensions import TypedDict + + class ResultDict(TypedDict): + encoding: str | None + language: str + confidence: float | None + + +def detect( + byte_str: bytes, should_rename_legacy: bool = False, **kwargs: Any +) -> ResultDict: + """ + chardet legacy method + Detect the encoding of the given byte string. It should be mostly backward-compatible. + Encoding name will match Chardet own writing whenever possible. (Not on encoding name unsupported by it) + This function is deprecated and should be used to migrate your project easily, consult the documentation for + further information. Not planned for removal. + + :param byte_str: The byte sequence to examine. + :param should_rename_legacy: Should we rename legacy encodings + to their more modern equivalents? + """ + if len(kwargs): + warn( + f"charset-normalizer disregard arguments '{','.join(list(kwargs.keys()))}' in legacy function detect()" + ) + + if not isinstance(byte_str, (bytearray, bytes)): + raise TypeError( # pragma: nocover + f"Expected object of type bytes or bytearray, got: {type(byte_str)}" + ) + + if isinstance(byte_str, bytearray): + byte_str = bytes(byte_str) + + r = from_bytes(byte_str).best() + + encoding = r.encoding if r is not None else None + language = r.language if r is not None and r.language != "Unknown" else "" + confidence = 1.0 - r.chaos if r is not None else None + + # automatically lower confidence + # on small bytes samples. + # https://github.com/jawah/charset_normalizer/issues/391 + if ( + confidence is not None + and confidence >= 0.9 + and encoding + not in { + "utf_8", + "ascii", + } + and r.bom is False # type: ignore[union-attr] + and len(byte_str) < TOO_SMALL_SEQUENCE + ): + confidence -= 0.2 + + # Note: CharsetNormalizer does not return 'UTF-8-SIG' as the sig get stripped in the detection/normalization process + # but chardet does return 'utf-8-sig' and it is a valid codec name. + if r is not None and encoding == "utf_8" and r.bom: + encoding += "_sig" + + if should_rename_legacy is False and encoding in CHARDET_CORRESPONDENCE: + encoding = CHARDET_CORRESPONDENCE[encoding] + + return { + "encoding": encoding, + "language": language, + "confidence": confidence, + } diff --git a/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer/md.cpython-311-darwin.so b/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer/md.cpython-311-darwin.so new file mode 100755 index 0000000000000000000000000000000000000000..5e4a229cf8ffebdba2cdf595c20907bb1f6fcad0 GIT binary patch literal 66592 zcmeI5e{7Z28OKj=TUw-)HsA*G!&|ftol*--aie$(b+iL*O^d5jcDU`m(kpH6<@PO7 zBwKNk(QIsGF`LPjZ7$BOOvlEL#26h#7G?T}LJSyWqyDj31}<(g2_$g$ectz+_U&zH zLkuy_?@7*k&hz6u=bX=bZ_@WY=iI(_@r6Grr2-jB<)F+|ssP1oWR(Y9o>Y_yA^$mu zOFl9a36KB@kN^pg011!)36KB@kN^pgz^9DB8|UA@hzI`+Jou|z~|vQ z+1=M?Qnj+V2|%qR+caCL&RazYdf&TTl=idgsv##(=|(Aj5=QI?ALpsVb9wf|jF zcO9robiLnk=D~H5>w2Pphv-rhoCy+U+5_d^T$Spp>^gzg z{ZF}3-iD$5z0zJW9q1nHe?P4K@@VDj|24P8tNmfO9M-@5VT<9o{lDnCoanzv%8~mo za$Sb>pDMmCL#b48v3vc3d%Y3Y729UsgrdAQReT<;x|?uOC;yR3rJ80)?YPwLklJCX zeO+n?QEO}pC)=WqZjC2f!p*Ub(d68gh}JC~iH=4UYmGU2xQB*4qK4}STh1M|rTcfi zj7pNfl)t;>IXQ$P*{}fu3#31ut*ni7u9tG)|s&ge(yT0Fs{p89MUx% zOT&q__U5Qw7IkXku~r9W*a}=*RZAkCbhKC89go0Ij8k1>b;HBaMn~F}J5I9JTM~yg z2rJ_1ifFjGIo{~5WxCulpskV@De4-LGgaRVxnNx~pt1N3gH{E2pK`TFxo>(W-s32> z895&dqjo)4-i=IxWwlwipKN5i&tMj0m@lGm(*j)m^71sfF-=Z*GMacv-m%C!wye3z znzlJiF+>No3MxClf!SCECWYz*EcNGiba-$Q;*!r*&l_4>a011!) z36KB@kN^pg011!)348_!$o_vE@^_zOWnZy8F8AX>c8i(&nEU@j#?cl=mgiub#WdFb z|GF~qQmV;3QHw0k@B?Ys{`%4P|G&7{Yk8{)AhJK6-T!ZX-~i*3c$eP)f7-;WH1S0C z$HRkur!l$3So{AM-06ASz4KPKF^0s3QtQ$8|Nqv+t2Y5ePLE+@ODXsDNn~$7yk1&; zPp!9;Jp`qskb50g%6ksUa+?Z}N8bNGJf3{E+!PwRzdn8czl^INIenl009~|qQ>Q6I zUTMc==RDRq0vj)A!iX#}Y`WZY1i?;gXy*vd?o1rNZQH!- zcir&J+IjQ#Jvk4329dov;Pe8{5=h-;l{Yg>ws*d=|$jGhaR z26`@hM{UPsyVaYEw&PdipTIfJJ!dl24xD-HE~+Toz7o0*A#V+Y&gEvSe{T(_bE}oA z+pW~z&nY#fFLTO{YWTDT)E>9Z^JUxnGAHjShpx%AX+oP`voNm92q_A_v_8nM=mvHoW~qC<~h)fHRjpyNgwkR=q_i> zh43G3%s9{bhXOEAfoqSr^>M!XRla(@S1*Ns>0@g92g~;L;Oyr>+Zr4%J(o&-UOtpk z{|I&Yoqef)i25C-{sHRpp8!VtDgP_=PXOeMtpB(FA-b|0U6r%)A(WEsxp%4ilbo;h z{|^AfGbf7uUaXS<36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@ zkN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pM z5(Ki$|BWv&Iv{klJSC{9L7iog%>* zc@iwSi(OGoHga8=C(l9w^F>cmYC)R3JWXy)lM|lo_Khlrs8kkmHu5;+9OQHzR4SipmGdO>R%hGyq71v=mhWUByX z6mU^SVXsG)G*PLSRWP9PJaMdRMw9huiQE!Sw%oR0ZoJ)5WgXw$@XI$!f3{;z-Rax^ z`M`U>_-OOZU)_IfeEqX0kKMoGcSoN4_OrX{AOC#SsRt+Ce=KwQw|ZV*Iad2CZGUO! zzU*i6O8dTl-+$NVoIJdD_o bool: + """ + Determine if given character should be fed in. + """ + raise NotImplementedError # pragma: nocover + + def feed(self, character: str) -> None: + """ + The main routine to be executed upon character. + Insert the logic in witch the text would be considered chaotic. + """ + raise NotImplementedError # pragma: nocover + + def reset(self) -> None: # pragma: no cover + """ + Permit to reset the plugin to the initial state. + """ + raise NotImplementedError + + @property + def ratio(self) -> float: + """ + Compute the chaos ratio based on what your feed() has seen. + Must NOT be lower than 0.; No restriction gt 0. + """ + raise NotImplementedError # pragma: nocover + + +class TooManySymbolOrPunctuationPlugin(MessDetectorPlugin): + def __init__(self) -> None: + self._punctuation_count: int = 0 + self._symbol_count: int = 0 + self._character_count: int = 0 + + self._last_printable_char: str | None = None + self._frenzy_symbol_in_word: bool = False + + def eligible(self, character: str) -> bool: + return character.isprintable() + + def feed(self, character: str) -> None: + self._character_count += 1 + + if ( + character != self._last_printable_char + and character not in COMMON_SAFE_ASCII_CHARACTERS + ): + if is_punctuation(character): + self._punctuation_count += 1 + elif ( + character.isdigit() is False + and is_symbol(character) + and is_emoticon(character) is False + ): + self._symbol_count += 2 + + self._last_printable_char = character + + def reset(self) -> None: # Abstract + self._punctuation_count = 0 + self._character_count = 0 + self._symbol_count = 0 + + @property + def ratio(self) -> float: + if self._character_count == 0: + return 0.0 + + ratio_of_punctuation: float = ( + self._punctuation_count + self._symbol_count + ) / self._character_count + + return ratio_of_punctuation if ratio_of_punctuation >= 0.3 else 0.0 + + +class TooManyAccentuatedPlugin(MessDetectorPlugin): + def __init__(self) -> None: + self._character_count: int = 0 + self._accentuated_count: int = 0 + + def eligible(self, character: str) -> bool: + return character.isalpha() + + def feed(self, character: str) -> None: + self._character_count += 1 + + if is_accentuated(character): + self._accentuated_count += 1 + + def reset(self) -> None: # Abstract + self._character_count = 0 + self._accentuated_count = 0 + + @property + def ratio(self) -> float: + if self._character_count < 8: + return 0.0 + + ratio_of_accentuation: float = self._accentuated_count / self._character_count + return ratio_of_accentuation if ratio_of_accentuation >= 0.35 else 0.0 + + +class UnprintablePlugin(MessDetectorPlugin): + def __init__(self) -> None: + self._unprintable_count: int = 0 + self._character_count: int = 0 + + def eligible(self, character: str) -> bool: + return True + + def feed(self, character: str) -> None: + if is_unprintable(character): + self._unprintable_count += 1 + self._character_count += 1 + + def reset(self) -> None: # Abstract + self._unprintable_count = 0 + + @property + def ratio(self) -> float: + if self._character_count == 0: + return 0.0 + + return (self._unprintable_count * 8) / self._character_count + + +class SuspiciousDuplicateAccentPlugin(MessDetectorPlugin): + def __init__(self) -> None: + self._successive_count: int = 0 + self._character_count: int = 0 + + self._last_latin_character: str | None = None + + def eligible(self, character: str) -> bool: + return character.isalpha() and is_latin(character) + + def feed(self, character: str) -> None: + self._character_count += 1 + if ( + self._last_latin_character is not None + and is_accentuated(character) + and is_accentuated(self._last_latin_character) + ): + if character.isupper() and self._last_latin_character.isupper(): + self._successive_count += 1 + # Worse if its the same char duplicated with different accent. + if remove_accent(character) == remove_accent(self._last_latin_character): + self._successive_count += 1 + self._last_latin_character = character + + def reset(self) -> None: # Abstract + self._successive_count = 0 + self._character_count = 0 + self._last_latin_character = None + + @property + def ratio(self) -> float: + if self._character_count == 0: + return 0.0 + + return (self._successive_count * 2) / self._character_count + + +class SuspiciousRange(MessDetectorPlugin): + def __init__(self) -> None: + self._suspicious_successive_range_count: int = 0 + self._character_count: int = 0 + self._last_printable_seen: str | None = None + + def eligible(self, character: str) -> bool: + return character.isprintable() + + def feed(self, character: str) -> None: + self._character_count += 1 + + if ( + character.isspace() + or is_punctuation(character) + or character in COMMON_SAFE_ASCII_CHARACTERS + ): + self._last_printable_seen = None + return + + if self._last_printable_seen is None: + self._last_printable_seen = character + return + + unicode_range_a: str | None = unicode_range(self._last_printable_seen) + unicode_range_b: str | None = unicode_range(character) + + if is_suspiciously_successive_range(unicode_range_a, unicode_range_b): + self._suspicious_successive_range_count += 1 + + self._last_printable_seen = character + + def reset(self) -> None: # Abstract + self._character_count = 0 + self._suspicious_successive_range_count = 0 + self._last_printable_seen = None + + @property + def ratio(self) -> float: + if self._character_count <= 13: + return 0.0 + + ratio_of_suspicious_range_usage: float = ( + self._suspicious_successive_range_count * 2 + ) / self._character_count + + return ratio_of_suspicious_range_usage + + +class SuperWeirdWordPlugin(MessDetectorPlugin): + def __init__(self) -> None: + self._word_count: int = 0 + self._bad_word_count: int = 0 + self._foreign_long_count: int = 0 + + self._is_current_word_bad: bool = False + self._foreign_long_watch: bool = False + + self._character_count: int = 0 + self._bad_character_count: int = 0 + + self._buffer: str = "" + self._buffer_accent_count: int = 0 + self._buffer_glyph_count: int = 0 + + def eligible(self, character: str) -> bool: + return True + + def feed(self, character: str) -> None: + if character.isalpha(): + self._buffer += character + if is_accentuated(character): + self._buffer_accent_count += 1 + if ( + self._foreign_long_watch is False + and (is_latin(character) is False or is_accentuated(character)) + and is_cjk(character) is False + and is_hangul(character) is False + and is_katakana(character) is False + and is_hiragana(character) is False + and is_thai(character) is False + ): + self._foreign_long_watch = True + if ( + is_cjk(character) + or is_hangul(character) + or is_katakana(character) + or is_hiragana(character) + or is_thai(character) + ): + self._buffer_glyph_count += 1 + return + if not self._buffer: + return + if ( + character.isspace() or is_punctuation(character) or is_separator(character) + ) and self._buffer: + self._word_count += 1 + buffer_length: int = len(self._buffer) + + self._character_count += buffer_length + + if buffer_length >= 4: + if self._buffer_accent_count / buffer_length >= 0.5: + self._is_current_word_bad = True + # Word/Buffer ending with an upper case accentuated letter are so rare, + # that we will consider them all as suspicious. Same weight as foreign_long suspicious. + elif ( + is_accentuated(self._buffer[-1]) + and self._buffer[-1].isupper() + and all(_.isupper() for _ in self._buffer) is False + ): + self._foreign_long_count += 1 + self._is_current_word_bad = True + elif self._buffer_glyph_count == 1: + self._is_current_word_bad = True + self._foreign_long_count += 1 + if buffer_length >= 24 and self._foreign_long_watch: + camel_case_dst = [ + i + for c, i in zip(self._buffer, range(0, buffer_length)) + if c.isupper() + ] + probable_camel_cased: bool = False + + if camel_case_dst and (len(camel_case_dst) / buffer_length <= 0.3): + probable_camel_cased = True + + if not probable_camel_cased: + self._foreign_long_count += 1 + self._is_current_word_bad = True + + if self._is_current_word_bad: + self._bad_word_count += 1 + self._bad_character_count += len(self._buffer) + self._is_current_word_bad = False + + self._foreign_long_watch = False + self._buffer = "" + self._buffer_accent_count = 0 + self._buffer_glyph_count = 0 + elif ( + character not in {"<", ">", "-", "=", "~", "|", "_"} + and character.isdigit() is False + and is_symbol(character) + ): + self._is_current_word_bad = True + self._buffer += character + + def reset(self) -> None: # Abstract + self._buffer = "" + self._is_current_word_bad = False + self._foreign_long_watch = False + self._bad_word_count = 0 + self._word_count = 0 + self._character_count = 0 + self._bad_character_count = 0 + self._foreign_long_count = 0 + + @property + def ratio(self) -> float: + if self._word_count <= 10 and self._foreign_long_count == 0: + return 0.0 + + return self._bad_character_count / self._character_count + + +class CjkUncommonPlugin(MessDetectorPlugin): + """ + Detect messy CJK text that probably means nothing. + """ + + def __init__(self) -> None: + self._character_count: int = 0 + self._uncommon_count: int = 0 + + def eligible(self, character: str) -> bool: + return is_cjk(character) + + def feed(self, character: str) -> None: + self._character_count += 1 + + if is_cjk_uncommon(character): + self._uncommon_count += 1 + return + + def reset(self) -> None: # Abstract + self._character_count = 0 + self._uncommon_count = 0 + + @property + def ratio(self) -> float: + if self._character_count < 8: + return 0.0 + + uncommon_form_usage: float = self._uncommon_count / self._character_count + + # we can be pretty sure it's garbage when uncommon characters are widely + # used. otherwise it could just be traditional chinese for example. + return uncommon_form_usage / 10 if uncommon_form_usage > 0.5 else 0.0 + + +class ArchaicUpperLowerPlugin(MessDetectorPlugin): + def __init__(self) -> None: + self._buf: bool = False + + self._character_count_since_last_sep: int = 0 + + self._successive_upper_lower_count: int = 0 + self._successive_upper_lower_count_final: int = 0 + + self._character_count: int = 0 + + self._last_alpha_seen: str | None = None + self._current_ascii_only: bool = True + + def eligible(self, character: str) -> bool: + return True + + def feed(self, character: str) -> None: + is_concerned = character.isalpha() and is_case_variable(character) + chunk_sep = is_concerned is False + + if chunk_sep and self._character_count_since_last_sep > 0: + if ( + self._character_count_since_last_sep <= 64 + and character.isdigit() is False + and self._current_ascii_only is False + ): + self._successive_upper_lower_count_final += ( + self._successive_upper_lower_count + ) + + self._successive_upper_lower_count = 0 + self._character_count_since_last_sep = 0 + self._last_alpha_seen = None + self._buf = False + self._character_count += 1 + self._current_ascii_only = True + + return + + if self._current_ascii_only is True and character.isascii() is False: + self._current_ascii_only = False + + if self._last_alpha_seen is not None: + if (character.isupper() and self._last_alpha_seen.islower()) or ( + character.islower() and self._last_alpha_seen.isupper() + ): + if self._buf is True: + self._successive_upper_lower_count += 2 + self._buf = False + else: + self._buf = True + else: + self._buf = False + + self._character_count += 1 + self._character_count_since_last_sep += 1 + self._last_alpha_seen = character + + def reset(self) -> None: # Abstract + self._character_count = 0 + self._character_count_since_last_sep = 0 + self._successive_upper_lower_count = 0 + self._successive_upper_lower_count_final = 0 + self._last_alpha_seen = None + self._buf = False + self._current_ascii_only = True + + @property + def ratio(self) -> float: + if self._character_count == 0: + return 0.0 + + return self._successive_upper_lower_count_final / self._character_count + + +class ArabicIsolatedFormPlugin(MessDetectorPlugin): + def __init__(self) -> None: + self._character_count: int = 0 + self._isolated_form_count: int = 0 + + def reset(self) -> None: # Abstract + self._character_count = 0 + self._isolated_form_count = 0 + + def eligible(self, character: str) -> bool: + return is_arabic(character) + + def feed(self, character: str) -> None: + self._character_count += 1 + + if is_arabic_isolated_form(character): + self._isolated_form_count += 1 + + @property + def ratio(self) -> float: + if self._character_count < 8: + return 0.0 + + isolated_form_usage: float = self._isolated_form_count / self._character_count + + return isolated_form_usage + + +@lru_cache(maxsize=1024) +def is_suspiciously_successive_range( + unicode_range_a: str | None, unicode_range_b: str | None +) -> bool: + """ + Determine if two Unicode range seen next to each other can be considered as suspicious. + """ + if unicode_range_a is None or unicode_range_b is None: + return True + + if unicode_range_a == unicode_range_b: + return False + + if "Latin" in unicode_range_a and "Latin" in unicode_range_b: + return False + + if "Emoticons" in unicode_range_a or "Emoticons" in unicode_range_b: + return False + + # Latin characters can be accompanied with a combining diacritical mark + # eg. Vietnamese. + if ("Latin" in unicode_range_a or "Latin" in unicode_range_b) and ( + "Combining" in unicode_range_a or "Combining" in unicode_range_b + ): + return False + + keywords_range_a, keywords_range_b = ( + unicode_range_a.split(" "), + unicode_range_b.split(" "), + ) + + for el in keywords_range_a: + if el in UNICODE_SECONDARY_RANGE_KEYWORD: + continue + if el in keywords_range_b: + return False + + # Japanese Exception + range_a_jp_chars, range_b_jp_chars = ( + unicode_range_a + in ( + "Hiragana", + "Katakana", + ), + unicode_range_b in ("Hiragana", "Katakana"), + ) + if (range_a_jp_chars or range_b_jp_chars) and ( + "CJK" in unicode_range_a or "CJK" in unicode_range_b + ): + return False + if range_a_jp_chars and range_b_jp_chars: + return False + + if "Hangul" in unicode_range_a or "Hangul" in unicode_range_b: + if "CJK" in unicode_range_a or "CJK" in unicode_range_b: + return False + if unicode_range_a == "Basic Latin" or unicode_range_b == "Basic Latin": + return False + + # Chinese/Japanese use dedicated range for punctuation and/or separators. + if ("CJK" in unicode_range_a or "CJK" in unicode_range_b) or ( + unicode_range_a in ["Katakana", "Hiragana"] + and unicode_range_b in ["Katakana", "Hiragana"] + ): + if "Punctuation" in unicode_range_a or "Punctuation" in unicode_range_b: + return False + if "Forms" in unicode_range_a or "Forms" in unicode_range_b: + return False + if unicode_range_a == "Basic Latin" or unicode_range_b == "Basic Latin": + return False + + return True + + +@lru_cache(maxsize=2048) +def mess_ratio( + decoded_sequence: str, maximum_threshold: float = 0.2, debug: bool = False +) -> float: + """ + Compute a mess ratio given a decoded bytes sequence. The maximum threshold does stop the computation earlier. + """ + + detectors: list[MessDetectorPlugin] = [ + md_class() for md_class in MessDetectorPlugin.__subclasses__() + ] + + length: int = len(decoded_sequence) + 1 + + mean_mess_ratio: float = 0.0 + + if length < 512: + intermediary_mean_mess_ratio_calc: int = 32 + elif length <= 1024: + intermediary_mean_mess_ratio_calc = 64 + else: + intermediary_mean_mess_ratio_calc = 128 + + for character, index in zip(decoded_sequence + "\n", range(length)): + for detector in detectors: + if detector.eligible(character): + detector.feed(character) + + if ( + index > 0 and index % intermediary_mean_mess_ratio_calc == 0 + ) or index == length - 1: + mean_mess_ratio = sum(dt.ratio for dt in detectors) + + if mean_mess_ratio >= maximum_threshold: + break + + if debug: + logger = getLogger("charset_normalizer") + + logger.log( + TRACE, + "Mess-detector extended-analysis start. " + f"intermediary_mean_mess_ratio_calc={intermediary_mean_mess_ratio_calc} mean_mess_ratio={mean_mess_ratio} " + f"maximum_threshold={maximum_threshold}", + ) + + if len(decoded_sequence) > 16: + logger.log(TRACE, f"Starting with: {decoded_sequence[:16]}") + logger.log(TRACE, f"Ending with: {decoded_sequence[-16::]}") + + for dt in detectors: + logger.log(TRACE, f"{dt.__class__}: {dt.ratio}") + + return round(mean_mess_ratio, 3) diff --git a/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer/md__mypyc.cpython-311-darwin.so b/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer/md__mypyc.cpython-311-darwin.so new file mode 100755 index 0000000000000000000000000000000000000000..5880f3bb89a9b8afb94ebee6f10c0580db484d5c GIT binary patch literal 485672 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

gPHC2;BB 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 ZQ?@pI^2J9gXMZ%QvB%Pxzw&qg{{!}*$j1Nx literal 0 HcmV?d00001 diff --git a/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer/models.py b/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer/models.py new file mode 100644 index 000000000..1042758f8 --- /dev/null +++ b/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer/models.py @@ -0,0 +1,360 @@ +from __future__ import annotations + +from encodings.aliases import aliases +from hashlib import sha256 +from json import dumps +from re import sub +from typing import Any, Iterator, List, Tuple + +from .constant import RE_POSSIBLE_ENCODING_INDICATION, TOO_BIG_SEQUENCE +from .utils import iana_name, is_multi_byte_encoding, unicode_range + + +class CharsetMatch: + def __init__( + self, + payload: bytes, + guessed_encoding: str, + mean_mess_ratio: float, + has_sig_or_bom: bool, + languages: CoherenceMatches, + decoded_payload: str | None = None, + preemptive_declaration: str | None = None, + ): + self._payload: bytes = payload + + self._encoding: str = guessed_encoding + self._mean_mess_ratio: float = mean_mess_ratio + self._languages: CoherenceMatches = languages + self._has_sig_or_bom: bool = has_sig_or_bom + self._unicode_ranges: list[str] | None = None + + self._leaves: list[CharsetMatch] = [] + self._mean_coherence_ratio: float = 0.0 + + self._output_payload: bytes | None = None + self._output_encoding: str | None = None + + self._string: str | None = decoded_payload + + self._preemptive_declaration: str | None = preemptive_declaration + + def __eq__(self, other: object) -> bool: + if not isinstance(other, CharsetMatch): + if isinstance(other, str): + return iana_name(other) == self.encoding + return False + return self.encoding == other.encoding and self.fingerprint == other.fingerprint + + def __lt__(self, other: object) -> bool: + """ + Implemented to make sorted available upon CharsetMatches items. + """ + if not isinstance(other, CharsetMatch): + raise ValueError + + chaos_difference: float = abs(self.chaos - other.chaos) + coherence_difference: float = abs(self.coherence - other.coherence) + + # Below 1% difference --> Use Coherence + if chaos_difference < 0.01 and coherence_difference > 0.02: + return self.coherence > other.coherence + elif chaos_difference < 0.01 and coherence_difference <= 0.02: + # When having a difficult decision, use the result that decoded as many multi-byte as possible. + # preserve RAM usage! + if len(self._payload) >= TOO_BIG_SEQUENCE: + return self.chaos < other.chaos + return self.multi_byte_usage > other.multi_byte_usage + + return self.chaos < other.chaos + + @property + def multi_byte_usage(self) -> float: + return 1.0 - (len(str(self)) / len(self.raw)) + + def __str__(self) -> str: + # Lazy Str Loading + if self._string is None: + self._string = str(self._payload, self._encoding, "strict") + return self._string + + def __repr__(self) -> str: + return f"" + + def add_submatch(self, other: CharsetMatch) -> None: + if not isinstance(other, CharsetMatch) or other == self: + raise ValueError( + "Unable to add instance <{}> as a submatch of a CharsetMatch".format( + other.__class__ + ) + ) + + other._string = None # Unload RAM usage; dirty trick. + self._leaves.append(other) + + @property + def encoding(self) -> str: + return self._encoding + + @property + def encoding_aliases(self) -> list[str]: + """ + Encoding name are known by many name, using this could help when searching for IBM855 when it's listed as CP855. + """ + also_known_as: list[str] = [] + for u, p in aliases.items(): + if self.encoding == u: + also_known_as.append(p) + elif self.encoding == p: + also_known_as.append(u) + return also_known_as + + @property + def bom(self) -> bool: + return self._has_sig_or_bom + + @property + def byte_order_mark(self) -> bool: + return self._has_sig_or_bom + + @property + def languages(self) -> list[str]: + """ + Return the complete list of possible languages found in decoded sequence. + Usually not really useful. Returned list may be empty even if 'language' property return something != 'Unknown'. + """ + return [e[0] for e in self._languages] + + @property + def language(self) -> str: + """ + Most probable language found in decoded sequence. If none were detected or inferred, the property will return + "Unknown". + """ + if not self._languages: + # Trying to infer the language based on the given encoding + # Its either English or we should not pronounce ourselves in certain cases. + if "ascii" in self.could_be_from_charset: + return "English" + + # doing it there to avoid circular import + from charset_normalizer.cd import encoding_languages, mb_encoding_languages + + languages = ( + mb_encoding_languages(self.encoding) + if is_multi_byte_encoding(self.encoding) + else encoding_languages(self.encoding) + ) + + if len(languages) == 0 or "Latin Based" in languages: + return "Unknown" + + return languages[0] + + return self._languages[0][0] + + @property + def chaos(self) -> float: + return self._mean_mess_ratio + + @property + def coherence(self) -> float: + if not self._languages: + return 0.0 + return self._languages[0][1] + + @property + def percent_chaos(self) -> float: + return round(self.chaos * 100, ndigits=3) + + @property + def percent_coherence(self) -> float: + return round(self.coherence * 100, ndigits=3) + + @property + def raw(self) -> bytes: + """ + Original untouched bytes. + """ + return self._payload + + @property + def submatch(self) -> list[CharsetMatch]: + return self._leaves + + @property + def has_submatch(self) -> bool: + return len(self._leaves) > 0 + + @property + def alphabets(self) -> list[str]: + if self._unicode_ranges is not None: + return self._unicode_ranges + # list detected ranges + detected_ranges: list[str | None] = [unicode_range(char) for char in str(self)] + # filter and sort + self._unicode_ranges = sorted(list({r for r in detected_ranges if r})) + return self._unicode_ranges + + @property + def could_be_from_charset(self) -> list[str]: + """ + The complete list of encoding that output the exact SAME str result and therefore could be the originating + encoding. + This list does include the encoding available in property 'encoding'. + """ + return [self._encoding] + [m.encoding for m in self._leaves] + + def output(self, encoding: str = "utf_8") -> bytes: + """ + Method to get re-encoded bytes payload using given target encoding. Default to UTF-8. + Any errors will be simply ignored by the encoder NOT replaced. + """ + if self._output_encoding is None or self._output_encoding != encoding: + self._output_encoding = encoding + decoded_string = str(self) + if ( + self._preemptive_declaration is not None + and self._preemptive_declaration.lower() + not in ["utf-8", "utf8", "utf_8"] + ): + patched_header = sub( + RE_POSSIBLE_ENCODING_INDICATION, + lambda m: m.string[m.span()[0] : m.span()[1]].replace( + m.groups()[0], + iana_name(self._output_encoding).replace("_", "-"), # type: ignore[arg-type] + ), + decoded_string[:8192], + count=1, + ) + + decoded_string = patched_header + decoded_string[8192:] + + self._output_payload = decoded_string.encode(encoding, "replace") + + return self._output_payload # type: ignore + + @property + def fingerprint(self) -> str: + """ + Retrieve the unique SHA256 computed using the transformed (re-encoded) payload. Not the original one. + """ + return sha256(self.output()).hexdigest() + + +class CharsetMatches: + """ + Container with every CharsetMatch items ordered by default from most probable to the less one. + Act like a list(iterable) but does not implements all related methods. + """ + + def __init__(self, results: list[CharsetMatch] | None = None): + self._results: list[CharsetMatch] = sorted(results) if results else [] + + def __iter__(self) -> Iterator[CharsetMatch]: + yield from self._results + + def __getitem__(self, item: int | str) -> CharsetMatch: + """ + Retrieve a single item either by its position or encoding name (alias may be used here). + Raise KeyError upon invalid index or encoding not present in results. + """ + if isinstance(item, int): + return self._results[item] + if isinstance(item, str): + item = iana_name(item, False) + for result in self._results: + if item in result.could_be_from_charset: + return result + raise KeyError + + def __len__(self) -> int: + return len(self._results) + + def __bool__(self) -> bool: + return len(self._results) > 0 + + def append(self, item: CharsetMatch) -> None: + """ + Insert a single match. Will be inserted accordingly to preserve sort. + Can be inserted as a submatch. + """ + if not isinstance(item, CharsetMatch): + raise ValueError( + "Cannot append instance '{}' to CharsetMatches".format( + str(item.__class__) + ) + ) + # We should disable the submatch factoring when the input file is too heavy (conserve RAM usage) + if len(item.raw) < TOO_BIG_SEQUENCE: + for match in self._results: + if match.fingerprint == item.fingerprint and match.chaos == item.chaos: + match.add_submatch(item) + return + self._results.append(item) + self._results = sorted(self._results) + + def best(self) -> CharsetMatch | None: + """ + Simply return the first match. Strict equivalent to matches[0]. + """ + if not self._results: + return None + return self._results[0] + + def first(self) -> CharsetMatch | None: + """ + Redundant method, call the method best(). Kept for BC reasons. + """ + return self.best() + + +CoherenceMatch = Tuple[str, float] +CoherenceMatches = List[CoherenceMatch] + + +class CliDetectionResult: + def __init__( + self, + path: str, + encoding: str | None, + encoding_aliases: list[str], + alternative_encodings: list[str], + language: str, + alphabets: list[str], + has_sig_or_bom: bool, + chaos: float, + coherence: float, + unicode_path: str | None, + is_preferred: bool, + ): + self.path: str = path + self.unicode_path: str | None = unicode_path + self.encoding: str | None = encoding + self.encoding_aliases: list[str] = encoding_aliases + self.alternative_encodings: list[str] = alternative_encodings + self.language: str = language + self.alphabets: list[str] = alphabets + self.has_sig_or_bom: bool = has_sig_or_bom + self.chaos: float = chaos + self.coherence: float = coherence + self.is_preferred: bool = is_preferred + + @property + def __dict__(self) -> dict[str, Any]: # type: ignore + return { + "path": self.path, + "encoding": self.encoding, + "encoding_aliases": self.encoding_aliases, + "alternative_encodings": self.alternative_encodings, + "language": self.language, + "alphabets": self.alphabets, + "has_sig_or_bom": self.has_sig_or_bom, + "chaos": self.chaos, + "coherence": self.coherence, + "unicode_path": self.unicode_path, + "is_preferred": self.is_preferred, + } + + def to_json(self) -> str: + return dumps(self.__dict__, ensure_ascii=True, indent=4) diff --git a/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer/py.typed b/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer/py.typed new file mode 100644 index 000000000..e69de29bb diff --git a/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer/utils.py b/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer/utils.py new file mode 100644 index 000000000..6bf0384cc --- /dev/null +++ b/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer/utils.py @@ -0,0 +1,414 @@ +from __future__ import annotations + +import importlib +import logging +import unicodedata +from codecs import IncrementalDecoder +from encodings.aliases import aliases +from functools import lru_cache +from re import findall +from typing import Generator + +from _multibytecodec import ( # type: ignore[import-not-found,import] + MultibyteIncrementalDecoder, +) + +from .constant import ( + ENCODING_MARKS, + IANA_SUPPORTED_SIMILAR, + RE_POSSIBLE_ENCODING_INDICATION, + UNICODE_RANGES_COMBINED, + UNICODE_SECONDARY_RANGE_KEYWORD, + UTF8_MAXIMAL_ALLOCATION, + COMMON_CJK_CHARACTERS, +) + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_accentuated(character: str) -> bool: + try: + description: str = unicodedata.name(character) + except ValueError: # Defensive: unicode database outdated? + return False + return ( + "WITH GRAVE" in description + or "WITH ACUTE" in description + or "WITH CEDILLA" in description + or "WITH DIAERESIS" in description + or "WITH CIRCUMFLEX" in description + or "WITH TILDE" in description + or "WITH MACRON" in description + or "WITH RING ABOVE" in description + ) + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def remove_accent(character: str) -> str: + decomposed: str = unicodedata.decomposition(character) + if not decomposed: + return character + + codes: list[str] = decomposed.split(" ") + + return chr(int(codes[0], 16)) + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def unicode_range(character: str) -> str | None: + """ + Retrieve the Unicode range official name from a single character. + """ + character_ord: int = ord(character) + + for range_name, ord_range in UNICODE_RANGES_COMBINED.items(): + if character_ord in ord_range: + return range_name + + return None + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_latin(character: str) -> bool: + try: + description: str = unicodedata.name(character) + except ValueError: # Defensive: unicode database outdated? + return False + return "LATIN" in description + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_punctuation(character: str) -> bool: + character_category: str = unicodedata.category(character) + + if "P" in character_category: + return True + + character_range: str | None = unicode_range(character) + + if character_range is None: + return False + + return "Punctuation" in character_range + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_symbol(character: str) -> bool: + character_category: str = unicodedata.category(character) + + if "S" in character_category or "N" in character_category: + return True + + character_range: str | None = unicode_range(character) + + if character_range is None: + return False + + return "Forms" in character_range and character_category != "Lo" + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_emoticon(character: str) -> bool: + character_range: str | None = unicode_range(character) + + if character_range is None: + return False + + return "Emoticons" in character_range or "Pictographs" in character_range + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_separator(character: str) -> bool: + if character.isspace() or character in {"|", "+", "<", ">"}: + return True + + character_category: str = unicodedata.category(character) + + return "Z" in character_category or character_category in {"Po", "Pd", "Pc"} + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_case_variable(character: str) -> bool: + return character.islower() != character.isupper() + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_cjk(character: str) -> bool: + try: + character_name = unicodedata.name(character) + except ValueError: # Defensive: unicode database outdated? + return False + + return "CJK" in character_name + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_hiragana(character: str) -> bool: + try: + character_name = unicodedata.name(character) + except ValueError: # Defensive: unicode database outdated? + return False + + return "HIRAGANA" in character_name + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_katakana(character: str) -> bool: + try: + character_name = unicodedata.name(character) + except ValueError: # Defensive: unicode database outdated? + return False + + return "KATAKANA" in character_name + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_hangul(character: str) -> bool: + try: + character_name = unicodedata.name(character) + except ValueError: # Defensive: unicode database outdated? + return False + + return "HANGUL" in character_name + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_thai(character: str) -> bool: + try: + character_name = unicodedata.name(character) + except ValueError: # Defensive: unicode database outdated? + return False + + return "THAI" in character_name + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_arabic(character: str) -> bool: + try: + character_name = unicodedata.name(character) + except ValueError: # Defensive: unicode database outdated? + return False + + return "ARABIC" in character_name + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_arabic_isolated_form(character: str) -> bool: + try: + character_name = unicodedata.name(character) + except ValueError: # Defensive: unicode database outdated? + return False + + return "ARABIC" in character_name and "ISOLATED FORM" in character_name + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_cjk_uncommon(character: str) -> bool: + return character not in COMMON_CJK_CHARACTERS + + +@lru_cache(maxsize=len(UNICODE_RANGES_COMBINED)) +def is_unicode_range_secondary(range_name: str) -> bool: + return any(keyword in range_name for keyword in UNICODE_SECONDARY_RANGE_KEYWORD) + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_unprintable(character: str) -> bool: + return ( + character.isspace() is False # includes \n \t \r \v + and character.isprintable() is False + and character != "\x1a" # Why? Its the ASCII substitute character. + and character != "\ufeff" # bug discovered in Python, + # Zero Width No-Break Space located in Arabic Presentation Forms-B, Unicode 1.1 not acknowledged as space. + ) + + +def any_specified_encoding(sequence: bytes, search_zone: int = 8192) -> str | None: + """ + Extract using ASCII-only decoder any specified encoding in the first n-bytes. + """ + if not isinstance(sequence, bytes): + raise TypeError + + seq_len: int = len(sequence) + + results: list[str] = findall( + RE_POSSIBLE_ENCODING_INDICATION, + sequence[: min(seq_len, search_zone)].decode("ascii", errors="ignore"), + ) + + if len(results) == 0: + return None + + for specified_encoding in results: + specified_encoding = specified_encoding.lower().replace("-", "_") + + encoding_alias: str + encoding_iana: str + + for encoding_alias, encoding_iana in aliases.items(): + if encoding_alias == specified_encoding: + return encoding_iana + if encoding_iana == specified_encoding: + return encoding_iana + + return None + + +@lru_cache(maxsize=128) +def is_multi_byte_encoding(name: str) -> bool: + """ + Verify is a specific encoding is a multi byte one based on it IANA name + """ + return name in { + "utf_8", + "utf_8_sig", + "utf_16", + "utf_16_be", + "utf_16_le", + "utf_32", + "utf_32_le", + "utf_32_be", + "utf_7", + } or issubclass( + importlib.import_module(f"encodings.{name}").IncrementalDecoder, + MultibyteIncrementalDecoder, + ) + + +def identify_sig_or_bom(sequence: bytes) -> tuple[str | None, bytes]: + """ + Identify and extract SIG/BOM in given sequence. + """ + + for iana_encoding in ENCODING_MARKS: + marks: bytes | list[bytes] = ENCODING_MARKS[iana_encoding] + + if isinstance(marks, bytes): + marks = [marks] + + for mark in marks: + if sequence.startswith(mark): + return iana_encoding, mark + + return None, b"" + + +def should_strip_sig_or_bom(iana_encoding: str) -> bool: + return iana_encoding not in {"utf_16", "utf_32"} + + +def iana_name(cp_name: str, strict: bool = True) -> str: + """Returns the Python normalized encoding name (Not the IANA official name).""" + cp_name = cp_name.lower().replace("-", "_") + + encoding_alias: str + encoding_iana: str + + for encoding_alias, encoding_iana in aliases.items(): + if cp_name in [encoding_alias, encoding_iana]: + return encoding_iana + + if strict: + raise ValueError(f"Unable to retrieve IANA for '{cp_name}'") + + return cp_name + + +def cp_similarity(iana_name_a: str, iana_name_b: str) -> float: + if is_multi_byte_encoding(iana_name_a) or is_multi_byte_encoding(iana_name_b): + return 0.0 + + decoder_a = importlib.import_module(f"encodings.{iana_name_a}").IncrementalDecoder + decoder_b = importlib.import_module(f"encodings.{iana_name_b}").IncrementalDecoder + + id_a: IncrementalDecoder = decoder_a(errors="ignore") + id_b: IncrementalDecoder = decoder_b(errors="ignore") + + character_match_count: int = 0 + + for i in range(255): + to_be_decoded: bytes = bytes([i]) + if id_a.decode(to_be_decoded) == id_b.decode(to_be_decoded): + character_match_count += 1 + + return character_match_count / 254 + + +def is_cp_similar(iana_name_a: str, iana_name_b: str) -> bool: + """ + Determine if two code page are at least 80% similar. IANA_SUPPORTED_SIMILAR dict was generated using + the function cp_similarity. + """ + return ( + iana_name_a in IANA_SUPPORTED_SIMILAR + and iana_name_b in IANA_SUPPORTED_SIMILAR[iana_name_a] + ) + + +def set_logging_handler( + name: str = "charset_normalizer", + level: int = logging.INFO, + format_string: str = "%(asctime)s | %(levelname)s | %(message)s", +) -> None: + logger = logging.getLogger(name) + logger.setLevel(level) + + handler = logging.StreamHandler() + handler.setFormatter(logging.Formatter(format_string)) + logger.addHandler(handler) + + +def cut_sequence_chunks( + sequences: bytes, + encoding_iana: str, + offsets: range, + chunk_size: int, + bom_or_sig_available: bool, + strip_sig_or_bom: bool, + sig_payload: bytes, + is_multi_byte_decoder: bool, + decoded_payload: str | None = None, +) -> Generator[str, None, None]: + if decoded_payload and is_multi_byte_decoder is False: + for i in offsets: + chunk = decoded_payload[i : i + chunk_size] + if not chunk: + break + yield chunk + else: + for i in offsets: + chunk_end = i + chunk_size + if chunk_end > len(sequences) + 8: + continue + + cut_sequence = sequences[i : i + chunk_size] + + if bom_or_sig_available and strip_sig_or_bom is False: + cut_sequence = sig_payload + cut_sequence + + chunk = cut_sequence.decode( + encoding_iana, + errors="ignore" if is_multi_byte_decoder else "strict", + ) + + # multi-byte bad cutting detector and adjustment + # not the cleanest way to perform that fix but clever enough for now. + if is_multi_byte_decoder and i > 0: + chunk_partial_size_chk: int = min(chunk_size, 16) + + if ( + decoded_payload + and chunk[:chunk_partial_size_chk] not in decoded_payload + ): + for j in range(i, i - 4, -1): + cut_sequence = sequences[j:chunk_end] + + if bom_or_sig_available and strip_sig_or_bom is False: + cut_sequence = sig_payload + cut_sequence + + chunk = cut_sequence.decode(encoding_iana, errors="ignore") + + if chunk[:chunk_partial_size_chk] in decoded_payload: + break + + yield chunk diff --git a/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer/version.py b/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer/version.py new file mode 100644 index 000000000..c843e5331 --- /dev/null +++ b/d2l-0.17.6/.venv/lib/python3.11/site-packages/charset_normalizer/version.py @@ -0,0 +1,8 @@ +""" +Expose version +""" + +from __future__ import annotations + +__version__ = "3.4.4" +VERSION = __version__.split(".") diff --git a/d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils-0.22.4.dist-info/INSTALLER b/d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils-0.22.4.dist-info/INSTALLER new file mode 100644 index 000000000..a1b589e38 --- /dev/null +++ b/d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils-0.22.4.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils-0.22.4.dist-info/METADATA b/d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils-0.22.4.dist-info/METADATA new file mode 100644 index 000000000..5a70fb99e --- /dev/null +++ b/d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils-0.22.4.dist-info/METADATA @@ -0,0 +1,495 @@ +Metadata-Version: 2.4 +Name: docutils +Version: 0.22.4 +Summary: Docutils -- Python Documentation Utilities +Author-email: David Goodger +Maintainer-email: docutils-develop list +Requires-Python: >=3.9 +Description-Content-Type: text/x-rst +Classifier: Development Status :: 4 - Beta +Classifier: Environment :: Console +Classifier: Intended Audience :: Developers +Classifier: Intended Audience :: End Users/Desktop +Classifier: Intended Audience :: Information Technology +Classifier: Intended Audience :: Other Audience +Classifier: Intended Audience :: System Administrators +Classifier: License :: Public Domain +Classifier: License :: OSI Approved :: BSD License +Classifier: License :: OSI Approved :: GNU General Public License (GPL) +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3 :: Only +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: 3.11 +Classifier: Programming Language :: Python :: 3.12 +Classifier: Programming Language :: Python :: 3.13 +Classifier: Programming Language :: Python :: 3.14 +Classifier: Topic :: Documentation +Classifier: Topic :: Software Development +Classifier: Topic :: Software Development :: Documentation +Classifier: Topic :: Text Editors :: Documentation +Classifier: Topic :: Text Processing +Classifier: Topic :: Text Processing :: General +Classifier: Topic :: Text Processing :: Markup +Classifier: Topic :: Text Processing :: Markup :: HTML +Classifier: Topic :: Text Processing :: Markup :: LaTeX +Classifier: Topic :: Text Processing :: Markup :: Markdown +Classifier: Topic :: Text Processing :: Markup :: reStructuredText +Classifier: Topic :: Text Processing :: Markup :: XML +Classifier: Topic :: Utilities +Classifier: Natural Language :: English +Classifier: Natural Language :: Afrikaans +Classifier: Natural Language :: Arabic +Classifier: Natural Language :: Catalan +Classifier: Natural Language :: Catalan (Valencian) +Classifier: Natural Language :: Chinese (Simplified) +Classifier: Natural Language :: Chinese (Traditional) +Classifier: Natural Language :: Czech +Classifier: Natural Language :: Danish +Classifier: Natural Language :: Dutch +Classifier: Natural Language :: Esperanto +Classifier: Natural Language :: Finnish +Classifier: Natural Language :: French +Classifier: Natural Language :: Galician +Classifier: Natural Language :: Georgian +Classifier: Natural Language :: German +Classifier: Natural Language :: Hebrew +Classifier: Natural Language :: Italian +Classifier: Natural Language :: Japanese +Classifier: Natural Language :: Korean +Classifier: Natural Language :: Latvian +Classifier: Natural Language :: Lithuanian +Classifier: Natural Language :: Persian +Classifier: Natural Language :: Polish +Classifier: Natural Language :: Portuguese (Brazilian) +Classifier: Natural Language :: Russian +Classifier: Natural Language :: Slovak +Classifier: Natural Language :: Spanish +Classifier: Natural Language :: Swedish +Classifier: Natural Language :: Ukrainian +License-File: COPYING.rst +License-File: licenses/BSD-0-Clause.rst +License-File: licenses/BSD-2-Clause.rst +License-File: licenses/gpl-3-0.txt +Project-URL: Changelog, https://docutils.sourceforge.io/HISTORY.html +Project-URL: Code, https://sourceforge.net/p/docutils/code/ +Project-URL: Documentation, https://docutils.sourceforge.io/docs/ +Project-URL: Download, https://pypi.org/project/docutils/ +Project-URL: Homepage, https://docutils.sourceforge.io +Project-URL: Issue tracker, https://sourceforge.net/p/docutils/bugs/ + +========================= + README: Docutils 0.22.4 +========================= + +:Author: David Goodger +:Contact: goodger@python.org +:Date: $Date: 2025-12-18 19:44:54 +0100 (Do, 18. Dez 2025) $ +:Web site: https://docutils.sourceforge.io/ +:Copyright: This document has been placed in the public domain. + +:Abstract: Docutils is a modular system for processing documentation into + useful formats, such as HTML, XML, and LaTeX. + For input Docutils supports reStructuredText, an easy-to-read, + what-you-see-is-what-you-get plaintext markup syntax. + +.. contents:: + + +Quick-Start +=========== + +This is for those who want to get up & running quickly. + +1. Docutils requires **Python**, available from + https://www.python.org/. + See Dependencies_ below for details. + +2. Install the latest stable release from PyPi with pip_:: + + pip install docutils + + For alternatives and details, see section `Installation`_ below. + +3. Use the `front-end scripts`_ to convert reStructuredText documents. + Try for example:: + + docutils FAQ.rst FAQ.html + + See Usage_ below for details. + + +Purpose +======= + +The purpose of the Docutils project is to provide a set of tools for +processing plaintext documentation into useful formats, such as HTML, +LaTeX, troff (man pages), OpenOffice, and native XML. Support for the +following sources has been implemented: + +* Standalone files. + +* `PEPs (Python Enhancement Proposals)`_. + +Support for the following sources is planned or provided by +`third party tools`_: + +* Inline documentation from Python modules and packages, extracted + with namespace context. + +* Email (RFC-822 headers, quoted excerpts, signatures, MIME parts). + +* Wikis, with global reference lookups of "wiki links". + +* Compound documents, such as multiple chapter files merged into a + book. + +* And others as discovered. + +.. _PEPs (Python Enhancement Proposals): + https://peps.python.org/pep-0012 +.. _third party tools: docs/user/links.html#related-applications + + +Dependencies +============ + +To run the code, Python_ must be installed. +(Python is pre-installed with most Linux distributions.) + +* Since version 0.21, Docutils requires Python 3.9 or later. +* Docutils versions 0.19 to 0.20.1 require Python 3.7 or later. +* Docutils versions 0.16 to 0.18 require Python 2.7 or 3.5+. + +The **type hints** added in version 0.22 use Python 3.10 syntax. +However, the Python interpreter treats them as annotations +unless ``typing.TYPE_CHECKING`` is set to ``True``. + +.. _Python: https://www.python.org/. + + +Recommendations +--------------- + +Docutils uses the following packages for enhanced functionality, if they +are installed: + +* The recommended installer is pip_, setuptools_ works, too. + +* The `Python Imaging Library`_ (PIL) is used for some image + manipulation operations. + +* The `Pygments`_ package provides syntax highlight of "code" directives + and roles. + +* The `myst`_, `pycmark`_, or `recommonmark`_ parsers can be used to + parse input in "Markdown" (CommonMark_) format. + +The `Docutils Link List `__ records projects that +users of Docutils and reStructuredText may find useful. + +.. _pip: https://pypi.org/project/pip/ +.. _setuptools: https://pypi.org/project/setuptools/ +.. _Python Imaging Library: http://www.pythonware.com/products/pil/ +.. _Pygments: https://pypi.org/project/Pygments/ +.. _myst: https://pypi.org/project/myst-docutils/ +.. _pycmark: https://pypi.org/project/pycmark/ +.. _recommonmark: https://github.com/rtfd/recommonmark +.. _CommonMark: https://spec.commonmark.org/0.30/ + + +Installation +============ + +The `Python Packaging User Guide`_ gives details how to +`use pip for installing`_. + +* The simplest way is to install the latest *stable release* from PyPi:: + + pip install docutils + +* To install a *pre-relase*, append the option ``--pre``. + +* To install a `development version`_ *from source*: + + 1. Open a shell + + 2. Go to the directory containing the ``pyproject.toml`` file. + + 3. Install the package with **one** of the following commands:: + + pip install -e . # editable install + pip install . # regular install + + or do a `"manual" install`_. + + 4. Optional steps: + + * `Running the test suite`_ + * `Converting the documentation`_ + + See also the OS-specific installation instructions below and + the `Docutils version repository`_ documentation. + +* To install for a *specific Python version*, use this version in the + setup call, e.g. :: + + python3.11 -m pip install docutils + + If the python executable isn't on your path, you'll have to specify the + complete path, such as ``/usr/local/bin/python3.11``. + + To install for different Python versions, repeat step 3 for every + required version. The last installed version will be used for the + ``docutils`` command line application. + +.. _Python Packaging User Guide: https://packaging.python.org/en/latest/ +.. _use pip for installing: + https://packaging.python.org/en/latest/tutorials/installing-packages/ + #use-pip-for-installing +.. _"editable" install: + https://pip.pypa.io/en/stable/topics/local-project-installs/ + #editable-installs +.. _"manual" install: docs/dev/repository.html#manual-install + + +GNU/Linux, BSDs, Unix, Mac OS X, etc. +------------------------------------- + +* Use ``su`` or ``sudo`` for a system-wide + installation as ``root``, e.g.:: + + sudo pip install docutils + + +Windows +------- + +* The Python FAQ explains `how to run a Python program under Windows`__. + + __ https://docs.python.org/3/faq/windows.html + #how-do-i-run-a-python-program-under-windows + +* Usually, pip_ is automatically installed if you are using Python + downloaded from https://python.org. If not, see the + `pip documentation `__. + +* The command window should recognise the word ``py`` as an instruction to + start the interpreter, e.g. + + py -m pip install docutils + + If this does not work, you may have to specify the full path to the + Python executable. + + +Usage +===== + +Start the "docutils" command line application with:: + + docutils [options] [ []] + +The default action is to convert a reStructuredText_ document to HTML5, +for example:: + + docutils test.rst test.html + +Read the ``--help`` option output for details on options and arguments and +`Docutils Front-End Tools`_ for the full documentation of the various tools. + +For programmatic use of the `docutils` Python package, read the +`API Reference Material`_ and the source code. +Remaining questions may be answered in the `Docutils Project +Documentation`_ or the Docutils-users_ mailing list. + +Contributions are welcome! + +.. _reStructuredText: https://docutils.sourceforge.io/rst.html +.. _front-end scripts: +.. _Docutils Front-End Tools: docs/user/tools.html +.. _API Reference Material: /docs/index.html + #api-reference-material-for-client-developers +.. _Docutils Project Documentation: /docs/index.html + + +Project Files & Directories +=========================== + +* README.rst: You're reading it. + +* COPYING.rst: Public Domain Dedication and copyright details for + non-public-domain files (most are PD). + +* FAQ.rst: Frequently Asked Questions (with answers!). + +* RELEASE-NOTES.rst: Summary of the major changes in recent releases. + +* HISTORY.rst: A detailed change log, for the current and all previous + project releases. + +* BUGS.rst: Known bugs, and how to report a bug. + +* THANKS.rst: List of contributors. + +* pyproject.toml: Project metadata. + See "Installation" above. + +* docutils: The project source directory, installed as a Python + package. + +* docs: The project documentation directory. Read ``docs/index.rst`` + for an overview. + +* docs/user: The project user documentation directory. Contains the + following documents, among others: + + - docs/user/tools.rst: Docutils Front-End Tools + - docs/user/latex.rst: Docutils LaTeX Writer + - docs/user/rst/quickstart.rst: A ReStructuredText Primer + - docs/user/rst/quickref.html: Quick reStructuredText (HTML only) + +* docs/ref: The project reference directory. + ``docs/ref/rst/restructuredtext.rst`` is the reStructuredText + reference. + +* licenses: Directory containing copies of license files for + non-public-domain files. + +* tools: Directory for Docutils front-end tools. See + ``docs/user/tools.rst`` for documentation. + +* test: Unit tests. Not required to use the software, but very useful + if you're planning to modify it. See `Running the Test Suite`_ + below. + + +Development version +=================== + +While we are trying to follow a "release early & often" policy, +features are added frequently. +We recommend using a current snapshot or a working copy of the repository. + +Repository check-out: + To keep up to date on the latest developments, + use a `working copy`__ of the `Docutils version repository`_. + +Snapshots: + To get a repository _`snapshot`, go to + https://sourceforge.net/p/docutils/code/HEAD/tree/trunk/docutils/ + and click the download snapshot button. + + Unpack in a temporary directory, + **not** directly in Python's ``site-packages``. + +See the `Installation`_ instructions above. + +__ docs/dev/repository.html#checking-out-the-repository +.. _Docutils version repository: docs/dev/repository.html +.. _sandbox: https://docutils.sourceforge.io/sandbox/README.html + + +Converting the documentation +============================ + +After unpacking and installing the Docutils package, the following +shell commands will generate HTML for all included documentation:: + + cd + tools/buildhtml.py . + +On Windows systems, type:: + + cd + py tools\buildhtml.py .. + +The final directory name of the ```` is +"docutils" for snapshots. For official releases, the directory may be +called "docutils-X.Y.Z", where "X.Y.Z" is the release version. + +Some files may generate system messages (warnings and errors). The +``docs/user/rst/demo.rst`` file (under the archive directory) contains +five intentional errors. (They test the error reporting mechanism!) + + +Running the Test Suite +====================== + +The test suite is documented in `Docutils Testing`_ (docs/dev/testing.rst). + +To run the entire test suite, open a shell and use the following +commands:: + + cd /test + ./alltests.py + +Under Windows, type:: + + cd \test + python alltests.py + + +You should see a long line of periods, one for each test, and then a +summary like this:: + + Ran 1744 tests in 5.859s + + OK (skipped=1) + Elapsed time: 6.235 seconds + +The number of tests will grow over time, and the times reported will +depend on the computer running the tests. +Some test are skipped, if optional dependencies (`recommendations`_) +are missing. +The difference between the two times represents the time required to set +up the tests (import modules, create data structures, etc.). + +A copy of the test output is written to the file ``alltests.out``. + +If any of the tests fail, please `open a bug report`_ or `send an email`_ +(see `Bugs `_). +Please include all relevant output, information about your operating +system, Python version, and Docutils version. To see the Docutils +version, look at the test output or use :: + + docutils --version + +.. _Docutils Testing: https://docutils.sourceforge.io/docs/dev/testing.html +.. _open a bug report: + https://sourceforge.net/p/docutils/bugs/ +.. _send an email: mailto:docutils-users@lists.sourceforge.net + ?subject=Test%20suite%20failure +.. _web interface: https://sourceforge.net/p/docutils/mailman/ + + +Getting Help +============ + +All documentation can be reached from the `Project Documentation +Overview`_. + +The SourceForge `project page`_ has links to the tracker, mailing +lists, and code repository. + +If you have further questions or need assistance with Docutils or +reStructuredText, please post a message to the Docutils-users_ mailing +list. + +.. _Project Documentation Overview: docs/index.html +.. _project page: https://sourceforge.net/p/docutils +.. _Docutils-users: docs/user/mailing-lists.html#docutils-users + + +.. Emacs settings + + Local Variables: + mode: indented-text + mode: rst + indent-tabs-mode: nil + sentence-end-double-space: t + fill-column: 70 + End: + diff --git a/d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils-0.22.4.dist-info/RECORD b/d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils-0.22.4.dist-info/RECORD new file mode 100644 index 000000000..5ac8a69a7 --- /dev/null +++ b/d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils-0.22.4.dist-info/RECORD @@ -0,0 +1,353 @@ +../../../bin/docutils,sha256=mMO9WQ-ieRfp0ceFRxcxdQ4Bd6JdZ2i9CmUyyHkgu5c,250 +../../../bin/rst2html,sha256=xgjwfU5bVhtCbz8hrSUzcg-i4LGelP9zt_t39MYF_hs,254 +../../../bin/rst2html4,sha256=Jz-fNJbm5NduEaQWc9SXTfxAJG4lZnSepU0nEplaB70,256 +../../../bin/rst2html5,sha256=tONA0tGz9wx4DgXfzDhzROixpmjuiKpr5oXeC6y-7Jk,256 +../../../bin/rst2latex,sha256=1MxUiX6jjTmVigPrLNor33f5HfKtPUAqIh1Ja_qUmeM,256 +../../../bin/rst2man,sha256=qhRuGUjX890YJVQsv8IkuO5dh0spmzMFYabdE4n49bU,252 +../../../bin/rst2odt,sha256=lien_1zeZwmENXGi6KMX2PoO5pcnqBWaxiYNuCeb9bw,252 +../../../bin/rst2pseudoxml,sha256=BjRd_JdNIMMJAH2B5e_NtByfPs3nRV9p2KhAcGsgYl8,264 +../../../bin/rst2s5,sha256=8fM9ERnXtbcnqUBgFFWO4hXfGMPy1YHsf-ikEsb5L3k,250 +../../../bin/rst2xetex,sha256=wITpYHw4rfbAc2hSQYHg6y36sC4O-lvGmTRUyAOcXm4,256 +../../../bin/rst2xml,sha256=gnE66aN3gh_PoVM19U3frYoTGMN9rQGKtqj-k8u-vsY,252 +docutils-0.22.4.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +docutils-0.22.4.dist-info/METADATA,sha256=Ftld-kBVZp2L_TaRznGDsYAi81BPSq9UNTRxu4GUkbw,15952 +docutils-0.22.4.dist-info/RECORD,, +docutils-0.22.4.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82 +docutils-0.22.4.dist-info/entry_points.txt,sha256=9xC35dFk4tSRrSMOKqq6kYlAZDEERdBM7fmwDLBMifY,379 +docutils-0.22.4.dist-info/licenses/COPYING.rst,sha256=arTyfHbHT5bl5pLaWUSm-Clo873arFZgpKpyPnDrXY8,6075 +docutils-0.22.4.dist-info/licenses/licenses/BSD-0-Clause.rst,sha256=QqxQJRq4pnOPd9Vwfyp4jb80RqbtaO3stqwXSJp44WM,644 +docutils-0.22.4.dist-info/licenses/licenses/BSD-2-Clause.rst,sha256=uPOzGi9DEkAf5BIv6TKjM-wNfkfYScAtoEBOgEj-dNA,1318 +docutils-0.22.4.dist-info/licenses/licenses/gpl-3-0.txt,sha256=5gNxBEQ_mngpsqp8U3DQeJp72jymWguQTNwMLihdkZU,35150 +docutils/__init__.py,sha256=m09u672Rq9XHCtBlNz1vIGV46uFUcxJmTKzk6Mmauxw,12482 +docutils/__main__.py,sha256=Iqu5ojfamgpheAOtSjpuWnAOdwFF8KsXPfk3whtXYDU,3810 +docutils/__pycache__/__init__.cpython-311.pyc,, +docutils/__pycache__/__main__.cpython-311.pyc,, +docutils/__pycache__/core.cpython-311.pyc,, +docutils/__pycache__/examples.cpython-311.pyc,, +docutils/__pycache__/frontend.cpython-311.pyc,, +docutils/__pycache__/io.cpython-311.pyc,, +docutils/__pycache__/nodes.cpython-311.pyc,, +docutils/__pycache__/statemachine.cpython-311.pyc,, +docutils/core.py,sha256=EpAPpE1urfklzmL4U81pJYnVkfu7r-z7WmS7rU7my_E,36325 +docutils/docutils.conf,sha256=F2yH40kC3N5nnjGIRdT7DHHGXbDKbd5YsbhmQxF2CNY,151 +docutils/examples.py,sha256=-juuTUIFiZUc0cLX--8qQ3WLp4xgHQvOdjP9xFwRSjk,4690 +docutils/frontend.py,sha256=iEEbch42hw3Dcla9oy4_hKamVI4Ztt3yVvv0h0l9jwE,48913 +docutils/io.py,sha256=CUaW91Vxx4qrAscGWT0S0Wzk77Wlh2s7b4KpzhY7530,25792 +docutils/languages/__init__.py,sha256=yhgAS1WEfTlMGAqN7uPo75KX_oui-aJ8yQGkndrDZEc,3856 +docutils/languages/__pycache__/__init__.cpython-311.pyc,, +docutils/languages/__pycache__/af.cpython-311.pyc,, +docutils/languages/__pycache__/ar.cpython-311.pyc,, +docutils/languages/__pycache__/ca.cpython-311.pyc,, +docutils/languages/__pycache__/cs.cpython-311.pyc,, +docutils/languages/__pycache__/da.cpython-311.pyc,, +docutils/languages/__pycache__/de.cpython-311.pyc,, +docutils/languages/__pycache__/en.cpython-311.pyc,, +docutils/languages/__pycache__/eo.cpython-311.pyc,, +docutils/languages/__pycache__/es.cpython-311.pyc,, +docutils/languages/__pycache__/fa.cpython-311.pyc,, +docutils/languages/__pycache__/fi.cpython-311.pyc,, +docutils/languages/__pycache__/fr.cpython-311.pyc,, +docutils/languages/__pycache__/gl.cpython-311.pyc,, +docutils/languages/__pycache__/he.cpython-311.pyc,, +docutils/languages/__pycache__/it.cpython-311.pyc,, +docutils/languages/__pycache__/ja.cpython-311.pyc,, +docutils/languages/__pycache__/ka.cpython-311.pyc,, +docutils/languages/__pycache__/ko.cpython-311.pyc,, +docutils/languages/__pycache__/lt.cpython-311.pyc,, +docutils/languages/__pycache__/lv.cpython-311.pyc,, +docutils/languages/__pycache__/nl.cpython-311.pyc,, +docutils/languages/__pycache__/pl.cpython-311.pyc,, +docutils/languages/__pycache__/pt_br.cpython-311.pyc,, +docutils/languages/__pycache__/ru.cpython-311.pyc,, +docutils/languages/__pycache__/sk.cpython-311.pyc,, +docutils/languages/__pycache__/sv.cpython-311.pyc,, +docutils/languages/__pycache__/uk.cpython-311.pyc,, +docutils/languages/__pycache__/zh_cn.cpython-311.pyc,, +docutils/languages/__pycache__/zh_tw.cpython-311.pyc,, +docutils/languages/af.py,sha256=bjIWD_cNZAyZ9XIqqEoQaSljWlvP0vrQi8p8Fu9Nj2o,1831 +docutils/languages/ar.py,sha256=3FRbb0CSpXPHSQru96bqPDGGEdcnWhQIUG_ndpmacfg,1943 +docutils/languages/ca.py,sha256=b98Y79DEl88Jt2IZsKaH1OaJlC9W5khQcOV71Tvwpj0,2085 +docutils/languages/cs.py,sha256=qkEwPMKaPgw3D4qKCJoGXfDczIA3Wju8joBobn5hMvg,1832 +docutils/languages/da.py,sha256=1db0GiWS2YYOIqWru9BGeun7E3c-lwAgCWA6epn6KH4,1856 +docutils/languages/de.py,sha256=oaGzlhKsE4yFKTnCKrZt8nMnwZGqQ-PDT92UgUwRYzs,1728 +docutils/languages/en.py,sha256=MOTXOluYEnUwSHRlkINnBXMI8sbIfGahXF8RLws4NSk,1854 +docutils/languages/eo.py,sha256=p-wQOrAdL9tQ-89OT8A1VS8sO0OjogmPXRBAoihaAc0,1895 +docutils/languages/es.py,sha256=Jf81tKn_FJ7Kieozten6hn8WjVnYpZ9vsu4N6ER4O1s,1854 +docutils/languages/fa.py,sha256=dXhN7qZnzv1ksnR0Yb5LrSgNLwXy387ILj90v5iHHHM,1958 +docutils/languages/fi.py,sha256=34cPWxDFZXBnOw5LWENSIKaFqFLxZOc6vIioLLnS2do,1892 +docutils/languages/fr.py,sha256=zIPQD7UdOx3FPIBgIAT_mWNk4dped04jK8No2kI1Zic,1799 +docutils/languages/gl.py,sha256=Hz30Wfc-CMuGxKoHzPtY2Wdn-A6tFyvirnnFGZdZ_04,1958 +docutils/languages/he.py,sha256=eHyDSLwp6Y55GyHlgr8yMOkR-gxSgk7Ge8gfsm5n_Io,1878 +docutils/languages/it.py,sha256=aqmXdit3DYMhnke5MmyQIAVfCcrFuKzWmv0L5H06AI8,1814 +docutils/languages/ja.py,sha256=8C-hjqB7fa_Asa-uKKKkHRqT6NTjO3IJiiks6JADJNU,1890 +docutils/languages/ka.py,sha256=aqqIgkJyhLg3FOYWuhBhYDgzAj_nos9WwEQqI-eUcwg,2429 +docutils/languages/ko.py,sha256=eqKib7kW6h8DKg6inoXAtJa3f8FygdT37eGqiMifzZU,1832 +docutils/languages/lt.py,sha256=ixPG61Q2xB6J0uk0TXTXDwfKcEQgqIYC9Tc4VrBMQEY,1919 +docutils/languages/lv.py,sha256=pSZ7y94j6YWKLz4U16uBVwZsgKpd4jWkvcAgwmkDjv0,1851 +docutils/languages/nl.py,sha256=LKV2Hkuh0kH17w_ukZoAtTIlvWSo5iC3g7nPFDHoDDY,1871 +docutils/languages/pl.py,sha256=zyW9iwwriTX8YIGbT54DKgvkdyfiPxm49R0e2eIBxKE,1830 +docutils/languages/pt_br.py,sha256=navcDOoMajIE3yqibn7NPEIf-_oF15ECBWk4beMY3Zw,1865 +docutils/languages/ru.py,sha256=BAQA-1TZEeHpK44L_Os9V-WKUBt9lPApRl1nFM1zOhw,2070 +docutils/languages/sk.py,sha256=r-vrXCNGbDqFXAxM9WpRaH-ws1KumaIb1yramTTlmlI,1788 +docutils/languages/sv.py,sha256=bmJkUSdVn_j8s_P_Nu4KGBM2F42Og7sFzMNH238eKtQ,1908 +docutils/languages/uk.py,sha256=abLYoA0w2pJWlGLBglvUvEnGrhAVgbRyDEmlwV5ntxQ,2062 +docutils/languages/zh_cn.py,sha256=7nOmSfLgrb3Zq-xImQEN4-My6NqHZVat7GoMbpijVn4,1852 +docutils/languages/zh_tw.py,sha256=KJS8-gHwJVUdW7NOjgJQPb6iWkXtBWTT0JrRBV7BYTU,2112 +docutils/nodes.py,sha256=IbInXwFVbcpYTAN6Bl4c88ykbbDtkM-30fLYosifEpU,120848 +docutils/parsers/__init__.py,sha256=4dVq_6ODxUYQk5kXpUP9RBQsxYFuoTYksEiqiIIqa0w,4623 +docutils/parsers/__pycache__/__init__.cpython-311.pyc,, +docutils/parsers/__pycache__/commonmark_wrapper.cpython-311.pyc,, +docutils/parsers/__pycache__/docutils_xml.cpython-311.pyc,, +docutils/parsers/__pycache__/null.cpython-311.pyc,, +docutils/parsers/__pycache__/recommonmark_wrapper.cpython-311.pyc,, +docutils/parsers/commonmark_wrapper.py,sha256=UcBtp5AcOSQRq-0-UsSZcnFMWa14TULD8kayhp4A0eY,1762 +docutils/parsers/docutils_xml.py,sha256=hZpObUmoxn3mOxELxMdDTEFqwAnm9ibxLFyhczMuqhQ,6572 +docutils/parsers/null.py,sha256=Snu9b-C5Z3jRXsqPcR0BwJOTLoua9G8iUCZjgtBB8q4,524 +docutils/parsers/recommonmark_wrapper.py,sha256=fv_m8AFNourU4RYtMEEwQ2pcD_NF-aLBjvjkCTaF85Q,6411 +docutils/parsers/rst/__init__.py,sha256=L-NgFvM1Dzxul19JYTgdXBEphTh-tjT9BKeUasRoXhQ,16030 +docutils/parsers/rst/__pycache__/__init__.cpython-311.pyc,, +docutils/parsers/rst/__pycache__/roles.cpython-311.pyc,, +docutils/parsers/rst/__pycache__/states.cpython-311.pyc,, +docutils/parsers/rst/__pycache__/tableparser.cpython-311.pyc,, +docutils/parsers/rst/directives/__init__.py,sha256=E3Lzf2EcDjLNcp-pgdZy6sjvxDMg2bgbLGeJQNstDOI,15391 +docutils/parsers/rst/directives/__pycache__/__init__.cpython-311.pyc,, +docutils/parsers/rst/directives/__pycache__/admonitions.cpython-311.pyc,, +docutils/parsers/rst/directives/__pycache__/body.cpython-311.pyc,, +docutils/parsers/rst/directives/__pycache__/html.cpython-311.pyc,, +docutils/parsers/rst/directives/__pycache__/images.cpython-311.pyc,, +docutils/parsers/rst/directives/__pycache__/misc.cpython-311.pyc,, +docutils/parsers/rst/directives/__pycache__/parts.cpython-311.pyc,, +docutils/parsers/rst/directives/__pycache__/references.cpython-311.pyc,, +docutils/parsers/rst/directives/__pycache__/tables.cpython-311.pyc,, +docutils/parsers/rst/directives/admonitions.py,sha256=Kg7jf_jSLCLapHcohS2rwuvrBlCRNlz5wFtnwiXsyn4,2572 +docutils/parsers/rst/directives/body.py,sha256=ssmJ8MaBudqxb_oKMiyXRV-sdtYK-q_DKsLK2FbgF0o,11090 +docutils/parsers/rst/directives/html.py,sha256=adxIFdnOHpqH0QSeXT7utBSy7FKWV0x18zbnXtmmuhs,695 +docutils/parsers/rst/directives/images.py,sha256=4lt_Msq8nSgXrznKQ88ILViPHQokNkswgUo8zncyq3g,7913 +docutils/parsers/rst/directives/misc.py,sha256=E4djHjobYIMCyDpEBJgUkdVBURGP2Jr7lhY-9ba8r2s,28308 +docutils/parsers/rst/directives/parts.py,sha256=0QkjOpEsoSfoH9YSfyZUdDEILsP9J4GnWKjk03zgu_U,4434 +docutils/parsers/rst/directives/references.py,sha256=No0xjg1vfrWHrOYRDpcSJ9ybUWQjbCq3auiFjitkF28,783 +docutils/parsers/rst/directives/tables.py,sha256=hCZf1EU3QhQ-BPRuegUv4tEBbpO-UG8gygqwkMlY2Og,22968 +docutils/parsers/rst/include/README.rst,sha256=R3Y-9wDzYQ0jOhj9FAlwG6hRRhHcEWOZcn2hMF1DeVg,670 +docutils/parsers/rst/include/html-roles.txt,sha256=st_CcdEJ-RmIOpqUEuKz5T5J8nUfOm_Mh8zws6dyVpc,1419 +docutils/parsers/rst/include/isoamsa.txt,sha256=ZqGuK-R-yIxa2YDSREt48DFxc8fpF-HX51eiCKXCPp4,10925 +docutils/parsers/rst/include/isoamsb.txt,sha256=3CK8um9WjhPMVgEAbeI16rk91IzWqWXFbRJC44InP3A,7242 +docutils/parsers/rst/include/isoamsc.txt,sha256=XCI2ubAKaO-eOQj87hbBMeYpkqHvc2b2daUCS9ekUzU,1723 +docutils/parsers/rst/include/isoamsn.txt,sha256=Wx54SjZGeYVEB3oNnRi7eGYHEjROZiBUFhQAQDxcVMQ,6721 +docutils/parsers/rst/include/isoamso.txt,sha256=RFxHs5s8DtMgvDaeArmwnSZP_QN20KssvW5f6KMohYA,3825 +docutils/parsers/rst/include/isoamsr.txt,sha256=TLH3gNugqSX3-tH6gDNcgIgbGiKe_GukwZ8U1MIeJCQ,11763 +docutils/parsers/rst/include/isobox.txt,sha256=NORZqqDIewr0-CPoVWqVfTbCVrGZOqY87Crn8O4OUoo,3101 +docutils/parsers/rst/include/isocyr1.txt,sha256=B2DWWIEZ8aJ-scOBP9pbrsKYEmnNF8VZ9e9Mut2MZzU,4241 +docutils/parsers/rst/include/isocyr2.txt,sha256=t52cY0R-9bnkWiQPXW1NYDzO4ueE6ogUF9Ho4ARHg7Q,1882 +docutils/parsers/rst/include/isodia.txt,sha256=VMg8jI2IQogISrpiTS3L88TntxiMfS0cElsrpxZ1FAI,869 +docutils/parsers/rst/include/isogrk1.txt,sha256=DkJc-K_nTh-WDhfOQIRMdQ4aUnsYKb_etyEEJfU8SG4,3010 +docutils/parsers/rst/include/isogrk2.txt,sha256=0x8w_DgroVISgsTLUOuyLZNzDLThcnti27T7T7DxL7g,1705 +docutils/parsers/rst/include/isogrk3.txt,sha256=8b7gQSKtw4yhLEVMZ6vH8VaToiZMM2_kD2snlqfeIQE,2880 +docutils/parsers/rst/include/isogrk4-wide.txt,sha256=RAdw43c5ZAUBWu8MO_lJDmXVV0cGHhVrky0H_bq1eEs,3035 +docutils/parsers/rst/include/isogrk4.txt,sha256=FQxEZAJu2d_RX3G3PfHm6JlC_1osHQoheFA886MLeQk,372 +docutils/parsers/rst/include/isolat1.txt,sha256=d4dBGSPosghudIhZfMPNzsBJKvH1nyVyi6m5p0oW_HY,4397 +docutils/parsers/rst/include/isolat2.txt,sha256=2RMWwHB9djHvsdnKSv2dSNHlBc50P0JYF1DRcK3HW8s,8466 +docutils/parsers/rst/include/isomfrk-wide.txt,sha256=RsYrcq3mX-CMuV6oijCIfUTnUe8Z6w0PG0ephU9isBM,3334 +docutils/parsers/rst/include/isomfrk.txt,sha256=Y40ZXO1GLLzHezKEJJ8w8OBFtHGwtdjErI_062abwC4,519 +docutils/parsers/rst/include/isomopf-wide.txt,sha256=nrhNkzw15HdEA-Gf8T7yatCbs5b7z7q7T6SCTNLByJw,1931 +docutils/parsers/rst/include/isomopf.txt,sha256=l9rTXrdZWf2RchhPr4Oi2M-4yZYLtVH-7kdOmCPzY_M,639 +docutils/parsers/rst/include/isomscr-wide.txt,sha256=VNfKzET1n08k2PUeK9UeDamgP0j8iKpaorregQbaP3w,3231 +docutils/parsers/rst/include/isomscr.txt,sha256=EBWiVvLZYhm9e2c5i7T4Ur6i1WODl_BLiHjcWA_C45g,776 +docutils/parsers/rst/include/isonum.txt,sha256=yg4P9UxBM-72JRGkB4KVdjmRPyBWLvkOlkelh8quDzc,4066 +docutils/parsers/rst/include/isopub.txt,sha256=BFkr5rRRFuYM7a19WPP7lfBpUKftkYKZjnM2SHLtzwY,4613 +docutils/parsers/rst/include/isotech.txt,sha256=2WGt7TSBeRMr2m2DBlY-xiVjxeiNXdTZJb1DJdtgYKg,9726 +docutils/parsers/rst/include/mmlalias.txt,sha256=jQ4IbZwZAJ9rXmb7De77DYgdIlMsWA-s8uZf42EYtFU,45428 +docutils/parsers/rst/include/mmlextra-wide.txt,sha256=Myj4APWltVYohIK7f1v8urJuDVT2_I_U7rasnBCTsYY,9010 +docutils/parsers/rst/include/mmlextra.txt,sha256=DfWtgBA6Bn4TzlZokxTu5vp7zIf1hqUeaeGpYbfHSAg,6800 +docutils/parsers/rst/include/s5defs.txt,sha256=_5JOMpDtaufiZbdxh6QKpICqLvGpB9cypHM-SEt3sKA,1036 +docutils/parsers/rst/include/xhtml1-lat1.txt,sha256=ht_IZrejaCfgG95sfLNfCu1WAzU4LwpkWgzRbZ_6OA4,6112 +docutils/parsers/rst/include/xhtml1-special.txt,sha256=u4YARKjTrICRTtqlMDDOmpYR8xe-DKDRiNjzmXQs7gc,1945 +docutils/parsers/rst/include/xhtml1-symbol.txt,sha256=e6GP5rkmSNcXusRBJkKf2LSbSEyd1oFXJG_WBCYBKE8,7028 +docutils/parsers/rst/languages/__init__.py,sha256=1V_pSOjjb8dlNvU3dIMEJDKOJwPI6f-s5xMCfdBQE0k,1845 +docutils/parsers/rst/languages/__pycache__/__init__.cpython-311.pyc,, +docutils/parsers/rst/languages/__pycache__/af.cpython-311.pyc,, +docutils/parsers/rst/languages/__pycache__/ar.cpython-311.pyc,, +docutils/parsers/rst/languages/__pycache__/ca.cpython-311.pyc,, +docutils/parsers/rst/languages/__pycache__/cs.cpython-311.pyc,, +docutils/parsers/rst/languages/__pycache__/da.cpython-311.pyc,, +docutils/parsers/rst/languages/__pycache__/de.cpython-311.pyc,, +docutils/parsers/rst/languages/__pycache__/en.cpython-311.pyc,, +docutils/parsers/rst/languages/__pycache__/eo.cpython-311.pyc,, +docutils/parsers/rst/languages/__pycache__/es.cpython-311.pyc,, +docutils/parsers/rst/languages/__pycache__/fa.cpython-311.pyc,, +docutils/parsers/rst/languages/__pycache__/fi.cpython-311.pyc,, +docutils/parsers/rst/languages/__pycache__/fr.cpython-311.pyc,, +docutils/parsers/rst/languages/__pycache__/gl.cpython-311.pyc,, +docutils/parsers/rst/languages/__pycache__/he.cpython-311.pyc,, +docutils/parsers/rst/languages/__pycache__/it.cpython-311.pyc,, +docutils/parsers/rst/languages/__pycache__/ja.cpython-311.pyc,, +docutils/parsers/rst/languages/__pycache__/ka.cpython-311.pyc,, +docutils/parsers/rst/languages/__pycache__/ko.cpython-311.pyc,, +docutils/parsers/rst/languages/__pycache__/lt.cpython-311.pyc,, +docutils/parsers/rst/languages/__pycache__/lv.cpython-311.pyc,, +docutils/parsers/rst/languages/__pycache__/nl.cpython-311.pyc,, +docutils/parsers/rst/languages/__pycache__/pl.cpython-311.pyc,, +docutils/parsers/rst/languages/__pycache__/pt_br.cpython-311.pyc,, +docutils/parsers/rst/languages/__pycache__/ru.cpython-311.pyc,, +docutils/parsers/rst/languages/__pycache__/sk.cpython-311.pyc,, +docutils/parsers/rst/languages/__pycache__/sv.cpython-311.pyc,, +docutils/parsers/rst/languages/__pycache__/uk.cpython-311.pyc,, +docutils/parsers/rst/languages/__pycache__/zh_cn.cpython-311.pyc,, +docutils/parsers/rst/languages/__pycache__/zh_tw.cpython-311.pyc,, +docutils/parsers/rst/languages/af.py,sha256=DdcNE_JfLHhdMjcEzGsmM1kSAAltuS_4HEC5O0UxoOc,3685 +docutils/parsers/rst/languages/ar.py,sha256=XpIY3SM10ccvFrO_j__REi_ITvLxSmGuf_y0Dc-Z_-g,3051 +docutils/parsers/rst/languages/ca.py,sha256=atmy4uqx3eVNvnKJwD0HuY0JSRG7uJfo7-AXrRgWg9g,4318 +docutils/parsers/rst/languages/cs.py,sha256=UXKr7zpl6UY31mBtCaNF-FBSsGVvWC59dx7KkwnIbTk,4760 +docutils/parsers/rst/languages/da.py,sha256=kjFpFa7Zfkn3MtsoaV7ppMQCO5jC9zu7h876toZVR2E,3677 +docutils/parsers/rst/languages/de.py,sha256=ArPBA481M-jDjmCCBxbyTsSEpMtrsluTUDliblGNxzo,3489 +docutils/parsers/rst/languages/en.py,sha256=_ytosrML0dbeOItzR4lt-8QtH8ueTT7wv2680IHwmtA,3575 +docutils/parsers/rst/languages/eo.py,sha256=26ZJoX5c7inBXbcmZv9bHwG7SeBtAcWxwI0p5WaoVVo,3681 +docutils/parsers/rst/languages/es.py,sha256=EZ6ws5O2jHgqCslM02I8PX4dI5FMHPZDgDvS6lblP5A,3883 +docutils/parsers/rst/languages/fa.py,sha256=fap5ifAVKvqHGo3S2_G4mMrA8fvOiQ3BPi4z8Zlf94M,3171 +docutils/parsers/rst/languages/fi.py,sha256=x-wGbL9HgR9wxj15t0X7sR99mRX-XLMwfzqtbBxhQlU,3516 +docutils/parsers/rst/languages/fr.py,sha256=tpusipTtKyYPHYfV9vjsxFLUxdAh1zVR9YD1Av_xAlw,3740 +docutils/parsers/rst/languages/gl.py,sha256=cwhZcoEKMccmkfCq5SbzU1DeQp4J6WB2RYD-D3pcR94,3365 +docutils/parsers/rst/languages/he.py,sha256=_UHQHJQx7EAGvMlURHJ8kDk_tcG1uv-7eTl7a4XEGgU,3293 +docutils/parsers/rst/languages/it.py,sha256=f46Ckl1j1ngGsmhJvQDEUQgijccoHg-BaB2Cy7QOgiU,3278 +docutils/parsers/rst/languages/ja.py,sha256=_PlI9H5u300_VlYvW52UvSy_MJ5OLlMmoNo1Pc6Pib8,3776 +docutils/parsers/rst/languages/ka.py,sha256=4OXyPiRnN-4647_rGVVpmEZDkVfLmQKhdK7N09wu40U,4093 +docutils/parsers/rst/languages/ko.py,sha256=IpSyXjTkoij0C7859i1p0iSgz9BQYpdF3fNTS6qcQ1A,3377 +docutils/parsers/rst/languages/lt.py,sha256=PHzrQAP-ZAcboCyc1jvHI5l0CMQnrbBEZ285MWJVy9w,3519 +docutils/parsers/rst/languages/lv.py,sha256=SiXU0HhEyOBpnbHe_N90J-legQj5yqHhSO8_Pqde4ew,3379 +docutils/parsers/rst/languages/nl.py,sha256=-gaweMkqjdFjAaD6jNPcjy3dpIwust0ENFn1-f4kJYM,3719 +docutils/parsers/rst/languages/pl.py,sha256=jbPbdhwVwk3UODIg45JmwwQOCT8riOTiNQPghv3LWZs,3166 +docutils/parsers/rst/languages/pt_br.py,sha256=QZeMoYhvb884f0ETpbrBu0kXyRi2fn3zQsyS6VDBcsA,3789 +docutils/parsers/rst/languages/ru.py,sha256=t5K4rlNKIcoOchVeC68sjJ8mr0Cox_BeyCvb1MDm9tQ,3398 +docutils/parsers/rst/languages/sk.py,sha256=HSdFwU6j9rZShkXyGPBc749TrUUB7tBSz-aw0f4UAzs,3943 +docutils/parsers/rst/languages/sv.py,sha256=YuMoqqmMNIDKugKtXT_gPoo5hDdBch5ZxwYSufQjIWk,3216 +docutils/parsers/rst/languages/uk.py,sha256=LBUHWeKwFdEjfif4CG7LtMhBidl4ln6u4oStJ2omVsQ,3441 +docutils/parsers/rst/languages/zh_cn.py,sha256=YEC3UmY43NaI7s_6DatL_VQugiHvSUbBrHubgnMfYbI,3925 +docutils/parsers/rst/languages/zh_tw.py,sha256=icmm58W9wO69L6p5dwTQwjj45uxer2ZrJCqvBbERnkQ,5160 +docutils/parsers/rst/roles.py,sha256=CkEidwSprTdonJpNGCms_oijaFgSe40pjA1UjywAgcQ,16479 +docutils/parsers/rst/states.py,sha256=w7T6NJeM9hrhAuZj0WfQra_HZtgd7xTnyb6mV9UvWCU,139115 +docutils/parsers/rst/tableparser.py,sha256=dpi6vhEyTz-sNJwt7RhWmQZm_8HJo8g8aDMt_VBTO-M,21249 +docutils/readers/__init__.py,sha256=J8XM-gPnuY9WpF6Sc3SOsKVTqjTV9IBVkvzFxmJZm08,4515 +docutils/readers/__pycache__/__init__.cpython-311.pyc,, +docutils/readers/__pycache__/doctree.cpython-311.pyc,, +docutils/readers/__pycache__/pep.cpython-311.pyc,, +docutils/readers/__pycache__/standalone.cpython-311.pyc,, +docutils/readers/doctree.py,sha256=W0_CtDTel5q9_s72sdU4iRtneiHPXwDZu5htCzSlUCc,1686 +docutils/readers/pep.py,sha256=mU4w1W-ad_TN1vwn7y6hyeYEcH08PGRcJ5oojoWC9g0,1821 +docutils/readers/standalone.py,sha256=qwVRPiBto5CvE3m-2sZ2a2btlVl8aSbT4J_z7uIr3yM,2334 +docutils/statemachine.py,sha256=xmOIrdZ7JT4pLbsX7Kj-EeADtzTu-yKCTY5m_6Dbbsc,57245 +docutils/transforms/__init__.py,sha256=dHrGJ_E7eM7kum866NdZoES82iQt4SxzIb6-NDWmjag,7425 +docutils/transforms/__pycache__/__init__.cpython-311.pyc,, +docutils/transforms/__pycache__/components.cpython-311.pyc,, +docutils/transforms/__pycache__/frontmatter.cpython-311.pyc,, +docutils/transforms/__pycache__/misc.cpython-311.pyc,, +docutils/transforms/__pycache__/parts.cpython-311.pyc,, +docutils/transforms/__pycache__/peps.cpython-311.pyc,, +docutils/transforms/__pycache__/references.cpython-311.pyc,, +docutils/transforms/__pycache__/universal.cpython-311.pyc,, +docutils/transforms/__pycache__/writer_aux.cpython-311.pyc,, +docutils/transforms/components.py,sha256=LE3EDkIErxJmInRiRR8KodxDSqXFKD2g-ep95Gw4V5I,2196 +docutils/transforms/frontmatter.py,sha256=nNtV4PZlKVjKF76gZmyEogqBtwal9TV8TzIqZqOQzXg,21117 +docutils/transforms/misc.py,sha256=0UOGfVHpMuQiDGloZ97hEQBIcAdDBZW0DsN2N5owJ94,5009 +docutils/transforms/parts.py,sha256=cVpvrTClczTKXw7oIbIgwXbvsi1r9HqdHw8uqVAiXdc,6851 +docutils/transforms/peps.py,sha256=iBeu31AVBvDeKjdL3KT4g8Kg57Ia-ZW_-RkuhElqHjk,11344 +docutils/transforms/references.py,sha256=lzWU0h5gZuKpV8TLtJLKD3ruLi6G_hu5NvXQycHWmfM,39992 +docutils/transforms/universal.py,sha256=SGMSekLK6-f4H3Wzefj1i7npJ3iDCMYdJGaKCAreoQ0,13638 +docutils/transforms/writer_aux.py,sha256=iPmcrGTtPtIjjE1vmQDAXRyERgfBwZ-DHK-S09IX1Ag,1828 +docutils/utils/__init__.py,sha256=ToY5386oL3YqYU50tNoOz0WWxyzHmAL_PG14rlD5LzA,30945 +docutils/utils/__pycache__/__init__.cpython-311.pyc,, +docutils/utils/__pycache__/_roman_numerals.cpython-311.pyc,, +docutils/utils/__pycache__/_typing.cpython-311.pyc,, +docutils/utils/__pycache__/code_analyzer.cpython-311.pyc,, +docutils/utils/__pycache__/punctuation_chars.cpython-311.pyc,, +docutils/utils/__pycache__/smartquotes.cpython-311.pyc,, +docutils/utils/__pycache__/urischemes.cpython-311.pyc,, +docutils/utils/_roman_numerals.py,sha256=Dhuf_M3qTfQ0bozXTrjtsLR6B__dQgoSSqfIzEzNtbM,8281 +docutils/utils/_typing.py,sha256=9M1Rnw0H6jw66pdt9QpJicLFpTV-hJUozIQLh8G-gfI,1062 +docutils/utils/code_analyzer.py,sha256=NR24MSQSBzutNh07SYCCfTc4NW-DYHMVwXZ-DxXiZC8,4981 +docutils/utils/math/__init__.py,sha256=Qy6zZUUNFDdMnPKPcnqF6PBo9FJqbDT9gpOiNCzGAdw,2641 +docutils/utils/math/__pycache__/__init__.cpython-311.pyc,, +docutils/utils/math/__pycache__/latex2mathml.cpython-311.pyc,, +docutils/utils/math/__pycache__/math2html.cpython-311.pyc,, +docutils/utils/math/__pycache__/mathalphabet2unichar.cpython-311.pyc,, +docutils/utils/math/__pycache__/mathml_elements.cpython-311.pyc,, +docutils/utils/math/__pycache__/tex2mathml_extern.cpython-311.pyc,, +docutils/utils/math/__pycache__/tex2unichar.cpython-311.pyc,, +docutils/utils/math/__pycache__/unichar2tex.cpython-311.pyc,, +docutils/utils/math/latex2mathml.py,sha256=ELwAGaYg4kx2E7_AE_rSSSZFID4QMIV8sPAIQ2PsdVE,46961 +docutils/utils/math/math2html.py,sha256=qWKkCQu9F0QwEXnJPnpA3xFh9PJpYuhRY6PkpFTprjA,108901 +docutils/utils/math/mathalphabet2unichar.py,sha256=bsgWbE09bIyXfME-TyCms-0fesWVoxXMErQVVeYOoSo,56217 +docutils/utils/math/mathml_elements.py,sha256=wm-8-LUk5QcD2lWaXx6skpdTRBnF_xM_y8i-oPBMHg4,14715 +docutils/utils/math/tex2mathml_extern.py,sha256=2SS7h_xXd4z9r1H9hW7SfzqYvdcU9_isd5ywwIiUtFg,9328 +docutils/utils/math/tex2unichar.py,sha256=_A2K7ap6o6cb1LY9qCYtsfP-zk5eeu_Hu6LIl6j7LnA,37497 +docutils/utils/math/unichar2tex.py,sha256=Q1gvqUGWprAjMfpGfujAu4ldjJevoFG2moM46SWy6WU,18393 +docutils/utils/punctuation_chars.py,sha256=OMY7gEwy_TIo1MnjZ9cnT3wA9LmSApldJ3lSJZbEtuE,5747 +docutils/utils/smartquotes.py,sha256=Zud3K4MBydQkYw4jhxUXpEthy467uQTJ-wF_47al3EU,39200 +docutils/utils/urischemes.py,sha256=2rqE3oD_Eybm-fJkfPdSi6aBrck9T-naJ-z8bM9xEn0,6360 +docutils/writers/__init__.py,sha256=wqsForLHqICvHtHI2vVeqGqAW1dYvtDlfijsb7vnFhw,10298 +docutils/writers/__pycache__/__init__.cpython-311.pyc,, +docutils/writers/__pycache__/_html_base.cpython-311.pyc,, +docutils/writers/__pycache__/docutils_xml.cpython-311.pyc,, +docutils/writers/__pycache__/manpage.cpython-311.pyc,, +docutils/writers/__pycache__/null.cpython-311.pyc,, +docutils/writers/__pycache__/pseudoxml.cpython-311.pyc,, +docutils/writers/_html_base.py,sha256=7itnLEYOzK-JTrHey7BIGfYePCBhMYPmE5hYTl4UYxA,76658 +docutils/writers/docutils_xml.py,sha256=SLpJfc4aBpkL8WzTfBkfWba4HvSucjuA-bVY5BIikyk,7054 +docutils/writers/html4css1/__init__.py,sha256=2iylyDNpqYkv4DhlAyj9r9a5Pu9cdLKyDmvvjcuMX-A,39351 +docutils/writers/html4css1/__pycache__/__init__.cpython-311.pyc,, +docutils/writers/html4css1/html4css1.css,sha256=-Uk0s5gu8-k8f4f34R-bSIpcSzqkVGa5JN6FGSh7QbY,7300 +docutils/writers/html4css1/template.txt,sha256=HDzUUyAv7gT4ewGQTqfOE2_9HOVyGu9-wCRgsmoCmjQ,114 +docutils/writers/html5_polyglot/__init__.py,sha256=GtbcZRVzj5C_FyfOyFy8C9HPOT1a7xJYzs4YCTka2pA,16086 +docutils/writers/html5_polyglot/__pycache__/__init__.cpython-311.pyc,, +docutils/writers/html5_polyglot/italic-field-names.css,sha256=R9vxBFOn5NiQXWOLpghskCrn0RzMQEXy6w4EDDSNPXs,1145 +docutils/writers/html5_polyglot/math.css,sha256=eKRtxtJvYDzuQybRk6Ln_k9tr6TCoFhNqek40C9ErdM,6219 +docutils/writers/html5_polyglot/minimal.css,sha256=cEVhQax4HdSPeDYHlmL82H076szB2hPjXcK42_P9hJI,8279 +docutils/writers/html5_polyglot/plain.css,sha256=UGl7UK1-vbYaAu3k-05E51alznbJ09OV7QwB-PH2rb4,7531 +docutils/writers/html5_polyglot/responsive.css,sha256=9PxhocTWGv-rupZNznGBNWPh5U3oFmz3oZLaREgbgFE,11887 +docutils/writers/html5_polyglot/template.txt,sha256=HDzUUyAv7gT4ewGQTqfOE2_9HOVyGu9-wCRgsmoCmjQ,114 +docutils/writers/html5_polyglot/tuftig.css,sha256=XEUgGC-W4aQECQMhwbEutLT0dr3Me-lynFoCtf07M_Y,12002 +docutils/writers/latex2e/__init__.py,sha256=XsygXPpBkgPOEE8oUWuD69CI9FXxjtPbhH2crSQKxLc,144438 +docutils/writers/latex2e/__pycache__/__init__.cpython-311.pyc,, +docutils/writers/latex2e/default.tex,sha256=JcaJnrdmKE9vqwATl9dSHOsnGnjF2dLX4vsiu7kvWEI,422 +docutils/writers/latex2e/docutils.sty,sha256=QgHLDFaNf5fSJrk1_OVgcwN9-MyuA0UKh9hZjLM7P50,6229 +docutils/writers/latex2e/titlepage.tex,sha256=ampRiXY22vtJ22UPMv61mmPubJPItdrSkl9MSAOftpQ,480 +docutils/writers/latex2e/titlingpage.tex,sha256=Pa9ixIf9Yy6RLljbTPUEgmrQwRzYsyzrxl4KSrHA37E,424 +docutils/writers/latex2e/xelatex.tex,sha256=OKddQAjUR4Xx46aFidNeRopF3lAmBrRUu0zKUWgjUXg,675 +docutils/writers/manpage.py,sha256=6zx2zwwlgCD4tRw8Lecj_StggXfWd0Grpg4BppNdxJY,44852 +docutils/writers/null.py,sha256=o6vkeiFvEmGymaphI-vkKI_oALgUh8xuZER98EDpLik,616 +docutils/writers/odf_odt/__init__.py,sha256=-ez8BHkC9ig8HRNv_5SrmaiFOAy1rXBEvTWy88-8xB4,134192 +docutils/writers/odf_odt/__pycache__/__init__.cpython-311.pyc,, +docutils/writers/odf_odt/__pycache__/prepstyles.cpython-311.pyc,, +docutils/writers/odf_odt/__pycache__/pygmentsformatter.cpython-311.pyc,, +docutils/writers/odf_odt/prepstyles.py,sha256=Kd1JbJHvqQaHqKW3sSWiYbwIMHigJMWpa7PVq8SEh_A,2183 +docutils/writers/odf_odt/pygmentsformatter.py,sha256=GKiCqXR52nD7YKi0YRIfSdy7KhVUPj-tLZS6Iz0VZGc,4737 +docutils/writers/odf_odt/styles.odt,sha256=xKv9z2sd1qNxAH28X-5st5JuDZeTw6jyDOxXohsFrKY,16500 +docutils/writers/pep_html/__init__.py,sha256=9M8aNaDcdS4CD_WYcb_qtQ0hupOO0MKbkMY35vPVA5Q,3563 +docutils/writers/pep_html/__pycache__/__init__.cpython-311.pyc,, +docutils/writers/pep_html/pep.css,sha256=TA5kPEDF2UoMzhPHsVlLPnklRh2r7-N702gCca6bRWo,6366 +docutils/writers/pep_html/template.txt,sha256=SPc44ICSNgps08fDtVaRlu6glPPwcCcx9mqybx5u6W4,1001 +docutils/writers/pseudoxml.py,sha256=wkGH4MbzlubAWTcC3E2yEhp3Pl--stqeLA0ESomFrcs,1084 +docutils/writers/s5_html/__init__.py,sha256=8SGzQhGdbUQ5Iw9b4npsxD9kWYI2NbpXJqFpVZTYA-g,14736 +docutils/writers/s5_html/__pycache__/__init__.cpython-311.pyc,, +docutils/writers/s5_html/themes/README.rst,sha256=wYnu3iomgGD6odpZOtWTzOynI1dfIGE6AVF1MDR0FVY,278 +docutils/writers/s5_html/themes/big-black/__base__,sha256=WeKnChXCPkrXDs7Xr-Qnf1i-bgFjkeaKJ-ilXV0R5lM,38 +docutils/writers/s5_html/themes/big-black/framing.css,sha256=DtEo7Fti9JARMLmcCx0NIfir7QRR24_WN3UbG-EyH64,910 +docutils/writers/s5_html/themes/big-black/pretty.css,sha256=UP9r7eGX0qEFCIDyKcT5bcazMxCw43O2KSrs2ebBPwI,3605 +docutils/writers/s5_html/themes/big-white/framing.css,sha256=meBByeaKIduudfFCDxVw4uzSOj8q_ZJArnwp8oZ1S8g,905 +docutils/writers/s5_html/themes/big-white/pretty.css,sha256=RlQ7CZuN-WMrR8CmCeQ-U8WVmZj769z2zx2FfLwTS48,3565 +docutils/writers/s5_html/themes/default/framing.css,sha256=Sbh5wryeioxDMZ-kJFwzKNziO-3CRvLBMG7rcJjTLmU,1002 +docutils/writers/s5_html/themes/default/opera.css,sha256=guPZOg_BINv-LjV9_IAM7ILFQ-fKALNjlP1i06e5dmA,261 +docutils/writers/s5_html/themes/default/outline.css,sha256=z3ACJiW3_gnG8XFvX602PMTYvKhbRybqCeoWl3O_pA0,648 +docutils/writers/s5_html/themes/default/pretty.css,sha256=iT_51bIPLTk1hFFs3hCarnyJqtbB4I86BNrxlT1r3eo,4383 +docutils/writers/s5_html/themes/default/print.css,sha256=INhYRMsY7y2wd9p7tqjcDWBREXHUMO-2ApAWvITyetI,818 +docutils/writers/s5_html/themes/default/s5-core.css,sha256=D4WDPb581O-_G5jhzpAIwI88B1Zi8y3nWBB8rCxgzlg,450 +docutils/writers/s5_html/themes/default/slides.css,sha256=VKYQ1Oe8lZ8LHxzPqJiU79J0z295nkmIbzsXL-N_dfQ,283 +docutils/writers/s5_html/themes/default/slides.js,sha256=5BXUM5jSWu9hUQSVhGZhMTEvkdCYgqrOJO3ljwDgxWI,15801 +docutils/writers/s5_html/themes/medium-black/__base__,sha256=822LJG-LrdBZY6CA7wsLFCFzsYfxbyz2mr1j6rpb1UA,41 +docutils/writers/s5_html/themes/medium-black/pretty.css,sha256=OdL1xJ9f_FE1pmS7X0s0yxyIl1n2vUBQaGOcJrT2svg,4029 +docutils/writers/s5_html/themes/medium-white/framing.css,sha256=BF5YnRLGRhobO06xDet-0KZYpR10IgRjRbULPVm3PMM,943 +docutils/writers/s5_html/themes/medium-white/pretty.css,sha256=Zm-Pgk3SLAGmGTRF27nrqvpBb_LH2yQ5FIpDPM3p0Y0,3989 +docutils/writers/s5_html/themes/small-black/__base__,sha256=WmiB80z49RfMsy_7tFI042AfUgyztL5OXI3tap9EfQM,40 +docutils/writers/s5_html/themes/small-black/pretty.css,sha256=fmc73kx-zOp0jbiy4GAmpw2Xdz9Q_-WzebsgDJWUJos,4028 +docutils/writers/s5_html/themes/small-white/framing.css,sha256=qwNUgzqnrXgoX47SddbVIKEZwQDjGnTGA468jHHIXqc,940 +docutils/writers/s5_html/themes/small-white/pretty.css,sha256=qU8WOhY8TT6ZY6cXKXABb7T7JgpJQORzTZJhuAm0gGg,3999 +docutils/writers/xetex/__init__.py,sha256=Pw4R7vuFGkEkwBYuJWdV4jjC1pKJ1cjLe_zhP-2CYSk,6697 +docutils/writers/xetex/__pycache__/__init__.cpython-311.pyc,, diff --git a/d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils-0.22.4.dist-info/WHEEL b/d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils-0.22.4.dist-info/WHEEL new file mode 100644 index 000000000..d8b9936da --- /dev/null +++ b/d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils-0.22.4.dist-info/WHEEL @@ -0,0 +1,4 @@ +Wheel-Version: 1.0 +Generator: flit 3.12.0 +Root-Is-Purelib: true +Tag: py3-none-any diff --git a/d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils-0.22.4.dist-info/entry_points.txt b/d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils-0.22.4.dist-info/entry_points.txt new file mode 100644 index 000000000..3e32d4e5a --- /dev/null +++ b/d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils-0.22.4.dist-info/entry_points.txt @@ -0,0 +1,13 @@ +[console_scripts] +docutils=docutils.__main__:main +rst2html=docutils.core:rst2html +rst2html4=docutils.core:rst2html4 +rst2html5=docutils.core:rst2html5 +rst2latex=docutils.core:rst2latex +rst2man=docutils.core:rst2man +rst2odt=docutils.core:rst2odt +rst2pseudoxml=docutils.core:rst2pseudoxml +rst2s5=docutils.core:rst2s5 +rst2xetex=docutils.core:rst2xetex +rst2xml=docutils.core:rst2xml + diff --git a/d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils-0.22.4.dist-info/licenses/COPYING.rst b/d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils-0.22.4.dist-info/licenses/COPYING.rst new file mode 100644 index 000000000..4df8a1d65 --- /dev/null +++ b/d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils-0.22.4.dist-info/licenses/COPYING.rst @@ -0,0 +1,151 @@ +.. include:: docs/header0.rst + +================== + Copying Docutils +================== + +:Author: David Goodger +:Contact: goodger@python.org +:Date: $Date: 2024-11-10 00:36:49 +0100 (So, 10. Nov 2024) $ +:Web site: https://docutils.sourceforge.io/ +:Copyright: This document has been placed in the public domain. + +Most of the files included in this project have been placed in the +public domain, and therefore have no license requirements and no +restrictions on copying or usage; see the `Public Domain Dedication`_ +below. There are exceptions_, listed below. +Files in the Sandbox_ are not distributed with Docutils releases and +may have different license terms. + + +Public Domain Dedication +======================== + +The persons who have associated their work with this project (the +"Dedicator": David Goodger and the many contributors to the Docutils +project) hereby dedicate the entire copyright, less the exceptions_ +listed below, in the work of authorship known as "Docutils" identified +below (the "Work") to the public domain. + +The primary repository for the Work is the Internet World Wide Web +site . The Work consists of the +files within the "docutils" module of the Docutils project Subversion +repository (http://svn.code.sf.net/p/docutils/code/), +whose Internet web interface is located at +. Files dedicated to the +public domain may be identified by the inclusion, near the beginning +of each file, of a declaration of the form:: + + Copyright: This document/module/DTD/stylesheet/file/etc. has been + placed in the public domain. + +Dedicator makes this dedication for the benefit of the public at large +and to the detriment of Dedicator's heirs and successors. Dedicator +intends this dedication to be an overt act of relinquishment in +perpetuity of all present and future rights under copyright law, +whether vested or contingent, in the Work. Dedicator understands that +such relinquishment of all rights includes the relinquishment of all +rights to enforce (by lawsuit or otherwise) those copyrights in the +Work. + +Dedicator recognizes that, once placed in the public domain, the Work +may be freely reproduced, distributed, transmitted, used, modified, +built upon, or otherwise exploited by anyone for any purpose, +commercial or non-commercial, and in any way, including by methods +that have not yet been invented or conceived. + +(This dedication is derived from the text of the `Creative Commons +Public Domain Dedication`. [#]_) + +.. [#] Creative Commons has `retired this legal tool`__ and does not + recommend that it be applied to works: This tool is based on United + States law and may not be applicable outside the US. For dedicating new + works to the public domain, Creative Commons recommend the replacement + Public Domain Dedication CC0_ (CC zero, "No Rights Reserved"). So does + the Free Software Foundation in its license-list_. + + __ http://creativecommons.org/retiredlicenses + .. _CC0: http://creativecommons.org/about/cc0 + +Exceptions +========== + +The exceptions to the `Public Domain Dedication`_ above are: + +* docutils/utils/smartquotes.py + + Copyright © 2011 Günter Milde, + based on `SmartyPants`_ © 2003 John Gruber + (released under a "revised" `BSD 3-Clause License`_ included in the file) + and smartypants.py © 2004, 2007 Chad Miller. + Released under the terms of the `BSD 2-Clause License`_ + (`local copy `__). + + .. _SmartyPants: http://daringfireball.net/projects/smartypants/ + +* docutils/utils/math/latex2mathml.py + + Copyright © Jens Jørgen Mortensen, Günter Milde. + Released under the terms of the `BSD 2-Clause License`_ + (`local copy `__). + +* | docutils/utils/math/math2html.py, + | docutils/writers/html5_polyglot/math.css + + Copyright © 2009,2010 Alex Fernández; 2021 Günter Milde + + These files were part of eLyXer_, released under the `GNU + General Public License`_ version 3 or later. The author relicensed + them for Docutils under the terms of the `BSD 2-Clause License`_ + (`local copy `__). + + .. _eLyXer: https://github.com/alexfernandez/elyxer + +* | docutils/__main__.py, + | docutils/parsers/commonmark_wrapper.py, + | docutils/parsers/recommonmark_wrapper.py, + | docutils/utils/error_reporting.py, + | docutils/utils/math/__init__.py, + | docutils/utils/math/latex2mathml.py, + | docutils/utils/math/tex2mathml_extern.py, + | docutils/utils/punctuation_chars.py, + | docutils/utils/smartquotes.py, + | docutils/writers/html5_polyglot/__init__.py, + | docutils/writers/html5_polyglot/\*.css, + | docutils/writers/latex2e/docutils.sty, + | docutils/writers/xetex/__init__.py, + | test/test_parsers/test_recommonmark/\*.py, + | test/test_parsers/test_rst/test_directives/test__init__.py, + | test/test_parsers/test_rst/test_directives/test_code_parsing.py, + | test/test_parsers/test_rst/test_line_length_limit_default.py, + | test/test_parsers/test_rst/test_line_length_limit.py, + | test/test_writers/test_latex2e_misc.py, + | test/transforms/test_smartquotes.py, + | tools/docutils-cli.py, + | tools/rst2html5.py + + Copyright © Günter Milde. + Released under the terms of the `BSD 2-Clause License`_ + (`local copy `__). + +* tools/editors/emacs/rst.el + + copyright by Free Software Foundation, Inc., + released under the `GNU General Public License`_ version 3 or later + (`local copy`__). + + __ licenses/gpl-3-0.rst + +All used licenses are OSI-approved_ and GPL-compatible_. + +Plaintext versions of all the linked-to licenses are provided in the +licenses_ directory. + +.. _sandbox: https://docutils.sourceforge.io/sandbox/README.html +.. _licenses: licenses/ +.. _GNU General Public License: https://www.gnu.org/copyleft/gpl.html +.. _BSD 2-Clause License: http://opensource.org/licenses/BSD-2-Clause +.. _BSD 3-Clause License: https://opensource.org/licenses/BSD-3-Clause +.. _OSI-approved: http://opensource.org/licenses/ +.. _license-list: +.. _GPL-compatible: https://www.gnu.org/licenses/license-list.html diff --git a/d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils-0.22.4.dist-info/licenses/licenses/BSD-0-Clause.rst b/d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils-0.22.4.dist-info/licenses/licenses/BSD-0-Clause.rst new file mode 100644 index 000000000..5895ea69d --- /dev/null +++ b/d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils-0.22.4.dist-info/licenses/licenses/BSD-0-Clause.rst @@ -0,0 +1,13 @@ +Zero-Clause BSD +=============== + +Permission to use, copy, modify, and/or distribute this software for +any purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED “AS IS” AND THE AUTHOR DISCLAIMS ALL +WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE +FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY +DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN +AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils-0.22.4.dist-info/licenses/licenses/BSD-2-Clause.rst b/d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils-0.22.4.dist-info/licenses/licenses/BSD-2-Clause.rst new file mode 100644 index 000000000..9a36480c6 --- /dev/null +++ b/d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils-0.22.4.dist-info/licenses/licenses/BSD-2-Clause.rst @@ -0,0 +1,25 @@ +2-Clause BSD license / FreeBSD license +====================================== + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils-0.22.4.dist-info/licenses/licenses/gpl-3-0.txt b/d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils-0.22.4.dist-info/licenses/licenses/gpl-3-0.txt new file mode 100644 index 000000000..2a000655e --- /dev/null +++ b/d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils-0.22.4.dist-info/licenses/licenses/gpl-3-0.txt @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/__init__.py b/d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/__init__.py new file mode 100644 index 000000000..e27f1266d --- /dev/null +++ b/d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/__init__.py @@ -0,0 +1,341 @@ +# $Id: __init__.py 10275 2025-12-18 18:44:54Z grubert $ +# Author: David Goodger +# Copyright: This module has been placed in the public domain. + +""" +This is the Docutils (Python Documentation Utilities) package. + +Package Structure +================= + +Modules: + +- __init__.py: Contains component base classes, exception classes, and + Docutils version information. + +- core.py: Contains the ``Publisher`` class and ``publish_*()`` convenience + functions. + +- frontend.py: Runtime settings (command-line interface, configuration files) + processing, for Docutils front-ends. + +- io.py: Provides a uniform API for low-level input and output. + +- nodes.py: Docutils document tree (doctree) node class library. + +- statemachine.py: A finite state machine specialized for + regular-expression-based text filters. + +Subpackages: + +- languages: Language-specific mappings of terms. + +- parsers: Syntax-specific input parser modules or packages. + +- readers: Context-specific input handlers which understand the data + source and manage a parser. + +- transforms: Modules used by readers and writers to modify + the Docutils document tree. + +- utils: Contains the ``Reporter`` system warning class and miscellaneous + utilities used by readers, writers, and transforms. + + utils/urischemes.py: Contains a complete mapping of known URI addressing + scheme names to descriptions. + +- utils/math: Contains functions for conversion of mathematical notation + between different formats (LaTeX, MathML, text, ...). + +- writers: Format-specific output translators. +""" + +from __future__ import annotations + +from collections import namedtuple + +TYPE_CHECKING = False +if TYPE_CHECKING: + from collections.abc import Sequence + from typing import Any, ClassVar, Literal, Protocol, Union + + from docutils.nodes import Element + from docutils.transforms import Transform + + _Components = Literal['reader', 'parser', 'writer', 'input', 'output'] + _OptionTuple = tuple[str, list[str], dict[str, Any]] + _ReleaseLevels = Literal['alpha', 'beta', 'candidate', 'final'] + _SettingsSpecTuple = Union[ + tuple[str|None, str|None, Sequence[_OptionTuple]], + tuple[str|None, str|None, Sequence[_OptionTuple], + str|None, str|None, Sequence[_OptionTuple]], + tuple[str|None, str|None, Sequence[_OptionTuple], + str|None, str|None, Sequence[_OptionTuple], + str|None, str|None, Sequence[_OptionTuple]], + ] + + class _UnknownReferenceResolver(Protocol): + """Deprecated. Will be removed in Docutils 1.0.""" + # See `TransformSpec.unknown_reference_resolvers`. + + priority: int + + def __call__(self, node: Element, /) -> bool: + ... + +__docformat__ = 'reStructuredText' + +__version__ = '0.22.4' +"""Docutils version identifier (complies with PEP 440):: + + major.minor[.micro][releaselevel[serial]][.dev] + +For version comparison operations, use `__version_info__` (see, below) +rather than parsing the text of `__version__`. + +https://docutils.sourceforge.io/docs/dev/policies.html#version-identification +""" + +__version_details__ = '' +"""Optional extra version details (e.g. 'snapshot 2005-05-29, r3410'). + +For development and release status, use `__version__ and `__version_info__`. +""" + + +class VersionInfo(namedtuple('VersionInfo', + 'major minor micro releaselevel serial release')): + __slots__ = () + + major: int + minor: int + micro: int + releaselevel: _ReleaseLevels + serial: int + release: bool + + def __new__(cls, + major: int = 0, minor: int = 0, micro: int = 0, + releaselevel: _ReleaseLevels = 'final', + serial: int = 0, release: bool = True, + ) -> VersionInfo: + releaselevels = ('alpha', 'beta', 'candidate', 'final') + if releaselevel not in releaselevels: + raise ValueError('releaselevel must be one of %r.' + % (releaselevels, )) + if releaselevel == 'final': + if not release: + raise ValueError('releaselevel "final" must not be used ' + 'with development versions (leads to wrong ' + 'version ordering of the related __version__') + # cf. https://peps.python.org/pep-0440/#summary-of-permitted-suffixes-and-relative-ordering # NoQA: E501 + if serial != 0: + raise ValueError('"serial" must be 0 for final releases') + + return super().__new__(cls, major, minor, micro, + releaselevel, serial, release) + + def __lt__(self, other: object) -> bool: + if isinstance(other, tuple): + other = VersionInfo(*other) + return tuple.__lt__(self, other) + + def __gt__(self, other: object) -> bool: + if isinstance(other, tuple): + other = VersionInfo(*other) + return tuple.__gt__(self, other) + + def __le__(self, other: object) -> bool: + if isinstance(other, tuple): + other = VersionInfo(*other) + return tuple.__le__(self, other) + + def __ge__(self, other: object) -> bool: + if isinstance(other, tuple): + other = VersionInfo(*other) + return tuple.__ge__(self, other) + + +__version_info__ = VersionInfo( + major=0, + minor=22, + micro=4, + releaselevel='final', # one of 'alpha', 'beta', 'candidate', 'final' + serial=0, # pre-release number (0 for final releases and snapshots) + release=True # True for official releases and pre-releases + ) +"""Comprehensive version information tuple. + +https://docutils.sourceforge.io/docs/dev/policies.html#version-identification +""" + + +class ApplicationError(Exception): pass +class DataError(ApplicationError): pass + + +class SettingsSpec: + + """ + Runtime setting specification base class. + + SettingsSpec subclass objects used by `docutils.frontend.OptionParser`. + """ + + # TODO: replace settings_specs with a new data structure + # Backwards compatiblity: + # Drop-in components: + # Sphinx supplies settings_spec in the current format in some places + # Myst parser provides a settings_spec tuple + # + # Sphinx reads a settings_spec in order to set a default value + # in writers/html.py:59 + # https://github.com/sphinx-doc/sphinx/blob/4.x/sphinx/writers/html.py + # This should be changed (before retiring the old format) + # to use `settings_default_overrides` instead. + settings_spec: ClassVar[_SettingsSpecTuple] = () + """Runtime settings specification. Override in subclasses. + + Defines runtime settings and associated command-line options, as used by + `docutils.frontend.OptionParser`. This is a tuple of: + + - Option group title (string or `None` which implies no group, just a list + of single options). + + - Description (string or `None`). + + - A sequence of option tuples. Each consists of: + + - Help text (string) + + - List of option strings (e.g. ``['-Q', '--quux']``). + + - Dictionary of keyword arguments sent to the OptionParser/OptionGroup + ``add_option`` method. + + Runtime setting names are derived implicitly from long option names + ('--a-setting' becomes ``settings.a_setting``) or explicitly from the + 'dest' keyword argument. + + Most settings will also have a 'validator' keyword & function. The + validator function validates setting values (from configuration files + and command-line option arguments) and converts them to appropriate + types. For example, the ``docutils.frontend.validate_boolean`` + function, **required by all boolean settings**, converts true values + ('1', 'on', 'yes', and 'true') to 1 and false values ('0', 'off', + 'no', 'false', and '') to 0. Validators need only be set once per + setting. See the `docutils.frontend.validate_*` functions. + + See the optparse docs for more details. + + - More triples of group title, description, options, as many times as + needed. Thus, `settings_spec` tuples can be simply concatenated. + """ + + settings_defaults: ClassVar[dict[str, Any] | None] = None + """A dictionary of defaults for settings not in `settings_spec` (internal + settings, intended to be inaccessible by command-line and config file). + Override in subclasses.""" + + settings_default_overrides: ClassVar[dict[str, Any] | None] = None + """A dictionary of auxiliary defaults, to override defaults for settings + defined in other components' `setting_specs`. Override in subclasses.""" + + relative_path_settings: ClassVar[tuple[str, ...]] = () + """Settings containing filesystem paths. Override in subclasses. + Settings listed here are to be interpreted relative to the current working + directory.""" + + config_section: ClassVar[str | None] = None + """The name of the config file section specific to this component + (lowercase, no brackets). Override in subclasses.""" + + config_section_dependencies: ClassVar[tuple[str, ...] | None] = None + """A list of names of config file sections that are to be applied before + `config_section`, in order (from general to specific). In other words, + the settings in `config_section` are to be overlaid on top of the settings + from these sections. The "general" section is assumed implicitly. + Override in subclasses.""" + + +class TransformSpec: + """ + Runtime transform specification base class. + + Provides the interface to register "transforms" and helper functions + to resolve references with a `docutils.transforms.Transformer`. + + https://docutils.sourceforge.io/docs/ref/transforms.html + """ + + def get_transforms(self) -> list[type[Transform]]: + """Transforms required by this class. Override in subclasses.""" + if self.default_transforms != (): + import warnings + warnings.warn('TransformSpec: the "default_transforms" attribute ' + 'will be removed in Docutils 2.0.\n' + 'Use get_transforms() method instead.', + DeprecationWarning) + return list(self.default_transforms) + return [] + + # Deprecated; for compatibility. + default_transforms: ClassVar[tuple[()]] = () + + unknown_reference_resolvers: Sequence[_UnknownReferenceResolver] = () + """List of hook functions which assist in resolving references. + + Deprecated. Will be removed in Docutils 1.0 + """ + # Override in subclasses to implement component-specific resolving of + # unknown references. + # + # Unknown references have a 'refname' attribute which doesn't correspond + # to any target in the document. Called when the transforms in + # `docutils.transforms.references` are unable to find a correct target. + # + # The list should contain functions which will try to resolve unknown + # references, with the following signature:: + # + # def reference_resolver(node: nodes.Element) -> bool: + # '''Returns boolean: true if resolved, false if not.''' + # + # If the function is able to resolve the reference, it should also remove + # the 'refname' attribute and mark the node as resolved:: + # + # del node['refname'] + # node.resolved = True + # + # Each function must have a "priority" attribute which will affect the + # order the unknown_reference_resolvers are run + # cf. ../docs/api/transforms.html#transform-priority-range-categories :: + # + # reference_resolver.priority = 500 + # + # Examples: + # The `MoinMoin ReStructured Text Parser`__ provided a resolver for + # "WikiWiki links" in the 1.9 version. + # + # __ https://github.com/moinwiki/moin-1.9/blob/1.9.11/MoinMoin/parser/ + # text_rst.py + + +class Component(SettingsSpec, TransformSpec): + + """Base class for Docutils components.""" + + component_type: ClassVar[_Components | None] = None + """Name of the component type ('reader', 'parser', 'writer'). + Override in subclasses.""" + + supported: ClassVar[tuple[str, ...]] = () + """Name and aliases for this component. Override in subclasses.""" + + def supports(self, format: str) -> bool: + """ + Is `format` supported by this component? + + To be used by transforms to ask the dependent component if it supports + a certain input context or output format. + """ + return format in self.supported diff --git a/d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/__main__.py b/d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/__main__.py new file mode 100755 index 000000000..6c4ce42d7 --- /dev/null +++ b/d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/__main__.py @@ -0,0 +1,103 @@ +#!/usr/bin/env python3 +# :Copyright: © 2020, 2022 Günter Milde. +# :License: Released under the terms of the `2-Clause BSD license`_, in short: +# +# Copying and distribution of this file, with or without modification, +# are permitted in any medium without royalty provided the copyright +# notice and this notice are preserved. +# This file is offered as-is, without any warranty. +# +# .. _2-Clause BSD license: https://opensource.org/licenses/BSD-2-Clause +# +# Revision: $Revision: 10136 $ +# Date: $Date: 2025-05-20 17:48:27 +0200 (Di, 20. Mai 2025) $ + +"""Generic command line interface for the `docutils` package. + +See also +https://docs.python.org/3/library/__main__.html#main-py-in-python-packages +""" + +from __future__ import annotations + +__docformat__ = 'reStructuredText' + +import argparse +import locale +import sys + +import docutils +from docutils.core import Publisher, publish_cmdline, default_description + + +class CliSettingsSpec(docutils.SettingsSpec): + """Runtime settings & command-line options for the generic CLI. + + Configurable reader, parser, and writer components. + + The "--writer" default will change to 'html' in Docutils 2.0 + when 'html' becomes an alias for the current value 'html5'. + """ + + settings_spec = ( + 'Docutils Application Options', + 'Reader, writer, and parser settings influence the available options. ' + ' Example: use `--help --writer=latex` to see LaTeX writer options. ', + # options: ('help text', [

"). + """ + overrides = {'input_encoding': input_encoding, + 'doctitle_xform': doctitle, + 'initial_header_level': initial_header_level} + parts = core.publish_parts( + source=input_string, source_path=source_path, + destination_path=destination_path, + writer='html', settings_overrides=overrides) + return parts + + +def html_body(input_string: str | bytes, + source_path: StrPath | None = None, + destination_path: StrPath | None = None, + input_encoding: Literal['unicode'] | str = 'unicode', + output_encoding: Literal['unicode'] | str = 'unicode', + doctitle: bool = True, + initial_header_level: int = 1, + ) -> str | bytes: + """ + Given an input string, returns an HTML fragment as a string. + + The return value is the contents of the element. + + Parameters (see `html_parts()` for the remainder): + + - `output_encoding`: The desired encoding of the output. If a Unicode + string is desired, use the default value of "unicode" . + """ + parts = html_parts( + input_string=input_string, source_path=source_path, + destination_path=destination_path, + input_encoding=input_encoding, doctitle=doctitle, + initial_header_level=initial_header_level) + fragment = parts['html_body'] + if output_encoding != 'unicode': + fragment = fragment.encode(output_encoding) + return fragment + + +def internals(source: str, + source_path: StrPath | None = None, + input_encoding: Literal['unicode'] | str = 'unicode', + settings_overrides: dict[str, Any] | None = None, + ) -> tuple[nodes.document, Publisher]: + """ + Return the document tree and publisher, for exploring Docutils internals. + + Parameters: see `html_parts()`. + """ + if settings_overrides is None: + settings_overrides = {} + overrides = settings_overrides | {'input_encoding': input_encoding} + + publisher = core.Publisher('standalone', 'rst', 'null', + source_class=io.StringInput, + destination_class=io.NullOutput) + publisher.process_programmatic_settings(settings_spec=None, + settings_overrides=overrides, + config_section=None) + publisher.set_source(source, source_path) + publisher.publish() + return publisher.document, publisher + + +if __name__ == '__main__': + print(internals('test')[0]) diff --git a/d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/frontend.py b/d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/frontend.py new file mode 100644 index 000000000..d5415f4fd --- /dev/null +++ b/d2l-0.17.6/.venv/lib/python3.11/site-packages/docutils/frontend.py @@ -0,0 +1,1178 @@ +# $Id: frontend.py 10196 2025-08-07 06:35:37Z milde $ +# Author: David Goodger +# Copyright: This module has been placed in the public domain. + +""" +Command-line and common processing for Docutils front-end tools. + +This module is provisional. +Major changes will happen with the transition from the +"optparse" module to "arparse" in Docutils 2.0 or later. + +Applications should use the high-level API provided by `docutils.core`. +See https://docutils.sourceforge.io/docs/api/runtime-settings.html. + +Exports the following classes: + +* `OptionParser`: Standard Docutils command-line processing. + Deprecated. Will be replaced by an ArgumentParser. +* `Option`: Customized version of `optparse.Option`; validation support. + Deprecated. Will be removed. +* `Values`: Runtime settings; objects are simple structs + (``object.attribute``). Supports cumulative list settings (attributes). + Deprecated. Will be removed. +* `ConfigParser`: Standard Docutils config file processing. + Provisional. Details will change. + +Also exports the following functions: + +Interface function: + `get_default_settings()`. New in 0.19. + +Option callbacks: + `store_multiple()`, `read_config_file()`. Deprecated. To be removed. + +Setting validators: + `validate_encoding()`, `validate_encoding_error_handler()`, + `validate_encoding_and_error_handler()`, + `validate_boolean()`, `validate_ternary()`, + `validate_nonnegative_int()`, `validate_threshold()`, + `validate_colon_separated_string_list()`, + `validate_comma_separated_list()`, + `validate_url_trailing_slash()`, + `validate_dependency_file()`, + `validate_strip_class()` + `validate_smartquotes_locales()`. + + Provisional. + +Misc: + `make_paths_absolute()`, `filter_settings_spec()`. Provisional. +""" + +from __future__ import annotations + +__docformat__ = 'reStructuredText' + + +import codecs +import configparser +import optparse +import os +import os.path +import sys +import warnings +from optparse import SUPPRESS_HELP +from pathlib import Path + +import docutils +from docutils import io, utils + +TYPE_CHECKING = False +if TYPE_CHECKING: + from collections.abc import Iterable, Mapping, Sequence + from typing import Any, ClassVar, Literal, Protocol + + from docutils import SettingsSpec, _OptionTuple, _SettingsSpecTuple + from docutils.io import StrPath + + class _OptionValidator(Protocol): + def __call__( + self, + setting: str, + value: str | None, + option_parser: OptionParser, + /, + config_parser: ConfigParser | None = None, + config_section: str | None = None, + ) -> Any: + ... + + +def store_multiple(option: optparse.Option, + opt: str, + value: Any, + parser: OptionParser, + *args: str, + **kwargs: Any, + ) -> None: + """ + Store multiple values in `parser.values`. (Option callback.) + + Store `None` for each attribute named in `args`, and store the value for + each key (attribute name) in `kwargs`. + + Deprecated. Will be removed with the switch to from optparse to argparse. + """ + for attribute in args: + setattr(parser.values, attribute, None) + for key, value in kwargs.items(): + setattr(parser.values, key, value) + + +def read_config_file(option: optparse.Option, + opt: str, + value: Any, + parser: OptionParser, + ) -> None: + """ + Read a configuration file during option processing. (Option callback.) + + Deprecated. Will be removed with the switch to from optparse to argparse. + """ + try: + new_settings = parser.get_config_file_settings(value) + except ValueError as err: + parser.error(err) + parser.values.update(new_settings, parser) + + +def validate_encoding(setting: str, + value: str | None = None, + option_parser: OptionParser | None = None, + config_parser: ConfigParser | None = None, + config_section: str | None = None, + ) -> str | None: + # All arguments except `value` are ignored + # (kept for compatibility with "optparse" module). + # If there is only one positional argument, it is interpreted as `value`. + if value is None: + value = setting + if value == '': + warnings.warn('Input encoding detection will be removed and the ' + 'special encoding values None and "" become invalid ' + 'in Docutils 1.0.', FutureWarning, stacklevel=2) + return None + try: + codecs.lookup(value) + except LookupError: + prefix = f'setting "{setting}":' if setting else '' + raise LookupError(f'{prefix} unknown encoding: "{value}"') + return value + + +def validate_encoding_error_handler( + setting: str, + value: str | None = None, + option_parser: OptionParser | None = None, + config_parser: ConfigParser | None = None, + config_section: str | None = None, + ) -> str: + # All arguments except `value` are ignored + # (kept for compatibility with "optparse" module). + # If there is only one positional argument, it is interpreted as `value`. + if value is None: + value = setting + try: + codecs.lookup_error(value) + except LookupError: + raise LookupError( + 'unknown encoding error handler: "%s" (choices: ' + '"strict", "ignore", "replace", "backslashreplace", ' + '"xmlcharrefreplace", and possibly others; see documentation for ' + 'the Python ``codecs`` module)' % value) + return value + + +def validate_encoding_and_error_handler( + setting: str, + value: str | None = None, + option_parser: OptionParser | None = None, + config_parser: ConfigParser | None = None, + config_section: str | None = None, + ) -> str: + """Check/normalize encoding settings + + Side-effect: if an error handler is included in the value, it is inserted + into the appropriate place as if it were a separate setting/option. + + All arguments except `value` are ignored + (kept for compatibility with "optparse" module). + If there is only one positional argument, it is interpreted as `value`. + """ + if ':' in value: + encoding, handler = value.split(':') + validate_encoding_error_handler(handler) + if config_parser: + config_parser.set(config_section, setting + '_error_handler', + handler) + else: + setattr(option_parser.values, setting + '_error_handler', handler) + else: + encoding = value + return validate_encoding(encoding) + + +def validate_boolean(setting: str | bool, + value: str | None = None, + option_parser: OptionParser | None = None, + config_parser: ConfigParser | None = None, + config_section: str | None = None, + ) -> bool: + """Check/normalize boolean settings: + + :True: '1', 'on', 'yes', 'true' + :False: '0', 'off', 'no','false', '' + + All arguments except `value` are ignored + (kept for compatibility with "optparse" module). + If there is only one positional argument, it is interpreted as `value`. + """ + if value is None: + value = setting + if isinstance(value, bool): + return value + try: + return OptionParser.booleans[value.strip().lower()] + except KeyError: + raise LookupError('unknown boolean value: "%s"' % value) + + +def validate_ternary(setting: str | bool, + value: str | None = None, + option_parser: OptionParser | None = None, + config_parser: ConfigParser | None = None, + config_section: str | None = None, + ) -> str | bool | None: + """Check/normalize three-value settings: + + :True: '1', 'on', 'yes', 'true' + :False: '0', 'off', 'no','false', '' + :any other value: returned as-is. + + All arguments except `value` are ignored + (kept for compatibility with "optparse" module). + If there is only one positional argument, it is interpreted as `value`. + """ + if value is None: + value = setting + if isinstance(value, bool) or value is None: + return value + try: + return OptionParser.booleans[value.strip().lower()] + except KeyError: + return value + + +def validate_nonnegative_int(setting: str | int, + value: str | None = None, + option_parser: OptionParser | None = None, + config_parser: ConfigParser | None = None, + config_section: str | None = None, + ) -> int: + # All arguments except `value` are ignored + # (kept for compatibility with "optparse" module). + # If there is only one positional argument, it is interpreted as `value`. + if value is None: + value = setting + value = int(value) + if value < 0: + raise ValueError('negative value; must be positive or zero') + return value + + +def validate_threshold(setting: str | int, + value: str | None = None, + option_parser: OptionParser | None = None, + config_parser: ConfigParser | None = None, + config_section: str | None = None, + ) -> int: + # All arguments except `value` are ignored + # (kept for compatibility with "optparse" module). + # If there is only one positional argument, it is interpreted as `value`. + if value is None: + value = setting + try: + return int(value) + except ValueError: + try: + return OptionParser.thresholds[value.lower()] + except (KeyError, AttributeError): + raise LookupError('unknown threshold: %r.' % value) + + +def validate_colon_separated_string_list( + setting: str | list[str], + value: str | None = None, + option_parser: OptionParser | None = None, + config_parser: ConfigParser | None = None, + config_section: str | None = None, + ) -> list[str]: + # All arguments except `value` are ignored + # (kept for compatibility with "optparse" module). + # If there is only one positional argument, it is interpreted as `value`. + if value is None: + value = setting + if not isinstance(value, list): + value = value.split(':') + else: + last = value.pop() + value.extend(last.split(':')) + return value + + +def validate_comma_separated_list( + setting: str | list[str], + value: str | None = None, + option_parser: OptionParser | None = None, + config_parser: ConfigParser | None = None, + config_section: str | None = None, + ) -> list[str]: + """Check/normalize list arguments (split at "," and strip whitespace). + + All arguments except `value` are ignored + (kept for compatibility with "optparse" module). + If there is only one positional argument, it is interpreted as `value`. + """ + if value is None: + value = setting + # `value` may be ``bytes``, ``str``, or a ``list`` (when given as + # command line option and "action" is "append"). + if not isinstance(value, list): + value = [value] + # this function is called for every option added to `value` + # -> split the last item and append the result: + last = value.pop() + items = [i.strip(' \t\n') for i in last.split(',') if i.strip(' \t\n')] + value.extend(items) + return value + + +def validate_math_output(setting: str, + value: str | None = None, + option_parser: OptionParser | None = None, + config_parser: ConfigParser | None = None, + config_section: str | None = None, + ) -> tuple[()] | tuple[str, str]: + """Check "math-output" setting, return list with "format" and "options". + + See also https://docutils.sourceforge.io/docs/user/config.html#math-output + + Argument list for compatibility with "optparse" module. + All arguments except `value` are ignored. + If there is only one positional argument, it is interpreted as `value`. + """ + if value is None: + value = setting + + formats = ('html', 'latex', 'mathml', 'mathjax') + tex2mathml_converters = ('', 'latexml', 'ttm', 'blahtexml', 'pandoc') + + if not value: + return () + values = value.split(maxsplit=1) + format = values[0].lower() + try: + options = values[1] + except IndexError: + options = '' + if format not in formats: + raise LookupError(f'Unknown math output format: "{value}",\n' + f' choose from {formats}.') + if format == 'mathml': + converter = options.lower() + if converter not in tex2mathml_converters: + raise LookupError(f'MathML converter "{options}" not supported,\n' + f' choose from {tex2mathml_converters}.') + options = converter + return format, options + + +def validate_url_trailing_slash(setting: str | None, + value: str | None = None, + option_parser: OptionParser | None = None, + config_parser: ConfigParser | None = None, + config_section: str | None = None, + ) -> str: + # All arguments except `value` are ignored + # (kept for compatibility with "optparse" module). + # If there is only one positional argument, it is interpreted as `value`. + if value is None: + value = setting + if not value: + return './' + elif value.endswith('/'): + return value + else: + return value + '/' + + +def validate_dependency_file(setting: str | None, + value: str | None = None, + option_parser: OptionParser | None = None, + config_parser: ConfigParser | None = None, + config_section: str | None = None, + ) -> utils.DependencyList: + # All arguments except `value` are ignored + # (kept for compatibility with "optparse" module). + # If there is only one positional argument, it is interpreted as `value`. + if value is None: + value = setting + try: + return utils.DependencyList(value) + except OSError: + # TODO: warn/info? + return utils.DependencyList(None) + + +def validate_strip_class(setting: str, + value: str | None = None, + option_parser: OptionParser | None = None, + config_parser: ConfigParser | None = None, + config_section: str | None = None, + ) -> list[str]: + # All arguments except `value` are ignored + # (kept for compatibility with "optparse" module). + # If there is only one positional argument, it is interpreted as `value`. + if value is None: + value = setting + # value is a comma separated string list: + value = validate_comma_separated_list(value) + # validate list elements: + for cls in value: + normalized = docutils.nodes.make_id(cls) + if cls != normalized: + raise ValueError('Invalid class value %r (perhaps %r?)' + % (cls, normalized)) + return value + + +def validate_smartquotes_locales( + setting: str | list[str | tuple[str, str]], + value: str | None = None, + option_parser: OptionParser | None = None, + config_parser: ConfigParser | None = None, + config_section: str | None = None, + ) -> list[tuple[str, Sequence[str]]]: + """Check/normalize a comma separated list of smart quote definitions. + + Return a list of (language-tag, quotes) string tuples. + + All arguments except `value` are ignored + (kept for compatibility with "optparse" module). + If there is only one positional argument, it is interpreted as `value`. + """ + if value is None: + value = setting + # value is a comma separated string list: + value = validate_comma_separated_list(value) + # validate list elements + lc_quotes = [] + for item in value: + try: + lang, quotes = item.split(':', 1) + except AttributeError: + # this function is called for every option added to `value` + # -> ignore if already a tuple: + lc_quotes.append(item) + continue + except ValueError: + raise ValueError('Invalid value "%s".' + ' Format is ":".' + % item.encode('ascii', 'backslashreplace')) + # parse colon separated string list: + quotes = quotes.strip() + multichar_quotes = quotes.split(':') + if len(multichar_quotes) == 4: + quotes = multichar_quotes + elif len(quotes) != 4: + raise ValueError('Invalid value "%s". Please specify 4 quotes\n' + ' (primary open/close; secondary open/close).' + % item.encode('ascii', 'backslashreplace')) + lc_quotes.append((lang, quotes)) + return lc_quotes + + +def make_paths_absolute(pathdict: dict[str, list[StrPath] | StrPath], + keys: tuple[str], + base_path: StrPath | None = None, + ) -> None: + """ + Interpret filesystem path settings relative to the `base_path` given. + + Paths are values in `pathdict` whose keys are in `keys`. Get `keys` from + `OptionParser.relative_path_settings`. + """ + if base_path is None: + base_path = Path.cwd() + else: + base_path = Path(base_path) + if sys.platform == 'win32' and sys.version_info[:2] <= (3, 9): + base_path = base_path.absolute() + for key in keys: + if key in pathdict: + value = pathdict[key] + if isinstance(value, (list, tuple)): + value = [str((base_path/path).resolve()) for path in value] + elif value: + value = str((base_path/value).resolve()) + pathdict[key] = value + + +def make_one_path_absolute(base_path: StrPath, path: StrPath) -> str: + # deprecated, will be removed + warnings.warn('frontend.make_one_path_absolute() will be removed ' + 'in Docutils 2.0 or later.', + DeprecationWarning, stacklevel=2) + return os.path.abspath(os.path.join(base_path, path)) + + +def filter_settings_spec(settings_spec: _SettingsSpecTuple, + *exclude: str, + **replace: _OptionTuple, + ) -> _SettingsSpecTuple: + """Return a copy of `settings_spec` excluding/replacing some settings. + + `settings_spec` is a tuple of configuration settings + (cf. `docutils.SettingsSpec.settings_spec`). + + Optional positional arguments are names of to-be-excluded settings. + Keyword arguments are option specification replacements. + (See the html4strict writer for an example.) + """ + settings = list(settings_spec) + # every third item is a sequence of option tuples + for i in range(2, len(settings), 3): + newopts: list[_OptionTuple] = [] + for opt_spec in settings[i]: + # opt_spec is ("", [