#
tokens: 49854/50000 5/808 files (page 41/168)
lines: on (toggle) GitHub
raw markdown copy reset
This is page 41 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/pip-24.2.dist-info/AUTHORS.txt:
--------------------------------------------------------------------------------

```
  1 | @Switch01
  2 | A_Rog
  3 | Aakanksha Agrawal
  4 | Abhinav Sagar
  5 | ABHYUDAY PRATAP SINGH
  6 | abs51295
  7 | AceGentile
  8 | Adam Chainz
  9 | Adam Tse
 10 | Adam Wentz
 11 | admin
 12 | Adolfo Ochagavía
 13 | Adrien Morison
 14 | Agus
 15 | ahayrapetyan
 16 | Ahilya
 17 | AinsworthK
 18 | Akash Srivastava
 19 | Alan Yee
 20 | Albert Tugushev
 21 | Albert-Guan
 22 | albertg
 23 | Alberto Sottile
 24 | Aleks Bunin
 25 | Ales Erjavec
 26 | Alethea Flowers
 27 | Alex Gaynor
 28 | Alex Grönholm
 29 | Alex Hedges
 30 | Alex Loosley
 31 | Alex Morega
 32 | Alex Stachowiak
 33 | Alexander Shtyrov
 34 | Alexandre Conrad
 35 | Alexey Popravka
 36 | Aleš Erjavec
 37 | Alli
 38 | Ami Fischman
 39 | Ananya Maiti
 40 | Anatoly Techtonik
 41 | Anders Kaseorg
 42 | Andre Aguiar
 43 | Andreas Lutro
 44 | Andrei Geacar
 45 | Andrew Gaul
 46 | Andrew Shymanel
 47 | Andrey Bienkowski
 48 | Andrey Bulgakov
 49 | Andrés Delfino
 50 | Andy Freeland
 51 | Andy Kluger
 52 | Ani Hayrapetyan
 53 | Aniruddha Basak
 54 | Anish Tambe
 55 | Anrs Hu
 56 | Anthony Sottile
 57 | Antoine Musso
 58 | Anton Ovchinnikov
 59 | Anton Patrushev
 60 | Antonio Alvarado Hernandez
 61 | Antony Lee
 62 | Antti Kaihola
 63 | Anubhav Patel
 64 | Anudit Nagar
 65 | Anuj Godase
 66 | AQNOUCH Mohammed
 67 | AraHaan
 68 | arena
 69 | arenasys
 70 | Arindam Choudhury
 71 | Armin Ronacher
 72 | Arnon Yaari
 73 | Artem
 74 | Arun Babu Neelicattu
 75 | Ashley Manton
 76 | Ashwin Ramaswami
 77 | atse
 78 | Atsushi Odagiri
 79 | Avinash Karhana
 80 | Avner Cohen
 81 | Awit (Ah-Wit) Ghirmai
 82 | Baptiste Mispelon
 83 | Barney Gale
 84 | barneygale
 85 | Bartek Ogryczak
 86 | Bastian Venthur
 87 | Ben Bodenmiller
 88 | Ben Darnell
 89 | Ben Hoyt
 90 | Ben Mares
 91 | Ben Rosser
 92 | Bence Nagy
 93 | Benjamin Peterson
 94 | Benjamin VanEvery
 95 | Benoit Pierre
 96 | Berker Peksag
 97 | Bernard
 98 | Bernard Tyers
 99 | Bernardo B. Marques
100 | Bernhard M. Wiedemann
101 | Bertil Hatt
102 | Bhavam Vidyarthi
103 | Blazej Michalik
104 | Bogdan Opanchuk
105 | BorisZZZ
106 | Brad Erickson
107 | Bradley Ayers
108 | Branch Vincent
109 | Brandon L. Reiss
110 | Brandt Bucher
111 | Brannon Dorsey
112 | Brett Randall
113 | Brett Rosen
114 | Brian Cristante
115 | Brian Rosner
116 | briantracy
117 | BrownTruck
118 | Bruno Oliveira
119 | Bruno Renié
120 | Bruno S
121 | Bstrdsmkr
122 | Buck Golemon
123 | burrows
124 | Bussonnier Matthias
125 | bwoodsend
126 | c22
127 | Caleb Martinez
128 | Calvin Smith
129 | Carl Meyer
130 | Carlos Liam
131 | Carol Willing
132 | Carter Thayer
133 | Cass
134 | Chandrasekhar Atina
135 | Charlie Marsh
136 | Chih-Hsuan Yen
137 | Chris Brinker
138 | Chris Hunt
139 | Chris Jerdonek
140 | Chris Kuehl
141 | Chris Markiewicz
142 | Chris McDonough
143 | Chris Pawley
144 | Chris Pryer
145 | Chris Wolfe
146 | Christian Clauss
147 | Christian Heimes
148 | Christian Oudard
149 | Christoph Reiter
150 | Christopher Hunt
151 | Christopher Snyder
152 | chrysle
153 | cjc7373
154 | Clark Boylan
155 | Claudio Jolowicz
156 | Clay McClure
157 | Cody
158 | Cody Soyland
159 | Colin Watson
160 | Collin Anderson
161 | Connor Osborn
162 | Cooper Lees
163 | Cooper Ry Lees
164 | Cory Benfield
165 | Cory Wright
166 | Craig Kerstiens
167 | Cristian Sorinel
168 | Cristina
169 | Cristina Muñoz
170 | ctg123
171 | Curtis Doty
172 | cytolentino
173 | Daan De Meyer
174 | Dale
175 | Damian
176 | Damian Quiroga
177 | Damian Shaw
178 | Dan Black
179 | Dan Savilonis
180 | Dan Sully
181 | Dane Hillard
182 | daniel
183 | Daniel Collins
184 | Daniel Hahler
185 | Daniel Holth
186 | Daniel Jost
187 | Daniel Katz
188 | Daniel Shaulov
189 | Daniele Esposti
190 | Daniele Nicolodi
191 | Daniele Procida
192 | Daniil Konovalenko
193 | Danny Hermes
194 | Danny McClanahan
195 | Darren Kavanagh
196 | Dav Clark
197 | Dave Abrahams
198 | Dave Jones
199 | David Aguilar
200 | David Black
201 | David Bordeynik
202 | David Caro
203 | David D Lowe
204 | David Evans
205 | David Hewitt
206 | David Linke
207 | David Poggi
208 | David Poznik
209 | David Pursehouse
210 | David Runge
211 | David Tucker
212 | David Wales
213 | Davidovich
214 | ddelange
215 | Deepak Sharma
216 | Deepyaman Datta
217 | Denise Yu
218 | dependabot[bot]
219 | derwolfe
220 | Desetude
221 | Devesh Kumar Singh
222 | devsagul
223 | Diego Caraballo
224 | Diego Ramirez
225 | DiegoCaraballo
226 | Dimitri Merejkowsky
227 | Dimitri Papadopoulos
228 | Dirk Stolle
229 | Dmitry Gladkov
230 | Dmitry Volodin
231 | Domen Kožar
232 | Dominic Davis-Foster
233 | Donald Stufft
234 | Dongweiming
235 | doron zarhi
236 | Dos Moonen
237 | Douglas Thor
238 | DrFeathers
239 | Dustin Ingram
240 | Dustin Rodrigues
241 | Dwayne Bailey
242 | Ed Morley
243 | Edgar Ramírez
244 | Edgar Ramírez Mondragón
245 | Ee Durbin
246 | Efflam Lemaillet
247 | efflamlemaillet
248 | Eitan Adler
249 | ekristina
250 | elainechan
251 | Eli Schwartz
252 | Elisha Hollander
253 | Ellen Marie Dash
254 | Emil Burzo
255 | Emil Styrke
256 | Emmanuel Arias
257 | Endoh Takanao
258 | enoch
259 | Erdinc Mutlu
260 | Eric Cousineau
261 | Eric Gillingham
262 | Eric Hanchrow
263 | Eric Hopper
264 | Erik M. Bray
265 | Erik Rose
266 | Erwin Janssen
267 | Eugene Vereshchagin
268 | everdimension
269 | Federico
270 | Felipe Peter
271 | Felix Yan
272 | fiber-space
273 | Filip Kokosiński
274 | Filipe Laíns
275 | Finn Womack
276 | finnagin
277 | Flavio Amurrio
278 | Florian Briand
279 | Florian Rathgeber
280 | Francesco
281 | Francesco Montesano
282 | Fredrik Orderud
283 | Frost Ming
284 | Gabriel Curio
285 | Gabriel de Perthuis
286 | Garry Polley
287 | gavin
288 | gdanielson
289 | Geoffrey Sneddon
290 | George Song
291 | Georgi Valkov
292 | Georgy Pchelkin
293 | ghost
294 | Giftlin Rajaiah
295 | gizmoguy1
296 | gkdoc
297 | Godefroid Chapelle
298 | Gopinath M
299 | GOTO Hayato
300 | gousaiyang
301 | gpiks
302 | Greg Roodt
303 | Greg Ward
304 | Guilherme Espada
305 | Guillaume Seguin
306 | gutsytechster
307 | Guy Rozendorn
308 | Guy Tuval
309 | gzpan123
310 | Hanjun Kim
311 | Hari Charan
312 | Harsh Vardhan
313 | harupy
314 | Harutaka Kawamura
315 | hauntsaninja
316 | Henrich Hartzer
317 | Henry Schreiner
318 | Herbert Pfennig
319 | Holly Stotelmyer
320 | Honnix
321 | Hsiaoming Yang
322 | Hugo Lopes Tavares
323 | Hugo van Kemenade
324 | Hugues Bruant
325 | Hynek Schlawack
326 | Ian Bicking
327 | Ian Cordasco
328 | Ian Lee
329 | Ian Stapleton Cordasco
330 | Ian Wienand
331 | Igor Kuzmitshov
332 | Igor Sobreira
333 | Ikko Ashimine
334 | Ilan Schnell
335 | Illia Volochii
336 | Ilya Baryshev
337 | Inada Naoki
338 | Ionel Cristian Mărieș
339 | Ionel Maries Cristian
340 | Itamar Turner-Trauring
341 | Ivan Pozdeev
342 | J. Nick Koston
343 | Jacob Kim
344 | Jacob Walls
345 | Jaime Sanz
346 | jakirkham
347 | Jakub Kuczys
348 | Jakub Stasiak
349 | Jakub Vysoky
350 | Jakub Wilk
351 | James Cleveland
352 | James Curtin
353 | James Firth
354 | James Gerity
355 | James Polley
356 | Jan Pokorný
357 | Jannis Leidel
358 | Jarek Potiuk
359 | jarondl
360 | Jason Curtis
361 | Jason R. Coombs
362 | JasonMo
363 | JasonMo1
364 | Jay Graves
365 | Jean Abou Samra
366 | Jean-Christophe Fillion-Robin
367 | Jeff Barber
368 | Jeff Dairiki
369 | Jeff Widman
370 | Jelmer Vernooij
371 | jenix21
372 | Jeremy Fleischman
373 | Jeremy Stanley
374 | Jeremy Zafran
375 | Jesse Rittner
376 | Jiashuo Li
377 | Jim Fisher
378 | Jim Garrison
379 | Jinzhe Zeng
380 | Jiun Bae
381 | Jivan Amara
382 | Joe Bylund
383 | Joe Michelini
384 | John Paton
385 | John Sirois
386 | John T. Wodder II
387 | John-Scott Atlakson
388 | johnthagen
389 | Jon Banafato
390 | Jon Dufresne
391 | Jon Parise
392 | Jonas Nockert
393 | Jonathan Herbert
394 | Joonatan Partanen
395 | Joost Molenaar
396 | Jorge Niedbalski
397 | Joseph Bylund
398 | Joseph Long
399 | Josh Bronson
400 | Josh Cannon
401 | Josh Hansen
402 | Josh Schneier
403 | Joshua
404 | Juan Luis Cano Rodríguez
405 | Juanjo Bazán
406 | Judah Rand
407 | Julian Berman
408 | Julian Gethmann
409 | Julien Demoor
410 | Jussi Kukkonen
411 | jwg4
412 | Jyrki Pulliainen
413 | Kai Chen
414 | Kai Mueller
415 | Kamal Bin Mustafa
416 | kasium
417 | kaustav haldar
418 | keanemind
419 | Keith Maxwell
420 | Kelsey Hightower
421 | Kenneth Belitzky
422 | Kenneth Reitz
423 | Kevin Burke
424 | Kevin Carter
425 | Kevin Frommelt
426 | Kevin R Patterson
427 | Kexuan Sun
428 | Kit Randel
429 | Klaas van Schelven
430 | KOLANICH
431 | konstin
432 | kpinc
433 | Krishna Oza
434 | Kumar McMillan
435 | Kuntal Majumder
436 | Kurt McKee
437 | Kyle Persohn
438 | lakshmanaram
439 | Laszlo Kiss-Kollar
440 | Laurent Bristiel
441 | Laurent LAPORTE
442 | Laurie O
443 | Laurie Opperman
444 | layday
445 | Leon Sasson
446 | Lev Givon
447 | Lincoln de Sousa
448 | Lipis
449 | lorddavidiii
450 | Loren Carvalho
451 | Lucas Cimon
452 | Ludovic Gasc
453 | Luis Medel
454 | Lukas Geiger
455 | Lukas Juhrich
456 | Luke Macken
457 | Luo Jiebin
458 | luojiebin
459 | luz.paz
460 | László Kiss Kollár
461 | M00nL1ght
462 | Marc Abramowitz
463 | Marc Tamlyn
464 | Marcus Smith
465 | Mariatta
466 | Mark Kohler
467 | Mark McLoughlin
468 | Mark Williams
469 | Markus Hametner
470 | Martey Dodoo
471 | Martin Fischer
472 | Martin Häcker
473 | Martin Pavlasek
474 | Masaki
475 | Masklinn
476 | Matej Stuchlik
477 | Mathew Jennings
478 | Mathieu Bridon
479 | Mathieu Kniewallner
480 | Matt Bacchi
481 | Matt Good
482 | Matt Maker
483 | Matt Robenolt
484 | Matt Wozniski
485 | matthew
486 | Matthew Einhorn
487 | Matthew Feickert
488 | Matthew Gilliard
489 | Matthew Hughes
490 | Matthew Iversen
491 | Matthew Treinish
492 | Matthew Trumbell
493 | Matthew Willson
494 | Matthias Bussonnier
495 | mattip
496 | Maurits van Rees
497 | Max W Chase
498 | Maxim Kurnikov
499 | Maxime Rouyrre
500 | mayeut
501 | mbaluna
502 | mdebi
503 | memoselyk
504 | meowmeowcat
505 | Michael
506 | Michael Aquilina
507 | Michael E. Karpeles
508 | Michael Klich
509 | Michael Mintz
510 | Michael Williamson
511 | michaelpacer
512 | Michał Górny
513 | Mickaël Schoentgen
514 | Miguel Araujo Perez
515 | Mihir Singh
516 | Mike
517 | Mike Hendricks
518 | Min RK
519 | MinRK
520 | Miro Hrončok
521 | Monica Baluna
522 | montefra
523 | Monty Taylor
524 | morotti
525 | mrKazzila
526 | Muha Ajjan
527 | Nadav Wexler
528 | Nahuel Ambrosini
529 | Nate Coraor
530 | Nate Prewitt
531 | Nathan Houghton
532 | Nathaniel J. Smith
533 | Nehal J Wani
534 | Neil Botelho
535 | Nguyễn Gia Phong
536 | Nicholas Serra
537 | Nick Coghlan
538 | Nick Stenning
539 | Nick Timkovich
540 | Nicolas Bock
541 | Nicole Harris
542 | Nikhil Benesch
543 | Nikhil Ladha
544 | Nikita Chepanov
545 | Nikolay Korolev
546 | Nipunn Koorapati
547 | Nitesh Sharma
548 | Niyas Sait
549 | Noah
550 | Noah Gorny
551 | Nowell Strite
552 | NtaleGrey
553 | nvdv
554 | OBITORASU
555 | Ofek Lev
556 | ofrinevo
557 | Oliver Freund
558 | Oliver Jeeves
559 | Oliver Mannion
560 | Oliver Tonnhofer
561 | Olivier Girardot
562 | Olivier Grisel
563 | Ollie Rutherfurd
564 | OMOTO Kenji
565 | Omry Yadan
566 | onlinejudge95
567 | Oren Held
568 | Oscar Benjamin
569 | Oz N Tiram
570 | Pachwenko
571 | Patrick Dubroy
572 | Patrick Jenkins
573 | Patrick Lawson
574 | patricktokeeffe
575 | Patrik Kopkan
576 | Paul Ganssle
577 | Paul Kehrer
578 | Paul Moore
579 | Paul Nasrat
580 | Paul Oswald
581 | Paul van der Linden
582 | Paulus Schoutsen
583 | Pavel Safronov
584 | Pavithra Eswaramoorthy
585 | Pawel Jasinski
586 | Paweł Szramowski
587 | Pekka Klärck
588 | Peter Gessler
589 | Peter Lisák
590 | Peter Shen
591 | Peter Waller
592 | Petr Viktorin
593 | petr-tik
594 | Phaneendra Chiruvella
595 | Phil Elson
596 | Phil Freo
597 | Phil Pennock
598 | Phil Whelan
599 | Philip Jägenstedt
600 | Philip Molloy
601 | Philippe Ombredanne
602 | Pi Delport
603 | Pierre-Yves Rofes
604 | Pieter Degroote
605 | pip
606 | Prabakaran Kumaresshan
607 | Prabhjyotsing Surjit Singh Sodhi
608 | Prabhu Marappan
609 | Pradyun Gedam
610 | Prashant Sharma
611 | Pratik Mallya
612 | pre-commit-ci[bot]
613 | Preet Thakkar
614 | Preston Holmes
615 | Przemek Wrzos
616 | Pulkit Goyal
617 | q0w
618 | Qiangning Hong
619 | Qiming Xu
620 | Quentin Lee
621 | Quentin Pradet
622 | R. David Murray
623 | Rafael Caricio
624 | Ralf Schmitt
625 | Ran Benita
626 | Razzi Abuissa
627 | rdb
628 | Reece Dunham
629 | Remi Rampin
630 | Rene Dudfield
631 | Riccardo Magliocchetti
632 | Riccardo Schirone
633 | Richard Jones
634 | Richard Si
635 | Ricky Ng-Adam
636 | Rishi
637 | rmorotti
638 | RobberPhex
639 | Robert Collins
640 | Robert McGibbon
641 | Robert Pollak
642 | Robert T. McGibbon
643 | robin elisha robinson
644 | Roey Berman
645 | Rohan Jain
646 | Roman Bogorodskiy
647 | Roman Donchenko
648 | Romuald Brunet
649 | ronaudinho
650 | Ronny Pfannschmidt
651 | Rory McCann
652 | Ross Brattain
653 | Roy Wellington Ⅳ
654 | Ruairidh MacLeod
655 | Russell Keith-Magee
656 | Ryan Shepherd
657 | Ryan Wooden
658 | ryneeverett
659 | S. Guliaev
660 | Sachi King
661 | Salvatore Rinchiera
662 | sandeepkiran-js
663 | Sander Van Balen
664 | Savio Jomton
665 | schlamar
666 | Scott Kitterman
667 | Sean
668 | seanj
669 | Sebastian Jordan
670 | Sebastian Schaetz
671 | Segev Finer
672 | SeongSoo Cho
673 | Sergey Vasilyev
674 | Seth Michael Larson
675 | Seth Woodworth
676 | Shahar Epstein
677 | Shantanu
678 | shenxianpeng
679 | shireenrao
680 | Shivansh-007
681 | Shixian Sheng
682 | Shlomi Fish
683 | Shovan Maity
684 | Simeon Visser
685 | Simon Cross
686 | Simon Pichugin
687 | sinoroc
688 | sinscary
689 | snook92
690 | socketubs
691 | Sorin Sbarnea
692 | Srinivas Nyayapati
693 | Stavros Korokithakis
694 | Stefan Scherfke
695 | Stefano Rivera
696 | Stephan Erb
697 | Stephen Rosen
698 | stepshal
699 | Steve (Gadget) Barnes
700 | Steve Barnes
701 | Steve Dower
702 | Steve Kowalik
703 | Steven Myint
704 | Steven Silvester
705 | stonebig
706 | studioj
707 | Stéphane Bidoul
708 | Stéphane Bidoul (ACSONE)
709 | Stéphane Klein
710 | Sumana Harihareswara
711 | Surbhi Sharma
712 | Sviatoslav Sydorenko
713 | Sviatoslav Sydorenko (Святослав Сидоренко)
714 | Swat009
715 | Sylvain
716 | Takayuki SHIMIZUKAWA
717 | Taneli Hukkinen
718 | tbeswick
719 | Thiago
720 | Thijs Triemstra
721 | Thomas Fenzl
722 | Thomas Grainger
723 | Thomas Guettler
724 | Thomas Johansson
725 | Thomas Kluyver
726 | Thomas Smith
727 | Thomas VINCENT
728 | Tim D. Smith
729 | Tim Gates
730 | Tim Harder
731 | Tim Heap
732 | tim smith
733 | tinruufu
734 | Tobias Hermann
735 | Tom Forbes
736 | Tom Freudenheim
737 | Tom V
738 | Tomas Hrnciar
739 | Tomas Orsava
740 | Tomer Chachamu
741 | Tommi Enenkel | AnB
742 | Tomáš Hrnčiar
743 | Tony Beswick
744 | Tony Narlock
745 | Tony Zhaocheng Tan
746 | TonyBeswick
747 | toonarmycaptain
748 | Toshio Kuratomi
749 | toxinu
750 | Travis Swicegood
751 | Tushar Sadhwani
752 | Tzu-ping Chung
753 | Valentin Haenel
754 | Victor Stinner
755 | victorvpaulo
756 | Vikram - Google
757 | Viktor Szépe
758 | Ville Skyttä
759 | Vinay Sajip
760 | Vincent Philippon
761 | Vinicyus Macedo
762 | Vipul Kumar
763 | Vitaly Babiy
764 | Vladimir Fokow
765 | Vladimir Rutsky
766 | W. Trevor King
767 | Wil Tan
768 | Wilfred Hughes
769 | William Edwards
770 | William ML Leslie
771 | William T Olson
772 | William Woodruff
773 | Wilson Mo
774 | wim glenn
775 | Winson Luk
776 | Wolfgang Maier
777 | Wu Zhenyu
778 | XAMES3
779 | Xavier Fernandez
780 | Xianpeng Shen
781 | xoviat
782 | xtreak
783 | YAMAMOTO Takashi
784 | Yen Chi Hsuan
785 | Yeray Diaz Diaz
786 | Yoval P
787 | Yu Jian
788 | Yuan Jing Vincent Yan
789 | Yusuke Hayashi
790 | Zearin
791 | Zhiping Deng
792 | ziebam
793 | Zvezdan Petkovic
794 | Łukasz Langa
795 | Роман Донченко
796 | Семён Марьясин
797 | 
```

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

