#
tokens: 49084/50000 7/808 files (page 28/168)
lines: on (toggle) GitHub
raw markdown copy reset
This is page 28 of 168. Use http://codebase.md/romanshablio/mcp_server?lines=true&page={x} to view the full context.

# Directory Structure

```
├── .DS_Store
├── .venv
│   ├── __pycache__
│   │   └── hello.cpython-312.pyc
│   ├── bin
│   │   ├── activate
│   │   ├── activate.csh
│   │   ├── activate.fish
│   │   ├── Activate.ps1
│   │   ├── flask
│   │   ├── normalizer
│   │   ├── pip
│   │   ├── pip3
│   │   ├── pip3.12
│   │   ├── python
│   │   ├── python3
│   │   └── python3.12
│   ├── hello.py
│   ├── lib
│   │   └── python3.12
│   │       └── site-packages
│   │           ├── beautifulsoup4-4.12.3.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── licenses
│   │           │   │   ├── AUTHORS
│   │           │   │   └── LICENSE
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── REQUESTED
│   │           │   └── WHEEL
│   │           ├── blinker
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── _utilities.cpython-312.pyc
│   │           │   │   └── base.cpython-312.pyc
│   │           │   ├── _utilities.py
│   │           │   ├── base.py
│   │           │   └── py.typed
│   │           ├── blinker-1.8.2.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   └── WHEEL
│   │           ├── bs4
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── css.cpython-312.pyc
│   │           │   │   ├── dammit.cpython-312.pyc
│   │           │   │   ├── diagnose.cpython-312.pyc
│   │           │   │   ├── element.cpython-312.pyc
│   │           │   │   └── formatter.cpython-312.pyc
│   │           │   ├── builder
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── _html5lib.cpython-312.pyc
│   │           │   │   │   ├── _htmlparser.cpython-312.pyc
│   │           │   │   │   └── _lxml.cpython-312.pyc
│   │           │   │   ├── _html5lib.py
│   │           │   │   ├── _htmlparser.py
│   │           │   │   └── _lxml.py
│   │           │   ├── css.py
│   │           │   ├── dammit.py
│   │           │   ├── diagnose.py
│   │           │   ├── element.py
│   │           │   ├── formatter.py
│   │           │   └── tests
│   │           │       ├── __init__.py
│   │           │       ├── __pycache__
│   │           │       │   ├── __init__.cpython-312.pyc
│   │           │       │   ├── test_builder_registry.cpython-312.pyc
│   │           │       │   ├── test_builder.cpython-312.pyc
│   │           │       │   ├── test_css.cpython-312.pyc
│   │           │       │   ├── test_dammit.cpython-312.pyc
│   │           │       │   ├── test_docs.cpython-312.pyc
│   │           │       │   ├── test_element.cpython-312.pyc
│   │           │       │   ├── test_formatter.cpython-312.pyc
│   │           │       │   ├── test_fuzz.cpython-312.pyc
│   │           │       │   ├── test_html5lib.cpython-312.pyc
│   │           │       │   ├── test_htmlparser.cpython-312.pyc
│   │           │       │   ├── test_lxml.cpython-312.pyc
│   │           │       │   ├── test_navigablestring.cpython-312.pyc
│   │           │       │   ├── test_pageelement.cpython-312.pyc
│   │           │       │   ├── test_soup.cpython-312.pyc
│   │           │       │   ├── test_tag.cpython-312.pyc
│   │           │       │   └── test_tree.cpython-312.pyc
│   │           │       ├── fuzz
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-4670634698080256.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-4818336571064320.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-4999465949331456.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5000587759190016.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5167584867909632.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5270998950477824.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5375146639360000.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5492400320282624.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5703933063462912.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5843991618256896.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5984173902397440.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6124268085182464.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6241471367348224.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6306874195312640.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6450958476902400.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6600557255327744.testcase
│   │           │       │   ├── crash-0d306a50c8ed8bcd0785b67000fcd5dea1d33f08.testcase
│   │           │       │   └── crash-ffbdfa8a2b26f13537b68d3794b0478a4090ee4a.testcase
│   │           │       ├── test_builder_registry.py
│   │           │       ├── test_builder.py
│   │           │       ├── test_css.py
│   │           │       ├── test_dammit.py
│   │           │       ├── test_docs.py
│   │           │       ├── test_element.py
│   │           │       ├── test_formatter.py
│   │           │       ├── test_fuzz.py
│   │           │       ├── test_html5lib.py
│   │           │       ├── test_htmlparser.py
│   │           │       ├── test_lxml.py
│   │           │       ├── test_navigablestring.py
│   │           │       ├── test_pageelement.py
│   │           │       ├── test_soup.py
│   │           │       ├── test_tag.py
│   │           │       └── test_tree.py
│   │           ├── certifi
│   │           │   ├── __init__.py
│   │           │   ├── __main__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── __main__.cpython-312.pyc
│   │           │   │   └── core.cpython-312.pyc
│   │           │   ├── cacert.pem
│   │           │   ├── core.py
│   │           │   └── py.typed
│   │           ├── certifi-2024.8.30.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── charset_normalizer
│   │           │   ├── __init__.py
│   │           │   ├── __main__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── __main__.cpython-312.pyc
│   │           │   │   ├── api.cpython-312.pyc
│   │           │   │   ├── cd.cpython-312.pyc
│   │           │   │   ├── constant.cpython-312.pyc
│   │           │   │   ├── legacy.cpython-312.pyc
│   │           │   │   ├── md.cpython-312.pyc
│   │           │   │   ├── models.cpython-312.pyc
│   │           │   │   ├── utils.cpython-312.pyc
│   │           │   │   └── version.cpython-312.pyc
│   │           │   ├── api.py
│   │           │   ├── cd.py
│   │           │   ├── cli
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __main__.py
│   │           │   │   └── __pycache__
│   │           │   │       ├── __init__.cpython-312.pyc
│   │           │   │       └── __main__.cpython-312.pyc
│   │           │   ├── constant.py
│   │           │   ├── legacy.py
│   │           │   ├── md__mypyc.cpython-312-darwin.so
│   │           │   ├── md.cpython-312-darwin.so
│   │           │   ├── md.py
│   │           │   ├── models.py
│   │           │   ├── py.typed
│   │           │   ├── utils.py
│   │           │   └── version.py
│   │           ├── charset_normalizer-3.4.0.dist-info
│   │           │   ├── entry_points.txt
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── click
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── _compat.cpython-312.pyc
│   │           │   │   ├── _termui_impl.cpython-312.pyc
│   │           │   │   ├── _textwrap.cpython-312.pyc
│   │           │   │   ├── _winconsole.cpython-312.pyc
│   │           │   │   ├── core.cpython-312.pyc
│   │           │   │   ├── decorators.cpython-312.pyc
│   │           │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   ├── formatting.cpython-312.pyc
│   │           │   │   ├── globals.cpython-312.pyc
│   │           │   │   ├── parser.cpython-312.pyc
│   │           │   │   ├── shell_completion.cpython-312.pyc
│   │           │   │   ├── termui.cpython-312.pyc
│   │           │   │   ├── testing.cpython-312.pyc
│   │           │   │   ├── types.cpython-312.pyc
│   │           │   │   └── utils.cpython-312.pyc
│   │           │   ├── _compat.py
│   │           │   ├── _termui_impl.py
│   │           │   ├── _textwrap.py
│   │           │   ├── _winconsole.py
│   │           │   ├── core.py
│   │           │   ├── decorators.py
│   │           │   ├── exceptions.py
│   │           │   ├── formatting.py
│   │           │   ├── globals.py
│   │           │   ├── parser.py
│   │           │   ├── py.typed
│   │           │   ├── shell_completion.py
│   │           │   ├── termui.py
│   │           │   ├── testing.py
│   │           │   ├── types.py
│   │           │   └── utils.py
│   │           ├── click-8.1.7.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.rst
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── fake_useragent
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── errors.cpython-312.pyc
│   │           │   │   ├── fake.cpython-312.pyc
│   │           │   │   ├── log.cpython-312.pyc
│   │           │   │   ├── settings.cpython-312.pyc
│   │           │   │   └── utils.cpython-312.pyc
│   │           │   ├── data
│   │           │   │   └── browsers.json
│   │           │   ├── errors.py
│   │           │   ├── fake.py
│   │           │   ├── log.py
│   │           │   ├── settings.py
│   │           │   └── utils.py
│   │           ├── fake_useragent-1.5.1.dist-info
│   │           │   ├── AUTHORS
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── REQUESTED
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── flask
│   │           │   ├── __init__.py
│   │           │   ├── __main__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── __main__.cpython-312.pyc
│   │           │   │   ├── app.cpython-312.pyc
│   │           │   │   ├── blueprints.cpython-312.pyc
│   │           │   │   ├── cli.cpython-312.pyc
│   │           │   │   ├── config.cpython-312.pyc
│   │           │   │   ├── ctx.cpython-312.pyc
│   │           │   │   ├── debughelpers.cpython-312.pyc
│   │           │   │   ├── globals.cpython-312.pyc
│   │           │   │   ├── helpers.cpython-312.pyc
│   │           │   │   ├── logging.cpython-312.pyc
│   │           │   │   ├── sessions.cpython-312.pyc
│   │           │   │   ├── signals.cpython-312.pyc
│   │           │   │   ├── templating.cpython-312.pyc
│   │           │   │   ├── testing.cpython-312.pyc
│   │           │   │   ├── typing.cpython-312.pyc
│   │           │   │   ├── views.cpython-312.pyc
│   │           │   │   └── wrappers.cpython-312.pyc
│   │           │   ├── app.py
│   │           │   ├── blueprints.py
│   │           │   ├── cli.py
│   │           │   ├── config.py
│   │           │   ├── ctx.py
│   │           │   ├── debughelpers.py
│   │           │   ├── globals.py
│   │           │   ├── helpers.py
│   │           │   ├── json
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── provider.cpython-312.pyc
│   │           │   │   │   └── tag.cpython-312.pyc
│   │           │   │   ├── provider.py
│   │           │   │   └── tag.py
│   │           │   ├── logging.py
│   │           │   ├── py.typed
│   │           │   ├── sansio
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── app.cpython-312.pyc
│   │           │   │   │   ├── blueprints.cpython-312.pyc
│   │           │   │   │   └── scaffold.cpython-312.pyc
│   │           │   │   ├── app.py
│   │           │   │   ├── blueprints.py
│   │           │   │   ├── README.md
│   │           │   │   └── scaffold.py
│   │           │   ├── sessions.py
│   │           │   ├── signals.py
│   │           │   ├── templating.py
│   │           │   ├── testing.py
│   │           │   ├── typing.py
│   │           │   ├── views.py
│   │           │   └── wrappers.py
│   │           ├── flask-3.0.3.dist-info
│   │           │   ├── entry_points.txt
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── REQUESTED
│   │           │   └── WHEEL
│   │           ├── idna
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── codec.cpython-312.pyc
│   │           │   │   ├── compat.cpython-312.pyc
│   │           │   │   ├── core.cpython-312.pyc
│   │           │   │   ├── idnadata.cpython-312.pyc
│   │           │   │   ├── intranges.cpython-312.pyc
│   │           │   │   ├── package_data.cpython-312.pyc
│   │           │   │   └── uts46data.cpython-312.pyc
│   │           │   ├── codec.py
│   │           │   ├── compat.py
│   │           │   ├── core.py
│   │           │   ├── idnadata.py
│   │           │   ├── intranges.py
│   │           │   ├── package_data.py
│   │           │   ├── py.typed
│   │           │   └── uts46data.py
│   │           ├── idna-3.10.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.md
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   └── WHEEL
│   │           ├── itsdangerous
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── _json.cpython-312.pyc
│   │           │   │   ├── encoding.cpython-312.pyc
│   │           │   │   ├── exc.cpython-312.pyc
│   │           │   │   ├── serializer.cpython-312.pyc
│   │           │   │   ├── signer.cpython-312.pyc
│   │           │   │   ├── timed.cpython-312.pyc
│   │           │   │   └── url_safe.cpython-312.pyc
│   │           │   ├── _json.py
│   │           │   ├── encoding.py
│   │           │   ├── exc.py
│   │           │   ├── py.typed
│   │           │   ├── serializer.py
│   │           │   ├── signer.py
│   │           │   ├── timed.py
│   │           │   └── url_safe.py
│   │           ├── itsdangerous-2.2.0.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   └── WHEEL
│   │           ├── jinja2
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── _identifier.cpython-312.pyc
│   │           │   │   ├── async_utils.cpython-312.pyc
│   │           │   │   ├── bccache.cpython-312.pyc
│   │           │   │   ├── compiler.cpython-312.pyc
│   │           │   │   ├── constants.cpython-312.pyc
│   │           │   │   ├── debug.cpython-312.pyc
│   │           │   │   ├── defaults.cpython-312.pyc
│   │           │   │   ├── environment.cpython-312.pyc
│   │           │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   ├── ext.cpython-312.pyc
│   │           │   │   ├── filters.cpython-312.pyc
│   │           │   │   ├── idtracking.cpython-312.pyc
│   │           │   │   ├── lexer.cpython-312.pyc
│   │           │   │   ├── loaders.cpython-312.pyc
│   │           │   │   ├── meta.cpython-312.pyc
│   │           │   │   ├── nativetypes.cpython-312.pyc
│   │           │   │   ├── nodes.cpython-312.pyc
│   │           │   │   ├── optimizer.cpython-312.pyc
│   │           │   │   ├── parser.cpython-312.pyc
│   │           │   │   ├── runtime.cpython-312.pyc
│   │           │   │   ├── sandbox.cpython-312.pyc
│   │           │   │   ├── tests.cpython-312.pyc
│   │           │   │   ├── utils.cpython-312.pyc
│   │           │   │   └── visitor.cpython-312.pyc
│   │           │   ├── _identifier.py
│   │           │   ├── async_utils.py
│   │           │   ├── bccache.py
│   │           │   ├── compiler.py
│   │           │   ├── constants.py
│   │           │   ├── debug.py
│   │           │   ├── defaults.py
│   │           │   ├── environment.py
│   │           │   ├── exceptions.py
│   │           │   ├── ext.py
│   │           │   ├── filters.py
│   │           │   ├── idtracking.py
│   │           │   ├── lexer.py
│   │           │   ├── loaders.py
│   │           │   ├── meta.py
│   │           │   ├── nativetypes.py
│   │           │   ├── nodes.py
│   │           │   ├── optimizer.py
│   │           │   ├── parser.py
│   │           │   ├── py.typed
│   │           │   ├── runtime.py
│   │           │   ├── sandbox.py
│   │           │   ├── tests.py
│   │           │   ├── utils.py
│   │           │   └── visitor.py
│   │           ├── jinja2-3.1.4.dist-info
│   │           │   ├── entry_points.txt
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   └── WHEEL
│   │           ├── lxml
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── _elementpath.cpython-312.pyc
│   │           │   │   ├── builder.cpython-312.pyc
│   │           │   │   ├── cssselect.cpython-312.pyc
│   │           │   │   ├── doctestcompare.cpython-312.pyc
│   │           │   │   ├── ElementInclude.cpython-312.pyc
│   │           │   │   ├── pyclasslookup.cpython-312.pyc
│   │           │   │   ├── sax.cpython-312.pyc
│   │           │   │   └── usedoctest.cpython-312.pyc
│   │           │   ├── _elementpath.cpython-312-darwin.so
│   │           │   ├── _elementpath.py
│   │           │   ├── apihelpers.pxi
│   │           │   ├── builder.cpython-312-darwin.so
│   │           │   ├── builder.py
│   │           │   ├── classlookup.pxi
│   │           │   ├── cleanup.pxi
│   │           │   ├── cssselect.py
│   │           │   ├── debug.pxi
│   │           │   ├── docloader.pxi
│   │           │   ├── doctestcompare.py
│   │           │   ├── dtd.pxi
│   │           │   ├── ElementInclude.py
│   │           │   ├── etree_api.h
│   │           │   ├── etree.cpython-312-darwin.so
│   │           │   ├── etree.h
│   │           │   ├── etree.pyx
│   │           │   ├── extensions.pxi
│   │           │   ├── html
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── _diffcommand.cpython-312.pyc
│   │           │   │   │   ├── _html5builder.cpython-312.pyc
│   │           │   │   │   ├── _setmixin.cpython-312.pyc
│   │           │   │   │   ├── builder.cpython-312.pyc
│   │           │   │   │   ├── clean.cpython-312.pyc
│   │           │   │   │   ├── defs.cpython-312.pyc
│   │           │   │   │   ├── diff.cpython-312.pyc
│   │           │   │   │   ├── ElementSoup.cpython-312.pyc
│   │           │   │   │   ├── formfill.cpython-312.pyc
│   │           │   │   │   ├── html5parser.cpython-312.pyc
│   │           │   │   │   ├── soupparser.cpython-312.pyc
│   │           │   │   │   └── usedoctest.cpython-312.pyc
│   │           │   │   ├── _diffcommand.py
│   │           │   │   ├── _html5builder.py
│   │           │   │   ├── _setmixin.py
│   │           │   │   ├── builder.py
│   │           │   │   ├── clean.py
│   │           │   │   ├── defs.py
│   │           │   │   ├── diff.cpython-312-darwin.so
│   │           │   │   ├── diff.py
│   │           │   │   ├── ElementSoup.py
│   │           │   │   ├── formfill.py
│   │           │   │   ├── html5parser.py
│   │           │   │   ├── soupparser.py
│   │           │   │   └── usedoctest.py
│   │           │   ├── includes
│   │           │   │   ├── __init__.pxd
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   └── __init__.cpython-312.pyc
│   │           │   │   ├── c14n.pxd
│   │           │   │   ├── config.pxd
│   │           │   │   ├── dtdvalid.pxd
│   │           │   │   ├── etree_defs.h
│   │           │   │   ├── etreepublic.pxd
│   │           │   │   ├── extlibs
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   └── __init__.cpython-312.pyc
│   │           │   │   │   ├── libcharset.h
│   │           │   │   │   ├── localcharset.h
│   │           │   │   │   ├── zconf.h
│   │           │   │   │   └── zlib.h
│   │           │   │   ├── htmlparser.pxd
│   │           │   │   ├── libexslt
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   └── __init__.cpython-312.pyc
│   │           │   │   │   ├── exslt.h
│   │           │   │   │   ├── exsltconfig.h
│   │           │   │   │   └── exsltexports.h
│   │           │   │   ├── libxml
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   └── __init__.cpython-312.pyc
│   │           │   │   │   ├── c14n.h
│   │           │   │   │   ├── catalog.h
│   │           │   │   │   ├── chvalid.h
│   │           │   │   │   ├── debugXML.h
│   │           │   │   │   ├── dict.h
│   │           │   │   │   ├── encoding.h
│   │           │   │   │   ├── entities.h
│   │           │   │   │   ├── globals.h
│   │           │   │   │   ├── hash.h
│   │           │   │   │   ├── HTMLparser.h
│   │           │   │   │   ├── HTMLtree.h
│   │           │   │   │   ├── list.h
│   │           │   │   │   ├── nanoftp.h
│   │           │   │   │   ├── nanohttp.h
│   │           │   │   │   ├── parser.h
│   │           │   │   │   ├── parserInternals.h
│   │           │   │   │   ├── relaxng.h
│   │           │   │   │   ├── SAX.h
│   │           │   │   │   ├── SAX2.h
│   │           │   │   │   ├── schemasInternals.h
│   │           │   │   │   ├── schematron.h
│   │           │   │   │   ├── threads.h
│   │           │   │   │   ├── tree.h
│   │           │   │   │   ├── uri.h
│   │           │   │   │   ├── valid.h
│   │           │   │   │   ├── xinclude.h
│   │           │   │   │   ├── xlink.h
│   │           │   │   │   ├── xmlautomata.h
│   │           │   │   │   ├── xmlerror.h
│   │           │   │   │   ├── xmlexports.h
│   │           │   │   │   ├── xmlIO.h
│   │           │   │   │   ├── xmlmemory.h
│   │           │   │   │   ├── xmlmodule.h
│   │           │   │   │   ├── xmlreader.h
│   │           │   │   │   ├── xmlregexp.h
│   │           │   │   │   ├── xmlsave.h
│   │           │   │   │   ├── xmlschemas.h
│   │           │   │   │   ├── xmlschemastypes.h
│   │           │   │   │   ├── xmlstring.h
│   │           │   │   │   ├── xmlunicode.h
│   │           │   │   │   ├── xmlversion.h
│   │           │   │   │   ├── xmlwriter.h
│   │           │   │   │   ├── xpath.h
│   │           │   │   │   ├── xpathInternals.h
│   │           │   │   │   └── xpointer.h
│   │           │   │   ├── libxslt
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   └── __init__.cpython-312.pyc
│   │           │   │   │   ├── attributes.h
│   │           │   │   │   ├── documents.h
│   │           │   │   │   ├── extensions.h
│   │           │   │   │   ├── extra.h
│   │           │   │   │   ├── functions.h
│   │           │   │   │   ├── imports.h
│   │           │   │   │   ├── keys.h
│   │           │   │   │   ├── namespaces.h
│   │           │   │   │   ├── numbersInternals.h
│   │           │   │   │   ├── pattern.h
│   │           │   │   │   ├── preproc.h
│   │           │   │   │   ├── security.h
│   │           │   │   │   ├── templates.h
│   │           │   │   │   ├── transform.h
│   │           │   │   │   ├── variables.h
│   │           │   │   │   ├── xslt.h
│   │           │   │   │   ├── xsltconfig.h
│   │           │   │   │   ├── xsltexports.h
│   │           │   │   │   ├── xsltInternals.h
│   │           │   │   │   ├── xsltlocale.h
│   │           │   │   │   └── xsltutils.h
│   │           │   │   ├── lxml-version.h
│   │           │   │   ├── relaxng.pxd
│   │           │   │   ├── schematron.pxd
│   │           │   │   ├── tree.pxd
│   │           │   │   ├── uri.pxd
│   │           │   │   ├── xinclude.pxd
│   │           │   │   ├── xmlerror.pxd
│   │           │   │   ├── xmlparser.pxd
│   │           │   │   ├── xmlschema.pxd
│   │           │   │   ├── xpath.pxd
│   │           │   │   └── xslt.pxd
│   │           │   ├── isoschematron
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   └── __init__.cpython-312.pyc
│   │           │   │   └── resources
│   │           │   │       ├── rng
│   │           │   │       │   └── iso-schematron.rng
│   │           │   │       └── xsl
│   │           │   │           ├── iso-schematron-xslt1
│   │           │   │           │   ├── iso_abstract_expand.xsl
│   │           │   │           │   ├── iso_dsdl_include.xsl
│   │           │   │           │   ├── iso_schematron_message.xsl
│   │           │   │           │   ├── iso_schematron_skeleton_for_xslt1.xsl
│   │           │   │           │   ├── iso_svrl_for_xslt1.xsl
│   │           │   │           │   └── readme.txt
│   │           │   │           ├── RNG2Schtrn.xsl
│   │           │   │           └── XSD2Schtrn.xsl
│   │           │   ├── iterparse.pxi
│   │           │   ├── lxml.etree_api.h
│   │           │   ├── lxml.etree.h
│   │           │   ├── nsclasses.pxi
│   │           │   ├── objectify.cpython-312-darwin.so
│   │           │   ├── objectify.pyx
│   │           │   ├── objectpath.pxi
│   │           │   ├── parser.pxi
│   │           │   ├── parsertarget.pxi
│   │           │   ├── proxy.pxi
│   │           │   ├── public-api.pxi
│   │           │   ├── pyclasslookup.py
│   │           │   ├── readonlytree.pxi
│   │           │   ├── relaxng.pxi
│   │           │   ├── sax.cpython-312-darwin.so
│   │           │   ├── sax.py
│   │           │   ├── saxparser.pxi
│   │           │   ├── schematron.pxi
│   │           │   ├── serializer.pxi
│   │           │   ├── usedoctest.py
│   │           │   ├── xinclude.pxi
│   │           │   ├── xmlerror.pxi
│   │           │   ├── xmlid.pxi
│   │           │   ├── xmlschema.pxi
│   │           │   ├── xpath.pxi
│   │           │   ├── xslt.pxi
│   │           │   └── xsltext.pxi
│   │           ├── lxml-5.3.0.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── LICENSES.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── REQUESTED
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── markupsafe
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   └── _native.cpython-312.pyc
│   │           │   ├── _native.py
│   │           │   ├── _speedups.c
│   │           │   ├── _speedups.cpython-312-darwin.so
│   │           │   ├── _speedups.pyi
│   │           │   └── py.typed
│   │           ├── MarkupSafe-3.0.1.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── pip
│   │           │   ├── __init__.py
│   │           │   ├── __main__.py
│   │           │   ├── __pip-runner__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── __main__.cpython-312.pyc
│   │           │   │   └── __pip-runner__.cpython-312.pyc
│   │           │   ├── _internal
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── build_env.cpython-312.pyc
│   │           │   │   │   ├── cache.cpython-312.pyc
│   │           │   │   │   ├── configuration.cpython-312.pyc
│   │           │   │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   │   ├── main.cpython-312.pyc
│   │           │   │   │   ├── pyproject.cpython-312.pyc
│   │           │   │   │   ├── self_outdated_check.cpython-312.pyc
│   │           │   │   │   └── wheel_builder.cpython-312.pyc
│   │           │   │   ├── build_env.py
│   │           │   │   ├── cache.py
│   │           │   │   ├── cli
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── autocompletion.cpython-312.pyc
│   │           │   │   │   │   ├── base_command.cpython-312.pyc
│   │           │   │   │   │   ├── cmdoptions.cpython-312.pyc
│   │           │   │   │   │   ├── command_context.cpython-312.pyc
│   │           │   │   │   │   ├── index_command.cpython-312.pyc
│   │           │   │   │   │   ├── main_parser.cpython-312.pyc
│   │           │   │   │   │   ├── main.cpython-312.pyc
│   │           │   │   │   │   ├── parser.cpython-312.pyc
│   │           │   │   │   │   ├── progress_bars.cpython-312.pyc
│   │           │   │   │   │   ├── req_command.cpython-312.pyc
│   │           │   │   │   │   ├── spinners.cpython-312.pyc
│   │           │   │   │   │   └── status_codes.cpython-312.pyc
│   │           │   │   │   ├── autocompletion.py
│   │           │   │   │   ├── base_command.py
│   │           │   │   │   ├── cmdoptions.py
│   │           │   │   │   ├── command_context.py
│   │           │   │   │   ├── index_command.py
│   │           │   │   │   ├── main_parser.py
│   │           │   │   │   ├── main.py
│   │           │   │   │   ├── parser.py
│   │           │   │   │   ├── progress_bars.py
│   │           │   │   │   ├── req_command.py
│   │           │   │   │   ├── spinners.py
│   │           │   │   │   └── status_codes.py
│   │           │   │   ├── commands
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── cache.cpython-312.pyc
│   │           │   │   │   │   ├── check.cpython-312.pyc
│   │           │   │   │   │   ├── completion.cpython-312.pyc
│   │           │   │   │   │   ├── configuration.cpython-312.pyc
│   │           │   │   │   │   ├── debug.cpython-312.pyc
│   │           │   │   │   │   ├── download.cpython-312.pyc
│   │           │   │   │   │   ├── freeze.cpython-312.pyc
│   │           │   │   │   │   ├── hash.cpython-312.pyc
│   │           │   │   │   │   ├── help.cpython-312.pyc
│   │           │   │   │   │   ├── index.cpython-312.pyc
│   │           │   │   │   │   ├── inspect.cpython-312.pyc
│   │           │   │   │   │   ├── install.cpython-312.pyc
│   │           │   │   │   │   ├── list.cpython-312.pyc
│   │           │   │   │   │   ├── search.cpython-312.pyc
│   │           │   │   │   │   ├── show.cpython-312.pyc
│   │           │   │   │   │   ├── uninstall.cpython-312.pyc
│   │           │   │   │   │   └── wheel.cpython-312.pyc
│   │           │   │   │   ├── cache.py
│   │           │   │   │   ├── check.py
│   │           │   │   │   ├── completion.py
│   │           │   │   │   ├── configuration.py
│   │           │   │   │   ├── debug.py
│   │           │   │   │   ├── download.py
│   │           │   │   │   ├── freeze.py
│   │           │   │   │   ├── hash.py
│   │           │   │   │   ├── help.py
│   │           │   │   │   ├── index.py
│   │           │   │   │   ├── inspect.py
│   │           │   │   │   ├── install.py
│   │           │   │   │   ├── list.py
│   │           │   │   │   ├── search.py
│   │           │   │   │   ├── show.py
│   │           │   │   │   ├── uninstall.py
│   │           │   │   │   └── wheel.py
│   │           │   │   ├── configuration.py
│   │           │   │   ├── distributions
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── base.cpython-312.pyc
│   │           │   │   │   │   ├── installed.cpython-312.pyc
│   │           │   │   │   │   ├── sdist.cpython-312.pyc
│   │           │   │   │   │   └── wheel.cpython-312.pyc
│   │           │   │   │   ├── base.py
│   │           │   │   │   ├── installed.py
│   │           │   │   │   ├── sdist.py
│   │           │   │   │   └── wheel.py
│   │           │   │   ├── exceptions.py
│   │           │   │   ├── index
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── collector.cpython-312.pyc
│   │           │   │   │   │   ├── package_finder.cpython-312.pyc
│   │           │   │   │   │   └── sources.cpython-312.pyc
│   │           │   │   │   ├── collector.py
│   │           │   │   │   ├── package_finder.py
│   │           │   │   │   └── sources.py
│   │           │   │   ├── locations
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _distutils.cpython-312.pyc
│   │           │   │   │   │   ├── _sysconfig.cpython-312.pyc
│   │           │   │   │   │   └── base.cpython-312.pyc
│   │           │   │   │   ├── _distutils.py
│   │           │   │   │   ├── _sysconfig.py
│   │           │   │   │   └── base.py
│   │           │   │   ├── main.py
│   │           │   │   ├── metadata
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _json.cpython-312.pyc
│   │           │   │   │   │   ├── base.cpython-312.pyc
│   │           │   │   │   │   └── pkg_resources.cpython-312.pyc
│   │           │   │   │   ├── _json.py
│   │           │   │   │   ├── base.py
│   │           │   │   │   ├── importlib
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   ├── _compat.cpython-312.pyc
│   │           │   │   │   │   │   ├── _dists.cpython-312.pyc
│   │           │   │   │   │   │   └── _envs.cpython-312.pyc
│   │           │   │   │   │   ├── _compat.py
│   │           │   │   │   │   ├── _dists.py
│   │           │   │   │   │   └── _envs.py
│   │           │   │   │   └── pkg_resources.py
│   │           │   │   ├── models
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── candidate.cpython-312.pyc
│   │           │   │   │   │   ├── direct_url.cpython-312.pyc
│   │           │   │   │   │   ├── format_control.cpython-312.pyc
│   │           │   │   │   │   ├── index.cpython-312.pyc
│   │           │   │   │   │   ├── installation_report.cpython-312.pyc
│   │           │   │   │   │   ├── link.cpython-312.pyc
│   │           │   │   │   │   ├── scheme.cpython-312.pyc
│   │           │   │   │   │   ├── search_scope.cpython-312.pyc
│   │           │   │   │   │   ├── selection_prefs.cpython-312.pyc
│   │           │   │   │   │   ├── target_python.cpython-312.pyc
│   │           │   │   │   │   └── wheel.cpython-312.pyc
│   │           │   │   │   ├── candidate.py
│   │           │   │   │   ├── direct_url.py
│   │           │   │   │   ├── format_control.py
│   │           │   │   │   ├── index.py
│   │           │   │   │   ├── installation_report.py
│   │           │   │   │   ├── link.py
│   │           │   │   │   ├── scheme.py
│   │           │   │   │   ├── search_scope.py
│   │           │   │   │   ├── selection_prefs.py
│   │           │   │   │   ├── target_python.py
│   │           │   │   │   └── wheel.py
│   │           │   │   ├── network
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── auth.cpython-312.pyc
│   │           │   │   │   │   ├── cache.cpython-312.pyc
│   │           │   │   │   │   ├── download.cpython-312.pyc
│   │           │   │   │   │   ├── lazy_wheel.cpython-312.pyc
│   │           │   │   │   │   ├── session.cpython-312.pyc
│   │           │   │   │   │   ├── utils.cpython-312.pyc
│   │           │   │   │   │   └── xmlrpc.cpython-312.pyc
│   │           │   │   │   ├── auth.py
│   │           │   │   │   ├── cache.py
│   │           │   │   │   ├── download.py
│   │           │   │   │   ├── lazy_wheel.py
│   │           │   │   │   ├── session.py
│   │           │   │   │   ├── utils.py
│   │           │   │   │   └── xmlrpc.py
│   │           │   │   ├── operations
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── check.cpython-312.pyc
│   │           │   │   │   │   ├── freeze.cpython-312.pyc
│   │           │   │   │   │   └── prepare.cpython-312.pyc
│   │           │   │   │   ├── build
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   ├── build_tracker.cpython-312.pyc
│   │           │   │   │   │   │   ├── metadata_editable.cpython-312.pyc
│   │           │   │   │   │   │   ├── metadata_legacy.cpython-312.pyc
│   │           │   │   │   │   │   ├── metadata.cpython-312.pyc
│   │           │   │   │   │   │   ├── wheel_editable.cpython-312.pyc
│   │           │   │   │   │   │   ├── wheel_legacy.cpython-312.pyc
│   │           │   │   │   │   │   └── wheel.cpython-312.pyc
│   │           │   │   │   │   ├── build_tracker.py
│   │           │   │   │   │   ├── metadata_editable.py
│   │           │   │   │   │   ├── metadata_legacy.py
│   │           │   │   │   │   ├── metadata.py
│   │           │   │   │   │   ├── wheel_editable.py
│   │           │   │   │   │   ├── wheel_legacy.py
│   │           │   │   │   │   └── wheel.py
│   │           │   │   │   ├── check.py
│   │           │   │   │   ├── freeze.py
│   │           │   │   │   ├── install
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   ├── editable_legacy.cpython-312.pyc
│   │           │   │   │   │   │   └── wheel.cpython-312.pyc
│   │           │   │   │   │   ├── editable_legacy.py
│   │           │   │   │   │   └── wheel.py
│   │           │   │   │   └── prepare.py
│   │           │   │   ├── pyproject.py
│   │           │   │   ├── req
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── constructors.cpython-312.pyc
│   │           │   │   │   │   ├── req_file.cpython-312.pyc
│   │           │   │   │   │   ├── req_install.cpython-312.pyc
│   │           │   │   │   │   ├── req_set.cpython-312.pyc
│   │           │   │   │   │   └── req_uninstall.cpython-312.pyc
│   │           │   │   │   ├── constructors.py
│   │           │   │   │   ├── req_file.py
│   │           │   │   │   ├── req_install.py
│   │           │   │   │   ├── req_set.py
│   │           │   │   │   └── req_uninstall.py
│   │           │   │   ├── resolution
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   └── base.cpython-312.pyc
│   │           │   │   │   ├── base.py
│   │           │   │   │   ├── legacy
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   └── resolver.cpython-312.pyc
│   │           │   │   │   │   └── resolver.py
│   │           │   │   │   └── resolvelib
│   │           │   │   │       ├── __init__.py
│   │           │   │   │       ├── __pycache__
│   │           │   │   │       │   ├── __init__.cpython-312.pyc
│   │           │   │   │       │   ├── base.cpython-312.pyc
│   │           │   │   │       │   ├── candidates.cpython-312.pyc
│   │           │   │   │       │   ├── factory.cpython-312.pyc
│   │           │   │   │       │   ├── found_candidates.cpython-312.pyc
│   │           │   │   │       │   ├── provider.cpython-312.pyc
│   │           │   │   │       │   ├── reporter.cpython-312.pyc
│   │           │   │   │       │   ├── requirements.cpython-312.pyc
│   │           │   │   │       │   └── resolver.cpython-312.pyc
│   │           │   │   │       ├── base.py
│   │           │   │   │       ├── candidates.py
│   │           │   │   │       ├── factory.py
│   │           │   │   │       ├── found_candidates.py
│   │           │   │   │       ├── provider.py
│   │           │   │   │       ├── reporter.py
│   │           │   │   │       ├── requirements.py
│   │           │   │   │       └── resolver.py
│   │           │   │   ├── self_outdated_check.py
│   │           │   │   ├── utils
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _jaraco_text.cpython-312.pyc
│   │           │   │   │   │   ├── _log.cpython-312.pyc
│   │           │   │   │   │   ├── appdirs.cpython-312.pyc
│   │           │   │   │   │   ├── compat.cpython-312.pyc
│   │           │   │   │   │   ├── compatibility_tags.cpython-312.pyc
│   │           │   │   │   │   ├── datetime.cpython-312.pyc
│   │           │   │   │   │   ├── deprecation.cpython-312.pyc
│   │           │   │   │   │   ├── direct_url_helpers.cpython-312.pyc
│   │           │   │   │   │   ├── egg_link.cpython-312.pyc
│   │           │   │   │   │   ├── encoding.cpython-312.pyc
│   │           │   │   │   │   ├── entrypoints.cpython-312.pyc
│   │           │   │   │   │   ├── filesystem.cpython-312.pyc
│   │           │   │   │   │   ├── filetypes.cpython-312.pyc
│   │           │   │   │   │   ├── glibc.cpython-312.pyc
│   │           │   │   │   │   ├── hashes.cpython-312.pyc
│   │           │   │   │   │   ├── logging.cpython-312.pyc
│   │           │   │   │   │   ├── misc.cpython-312.pyc
│   │           │   │   │   │   ├── packaging.cpython-312.pyc
│   │           │   │   │   │   ├── retry.cpython-312.pyc
│   │           │   │   │   │   ├── setuptools_build.cpython-312.pyc
│   │           │   │   │   │   ├── subprocess.cpython-312.pyc
│   │           │   │   │   │   ├── temp_dir.cpython-312.pyc
│   │           │   │   │   │   ├── unpacking.cpython-312.pyc
│   │           │   │   │   │   ├── urls.cpython-312.pyc
│   │           │   │   │   │   ├── virtualenv.cpython-312.pyc
│   │           │   │   │   │   └── wheel.cpython-312.pyc
│   │           │   │   │   ├── _jaraco_text.py
│   │           │   │   │   ├── _log.py
│   │           │   │   │   ├── appdirs.py
│   │           │   │   │   ├── compat.py
│   │           │   │   │   ├── compatibility_tags.py
│   │           │   │   │   ├── datetime.py
│   │           │   │   │   ├── deprecation.py
│   │           │   │   │   ├── direct_url_helpers.py
│   │           │   │   │   ├── egg_link.py
│   │           │   │   │   ├── encoding.py
│   │           │   │   │   ├── entrypoints.py
│   │           │   │   │   ├── filesystem.py
│   │           │   │   │   ├── filetypes.py
│   │           │   │   │   ├── glibc.py
│   │           │   │   │   ├── hashes.py
│   │           │   │   │   ├── logging.py
│   │           │   │   │   ├── misc.py
│   │           │   │   │   ├── packaging.py
│   │           │   │   │   ├── retry.py
│   │           │   │   │   ├── setuptools_build.py
│   │           │   │   │   ├── subprocess.py
│   │           │   │   │   ├── temp_dir.py
│   │           │   │   │   ├── unpacking.py
│   │           │   │   │   ├── urls.py
│   │           │   │   │   ├── virtualenv.py
│   │           │   │   │   └── wheel.py
│   │           │   │   ├── vcs
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── bazaar.cpython-312.pyc
│   │           │   │   │   │   ├── git.cpython-312.pyc
│   │           │   │   │   │   ├── mercurial.cpython-312.pyc
│   │           │   │   │   │   ├── subversion.cpython-312.pyc
│   │           │   │   │   │   └── versioncontrol.cpython-312.pyc
│   │           │   │   │   ├── bazaar.py
│   │           │   │   │   ├── git.py
│   │           │   │   │   ├── mercurial.py
│   │           │   │   │   ├── subversion.py
│   │           │   │   │   └── versioncontrol.py
│   │           │   │   └── wheel_builder.py
│   │           │   ├── _vendor
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   └── typing_extensions.cpython-312.pyc
│   │           │   │   ├── cachecontrol
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _cmd.cpython-312.pyc
│   │           │   │   │   │   ├── adapter.cpython-312.pyc
│   │           │   │   │   │   ├── cache.cpython-312.pyc
│   │           │   │   │   │   ├── controller.cpython-312.pyc
│   │           │   │   │   │   ├── filewrapper.cpython-312.pyc
│   │           │   │   │   │   ├── heuristics.cpython-312.pyc
│   │           │   │   │   │   ├── serialize.cpython-312.pyc
│   │           │   │   │   │   └── wrapper.cpython-312.pyc
│   │           │   │   │   ├── _cmd.py
│   │           │   │   │   ├── adapter.py
│   │           │   │   │   ├── cache.py
│   │           │   │   │   ├── caches
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   ├── file_cache.cpython-312.pyc
│   │           │   │   │   │   │   └── redis_cache.cpython-312.pyc
│   │           │   │   │   │   ├── file_cache.py
│   │           │   │   │   │   └── redis_cache.py
│   │           │   │   │   ├── controller.py
│   │           │   │   │   ├── filewrapper.py
│   │           │   │   │   ├── heuristics.py
│   │           │   │   │   ├── py.typed
│   │           │   │   │   ├── serialize.py
│   │           │   │   │   └── wrapper.py
│   │           │   │   ├── certifi
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __main__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── __main__.cpython-312.pyc
│   │           │   │   │   │   └── core.cpython-312.pyc
│   │           │   │   │   ├── cacert.pem
│   │           │   │   │   ├── core.py
│   │           │   │   │   └── py.typed
│   │           │   │   ├── distlib
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── compat.cpython-312.pyc
│   │           │   │   │   │   ├── database.cpython-312.pyc
│   │           │   │   │   │   ├── index.cpython-312.pyc
│   │           │   │   │   │   ├── locators.cpython-312.pyc
│   │           │   │   │   │   ├── manifest.cpython-312.pyc
│   │           │   │   │   │   ├── markers.cpython-312.pyc
│   │           │   │   │   │   ├── metadata.cpython-312.pyc
│   │           │   │   │   │   ├── resources.cpython-312.pyc
│   │           │   │   │   │   ├── scripts.cpython-312.pyc
│   │           │   │   │   │   ├── util.cpython-312.pyc
│   │           │   │   │   │   ├── version.cpython-312.pyc
│   │           │   │   │   │   └── wheel.cpython-312.pyc
│   │           │   │   │   ├── compat.py
│   │           │   │   │   ├── database.py
│   │           │   │   │   ├── index.py
│   │           │   │   │   ├── locators.py
│   │           │   │   │   ├── manifest.py
│   │           │   │   │   ├── markers.py
│   │           │   │   │   ├── metadata.py
│   │           │   │   │   ├── resources.py
│   │           │   │   │   ├── scripts.py
│   │           │   │   │   ├── t32.exe
│   │           │   │   │   ├── t64-arm.exe
│   │           │   │   │   ├── t64.exe
│   │           │   │   │   ├── util.py
│   │           │   │   │   ├── version.py
│   │           │   │   │   ├── w32.exe
│   │           │   │   │   ├── w64-arm.exe
│   │           │   │   │   ├── w64.exe
│   │           │   │   │   └── wheel.py
│   │           │   │   ├── distro
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __main__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── __main__.cpython-312.pyc
│   │           │   │   │   │   └── distro.cpython-312.pyc
│   │           │   │   │   ├── distro.py
│   │           │   │   │   └── py.typed
│   │           │   │   ├── idna
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── codec.cpython-312.pyc
│   │           │   │   │   │   ├── compat.cpython-312.pyc
│   │           │   │   │   │   ├── core.cpython-312.pyc
│   │           │   │   │   │   ├── idnadata.cpython-312.pyc
│   │           │   │   │   │   ├── intranges.cpython-312.pyc
│   │           │   │   │   │   ├── package_data.cpython-312.pyc
│   │           │   │   │   │   └── uts46data.cpython-312.pyc
│   │           │   │   │   ├── codec.py
│   │           │   │   │   ├── compat.py
│   │           │   │   │   ├── core.py
│   │           │   │   │   ├── idnadata.py
│   │           │   │   │   ├── intranges.py
│   │           │   │   │   ├── package_data.py
│   │           │   │   │   ├── py.typed
│   │           │   │   │   └── uts46data.py
│   │           │   │   ├── msgpack
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   │   │   ├── ext.cpython-312.pyc
│   │           │   │   │   │   └── fallback.cpython-312.pyc
│   │           │   │   │   ├── exceptions.py
│   │           │   │   │   ├── ext.py
│   │           │   │   │   └── fallback.py
│   │           │   │   ├── packaging
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _elffile.cpython-312.pyc
│   │           │   │   │   │   ├── _manylinux.cpython-312.pyc
│   │           │   │   │   │   ├── _musllinux.cpython-312.pyc
│   │           │   │   │   │   ├── _parser.cpython-312.pyc
│   │           │   │   │   │   ├── _structures.cpython-312.pyc
│   │           │   │   │   │   ├── _tokenizer.cpython-312.pyc
│   │           │   │   │   │   ├── markers.cpython-312.pyc
│   │           │   │   │   │   ├── metadata.cpython-312.pyc
│   │           │   │   │   │   ├── requirements.cpython-312.pyc
│   │           │   │   │   │   ├── specifiers.cpython-312.pyc
│   │           │   │   │   │   ├── tags.cpython-312.pyc
│   │           │   │   │   │   ├── utils.cpython-312.pyc
│   │           │   │   │   │   └── version.cpython-312.pyc
│   │           │   │   │   ├── _elffile.py
│   │           │   │   │   ├── _manylinux.py
│   │           │   │   │   ├── _musllinux.py
│   │           │   │   │   ├── _parser.py
│   │           │   │   │   ├── _structures.py
│   │           │   │   │   ├── _tokenizer.py
│   │           │   │   │   ├── markers.py
│   │           │   │   │   ├── metadata.py
│   │           │   │   │   ├── py.typed
│   │           │   │   │   ├── requirements.py
│   │           │   │   │   ├── specifiers.py
│   │           │   │   │   ├── tags.py
│   │           │   │   │   ├── utils.py
│   │           │   │   │   └── version.py
│   │           │   │   ├── pkg_resources
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   └── __pycache__
│   │           │   │   │       └── __init__.cpython-312.pyc
│   │           │   │   ├── platformdirs
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __main__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── __main__.cpython-312.pyc
│   │           │   │   │   │   ├── android.cpython-312.pyc
│   │           │   │   │   │   ├── api.cpython-312.pyc
│   │           │   │   │   │   ├── macos.cpython-312.pyc
│   │           │   │   │   │   ├── unix.cpython-312.pyc
│   │           │   │   │   │   ├── version.cpython-312.pyc
│   │           │   │   │   │   └── windows.cpython-312.pyc
│   │           │   │   │   ├── android.py
│   │           │   │   │   ├── api.py
│   │           │   │   │   ├── macos.py
│   │           │   │   │   ├── py.typed
│   │           │   │   │   ├── unix.py
│   │           │   │   │   ├── version.py
│   │           │   │   │   └── windows.py
│   │           │   │   ├── pygments
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __main__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── __main__.cpython-312.pyc
│   │           │   │   │   │   ├── cmdline.cpython-312.pyc
│   │           │   │   │   │   ├── console.cpython-312.pyc
│   │           │   │   │   │   ├── filter.cpython-312.pyc
│   │           │   │   │   │   ├── formatter.cpython-312.pyc
│   │           │   │   │   │   ├── lexer.cpython-312.pyc
│   │           │   │   │   │   ├── modeline.cpython-312.pyc
│   │           │   │   │   │   ├── plugin.cpython-312.pyc
│   │           │   │   │   │   ├── regexopt.cpython-312.pyc
│   │           │   │   │   │   ├── scanner.cpython-312.pyc
│   │           │   │   │   │   ├── sphinxext.cpython-312.pyc
│   │           │   │   │   │   ├── style.cpython-312.pyc
│   │           │   │   │   │   ├── token.cpython-312.pyc
│   │           │   │   │   │   ├── unistring.cpython-312.pyc
│   │           │   │   │   │   └── util.cpython-312.pyc
│   │           │   │   │   ├── cmdline.py
│   │           │   │   │   ├── console.py
│   │           │   │   │   ├── filter.py
│   │           │   │   │   ├── filters
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   └── __pycache__
│   │           │   │   │   │       └── __init__.cpython-312.pyc
│   │           │   │   │   ├── formatter.py
│   │           │   │   │   ├── formatters
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   ├── _mapping.cpython-312.pyc
│   │           │   │   │   │   │   ├── bbcode.cpython-312.pyc
│   │           │   │   │   │   │   ├── groff.cpython-312.pyc
│   │           │   │   │   │   │   ├── html.cpython-312.pyc
│   │           │   │   │   │   │   ├── img.cpython-312.pyc
│   │           │   │   │   │   │   ├── irc.cpython-312.pyc
│   │           │   │   │   │   │   ├── latex.cpython-312.pyc
│   │           │   │   │   │   │   ├── other.cpython-312.pyc
│   │           │   │   │   │   │   ├── pangomarkup.cpython-312.pyc
│   │           │   │   │   │   │   ├── rtf.cpython-312.pyc
│   │           │   │   │   │   │   ├── svg.cpython-312.pyc
│   │           │   │   │   │   │   ├── terminal.cpython-312.pyc
│   │           │   │   │   │   │   └── terminal256.cpython-312.pyc
│   │           │   │   │   │   ├── _mapping.py
│   │           │   │   │   │   ├── bbcode.py
│   │           │   │   │   │   ├── groff.py
│   │           │   │   │   │   ├── html.py
│   │           │   │   │   │   ├── img.py
│   │           │   │   │   │   ├── irc.py
│   │           │   │   │   │   ├── latex.py
│   │           │   │   │   │   ├── other.py
│   │           │   │   │   │   ├── pangomarkup.py
│   │           │   │   │   │   ├── rtf.py
│   │           │   │   │   │   ├── svg.py
│   │           │   │   │   │   ├── terminal.py
│   │           │   │   │   │   └── terminal256.py
│   │           │   │   │   ├── lexer.py
│   │           │   │   │   ├── lexers
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   ├── _mapping.cpython-312.pyc
│   │           │   │   │   │   │   └── python.cpython-312.pyc
│   │           │   │   │   │   ├── _mapping.py
│   │           │   │   │   │   └── python.py
│   │           │   │   │   ├── modeline.py
│   │           │   │   │   ├── plugin.py
│   │           │   │   │   ├── regexopt.py
│   │           │   │   │   ├── scanner.py
│   │           │   │   │   ├── sphinxext.py
│   │           │   │   │   ├── style.py
│   │           │   │   │   ├── styles
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   └── _mapping.cpython-312.pyc
│   │           │   │   │   │   └── _mapping.py
│   │           │   │   │   ├── token.py
│   │           │   │   │   ├── unistring.py
│   │           │   │   │   └── util.py
│   │           │   │   ├── pyproject_hooks
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _compat.cpython-312.pyc
│   │           │   │   │   │   └── _impl.cpython-312.pyc
│   │           │   │   │   ├── _compat.py
│   │           │   │   │   ├── _impl.py
│   │           │   │   │   └── _in_process
│   │           │   │   │       ├── __init__.py
│   │           │   │   │       ├── __pycache__
│   │           │   │   │       │   ├── __init__.cpython-312.pyc
│   │           │   │   │       │   └── _in_process.cpython-312.pyc
│   │           │   │   │       └── _in_process.py
│   │           │   │   ├── requests
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── __version__.cpython-312.pyc
│   │           │   │   │   │   ├── _internal_utils.cpython-312.pyc
│   │           │   │   │   │   ├── adapters.cpython-312.pyc
│   │           │   │   │   │   ├── api.cpython-312.pyc
│   │           │   │   │   │   ├── auth.cpython-312.pyc
│   │           │   │   │   │   ├── certs.cpython-312.pyc
│   │           │   │   │   │   ├── compat.cpython-312.pyc
│   │           │   │   │   │   ├── cookies.cpython-312.pyc
│   │           │   │   │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   │   │   ├── help.cpython-312.pyc
│   │           │   │   │   │   ├── hooks.cpython-312.pyc
│   │           │   │   │   │   ├── models.cpython-312.pyc
│   │           │   │   │   │   ├── packages.cpython-312.pyc
│   │           │   │   │   │   ├── sessions.cpython-312.pyc
│   │           │   │   │   │   ├── status_codes.cpython-312.pyc
│   │           │   │   │   │   ├── structures.cpython-312.pyc
│   │           │   │   │   │   └── utils.cpython-312.pyc
│   │           │   │   │   ├── __version__.py
│   │           │   │   │   ├── _internal_utils.py
│   │           │   │   │   ├── adapters.py
│   │           │   │   │   ├── api.py
│   │           │   │   │   ├── auth.py
│   │           │   │   │   ├── certs.py
│   │           │   │   │   ├── compat.py
│   │           │   │   │   ├── cookies.py
│   │           │   │   │   ├── exceptions.py
│   │           │   │   │   ├── help.py
│   │           │   │   │   ├── hooks.py
│   │           │   │   │   ├── models.py
│   │           │   │   │   ├── packages.py
│   │           │   │   │   ├── sessions.py
│   │           │   │   │   ├── status_codes.py
│   │           │   │   │   ├── structures.py
│   │           │   │   │   └── utils.py
│   │           │   │   ├── resolvelib
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── providers.cpython-312.pyc
│   │           │   │   │   │   ├── reporters.cpython-312.pyc
│   │           │   │   │   │   ├── resolvers.cpython-312.pyc
│   │           │   │   │   │   └── structs.cpython-312.pyc
│   │           │   │   │   ├── compat
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   └── collections_abc.cpython-312.pyc
│   │           │   │   │   │   └── collections_abc.py
│   │           │   │   │   ├── providers.py
│   │           │   │   │   ├── py.typed
│   │           │   │   │   ├── reporters.py
│   │           │   │   │   ├── resolvers.py
│   │           │   │   │   └── structs.py
│   │           │   │   ├── rich
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __main__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── __main__.cpython-312.pyc
│   │           │   │   │   │   ├── _cell_widths.cpython-312.pyc
│   │           │   │   │   │   ├── _emoji_codes.cpython-312.pyc
│   │           │   │   │   │   ├── _emoji_replace.cpython-312.pyc
│   │           │   │   │   │   ├── _export_format.cpython-312.pyc
│   │           │   │   │   │   ├── _extension.cpython-312.pyc
│   │           │   │   │   │   ├── _fileno.cpython-312.pyc
│   │           │   │   │   │   ├── _inspect.cpython-312.pyc
│   │           │   │   │   │   ├── _log_render.cpython-312.pyc
│   │           │   │   │   │   ├── _loop.cpython-312.pyc
│   │           │   │   │   │   ├── _null_file.cpython-312.pyc
│   │           │   │   │   │   ├── _palettes.cpython-312.pyc
│   │           │   │   │   │   ├── _pick.cpython-312.pyc
│   │           │   │   │   │   ├── _ratio.cpython-312.pyc
│   │           │   │   │   │   ├── _spinners.cpython-312.pyc
│   │           │   │   │   │   ├── _stack.cpython-312.pyc
│   │           │   │   │   │   ├── _timer.cpython-312.pyc
│   │           │   │   │   │   ├── _win32_console.cpython-312.pyc
│   │           │   │   │   │   ├── _windows_renderer.cpython-312.pyc
│   │           │   │   │   │   ├── _windows.cpython-312.pyc
│   │           │   │   │   │   ├── _wrap.cpython-312.pyc
│   │           │   │   │   │   ├── abc.cpython-312.pyc
│   │           │   │   │   │   ├── align.cpython-312.pyc
│   │           │   │   │   │   ├── ansi.cpython-312.pyc
│   │           │   │   │   │   ├── bar.cpython-312.pyc
│   │           │   │   │   │   ├── box.cpython-312.pyc
│   │           │   │   │   │   ├── cells.cpython-312.pyc
│   │           │   │   │   │   ├── color_triplet.cpython-312.pyc
│   │           │   │   │   │   ├── color.cpython-312.pyc
│   │           │   │   │   │   ├── columns.cpython-312.pyc
│   │           │   │   │   │   ├── console.cpython-312.pyc
│   │           │   │   │   │   ├── constrain.cpython-312.pyc
│   │           │   │   │   │   ├── containers.cpython-312.pyc
│   │           │   │   │   │   ├── control.cpython-312.pyc
│   │           │   │   │   │   ├── default_styles.cpython-312.pyc
│   │           │   │   │   │   ├── diagnose.cpython-312.pyc
│   │           │   │   │   │   ├── emoji.cpython-312.pyc
│   │           │   │   │   │   ├── errors.cpython-312.pyc
│   │           │   │   │   │   ├── file_proxy.cpython-312.pyc
│   │           │   │   │   │   ├── filesize.cpython-312.pyc
│   │           │   │   │   │   ├── highlighter.cpython-312.pyc
│   │           │   │   │   │   ├── json.cpython-312.pyc
│   │           │   │   │   │   ├── jupyter.cpython-312.pyc
│   │           │   │   │   │   ├── layout.cpython-312.pyc
│   │           │   │   │   │   ├── live_render.cpython-312.pyc
│   │           │   │   │   │   ├── live.cpython-312.pyc
│   │           │   │   │   │   ├── logging.cpython-312.pyc
│   │           │   │   │   │   ├── markup.cpython-312.pyc
│   │           │   │   │   │   ├── measure.cpython-312.pyc
│   │           │   │   │   │   ├── padding.cpython-312.pyc
│   │           │   │   │   │   ├── pager.cpython-312.pyc
│   │           │   │   │   │   ├── palette.cpython-312.pyc
│   │           │   │   │   │   ├── panel.cpython-312.pyc
│   │           │   │   │   │   ├── pretty.cpython-312.pyc
│   │           │   │   │   │   ├── progress_bar.cpython-312.pyc
│   │           │   │   │   │   ├── progress.cpython-312.pyc
│   │           │   │   │   │   ├── prompt.cpython-312.pyc
│   │           │   │   │   │   ├── protocol.cpython-312.pyc
│   │           │   │   │   │   ├── region.cpython-312.pyc
│   │           │   │   │   │   ├── repr.cpython-312.pyc
│   │           │   │   │   │   ├── rule.cpython-312.pyc
│   │           │   │   │   │   ├── scope.cpython-312.pyc
│   │           │   │   │   │   ├── screen.cpython-312.pyc
│   │           │   │   │   │   ├── segment.cpython-312.pyc
│   │           │   │   │   │   ├── spinner.cpython-312.pyc
│   │           │   │   │   │   ├── status.cpython-312.pyc
│   │           │   │   │   │   ├── style.cpython-312.pyc
│   │           │   │   │   │   ├── styled.cpython-312.pyc
│   │           │   │   │   │   ├── syntax.cpython-312.pyc
│   │           │   │   │   │   ├── table.cpython-312.pyc
│   │           │   │   │   │   ├── terminal_theme.cpython-312.pyc
│   │           │   │   │   │   ├── text.cpython-312.pyc
│   │           │   │   │   │   ├── theme.cpython-312.pyc
│   │           │   │   │   │   ├── themes.cpython-312.pyc
│   │           │   │   │   │   ├── traceback.cpython-312.pyc
│   │           │   │   │   │   └── tree.cpython-312.pyc
│   │           │   │   │   ├── _cell_widths.py
│   │           │   │   │   ├── _emoji_codes.py
│   │           │   │   │   ├── _emoji_replace.py
│   │           │   │   │   ├── _export_format.py
│   │           │   │   │   ├── _extension.py
│   │           │   │   │   ├── _fileno.py
│   │           │   │   │   ├── _inspect.py
│   │           │   │   │   ├── _log_render.py
│   │           │   │   │   ├── _loop.py
│   │           │   │   │   ├── _null_file.py
│   │           │   │   │   ├── _palettes.py
│   │           │   │   │   ├── _pick.py
│   │           │   │   │   ├── _ratio.py
│   │           │   │   │   ├── _spinners.py
│   │           │   │   │   ├── _stack.py
│   │           │   │   │   ├── _timer.py
│   │           │   │   │   ├── _win32_console.py
│   │           │   │   │   ├── _windows_renderer.py
│   │           │   │   │   ├── _windows.py
│   │           │   │   │   ├── _wrap.py
│   │           │   │   │   ├── abc.py
│   │           │   │   │   ├── align.py
│   │           │   │   │   ├── ansi.py
│   │           │   │   │   ├── bar.py
│   │           │   │   │   ├── box.py
│   │           │   │   │   ├── cells.py
│   │           │   │   │   ├── color_triplet.py
│   │           │   │   │   ├── color.py
│   │           │   │   │   ├── columns.py
│   │           │   │   │   ├── console.py
│   │           │   │   │   ├── constrain.py
│   │           │   │   │   ├── containers.py
│   │           │   │   │   ├── control.py
│   │           │   │   │   ├── default_styles.py
│   │           │   │   │   ├── diagnose.py
│   │           │   │   │   ├── emoji.py
│   │           │   │   │   ├── errors.py
│   │           │   │   │   ├── file_proxy.py
│   │           │   │   │   ├── filesize.py
│   │           │   │   │   ├── highlighter.py
│   │           │   │   │   ├── json.py
│   │           │   │   │   ├── jupyter.py
│   │           │   │   │   ├── layout.py
│   │           │   │   │   ├── live_render.py
│   │           │   │   │   ├── live.py
│   │           │   │   │   ├── logging.py
│   │           │   │   │   ├── markup.py
│   │           │   │   │   ├── measure.py
│   │           │   │   │   ├── padding.py
│   │           │   │   │   ├── pager.py
│   │           │   │   │   ├── palette.py
│   │           │   │   │   ├── panel.py
│   │           │   │   │   ├── pretty.py
│   │           │   │   │   ├── progress_bar.py
│   │           │   │   │   ├── progress.py
│   │           │   │   │   ├── prompt.py
│   │           │   │   │   ├── protocol.py
│   │           │   │   │   ├── py.typed
│   │           │   │   │   ├── region.py
│   │           │   │   │   ├── repr.py
│   │           │   │   │   ├── rule.py
│   │           │   │   │   ├── scope.py
│   │           │   │   │   ├── screen.py
│   │           │   │   │   ├── segment.py
│   │           │   │   │   ├── spinner.py
│   │           │   │   │   ├── status.py
│   │           │   │   │   ├── style.py
│   │           │   │   │   ├── styled.py
│   │           │   │   │   ├── syntax.py
│   │           │   │   │   ├── table.py
│   │           │   │   │   ├── terminal_theme.py
│   │           │   │   │   ├── text.py
│   │           │   │   │   ├── theme.py
│   │           │   │   │   ├── themes.py
│   │           │   │   │   ├── traceback.py
│   │           │   │   │   └── tree.py
│   │           │   │   ├── tomli
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _parser.cpython-312.pyc
│   │           │   │   │   │   ├── _re.cpython-312.pyc
│   │           │   │   │   │   └── _types.cpython-312.pyc
│   │           │   │   │   ├── _parser.py
│   │           │   │   │   ├── _re.py
│   │           │   │   │   ├── _types.py
│   │           │   │   │   └── py.typed
│   │           │   │   ├── truststore
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _api.cpython-312.pyc
│   │           │   │   │   │   ├── _macos.cpython-312.pyc
│   │           │   │   │   │   ├── _openssl.cpython-312.pyc
│   │           │   │   │   │   ├── _ssl_constants.cpython-312.pyc
│   │           │   │   │   │   └── _windows.cpython-312.pyc
│   │           │   │   │   ├── _api.py
│   │           │   │   │   ├── _macos.py
│   │           │   │   │   ├── _openssl.py
│   │           │   │   │   ├── _ssl_constants.py
│   │           │   │   │   ├── _windows.py
│   │           │   │   │   └── py.typed
│   │           │   │   ├── typing_extensions.py
│   │           │   │   ├── urllib3
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _collections.cpython-312.pyc
│   │           │   │   │   │   ├── _version.cpython-312.pyc
│   │           │   │   │   │   ├── connection.cpython-312.pyc
│   │           │   │   │   │   ├── connectionpool.cpython-312.pyc
│   │           │   │   │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   │   │   ├── fields.cpython-312.pyc
│   │           │   │   │   │   ├── filepost.cpython-312.pyc
│   │           │   │   │   │   ├── poolmanager.cpython-312.pyc
│   │           │   │   │   │   ├── request.cpython-312.pyc
│   │           │   │   │   │   └── response.cpython-312.pyc
│   │           │   │   │   ├── _collections.py
│   │           │   │   │   ├── _version.py
│   │           │   │   │   ├── connection.py
│   │           │   │   │   ├── connectionpool.py
│   │           │   │   │   ├── contrib
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   ├── _appengine_environ.cpython-312.pyc
│   │           │   │   │   │   │   ├── appengine.cpython-312.pyc
│   │           │   │   │   │   │   ├── ntlmpool.cpython-312.pyc
│   │           │   │   │   │   │   ├── pyopenssl.cpython-312.pyc
│   │           │   │   │   │   │   ├── securetransport.cpython-312.pyc
│   │           │   │   │   │   │   └── socks.cpython-312.pyc
│   │           │   │   │   │   ├── _appengine_environ.py
│   │           │   │   │   │   ├── _securetransport
│   │           │   │   │   │   │   ├── __init__.py
│   │           │   │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   │   ├── bindings.cpython-312.pyc
│   │           │   │   │   │   │   │   └── low_level.cpython-312.pyc
│   │           │   │   │   │   │   ├── bindings.py
│   │           │   │   │   │   │   └── low_level.py
│   │           │   │   │   │   ├── appengine.py
│   │           │   │   │   │   ├── ntlmpool.py
│   │           │   │   │   │   ├── pyopenssl.py
│   │           │   │   │   │   ├── securetransport.py
│   │           │   │   │   │   └── socks.py
│   │           │   │   │   ├── exceptions.py
│   │           │   │   │   ├── fields.py
│   │           │   │   │   ├── filepost.py
│   │           │   │   │   ├── packages
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   └── six.cpython-312.pyc
│   │           │   │   │   │   ├── backports
│   │           │   │   │   │   │   ├── __init__.py
│   │           │   │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   │   ├── makefile.cpython-312.pyc
│   │           │   │   │   │   │   │   └── weakref_finalize.cpython-312.pyc
│   │           │   │   │   │   │   ├── makefile.py
│   │           │   │   │   │   │   └── weakref_finalize.py
│   │           │   │   │   │   └── six.py
│   │           │   │   │   ├── poolmanager.py
│   │           │   │   │   ├── request.py
│   │           │   │   │   ├── response.py
│   │           │   │   │   └── util
│   │           │   │   │       ├── __init__.py
│   │           │   │   │       ├── __pycache__
│   │           │   │   │       │   ├── __init__.cpython-312.pyc
│   │           │   │   │       │   ├── connection.cpython-312.pyc
│   │           │   │   │       │   ├── proxy.cpython-312.pyc
│   │           │   │   │       │   ├── queue.cpython-312.pyc
│   │           │   │   │       │   ├── request.cpython-312.pyc
│   │           │   │   │       │   ├── response.cpython-312.pyc
│   │           │   │   │       │   ├── retry.cpython-312.pyc
│   │           │   │   │       │   ├── ssl_.cpython-312.pyc
│   │           │   │   │       │   ├── ssl_match_hostname.cpython-312.pyc
│   │           │   │   │       │   ├── ssltransport.cpython-312.pyc
│   │           │   │   │       │   ├── timeout.cpython-312.pyc
│   │           │   │   │       │   ├── url.cpython-312.pyc
│   │           │   │   │       │   └── wait.cpython-312.pyc
│   │           │   │   │       ├── connection.py
│   │           │   │   │       ├── proxy.py
│   │           │   │   │       ├── queue.py
│   │           │   │   │       ├── request.py
│   │           │   │   │       ├── response.py
│   │           │   │   │       ├── retry.py
│   │           │   │   │       ├── ssl_.py
│   │           │   │   │       ├── ssl_match_hostname.py
│   │           │   │   │       ├── ssltransport.py
│   │           │   │   │       ├── timeout.py
│   │           │   │   │       ├── url.py
│   │           │   │   │       └── wait.py
│   │           │   │   └── vendor.txt
│   │           │   └── py.typed
│   │           ├── pip-24.2.dist-info
│   │           │   ├── AUTHORS.txt
│   │           │   ├── entry_points.txt
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── REQUESTED
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── requests
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── __version__.cpython-312.pyc
│   │           │   │   ├── _internal_utils.cpython-312.pyc
│   │           │   │   ├── adapters.cpython-312.pyc
│   │           │   │   ├── api.cpython-312.pyc
│   │           │   │   ├── auth.cpython-312.pyc
│   │           │   │   ├── certs.cpython-312.pyc
│   │           │   │   ├── compat.cpython-312.pyc
│   │           │   │   ├── cookies.cpython-312.pyc
│   │           │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   ├── help.cpython-312.pyc
│   │           │   │   ├── hooks.cpython-312.pyc
│   │           │   │   ├── models.cpython-312.pyc
│   │           │   │   ├── packages.cpython-312.pyc
│   │           │   │   ├── sessions.cpython-312.pyc
│   │           │   │   ├── status_codes.cpython-312.pyc
│   │           │   │   ├── structures.cpython-312.pyc
│   │           │   │   └── utils.cpython-312.pyc
│   │           │   ├── __version__.py
│   │           │   ├── _internal_utils.py
│   │           │   ├── adapters.py
│   │           │   ├── api.py
│   │           │   ├── auth.py
│   │           │   ├── certs.py
│   │           │   ├── compat.py
│   │           │   ├── cookies.py
│   │           │   ├── exceptions.py
│   │           │   ├── help.py
│   │           │   ├── hooks.py
│   │           │   ├── models.py
│   │           │   ├── packages.py
│   │           │   ├── sessions.py
│   │           │   ├── status_codes.py
│   │           │   ├── structures.py
│   │           │   └── utils.py
│   │           ├── requests-2.32.3.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── REQUESTED
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── soupsieve
│   │           │   ├── __init__.py
│   │           │   ├── __meta__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── __meta__.cpython-312.pyc
│   │           │   │   ├── css_match.cpython-312.pyc
│   │           │   │   ├── css_parser.cpython-312.pyc
│   │           │   │   ├── css_types.cpython-312.pyc
│   │           │   │   ├── pretty.cpython-312.pyc
│   │           │   │   └── util.cpython-312.pyc
│   │           │   ├── css_match.py
│   │           │   ├── css_parser.py
│   │           │   ├── css_types.py
│   │           │   ├── pretty.py
│   │           │   ├── py.typed
│   │           │   └── util.py
│   │           ├── soupsieve-2.6.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── licenses
│   │           │   │   └── LICENSE.md
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   └── WHEEL
│   │           ├── urllib3
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── _base_connection.cpython-312.pyc
│   │           │   │   ├── _collections.cpython-312.pyc
│   │           │   │   ├── _request_methods.cpython-312.pyc
│   │           │   │   ├── _version.cpython-312.pyc
│   │           │   │   ├── connection.cpython-312.pyc
│   │           │   │   ├── connectionpool.cpython-312.pyc
│   │           │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   ├── fields.cpython-312.pyc
│   │           │   │   ├── filepost.cpython-312.pyc
│   │           │   │   ├── poolmanager.cpython-312.pyc
│   │           │   │   └── response.cpython-312.pyc
│   │           │   ├── _base_connection.py
│   │           │   ├── _collections.py
│   │           │   ├── _request_methods.py
│   │           │   ├── _version.py
│   │           │   ├── connection.py
│   │           │   ├── connectionpool.py
│   │           │   ├── contrib
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── pyopenssl.cpython-312.pyc
│   │           │   │   │   └── socks.cpython-312.pyc
│   │           │   │   ├── emscripten
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── connection.cpython-312.pyc
│   │           │   │   │   │   ├── fetch.cpython-312.pyc
│   │           │   │   │   │   ├── request.cpython-312.pyc
│   │           │   │   │   │   └── response.cpython-312.pyc
│   │           │   │   │   ├── connection.py
│   │           │   │   │   ├── emscripten_fetch_worker.js
│   │           │   │   │   ├── fetch.py
│   │           │   │   │   ├── request.py
│   │           │   │   │   └── response.py
│   │           │   │   ├── pyopenssl.py
│   │           │   │   └── socks.py
│   │           │   ├── exceptions.py
│   │           │   ├── fields.py
│   │           │   ├── filepost.py
│   │           │   ├── http2
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── connection.cpython-312.pyc
│   │           │   │   │   └── probe.cpython-312.pyc
│   │           │   │   ├── connection.py
│   │           │   │   └── probe.py
│   │           │   ├── poolmanager.py
│   │           │   ├── py.typed
│   │           │   ├── response.py
│   │           │   └── util
│   │           │       ├── __init__.py
│   │           │       ├── __pycache__
│   │           │       │   ├── __init__.cpython-312.pyc
│   │           │       │   ├── connection.cpython-312.pyc
│   │           │       │   ├── proxy.cpython-312.pyc
│   │           │       │   ├── request.cpython-312.pyc
│   │           │       │   ├── response.cpython-312.pyc
│   │           │       │   ├── retry.cpython-312.pyc
│   │           │       │   ├── ssl_.cpython-312.pyc
│   │           │       │   ├── ssl_match_hostname.cpython-312.pyc
│   │           │       │   ├── ssltransport.cpython-312.pyc
│   │           │       │   ├── timeout.cpython-312.pyc
│   │           │       │   ├── url.cpython-312.pyc
│   │           │       │   ├── util.cpython-312.pyc
│   │           │       │   └── wait.cpython-312.pyc
│   │           │       ├── connection.py
│   │           │       ├── proxy.py
│   │           │       ├── request.py
│   │           │       ├── response.py
│   │           │       ├── retry.py
│   │           │       ├── ssl_.py
│   │           │       ├── ssl_match_hostname.py
│   │           │       ├── ssltransport.py
│   │           │       ├── timeout.py
│   │           │       ├── url.py
│   │           │       ├── util.py
│   │           │       └── wait.py
│   │           ├── urllib3-2.2.3.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── licenses
│   │           │   │   └── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   └── WHEEL
│   │           ├── useragent
│   │           │   ├── __init__.py
│   │           │   ├── __init__.pyc
│   │           │   ├── __pycache__
│   │           │   │   └── __init__.cpython-312.pyc
│   │           │   ├── resources
│   │           │   │   └── user_agent_data.json
│   │           │   └── test
│   │           │       ├── __init__.py
│   │           │       ├── __pycache__
│   │           │       │   └── __init__.cpython-312.pyc
│   │           │       ├── test_additional_os.json
│   │           │       ├── test_browser.json
│   │           │       ├── test_device.json
│   │           │       ├── test_firefox.json
│   │           │       ├── test_os.json
│   │           │       └── test_pgts_browser.json
│   │           ├── useragent-0.1.1.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── REQUESTED
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── werkzeug
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── _internal.cpython-312.pyc
│   │           │   │   ├── _reloader.cpython-312.pyc
│   │           │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   ├── formparser.cpython-312.pyc
│   │           │   │   ├── http.cpython-312.pyc
│   │           │   │   ├── local.cpython-312.pyc
│   │           │   │   ├── security.cpython-312.pyc
│   │           │   │   ├── serving.cpython-312.pyc
│   │           │   │   ├── test.cpython-312.pyc
│   │           │   │   ├── testapp.cpython-312.pyc
│   │           │   │   ├── urls.cpython-312.pyc
│   │           │   │   ├── user_agent.cpython-312.pyc
│   │           │   │   ├── utils.cpython-312.pyc
│   │           │   │   └── wsgi.cpython-312.pyc
│   │           │   ├── _internal.py
│   │           │   ├── _reloader.py
│   │           │   ├── datastructures
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── accept.cpython-312.pyc
│   │           │   │   │   ├── auth.cpython-312.pyc
│   │           │   │   │   ├── cache_control.cpython-312.pyc
│   │           │   │   │   ├── csp.cpython-312.pyc
│   │           │   │   │   ├── etag.cpython-312.pyc
│   │           │   │   │   ├── file_storage.cpython-312.pyc
│   │           │   │   │   ├── headers.cpython-312.pyc
│   │           │   │   │   ├── mixins.cpython-312.pyc
│   │           │   │   │   ├── range.cpython-312.pyc
│   │           │   │   │   └── structures.cpython-312.pyc
│   │           │   │   ├── accept.py
│   │           │   │   ├── accept.pyi
│   │           │   │   ├── auth.py
│   │           │   │   ├── cache_control.py
│   │           │   │   ├── cache_control.pyi
│   │           │   │   ├── csp.py
│   │           │   │   ├── csp.pyi
│   │           │   │   ├── etag.py
│   │           │   │   ├── etag.pyi
│   │           │   │   ├── file_storage.py
│   │           │   │   ├── file_storage.pyi
│   │           │   │   ├── headers.py
│   │           │   │   ├── headers.pyi
│   │           │   │   ├── mixins.py
│   │           │   │   ├── mixins.pyi
│   │           │   │   ├── range.py
│   │           │   │   ├── range.pyi
│   │           │   │   ├── structures.py
│   │           │   │   └── structures.pyi
│   │           │   ├── debug
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── console.cpython-312.pyc
│   │           │   │   │   ├── repr.cpython-312.pyc
│   │           │   │   │   └── tbtools.cpython-312.pyc
│   │           │   │   ├── console.py
│   │           │   │   ├── repr.py
│   │           │   │   ├── shared
│   │           │   │   │   ├── console.png
│   │           │   │   │   ├── debugger.js
│   │           │   │   │   ├── ICON_LICENSE.md
│   │           │   │   │   ├── less.png
│   │           │   │   │   ├── more.png
│   │           │   │   │   └── style.css
│   │           │   │   └── tbtools.py
│   │           │   ├── exceptions.py
│   │           │   ├── formparser.py
│   │           │   ├── http.py
│   │           │   ├── local.py
│   │           │   ├── middleware
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── dispatcher.cpython-312.pyc
│   │           │   │   │   ├── http_proxy.cpython-312.pyc
│   │           │   │   │   ├── lint.cpython-312.pyc
│   │           │   │   │   ├── profiler.cpython-312.pyc
│   │           │   │   │   ├── proxy_fix.cpython-312.pyc
│   │           │   │   │   └── shared_data.cpython-312.pyc
│   │           │   │   ├── dispatcher.py
│   │           │   │   ├── http_proxy.py
│   │           │   │   ├── lint.py
│   │           │   │   ├── profiler.py
│   │           │   │   ├── proxy_fix.py
│   │           │   │   └── shared_data.py
│   │           │   ├── py.typed
│   │           │   ├── routing
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── converters.cpython-312.pyc
│   │           │   │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   │   ├── map.cpython-312.pyc
│   │           │   │   │   ├── matcher.cpython-312.pyc
│   │           │   │   │   └── rules.cpython-312.pyc
│   │           │   │   ├── converters.py
│   │           │   │   ├── exceptions.py
│   │           │   │   ├── map.py
│   │           │   │   ├── matcher.py
│   │           │   │   └── rules.py
│   │           │   ├── sansio
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── http.cpython-312.pyc
│   │           │   │   │   ├── multipart.cpython-312.pyc
│   │           │   │   │   ├── request.cpython-312.pyc
│   │           │   │   │   ├── response.cpython-312.pyc
│   │           │   │   │   └── utils.cpython-312.pyc
│   │           │   │   ├── http.py
│   │           │   │   ├── multipart.py
│   │           │   │   ├── request.py
│   │           │   │   ├── response.py
│   │           │   │   └── utils.py
│   │           │   ├── security.py
│   │           │   ├── serving.py
│   │           │   ├── test.py
│   │           │   ├── testapp.py
│   │           │   ├── urls.py
│   │           │   ├── user_agent.py
│   │           │   ├── utils.py
│   │           │   ├── wrappers
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── request.cpython-312.pyc
│   │           │   │   │   └── response.cpython-312.pyc
│   │           │   │   ├── request.py
│   │           │   │   └── response.py
│   │           │   └── wsgi.py
│   │           └── werkzeug-3.0.4.dist-info
│   │               ├── INSTALLER
│   │               ├── LICENSE.txt
│   │               ├── METADATA
│   │               ├── RECORD
│   │               └── WHEEL
│   ├── pyvenv.cfg
│   ├── static
│   │   └── styles.css
│   ├── templates
│   │   └── index.html
│   └── test.py
├── cline_config.json
├── mcp_server.py
├── README.md
├── search_results.json
├── settings.json
└── test_files
    ├── text1.txt
    └── text2.txt
```

# Files

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/itsdangerous/timed.py:
--------------------------------------------------------------------------------

```python
  1 | from __future__ import annotations
  2 | 
  3 | import collections.abc as cabc
  4 | import time
  5 | import typing as t
  6 | from datetime import datetime
  7 | from datetime import timezone
  8 | 
  9 | from .encoding import base64_decode
 10 | from .encoding import base64_encode
 11 | from .encoding import bytes_to_int
 12 | from .encoding import int_to_bytes
 13 | from .encoding import want_bytes
 14 | from .exc import BadSignature
 15 | from .exc import BadTimeSignature
 16 | from .exc import SignatureExpired
 17 | from .serializer import _TSerialized
 18 | from .serializer import Serializer
 19 | from .signer import Signer
 20 | 
 21 | 
 22 | class TimestampSigner(Signer):
 23 |     """Works like the regular :class:`.Signer` but also records the time
 24 |     of the signing and can be used to expire signatures. The
 25 |     :meth:`unsign` method can raise :exc:`.SignatureExpired` if the
 26 |     unsigning failed because the signature is expired.
 27 |     """
 28 | 
 29 |     def get_timestamp(self) -> int:
 30 |         """Returns the current timestamp. The function must return an
 31 |         integer.
 32 |         """
 33 |         return int(time.time())
 34 | 
 35 |     def timestamp_to_datetime(self, ts: int) -> datetime:
 36 |         """Convert the timestamp from :meth:`get_timestamp` into an
 37 |         aware :class`datetime.datetime` in UTC.
 38 | 
 39 |         .. versionchanged:: 2.0
 40 |             The timestamp is returned as a timezone-aware ``datetime``
 41 |             in UTC rather than a naive ``datetime`` assumed to be UTC.
 42 |         """
 43 |         return datetime.fromtimestamp(ts, tz=timezone.utc)
 44 | 
 45 |     def sign(self, value: str | bytes) -> bytes:
 46 |         """Signs the given string and also attaches time information."""
 47 |         value = want_bytes(value)
 48 |         timestamp = base64_encode(int_to_bytes(self.get_timestamp()))
 49 |         sep = want_bytes(self.sep)
 50 |         value = value + sep + timestamp
 51 |         return value + sep + self.get_signature(value)
 52 | 
 53 |     # Ignore overlapping signatures check, return_timestamp is the only
 54 |     # parameter that affects the return type.
 55 | 
 56 |     @t.overload
 57 |     def unsign(  # type: ignore[overload-overlap]
 58 |         self,
 59 |         signed_value: str | bytes,
 60 |         max_age: int | None = None,
 61 |         return_timestamp: t.Literal[False] = False,
 62 |     ) -> bytes: ...
 63 | 
 64 |     @t.overload
 65 |     def unsign(
 66 |         self,
 67 |         signed_value: str | bytes,
 68 |         max_age: int | None = None,
 69 |         return_timestamp: t.Literal[True] = True,
 70 |     ) -> tuple[bytes, datetime]: ...
 71 | 
 72 |     def unsign(
 73 |         self,
 74 |         signed_value: str | bytes,
 75 |         max_age: int | None = None,
 76 |         return_timestamp: bool = False,
 77 |     ) -> tuple[bytes, datetime] | bytes:
 78 |         """Works like the regular :meth:`.Signer.unsign` but can also
 79 |         validate the time. See the base docstring of the class for
 80 |         the general behavior. If ``return_timestamp`` is ``True`` the
 81 |         timestamp of the signature will be returned as an aware
 82 |         :class:`datetime.datetime` object in UTC.
 83 | 
 84 |         .. versionchanged:: 2.0
 85 |             The timestamp is returned as a timezone-aware ``datetime``
 86 |             in UTC rather than a naive ``datetime`` assumed to be UTC.
 87 |         """
 88 |         try:
 89 |             result = super().unsign(signed_value)
 90 |             sig_error = None
 91 |         except BadSignature as e:
 92 |             sig_error = e
 93 |             result = e.payload or b""
 94 | 
 95 |         sep = want_bytes(self.sep)
 96 | 
 97 |         # If there is no timestamp in the result there is something
 98 |         # seriously wrong. In case there was a signature error, we raise
 99 |         # that one directly, otherwise we have a weird situation in
100 |         # which we shouldn't have come except someone uses a time-based
101 |         # serializer on non-timestamp data, so catch that.
102 |         if sep not in result:
103 |             if sig_error:
104 |                 raise sig_error
105 | 
106 |             raise BadTimeSignature("timestamp missing", payload=result)
107 | 
108 |         value, ts_bytes = result.rsplit(sep, 1)
109 |         ts_int: int | None = None
110 |         ts_dt: datetime | None = None
111 | 
112 |         try:
113 |             ts_int = bytes_to_int(base64_decode(ts_bytes))
114 |         except Exception:
115 |             pass
116 | 
117 |         # Signature is *not* okay. Raise a proper error now that we have
118 |         # split the value and the timestamp.
119 |         if sig_error is not None:
120 |             if ts_int is not None:
121 |                 try:
122 |                     ts_dt = self.timestamp_to_datetime(ts_int)
123 |                 except (ValueError, OSError, OverflowError) as exc:
124 |                     # Windows raises OSError
125 |                     # 32-bit raises OverflowError
126 |                     raise BadTimeSignature(
127 |                         "Malformed timestamp", payload=value
128 |                     ) from exc
129 | 
130 |             raise BadTimeSignature(str(sig_error), payload=value, date_signed=ts_dt)
131 | 
132 |         # Signature was okay but the timestamp is actually not there or
133 |         # malformed. Should not happen, but we handle it anyway.
134 |         if ts_int is None:
135 |             raise BadTimeSignature("Malformed timestamp", payload=value)
136 | 
137 |         # Check timestamp is not older than max_age
138 |         if max_age is not None:
139 |             age = self.get_timestamp() - ts_int
140 | 
141 |             if age > max_age:
142 |                 raise SignatureExpired(
143 |                     f"Signature age {age} > {max_age} seconds",
144 |                     payload=value,
145 |                     date_signed=self.timestamp_to_datetime(ts_int),
146 |                 )
147 | 
148 |             if age < 0:
149 |                 raise SignatureExpired(
150 |                     f"Signature age {age} < 0 seconds",
151 |                     payload=value,
152 |                     date_signed=self.timestamp_to_datetime(ts_int),
153 |                 )
154 | 
155 |         if return_timestamp:
156 |             return value, self.timestamp_to_datetime(ts_int)
157 | 
158 |         return value
159 | 
160 |     def validate(self, signed_value: str | bytes, max_age: int | None = None) -> bool:
161 |         """Only validates the given signed value. Returns ``True`` if
162 |         the signature exists and is valid."""
163 |         try:
164 |             self.unsign(signed_value, max_age=max_age)
165 |             return True
166 |         except BadSignature:
167 |             return False
168 | 
169 | 
170 | class TimedSerializer(Serializer[_TSerialized]):
171 |     """Uses :class:`TimestampSigner` instead of the default
172 |     :class:`.Signer`.
173 |     """
174 | 
175 |     default_signer: type[TimestampSigner] = TimestampSigner
176 | 
177 |     def iter_unsigners(
178 |         self, salt: str | bytes | None = None
179 |     ) -> cabc.Iterator[TimestampSigner]:
180 |         return t.cast("cabc.Iterator[TimestampSigner]", super().iter_unsigners(salt))
181 | 
182 |     # TODO: Signature is incompatible because parameters were added
183 |     #  before salt.
184 | 
185 |     def loads(  # type: ignore[override]
186 |         self,
187 |         s: str | bytes,
188 |         max_age: int | None = None,
189 |         return_timestamp: bool = False,
190 |         salt: str | bytes | None = None,
191 |     ) -> t.Any:
192 |         """Reverse of :meth:`dumps`, raises :exc:`.BadSignature` if the
193 |         signature validation fails. If a ``max_age`` is provided it will
194 |         ensure the signature is not older than that time in seconds. In
195 |         case the signature is outdated, :exc:`.SignatureExpired` is
196 |         raised. All arguments are forwarded to the signer's
197 |         :meth:`~TimestampSigner.unsign` method.
198 |         """
199 |         s = want_bytes(s)
200 |         last_exception = None
201 | 
202 |         for signer in self.iter_unsigners(salt):
203 |             try:
204 |                 base64d, timestamp = signer.unsign(
205 |                     s, max_age=max_age, return_timestamp=True
206 |                 )
207 |                 payload = self.load_payload(base64d)
208 | 
209 |                 if return_timestamp:
210 |                     return payload, timestamp
211 | 
212 |                 return payload
213 |             except SignatureExpired:
214 |                 # The signature was unsigned successfully but was
215 |                 # expired. Do not try the next signer.
216 |                 raise
217 |             except BadSignature as err:
218 |                 last_exception = err
219 | 
220 |         raise t.cast(BadSignature, last_exception)
221 | 
222 |     def loads_unsafe(  # type: ignore[override]
223 |         self,
224 |         s: str | bytes,
225 |         max_age: int | None = None,
226 |         salt: str | bytes | None = None,
227 |     ) -> tuple[bool, t.Any]:
228 |         return self._loads_unsafe_impl(s, salt, load_kwargs={"max_age": max_age})
229 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/lxml/builder.py:
--------------------------------------------------------------------------------

```python
  1 | # cython: language_level=2
  2 | 
  3 | #
  4 | # Element generator factory by Fredrik Lundh.
  5 | #
  6 | # Source:
  7 | #    http://online.effbot.org/2006_11_01_archive.htm#et-builder
  8 | #    http://effbot.python-hosting.com/file/stuff/sandbox/elementlib/builder.py
  9 | #
 10 | # --------------------------------------------------------------------
 11 | # The ElementTree toolkit is
 12 | #
 13 | # Copyright (c) 1999-2004 by Fredrik Lundh
 14 | #
 15 | # By obtaining, using, and/or copying this software and/or its
 16 | # associated documentation, you agree that you have read, understood,
 17 | # and will comply with the following terms and conditions:
 18 | #
 19 | # Permission to use, copy, modify, and distribute this software and
 20 | # its associated documentation for any purpose and without fee is
 21 | # hereby granted, provided that the above copyright notice appears in
 22 | # all copies, and that both that copyright notice and this permission
 23 | # notice appear in supporting documentation, and that the name of
 24 | # Secret Labs AB or the author not be used in advertising or publicity
 25 | # pertaining to distribution of the software without specific, written
 26 | # prior permission.
 27 | #
 28 | # SECRET LABS AB AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD
 29 | # TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANT-
 30 | # ABILITY AND FITNESS.  IN NO EVENT SHALL SECRET LABS AB OR THE AUTHOR
 31 | # BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
 32 | # DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 33 | # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
 34 | # ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
 35 | # OF THIS SOFTWARE.
 36 | # --------------------------------------------------------------------
 37 | 
 38 | """
 39 | The ``E`` Element factory for generating XML documents.
 40 | """
 41 | 
 42 | 
 43 | import lxml.etree as ET
 44 | _QName = ET.QName
 45 | 
 46 | from functools import partial
 47 | 
 48 | try:
 49 |     basestring
 50 | except NameError:
 51 |     basestring = str
 52 | 
 53 | try:
 54 |     unicode
 55 | except NameError:
 56 |     unicode = str
 57 | 
 58 | 
 59 | class ElementMaker:
 60 |     """Element generator factory.
 61 | 
 62 |     Unlike the ordinary Element factory, the E factory allows you to pass in
 63 |     more than just a tag and some optional attributes; you can also pass in
 64 |     text and other elements.  The text is added as either text or tail
 65 |     attributes, and elements are inserted at the right spot.  Some small
 66 |     examples::
 67 | 
 68 |         >>> from lxml import etree as ET
 69 |         >>> from lxml.builder import E
 70 | 
 71 |         >>> ET.tostring(E("tag"))
 72 |         '<tag/>'
 73 |         >>> ET.tostring(E("tag", "text"))
 74 |         '<tag>text</tag>'
 75 |         >>> ET.tostring(E("tag", "text", key="value"))
 76 |         '<tag key="value">text</tag>'
 77 |         >>> ET.tostring(E("tag", E("subtag", "text"), "tail"))
 78 |         '<tag><subtag>text</subtag>tail</tag>'
 79 | 
 80 |     For simple tags, the factory also allows you to write ``E.tag(...)`` instead
 81 |     of ``E('tag', ...)``::
 82 | 
 83 |         >>> ET.tostring(E.tag())
 84 |         '<tag/>'
 85 |         >>> ET.tostring(E.tag("text"))
 86 |         '<tag>text</tag>'
 87 |         >>> ET.tostring(E.tag(E.subtag("text"), "tail"))
 88 |         '<tag><subtag>text</subtag>tail</tag>'
 89 | 
 90 |     Here's a somewhat larger example; this shows how to generate HTML
 91 |     documents, using a mix of prepared factory functions for inline elements,
 92 |     nested ``E.tag`` calls, and embedded XHTML fragments::
 93 | 
 94 |         # some common inline elements
 95 |         A = E.a
 96 |         I = E.i
 97 |         B = E.b
 98 | 
 99 |         def CLASS(v):
100 |             # helper function, 'class' is a reserved word
101 |             return {'class': v}
102 | 
103 |         page = (
104 |             E.html(
105 |                 E.head(
106 |                     E.title("This is a sample document")
107 |                 ),
108 |                 E.body(
109 |                     E.h1("Hello!", CLASS("title")),
110 |                     E.p("This is a paragraph with ", B("bold"), " text in it!"),
111 |                     E.p("This is another paragraph, with a ",
112 |                         A("link", href="http://www.python.org"), "."),
113 |                     E.p("Here are some reserved characters: <spam&egg>."),
114 |                     ET.XML("<p>And finally, here is an embedded XHTML fragment.</p>"),
115 |                 )
116 |             )
117 |         )
118 | 
119 |         print ET.tostring(page)
120 | 
121 |     Here's a prettyprinted version of the output from the above script::
122 | 
123 |         <html>
124 |           <head>
125 |             <title>This is a sample document</title>
126 |           </head>
127 |           <body>
128 |             <h1 class="title">Hello!</h1>
129 |             <p>This is a paragraph with <b>bold</b> text in it!</p>
130 |             <p>This is another paragraph, with <a href="http://www.python.org">link</a>.</p>
131 |             <p>Here are some reserved characters: &lt;spam&amp;egg&gt;.</p>
132 |             <p>And finally, here is an embedded XHTML fragment.</p>
133 |           </body>
134 |         </html>
135 | 
136 |     For namespace support, you can pass a namespace map (``nsmap``)
137 |     and/or a specific target ``namespace`` to the ElementMaker class::
138 | 
139 |         >>> E = ElementMaker(namespace="http://my.ns/")
140 |         >>> print(ET.tostring( E.test ))
141 |         <test xmlns="http://my.ns/"/>
142 | 
143 |         >>> E = ElementMaker(namespace="http://my.ns/", nsmap={'p':'http://my.ns/'})
144 |         >>> print(ET.tostring( E.test ))
145 |         <p:test xmlns:p="http://my.ns/"/>
146 |     """
147 | 
148 |     def __init__(self, typemap=None,
149 |                  namespace=None, nsmap=None, makeelement=None):
150 |         self._namespace = '{' + namespace + '}' if namespace is not None else None
151 |         self._nsmap = dict(nsmap) if nsmap else None
152 | 
153 |         assert makeelement is None or callable(makeelement)
154 |         self._makeelement = makeelement if makeelement is not None else ET.Element
155 | 
156 |         # initialize the default type map functions for this element factory
157 |         typemap = dict(typemap) if typemap else {}
158 | 
159 |         def add_text(elem, item):
160 |             try:
161 |                 last_child = elem[-1]
162 |             except IndexError:
163 |                 elem.text = (elem.text or "") + item
164 |             else:
165 |                 last_child.tail = (last_child.tail or "") + item
166 | 
167 |         def add_cdata(elem, cdata):
168 |             if elem.text:
169 |                 raise ValueError("Can't add a CDATA section. Element already has some text: %r" % elem.text)
170 |             elem.text = cdata
171 | 
172 |         if str not in typemap:
173 |             typemap[str] = add_text
174 |         if unicode not in typemap:
175 |             typemap[unicode] = add_text
176 |         if ET.CDATA not in typemap:
177 |             typemap[ET.CDATA] = add_cdata
178 | 
179 |         def add_dict(elem, item):
180 |             attrib = elem.attrib
181 |             for k, v in item.items():
182 |                 if isinstance(v, basestring):
183 |                     attrib[k] = v
184 |                 else:
185 |                     attrib[k] = typemap[type(v)](None, v)
186 | 
187 |         if dict not in typemap:
188 |             typemap[dict] = add_dict
189 | 
190 |         self._typemap = typemap
191 | 
192 |     def __call__(self, tag, *children, **attrib):
193 |         typemap = self._typemap
194 | 
195 |         # We'll usually get a 'str', and the compiled type check is very fast.
196 |         if not isinstance(tag, str) and isinstance(tag, _QName):
197 |             # A QName is explicitly qualified, do not look at self._namespace.
198 |             tag = tag.text
199 |         elif self._namespace is not None and tag[0] != '{':
200 |             tag = self._namespace + tag
201 |         elem = self._makeelement(tag, nsmap=self._nsmap)
202 |         if attrib:
203 |             typemap[dict](elem, attrib)
204 | 
205 |         for item in children:
206 |             if callable(item):
207 |                 item = item()
208 |             t = typemap.get(type(item))
209 |             if t is None:
210 |                 if ET.iselement(item):
211 |                     elem.append(item)
212 |                     continue
213 |                 for basetype in type(item).__mro__:
214 |                     # See if the typemap knows of any of this type's bases.
215 |                     t = typemap.get(basetype)
216 |                     if t is not None:
217 |                         break
218 |                 else:
219 |                     raise TypeError("bad argument type: %s(%r)" %
220 |                                     (type(item).__name__, item))
221 |             v = t(elem, item)
222 |             if v:
223 |                 typemap.get(type(v))(elem, v)
224 | 
225 |         return elem
226 | 
227 |     def __getattr__(self, tag):
228 |         return partial(self, tag)
229 | 
230 | 
231 | # create factory object
232 | E = ElementMaker()
233 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/lxml/includes/libxml/encoding.h:
--------------------------------------------------------------------------------