```python
  1 | """Base option parser setup"""
  2 | 
  3 | import logging
  4 | import optparse
  5 | import shutil
  6 | import sys
  7 | import textwrap
  8 | from contextlib import suppress
  9 | from typing import Any, Dict, Generator, List, Optional, Tuple
 10 | 
 11 | from pip._internal.cli.status_codes import UNKNOWN_ERROR
 12 | from pip._internal.configuration import Configuration, ConfigurationError
 13 | from pip._internal.utils.misc import redact_auth_from_url, strtobool
 14 | 
 15 | logger = logging.getLogger(__name__)
 16 | 
 17 | 
 18 | class PrettyHelpFormatter(optparse.IndentedHelpFormatter):
 19 |     """A prettier/less verbose help formatter for optparse."""
 20 | 
 21 |     def __init__(self, *args: Any, **kwargs: Any) -> None:
 22 |         # help position must be aligned with __init__.parseopts.description
 23 |         kwargs["max_help_position"] = 30
 24 |         kwargs["indent_increment"] = 1
 25 |         kwargs["width"] = shutil.get_terminal_size()[0] - 2
 26 |         super().__init__(*args, **kwargs)
 27 | 
 28 |     def format_option_strings(self, option: optparse.Option) -> str:
 29 |         return self._format_option_strings(option)
 30 | 
 31 |     def _format_option_strings(
 32 |         self, option: optparse.Option, mvarfmt: str = " <{}>", optsep: str = ", "
 33 |     ) -> str:
 34 |         """
 35 |         Return a comma-separated list of option strings and metavars.
 36 | 
 37 |         :param option:  tuple of (short opt, long opt), e.g: ('-f', '--format')
 38 |         :param mvarfmt: metavar format string
 39 |         :param optsep:  separator
 40 |         """
 41 |         opts = []
 42 | 
 43 |         if option._short_opts:
 44 |             opts.append(option._short_opts[0])
 45 |         if option._long_opts:
 46 |             opts.append(option._long_opts[0])
 47 |         if len(opts) > 1:
 48 |             opts.insert(1, optsep)
 49 | 
 50 |         if option.takes_value():
 51 |             assert option.dest is not None
 52 |             metavar = option.metavar or option.dest.lower()
 53 |             opts.append(mvarfmt.format(metavar.lower()))
 54 | 
 55 |         return "".join(opts)
 56 | 
 57 |     def format_heading(self, heading: str) -> str:
 58 |         if heading == "Options":
 59 |             return ""
 60 |         return heading + ":\n"
 61 | 
 62 |     def format_usage(self, usage: str) -> str:
 63 |         """
 64 |         Ensure there is only one newline between usage and the first heading
 65 |         if there is no description.
 66 |         """
 67 |         msg = "\nUsage: {}\n".format(self.indent_lines(textwrap.dedent(usage), "  "))
 68 |         return msg
 69 | 
 70 |     def format_description(self, description: Optional[str]) -> str:
 71 |         # leave full control over description to us
 72 |         if description:
 73 |             if hasattr(self.parser, "main"):
 74 |                 label = "Commands"
 75 |             else:
 76 |                 label = "Description"
 77 |             # some doc strings have initial newlines, some don't
 78 |             description = description.lstrip("\n")
 79 |             # some doc strings have final newlines and spaces, some don't
 80 |             description = description.rstrip()
 81 |             # dedent, then reindent
 82 |             description = self.indent_lines(textwrap.dedent(description), "  ")
 83 |             description = f"{label}:\n{description}\n"
 84 |             return description
 85 |         else:
 86 |             return ""
 87 | 
 88 |     def format_epilog(self, epilog: Optional[str]) -> str:
 89 |         # leave full control over epilog to us
 90 |         if epilog:
 91 |             return epilog
 92 |         else:
 93 |             return ""
 94 | 
 95 |     def indent_lines(self, text: str, indent: str) -> str:
 96 |         new_lines = [indent + line for line in text.split("\n")]
 97 |         return "\n".join(new_lines)
 98 | 
 99 | 
100 | class UpdatingDefaultsHelpFormatter(PrettyHelpFormatter):
101 |     """Custom help formatter for use in ConfigOptionParser.
102 | 
103 |     This is updates the defaults before expanding them, allowing
104 |     them to show up correctly in the help listing.
105 | 
106 |     Also redact auth from url type options
107 |     """
108 | 
109 |     def expand_default(self, option: optparse.Option) -> str:
110 |         default_values = None
111 |         if self.parser is not None:
112 |             assert isinstance(self.parser, ConfigOptionParser)
113 |             self.parser._update_defaults(self.parser.defaults)
114 |             assert option.dest is not None
115 |             default_values = self.parser.defaults.get(option.dest)
116 |         help_text = super().expand_default(option)
117 | 
118 |         if default_values and option.metavar == "URL":
119 |             if isinstance(default_values, str):
120 |                 default_values = [default_values]
121 | 
122 |             # If its not a list, we should abort and just return the help text
123 |             if not isinstance(default_values, list):
124 |                 default_values = []
125 | 
126 |             for val in default_values:
127 |                 help_text = help_text.replace(val, redact_auth_from_url(val))
128 | 
129 |         return help_text
130 | 
131 | 
132 | class CustomOptionParser(optparse.OptionParser):
133 |     def insert_option_group(
134 |         self, idx: int, *args: Any, **kwargs: Any
135 |     ) -> optparse.OptionGroup:
136 |         """Insert an OptionGroup at a given position."""
137 |         group = self.add_option_group(*args, **kwargs)
138 | 
139 |         self.option_groups.pop()
140 |         self.option_groups.insert(idx, group)
141 | 
142 |         return group
143 | 
144 |     @property
145 |     def option_list_all(self) -> List[optparse.Option]:
146 |         """Get a list of all options, including those in option groups."""
147 |         res = self.option_list[:]
148 |         for i in self.option_groups:
149 |             res.extend(i.option_list)
150 | 
151 |         return res
152 | 
153 | 
154 | class ConfigOptionParser(CustomOptionParser):
155 |     """Custom option parser which updates its defaults by checking the
156 |     configuration files and environmental variables"""
157 | 
158 |     def __init__(
159 |         self,
160 |         *args: Any,
161 |         name: str,
162 |         isolated: bool = False,
163 |         **kwargs: Any,
164 |     ) -> None:
165 |         self.name = name
166 |         self.config = Configuration(isolated)
167 | 
168 |         assert self.name
169 |         super().__init__(*args, **kwargs)
170 | 
171 |     def check_default(self, option: optparse.Option, key: str, val: Any) -> Any:
172 |         try:
173 |             return option.check_value(key, val)
174 |         except optparse.OptionValueError as exc:
175 |             print(f"An error occurred during configuration: {exc}")
176 |             sys.exit(3)
177 | 
178 |     def _get_ordered_configuration_items(
179 |         self,
180 |     ) -> Generator[Tuple[str, Any], None, None]:
181 |         # Configuration gives keys in an unordered manner. Order them.
182 |         override_order = ["global", self.name, ":env:"]
183 | 
184 |         # Pool the options into different groups
185 |         section_items: Dict[str, List[Tuple[str, Any]]] = {
186 |             name: [] for name in override_order
187 |         }
188 |         for section_key, val in self.config.items():
189 |             # ignore empty values
190 |             if not val:
191 |                 logger.debug(
192 |                     "Ignoring configuration key '%s' as it's value is empty.",
193 |                     section_key,
194 |                 )
195 |                 continue
196 | 
197 |             section, key = section_key.split(".", 1)
198 |             if section in override_order:
199 |                 section_items[section].append((key, val))
200 | 
201 |         # Yield each group in their override order
202 |         for section in override_order:
203 |             for key, val in section_items[section]:
204 |                 yield key, val
205 | 
206 |     def _update_defaults(self, defaults: Dict[str, Any]) -> Dict[str, Any]:
207 |         """Updates the given defaults with values from the config files and
208 |         the environ. Does a little special handling for certain types of
209 |         options (lists)."""
210 | 
211 |         # Accumulate complex default state.
212 |         self.values = optparse.Values(self.defaults)
213 |         late_eval = set()
214 |         # Then set the options with those values
215 |         for key, val in self._get_ordered_configuration_items():
216 |             # '--' because configuration supports only long names
217 |             option = self.get_option("--" + key)
218 | 
219 |             # Ignore options not present in this parser. E.g. non-globals put
220 |             # in [global] by users that want them to apply to all applicable
221 |             # commands.
222 |             if option is None:
223 |                 continue
224 | 
225 |             assert option.dest is not None
226 | 
227 |             if option.action in ("store_true", "store_false"):
228 |                 try:
229 |                     val = strtobool(val)
230 |                 except ValueError:
231 |                     self.error(
232 |                         f"{val} is not a valid value for {key} option, "
233 |                         "please specify a boolean value like yes/no, "
234 |                         "true/false or 1/0 instead."
235 |                     )
236 |             elif option.action == "count":
237 |                 with suppress(ValueError):
238 |                     val = strtobool(val)
239 |                 with suppress(ValueError):
240 |                     val = int(val)
241 |                 if not isinstance(val, int) or val < 0:
242 |                     self.error(
243 |                         f"{val} is not a valid value for {key} option, "
244 |                         "please instead specify either a non-negative integer "
245 |                         "or a boolean value like yes/no or false/true "
246 |                         "which is equivalent to 1/0."
247 |                     )
248 |             elif option.action == "append":
249 |                 val = val.split()
250 |                 val = [self.check_default(option, key, v) for v in val]
251 |             elif option.action == "callback":
252 |                 assert option.callback is not None
253 |                 late_eval.add(option.dest)
254 |                 opt_str = option.get_opt_string()
255 |                 val = option.convert_value(opt_str, val)
256 |                 # From take_action
257 |                 args = option.callback_args or ()
258 |                 kwargs = option.callback_kwargs or {}
259 |                 option.callback(option, opt_str, val, self, *args, **kwargs)
260 |             else:
261 |                 val = self.check_default(option, key, val)
262 | 
263 |             defaults[option.dest] = val
264 | 
265 |         for key in late_eval:
266 |             defaults[key] = getattr(self.values, key)
267 |         self.values = None
268 |         return defaults
269 | 
270 |     def get_default_values(self) -> optparse.Values:
271 |         """Overriding to make updating the defaults after instantiation of
272 |         the option parser possible, _update_defaults() does the dirty work."""
273 |         if not self.process_default_values:
274 |             # Old, pre-Optik 1.5 behaviour.
275 |             return optparse.Values(self.defaults)
276 | 
277 |         # Load the configuration, or error out in case of an error
278 |         try:
279 |             self.config.load()
280 |         except ConfigurationError as err:
281 |             self.exit(UNKNOWN_ERROR, str(err))
282 | 
283 |         defaults = self._update_defaults(self.defaults.copy())  # ours
284 |         for option in self._get_all_options():
285 |             assert option.dest is not None
286 |             default = defaults.get(option.dest)
287 |             if isinstance(default, str):
288 |                 opt_str = option.get_opt_string()
289 |                 defaults[option.dest] = option.check_value(opt_str, default)
290 |         return optparse.Values(defaults)
291 | 
292 |     def error(self, msg: str) -> None:
293 |         self.print_usage(sys.stderr)
294 |         self.exit(UNKNOWN_ERROR, f"{msg}\n")
295 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/distlib/resources.py:
--------------------------------------------------------------------------------

```python
  1 | # -*- coding: utf-8 -*-
  2 | #
  3 | # Copyright (C) 2013-2017 Vinay Sajip.
  4 | # Licensed to the Python Software Foundation under a contributor agreement.
  5 | # See LICENSE.txt and CONTRIBUTORS.txt.
  6 | #
  7 | from __future__ import unicode_literals
  8 | 
  9 | import bisect
 10 | import io
 11 | import logging
 12 | import os
 13 | import pkgutil
 14 | import sys
 15 | import types
 16 | import zipimport
 17 | 
 18 | from . import DistlibException
 19 | from .util import cached_property, get_cache_base, Cache
 20 | 
 21 | logger = logging.getLogger(__name__)
 22 | 
 23 | 
 24 | cache = None    # created when needed
 25 | 
 26 | 
 27 | class ResourceCache(Cache):
 28 |     def __init__(self, base=None):
 29 |         if base is None:
 30 |             # Use native string to avoid issues on 2.x: see Python #20140.
 31 |             base = os.path.join(get_cache_base(), str('resource-cache'))
 32 |         super(ResourceCache, self).__init__(base)
 33 | 
 34 |     def is_stale(self, resource, path):
 35 |         """
 36 |         Is the cache stale for the given resource?
 37 | 
 38 |         :param resource: The :class:`Resource` being cached.
 39 |         :param path: The path of the resource in the cache.
 40 |         :return: True if the cache is stale.
 41 |         """
 42 |         # Cache invalidation is a hard problem :-)
 43 |         return True
 44 | 
 45 |     def get(self, resource):
 46 |         """
 47 |         Get a resource into the cache,
 48 | 
 49 |         :param resource: A :class:`Resource` instance.
 50 |         :return: The pathname of the resource in the cache.
 51 |         """
 52 |         prefix, path = resource.finder.get_cache_info(resource)
 53 |         if prefix is None:
 54 |             result = path
 55 |         else:
 56 |             result = os.path.join(self.base, self.prefix_to_dir(prefix), path)
 57 |             dirname = os.path.dirname(result)
 58 |             if not os.path.isdir(dirname):
 59 |                 os.makedirs(dirname)
 60 |             if not os.path.exists(result):
 61 |                 stale = True
 62 |             else:
 63 |                 stale = self.is_stale(resource, path)
 64 |             if stale:
 65 |                 # write the bytes of the resource to the cache location
 66 |                 with open(result, 'wb') as f:
 67 |                     f.write(resource.bytes)
 68 |         return result
 69 | 
 70 | 
 71 | class ResourceBase(object):
 72 |     def __init__(self, finder, name):
 73 |         self.finder = finder
 74 |         self.name = name
 75 | 
 76 | 
 77 | class Resource(ResourceBase):
 78 |     """
 79 |     A class representing an in-package resource, such as a data file. This is
 80 |     not normally instantiated by user code, but rather by a
 81 |     :class:`ResourceFinder` which manages the resource.
 82 |     """
 83 |     is_container = False        # Backwards compatibility
 84 | 
 85 |     def as_stream(self):
 86 |         """
 87 |         Get the resource as a stream.
 88 | 
 89 |         This is not a property to make it obvious that it returns a new stream
 90 |         each time.
 91 |         """
 92 |         return self.finder.get_stream(self)
 93 | 
 94 |     @cached_property
 95 |     def file_path(self):
 96 |         global cache
 97 |         if cache is None:
 98 |             cache = ResourceCache()
 99 |         return cache.get(self)