```
  1 | /*
  2 |  * Summary: interface for the encoding conversion functions
  3 |  * Description: interface for the encoding conversion functions needed for
  4 |  *              XML basic encoding and iconv() support.
  5 |  *
  6 |  * Related specs are
  7 |  * rfc2044        (UTF-8 and UTF-16) F. Yergeau Alis Technologies
  8 |  * [ISO-10646]    UTF-8 and UTF-16 in Annexes
  9 |  * [ISO-8859-1]   ISO Latin-1 characters codes.
 10 |  * [UNICODE]      The Unicode Consortium, "The Unicode Standard --
 11 |  *                Worldwide Character Encoding -- Version 1.0", Addison-
 12 |  *                Wesley, Volume 1, 1991, Volume 2, 1992.  UTF-8 is
 13 |  *                described in Unicode Technical Report #4.
 14 |  * [US-ASCII]     Coded Character Set--7-bit American Standard Code for
 15 |  *                Information Interchange, ANSI X3.4-1986.
 16 |  *
 17 |  * Copy: See Copyright for the status of this software.
 18 |  *
 19 |  * Author: Daniel Veillard
 20 |  */
 21 | 
 22 | #ifndef __XML_CHAR_ENCODING_H__
 23 | #define __XML_CHAR_ENCODING_H__
 24 | 
 25 | #include <libxml/xmlversion.h>
 26 | 
 27 | #ifdef LIBXML_ICONV_ENABLED
 28 | #include <iconv.h>
 29 | #endif
 30 | 
 31 | #ifdef __cplusplus
 32 | extern "C" {
 33 | #endif
 34 | 
 35 | typedef enum {
 36 |     XML_ENC_ERR_SUCCESS     =  0,
 37 |     XML_ENC_ERR_SPACE       = -1,
 38 |     XML_ENC_ERR_INPUT       = -2,
 39 |     XML_ENC_ERR_PARTIAL     = -3,
 40 |     XML_ENC_ERR_INTERNAL    = -4,
 41 |     XML_ENC_ERR_MEMORY      = -5
 42 | } xmlCharEncError;
 43 | 
 44 | /*
 45 |  * xmlCharEncoding:
 46 |  *
 47 |  * Predefined values for some standard encodings.
 48 |  * Libxml does not do beforehand translation on UTF8 and ISOLatinX.
 49 |  * It also supports ASCII, ISO-8859-1, and UTF16 (LE and BE) by default.
 50 |  *
 51 |  * Anything else would have to be translated to UTF8 before being
 52 |  * given to the parser itself. The BOM for UTF16 and the encoding
 53 |  * declaration are looked at and a converter is looked for at that
 54 |  * point. If not found the parser stops here as asked by the XML REC. A
 55 |  * converter can be registered by the user using xmlRegisterCharEncodingHandler
 56 |  * but the current form doesn't allow stateful transcoding (a serious
 57 |  * problem agreed !). If iconv has been found it will be used
 58 |  * automatically and allow stateful transcoding, the simplest is then
 59 |  * to be sure to enable iconv and to provide iconv libs for the encoding
 60 |  * support needed.
 61 |  *
 62 |  * Note that the generic "UTF-16" is not a predefined value.  Instead, only
 63 |  * the specific UTF-16LE and UTF-16BE are present.
 64 |  */
 65 | typedef enum {
 66 |     XML_CHAR_ENCODING_ERROR=   -1, /* No char encoding detected */
 67 |     XML_CHAR_ENCODING_NONE=	0, /* No char encoding detected */
 68 |     XML_CHAR_ENCODING_UTF8=	1, /* UTF-8 */
 69 |     XML_CHAR_ENCODING_UTF16LE=	2, /* UTF-16 little endian */
 70 |     XML_CHAR_ENCODING_UTF16BE=	3, /* UTF-16 big endian */
 71 |     XML_CHAR_ENCODING_UCS4LE=	4, /* UCS-4 little endian */
 72 |     XML_CHAR_ENCODING_UCS4BE=	5, /* UCS-4 big endian */
 73 |     XML_CHAR_ENCODING_EBCDIC=	6, /* EBCDIC uh! */
 74 |     XML_CHAR_ENCODING_UCS4_2143=7, /* UCS-4 unusual ordering */
 75 |     XML_CHAR_ENCODING_UCS4_3412=8, /* UCS-4 unusual ordering */
 76 |     XML_CHAR_ENCODING_UCS2=	9, /* UCS-2 */
 77 |     XML_CHAR_ENCODING_8859_1=	10,/* ISO-8859-1 ISO Latin 1 */
 78 |     XML_CHAR_ENCODING_8859_2=	11,/* ISO-8859-2 ISO Latin 2 */
 79 |     XML_CHAR_ENCODING_8859_3=	12,/* ISO-8859-3 */
 80 |     XML_CHAR_ENCODING_8859_4=	13,/* ISO-8859-4 */
 81 |     XML_CHAR_ENCODING_8859_5=	14,/* ISO-8859-5 */
 82 |     XML_CHAR_ENCODING_8859_6=	15,/* ISO-8859-6 */
 83 |     XML_CHAR_ENCODING_8859_7=	16,/* ISO-8859-7 */
 84 |     XML_CHAR_ENCODING_8859_8=	17,/* ISO-8859-8 */
 85 |     XML_CHAR_ENCODING_8859_9=	18,/* ISO-8859-9 */
 86 |     XML_CHAR_ENCODING_2022_JP=  19,/* ISO-2022-JP */
 87 |     XML_CHAR_ENCODING_SHIFT_JIS=20,/* Shift_JIS */
 88 |     XML_CHAR_ENCODING_EUC_JP=   21,/* EUC-JP */
 89 |     XML_CHAR_ENCODING_ASCII=    22 /* pure ASCII */
 90 | } xmlCharEncoding;
 91 | 
 92 | /**
 93 |  * xmlCharEncodingInputFunc:
 94 |  * @out:  a pointer to an array of bytes to store the UTF-8 result
 95 |  * @outlen:  the length of @out
 96 |  * @in:  a pointer to an array of chars in the original encoding
 97 |  * @inlen:  the length of @in
 98 |  *
 99 |  * Take a block of chars in the original encoding and try to convert
100 |  * it to an UTF-8 block of chars out.
101 |  *
102 |  * Returns the number of bytes written, -1 if lack of space, or -2
103 |  *     if the transcoding failed.
104 |  * The value of @inlen after return is the number of octets consumed
105 |  *     if the return value is positive, else unpredictiable.
106 |  * The value of @outlen after return is the number of octets consumed.
107 |  */
108 | typedef int (* xmlCharEncodingInputFunc)(unsigned char *out, int *outlen,
109 |                                          const unsigned char *in, int *inlen);
110 | 
111 | 
112 | /**
113 |  * xmlCharEncodingOutputFunc:
114 |  * @out:  a pointer to an array of bytes to store the result
115 |  * @outlen:  the length of @out
116 |  * @in:  a pointer to an array of UTF-8 chars
117 |  * @inlen:  the length of @in
118 |  *
119 |  * Take a block of UTF-8 chars in and try to convert it to another
120 |  * encoding.
121 |  * Note: a first call designed to produce heading info is called with
122 |  * in = NULL. If stateful this should also initialize the encoder state.
123 |  *
124 |  * Returns the number of bytes written, -1 if lack of space, or -2
125 |  *     if the transcoding failed.
126 |  * The value of @inlen after return is the number of octets consumed
127 |  *     if the return value is positive, else unpredictiable.
128 |  * The value of @outlen after return is the number of octets produced.
129 |  */
130 | typedef int (* xmlCharEncodingOutputFunc)(unsigned char *out, int *outlen,
131 |                                           const unsigned char *in, int *inlen);
132 | 
133 | 
134 | /*
135 |  * Block defining the handlers for non UTF-8 encodings.
136 |  * If iconv is supported, there are two extra fields.
137 |  */
138 | typedef struct _xmlCharEncodingHandler xmlCharEncodingHandler;
139 | typedef xmlCharEncodingHandler *xmlCharEncodingHandlerPtr;
140 | struct _xmlCharEncodingHandler {
141 |     char                       *name;
142 |     xmlCharEncodingInputFunc   input;
143 |     xmlCharEncodingOutputFunc  output;
144 | #ifdef LIBXML_ICONV_ENABLED
145 |     iconv_t                    iconv_in;
146 |     iconv_t                    iconv_out;
147 | #endif /* LIBXML_ICONV_ENABLED */
148 | #ifdef LIBXML_ICU_ENABLED
149 |     struct _uconv_t            *uconv_in;
150 |     struct _uconv_t            *uconv_out;
151 | #endif /* LIBXML_ICU_ENABLED */
152 | };
153 | 
154 | /*
155 |  * Interfaces for encoding handlers.
156 |  */
157 | XML_DEPRECATED
158 | XMLPUBFUN void
159 | 	xmlInitCharEncodingHandlers	(void);
160 | XML_DEPRECATED
161 | XMLPUBFUN void
162 | 	xmlCleanupCharEncodingHandlers	(void);
163 | XMLPUBFUN void
164 | 	xmlRegisterCharEncodingHandler	(xmlCharEncodingHandlerPtr handler);
165 | XMLPUBFUN xmlCharEncodingHandlerPtr
166 | 	xmlGetCharEncodingHandler	(xmlCharEncoding enc);
167 | XMLPUBFUN xmlCharEncodingHandlerPtr
168 | 	xmlFindCharEncodingHandler	(const char *name);
169 | XMLPUBFUN xmlCharEncodingHandlerPtr
170 | 	xmlNewCharEncodingHandler	(const char *name,
171 | 					 xmlCharEncodingInputFunc input,
172 | 					 xmlCharEncodingOutputFunc output);
173 | 
174 | /*
175 |  * Interfaces for encoding names and aliases.
176 |  */
177 | XMLPUBFUN int
178 | 	xmlAddEncodingAlias		(const char *name,
179 | 					 const char *alias);
180 | XMLPUBFUN int
181 | 	xmlDelEncodingAlias		(const char *alias);
182 | XMLPUBFUN const char *
183 | 	xmlGetEncodingAlias		(const char *alias);
184 | XMLPUBFUN void
185 | 	xmlCleanupEncodingAliases	(void);
186 | XMLPUBFUN xmlCharEncoding
187 | 	xmlParseCharEncoding		(const char *name);
188 | XMLPUBFUN const char *
189 | 	xmlGetCharEncodingName		(xmlCharEncoding enc);
190 | 
191 | /*
192 |  * Interfaces directly used by the parsers.
193 |  */
194 | XMLPUBFUN xmlCharEncoding
195 | 	xmlDetectCharEncoding		(const unsigned char *in,
196 | 					 int len);
197 | 
198 | struct _xmlBuffer;
199 | XMLPUBFUN int
200 | 	xmlCharEncOutFunc		(xmlCharEncodingHandler *handler,
201 | 					 struct _xmlBuffer *out,
202 | 					 struct _xmlBuffer *in);
203 | 
204 | XMLPUBFUN int
205 | 	xmlCharEncInFunc		(xmlCharEncodingHandler *handler,
206 | 					 struct _xmlBuffer *out,
207 | 					 struct _xmlBuffer *in);
208 | XML_DEPRECATED
209 | XMLPUBFUN int
210 | 	xmlCharEncFirstLine		(xmlCharEncodingHandler *handler,
211 | 					 struct _xmlBuffer *out,
212 | 					 struct _xmlBuffer *in);
213 | XMLPUBFUN int
214 | 	xmlCharEncCloseFunc		(xmlCharEncodingHandler *handler);
215 | 
216 | /*
217 |  * Export a few useful functions
218 |  */
219 | #ifdef LIBXML_OUTPUT_ENABLED
220 | XMLPUBFUN int
221 | 	UTF8Toisolat1			(unsigned char *out,
222 | 					 int *outlen,
223 | 					 const unsigned char *in,
224 | 					 int *inlen);
225 | #endif /* LIBXML_OUTPUT_ENABLED */
226 | XMLPUBFUN int
227 | 	isolat1ToUTF8			(unsigned char *out,
228 | 					 int *outlen,
229 | 					 const unsigned char *in,
230 | 					 int *inlen);
231 | #ifdef __cplusplus
232 | }
233 | #endif
234 | 
235 | #endif /* __XML_CHAR_ENCODING_H__ */
236 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_internal/self_outdated_check.py:
--------------------------------------------------------------------------------

```python
  1 | import datetime
  2 | import functools
  3 | import hashlib
  4 | import json
  5 | import logging
  6 | import optparse
  7 | import os.path
  8 | import sys
  9 | from dataclasses import dataclass
 10 | from typing import Any, Callable, Dict, Optional
 11 | 
 12 | from pip._vendor.packaging.version import Version
 13 | from pip._vendor.packaging.version import parse as parse_version
 14 | from pip._vendor.rich.console import Group
 15 | from pip._vendor.rich.markup import escape
 16 | from pip._vendor.rich.text import Text
 17 | 
 18 | from pip._internal.index.collector import LinkCollector
 19 | from pip._internal.index.package_finder import PackageFinder
 20 | from pip._internal.metadata import get_default_environment
 21 | from pip._internal.models.selection_prefs import SelectionPreferences
 22 | from pip._internal.network.session import PipSession
 23 | from pip._internal.utils.compat import WINDOWS
 24 | from pip._internal.utils.entrypoints import (
 25 |     get_best_invocation_for_this_pip,
 26 |     get_best_invocation_for_this_python,
 27 | )
 28 | from pip._internal.utils.filesystem import adjacent_tmp_file, check_path_owner, replace
 29 | from pip._internal.utils.misc import ensure_dir
 30 | 
 31 | _WEEK = datetime.timedelta(days=7)
 32 | 
 33 | logger = logging.getLogger(__name__)
 34 | 
 35 | 
 36 | def _get_statefile_name(key: str) -> str:
 37 |     key_bytes = key.encode()
 38 |     name = hashlib.sha224(key_bytes).hexdigest()
 39 |     return name
 40 | 
 41 | 
 42 | def _convert_date(isodate: str) -> datetime.datetime:
 43 |     """Convert an ISO format string to a date.
 44 | 
 45 |     Handles the format 2020-01-22T14:24:01Z (trailing Z)
 46 |     which is not supported by older versions of fromisoformat.
 47 |     """
 48 |     return datetime.datetime.fromisoformat(isodate.replace("Z", "+00:00"))
 49 | 
 50 | 
 51 | class SelfCheckState:
 52 |     def __init__(self, cache_dir: str) -> None:
 53 |         self._state: Dict[str, Any] = {}
 54 |         self._statefile_path = None
 55 | 
 56 |         # Try to load the existing state
 57 |         if cache_dir:
 58 |             self._statefile_path = os.path.join(
 59 |                 cache_dir, "selfcheck", _get_statefile_name(self.key)
 60 |             )
 61 |             try:
 62 |                 with open(self._statefile_path, encoding="utf-8") as statefile:
 63 |                     self._state = json.load(statefile)
 64 |             except (OSError, ValueError, KeyError):
 65 |                 # Explicitly suppressing exceptions, since we don't want to
 66 |                 # error out if the cache file is invalid.
 67 |                 pass
 68 | 
 69 |     @property
 70 |     def key(self) -> str:
 71 |         return sys.prefix
 72 | 
 73 |     def get(self, current_time: datetime.datetime) -> Optional[str]:
 74 |         """Check if we have a not-outdated version loaded already."""
 75 |         if not self._state:
 76 |             return None
 77 | 
 78 |         if "last_check" not in self._state:
 79 |             return None
 80 | 
 81 |         if "pypi_version" not in self._state:
 82 |             return None
 83 | 
 84 |         # Determine if we need to refresh the state
 85 |         last_check = _convert_date(self._state["last_check"])
 86 |         time_since_last_check = current_time - last_check
 87 |         if time_since_last_check > _WEEK:
 88 |             return None
 89 | 
 90 |         return self._state["pypi_version"]
 91 | 
 92 |     def set(self, pypi_version: str, current_time: datetime.datetime) -> None:
 93 |         # If we do not have a path to cache in, don't bother saving.
 94 |         if not self._statefile_path:
 95 |             return
 96 | 
 97 |         # Check to make sure that we own the directory
 98 |         if not check_path_owner(os.path.dirname(self._statefile_path)):
 99 |             return