100 | 
101 |     @cached_property
102 |     def bytes(self):
103 |         return self.finder.get_bytes(self)
104 | 
105 |     @cached_property
106 |     def size(self):
107 |         return self.finder.get_size(self)
108 | 
109 | 
110 | class ResourceContainer(ResourceBase):
111 |     is_container = True     # Backwards compatibility
112 | 
113 |     @cached_property
114 |     def resources(self):
115 |         return self.finder.get_resources(self)
116 | 
117 | 
118 | class ResourceFinder(object):
119 |     """
120 |     Resource finder for file system resources.
121 |     """
122 | 
123 |     if sys.platform.startswith('java'):
124 |         skipped_extensions = ('.pyc', '.pyo', '.class')
125 |     else:
126 |         skipped_extensions = ('.pyc', '.pyo')
127 | 
128 |     def __init__(self, module):
129 |         self.module = module
130 |         self.loader = getattr(module, '__loader__', None)
131 |         self.base = os.path.dirname(getattr(module, '__file__', ''))
132 | 
133 |     def _adjust_path(self, path):
134 |         return os.path.realpath(path)
135 | 
136 |     def _make_path(self, resource_name):
137 |         # Issue #50: need to preserve type of path on Python 2.x
138 |         # like os.path._get_sep
139 |         if isinstance(resource_name, bytes):    # should only happen on 2.x
140 |             sep = b'/'
141 |         else:
142 |             sep = '/'
143 |         parts = resource_name.split(sep)
144 |         parts.insert(0, self.base)
145 |         result = os.path.join(*parts)
146 |         return self._adjust_path(result)
147 | 
148 |     def _find(self, path):
149 |         return os.path.exists(path)
150 | 
151 |     def get_cache_info(self, resource):
152 |         return None, resource.path
153 | 
154 |     def find(self, resource_name):
155 |         path = self._make_path(resource_name)
156 |         if not self._find(path):
157 |             result = None
158 |         else:
159 |             if self._is_directory(path):
160 |                 result = ResourceContainer(self, resource_name)
161 |             else:
162 |                 result = Resource(self, resource_name)
163 |             result.path = path
164 |         return result
165 | 
166 |     def get_stream(self, resource):
167 |         return open(resource.path, 'rb')
168 | 
169 |     def get_bytes(self, resource):
170 |         with open(resource.path, 'rb') as f:
171 |             return f.read()
172 | 
173 |     def get_size(self, resource):
174 |         return os.path.getsize(resource.path)
175 | 
176 |     def get_resources(self, resource):
177 |         def allowed(f):
178 |             return (f != '__pycache__' and not
179 |                     f.endswith(self.skipped_extensions))
180 |         return set([f for f in os.listdir(resource.path) if allowed(f)])
181 | 
182 |     def is_container(self, resource):
183 |         return self._is_directory(resource.path)
184 | 
185 |     _is_directory = staticmethod(os.path.isdir)
186 | 
187 |     def iterator(self, resource_name):
188 |         resource = self.find(resource_name)
189 |         if resource is not None:
190 |             todo = [resource]
191 |             while todo:
192 |                 resource = todo.pop(0)
193 |                 yield resource
194 |                 if resource.is_container:
195 |                     rname = resource.name
196 |                     for name in resource.resources:
197 |                         if not rname:
198 |                             new_name = name
199 |                         else:
200 |                             new_name = '/'.join([rname, name])
201 |                         child = self.find(new_name)
202 |                         if child.is_container:
203 |                             todo.append(child)
204 |                         else:
205 |                             yield child
206 | 
207 | 
208 | class ZipResourceFinder(ResourceFinder):
209 |     """
210 |     Resource finder for resources in .zip files.
211 |     """
212 |     def __init__(self, module):
213 |         super(ZipResourceFinder, self).__init__(module)
214 |         archive = self.loader.archive
215 |         self.prefix_len = 1 + len(archive)
216 |         # PyPy doesn't have a _files attr on zipimporter, and you can't set one
217 |         if hasattr(self.loader, '_files'):
218 |             self._files = self.loader._files
219 |         else:
220 |             self._files = zipimport._zip_directory_cache[archive]
221 |         self.index = sorted(self._files)
222 | 
223 |     def _adjust_path(self, path):
224 |         return path
225 | 
226 |     def _find(self, path):
227 |         path = path[self.prefix_len:]
228 |         if path in self._files:
229 |             result = True
230 |         else:
231 |             if path and path[-1] != os.sep:
232 |                 path = path + os.sep
233 |             i = bisect.bisect(self.index, path)
234 |             try:
235 |                 result = self.index[i].startswith(path)
236 |             except IndexError:
237 |                 result = False
238 |         if not result:
239 |             logger.debug('_find failed: %r %r', path, self.loader.prefix)
240 |         else:
241 |             logger.debug('_find worked: %r %r', path, self.loader.prefix)
242 |         return result
243 | 
244 |     def get_cache_info(self, resource):
245 |         prefix = self.loader.archive
246 |         path = resource.path[1 + len(prefix):]
247 |         return prefix, path
248 | 
249 |     def get_bytes(self, resource):
250 |         return self.loader.get_data(resource.path)
251 | 
252 |     def get_stream(self, resource):
253 |         return io.BytesIO(self.get_bytes(resource))
254 | 
255 |     def get_size(self, resource):
256 |         path = resource.path[self.prefix_len:]
257 |         return self._files[path][3]
258 | 
259 |     def get_resources(self, resource):
260 |         path = resource.path[self.prefix_len:]
261 |         if path and path[-1] != os.sep:
262 |             path += os.sep
263 |         plen = len(path)
264 |         result = set()
265 |         i = bisect.bisect(self.index, path)
266 |         while i < len(self.index):
267 |             if not self.index[i].startswith(path):
268 |                 break
269 |             s = self.index[i][plen:]
270 |             result.add(s.split(os.sep, 1)[0])   # only immediate children
271 |             i += 1
272 |         return result
273 | 
274 |     def _is_directory(self, path):
275 |         path = path[self.prefix_len:]
276 |         if path and path[-1] != os.sep:
277 |             path += os.sep
278 |         i = bisect.bisect(self.index, path)
279 |         try:
280 |             result = self.index[i].startswith(path)
281 |         except IndexError:
282 |             result = False
283 |         return result
284 | 
285 | 
286 | _finder_registry = {
287 |     type(None): ResourceFinder,
288 |     zipimport.zipimporter: ZipResourceFinder
289 | }
290 | 
291 | try:
292 |     # In Python 3.6, _frozen_importlib -> _frozen_importlib_external
293 |     try:
294 |         import _frozen_importlib_external as _fi
295 |     except ImportError:
296 |         import _frozen_importlib as _fi
297 |     _finder_registry[_fi.SourceFileLoader] = ResourceFinder
298 |     _finder_registry[_fi.FileFinder] = ResourceFinder
299 |     # See issue #146
300 |     _finder_registry[_fi.SourcelessFileLoader] = ResourceFinder
301 |     del _fi
302 | except (ImportError, AttributeError):
303 |     pass
304 | 
305 | 
306 | def register_finder(loader, finder_maker):
307 |     _finder_registry[type(loader)] = finder_maker
308 | 
309 | 
310 | _finder_cache = {}
311 | 
312 | 
313 | def finder(package):
314 |     """
315 |     Return a resource finder for a package.
316 |     :param package: The name of the package.
317 |     :return: A :class:`ResourceFinder` instance for the package.
318 |     """
319 |     if package in _finder_cache:
320 |         result = _finder_cache[package]
321 |     else:
322 |         if package not in sys.modules:
323 |             __import__(package)
324 |         module = sys.modules[package]
325 |         path = getattr(module, '__path__', None)
326 |         if path is None:
327 |             raise DistlibException('You cannot get a finder for a module, '
328 |                                    'only for a package')
329 |         loader = getattr(module, '__loader__', None)
330 |         finder_maker = _finder_registry.get(type(loader))
331 |         if finder_maker is None:
332 |             raise DistlibException('Unable to locate finder for %r' % package)
333 |         result = finder_maker(module)
334 |         _finder_cache[package] = result
335 |     return result
336 | 
337 | 
338 | _dummy_module = types.ModuleType(str('__dummy__'))
339 | 
340 | 
341 | def finder_for_path(path):
342 |     """
343 |     Return a resource finder for a path, which should represent a container.
344 | 
345 |     :param path: The path.
346 |     :return: A :class:`ResourceFinder` instance for the path.
347 |     """
348 |     result = None
349 |     # calls any path hooks, gets importer into cache
350 |     pkgutil.get_importer(path)
351 |     loader = sys.path_importer_cache.get(path)
352 |     finder = _finder_registry.get(type(loader))
353 |     if finder:
354 |         module = _dummy_module
355 |         module.__file__ = os.path.join(path, '')
356 |         module.__loader__ = loader
357 |         result = finder(module)
358 |     return result
359 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/urllib3/fields.py:
--------------------------------------------------------------------------------

```python
  1 | from __future__ import annotations
  2 | 
  3 | import email.utils
  4 | import mimetypes
  5 | import typing
  6 | 
  7 | _TYPE_FIELD_VALUE = typing.Union[str, bytes]
  8 | _TYPE_FIELD_VALUE_TUPLE = typing.Union[
  9 |     _TYPE_FIELD_VALUE,
 10 |     typing.Tuple[str, _TYPE_FIELD_VALUE],
 11 |     typing.Tuple[str, _TYPE_FIELD_VALUE, str],
 12 | ]
 13 | 
 14 | 
 15 | def guess_content_type(
 16 |     filename: str | None, default: str = "application/octet-stream"
 17 | ) -> str:
 18 |     """
 19 |     Guess the "Content-Type" of a file.
 20 | 
 21 |     :param filename:
 22 |         The filename to guess the "Content-Type" of using :mod:`mimetypes`.
 23 |     :param default:
 24 |         If no "Content-Type" can be guessed, default to `default`.
 25 |     """
 26 |     if filename:
 27 |         return mimetypes.guess_type(filename)[0] or default
 28 |     return default
 29 | 
 30 | 
 31 | def format_header_param_rfc2231(name: str, value: _TYPE_FIELD_VALUE) -> str:
 32 |     """
 33 |     Helper function to format and quote a single header parameter using the
 34 |     strategy defined in RFC 2231.
 35 | 
 36 |     Particularly useful for header parameters which might contain
 37 |     non-ASCII values, like file names. This follows
 38 |     `RFC 2388 Section 4.4 <https://tools.ietf.org/html/rfc2388#section-4.4>`_.
 39 | 
 40 |     :param name:
 41 |         The name of the parameter, a string expected to be ASCII only.
 42 |     :param value:
 43 |         The value of the parameter, provided as ``bytes`` or `str``.
 44 |     :returns:
 45 |         An RFC-2231-formatted unicode string.
 46 | 
 47 |     .. deprecated:: 2.0.0
 48 |         Will be removed in urllib3 v2.1.0. This is not valid for
 49 |         ``multipart/form-data`` header parameters.
 50 |     """
 51 |     import warnings
 52 | 
 53 |     warnings.warn(
 54 |         "'format_header_param_rfc2231' is deprecated and will be "
 55 |         "removed in urllib3 v2.1.0. This is not valid for "
 56 |         "multipart/form-data header parameters.",
 57 |         DeprecationWarning,
 58 |         stacklevel=2,
 59 |     )
 60 | 
 61 |     if isinstance(value, bytes):
 62 |         value = value.decode("utf-8")
 63 | 
 64 |     if not any(ch in value for ch in '"\\\r\n'):
 65 |         result = f'{name}="{value}"'
 66 |         try:
 67 |             result.encode("ascii")
 68 |         except (UnicodeEncodeError, UnicodeDecodeError):
 69 |             pass
 70 |         else:
 71 |             return result
 72 | 
 73 |     value = email.utils.encode_rfc2231(value, "utf-8")
 74 |     value = f"{name}*={value}"
 75 | 
 76 |     return value
 77 | 
 78 | 
 79 | def format_multipart_header_param(name: str, value: _TYPE_FIELD_VALUE) -> str:
 80 |     """
 81 |     Format and quote a single multipart header parameter.
 82 | 
 83 |     This follows the `WHATWG HTML Standard`_ as of 2021/06/10, matching
 84 |     the behavior of current browser and curl versions. Values are
 85 |     assumed to be UTF-8. The ``\\n``, ``\\r``, and ``"`` characters are
 86 |     percent encoded.
 87 | 
 88 |     .. _WHATWG HTML Standard:
 89 |         https://html.spec.whatwg.org/multipage/
 90 |         form-control-infrastructure.html#multipart-form-data
 91 | 
 92 |     :param name:
 93 |         The name of the parameter, an ASCII-only ``str``.
 94 |     :param value:
 95 |         The value of the parameter, a ``str`` or UTF-8 encoded
 96 |         ``bytes``.
 97 |     :returns:
 98 |         A string ``name="value"`` with the escaped value.
 99 | 
100 |     .. versionchanged:: 2.0.0
101 |         Matches the WHATWG HTML Standard as of 2021/06/10. Control
102 |         characters are no longer percent encoded.
103 | 
104 |     .. versionchanged:: 2.0.0
105 |         Renamed from ``format_header_param_html5`` and
106 |         ``format_header_param``. The old names will be removed in
107 |         urllib3 v2.1.0.
108 |     """
109 |     if isinstance(value, bytes):
110 |         value = value.decode("utf-8")
111 | 
112 |     # percent encode \n \r "
113 |     value = value.translate({10: "%0A", 13: "%0D", 34: "%22"})
114 |     return f'{name}="{value}"'
115 | 
116 | 
117 | def format_header_param_html5(name: str, value: _TYPE_FIELD_VALUE) -> str:
118 |     """
119 |     .. deprecated:: 2.0.0
120 |         Renamed to :func:`format_multipart_header_param`. Will be
121 |         removed in urllib3 v2.1.0.
122 |     """
123 |     import warnings
124 | 
125 |     warnings.warn(
126 |         "'format_header_param_html5' has been renamed to "
127 |         "'format_multipart_header_param'. The old name will be "
128 |         "removed in urllib3 v2.1.0.",
129 |         DeprecationWarning,
130 |         stacklevel=2,
131 |     )
132 |     return format_multipart_header_param(name, value)
133 | 
134 | 
135 | def format_header_param(name: str, value: _TYPE_FIELD_VALUE) -> str:
136 |     """
137 |     .. deprecated:: 2.0.0
138 |         Renamed to :func:`format_multipart_header_param`. Will be
139 |         removed in urllib3 v2.1.0.
140 |     """
141 |     import warnings
142 | 
143 |     warnings.warn(
144 |         "'format_header_param' has been renamed to "
145 |         "'format_multipart_header_param'. The old name will be "
146 |         "removed in urllib3 v2.1.0.",
147 |         DeprecationWarning,
148 |         stacklevel=2,
149 |     )
150 |     return format_multipart_header_param(name, value)
151 | 
152 | 
153 | class RequestField:
154 |     """
155 |     A data container for request body parameters.
156 | 
157 |     :param name:
158 |         The name of this request field. Must be unicode.
159 |     :param data:
160 |         The data/value body.
161 |     :param filename:
162 |         An optional filename of the request field. Must be unicode.
163 |     :param headers:
164 |         An optional dict-like object of headers to initially use for the field.
165 | 
166 |     .. versionchanged:: 2.0.0
167 |         The ``header_formatter`` parameter is deprecated and will
168 |         be removed in urllib3 v2.1.0.
169 |     """
170 | 
171 |     def __init__(
172 |         self,
173 |         name: str,
174 |         data: _TYPE_FIELD_VALUE,
175 |         filename: str | None = None,
176 |         headers: typing.Mapping[str, str] | None = None,
177 |         header_formatter: typing.Callable[[str, _TYPE_FIELD_VALUE], str] | None = None,
178 |     ):
179 |         self._name = name
180 |         self._filename = filename
181 |         self.data = data
182 |         self.headers: dict[str, str | None] = {}
183 |         if headers:
184 |             self.headers = dict(headers)
185 | 
186 |         if header_formatter is not None:
187 |             import warnings
188 | 
189 |             warnings.warn(
190 |                 "The 'header_formatter' parameter is deprecated and "
191 |                 "will be removed in urllib3 v2.1.0.",
192 |                 DeprecationWarning,
193 |                 stacklevel=2,
194 |             )
195 |             self.header_formatter = header_formatter
196 |         else:
197 |             self.header_formatter = format_multipart_header_param
198 | 
199 |     @classmethod
200 |     def from_tuples(
201 |         cls,
202 |         fieldname: str,
203 |         value: _TYPE_FIELD_VALUE_TUPLE,
204 |         header_formatter: typing.Callable[[str, _TYPE_FIELD_VALUE], str] | None = None,
205 |     ) -> RequestField:
206 |         """
207 |         A :class:`~urllib3.fields.RequestField` factory from old-style tuple parameters.
208 | 
209 |         Supports constructing :class:`~urllib3.fields.RequestField` from
210 |         parameter of key/value strings AND key/filetuple. A filetuple is a
211 |         (filename, data, MIME type) tuple where the MIME type is optional.
212 |         For example::
213 | 
214 |             'foo': 'bar',
215 |             'fakefile': ('foofile.txt', 'contents of foofile'),
216 |             'realfile': ('barfile.txt', open('realfile').read()),
217 |             'typedfile': ('bazfile.bin', open('bazfile').read(), 'image/jpeg'),
218 |             'nonamefile': 'contents of nonamefile field',
219 | 
220 |         Field names and filenames must be unicode.
221 |         """
222 |         filename: str | None
223 |         content_type: str | None
224 |         data: _TYPE_FIELD_VALUE
225 | 
226 |         if isinstance(value, tuple):
227 |             if len(value) == 3:
228 |                 filename, data, content_type = value
229 |             else:
230 |                 filename, data = value
231 |                 content_type = guess_content_type(filename)
232 |         else:
233 |             filename = None
234 |             content_type = None
235 |             data = value
236 | 
237 |         request_param = cls(
238 |             fieldname, data, filename=filename, header_formatter=header_formatter
239 |         )
240 |         request_param.make_multipart(content_type=content_type)
241 | 
242 |         return request_param
243 | 
244 |     def _render_part(self, name: str, value: _TYPE_FIELD_VALUE) -> str:
245 |         """
246 |         Override this method to change how each multipart header
247 |         parameter is formatted. By default, this calls
248 |         :func:`format_multipart_header_param`.
249 | 
250 |         :param name:
251 |             The name of the parameter, an ASCII-only ``str``.
252 |         :param value:
253 |             The value of the parameter, a ``str`` or UTF-8 encoded
254 |             ``bytes``.
255 | 
256 |         :meta public:
257 |         """
258 |         return self.header_formatter(name, value)
259 | 
260 |     def _render_parts(
261 |         self,
262 |         header_parts: (
263 |             dict[str, _TYPE_FIELD_VALUE | None]
264 |             | typing.Sequence[tuple[str, _TYPE_FIELD_VALUE | None]]
265 |         ),
266 |     ) -> str:
267 |         """
268 |         Helper function to format and quote a single header.
269 | 
270 |         Useful for single headers that are composed of multiple items. E.g.,
271 |         'Content-Disposition' fields.
272 | 
273 |         :param header_parts:
274 |             A sequence of (k, v) tuples or a :class:`dict` of (k, v) to format
275 |             as `k1="v1"; k2="v2"; ...`.
276 |         """
277 |         iterable: typing.Iterable[tuple[str, _TYPE_FIELD_VALUE | None]]
278 | 
279 |         parts = []
280 |         if isinstance(header_parts, dict):
281 |             iterable = header_parts.items()
282 |         else:
283 |             iterable = header_parts
284 | 
285 |         for name, value in iterable:
286 |             if value is not None:
287 |                 parts.append(self._render_part(name, value))
288 | 
289 |         return "; ".join(parts)
290 | 
291 |     def render_headers(self) -> str:
292 |         """
293 |         Renders the headers for this request field.
294 |         """
295 |         lines = []
296 | 
297 |         sort_keys = ["Content-Disposition", "Content-Type", "Content-Location"]
298 |         for sort_key in sort_keys:
299 |             if self.headers.get(sort_key, False):
300 |                 lines.append(f"{sort_key}: {self.headers[sort_key]}")
301 | 
302 |         for header_name, header_value in self.headers.items():
303 |             if header_name not in sort_keys:
304 |                 if header_value:
305 |                     lines.append(f"{header_name}: {header_value}")
306 | 
307 |         lines.append("\r\n")
308 |         return "\r\n".join(lines)
309 | 
310 |     def make_multipart(
311 |         self,
312 |         content_disposition: str | None = None,
313 |         content_type: str | None = None,
314 |         content_location: str | None = None,
315 |     ) -> None:
316 |         """
317 |         Makes this request field into a multipart request field.
318 | 
319 |         This method overrides "Content-Disposition", "Content-Type" and
320 |         "Content-Location" headers to the request parameter.
321 | 
322 |         :param content_disposition:
323 |             The 'Content-Disposition' of the request body. Defaults to 'form-data'
324 |         :param content_type:
325 |             The 'Content-Type' of the request body.
326 |         :param content_location:
327 |             The 'Content-Location' of the request body.
328 | 
329 |         """
330 |         content_disposition = (content_disposition or "form-data") + "; ".join(
331 |             [
332 |                 "",
333 |                 self._render_parts(
334 |                     (("name", self._name), ("filename", self._filename))
335 |                 ),
336 |             ]
337 |         )
338 | 
339 |         self.headers["Content-Disposition"] = content_disposition
340 |         self.headers["Content-Type"] = content_type
341 |         self.headers["Content-Location"] = content_location
342 | 
```

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