100 | 
101 |         # Now that we've ensured the directory is owned by this user, we'll go
102 |         # ahead and make sure that all our directories are created.
103 |         ensure_dir(os.path.dirname(self._statefile_path))
104 | 
105 |         state = {
106 |             # Include the key so it's easy to tell which pip wrote the
107 |             # file.
108 |             "key": self.key,
109 |             "last_check": current_time.isoformat(),
110 |             "pypi_version": pypi_version,
111 |         }
112 | 
113 |         text = json.dumps(state, sort_keys=True, separators=(",", ":"))
114 | 
115 |         with adjacent_tmp_file(self._statefile_path) as f:
116 |             f.write(text.encode())
117 | 
118 |         try:
119 |             # Since we have a prefix-specific state file, we can just
120 |             # overwrite whatever is there, no need to check.
121 |             replace(f.name, self._statefile_path)
122 |         except OSError:
123 |             # Best effort.
124 |             pass
125 | 
126 | 
127 | @dataclass
128 | class UpgradePrompt:
129 |     old: str
130 |     new: str
131 | 
132 |     def __rich__(self) -> Group:
133 |         if WINDOWS:
134 |             pip_cmd = f"{get_best_invocation_for_this_python()} -m pip"
135 |         else:
136 |             pip_cmd = get_best_invocation_for_this_pip()
137 | 
138 |         notice = "[bold][[reset][blue]notice[reset][bold]][reset]"
139 |         return Group(
140 |             Text(),
141 |             Text.from_markup(
142 |                 f"{notice} A new release of pip is available: "
143 |                 f"[red]{self.old}[reset] -> [green]{self.new}[reset]"
144 |             ),
145 |             Text.from_markup(
146 |                 f"{notice} To update, run: "
147 |                 f"[green]{escape(pip_cmd)} install --upgrade pip"
148 |             ),
149 |         )
150 | 
151 | 
152 | def was_installed_by_pip(pkg: str) -> bool:
153 |     """Checks whether pkg was installed by pip
154 | 
155 |     This is used not to display the upgrade message when pip is in fact
156 |     installed by system package manager, such as dnf on Fedora.
157 |     """
158 |     dist = get_default_environment().get_distribution(pkg)
159 |     return dist is not None and "pip" == dist.installer
160 | 
161 | 
162 | def _get_current_remote_pip_version(
163 |     session: PipSession, options: optparse.Values
164 | ) -> Optional[str]:
165 |     # Lets use PackageFinder to see what the latest pip version is
166 |     link_collector = LinkCollector.create(
167 |         session,
168 |         options=options,
169 |         suppress_no_index=True,
170 |     )
171 | 
172 |     # Pass allow_yanked=False so we don't suggest upgrading to a
173 |     # yanked version.
174 |     selection_prefs = SelectionPreferences(
175 |         allow_yanked=False,
176 |         allow_all_prereleases=False,  # Explicitly set to False
177 |     )
178 | 
179 |     finder = PackageFinder.create(
180 |         link_collector=link_collector,
181 |         selection_prefs=selection_prefs,
182 |     )
183 |     best_candidate = finder.find_best_candidate("pip").best_candidate
184 |     if best_candidate is None:
185 |         return None
186 | 
187 |     return str(best_candidate.version)
188 | 
189 | 
190 | def _self_version_check_logic(
191 |     *,
192 |     state: SelfCheckState,
193 |     current_time: datetime.datetime,
194 |     local_version: Version,
195 |     get_remote_version: Callable[[], Optional[str]],
196 | ) -> Optional[UpgradePrompt]:
197 |     remote_version_str = state.get(current_time)
198 |     if remote_version_str is None:
199 |         remote_version_str = get_remote_version()
200 |         if remote_version_str is None:
201 |             logger.debug("No remote pip version found")
202 |             return None
203 |         state.set(remote_version_str, current_time)
204 | 
205 |     remote_version = parse_version(remote_version_str)
206 |     logger.debug("Remote version of pip: %s", remote_version)
207 |     logger.debug("Local version of pip:  %s", local_version)
208 | 
209 |     pip_installed_by_pip = was_installed_by_pip("pip")
210 |     logger.debug("Was pip installed by pip? %s", pip_installed_by_pip)
211 |     if not pip_installed_by_pip:
212 |         return None  # Only suggest upgrade if pip is installed by pip.
213 | 
214 |     local_version_is_older = (
215 |         local_version < remote_version
216 |         and local_version.base_version != remote_version.base_version
217 |     )
218 |     if local_version_is_older:
219 |         return UpgradePrompt(old=str(local_version), new=remote_version_str)
220 | 
221 |     return None
222 | 
223 | 
224 | def pip_self_version_check(session: PipSession, options: optparse.Values) -> None:
225 |     """Check for an update for pip.
226 | 
227 |     Limit the frequency of checks to once per week. State is stored either in
228 |     the active virtualenv or in the user's USER_CACHE_DIR keyed off the prefix
229 |     of the pip script path.
230 |     """
231 |     installed_dist = get_default_environment().get_distribution("pip")
232 |     if not installed_dist:
233 |         return
234 | 
235 |     upgrade_prompt = _self_version_check_logic(
236 |         state=SelfCheckState(cache_dir=options.cache_dir),
237 |         current_time=datetime.datetime.now(datetime.timezone.utc),
238 |         local_version=installed_dist.version,
239 |         get_remote_version=functools.partial(
240 |             _get_current_remote_pip_version, session, options
241 |         ),
242 |     )
243 |     if upgrade_prompt is not None:
244 |         logger.warning("%s", upgrade_prompt, extra={"rich": True})
245 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/rich/progress_bar.py:
--------------------------------------------------------------------------------