```python
  1 | # cython: language_level=2
  2 | 
  3 | #
  4 | # ElementTree
  5 | # $Id: ElementPath.py 3375 2008-02-13 08:05:08Z fredrik $
  6 | #
  7 | # limited xpath support for element trees
  8 | #
  9 | # history:
 10 | # 2003-05-23 fl   created
 11 | # 2003-05-28 fl   added support for // etc
 12 | # 2003-08-27 fl   fixed parsing of periods in element names
 13 | # 2007-09-10 fl   new selection engine
 14 | # 2007-09-12 fl   fixed parent selector
 15 | # 2007-09-13 fl   added iterfind; changed findall to return a list
 16 | # 2007-11-30 fl   added namespaces support
 17 | # 2009-10-30 fl   added child element value filter
 18 | #
 19 | # Copyright (c) 2003-2009 by Fredrik Lundh.  All rights reserved.
 20 | #
 21 | # [email protected]
 22 | # http://www.pythonware.com
 23 | #
 24 | # --------------------------------------------------------------------
 25 | # The ElementTree toolkit is
 26 | #
 27 | # Copyright (c) 1999-2009 by Fredrik Lundh
 28 | #
 29 | # By obtaining, using, and/or copying this software and/or its
 30 | # associated documentation, you agree that you have read, understood,
 31 | # and will comply with the following terms and conditions:
 32 | #
 33 | # Permission to use, copy, modify, and distribute this software and
 34 | # its associated documentation for any purpose and without fee is
 35 | # hereby granted, provided that the above copyright notice appears in
 36 | # all copies, and that both that copyright notice and this permission
 37 | # notice appear in supporting documentation, and that the name of
 38 | # Secret Labs AB or the author not be used in advertising or publicity
 39 | # pertaining to distribution of the software without specific, written
 40 | # prior permission.
 41 | #
 42 | # SECRET LABS AB AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD
 43 | # TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANT-
 44 | # ABILITY AND FITNESS.  IN NO EVENT SHALL SECRET LABS AB OR THE AUTHOR
 45 | # BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
 46 | # DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 47 | # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
 48 | # ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
 49 | # OF THIS SOFTWARE.
 50 | # --------------------------------------------------------------------
 51 | 
 52 | ##
 53 | # Implementation module for XPath support.  There's usually no reason
 54 | # to import this module directly; the <b>ElementTree</b> does this for
 55 | # you, if needed.
 56 | ##
 57 | 
 58 | 
 59 | import re
 60 | 
 61 | xpath_tokenizer_re = re.compile(
 62 |     "("
 63 |     "'[^']*'|\"[^\"]*\"|"
 64 |     "::|"
 65 |     "//?|"
 66 |     r"\.\.|"
 67 |     r"\(\)|"
 68 |     r"[/.*:\[\]\(\)@=])|"
 69 |     r"((?:\{[^}]+\})?[^/\[\]\(\)@=\s]+)|"
 70 |     r"\s+"
 71 |     )
 72 | 
 73 | def xpath_tokenizer(pattern, namespaces=None, with_prefixes=True):
 74 |     # ElementTree uses '', lxml used None originally.
 75 |     default_namespace = (namespaces.get(None) or namespaces.get('')) if namespaces else None
 76 |     parsing_attribute = False
 77 |     for token in xpath_tokenizer_re.findall(pattern):
 78 |         ttype, tag = token
 79 |         if tag and tag[0] != "{":
 80 |             if ":" in tag and with_prefixes:
 81 |                 prefix, uri = tag.split(":", 1)
 82 |                 try:
 83 |                     if not namespaces:
 84 |                         raise KeyError
 85 |                     yield ttype, "{%s}%s" % (namespaces[prefix], uri)
 86 |                 except KeyError:
 87 |                     raise SyntaxError("prefix %r not found in prefix map" % prefix)
 88 |             elif default_namespace and not parsing_attribute:
 89 |                 yield ttype, "{%s}%s" % (default_namespace, tag)
 90 |             else:
 91 |                 yield token
 92 |             parsing_attribute = False
 93 |         else:
 94 |             yield token
 95 |             parsing_attribute = ttype == '@'
 96 | 
 97 | 
 98 | def prepare_child(next, token):
 99 |     tag = token[1]
100 |     def select(result):
101 |         for elem in result:
102 |             yield from elem.iterchildren(tag)
103 |     return select
104 | 
105 | def prepare_star(next, token):
106 |     def select(result):
107 |         for elem in result:
108 |             yield from elem.iterchildren('*')
109 |     return select
110 | 
111 | def prepare_self(next, token):
112 |     def select(result):
113 |         return result
114 |     return select
115 | 
116 | def prepare_descendant(next, token):
117 |     token = next()
118 |     if token[0] == "*":
119 |         tag = "*"
120 |     elif not token[0]:
121 |         tag = token[1]
122 |     else:
123 |         raise SyntaxError("invalid descendant")
124 |     def select(result):
125 |         for elem in result:
126 |             yield from elem.iterdescendants(tag)
127 |     return select
128 | 
129 | def prepare_parent(next, token):
130 |     def select(result):
131 |         for elem in result:
132 |             parent = elem.getparent()
133 |             if parent is not None:
134 |                 yield parent
135 |     return select
136 | 
137 | def prepare_predicate(next, token):
138 |     # FIXME: replace with real parser!!! refs:
139 |     # http://effbot.org/zone/simple-iterator-parser.htm
140 |     # http://javascript.crockford.com/tdop/tdop.html
141 |     signature = ''
142 |     predicate = []
143 |     while 1:
144 |         token = next()
145 |         if token[0] == "]":
146 |             break
147 |         if token == ('', ''):
148 |             # ignore whitespace
149 |             continue
150 |         if token[0] and token[0][:1] in "'\"":
151 |             token = "'", token[0][1:-1]
152 |         signature += token[0] or "-"
153 |         predicate.append(token[1])
154 | 
155 |     # use signature to determine predicate type
156 |     if signature == "@-":
157 |         # [@attribute] predicate
158 |         key = predicate[1]
159 |         def select(result):
160 |             for elem in result:
161 |                 if elem.get(key) is not None:
162 |                     yield elem
163 |         return select
164 |     if signature == "@-='":
165 |         # [@attribute='value']
166 |         key = predicate[1]
167 |         value = predicate[-1]
168 |         def select(result):
169 |             for elem in result:
170 |                 if elem.get(key) == value:
171 |                     yield elem
172 |         return select
173 |     if signature == "-" and not re.match(r"-?\d+$", predicate[0]):
174 |         # [tag]
175 |         tag = predicate[0]
176 |         def select(result):
177 |             for elem in result:
178 |                 for _ in elem.iterchildren(tag):
179 |                     yield elem
180 |                     break
181 |         return select
182 |     if signature == ".='" or (signature == "-='" and not re.match(r"-?\d+$", predicate[0])):
183 |         # [.='value'] or [tag='value']
184 |         tag = predicate[0]
185 |         value = predicate[-1]
186 |         if tag:
187 |             def select(result):
188 |                 for elem in result:
189 |                     for e in elem.iterchildren(tag):
190 |                         if "".join(e.itertext()) == value:
191 |                             yield elem
192 |                             break
193 |         else:
194 |             def select(result):
195 |                 for elem in result:
196 |                     if "".join(elem.itertext()) == value:
197 |                         yield elem
198 |         return select
199 |     if signature == "-" or signature == "-()" or signature == "-()-":
200 |         # [index] or [last()] or [last()-index]
201 |         if signature == "-":
202 |             # [index]
203 |             index = int(predicate[0]) - 1
204 |             if index < 0:
205 |                 if index == -1:
206 |                     raise SyntaxError(
207 |                         "indices in path predicates are 1-based, not 0-based")
208 |                 else:
209 |                     raise SyntaxError("path index >= 1 expected")
210 |         else:
211 |             if predicate[0] != "last":
212 |                 raise SyntaxError("unsupported function")
213 |             if signature == "-()-":
214 |                 try:
215 |                     index = int(predicate[2]) - 1
216 |                 except ValueError:
217 |                     raise SyntaxError("unsupported expression")
218 |             else:
219 |                 index = -1
220 |         def select(result):
221 |             for elem in result:
222 |                 parent = elem.getparent()
223 |                 if parent is None:
224 |                     continue
225 |                 try:
226 |                     # FIXME: what if the selector is "*" ?
227 |                     elems = list(parent.iterchildren(elem.tag))
228 |                     if elems[index] is elem:
229 |                         yield elem
230 |                 except IndexError:
231 |                     pass
232 |         return select
233 |     raise SyntaxError("invalid predicate")
234 | 
235 | ops = {
236 |     "": prepare_child,
237 |     "*": prepare_star,
238 |     ".": prepare_self,
239 |     "..": prepare_parent,
240 |     "//": prepare_descendant,
241 |     "[": prepare_predicate,
242 | }
243 | 
244 | 
245 | # --------------------------------------------------------------------
246 | 
247 | _cache = {}
248 | 
249 | 
250 | def _build_path_iterator(path, namespaces, with_prefixes=True):
251 |     """compile selector pattern"""
252 |     if path[-1:] == "/":
253 |         path += "*"  # implicit all (FIXME: keep this?)
254 | 
255 |     cache_key = (path,)
256 |     if namespaces:
257 |         # lxml originally used None for the default namespace but ElementTree uses the
258 |         # more convenient (all-strings-dict) empty string, so we support both here,
259 |         # preferring the more convenient '', as long as they aren't ambiguous.
260 |         if None in namespaces:
261 |             if '' in namespaces and namespaces[None] != namespaces['']:
262 |                 raise ValueError("Ambiguous default namespace provided: %r versus %r" % (
263 |                     namespaces[None], namespaces['']))
264 |             cache_key += (namespaces[None],) + tuple(sorted(
265 |                 item for item in namespaces.items() if item[0] is not None))
266 |         else:
267 |             cache_key += tuple(sorted(namespaces.items()))
268 | 
269 |     try:
270 |         return _cache[cache_key]
271 |     except KeyError:
272 |         pass
273 |     if len(_cache) > 100:
274 |         _cache.clear()
275 | 
276 |     if path[:1] == "/":
277 |         raise SyntaxError("cannot use absolute path on element")
278 |     stream = iter(xpath_tokenizer(path, namespaces, with_prefixes=with_prefixes))
279 |     try:
280 |         _next = stream.next
281 |     except AttributeError:
282 |         # Python 3
283 |         _next = stream.__next__
284 |     try:
285 |         token = _next()
286 |     except StopIteration:
287 |         raise SyntaxError("empty path expression")
288 |     selector = []
289 |     while 1:
290 |         try:
291 |             selector.append(ops[token[0]](_next, token))
292 |         except StopIteration:
293 |             raise SyntaxError("invalid path")
294 |         try:
295 |             token = _next()
296 |             if token[0] == "/":
297 |                 token = _next()
298 |         except StopIteration:
299 |             break
300 |     _cache[cache_key] = selector
301 |     return selector
302 | 
303 | 
304 | ##
305 | # Iterate over the matching nodes
306 | 
307 | def iterfind(elem, path, namespaces=None, with_prefixes=True):
308 |     selector = _build_path_iterator(path, namespaces, with_prefixes=with_prefixes)
309 |     result = iter((elem,))
310 |     for select in selector:
311 |         result = select(result)
312 |     return result
313 | 
314 | 
315 | ##
316 | # Find first matching object.
317 | 
318 | def find(elem, path, namespaces=None, with_prefixes=True):
319 |     it = iterfind(elem, path, namespaces, with_prefixes=with_prefixes)
320 |     try:
321 |         return next(it)
322 |     except StopIteration:
323 |         return None
324 | 
325 | 
326 | ##
327 | # Find all matching objects.
328 | 
329 | def findall(elem, path, namespaces=None, with_prefixes=True):
330 |     return list(iterfind(elem, path, namespaces))
331 | 
332 | 
333 | ##
334 | # Find text for first matching object.
335 | 
336 | def findtext(elem, path, default=None, namespaces=None, with_prefixes=True):
337 |     el = find(elem, path, namespaces, with_prefixes=with_prefixes)
338 |     if el is None:
339 |         return default
340 |     else:
341 |         return el.text or ''
342 | 
```
Page 41/168FirstPrevNextLast