```python
  1 | import math
  2 | from functools import lru_cache
  3 | from time import monotonic
  4 | from typing import Iterable, List, Optional
  5 | 
  6 | from .color import Color, blend_rgb
  7 | from .color_triplet import ColorTriplet
  8 | from .console import Console, ConsoleOptions, RenderResult
  9 | from .jupyter import JupyterMixin
 10 | from .measure import Measurement
 11 | from .segment import Segment
 12 | from .style import Style, StyleType
 13 | 
 14 | # Number of characters before 'pulse' animation repeats
 15 | PULSE_SIZE = 20
 16 | 
 17 | 
 18 | class ProgressBar(JupyterMixin):
 19 |     """Renders a (progress) bar. Used by rich.progress.
 20 | 
 21 |     Args:
 22 |         total (float, optional): Number of steps in the bar. Defaults to 100. Set to None to render a pulsing animation.
 23 |         completed (float, optional): Number of steps completed. Defaults to 0.
 24 |         width (int, optional): Width of the bar, or ``None`` for maximum width. Defaults to None.
 25 |         pulse (bool, optional): Enable pulse effect. Defaults to False. Will pulse if a None total was passed.
 26 |         style (StyleType, optional): Style for the bar background. Defaults to "bar.back".
 27 |         complete_style (StyleType, optional): Style for the completed bar. Defaults to "bar.complete".
 28 |         finished_style (StyleType, optional): Style for a finished bar. Defaults to "bar.finished".
 29 |         pulse_style (StyleType, optional): Style for pulsing bars. Defaults to "bar.pulse".
 30 |         animation_time (Optional[float], optional): Time in seconds to use for animation, or None to use system time.
 31 |     """
 32 | 
 33 |     def __init__(
 34 |         self,
 35 |         total: Optional[float] = 100.0,
 36 |         completed: float = 0,
 37 |         width: Optional[int] = None,
 38 |         pulse: bool = False,
 39 |         style: StyleType = "bar.back",
 40 |         complete_style: StyleType = "bar.complete",
 41 |         finished_style: StyleType = "bar.finished",
 42 |         pulse_style: StyleType = "bar.pulse",
 43 |         animation_time: Optional[float] = None,
 44 |     ):
 45 |         self.total = total
 46 |         self.completed = completed
 47 |         self.width = width
 48 |         self.pulse = pulse
 49 |         self.style = style
 50 |         self.complete_style = complete_style
 51 |         self.finished_style = finished_style
 52 |         self.pulse_style = pulse_style
 53 |         self.animation_time = animation_time
 54 | 
 55 |         self._pulse_segments: Optional[List[Segment]] = None
 56 | 
 57 |     def __repr__(self) -> str:
 58 |         return f"<Bar {self.completed!r} of {self.total!r}>"
 59 | 
 60 |     @property
 61 |     def percentage_completed(self) -> Optional[float]:
 62 |         """Calculate percentage complete."""
 63 |         if self.total is None:
 64 |             return None
 65 |         completed = (self.completed / self.total) * 100.0
 66 |         completed = min(100, max(0.0, completed))
 67 |         return completed
 68 | 
 69 |     @lru_cache(maxsize=16)
 70 |     def _get_pulse_segments(
 71 |         self,
 72 |         fore_style: Style,
 73 |         back_style: Style,
 74 |         color_system: str,
 75 |         no_color: bool,
 76 |         ascii: bool = False,
 77 |     ) -> List[Segment]:
 78 |         """Get a list of segments to render a pulse animation.
 79 | 
 80 |         Returns:
 81 |             List[Segment]: A list of segments, one segment per character.
 82 |         """
 83 |         bar = "-" if ascii else "━"
 84 |         segments: List[Segment] = []
 85 |         if color_system not in ("standard", "eight_bit", "truecolor") or no_color:
 86 |             segments += [Segment(bar, fore_style)] * (PULSE_SIZE // 2)
 87 |             segments += [Segment(" " if no_color else bar, back_style)] * (
 88 |                 PULSE_SIZE - (PULSE_SIZE // 2)
 89 |             )
 90 |             return segments
 91 | 
 92 |         append = segments.append
 93 |         fore_color = (
 94 |             fore_style.color.get_truecolor()
 95 |             if fore_style.color
 96 |             else ColorTriplet(255, 0, 255)
 97 |         )
 98 |         back_color = (
 99 |             back_style.color.get_truecolor()
100 |             if back_style.color
101 |             else ColorTriplet(0, 0, 0)
102 |         )
103 |         cos = math.cos
104 |         pi = math.pi
105 |         _Segment = Segment
106 |         _Style = Style
107 |         from_triplet = Color.from_triplet
108 | 
109 |         for index in range(PULSE_SIZE):
110 |             position = index / PULSE_SIZE
111 |             fade = 0.5 + cos((position * pi * 2)) / 2.0
112 |             color = blend_rgb(fore_color, back_color, cross_fade=fade)
113 |             append(_Segment(bar, _Style(color=from_triplet(color))))
114 |         return segments
115 | 
116 |     def update(self, completed: float, total: Optional[float] = None) -> None:
117 |         """Update progress with new values.
118 | 
119 |         Args:
120 |             completed (float): Number of steps completed.
121 |             total (float, optional): Total number of steps, or ``None`` to not change. Defaults to None.
122 |         """
123 |         self.completed = completed
124 |         self.total = total if total is not None else self.total
125 | 
126 |     def _render_pulse(
127 |         self, console: Console, width: int, ascii: bool = False
128 |     ) -> Iterable[Segment]:
129 |         """Renders the pulse animation.
130 | 
131 |         Args:
132 |             console (Console): Console instance.
133 |             width (int): Width in characters of pulse animation.
134 | 
135 |         Returns:
136 |             RenderResult: [description]
137 | 
138 |         Yields:
139 |             Iterator[Segment]: Segments to render pulse
140 |         """
141 |         fore_style = console.get_style(self.pulse_style, default="white")
142 |         back_style = console.get_style(self.style, default="black")
143 | 
144 |         pulse_segments = self._get_pulse_segments(
145 |             fore_style, back_style, console.color_system, console.no_color, ascii=ascii
146 |         )
147 |         segment_count = len(pulse_segments)
148 |         current_time = (
149 |             monotonic() if self.animation_time is None else self.animation_time
150 |         )
151 |         segments = pulse_segments * (int(width / segment_count) + 2)
152 |         offset = int(-current_time * 15) % segment_count
153 |         segments = segments[offset : offset + width]
154 |         yield from segments
155 | 
156 |     def __rich_console__(
157 |         self, console: Console, options: ConsoleOptions
158 |     ) -> RenderResult:
159 |         width = min(self.width or options.max_width, options.max_width)
160 |         ascii = options.legacy_windows or options.ascii_only
161 |         should_pulse = self.pulse or self.total is None
162 |         if should_pulse:
163 |             yield from self._render_pulse(console, width, ascii=ascii)
164 |             return
165 | 
166 |         completed: Optional[float] = (
167 |             min(self.total, max(0, self.completed)) if self.total is not None else None
168 |         )
169 | 
170 |         bar = "-" if ascii else "━"
171 |         half_bar_right = " " if ascii else "╸"
172 |         half_bar_left = " " if ascii else "╺"
173 |         complete_halves = (
174 |             int(width * 2 * completed / self.total)
175 |             if self.total and completed is not None
176 |             else width * 2
177 |         )
178 |         bar_count = complete_halves // 2
179 |         half_bar_count = complete_halves % 2
180 |         style = console.get_style(self.style)
181 |         is_finished = self.total is None or self.completed >= self.total
182 |         complete_style = console.get_style(
183 |             self.finished_style if is_finished else self.complete_style
184 |         )
185 |         _Segment = Segment
186 |         if bar_count:
187 |             yield _Segment(bar * bar_count, complete_style)
188 |         if half_bar_count:
189 |             yield _Segment(half_bar_right * half_bar_count, complete_style)
190 | 
191 |         if not console.no_color:
192 |             remaining_bars = width - bar_count - half_bar_count
193 |             if remaining_bars and console.color_system is not None:
194 |                 if not half_bar_count and bar_count:
195 |                     yield _Segment(half_bar_left, style)
196 |                     remaining_bars -= 1
197 |                 if remaining_bars:
198 |                     yield _Segment(bar * remaining_bars, style)
199 | 
200 |     def __rich_measure__(
201 |         self, console: Console, options: ConsoleOptions
202 |     ) -> Measurement:
203 |         return (
204 |             Measurement(self.width, self.width)
205 |             if self.width is not None
206 |             else Measurement(4, options.max_width)
207 |         )
208 | 
209 | 
210 | if __name__ == "__main__":  # pragma: no cover
211 |     console = Console()
212 |     bar = ProgressBar(width=50, total=100)
213 | 
214 |     import time
215 | 
216 |     console.show_cursor(False)
217 |     for n in range(0, 101, 1):
218 |         bar.update(n)
219 |         console.print(bar)
220 |         console.file.write("\r")
221 |         time.sleep(0.05)
222 |     console.show_cursor(True)
223 |     console.print()
224 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/urllib3/exceptions.py:
--------------------------------------------------------------------------------

```python
  1 | from __future__ import absolute_import
  2 | 
  3 | from .packages.six.moves.http_client import IncompleteRead as httplib_IncompleteRead
  4 | 
  5 | # Base Exceptions
  6 | 
  7 | 
  8 | class HTTPError(Exception):
  9 |     """Base exception used by this module."""
 10 | 
 11 |     pass
 12 | 
 13 | 
 14 | class HTTPWarning(Warning):
 15 |     """Base warning used by this module."""
 16 | 
 17 |     pass
 18 | 
 19 | 
 20 | class PoolError(HTTPError):
 21 |     """Base exception for errors caused within a pool."""
 22 | 
 23 |     def __init__(self, pool, message):
 24 |         self.pool = pool
 25 |         HTTPError.__init__(self, "%s: %s" % (pool, message))
 26 | 
 27 |     def __reduce__(self):
 28 |         # For pickling purposes.
 29 |         return self.__class__, (None, None)
 30 | 
 31 | 
 32 | class RequestError(PoolError):
 33 |     """Base exception for PoolErrors that have associated URLs."""
 34 | 
 35 |     def __init__(self, pool, url, message):
 36 |         self.url = url
 37 |         PoolError.__init__(self, pool, message)
 38 | 
 39 |     def __reduce__(self):
 40 |         # For pickling purposes.
 41 |         return self.__class__, (None, self.url, None)
 42 | 
 43 | 
 44 | class SSLError(HTTPError):
 45 |     """Raised when SSL certificate fails in an HTTPS connection."""
 46 | 
 47 |     pass
 48 | 
 49 | 
 50 | class ProxyError(HTTPError):
 51 |     """Raised when the connection to a proxy fails."""
 52 | 
 53 |     def __init__(self, message, error, *args):
 54 |         super(ProxyError, self).__init__(message, error, *args)
 55 |         self.original_error = error
 56 | 
 57 | 
 58 | class DecodeError(HTTPError):
 59 |     """Raised when automatic decoding based on Content-Type fails."""
 60 | 
 61 |     pass
 62 | 
 63 | 
 64 | class ProtocolError(HTTPError):
 65 |     """Raised when something unexpected happens mid-request/response."""
 66 | 
 67 |     pass
 68 | 
 69 | 
 70 | #: Renamed to ProtocolError but aliased for backwards compatibility.
 71 | ConnectionError = ProtocolError
 72 | 
 73 | 
 74 | # Leaf Exceptions
 75 | 
 76 | 
 77 | class MaxRetryError(RequestError):
 78 |     """Raised when the maximum number of retries is exceeded.
 79 | 
 80 |     :param pool: The connection pool
 81 |     :type pool: :class:`~urllib3.connectionpool.HTTPConnectionPool`
 82 |     :param string url: The requested Url
 83 |     :param exceptions.Exception reason: The underlying error
 84 | 
 85 |     """
 86 | 
 87 |     def __init__(self, pool, url, reason=None):
 88 |         self.reason = reason
 89 | 
 90 |         message = "Max retries exceeded with url: %s (Caused by %r)" % (url, reason)
 91 | 
 92 |         RequestError.__init__(self, pool, url, message)
 93 | 
 94 | 
 95 | class HostChangedError(RequestError):
 96 |     """Raised when an existing pool gets a request for a foreign host."""
 97 | 
 98 |     def __init__(self, pool, url, retries=3):
 99 |         message = "Tried to open a foreign host with url: %s" % url
100 |         RequestError.__init__(self, pool, url, message)
101 |         self.retries = retries
102 | 
103 | 
104 | class TimeoutStateError(HTTPError):
105 |     """Raised when passing an invalid state to a timeout"""
106 | 
107 |     pass
108 | 
109 | 
110 | class TimeoutError(HTTPError):
111 |     """Raised when a socket timeout error occurs.
112 | 
113 |     Catching this error will catch both :exc:`ReadTimeoutErrors
114 |     <ReadTimeoutError>` and :exc:`ConnectTimeoutErrors <ConnectTimeoutError>`.
115 |     """
116 | 
117 |     pass
118 | 
119 | 
120 | class ReadTimeoutError(TimeoutError, RequestError):
121 |     """Raised when a socket timeout occurs while receiving data from a server"""
122 | 
123 |     pass
124 | 
125 | 
126 | # This timeout error does not have a URL attached and needs to inherit from the
127 | # base HTTPError
128 | class ConnectTimeoutError(TimeoutError):
129 |     """Raised when a socket timeout occurs while connecting to a server"""
130 | 
131 |     pass
132 | 
133 | 
134 | class NewConnectionError(ConnectTimeoutError, PoolError):
135 |     """Raised when we fail to establish a new connection. Usually ECONNREFUSED."""
136 | 
137 |     pass
138 | 
139 | 
140 | class EmptyPoolError(PoolError):
141 |     """Raised when a pool runs out of connections and no more are allowed."""
142 | 
143 |     pass
144 | 
145 | 
146 | class ClosedPoolError(PoolError):
147 |     """Raised when a request enters a pool after the pool has been closed."""
148 | 
149 |     pass
150 | 
151 | 
152 | class LocationValueError(ValueError, HTTPError):
153 |     """Raised when there is something wrong with a given URL input."""
154 | 
155 |     pass
156 | 
157 | 
158 | class LocationParseError(LocationValueError):
159 |     """Raised when get_host or similar fails to parse the URL input."""
160 | 
161 |     def __init__(self, location):
162 |         message = "Failed to parse: %s" % location
163 |         HTTPError.__init__(self, message)
164 | 
165 |         self.location = location
166 | 
167 | 
168 | class URLSchemeUnknown(LocationValueError):
169 |     """Raised when a URL input has an unsupported scheme."""
170 | 
171 |     def __init__(self, scheme):
172 |         message = "Not supported URL scheme %s" % scheme
173 |         super(URLSchemeUnknown, self).__init__(message)
174 | 
175 |         self.scheme = scheme
176 | 
177 | 
178 | class ResponseError(HTTPError):
179 |     """Used as a container for an error reason supplied in a MaxRetryError."""
180 | 
181 |     GENERIC_ERROR = "too many error responses"
182 |     SPECIFIC_ERROR = "too many {status_code} error responses"
183 | 
184 | 
185 | class SecurityWarning(HTTPWarning):
186 |     """Warned when performing security reducing actions"""
187 | 
188 |     pass
189 | 
190 | 
191 | class SubjectAltNameWarning(SecurityWarning):
192 |     """Warned when connecting to a host with a certificate missing a SAN."""
193 | 
194 |     pass
195 | 
196 | 
197 | class InsecureRequestWarning(SecurityWarning):
198 |     """Warned when making an unverified HTTPS request."""
199 | 
200 |     pass
201 | 
202 | 
203 | class SystemTimeWarning(SecurityWarning):
204 |     """Warned when system time is suspected to be wrong"""
205 | 
206 |     pass
207 | 
208 | 
209 | class InsecurePlatformWarning(SecurityWarning):
210 |     """Warned when certain TLS/SSL configuration is not available on a platform."""
211 | 
212 |     pass
213 | 
214 | 
215 | class SNIMissingWarning(HTTPWarning):
216 |     """Warned when making a HTTPS request without SNI available."""
217 | 
218 |     pass
219 | 
220 | 
221 | class DependencyWarning(HTTPWarning):
222 |     """
223 |     Warned when an attempt is made to import a module with missing optional
224 |     dependencies.
225 |     """
226 | 
227 |     pass
228 | 
229 | 
230 | class ResponseNotChunked(ProtocolError, ValueError):
231 |     """Response needs to be chunked in order to read it as chunks."""
232 | 
233 |     pass
234 | 
235 | 
236 | class BodyNotHttplibCompatible(HTTPError):
237 |     """
238 |     Body should be :class:`http.client.HTTPResponse` like
239 |     (have an fp attribute which returns raw chunks) for read_chunked().
240 |     """
241 | 
242 |     pass
243 | 
244 | 
245 | class IncompleteRead(HTTPError, httplib_IncompleteRead):
246 |     """
247 |     Response length doesn't match expected Content-Length
248 | 
249 |     Subclass of :class:`http.client.IncompleteRead` to allow int value
250 |     for ``partial`` to avoid creating large objects on streamed reads.
251 |     """
252 | 
253 |     def __init__(self, partial, expected):
254 |         super(IncompleteRead, self).__init__(partial, expected)
255 | 
256 |     def __repr__(self):
257 |         return "IncompleteRead(%i bytes read, %i more expected)" % (
258 |             self.partial,
259 |             self.expected,
260 |         )
261 | 
262 | 
263 | class InvalidChunkLength(HTTPError, httplib_IncompleteRead):
264 |     """Invalid chunk length in a chunked response."""
265 | 
266 |     def __init__(self, response, length):
267 |         super(InvalidChunkLength, self).__init__(
268 |             response.tell(), response.length_remaining
269 |         )
270 |         self.response = response
271 |         self.length = length
272 | 
273 |     def __repr__(self):
274 |         return "InvalidChunkLength(got length %r, %i bytes read)" % (
275 |             self.length,
276 |             self.partial,
277 |         )
278 | 
279 | 
280 | class InvalidHeader(HTTPError):
281 |     """The header provided was somehow invalid."""
282 | 
283 |     pass
284 | 
285 | 
286 | class ProxySchemeUnknown(AssertionError, URLSchemeUnknown):
287 |     """ProxyManager does not support the supplied scheme"""
288 | 
289 |     # TODO(t-8ch): Stop inheriting from AssertionError in v2.0.
290 | 
291 |     def __init__(self, scheme):
292 |         # 'localhost' is here because our URL parser parses
293 |         # localhost:8080 -> scheme=localhost, remove if we fix this.
294 |         if scheme == "localhost":
295 |             scheme = None
296 |         if scheme is None:
297 |             message = "Proxy URL had no scheme, should start with http:// or https://"
298 |         else:
299 |             message = (
300 |                 "Proxy URL had unsupported scheme %s, should use http:// or https://"
301 |                 % scheme
302 |             )
303 |         super(ProxySchemeUnknown, self).__init__(message)
304 | 
305 | 
306 | class ProxySchemeUnsupported(ValueError):
307 |     """Fetching HTTPS resources through HTTPS proxies is unsupported"""
308 | 
309 |     pass
310 | 
311 | 
312 | class HeaderParsingError(HTTPError):
313 |     """Raised by assert_header_parsing, but we convert it to a log.warning statement."""
314 | 
315 |     def __init__(self, defects, unparsed_data):
316 |         message = "%s, unparsed data: %r" % (defects or "Unknown", unparsed_data)
317 |         super(HeaderParsingError, self).__init__(message)
318 | 
319 | 
320 | class UnrewindableBodyError(HTTPError):
321 |     """urllib3 encountered an error when trying to rewind a body"""
322 | 
323 |     pass
324 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_internal/cli/base_command.py:
--------------------------------------------------------------------------------

```python
  1 | """Base Command class, and related routines"""
  2 | 
  3 | import logging
  4 | import logging.config
  5 | import optparse
  6 | import os
  7 | import sys
  8 | import traceback
  9 | from optparse import Values
 10 | from typing import List, Optional, Tuple
 11 | 
 12 | from pip._vendor.rich import reconfigure
 13 | from pip._vendor.rich import traceback as rich_traceback
 14 | 
 15 | from pip._internal.cli import cmdoptions
 16 | from pip._internal.cli.command_context import CommandContextMixIn
 17 | from pip._internal.cli.parser import ConfigOptionParser, UpdatingDefaultsHelpFormatter
 18 | from pip._internal.cli.status_codes import (
 19 |     ERROR,
 20 |     PREVIOUS_BUILD_DIR_ERROR,
 21 |     UNKNOWN_ERROR,
 22 |     VIRTUALENV_NOT_FOUND,
 23 | )
 24 | from pip._internal.exceptions import (
 25 |     BadCommand,
 26 |     CommandError,
 27 |     DiagnosticPipError,
 28 |     InstallationError,
 29 |     NetworkConnectionError,
 30 |     PreviousBuildDirError,
 31 | )
 32 | from pip._internal.utils.filesystem import check_path_owner
 33 | from pip._internal.utils.logging import BrokenStdoutLoggingError, setup_logging
 34 | from pip._internal.utils.misc import get_prog, normalize_path
 35 | from pip._internal.utils.temp_dir import TempDirectoryTypeRegistry as TempDirRegistry
 36 | from pip._internal.utils.temp_dir import global_tempdir_manager, tempdir_registry
 37 | from pip._internal.utils.virtualenv import running_under_virtualenv
 38 | 
 39 | __all__ = ["Command"]
 40 | 
 41 | logger = logging.getLogger(__name__)
 42 | 
 43 | 
 44 | class Command(CommandContextMixIn):
 45 |     usage: str = ""
 46 |     ignore_require_venv: bool = False
 47 | 
 48 |     def __init__(self, name: str, summary: str, isolated: bool = False) -> None:
 49 |         super().__init__()
 50 | 
 51 |         self.name = name
 52 |         self.summary = summary
 53 |         self.parser = ConfigOptionParser(
 54 |             usage=self.usage,
 55 |             prog=f"{get_prog()} {name}",
 56 |             formatter=UpdatingDefaultsHelpFormatter(),
 57 |             add_help_option=False,
 58 |             name=name,
 59 |             description=self.__doc__,
 60 |             isolated=isolated,
 61 |         )
 62 | 
 63 |         self.tempdir_registry: Optional[TempDirRegistry] = None
 64 | 
 65 |         # Commands should add options to this option group
 66 |         optgroup_name = f"{self.name.capitalize()} Options"
 67 |         self.cmd_opts = optparse.OptionGroup(self.parser, optgroup_name)
 68 | 
 69 |         # Add the general options
 70 |         gen_opts = cmdoptions.make_option_group(
 71 |             cmdoptions.general_group,
 72 |             self.parser,
 73 |         )
 74 |         self.parser.add_option_group(gen_opts)
 75 | 
 76 |         self.add_options()
 77 | 
 78 |     def add_options(self) -> None:
 79 |         pass
 80 | 
 81 |     def handle_pip_version_check(self, options: Values) -> None:
 82 |         """
 83 |         This is a no-op so that commands by default do not do the pip version
 84 |         check.
 85 |         """
 86 |         # Make sure we do the pip version check if the index_group options
 87 |         # are present.
 88 |         assert not hasattr(options, "no_index")
 89 | 
 90 |     def run(self, options: Values, args: List[str]) -> int:
 91 |         raise NotImplementedError
 92 | 
 93 |     def _run_wrapper(self, level_number: int, options: Values, args: List[str]) -> int:
 94 |         def _inner_run() -> int:
 95 |             try:
 96 |                 return self.run(options, args)
 97 |             finally:
 98 |                 self.handle_pip_version_check(options)
 99 | 
100 |         if options.debug_mode:
101 |             rich_traceback.install(show_locals=True)
102 |             return _inner_run()
103 | 
104 |         try:
105 |             status = _inner_run()
106 |             assert isinstance(status, int)
107 |             return status
108 |         except DiagnosticPipError as exc:
109 |             logger.error("%s", exc, extra={"rich": True})
110 |             logger.debug("Exception information:", exc_info=True)
111 | 
112 |             return ERROR
113 |         except PreviousBuildDirError as exc:
114 |             logger.critical(str(exc))
115 |             logger.debug("Exception information:", exc_info=True)
116 | 
117 |             return PREVIOUS_BUILD_DIR_ERROR
118 |         except (
119 |             InstallationError,
120 |             BadCommand,
121 |             NetworkConnectionError,
122 |         ) as exc:
123 |             logger.critical(str(exc))
124 |             logger.debug("Exception information:", exc_info=True)
125 | 
126 |             return ERROR
127 |         except CommandError as exc:
128 |             logger.critical("%s", exc)
129 |             logger.debug("Exception information:", exc_info=True)
130 | 
131 |             return ERROR
132 |         except BrokenStdoutLoggingError:
133 |             # Bypass our logger and write any remaining messages to
134 |             # stderr because stdout no longer works.
135 |             print("ERROR: Pipe to stdout was broken", file=sys.stderr)
136 |             if level_number <= logging.DEBUG:
137 |                 traceback.print_exc(file=sys.stderr)
138 | 
139 |             return ERROR
140 |         except KeyboardInterrupt:
141 |             logger.critical("Operation cancelled by user")
142 |             logger.debug("Exception information:", exc_info=True)
143 | 
144 |             return ERROR
145 |         except BaseException:
146 |             logger.critical("Exception:", exc_info=True)
147 | 
148 |             return UNKNOWN_ERROR
149 | 
150 |     def parse_args(self, args: List[str]) -> Tuple[Values, List[str]]:
151 |         # factored out for testability
152 |         return self.parser.parse_args(args)
153 | 
154 |     def main(self, args: List[str]) -> int:
155 |         try:
156 |             with self.main_context():
157 |                 return self._main(args)
158 |         finally:
159 |             logging.shutdown()
160 | 
161 |     def _main(self, args: List[str]) -> int:
162 |         # We must initialize this before the tempdir manager, otherwise the
163 |         # configuration would not be accessible by the time we clean up the
164 |         # tempdir manager.
165 |         self.tempdir_registry = self.enter_context(tempdir_registry())
166 |         # Intentionally set as early as possible so globally-managed temporary
167 |         # directories are available to the rest of the code.
168 |         self.enter_context(global_tempdir_manager())
169 | 
170 |         options, args = self.parse_args(args)
171 | 
172 |         # Set verbosity so that it can be used elsewhere.
173 |         self.verbosity = options.verbose - options.quiet
174 | 
175 |         reconfigure(no_color=options.no_color)
176 |         level_number = setup_logging(
177 |             verbosity=self.verbosity,
178 |             no_color=options.no_color,
179 |             user_log_file=options.log,
180 |         )
181 | 
182 |         always_enabled_features = set(options.features_enabled) & set(
183 |             cmdoptions.ALWAYS_ENABLED_FEATURES
184 |         )
185 |         if always_enabled_features:
186 |             logger.warning(
187 |                 "The following features are always enabled: %s. ",
188 |                 ", ".join(sorted(always_enabled_features)),
189 |             )
190 | 
191 |         # Make sure that the --python argument isn't specified after the
192 |         # subcommand. We can tell, because if --python was specified,
193 |         # we should only reach this point if we're running in the created
194 |         # subprocess, which has the _PIP_RUNNING_IN_SUBPROCESS environment
195 |         # variable set.
196 |         if options.python and "_PIP_RUNNING_IN_SUBPROCESS" not in os.environ:
197 |             logger.critical(
198 |                 "The --python option must be placed before the pip subcommand name"
199 |             )
200 |             sys.exit(ERROR)
201 | 
202 |         # TODO: Try to get these passing down from the command?
203 |         #       without resorting to os.environ to hold these.
204 |         #       This also affects isolated builds and it should.
205 | 
206 |         if options.no_input:
207 |             os.environ["PIP_NO_INPUT"] = "1"
208 | 
209 |         if options.exists_action:
210 |             os.environ["PIP_EXISTS_ACTION"] = " ".join(options.exists_action)
211 | 
212 |         if options.require_venv and not self.ignore_require_venv:
213 |             # If a venv is required check if it can really be found
214 |             if not running_under_virtualenv():
215 |                 logger.critical("Could not find an activated virtualenv (required).")
216 |                 sys.exit(VIRTUALENV_NOT_FOUND)
217 | 
218 |         if options.cache_dir:
219 |             options.cache_dir = normalize_path(options.cache_dir)
220 |             if not check_path_owner(options.cache_dir):
221 |                 logger.warning(
222 |                     "The directory '%s' or its parent directory is not owned "
223 |                     "or is not writable by the current user. The cache "
224 |                     "has been disabled. Check the permissions and owner of "
225 |                     "that directory. If executing pip with sudo, you should "
226 |                     "use sudo's -H flag.",
227 |                     options.cache_dir,
228 |                 )
229 |                 options.cache_dir = None
230 | 
231 |         return self._run_wrapper(level_number, options, args)
232 | 
```
Page 28/168FirstPrevNextLast